Coverage Report

Created: 2026-08-14 06:45

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-nas_5gs.c
Line
Count
Source
1
/* packet-nas_5gs.c
2
 * Routines for Non-Access-Stratum (NAS) protocol for 5G System (5GS) dissection
3
 *
4
 * Copyright 2018-2025, Anders Broman <a.broman58@gmail.com>
5
 *
6
 * Wireshark - Network traffic analyzer
7
 * By Gerald Combs <gerald@wireshark.org>
8
 * Copyright 1998 Gerald Combs
9
 *
10
 * SPDX-License-Identifier: GPL-2.0-or-later
11
 *
12
 * References: 3GPP TS 24.501 19.7.0
13
 */
14
15
#include "config.h"
16
17
#include <epan/packet.h>
18
#include <epan/expert.h>
19
#include <epan/proto_data.h>
20
#include <epan/etypes.h>
21
#include <epan/exceptions.h>
22
#include <epan/show_exception.h>
23
#include <epan/to_str.h>
24
#include <epan/tfs.h>
25
#include <epan/unit_strings.h>
26
#include <epan/iana-info.h>
27
28
#include <wsutil/array.h>
29
#include <wsutil/pow2.h>
30
#include <wsutil/pint.h>
31
#include <wsutil/wsjson.h>
32
33
#include "packet-gsm_a_common.h"
34
#include "packet-media-type.h"
35
#include "packet-tcp.h"
36
37
void proto_register_nas_5gs(void);
38
void proto_reg_handoff_nas_5gs(void);
39
40
0
#define PFNAME "nas-5gs"
41
42
static bool g_nas_5gs_null_decipher;
43
enum {
44
    DECODE_USER_DATA_AS_NONE,
45
    DECODE_USER_DATA_AS_IP,
46
    DECODE_USER_DATA_AS_NON_IP,
47
    DECODE_USER_DATA_AS_ETHERNET
48
};
49
static const enum_val_t nas_5gs_user_data_container_as_vals[] = {
50
    {"none", "None", DECODE_USER_DATA_AS_NONE},
51
    {"ip", "IP", DECODE_USER_DATA_AS_IP},
52
    {"non_ip","Non IP", DECODE_USER_DATA_AS_NON_IP},
53
    {"ethernet","Ethernet", DECODE_USER_DATA_AS_ETHERNET},
54
    {NULL, NULL, -1}
55
};
56
static int g_nas_5gs_decode_user_data_container_as = DECODE_USER_DATA_AS_NONE;
57
static const char *g_nas_5gs_non_ip_data_dissector = "";
58
59
static int dissect_nas_5gs_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, void* data);
60
static int dissect_nas_5gs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data);
61
static uint16_t de_nas_5gs_mm_pdu_ses_id_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_);
62
static uint16_t de_nas_5gs_cmn_add_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_);
63
static void nas_5gs_mm_5gmm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len);
64
static uint16_t de_nas_5gs_mm_req_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len _U_, char *add_string _U_, int string_len _U_);
65
static uint16_t de_nas_5gs_mm_sor_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len, char *add_string _U_, int string_len _U_);
66
67
static dissector_handle_t nas_5gs_handle;
68
static dissector_handle_t eap_handle;
69
static dissector_handle_t nas_eps_handle;
70
static dissector_handle_t lpp_handle;
71
static dissector_handle_t gsm_a_dtap_handle;
72
static dissector_handle_t ipv4_handle;
73
static dissector_handle_t ipv6_handle;
74
static dissector_handle_t non_ip_data_handle;
75
static dissector_handle_t ethernet_handle;
76
77
static int proto_json;
78
79
static int proto_nas_5gs;
80
81
int hf_nas_5gs_common_elem_id;
82
int hf_nas_5gs_mm_elem_id;
83
int hf_nas_5gs_sm_elem_id;
84
int hf_nas_5gs_updp_elem_id;
85
86
static int hf_nas_5gs_epd;
87
static int hf_nas_5gs_spare_bits;
88
static int hf_nas_5gs_spare_b7;
89
static int hf_nas_5gs_spare_b6;
90
static int hf_nas_5gs_spare_b5;
91
static int hf_nas_5gs_spare_b4;
92
static int hf_nas_5gs_spare_b3;
93
static int hf_nas_5gs_spare_b2;
94
static int hf_nas_5gs_spare_b1;
95
static int hf_nas_5gs_spare_b0;
96
static int hf_nas_5gs_rfu_b2;
97
static int hf_nas_5gs_rfu_b1;
98
static int hf_nas_5gs_rfu_b0;
99
static int hf_nas_5gs_security_header_type;
100
static int hf_nas_5gs_msg_auth_code;
101
static int hf_nas_5gs_seq_no;
102
static int hf_nas_5gs_ciphered_msg;
103
static int hf_nas_5gs_mm_msg_type;
104
static int hf_nas_5gs_sm_msg_type;
105
static int hf_nas_5gs_updp_msg_type;
106
static int hf_nas_5gs_proc_trans_id;
107
static int hf_nas_5gs_spare_half_octet;
108
static int hf_nas_5gs_spare_octet;
109
static int hf_nas_5gs_pdu_session_id;
110
static int hf_nas_5gs_msg_elems;
111
static int hf_nas_5gs_mm_for;
112
static int hf_nas_5gs_cmn_add_info;
113
static int hf_nas_5gs_cmn_acc_type;
114
static int hf_nas_5gs_cmn_dnn;
115
static int hf_nas_5gs_cmn_service_level_aa_param_type;
116
static int hf_nas_5gs_cmn_service_level_aa_param_len;
117
static int hf_nas_5gs_cmn_service_level_aa_param_device_id;
118
static int hf_nas_5gs_cmn_service_level_aa_param_addr_type;
119
static int hf_nas_5gs_cmn_service_level_aa_param_addr_ipv4;
120
static int hf_nas_5gs_cmn_service_level_aa_param_addr_ipv6;
121
static int hf_nas_5gs_cmn_service_level_aa_param_addr_fqdn;
122
static int hf_nas_5gs_cmn_service_level_aa_param_resp_c2ar;
123
static int hf_nas_5gs_cmn_service_level_aa_param_resp_slar;
124
static int hf_nas_5gs_cmn_service_level_aa_param_payload_type;
125
static int hf_nas_5gs_cmn_service_level_aa_param_payload;
126
static int hf_nas_5gs_cmn_service_level_aa_param_pending_ind_slapi;
127
static int hf_nas_5gs_cmn_service_level_aa_param_service_status_ind_uas;
128
static int hf_nas_5gs_cmn_service_level_aa_param_unknown;
129
static int hf_nas_5gs_mm_sms_requested;
130
static int hf_nas_5gs_mm_ng_ran_rcu;
131
static int hf_nas_5gs_mm_5gs_pnb_ciot;
132
static int hf_nas_5gs_mm_eps_pnb_ciot;
133
static int hf_nas_5gs_mm_5gs_reg_type;
134
static int hf_nas_5gs_mm_tsc;
135
static int hf_nas_5gs_mm_nas_key_set_id;
136
static int hf_nas_5gs_mm_tsc_h1;
137
static int hf_nas_5gs_mm_nas_key_set_id_h1;
138
static int hf_nas_5gs_mm_5gmm_cause;
139
static int hf_nas_5gs_mm_pld_cont_type;
140
static int hf_nas_5gs_mm_sst;
141
static int hf_nas_5gs_mm_sd;
142
static int hf_nas_5gs_mm_mapped_hplmn_sst;
143
static int hf_nas_5gs_mm_mapped_hplmn_ssd;
144
static int hf_nas_5gs_mm_switch_off;
145
static int hf_nas_5gs_mm_re_reg_req;
146
static int hf_nas_5gs_mm_acc_type;
147
static int hf_nas_5gs_mm_raai_b0;
148
static int hf_nas_5gs_mm_sprti_b1;
149
static int hf_nas_5gs_mm_ma_pdu_session_info_value;
150
static int hf_nas_5gs_mm_len_of_mapped_s_nssai;
151
static int hf_nas_5gs_mm_conf_upd_ind_ack_b0;
152
static int hf_nas_5gs_mm_conf_upd_ind_red_b1;
153
static int hf_nas_5gs_mm_cag_info_entry_len;
154
static int hf_nas_5gs_mm_cag_info_entry_cag_only;
155
static int hf_nas_5gs_mm_cag_info_entry_lci;
156
static int hf_nas_5gs_mm_cag_info_entry_caili;
157
static int hf_nas_5gs_mm_cag_info_entry_cag_without_add_info_list_len;
158
static int hf_nas_5gs_mm_cag_info_entry_cag_with_add_info_list_len;
159
static int hf_nas_5gs_mm_cag_info_entry_cag_with_add_info_len;
160
static int hf_nas_5gs_mm_cag_info_entry_cag_id;
161
static int hf_nas_5gs_mm_cag_info_entry_svii;
162
static int hf_nas_5gs_mm_cag_info_entry_tvii;
163
static int hf_nas_5gs_mm_cag_info_entry_nb_time_periods;
164
static int hf_nas_5gs_mm_cag_info_entry_time_period;
165
static int hf_nas_5gs_mm_ciot_small_data_cont_data_type;
166
static int hf_nas_5gs_mm_ciot_small_data_cont_ddx;
167
static int hf_nas_5gs_mm_ciot_small_data_cont_pdu_session_id;
168
static int hf_nas_5gs_mm_ciot_small_data_cont_add_info_len;
169
static int hf_nas_5gs_mm_ciot_small_data_cont_add_info;
170
static int hf_nas_5gs_mm_ciot_small_data_cont_data_contents;
171
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_1;
172
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_2;
173
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_3;
174
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_4;
175
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_5;
176
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_6;
177
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_7;
178
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_8;
179
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_1;
180
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_2;
181
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_3;
182
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_4;
183
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_5;
184
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_6;
185
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_7;
186
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_8;
187
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_9;
188
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_10;
189
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_11;
190
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_12;
191
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_13;
192
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_14;
193
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_15;
194
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_16;
195
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_17;
196
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_18;
197
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_19;
198
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_20;
199
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_21;
200
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_22;
201
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_23;
202
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_24;
203
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_25;
204
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_3_1;
205
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_4_1;
206
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_5_1;
207
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_9;
208
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_10;
209
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_17a;
210
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_18a;
211
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_20a;
212
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_26;
213
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_27;
214
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_11;
215
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_12;
216
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_1;
217
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_2;
218
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_3;
219
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_4;
220
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_5;
221
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_6;
222
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_7;
223
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_8;
224
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_1;
225
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_2;
226
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_3;
227
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_4;
228
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_5;
229
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_6;
230
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_7;
231
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_8;
232
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_9;
233
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_10;
234
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_11;
235
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_12;
236
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_13;
237
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_14;
238
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_15;
239
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_16;
240
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_17;
241
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_18;
242
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_19;
243
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_20;
244
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_21;
245
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_22;
246
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_23;
247
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_3_1;
248
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_4_1;
249
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_5_1;
250
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_1;
251
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_2;
252
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_3;
253
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_4;
254
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_5;
255
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_6;
256
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_9;
257
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_10;
258
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_24;
259
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_25;
260
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_17a;
261
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_18a;
262
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_20a;
263
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_26;
264
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_27;
265
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_11;
266
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_12;
267
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_7;
268
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_1;
269
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_2;
270
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_3;
271
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_4;
272
static int hf_nas_5gs_mm_ciph_key_data_ciphering_set_id;
273
static int hf_nas_5gs_mm_ciph_key_data_ciphering_key;
274
static int hf_nas_5gs_mm_ciph_key_data_c0_len;
275
static int hf_nas_5gs_mm_ciph_key_data_c0;
276
static int hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_len;
277
static int hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_len;
278
static int hf_nas_5gs_mm_ciph_key_data_validity_start_time;
279
static int hf_nas_5gs_mm_ciph_key_data_validity_duration;
280
static int hf_nas_5gs_mm_ciph_key_data_tais_list_len;
281
static int hf_nas_5gs_mm_ctrl_plane_serv_type;
282
static int hf_nas_5gs_mm_nas_sec_algo_enc;
283
static int hf_nas_5gs_mm_nas_sec_algo_ip;
284
static int hf_nas_5gs_mm_s1_mode_b0;
285
static int hf_nas_5gs_mm_ho_attach_b1;
286
static int hf_nas_5gs_mm_lpp_cap_b2;
287
static int hf_nas_5gs_mm_restrict_ec_b3;
288
static int hf_nas_5gs_mm_5g_cp_ciot_b4;
289
static int hf_nas_5gs_mm_n3_data_b5;
290
static int hf_nas_5gs_mm_5g_iphc_cp_ciot_b6;
291
static int hf_nas_5gs_mm_sgc_b7;
292
static int hf_nas_5gs_mm_5g_srvcc_b0;
293
static int hf_nas_5gs_mm_5g_up_ciot_b1;
294
static int hf_nas_5gs_mm_v2x_b2;
295
static int hf_nas_5gs_mm_v2xcepc5_b3;
296
static int hf_nas_5gs_mm_v2xcnpc5_b4;
297
static int hf_nas_5gs_mm_5g_lcs_b5;
298
static int hf_nas_5gs_mm_nssaa_b6;
299
static int hf_nas_5gs_mm_racs_b7;
300
static int hf_nas_5gs_mm_cag_b0;
301
static int hf_nas_5gs_mm_wsusa_b1;
302
static int hf_nas_5gs_mm_multiple_up_b2;
303
static int hf_nas_5gs_mm_5g_ehc_cp_ciot_b3;
304
static int hf_nas_5gs_mm_er_nssai_b4;
305
static int hf_nas_5gs_mm_5g_prose_dd_b5;
306
static int hf_nas_5gs_mm_5g_prose_dc_b6;
307
static int hf_nas_5gs_mm_5g_prose_l2relay_b7;
308
static int hf_nas_5gs_mm_5g_prose_l3relay_b0;
309
static int hf_nas_5gs_mm_5g_prose_l2rmt_b1;
310
static int hf_nas_5gs_mm_5g_prose_l3rmt_b2;
311
static int hf_nas_5gs_mm_nr_pssi_b3;
312
static int hf_nas_5gs_mm_ncr_b4;
313
static int hf_nas_5gs_mm_piv_b5;
314
static int hf_nas_5gs_mm_rpr_b6;
315
static int hf_nas_5gs_mm_pr_b7;
316
static int hf_nas_5gs_mm_nssrg_b0;
317
static int hf_nas_5gs_mm_mint_b1;
318
static int hf_nas_5gs_mm_event_notif_b2;
319
static int hf_nas_5gs_mm_ssnpnsi_b3;
320
static int hf_nas_5gs_mm_ex_cag_b4;
321
static int hf_nas_5gs_mm_nsag_b5;
322
static int hf_nas_5gs_mm_uas_b6;
323
static int hf_nas_5gs_mm_mpsiu_b7;
324
static int hf_nas_5gs_mm_rcmap_b0;
325
static int hf_nas_5gs_mm_rcman_b1;
326
static int hf_nas_5gs_mm_esi_b2;
327
static int hf_nas_5gs_mm_eci_b3;
328
static int hf_nas_5gs_mm_rantiming_b4;
329
static int hf_nas_5gs_mm_ladn_ds_b5;
330
static int hf_nas_5gs_mm_nsr_b6;
331
static int hf_nas_5gs_mm_sbts_b7;
332
static int hf_nas_5gs_mm_a2xepc5_b0;
333
static int hf_nas_5gs_mm_a2xnpc5_b1;
334
static int hf_nas_5gs_mm_un_per_b2;
335
static int hf_nas_5gs_mm_sbns_b3;
336
static int hf_nas_5gs_mm_rslps_b4;
337
static int hf_nas_5gs_mm_5g_prose_l2u2u_relay_b5;
338
static int hf_nas_5gs_mm_5g_prose_l3u2u_relay_b6;
339
static int hf_nas_5gs_mm_5g_prose_l2end_b7;
340
static int hf_nas_5gs_mm_5g_prose_l3end_b0;
341
static int hf_nas_5gs_mm_rslp_b1;
342
static int hf_nas_5gs_mm_pns_b2;
343
static int hf_nas_5gs_mm_lcs_upp_b3;
344
static int hf_nas_5gs_mm_supl_b4;
345
static int hf_nas_5gs_mm_tempns_b5;
346
static int hf_nas_5gs_mm_slvi_b6;
347
static int hf_nas_5gs_mm_a2x_uu_b7;
348
static int hf_nas_5gs_mm_mcsiu_b0;
349
static int hf_nas_5gs_mm_nvl_satnr_b1;
350
static int hf_nas_5gs_rslpl_b2;
351
static int hf_nas_5gs_nsuc_b3;
352
static int hf_nas_5gs_rslpvu_b4;
353
static int hf_nas_5gs_rslppu_b5;
354
static int hf_nas_5gs_atuc_b6;
355
static int hf_nas_5gs_lp_wuspsai_si_b7;
356
static int hf_nas_5gs_ophpae_b0;
357
static int hf_nas_5gs_5g_prose_mci_b1;
358
static int hf_nas_5gs_mlcsup_b2;
359
static int hf_nas_5gs_5g_prose_l3imrelay_b3;
360
static int hf_nas_5gs_5g_prose_l2imrelay_b4;
361
static int hf_nas_5gs_mint_eps_b5;
362
static int hf_nas_5gs_ef5l_b6;
363
static int hf_nas_5gs_lwd_b7;
364
static int hf_nas_5gs_nonsatlsp_b0;
365
static int hf_nas_5gs_mm_type_id;
366
static int hf_nas_5gs_mm_odd_even;
367
static int hf_nas_5gs_mm_length;
368
static int hf_nas_5gs_mm_pld_cont;
369
static int hf_nas_5gs_mm_pld_cont_event_notif_ind_nb;
370
static int hf_nas_5gs_mm_pld_cont_event_notif_ind_type;
371
static int hf_nas_5gs_mm_pld_cont_event_notif_ind_len;
372
static int hf_nas_5gs_mm_pld_cont_event_notif_ind_val;
373
static int hf_nas_5gs_mm_pld_cont_nb_entries;
374
static int hf_nas_5gs_mm_pld_cont_pld_cont_len;
375
static int hf_nas_5gs_mm_pld_cont_nb_opt_ies;
376
static int hf_nas_5gs_mm_pld_cont_pld_cont_type;
377
static int hf_nas_5gs_mm_pld_cont_opt_ie_type;
378
static int hf_nas_5gs_mm_pld_cont_opt_ie_len;
379
static int hf_nas_5gs_mm_pld_cont_opt_ie_val;
380
static int hf_nas_5gs_mm_req_type;
381
static int hf_nas_5gs_mm_serv_type;
382
static int hf_nas_5gs_mm_5g_ea0;
383
static int hf_nas_5gs_mm_128_5g_ea1;
384
static int hf_nas_5gs_mm_128_5g_ea2;
385
static int hf_nas_5gs_mm_128_5g_ea3;
386
static int hf_nas_5gs_mm_5g_ea4;
387
static int hf_nas_5gs_mm_5g_ea5;
388
static int hf_nas_5gs_mm_5g_ea6;
389
static int hf_nas_5gs_mm_5g_ea7;
390
static int hf_nas_5gs_mm_5g_ia0;
391
static int hf_nas_5gs_mm_5g_128_ia1;
392
static int hf_nas_5gs_mm_5g_128_ia2;
393
static int hf_nas_5gs_mm_5g_128_ia3;
394
static int hf_nas_5gs_mm_5g_ia4;
395
static int hf_nas_5gs_mm_5g_ia5;
396
static int hf_nas_5gs_mm_5g_ia6;
397
static int hf_nas_5gs_mm_5g_ia7;
398
static int hf_nas_5gs_mm_eea0;
399
static int hf_nas_5gs_mm_128eea1;
400
static int hf_nas_5gs_mm_128eea2;
401
static int hf_nas_5gs_mm_eea3;
402
static int hf_nas_5gs_mm_eea4;
403
static int hf_nas_5gs_mm_eea5;
404
static int hf_nas_5gs_mm_eea6;
405
static int hf_nas_5gs_mm_eea7;
406
static int hf_nas_5gs_mm_eia0;
407
static int hf_nas_5gs_mm_128eia1;
408
static int hf_nas_5gs_mm_128eia2;
409
static int hf_nas_5gs_mm_eia3;
410
static int hf_nas_5gs_mm_eia4;
411
static int hf_nas_5gs_mm_eia5;
412
static int hf_nas_5gs_mm_eia6;
413
static int hf_nas_5gs_mm_eia7;
414
static int hf_nas_5gs_mm_n1_mode_reg_b1;
415
static int hf_nas_5gs_mm_s1_mode_reg_b0;
416
417
static int hf_nas_5gs_mm_sal_al_t;
418
static int hf_nas_5gs_mm_sal_t_li;
419
static int hf_nas_5gs_mm_sal_num_e;
420
421
static int hf_nas_5gs_pdu_ses_sts_psi_7_b7;
422
static int hf_nas_5gs_pdu_ses_sts_psi_6_b6;
423
static int hf_nas_5gs_pdu_ses_sts_psi_5_b5;
424
static int hf_nas_5gs_pdu_ses_sts_psi_4_b4;
425
static int hf_nas_5gs_pdu_ses_sts_psi_3_b3;
426
static int hf_nas_5gs_pdu_ses_sts_psi_2_b2;
427
static int hf_nas_5gs_pdu_ses_sts_psi_1_b1;
428
static int hf_nas_5gs_pdu_ses_sts_psi_0_b0;
429
430
static int hf_nas_5gs_pdu_ses_sts_psi_15_b7;
431
static int hf_nas_5gs_pdu_ses_sts_psi_14_b6;
432
static int hf_nas_5gs_pdu_ses_sts_psi_13_b5;
433
static int hf_nas_5gs_pdu_ses_sts_psi_12_b4;
434
static int hf_nas_5gs_pdu_ses_sts_psi_11_b3;
435
static int hf_nas_5gs_pdu_ses_sts_psi_10_b2;
436
static int hf_nas_5gs_pdu_ses_sts_psi_9_b1;
437
static int hf_nas_5gs_pdu_ses_sts_psi_8_b0;
438
439
static int hf_nas_5gs_pdu_ses_rect_res_psi_7_b7;
440
static int hf_nas_5gs_pdu_ses_rect_res_psi_6_b6;
441
static int hf_nas_5gs_pdu_ses_rect_res_psi_5_b5;
442
static int hf_nas_5gs_pdu_ses_rect_res_psi_4_b4;
443
static int hf_nas_5gs_pdu_ses_rect_res_psi_3_b3;
444
static int hf_nas_5gs_pdu_ses_rect_res_psi_2_b2;
445
static int hf_nas_5gs_pdu_ses_rect_res_psi_1_b1;
446
static int hf_nas_5gs_pdu_ses_rect_res_psi_0_b0;
447
448
static int hf_nas_5gs_pdu_ses_rect_res_psi_15_b7;
449
static int hf_nas_5gs_pdu_ses_rect_res_psi_14_b6;
450
static int hf_nas_5gs_pdu_ses_rect_res_psi_13_b5;
451
static int hf_nas_5gs_pdu_ses_rect_res_psi_12_b4;
452
static int hf_nas_5gs_pdu_ses_rect_res_psi_11_b3;
453
static int hf_nas_5gs_pdu_ses_rect_res_psi_10_b2;
454
static int hf_nas_5gs_pdu_ses_rect_res_psi_9_b1;
455
static int hf_nas_5gs_pdu_ses_rect_res_psi_8_b0;
456
457
static int hf_nas_5gs_ul_data_sts_psi_7_b7;
458
static int hf_nas_5gs_ul_data_sts_psi_6_b6;
459
static int hf_nas_5gs_ul_data_sts_psi_5_b5;
460
static int hf_nas_5gs_ul_data_sts_psi_4_b4;
461
static int hf_nas_5gs_ul_data_sts_psi_3_b3;
462
static int hf_nas_5gs_ul_data_sts_psi_2_b2;
463
static int hf_nas_5gs_ul_data_sts_psi_1_b1;
464
static int hf_nas_5gs_ul_data_sts_psi_0_b0;
465
466
static int hf_nas_5gs_ul_data_sts_psi_15_b7;
467
static int hf_nas_5gs_ul_data_sts_psi_14_b6;
468
static int hf_nas_5gs_ul_data_sts_psi_13_b5;
469
static int hf_nas_5gs_ul_data_sts_psi_12_b4;
470
static int hf_nas_5gs_ul_data_sts_psi_11_b3;
471
static int hf_nas_5gs_ul_data_sts_psi_10_b2;
472
static int hf_nas_5gs_ul_data_sts_psi_9_b1;
473
static int hf_nas_5gs_ul_data_sts_psi_8_b0;
474
475
static int hf_nas_5gs_allow_pdu_ses_sts_psi_7_b7;
476
static int hf_nas_5gs_allow_pdu_ses_sts_psi_6_b6;
477
static int hf_nas_5gs_allow_pdu_ses_sts_psi_5_b5;
478
static int hf_nas_5gs_allow_pdu_ses_sts_psi_4_b4;
479
static int hf_nas_5gs_allow_pdu_ses_sts_psi_3_b3;
480
static int hf_nas_5gs_allow_pdu_ses_sts_psi_2_b2;
481
static int hf_nas_5gs_allow_pdu_ses_sts_psi_1_b1;
482
static int hf_nas_5gs_allow_pdu_ses_sts_psi_0_b0;
483
484
static int hf_nas_5gs_allow_pdu_ses_sts_psi_15_b7;
485
static int hf_nas_5gs_allow_pdu_ses_sts_psi_14_b6;
486
static int hf_nas_5gs_allow_pdu_ses_sts_psi_13_b5;
487
static int hf_nas_5gs_allow_pdu_ses_sts_psi_12_b4;
488
static int hf_nas_5gs_allow_pdu_ses_sts_psi_11_b3;
489
static int hf_nas_5gs_allow_pdu_ses_sts_psi_10_b2;
490
static int hf_nas_5gs_allow_pdu_ses_sts_psi_9_b1;
491
static int hf_nas_5gs_allow_pdu_ses_sts_psi_8_b0;
492
493
static int hf_nas_5gs_sm_pdu_session_type;
494
static int hf_nas_5gs_sm_sc_mode;
495
static int hf_nas_5gs_sm_eplmnc;
496
static int hf_nas_5gs_sm_ratc;
497
static int hf_nas_5gs_sm_naps;
498
static int hf_nas_5gs_sm_ept_s1;
499
static int hf_nas_5gs_sm_catbo;
500
static int hf_nas_5gs_sm_abo;
501
static int hf_nas_5gs_sm_atsss_cont;
502
static int hf_nas_5gs_sm_cpoi;
503
static int hf_nas_5gs_sm_ip_hdr_comp_config_p0104;
504
static int hf_nas_5gs_sm_ip_hdr_comp_config_p0103;
505
static int hf_nas_5gs_sm_ip_hdr_comp_config_p0102;
506
static int hf_nas_5gs_sm_ip_hdr_comp_config_p0006;
507
static int hf_nas_5gs_sm_ip_hdr_comp_config_p0004;
508
static int hf_nas_5gs_sm_ip_hdr_comp_config_p0003;
509
static int hf_nas_5gs_sm_ip_hdr_comp_config_p0002;
510
static int hf_nas_5gs_sm_ip_hdr_comp_config_max_cid;
511
static int hf_nas_5gs_sm_ip_hdr_comp_config_add_ip_hdr_compr_cxt_setup_params_type;
512
static int hf_nas_5gs_sm_ip_hdr_comp_config_add_ip_hdr_compr_cxt_setup_params_cont;
513
static int hf_nas_5gs_sm_ds_tt_eth_port_mac_addr;
514
static int hf_nas_5gs_sm_ue_ds_tt_residence_time;
515
static int hf_nas_5gs_sm_port_mgmt_info_cont;
516
static int hf_nas_5gs_sm_eth_hdr_comp_config_cid_len;
517
static int hf_nas_5gs_sm_pdu_session_pair_id;
518
static int hf_nas_5gs_sm_pdu_session_rsn;
519
static int hf_nas_5gs_sm_ecn_mark_l4s_ind_qri;
520
521
static int hf_nas_5gs_sm_remote_ue_ctx_list_nb_ue_ctx;
522
static int hf_nas_5gs_sm_remote_ue_ctx_len;
523
static int hf_nas_5gs_sm_remote_ue_ctx_addr_type;
524
static int hf_nas_5gs_sm_remote_ue_ctx_userid_len;
525
static int hf_nas_5gs_sm_remote_ue_ctx_userid;
526
static int hf_nas_5gs_sm_remote_ue_ctx_ipv4;
527
static int hf_nas_5gs_sm_remote_ue_ctx_ipv6;
528
static int hf_nas_5gs_sm_remote_ue_ctx_ipv6_pfx_len;
529
530
static int hf_nas_5gs_sm_req_mbs_cont_num_sess;
531
static int hf_nas_5gs_sm_req_mbs_sess_info_len;
532
static int hf_nas_5gs_sm_req_mbs_sess_op;
533
static int hf_nas_5gs_sm_req_mbs_sess_id_type;
534
static int hf_nas_5gs_sm_req_mbs_tmgi;
535
static int hf_nas_5gs_sm_req_mbs_src_ipv4;
536
static int hf_nas_5gs_sm_req_mbs_mcast_ipv4;
537
static int hf_nas_5gs_sm_req_mbs_src_ipv6;
538
static int hf_nas_5gs_sm_req_mbs_mcast_ipv6;
539
540
static int hf_nas_5gs_sm_rec_mbs_cont_num_sess;
541
static int hf_nas_5gs_sm_rec_mbs_info_len;
542
static int hf_nas_5gs_sm_rec_mbs_decision;
543
static int hf_nas_5gs_sm_rec_mbs_sess_id_type;
544
static int hf_nas_5gs_sm_rec_mbs_cause;
545
546
static int hf_nas_5gs_sm_n3qai_num_qfis;
547
static int hf_nas_5gs_sm_n3qai_qfi;
548
static int hf_nas_5gs_sm_n3qai_num_params;
549
static int hf_nas_5gs_sm_n3qai_param_id;
550
static int hf_nas_5gs_sm_n3qai_param_len;
551
static int hf_nas_5gs_sm_n3qai_param_contents;
552
553
static int hf_nas_5gs_sm_n3gpp_delay_budget_val;
554
static int hf_nas_5gs_sm_n3gpp_delay_budget_flags;
555
static int hf_nas_5gs_sm_n3gpp_delay_budget_qfipi;
556
static int hf_nas_5gs_sm_n3gpp_delay_budget_pfpi;
557
static int hf_nas_5gs_sm_n3gpp_delay_budget_num_qfis;
558
static int hf_nas_5gs_sm_n3gpp_delay_budget_qfi;
559
560
static int hf_nas_5gs_sm_ursp_report_num_conn_caps;
561
static int hf_nas_5gs_sm_ursp_report_conn_cap_id;
562
563
static int hf_nas_5gs_sm_prot_desc_len;
564
static int hf_nas_5gs_sm_prot_desc_qri;
565
static int hf_nas_5gs_sm_prot_desc_tp;
566
static int hf_nas_5gs_sm_prot_desc_heipi;
567
static int hf_nas_5gs_sm_prot_desc_pilpi;
568
static int hf_nas_5gs_sm_prot_desc_rtp_hdr_ext_type;
569
static int hf_nas_5gs_sm_prot_desc_rtp_hdr_ext_id;
570
static int hf_nas_5gs_sm_prot_desc_rtp_payload_info_list_len;
571
static int hf_nas_5gs_sm_prot_desc_rtp_payload_format;
572
static int hf_nas_5gs_sm_prot_desc_rtp_num_payload_types;
573
static int hf_nas_5gs_sm_prot_desc_rtp_payload_type;
574
575
static int hf_nas_5gs_sm_n3gpp_dev_info_pdu_sess_type;
576
static int hf_nas_5gs_sm_n3gpp_dev_info_entry_len;
577
static int hf_nas_5gs_sm_n3gpp_dev_info_id_len;
578
static int hf_nas_5gs_sm_n3gpp_dev_info_id;
579
static int hf_nas_5gs_sm_n3gpp_dev_info_conn_info;
580
static int hf_nas_5gs_sm_sel_sc_mode;
581
static int hf_nas_5gs_sm_tpmic_b7;
582
static int hf_nas_5gs_sm_atsss_st_b3_b6;
583
static int hf_nas_5gs_sm_ept_s1_b2;
584
static int hf_nas_5gs_sm_mh6_pdu_b1;
585
static int hf_nas_5gs_sm_rqos_b0;
586
static int hf_nas_5gs_sm_mpquic_ip_b7;
587
static int hf_nas_5gs_sm_mpquic_udp_b6;
588
static int hf_nas_5gs_sm_mptcp_b5;
589
static int hf_nas_5gs_sm_atsss_ll_b3_b4;
590
static int hf_nas_5gs_rtpmmii_b2;
591
static int hf_nas_5gs_sm_sdnaepc_b1;
592
static int hf_nas_5gs_sm_apmqf_b0;
593
static int hf_nas_5gs_sm_e8pcpdei_b1;
594
static int hf_nas_5gs_sm_mpquic_e_b0;
595
static int hf_nas_5gs_sm_5gsm_cause;
596
static int hf_nas_5gs_sm_apsi;
597
static int hf_nas_5gs_sm_apsr;
598
static int hf_nas_5gs_sm_int_prot_max_data_rate_ul;
599
static int hf_nas_5gs_sm_int_prot_max_data_rate_dl;
600
static int hf_nas_5gs_sm_si6lla;
601
static int hf_nas_5gs_sm_pdu_ses_type;
602
static int hf_nas_5gs_sm_pdu_addr_inf_ipv4;
603
static int hf_nas_5gs_sm_pdu_addr_inf_ipv6;
604
static int hf_nas_5gs_sm_smf_ipv6_lla;
605
static int hf_nas_5gs_sm_qos_rule_id;
606
static int hf_nas_5gs_sm_length;
607
static int hf_nas_5gs_sm_rop;
608
static int hf_nas_5gs_sm_dqr;
609
static int hf_nas_5gs_sm_nof_pkt_filters;
610
static int hf_nas_5gs_sm_pkt_flt_id;
611
static int hf_nas_5gs_sm_pkt_flt_dir;
612
static int hf_nas_5gs_sm_pf_len;
613
static int hf_nas_5gs_sm_pf_type;
614
static int hf_nas_5gs_sm_e;
615
static int hf_nas_5gs_sm_nof_params;
616
static int hf_nas_5gs_sm_param_id;
617
static int hf_nas_5gs_sm_param_len;
618
static int hf_nas_5gs_sm_qos_rule_precedence;
619
static int hf_nas_5gs_sm_segregation;
620
static int hf_nas_5gs_sm_param_cont;
621
static int hf_nas_5gs_sm_5qi;
622
static int hf_nas_5gs_sm_unit_for_gfbr_ul;
623
static int hf_nas_5gs_sm_gfbr_ul;
624
static int hf_nas_5gs_sm_unit_for_gfbr_dl;
625
static int hf_nas_5gs_sm_gfbr_dl;
626
static int hf_nas_5gs_sm_unit_for_mfbr_ul;
627
static int hf_nas_5gs_sm_mfbr_ul;
628
static int hf_nas_5gs_sm_unit_for_mfbr_dl;
629
static int hf_nas_5gs_sm_mfbr_dl;
630
static int hf_nas_5gs_sm_averaging_window;
631
static int hf_nas_5gs_sm_eps_bearer_id;
632
static int hf_nas_5gs_sm_qfi;
633
static int hf_nas_5gs_sm_mapd_eps_b_cont_id;
634
static int hf_nas_5gs_sm_mapd_eps_b_cont_opt_code;
635
static int hf_nas_5gs_sm_qos_des_flow_opt_code;
636
static int hf_nas_5gs_sm_mapd_eps_b_cont_E;
637
static int hf_nas_5gs_sm_mapd_eps_b_cont_num_eps_parms;
638
static int hf_nas_5gs_sm_mapd_eps_b_cont_E_mod;
639
static int hf_nas_5gs_sm_mapd_eps_b_cont_param_id;
640
641
static int hf_nas_5gs_sm_unit_for_session_ambr_dl;
642
static int hf_nas_5gs_sm_session_ambr_dl;
643
static int hf_nas_5gs_sm_unit_for_session_ambr_ul;
644
static int hf_nas_5gs_sm_session_ambr_ul;
645
static int hf_nas_5gs_sm_dm_spec_id;
646
static int hf_nas_5gs_sm_all_ssc_mode_b0;
647
static int hf_nas_5gs_sm_all_ssc_mode_b1;
648
static int hf_nas_5gs_sm_all_ssc_mode_b2;
649
static int hf_nas_5gs_addr_mask_ipv4;
650
static int hf_nas_5gs_ipv6;
651
static int hf_nas_5gs_ipv6_prefix_len;
652
static int hf_nas_5gs_protocol_identifier_or_next_hd;
653
static int hf_nas_5gs_mm_rinmr;
654
static int hf_nas_5gs_mm_hdp;
655
static int hf_nas_5gs_mm_cipher_key;
656
static int hf_nas_5gs_mm_dcni;
657
static int hf_nas_5gs_mm_nssci;
658
static int hf_nas_5gs_mm_nssai_inc_mode;
659
static int hf_nas_5gs_mm_ue_usage_setting;
660
static int hf_nas_5gs_mm_5gs_drx_param;
661
static int hf_nas_5gs_e802cstag;
662
static int hf_nas_5gs_sup_rure;
663
static int hf_nas_5gs_svpsu;
664
static int hf_nas_5gs_epsurdp;
665
static int hf_nas_5gs_sup_andsp;
666
static int hf_nas_5gs_nssui;
667
668
static int ett_nas_5gs;
669
static int ett_nas_5gs_mm_nssai;
670
static int ett_nas_5gs_mm_pdu_ses_id;
671
static int ett_nas_5gs_sm_qos_rules;
672
static int ett_nas_5gs_sm_qos_params;
673
static int ett_nas_5gs_plain;
674
static int ett_nas_5gs_sec;
675
static int ett_nas_5gs_mm_part_sal;
676
static int ett_nas_5gs_mm_part_tal;
677
static int ett_nas_5gs_sm_mapd_eps_b_cont;
678
static int ett_nas_5gs_sm_mapd_eps_b_cont_params_list;
679
static int ett_nas_5gs_mm_ladn_indic;
680
static int ett_nas_5gs_mm_sor;
681
static int ett_nas_5gs_sm_pkt_filter_components;
682
static int ett_nas_5gs_updp_ue_policy_section_mgm_lst;
683
static int ett_nas_5gs_updp_ue_policy_section_mgm_sublst;
684
static int ett_nas_5gs_ue_policies_ursp;
685
static int ett_nas_5gs_ue_policies_andp;
686
static int ett_nas_5gs_wlansp_rule;
687
static int ett_nas_5gs_wlansp_tod;
688
static int ett_nas_5gs_loc_3gpp_sub_ent;
689
static int ett_nas_5gs_wlansp_val_area;
690
static int ett_nas_5gs_wlansp_sel_crit_ent;
691
static int ett_nas_5gs_wlansp_sel_crit;
692
static int ett_nas_5gs_ursp_traff_desc;
693
static int ett_nas_5gs_usrp_r_sel_list;
694
static int ett_nas_5gs_usrp_r_sel;
695
static int ett_nas_5gs_ursp_r_sel_desc_cont;
696
static int ett_nas_5gs_updp_upsi_list;
697
static int ett_nas_5gs_mm_rej_nssai;
698
static int ett_nas_5gs_mm_scheme_output;
699
static int ett_nas_5gs_mm_pld_cont_pld_entry;
700
static int ett_nas_5gs_mm_pld_cont_opt_ie;
701
static int ett_nas_5gs_mm_cag_info_entry;
702
static int ett_nas_5gs_ciot_small_data_cont_data_contents;
703
static int ett_nas_5gs_user_data_cont;
704
static int ett_nas_5gs_ciph_data_set;
705
static int ett_nas_5gs_mm_mapped_nssai;
706
static int ett_nas_5gs_mm_partial_extended_rejected_nssai_list;
707
static int ett_nas_5gs_mm_ext_rej_nssai_back_off_timer;
708
static int ett_nas_5gs_mm_ext_rej_nssai;
709
static int ett_nas_5gs_mm_op_def_acc_cat_def;
710
static int ett_nas_5gs_mm_op_def_acc_cat_criteria_component;
711
static int ett_nas_5gs_mm_op_def_acc_cat_criteria;
712
static int ett_nas_5gs_cmn_service_level_aa_cont_param;
713
static int ett_nas_5gs_mm_pld_cont_event_notif_ind;
714
static int ett_nas_5gs_mm_peips_assist_info;
715
static int ett_nas_5gs_mm_nssrg_info;
716
static int ett_nas_5gs_mm_plmns_list_disaster_cond;
717
static int ett_nas_5gs_mm_reg_wait_range;
718
static int ett_nas_5gs_mm_nsag_info;
719
static int ett_nas_5gs_mm_snpn_list;
720
static int ett_nas_5gs_mm_ext_ladn_info;
721
static int ett_nas_5gs_mm_alt_nssai;
722
static int ett_nas_5gs_mm_alt_nssai_replaced;
723
static int ett_nas_5gs_mm_alt_nssai_alternative;
724
static int ett_nas_5gs_mm_s_nssai_loc_valid_info;
725
static int ett_nas_5gs_mm_s_nssai_time_valid_info;
726
static int ett_nas_5gs_mm_on_demand_nssai;
727
static int ett_nas_5gs_n3nan_sel_len;
728
static int ett_nas_5gs_n3nan_sel_info_entry;
729
static int ett_nas_5gs_n3nan_conf_inf;
730
static int ett_nas_5gs_n3iwf_identifier_entry;
731
static int ett_nas_5gs_epdg_identifier_entry;
732
static int ett_nas_5gs_sm_srtp_mult_media_id_info;
733
static int ett_nas_5gs_sm_remote_ue_ctx;
734
static int ett_nas_5gs_sm_req_mbs_sess_info;
735
static int ett_nas_5gs_sm_rec_mbs_info;
736
static int ett_nas_5gs_sm_n3qai_entry;
737
static int ett_nas_5gs_sm_n3qai_param;
738
static int ett_nas_5gs_sm_n3gpp_delay_budget_entry;
739
static int ett_nas_5gs_sm_ursp_report;
740
static int ett_nas_5gs_sm_prot_desc_entry;
741
static int ett_nas_5gs_sm_prot_desc_rtp_payload_info;
742
static int ett_nas_5gs_sm_n3gpp_dev_info_entry;
743
744
static int hf_nas_5gs_mm_abba;
745
static int hf_nas_5gs_mm_supi_fmt;
746
static int hf_nas_5gs_mm_routing_indicator;
747
static int hf_nas_5gs_mm_prot_scheme_id;
748
static int hf_nas_5gs_mm_pki;
749
static int hf_nas_5gs_mm_suci_msin;
750
static int hf_nas_5gs_mm_scheme_output;
751
static int hf_nas_5gs_mm_scheme_output_ecc_public_key;
752
static int hf_nas_5gs_mm_scheme_output_ciphertext;
753
static int hf_nas_5gs_mm_scheme_output_mac_tag;
754
static int hf_nas_5gs_mm_suci_nai;
755
static int hf_nas_5gs_mm_imei;
756
static int hf_nas_5gs_mm_imeisv;
757
static int hf_nas_5gs_mm_mauri;
758
static int hf_nas_5gs_mm_mac_addr;
759
static int hf_nas_5gs_mm_eui_64;
760
static int hf_nas_5gs_mm_reg_res_res;
761
static int hf_nas_5gs_mm_reg_res_sms_allowed;
762
static int hf_nas_5gs_mm_reg_res_nssaa_perf;
763
static int hf_nas_5gs_mm_reg_res_emergency_reg;
764
static int hf_nas_5gs_mm_reg_res_disaster_roaming_reg_res;
765
static int hf_nas_5gs_amf_region_id;
766
static int hf_nas_5gs_amf_set_id;
767
static int hf_nas_5gs_amf_pointer;
768
static int hf_nas_5gs_5g_tmsi;
769
static int hf_nas_5gs_mm_op_def_access_cat_len;
770
static int hf_nas_5gs_mm_op_def_access_cat_precedence;
771
static int hf_nas_5gs_mm_op_def_access_cat_psac;
772
static int hf_nas_5gs_mm_op_def_access_cat_number;
773
static int hf_nas_5gs_mm_op_def_access_cat_criteria_length;
774
static int hf_nas_5gs_mm_op_def_access_cat_criteria_type;
775
static int hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_count;
776
static int hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_len;
777
static int hf_nas_5gs_mm_op_def_access_cat_criteria_os_id_os_app_id_count;
778
static int hf_nas_5gs_mm_op_def_access_cat_criteria_os_id;
779
static int hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id_len;
780
static int hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id;
781
static int hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_count;
782
static int hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_len;
783
static int hf_nas_5gs_mm_op_def_access_cat_standardized_number;
784
static int hf_nas_5gs_mm_sms_indic_sai;
785
786
static int hf_nas_5gs_nw_feat_sup_mpsi_b7;
787
static int hf_nas_5gs_nw_feat_sup_ims_iwk_n26_b6;
788
static int hf_nas_5gs_nw_feat_sup_ims_emf_b5b4;
789
static int hf_nas_5gs_nw_feat_sup_ims_emc_b3b2;
790
static int hf_nas_5gs_nw_feat_sup_ims_vops_3gpp;
791
static int hf_nas_5gs_nw_feat_sup_ims_vops_n3gpp;
792
static int hf_nas_5gs_nw_feat_sup_emcn3;
793
static int hf_nas_5gs_nw_feat_sup_mcsi;
794
static int hf_nas_5gs_nw_feat_sup_restrict_ec;
795
static int hf_nas_5gs_nw_feat_sup_5g_cp_ciot;
796
static int hf_nas_5gs_nw_feat_sup_n3_data;
797
static int hf_nas_5gs_nw_feat_sup_5g_iphc_cp_ciot;
798
static int hf_nas_5gs_nw_feat_sup_5g_ciot_up;
799
static int hf_nas_5gs_nw_feat_sup_5g_lcs;
800
static int hf_nas_5gs_nw_feat_sup_ats_ind;
801
static int hf_nas_5gs_nw_feat_sup_5g_ehc_cp_ciot;
802
static int hf_nas_5gs_nw_feat_sup_ncr;
803
static int hf_nas_5gs_nw_feat_sup_piv;
804
static int hf_nas_5gs_nw_feat_sup_rpr;
805
static int hf_nas_5gs_nw_feat_sup_pr;
806
static int hf_nas_5gs_nw_feat_sup_un_per;
807
static int hf_nas_5gs_nw_feat_sup_naps;
808
static int hf_nas_5gs_nw_feat_sup_lcs_upp;
809
static int hf_nas_5gs_nw_feat_sup_supl;
810
static int hf_nas_5gs_nw_feat_sup_rslp;
811
static int hf_nas_5gs_nw_feat_sup_mlcsup;
812
static int hf_nas_5gs_nw_feat_sup_ef5l;
813
814
static int hf_nas_5gs_tac;
815
816
static int hf_nas_5gs_mm_tal_t_li;
817
static int hf_nas_5gs_mm_tal_num_e;
818
static int hf_nas_5gs_sm_mapd_eps_b_cont_eps_param_cont;
819
820
static int hf_nas_5gs_sm_max_nb_sup_pkt_flt_nb;
821
static int hf_nas_5gs_sm_max_nb_sup_pkt_flt_spare;
822
823
static int hf_nas_5gs_kacf;
824
static int hf_nas_5gs_ncc;
825
826
static int hf_nas_5gs_sor_hdr0_ap;
827
static int hf_nas_5gs_sor_hdr0_ack;
828
static int hf_nas_5gs_sor_hdr0_list_type;
829
static int hf_nas_5gs_sor_hdr0_list_ind;
830
static int hf_nas_5gs_sor_hdr0_sor_data_type;
831
static int hf_nas_5gs_sor_mssi;
832
static int hf_nas_5gs_sor_mssnpnsi;
833
static int hf_nas_5gs_sor_msssnpnsils;
834
static int hf_nas_5gs_sor_mac_iue;
835
static int hf_nas_5gs_sor_mac_iausf;
836
static int hf_nas_5gs_counter_sor;
837
static int hf_nas_5gs_sor_sec_pkt;
838
static int hf_nas_5gs_sor_sssli;
839
static int hf_nas_5gs_sor_sssi;
840
static int hf_nas_5gs_sor_sscmi;
841
static int hf_nas_5gs_sor_si;
842
static int hf_nas_5gs_sor_plmn_id_act_len;
843
static int hf_nas_5gs_sor_cmci_len;
844
static int hf_nas_5gs_sor_cmci_payload;
845
static int hf_nas_5gs_sor_snpn_si_len;
846
static int hf_nas_5gs_sor_snpn_si_payload;
847
static int hf_nas_5gs_sor_snpn_si_ls_len;
848
static int hf_nas_5gs_sor_snpn_si_ls_payload;
849
850
static int hf_nas_5gs_access_tech_o1_b7;
851
static int hf_nas_5gs_access_tech_o1_b6;
852
static int hf_nas_5gs_access_tech_o1_b5;
853
static int hf_nas_5gs_access_tech_o1_b4;
854
static int hf_nas_5gs_access_tech_o1_b3;
855
static int hf_nas_5gs_access_tech_o2_b7;
856
static int hf_nas_5gs_access_tech_o2_b6;
857
static int hf_nas_5gs_access_tech_o2_b5;
858
static int hf_nas_5gs_access_tech_o2_b4;
859
static int hf_nas_5gs_access_tech_o2_b3;
860
static int hf_nas_5gs_access_tech_o2_b2;
861
static int hf_nas_5gs_single_port_type;
862
static int hf_nas_5gs_port_range_type_low;
863
static int hf_nas_5gs_port_range_type_high;
864
static int hf_nas_5gs_sec_param_idx;
865
static int hf_nas_5gs_tos_tc_val;
866
static int hf_nas_5gs_tos_tc_mask;
867
static int hf_nas_5gs_flow_label;
868
static int hf_nas_5gs_mac_addr;
869
static int hf_nas_5gs_vlan_tag_vid;
870
static int hf_nas_5gs_vlan_tag_pcp_ind;
871
static int hf_nas_5gs_vlan_tag_dei_ind;
872
static int hf_nas_5gs_vlan_tag_pcp;
873
static int hf_nas_5gs_vlan_tag_dei;
874
static int hf_nas_5gs_ethertype;
875
static int hf_nas_5gs_mac_addr_low;
876
static int hf_nas_5gs_mac_addr_high;
877
static int hf_nas_5gs_srtp_mult_media_id_info_rptpi;
878
static int hf_nas_5gs_srtp_mult_media_id_info_rshempi;
879
static int hf_nas_5gs_srtp_mult_media_id_info_mitpi;
880
static int hf_nas_5gs_srtp_mult_media_id_info_ptpi;
881
static int hf_nas_5gs_srtp_mult_media_id_info_ssrcpi;
882
static int hf_nas_5gs_srtp_mult_media_id_info_nb;
883
static int hf_nas_5gs_srtp_mult_media_id_info_len;
884
static int hf_nas_5gs_srtp_mult_media_id_info_ssrc;
885
static int hf_nas_5gs_srtp_mult_media_id_info_payload_type;
886
static int hf_nas_5gs_srtp_mult_media_id_info_mid_id_tag_len;
887
static int hf_nas_5gs_srtp_mult_media_id_info_mid_id_tag;
888
static int hf_nas_5gs_srtp_mult_media_id_info_sdes_hdr_ext_id;
889
static int hf_nas_5gs_srtp_mult_media_id_info_rtcp_pkt_type;
890
static int hf_nas_5gs_updp_ue_pol_sect_sublst_len;
891
static int hf_nas_5gs_updp_ue_pol_sect_subresult_len;
892
static int hf_nas_5gs_updp_instr_len;
893
static int hf_nas_5gs_updp_upsc;
894
static int hf_nas_5gs_updp_failed_instruction_order;
895
static int hf_nas_5gs_updp_policy_len;
896
static int hf_nas_5gs_updp_ue_policy_part_type;
897
static int hf_nas_5gs_updp_ue_policy_part_cont;
898
static int hf_nas_5gs_ursp_rule_len;
899
static int hf_nas_5gs_ursp_rule_prec;
900
static int hf_nas_5gs_ursp_traff_desc_lst_len;
901
static int hf_nas_5gs_ursp_traff_desc;
902
static int hf_nas_5gs_ursp_r_sel_desc_lst_len;
903
static int hf_nas_5gs_ursp_r_sel_desc_lst;
904
static int hf_nas_5gs_ursp_traff_desc_ipv4;
905
static int hf_nas_5gs_ursp_traff_desc_ipv4_mask;
906
static int hf_nas_5gs_ursp_traff_desc_ipv6;
907
static int hf_nas_5gs_ursp_traff_desc_ipv6_prefix_len;
908
static int hf_nas_5gs_ursp_traff_desc_next_hdr;
909
static int hf_nas_5gs_ursp_traff_desc_single_remote_port;
910
static int hf_nas_5gs_ursp_traff_desc_remote_port_range_low;
911
static int hf_nas_5gs_ursp_traff_desc_remote_port_range_high;
912
static int hf_nas_5gs_ursp_traff_desc_ip_3_tuple_bitmap;
913
static int hf_nas_5gs_ursp_traff_desc_sec_param_index;
914
static int hf_nas_5gs_ursp_traff_desc_tos_tc;
915
static int hf_nas_5gs_ursp_traff_desc_tos_tc_mask;
916
static int hf_nas_5gs_ursp_traff_desc_flow_label;
917
static int hf_nas_5gs_ursp_traff_desc_dest_mac_addr;
918
static int hf_nas_5gs_ursp_traff_desc_ctag_vid;
919
static int hf_nas_5gs_ursp_traff_desc_stag_vid;
920
static int hf_nas_5gs_ursp_traff_desc_ctag_pcp;
921
static int hf_nas_5gs_ursp_traff_desc_ctag_dei;
922
static int hf_nas_5gs_ursp_traff_desc_stag_pcp;
923
static int hf_nas_5gs_ursp_traff_desc_stag_dei;
924
static int hf_nas_5gs_ursp_traff_desc_ethertype;
925
static int hf_nas_5gs_ursp_traff_desc_conn_cap_len;
926
static int hf_nas_5gs_ursp_traff_desc_conn_cap;
927
static int hf_nas_5gs_ursp_traff_desc_dest_fqdn_len;
928
static int hf_nas_5gs_ursp_traff_desc_dest_fqdn;
929
static int hf_nas_5gs_ursp_traff_desc_regex_len;
930
static int hf_nas_5gs_ursp_traff_desc_regex;
931
static int hf_nas_5gs_ursp_traff_desc_pin_id_len;
932
static int hf_nas_5gs_ursp_traff_desc_pin_id;
933
static int hf_nas_5gs_ursp_traff_desc_conn_group_id_len;
934
static int hf_nas_5gs_ursp_traff_desc_conn_group_id;
935
static int hf_nas_5gs_ursp_traff_desc_dest_mac_addr_range_low;
936
static int hf_nas_5gs_ursp_traff_desc_dest_mac_addr_range_high;
937
static int hf_nas_5gs_ursp_traff_desc_len;
938
static int hf_nas_5gs_ursp_r_sel_des_prec;
939
static int hf_nas_5gs_ursp_r_sel_des_cont_len;
940
static int hf_nas_5gs_ursp_ursp_r_sel_desc_comp_type;
941
static int hf_nas_5gs_ursp_r_sel_desc_loc_crit_len;
942
static int hf_nas_5gs_ursp_r_sel_desc_loc_area_type;
943
static int hf_nas_5gs_ursp_r_sel_desc_loc_num_eutra_cells;
944
static int hf_nas_5gs_ursp_r_sel_desc_loc_num_nr_cells;
945
static int hf_nas_5gs_ursp_r_sel_desc_loc_num_gnb_ids;
946
static int hf_nas_5gs_ursp_r_sel_desc_loc_nr_cell_id;
947
static int hf_nas_5gs_ursp_r_sel_desc_loc_eutra_cell_id;
948
static int hf_nas_5gs_ursp_r_sel_desc_loc_gnb_id;
949
static int hf_nas_5gs_ursp_r_sel_desc_loc_tai_len;
950
static int hf_nas_5gs_ursp_r_sel_desc_time_win_start;
951
static int hf_nas_5gs_ursp_r_sel_desc_time_win_stop;
952
static int hf_nas_5gs_ursp_r_sel_desc_pdu_sess_pair_id;
953
static int hf_nas_5gs_ursp_r_sel_desc_rsn;
954
static int hf_nas_5gs_dnn_len;
955
static int hf_nas_5gs_upsi_sublist_len;
956
static int hf_nas_5gs_upsc;
957
static int hf_nas_5gs_os_id;
958
static int hf_nas_5gs_upds_cause;
959
static int hf_nas_5gs_v2xuui;
960
static int hf_nas_5gs_v2xpc5i;
961
static int hf_nas_5gs_os_app_id_len;
962
static int hf_nas_5gs_os_app_id;
963
static int hf_nas_5gs_mm_len_of_rej_s_nssai;
964
static int hf_nas_5gs_mm_rej_s_nssai_cause;
965
static int hf_nas_5gs_mm_ue_radio_cap_id;
966
static int hf_nas_5gs_mm_ue_radio_cap_id_del_req;
967
static int hf_nas_5gs_mm_trunc_amf_set_id;
968
static int hf_nas_5gs_mm_trunc_amf_pointer;
969
static int hf_nas_5gs_mm_n5gcreg_b0;
970
static int hf_nas_5gs_mm_nb_n1_drx_value;
971
static int hf_nas_5gs_mm_scmr;
972
static int hf_nas_5gs_mm_extended_rejected_nssai_number_of_element;
973
static int hf_nas_5gs_mm_extended_rejected_nssai_type_of_list;
974
static int hf_nas_5gs_mm_extended_rejected_nssai_spare;
975
static int hf_nas_5gs_mm_extended_rejected_nssai_back_off_timer;
976
static int hf_nas_5gs_mm_len_of_rejected_s_nssai;
977
static int hf_nas_5gs_mm_rejected_s_nssai_cause_value;
978
static int hf_nas_5gs_mm_paging_restriction_type;
979
static int hf_nas_5gs_mm_paging_restriction_psi_7;
980
static int hf_nas_5gs_mm_paging_restriction_psi_6;
981
static int hf_nas_5gs_mm_paging_restriction_psi_5;
982
static int hf_nas_5gs_mm_paging_restriction_psi_4;
983
static int hf_nas_5gs_mm_paging_restriction_psi_3;
984
static int hf_nas_5gs_mm_paging_restriction_psi_2;
985
static int hf_nas_5gs_mm_paging_restriction_psi_1;
986
static int hf_nas_5gs_mm_paging_restriction_psi_0;
987
static int hf_nas_5gs_mm_paging_restriction_psi_15;
988
static int hf_nas_5gs_mm_paging_restriction_psi_14;
989
static int hf_nas_5gs_mm_paging_restriction_psi_13;
990
static int hf_nas_5gs_mm_paging_restriction_psi_12;
991
static int hf_nas_5gs_mm_paging_restriction_psi_11;
992
static int hf_nas_5gs_mm_paging_restriction_psi_10;
993
static int hf_nas_5gs_mm_paging_restriction_psi_9;
994
static int hf_nas_5gs_mm_paging_restriction_psi_8;
995
static int hf_nas_5gs_mm_nid_assign_mode;
996
static int hf_nas_5gs_mm_nid_value;
997
static int hf_nas_5gs_mm_peips_assist_info_type;
998
static int hf_nas_5gs_mm_peips_assist_info_paging_subgroup_id;
999
static int hf_nas_5gs_mm_peips_assist_info_ue_paging_probability_info;
1000
static int hf_nas_5gs_mm_add_req_res_prd;
1001
static int hf_nas_5gs_mm_nssrg_info_len;
1002
static int hf_nas_5gs_mm_nssrg_info_s_nssai_len;
1003
static int hf_nas_5gs_mm_nssrg_info_nssrg;
1004
static int hf_nas_5gs_mm_nsag_info_len;
1005
static int hf_nas_5gs_mm_nsag_id;
1006
static int hf_nas_5gs_mm_nsag_info_s_nssai_len;
1007
static int hf_nas_5gs_mm_nsag_prio;
1008
static int hf_nas_5gs_mm_nsag_tais_list_len;
1009
static int hf_nas_5gs_mm_prose_relay_trans_id;
1010
static int hf_nas_5gs_mm_relay_key_req_params_relay_service_code;
1011
static int hf_nas_5gs_mm_relay_key_req_params_nonce_1;
1012
static int hf_nas_5gs_mm_relay_key_req_params_uit;
1013
static int hf_nas_5gs_mm_relay_key_req_params_ue_id;
1014
static int hf_nas_5gs_mm_relay_key_resp_params_key_knr_prose;
1015
static int hf_nas_5gs_mm_relay_key_resp_params_nonce_2;
1016
static int hf_nas_5gs_mm_relay_key_resp_params_cp_pruk_id;
1017
static int hf_nas_5gs_mm_prio_ind_mcsi;
1018
static int hf_nas_5gs_mm_prio_ind_mpsi;
1019
static int hf_nas_5gs_mm_n3iwf_id_type;
1020
static int hf_nas_5gs_mm_n3iwf_id_ipv4;
1021
static int hf_nas_5gs_mm_n3iwf_id_ipv6;
1022
static int hf_nas_5gs_mm_n3iwf_id_fqdn;
1023
static int hf_nas_5gs_mm_tnan_info_ssid_ind;
1024
static int hf_nas_5gs_mm_tnan_info_tngf_id_ind;
1025
static int hf_nas_5gs_mm_tnan_info_tngf_id_len;
1026
static int hf_nas_5gs_mm_tnan_info_tngf_id;
1027
static int hf_nas_5gs_mm_tnan_info_ssid_len;
1028
static int hf_nas_5gs_mm_tnan_info_ssid;
1029
static int hf_nas_5gs_mm_ran_timing_sync_recreq;
1030
static int hf_nas_5gs_mm_n3gpp_acc_path_switch_ind_naps;
1031
static int hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_len;
1032
static int hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_nb_nr_cgi;
1033
static int hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_nr_cell_id;
1034
static int hf_nas_5gs_mm_s_nssai_time_valid_info_per_s_nssai_len;
1035
static int hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_len;
1036
static int hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_start_time;
1037
static int hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_stop_time;
1038
static int hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_recurrence_pattern;
1039
static int hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_recurrence_end_time;
1040
static int hf_nas_5gs_mm_n3gpp_path_switch_info_nsonr;
1041
static int hf_nas_5gs_mm_au3n_ind_aun3reg;
1042
static int hf_nas_5gs_mm_feat_auth_ind_hpase;
1043
static int hf_nas_5gs_mm_feat_auth_ind_mbsrai;
1044
static int hf_nas_5gs_mm_payload_cont_info_pru;
1045
static int hf_nas_5gs_mm_aun3_device_sec_key_askt;
1046
static int hf_nas_5gs_mm_aun3_device_sec_key_key_len;
1047
static int hf_nas_5gs_mm_aun3_device_sec_key_key;
1048
static int hf_nas_5gs_mm_on_demand_nssai_len;
1049
static int hf_nas_5gs_mm_on_demand_nssai_slice_dereg_inactiv_timer;
1050
static int hf_nas_5gs_mm_ext_5gmm_cause_sat_nr;
1051
static int hf_nas_5gs_mm_lp_wusps_assist_info_type;
1052
static int hf_nas_5gs_mm_lp_wusps_assist_info_paging_subgroup_id;
1053
static int hf_nas_5gs_mm_lp_wusps_assist_info_ue_paging_prob_info;
1054
static int hf_nas_5gs_mm_lws;
1055
static int hf_nas_5gs_ue_os_id;
1056
static int hf_nas_5gs_andsp_info_type;
1057
static int hf_nas_5gs_andsp_info_len;
1058
static int hf_nas_5gs_andsp_info_contents;
1059
static int hf_nas_5gs_wlansp_rule_len;
1060
static int hf_nas_5gs_wlansp_rule_id;
1061
static int hf_nas_5gs_wlansp_rule_prio;
1062
static int hf_nas_5gs_roaming_ind;
1063
static int hf_nas_5gs_validity_area_ind;
1064
static int hf_nas_5gs_3gpp_loc_ind;
1065
static int hf_nas_5gs_wlan_loc_ind;
1066
static int hf_nas_5gs_geo_loc_ind;
1067
static int hf_nas_5gs_time_of_day_ind;
1068
1069
static int hf_nas_5gs_wlansp_sel_crit_len;
1070
static int hf_nas_5gs_wlansp_num_sel_crit_ent;
1071
static int hf_nas_5gs_wlansp_sel_crit_ent_len;
1072
static int hf_nas_5gs_wlansp_maxbssload_ind;
1073
static int hf_nas_5gs_wlansp_homenetwork_ind;
1074
static int hf_nas_5gs_wlansp_max_bss_ld_val;
1075
static int hf_nas_5gs_wlansp_criteria_priority;
1076
static int hf_nas_5gs_wlansp_sel_crit_set_len;
1077
static int hf_nas_5gs_wlansp_sel_crit_set_type;
1078
static int hf_nas_5gs_wlansp_sel_crit_num_sub_entr;
1079
static int hf_nas_5gs_wlansp_pref_ssid_list_wlan_prio;
1080
static int hf_nas_5gs_wlansp_ssid_len;
1081
static int hf_nas_5gs_wlansp_pref_ssid_list_ssid_ind;
1082
static int hf_nas_5gs_wlansp_pref_ssid_list_hessid_ind;
1083
static int hf_nas_5gs_wlansp_pref_ssid_list_ssid;
1084
static int hf_nas_5gs_wlansp_pref_ssid_list_hessid;
1085
static int hf_nas_5gs_wlansp_pref_roam_part_list_prio;
1086
static int hf_nas_5gs_wlansp_fqdn_match_len;
1087
static int hf_nas_5gs_wlansp_fqdn_match;
1088
static int hf_nas_5gs_wlansp_country_len;
1089
static int hf_nas_5gs_wlansp_country;
1090
1091
static int hf_nas_5gs_wlansp_req_prot_ip_prot;
1092
static int hf_nas_5gs_wlansp_req_prot_port_len;
1093
static int hf_nas_5gs_wlansp_req_prot_port;
1094
static int hf_nas_5gs_wlansp_sub_ent_len;
1095
static int hf_nas_5gs_wlansp_sel_crit_sp_exc;
1096
static int hf_nas_5gs_wlansp_sp_excl_list_ulbi_ind;
1097
static int hf_nas_5gs_wlansp_sp_excl_list_dlbi_ind;
1098
static int hf_nas_5gs_wlansp_sp_excl_list_nw_type;
1099
static int hf_nas_5gs_wlansp_sp_excl_list_ulb;
1100
static int hf_nas_5gs_wlansp_sp_excl_list_dlb;
1101
static int hf_nas_5gs_wlansp_val_area_len;
1102
static int hf_nas_5gs_wlansp_time_of_day_len;
1103
static int hf_nas_5gs_wlansp_num_loc_entr;
1104
static int hf_nas_5gs_wlansp_loc_entry_len;
1105
static int hf_nas_5gs_wlansp_loc_entry_type;
1106
static int hf_nas_5gs_wlansp_loc_num_sub_entries;
1107
static int hf_nas_5gs_wlansp_loc_3gpp_sub_ent_len;
1108
static int hf_nas_5gs_wlansp_loc_3gpp_num_loc_fields;
1109
static int hf_nas_5gs_wlansp_loc_3gpp_loc_field_len;
1110
static int hf_nas_5gs_wlansp_loc_3gpp_loc_field_type;
1111
static int hf_nas_5gs_wlansp_loc_3gpp_loc_tac;
1112
static int hf_nas_5gs_wlansp_loc_3gpp_loc_eutra_ci;
1113
static int hf_nas_5gs_wlansp_loc_3gpp_loc_nr_ci;
1114
static int hf_nas_5gs_wlansp_loc_num_loc_fields;
1115
static int hf_nas_5gs_wlansp_loc_sub_ent_len;
1116
static int hf_nas_5gs_wlansp_loc_wlan_loc_field_len;
1117
static int hf_nas_5gs_wlansp_loc_wlan_sub_ent_type;
1118
static int hf_nas_5gs_wlansp_loc_hessid;
1119
static int hf_nas_5gs_wlansp_loc_ssid;
1120
static int hf_nas_5gs_wlansp_loc_bssid;
1121
static int hf_nas_5gs_geo_loc_anc_lat;
1122
static int hf_nas_5gs_geo_loc_anc_long;
1123
static int hf_nas_5gs_geo_loc_rad;
1124
static int hf_nas_5gs_n3nan_sel_len;
1125
static int hf_nas_5gs_n3nan_node_sel_entry_len;
1126
static int hf_nas_5gs_node_sel_entry_fqdn_format;
1127
static int hf_nas_5gs_node_sel_entry_pref;
1128
static int hf_nas_5gs_node_sel_entry_prio;
1129
static int hf_nas_5gs_n3nan_node_conf_inf_type;
1130
static int hf_nas_5gs_n3nan_home_n3iwf_id_type;
1131
static int hf_nas_5gs_home_n3iwf_ipv4_addr;
1132
static int hf_nas_5gs_home_n3iwf_ipv6_addr;
1133
static int hf_nas_5gs_home_n3iwf_fqdn_len;
1134
static int hf_nas_5gs_home_n3iwf_id_cont_len;
1135
static int hf_nas_5gs_home_n3iwf_fqdn;
1136
1137
static int hf_nas_5gs_n3nan_home_epdg_id_type;
1138
static int hf_nas_5gs_home_epdg_ipv4_addr;
1139
static int hf_nas_5gs_home_epdg_ipv6_addr;
1140
static int hf_nas_5gs_home_epdg_fqdn_len;
1141
static int hf_nas_5gs_home_epdg_id_cont_len;
1142
static int hf_nas_5gs_home_epdg_fqdn;
1143
1144
static expert_field ei_nas_5gs_extraneous_data;
1145
static expert_field ei_nas_5gs_unknown_pd;
1146
static expert_field ei_nas_5gs_mm_unknown_msg_type;
1147
static expert_field ei_nas_5gs_sm_unknown_msg_type;
1148
static expert_field ei_nas_5gs_updp_unknown_msg_type;
1149
static expert_field ei_nas_5gs_msg_not_dis;
1150
static expert_field ei_nas_5gs_ie_not_dis;
1151
static expert_field ei_nas_5gs_missing_mandatory_element;
1152
static expert_field ei_nas_5gs_dnn_too_long;
1153
static expert_field ei_nas_5gs_unknown_value;
1154
static expert_field ei_nas_5gs_num_pkt_flt;
1155
static expert_field ei_nas_5gs_not_diss;
1156
1157
299
#define NAS_5GS_PLAIN_NAS_MSG          0
1158
#define NAS_5GS_INTEG_NAS_MSG          1
1159
554
#define NAS_5GS_INTEG_CIPH_NAS_MSG     2
1160
#define NAS_5GS_INTEG_NEW_NAS_MSG      3
1161
99
#define NAS_5GS_INTEG_CIPH_NEW_NAS_MSG 4
1162
1163
0
#define NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_REQUEST            0xc1
1164
0
#define NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_RESPONSE           0xc2
1165
0
#define NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_REJECT             0xc3
1166
1167
0
#define NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_COMMAND           0xc5
1168
0
#define NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_COMPLETE          0xc6
1169
0
#define NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_RESULT            0xc7
1170
1171
0
#define NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_REQUEST             0xc9
1172
0
#define NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_REJECT              0xca
1173
0
#define NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMMAND             0xcb
1174
0
#define NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMPLETE            0xcc
1175
0
#define NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMMAND_REJECT      0xcd
1176
1177
0
#define NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_REQUEST                  0xd1
1178
0
#define NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_REJECT                   0xd2
1179
0
#define NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_COMMAND                  0xd3
1180
0
#define NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_COMPLETE                 0xd4
1181
1182
#define NAS_5GS_SM_MSG_5GSM_STATUS                                  0xd6
1183
1184
#define NAS_5GS_SM_MSG_SERVICE_LEVEL_AUTHENTICATION_COMMAND         0xd8
1185
#define NAS_5GS_SM_MSG_SERVICE_LEVEL_AUTHENTICATION_COMPLETE        0xd9
1186
0
#define NAS_5GS_SM_MSG_REMOTE_UE_REPORT                             0xda
1187
#define NAS_5GS_SM_MSG_REMOTE_UE_REPORT_RESPONSE                    0xdb
1188
1189
static const value_string nas_5gs_security_header_type_vals[] = {
1190
    { NAS_5GS_PLAIN_NAS_MSG,          "Plain NAS message, not security protected"},
1191
    { NAS_5GS_INTEG_NAS_MSG,          "Integrity protected"},
1192
    { NAS_5GS_INTEG_CIPH_NAS_MSG,     "Integrity protected and ciphered"},
1193
    { NAS_5GS_INTEG_NEW_NAS_MSG,      "Integrity protected with new 5GS security context"},
1194
    { NAS_5GS_INTEG_CIPH_NEW_NAS_MSG, "Integrity protected and ciphered with new 5GS security context"},
1195
    { 0,    NULL }
1196
};
1197
1198
0
#define N1_SMINFO_FROM_UE "n1SmInfoFromUe"
1199
0
#define N1_SMINFO_TO_UE   "n1SmInfoToUe"
1200
0
#define UNKNOWN_N1_SMINFO "unknownN1SmInfo"
1201
1202
29
#define TGPP_PD_5GMM 0x7e
1203
326
#define TGPP_PD_5GSM 0x2e
1204
1205
static const value_string nas_5gs_epd_vals[] = {
1206
    { 0x00,              "Group call control" },
1207
    { 0x01,              "Broadcast call control" },
1208
    { 0x02,              "EPS session management messages" },
1209
    { 0x03,              "Call Control; call related SS messages" },
1210
    { 0x04,              "GPRS Transparent Transport Protocol (GTTP)" },
1211
    { 0x05,              "Mobility Management messages" },
1212
    { 0x06,              "Radio Resources Management messages" },
1213
    { 0x07,              "EPS mobility management messages" },
1214
    { 0x08,              "GPRS mobility management messages" },
1215
    { 0x09,              "SMS messages" },
1216
    { 0x0a,              "GPRS session management messages" },
1217
    { 0x0b,              "Non call related SS messages" },
1218
    { 0x0c,              "Location services specified in 3GPP TS 44.071" },
1219
    { 0x0d,              "Unknown" },
1220
    /*{0x0e,            "Reserved for extension of the PD to one octet length "},*/
1221
    { 0x0f,              "Tests procedures described in 3GPP TS 44.014, 3GPP TS 34.109 and 3GPP TS 36.509" },
1222
    { TGPP_PD_5GSM,      "5G session management messages" },
1223
    { TGPP_PD_5GMM,      "5G mobility management messages" },
1224
    { 0,    NULL }
1225
};
1226
1227
1228
1229
/* Format functions  XXXX Should these be in a common file in epan? */
1230
/* Copied from gsm_a_common dissector */
1231
1232
static void
1233
nas_5gs_degreesLatitude_fmt(char* s, uint32_t v)
1234
0
{
1235
0
    snprintf(s, ITEM_LABEL_LENGTH, "%s%f degrees (%u)",
1236
0
        (v & 0x00800000) ? "-" : "",
1237
0
        ((float)(v & 0x7fffff) / 8388607.0) * 90, v);
1238
0
}
1239
1240
static void
1241
nas_5gs_degreesLongitude_fmt(char* s, uint32_t v)
1242
0
{
1243
0
    int32_t longitude = (int32_t)v;
1244
1245
0
    longitude |= (longitude & 0x800000) ? 0xff000000 : 0x00000000;
1246
    /* (X/0xffffff) *360 = degrees */
1247
1248
0
    snprintf(s, ITEM_LABEL_LENGTH, "%f degrees (%d)",
1249
0
        ((float)longitude / 16777215.0) * 360, longitude);
1250
0
}
1251
1252
static void
1253
nas_5gs_radius_fmt(char* s, uint32_t v)
1254
0
{
1255
0
    snprintf(s, ITEM_LABEL_LENGTH, "%um (%u)", 5 * v, v);
1256
0
}
1257
1258
struct nas5gs_private_data {
1259
    uint8_t sec_hdr_type;
1260
    uint32_t payload_container_type;
1261
};
1262
1263
static struct nas5gs_private_data*
1264
nas5gs_get_private_data(packet_info *pinfo)
1265
308
{
1266
308
    struct nas5gs_private_data *nas5gs_data = (struct nas5gs_private_data*)p_get_proto_data(pinfo->pool, pinfo, proto_nas_5gs, pinfo->curr_layer_num);
1267
308
    if (!nas5gs_data) {
1268
308
        nas5gs_data = wmem_new0(pinfo->pool, struct nas5gs_private_data);
1269
308
        p_add_proto_data(pinfo->pool, pinfo, proto_nas_5gs, pinfo->curr_layer_num, nas5gs_data);
1270
308
    }
1271
308
    return nas5gs_data;
1272
308
}
1273
1274
static uint32_t
1275
get_ext_ambr_unit(uint32_t unit, const char **unit_str)
1276
325
{
1277
325
    uint32_t mult;
1278
1279
325
    if (unit == 0) {
1280
68
        mult = 1;
1281
68
        *unit_str = "Unit value 0, Illegal";
1282
68
        return mult;
1283
68
    }
1284
1285
257
    if (unit <= 0x05) {
1286
171
        mult = pow4(uint32_t, unit - 0x01);
1287
171
        *unit_str = "Kbps";
1288
171
    } else if (unit <= 0x0a) {
1289
6
        mult = pow4(uint32_t, unit - 0x06);
1290
6
        *unit_str = "Mbps";
1291
80
    } else if (unit <= 0x0f) {
1292
9
        mult = pow4(uint32_t, unit - 0x0b);
1293
9
        *unit_str = "Gbps";
1294
71
    } else if (unit <= 0x14) {
1295
7
        mult = pow4(uint32_t, unit - 0x10);
1296
7
        *unit_str = "Tbps";
1297
64
    } else if (unit <= 0x19) {
1298
9
        mult = pow4(uint32_t, unit - 0x15);
1299
9
        *unit_str = "Pbps";
1300
55
    } else {
1301
55
        mult = 256;
1302
55
        *unit_str = "Pbps";
1303
55
    }
1304
257
    return mult;
1305
325
}
1306
1307
/*
1308
 * 9.11.3 5GS mobility management (5GMM) information elements
1309
 */
1310
1311
 /*
1312
  * 9.11.3.1 5GMM capability
1313
  */
1314
static uint16_t
1315
de_nas_5gs_mm_5gmm_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
1316
    uint32_t offset, unsigned len,
1317
    char *add_string _U_, int string_len _U_)
1318
0
{
1319
0
    uint32_t    curr_offset;
1320
1321
0
    static int * const flags1[] = {
1322
0
        &hf_nas_5gs_mm_sgc_b7,
1323
0
        &hf_nas_5gs_mm_5g_iphc_cp_ciot_b6,
1324
0
        &hf_nas_5gs_mm_n3_data_b5,
1325
0
        &hf_nas_5gs_mm_5g_cp_ciot_b4,
1326
0
        &hf_nas_5gs_mm_restrict_ec_b3,
1327
0
        &hf_nas_5gs_mm_lpp_cap_b2,
1328
0
        &hf_nas_5gs_mm_ho_attach_b1,
1329
0
        &hf_nas_5gs_mm_s1_mode_b0,
1330
0
        NULL
1331
0
    };
1332
1333
0
    static int * const flags2[] = {
1334
0
        &hf_nas_5gs_mm_racs_b7,
1335
0
        &hf_nas_5gs_mm_nssaa_b6,
1336
0
        &hf_nas_5gs_mm_5g_lcs_b5,
1337
0
        &hf_nas_5gs_mm_v2xcnpc5_b4,
1338
0
        &hf_nas_5gs_mm_v2xcepc5_b3,
1339
0
        &hf_nas_5gs_mm_v2x_b2,
1340
0
        &hf_nas_5gs_mm_5g_up_ciot_b1,
1341
0
        &hf_nas_5gs_mm_5g_srvcc_b0,
1342
0
        NULL
1343
0
    };
1344
1345
0
    static int * const flags3[] = {
1346
0
        &hf_nas_5gs_mm_5g_prose_l2relay_b7,
1347
0
        &hf_nas_5gs_mm_5g_prose_dc_b6,
1348
0
        &hf_nas_5gs_mm_5g_prose_dd_b5,
1349
0
        &hf_nas_5gs_mm_er_nssai_b4,
1350
0
        &hf_nas_5gs_mm_5g_ehc_cp_ciot_b3,
1351
0
        &hf_nas_5gs_mm_multiple_up_b2,
1352
0
        &hf_nas_5gs_mm_wsusa_b1,
1353
0
        &hf_nas_5gs_mm_cag_b0,
1354
0
        NULL
1355
0
    };
1356
1357
0
    static int * const flags4[] = {
1358
0
        &hf_nas_5gs_mm_pr_b7,
1359
0
        &hf_nas_5gs_mm_rpr_b6,
1360
0
        &hf_nas_5gs_mm_piv_b5,
1361
0
        &hf_nas_5gs_mm_ncr_b4,
1362
0
        &hf_nas_5gs_mm_nr_pssi_b3,
1363
0
        &hf_nas_5gs_mm_5g_prose_l3rmt_b2,
1364
0
        &hf_nas_5gs_mm_5g_prose_l2rmt_b1,
1365
0
        &hf_nas_5gs_mm_5g_prose_l3relay_b0,
1366
0
        NULL
1367
0
    };
1368
1369
0
    static int * const flags5[] = {
1370
0
        &hf_nas_5gs_mm_mpsiu_b7,
1371
0
        &hf_nas_5gs_mm_uas_b6,
1372
0
        &hf_nas_5gs_mm_nsag_b5,
1373
0
        &hf_nas_5gs_mm_ex_cag_b4,
1374
0
        &hf_nas_5gs_mm_ssnpnsi_b3,
1375
0
        &hf_nas_5gs_mm_event_notif_b2,
1376
0
        &hf_nas_5gs_mm_mint_b1,
1377
0
        &hf_nas_5gs_mm_nssrg_b0,
1378
0
        NULL
1379
0
    };
1380
1381
0
    static int * const flags6[] = {
1382
0
        &hf_nas_5gs_mm_sbts_b7,
1383
0
        &hf_nas_5gs_mm_nsr_b6,
1384
0
        &hf_nas_5gs_mm_ladn_ds_b5,
1385
0
        &hf_nas_5gs_mm_rantiming_b4,
1386
0
        &hf_nas_5gs_mm_eci_b3,
1387
0
        &hf_nas_5gs_mm_esi_b2,
1388
0
        &hf_nas_5gs_mm_rcman_b1,
1389
0
        &hf_nas_5gs_mm_rcmap_b0,
1390
0
        NULL
1391
0
    };
1392
1393
0
    static int * const flags7[] = {
1394
0
        &hf_nas_5gs_mm_5g_prose_l2end_b7,
1395
0
        &hf_nas_5gs_mm_5g_prose_l3u2u_relay_b6,
1396
0
        &hf_nas_5gs_mm_5g_prose_l2u2u_relay_b5,
1397
0
        &hf_nas_5gs_mm_rslps_b4,
1398
0
        &hf_nas_5gs_mm_sbns_b3,
1399
0
        &hf_nas_5gs_mm_un_per_b2,
1400
0
        &hf_nas_5gs_mm_a2xnpc5_b1,
1401
0
        &hf_nas_5gs_mm_a2xepc5_b0,
1402
0
        NULL
1403
0
    };
1404
1405
0
    static int * const flags8[] = {
1406
0
        &hf_nas_5gs_mm_a2x_uu_b7,
1407
0
        &hf_nas_5gs_mm_slvi_b6,
1408
0
        &hf_nas_5gs_mm_tempns_b5,
1409
0
        &hf_nas_5gs_mm_supl_b4,
1410
0
        &hf_nas_5gs_mm_lcs_upp_b3,
1411
0
        &hf_nas_5gs_mm_pns_b2,
1412
0
        &hf_nas_5gs_mm_rslp_b1,
1413
0
        &hf_nas_5gs_mm_5g_prose_l3end_b0,
1414
0
        NULL
1415
0
    };
1416
1417
0
    static int * const flags9[] = {
1418
0
        &hf_nas_5gs_lp_wuspsai_si_b7,
1419
0
        &hf_nas_5gs_atuc_b6,
1420
0
        &hf_nas_5gs_rslppu_b5,
1421
0
        &hf_nas_5gs_rslpvu_b4,
1422
0
        &hf_nas_5gs_nsuc_b3,
1423
0
        &hf_nas_5gs_rslpl_b2,
1424
0
        &hf_nas_5gs_mm_nvl_satnr_b1,
1425
0
        &hf_nas_5gs_mm_mcsiu_b0,
1426
0
        NULL
1427
0
    };
1428
1429
0
    static int * const flags10[] = {
1430
0
        &hf_nas_5gs_lwd_b7,
1431
0
        &hf_nas_5gs_ef5l_b6,
1432
0
        &hf_nas_5gs_mint_eps_b5,
1433
0
        &hf_nas_5gs_5g_prose_l2imrelay_b4,
1434
0
        &hf_nas_5gs_5g_prose_l3imrelay_b3,
1435
0
        &hf_nas_5gs_mlcsup_b2,
1436
0
        &hf_nas_5gs_5g_prose_mci_b1,
1437
0
        &hf_nas_5gs_ophpae_b0,
1438
0
        NULL
1439
0
    };
1440
1441
0
    static int * const flags11[] = {
1442
0
        &hf_nas_5gs_spare_b7,
1443
0
        &hf_nas_5gs_spare_b6,
1444
0
        &hf_nas_5gs_spare_b5,
1445
0
        &hf_nas_5gs_spare_b4,
1446
0
        &hf_nas_5gs_spare_b3,
1447
0
        &hf_nas_5gs_spare_b2,
1448
0
        &hf_nas_5gs_spare_b1,
1449
0
        &hf_nas_5gs_nonsatlsp_b0,
1450
0
        NULL
1451
0
    };
1452
1453
0
    curr_offset = offset;
1454
1455
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags1, ENC_BIG_ENDIAN);
1456
0
    curr_offset++;
1457
1458
0
    if ((curr_offset - offset) >= len)
1459
0
        return (len);
1460
1461
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags2, ENC_BIG_ENDIAN);
1462
0
    curr_offset++;
1463
1464
0
    if ((curr_offset - offset) >= len)
1465
0
        return (len);
1466
1467
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags3, ENC_BIG_ENDIAN);
1468
0
    curr_offset++;
1469
1470
0
    if ((curr_offset - offset) >= len)
1471
0
        return (len);
1472
1473
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags4, ENC_BIG_ENDIAN);
1474
0
    curr_offset++;
1475
1476
0
    if ((curr_offset - offset) >= len)
1477
0
        return (len);
1478
1479
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags5, ENC_BIG_ENDIAN);
1480
0
    curr_offset++;
1481
1482
0
    if ((curr_offset - offset) >= len)
1483
0
        return (len);
1484
1485
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags6, ENC_BIG_ENDIAN);
1486
0
    curr_offset++;
1487
1488
0
    if ((curr_offset - offset) >= len)
1489
0
        return (len);
1490
1491
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags7, ENC_BIG_ENDIAN);
1492
0
    curr_offset++;
1493
1494
0
    if ((curr_offset - offset) >= len)
1495
0
        return (len);
1496
1497
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags8, ENC_BIG_ENDIAN);
1498
0
    curr_offset++;
1499
1500
0
    if ((curr_offset - offset) >= len)
1501
0
        return (len);
1502
1503
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags9, ENC_BIG_ENDIAN);
1504
0
    curr_offset++;
1505
1506
0
    if ((curr_offset - offset) >= len)
1507
0
        return (len);
1508
1509
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags10, ENC_BIG_ENDIAN);
1510
0
    curr_offset++;
1511
1512
0
    if ((curr_offset - offset) >= len)
1513
0
        return (len);
1514
1515
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags11, ENC_BIG_ENDIAN);
1516
0
    curr_offset++;
1517
1518
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
1519
1520
0
    return (curr_offset - offset);
1521
0
}
1522
1523
/*
1524
 * 9.11.3.2 5GMM cause
1525
 */
1526
1527
static const value_string nas_5gs_mm_cause_vals[] = {
1528
    { 0x03, "Illegal UE" },
1529
    { 0x05, "PEI not accepted" },
1530
    { 0x06, "Illegal ME" },
1531
    { 0x07, "5GS services not allowed" },
1532
    { 0x09, "UE identity cannot be derived by the network" },
1533
    { 0x0a, "Implicitly deregistered" },
1534
    { 0x0b, "PLMN not allowed" },
1535
    { 0x0c, "Tracking area not allowed" },
1536
    { 0x0d, "Roaming not allowed in this tracking area" },
1537
    { 0x0f, "No suitable cells in tracking area" },
1538
    { 0x14, "MAC failure" },
1539
    { 0x15, "Synch failure" },
1540
    { 0x16, "Congestion" },
1541
    { 0x17, "UE security capabilities mismatch" },
1542
    { 0x18, "Security mode rejected, unspecified" },
1543
    { 0x1a, "Non-5G authentication unacceptable" },
1544
    { 0x1b, "N1 mode not allowed" },
1545
    { 0x1c, "Restricted service area" },
1546
    { 0x1f, "Redirection to EPC required" },
1547
    { 0x24, "IAB-node operation not authorized" },
1548
    { 0x2b, "LADN not available" },
1549
    { 0x3e, "No network slices available" },
1550
    { 0x41, "Maximum number of PDU sessions reached" },
1551
    { 0x43, "Insufficient resources for specific slice and DNN" },
1552
    { 0x45, "Insufficient resources for specific slice" },
1553
    { 0x47, "ngKSI already in use" },
1554
    { 0x48, "Non-3GPP access to 5GCN not allowed" },
1555
    { 0x49, "Serving network not authorized" },
1556
    { 0x4a, "Temporarily not authorized for this SNPN" },
1557
    { 0x4b, "Permanently not authorized for this SNPN" },
1558
    { 0x4c, "Not authorized for this CAG or authorized for CAG cells only" },
1559
    { 0x4d, "Wireline access area not allowed" },
1560
    { 0x4e, "PLMN not allowed to operate at the present UE location" },
1561
    { 0x4f, "UAS services not allowed" },
1562
    { 0x50, "Disaster roaming for the determined PLMN with disaster condition not allowed" },
1563
    { 0x51, "Selected N3IWF is not compatible with the allowed NSSAI" },
1564
    { 0x52, "Selected TNGF is not compatible with the allowed NSSAI" },
1565
    { 0x5a, "Payload was not forwarded" },
1566
    { 0x5b, "DNN not supported or not subscribed in the slice" },
1567
    { 0x5c, "Insufficient user-plane resources for the PDU session" },
1568
    { 0x5d, "Onboarding services terminated" },
1569
    { 0x5e, "User plane positioning not authorized" },
1570
    { 0x5f, "Semantically incorrect message" },
1571
    { 0x60, "Invalid mandatory information" },
1572
    { 0x61, "Message type non-existent or not implemented" },
1573
    { 0x62, "Message type not compatible with the protocol state" },
1574
    { 0x63, "Information element non-existent or not implemented" },
1575
    { 0x64, "Conditional IE error" },
1576
    { 0x65, "Message not compatible with the protocol state" },
1577
    { 0x6f, "Protocol error, unspecified" },
1578
    { 0,    NULL }
1579
};
1580
1581
static uint16_t
1582
de_nas_5gs_mm_5gmm_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
1583
    uint32_t offset, unsigned len _U_,
1584
    char *add_string _U_, int string_len _U_)
1585
0
{
1586
0
    uint32_t cause;
1587
1588
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_5gmm_cause, tvb, offset, 1, ENC_BIG_ENDIAN, &cause);
1589
1590
0
    col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)",
1591
0
        val_to_str_const(cause, nas_5gs_mm_cause_vals, "Unknown"));
1592
1593
1594
0
    return 1;
1595
0
}
1596
1597
1598
static const value_string nas_5gs_mm_drx_vals[] = {
1599
    { 0x0, "DRX value not specified" },
1600
    { 0x1, "DRX cycle parameter T = 32" },
1601
    { 0x2, "DRX cycle parameter T = 64" },
1602
    { 0x3, "DRX cycle parameter T = 128" },
1603
    { 0x4, "DRX cycle parameter T = 256" },
1604
    { 0, NULL }
1605
};
1606
1607
1608
/* 9.11.3.2A    5GS DRX parameters*/
1609
static uint16_t
1610
de_nas_5gs_mm_5gs_drx_param(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
1611
    uint32_t offset, unsigned len _U_,
1612
    char *add_string _U_, int string_len _U_)
1613
0
{
1614
1615
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_5gs_drx_param, tvb, offset, 1, ENC_BIG_ENDIAN);
1616
1617
0
    return 1;
1618
0
}
1619
1620
/*
1621
 * 9.11.3.3 5GS identity type
1622
 */
1623
static uint16_t
1624
de_nas_5gs_mm_5gs_identity_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
1625
    uint32_t offset, unsigned len _U_,
1626
    char *add_string _U_, int string_len _U_)
1627
0
{
1628
1629
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_type_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1630
1631
0
    return 1;
1632
0
}
1633
1634
/*
1635
 * 9.11.3.4    5GS mobile identity
1636
 */
1637
static const value_string nas_5gs_mm_type_id_vals[] = {
1638
    { 0x0, "No identity" },
1639
    { 0x1, "SUCI" },
1640
    { 0x2, "5G-GUTI" },
1641
    { 0x3, "IMEI" },
1642
    { 0x4, "5G-S-TMSI" },
1643
    { 0x5, "IMEISV" },
1644
    { 0x6, "MAC address" },
1645
    { 0x7, "EUI-64" },
1646
    { 0, NULL }
1647
 };
1648
1649
static true_false_string nas_5gs_odd_even_tfs = {
1650
    "Odd number of identity digits",
1651
    "Even number of identity digits"
1652
};
1653
1654
static const value_string nas_5gs_mm_supi_fmt_vals[] = {
1655
    { 0x0, "IMSI" },
1656
    { 0x1, "Network Specific Identifier" },
1657
    { 0x2, "GCI" },
1658
    { 0x3, "GLI" },
1659
    { 0, NULL }
1660
};
1661
1662
static const value_string nas_5gs_mm_prot_scheme_id_vals[] = {
1663
    { 0x0, "NULL scheme" },
1664
    { 0x1, "ECIES scheme profile A" },
1665
    { 0x2, "ECIES scheme profile B" },
1666
    { 0, NULL }
1667
};
1668
1669
static true_false_string nas_5gs_mauri_tfs = {
1670
    "MAC address is not usable as an equipment identifier",
1671
    "No restrictions"
1672
};
1673
1674
static uint16_t
1675
de_nas_5gs_mm_5gs_mobile_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
1676
    uint32_t offset, unsigned len,
1677
    char *add_string _U_, int string_len _U_)
1678
0
{
1679
0
    uint8_t oct, type_id, supi_fmt;
1680
0
    uint32_t scheme_id, fiveg_tmsi;
1681
0
    tvbuff_t * new_tvb;
1682
0
    const char *route_id_str;
1683
0
    proto_item* ti;
1684
1685
0
    static int * const flags_spare_tid[] = {
1686
0
        &hf_nas_5gs_spare_b7,
1687
0
        &hf_nas_5gs_spare_b6,
1688
0
        &hf_nas_5gs_spare_b5,
1689
0
        &hf_nas_5gs_spare_b4,
1690
0
        &hf_nas_5gs_spare_b3,
1691
0
        &hf_nas_5gs_mm_type_id,
1692
0
        NULL
1693
0
    };
1694
1695
0
    static int * const flags_supi_fmt_tid[] = {
1696
0
        &hf_nas_5gs_spare_b7,
1697
0
        &hf_nas_5gs_mm_supi_fmt,
1698
0
        &hf_nas_5gs_spare_b3,
1699
0
        &hf_nas_5gs_mm_type_id,
1700
0
        NULL
1701
0
    };
1702
1703
0
    static int * const flags_odd_even_tid[] = {
1704
0
        &hf_nas_5gs_mm_odd_even,
1705
0
        &hf_nas_5gs_mm_type_id,
1706
0
        NULL
1707
0
    };
1708
1709
0
    static int * const flags_mauri_tid[] = {
1710
0
        &hf_nas_5gs_spare_b7,
1711
0
        &hf_nas_5gs_spare_b6,
1712
0
        &hf_nas_5gs_spare_b5,
1713
0
        &hf_nas_5gs_spare_b4,
1714
0
        &hf_nas_5gs_mm_mauri,
1715
0
        &hf_nas_5gs_mm_type_id,
1716
0
        NULL
1717
0
    };
1718
1719
0
    oct = tvb_get_uint8(tvb, offset);
1720
0
    type_id = oct & 0x07;
1721
1722
0
    switch (type_id) {
1723
0
    case 0:
1724
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_spare_tid, ENC_BIG_ENDIAN);
1725
0
        break;
1726
0
    case 1:
1727
        /* SUCI */
1728
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_supi_fmt_tid, ENC_BIG_ENDIAN);
1729
0
        offset++;
1730
1731
0
        supi_fmt = (oct & 0x70) >> 4;
1732
0
        if (supi_fmt == 0) {
1733
            /* IMSI */
1734
1735
            /* MCC digit 2    MCC digit 1
1736
             * MNC digit 3    MCC digit 3
1737
             * MNC digit 2    MNC digit 1
1738
             */
1739
0
            offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, true);
1740
            /* Routing indicator octet 8-9 */
1741
0
            new_tvb = tvb_new_subset_length(tvb, offset, 2);
1742
0
            route_id_str = tvb_bcd_dig_to_str(pinfo->pool, new_tvb, 0, (tvb_get_uint8(new_tvb, 1) == 0xff) ? 1 : 2, NULL, false);
1743
0
            proto_tree_add_string(tree, hf_nas_5gs_mm_routing_indicator, new_tvb, 0, -1, route_id_str);
1744
0
            offset += 2;
1745
            /* Protection scheme id octet 10 */
1746
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_prot_scheme_id, tvb, offset, 1, ENC_BIG_ENDIAN, &scheme_id);
1747
0
            offset += 1;
1748
            /* Home network public key identifier octet 11 */
1749
0
            proto_tree_add_item(tree, hf_nas_5gs_mm_pki, tvb, offset, 1, ENC_BIG_ENDIAN);
1750
0
            offset += 1;
1751
            /* Scheme output octet 12-x */
1752
0
            if (scheme_id == 0) {
1753
0
                new_tvb = tvb_new_subset_length(tvb, offset, len - 8);
1754
0
                proto_tree_add_item(tree, hf_nas_5gs_mm_suci_msin, new_tvb, 0, -1, ENC_BCD_DIGITS_0_9|ENC_LITTLE_ENDIAN);
1755
0
            } else {
1756
0
                proto_item *pi = proto_tree_add_item(tree, hf_nas_5gs_mm_scheme_output, tvb, offset, len - 8, ENC_NA);
1757
0
                if ((scheme_id == 1 && len >= 49) || (scheme_id == 2 && len >= 50)) {
1758
0
                    uint32_t public_key_len;
1759
0
                    proto_tree *subtree = proto_item_add_subtree(pi, ett_nas_5gs_mm_scheme_output);
1760
0
                    if (scheme_id == 1) {
1761
0
                        public_key_len = 32;
1762
0
                    } else {
1763
0
                        public_key_len = 33;
1764
0
                    }
1765
0
                    proto_tree_add_item(subtree, hf_nas_5gs_mm_scheme_output_ecc_public_key, tvb, offset, public_key_len, ENC_NA);
1766
0
                    offset += public_key_len;
1767
0
                    proto_tree_add_item(subtree, hf_nas_5gs_mm_scheme_output_ciphertext, tvb, offset, len - public_key_len - 16, ENC_NA);
1768
0
                    offset += len - public_key_len - 16;
1769
0
                    proto_tree_add_item(subtree, hf_nas_5gs_mm_scheme_output_mac_tag, tvb, offset, 8, ENC_BIG_ENDIAN);
1770
0
                }
1771
0
            }
1772
0
        } else if (supi_fmt == 1 ||supi_fmt == 2 ||supi_fmt == 3) {
1773
            /* NAI */
1774
0
            proto_tree_add_item(tree, hf_nas_5gs_mm_suci_nai, tvb, offset, len - 1, ENC_UTF_8);
1775
0
        } else {
1776
0
            proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_unknown_value, tvb, offset, len - 1);
1777
0
        }
1778
0
        break;
1779
0
    case 2:
1780
        /* 5G-GUTI*/
1781
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_spare_tid, ENC_BIG_ENDIAN);
1782
0
        offset++;
1783
        /* MCC digit 2    MCC digit 1
1784
         * MNC digit 3    MCC digit 3
1785
         * MNC digit 2    MNC digit 1
1786
         */
1787
0
        offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_GUAMI, true);
1788
        /* AMF Region ID octet 7 */
1789
0
        proto_tree_add_item(tree, hf_nas_5gs_amf_region_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1790
0
        offset += 1;
1791
        /* AMF Set ID octet 8 */
1792
0
        proto_tree_add_item(tree, hf_nas_5gs_amf_set_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1793
0
        offset++;
1794
        /* AMF AMF Pointer AMF Set ID (continued) */
1795
0
        proto_tree_add_item(tree, hf_nas_5gs_amf_pointer, tvb, offset, 1, ENC_BIG_ENDIAN);
1796
0
        offset++;
1797
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_5g_tmsi, tvb, offset, 4, ENC_BIG_ENDIAN, &fiveg_tmsi);
1798
0
        ti = proto_tree_add_uint(tree, hf_3gpp_tmsi, tvb, offset, 4, fiveg_tmsi);
1799
0
        proto_item_set_hidden(ti);
1800
0
        break;
1801
0
    case 3:
1802
        /* IMEI */
1803
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_odd_even_tid, ENC_BIG_ENDIAN);
1804
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_imei, tvb, offset, len, ENC_BCD_DIGITS_0_9 | ENC_LITTLE_ENDIAN | ENC_BCD_SKIP_FIRST);
1805
0
        break;
1806
0
    case 4:
1807
        /*5G-S-TMSI*/
1808
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_odd_even_tid, ENC_BIG_ENDIAN);
1809
0
        offset++;
1810
        /* AMF Set ID */
1811
0
        proto_tree_add_item(tree, hf_nas_5gs_amf_set_id, tvb, offset, 2, ENC_BIG_ENDIAN);
1812
0
        offset++;
1813
        /* AMF Pointer AMF Set ID (continued) */
1814
0
        proto_tree_add_item(tree, hf_nas_5gs_amf_pointer, tvb, offset, 1, ENC_BIG_ENDIAN);
1815
0
        offset++;
1816
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_5g_tmsi, tvb, offset, 4, ENC_BIG_ENDIAN, &fiveg_tmsi);
1817
0
        ti = proto_tree_add_uint(tree, hf_3gpp_tmsi, tvb, offset, 4, fiveg_tmsi);
1818
0
        proto_item_set_hidden(ti);
1819
0
        break;
1820
0
    case 5:
1821
        /* IMEISV */
1822
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_odd_even_tid, ENC_BIG_ENDIAN);
1823
        /* XXXX Do we need the odd/even bit?*/
1824
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_imeisv, tvb, offset, len, ENC_BCD_DIGITS_0_9 | ENC_LITTLE_ENDIAN | ENC_BCD_SKIP_FIRST);
1825
0
        break;
1826
0
    case 6:
1827
        /* MAC address */
1828
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_mauri_tid, ENC_BIG_ENDIAN);
1829
0
        offset++;
1830
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_mac_addr, tvb, offset, 6, ENC_NA);
1831
0
        break;
1832
0
    case 7:
1833
        /* EUI-64 */
1834
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_spare_tid, ENC_BIG_ENDIAN);
1835
0
        offset++;
1836
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_eui_64, tvb, offset, 8, ENC_BIG_ENDIAN);
1837
0
        break;
1838
1839
0
    default:
1840
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_type_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1841
0
        proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_unknown_value, tvb, offset, len);
1842
0
        break;
1843
0
    }
1844
1845
0
    return len;
1846
0
}
1847
1848
/*
1849
 * 9.11.3.5    5GS network feature support
1850
 */
1851
1852
static const value_string nas_5gs_nw_feat_sup_emc_values[] = {
1853
    { 0x0, "Emergency services not supported" },
1854
    { 0x1, "Emergency services supported in NR connected to 5GCN only" },
1855
    { 0x2, "Emergency services supported in E-UTRA connected to 5GCN only" },
1856
    { 0x3, "Emergency services supported in NR connected to 5GCN and E-UTRA connected to 5GCN" },
1857
    { 0, NULL }
1858
};
1859
1860
static const value_string nas_5gs_nw_feat_sup_emf_values[] = {
1861
    { 0x0, "Emergency services fallback not supported" },
1862
    { 0x1, "Emergency services fallback supported in NR connected to 5GCN only" },
1863
    { 0x2, "Emergency services fallback supported in E-UTRA connected to 5GCN only" },
1864
    { 0x3, "Emergency services fallback supported in NR connected to 5GCN and E-UTRA connected to 5GCN" },
1865
    { 0, NULL }
1866
};
1867
1868
static const true_false_string tfs_nas_5gs_nw_feat_sup_mpsi = {
1869
    "Access identity 1 valid in RPLMN or equivalent PLMN",
1870
    "Access identity 1 not valid in RPLMN or equivalent PLMN"
1871
};
1872
1873
static const true_false_string tfs_nas_5gs_nw_feat_sup_mcsi = {
1874
    "Access identity 2 valid",
1875
    "Access identity 2 not valid"
1876
};
1877
1878
static const value_string nas_5gs_nw_feat_sup_restrict_ec_values[] = {
1879
    { 0x0, "WB-N1: Both CE mode A and CE mode B are not restricted / NB-N1: Use of enhanced coverage is not restricted" },
1880
    { 0x1, "WB-N1: Both CE mode A and CE mode B are restricted / NB-N1: Use of enhanced coverage is restricted" },
1881
    { 0x2, "WB-N1: CE mode B is restricted / NB-N1: Restricted" },
1882
    { 0x3, "Restricted" },
1883
    { 0, NULL }
1884
};
1885
1886
static uint16_t
1887
de_nas_5gs_mm_5gs_nw_feat_sup(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
1888
    uint32_t offset, unsigned len,
1889
    char *add_string _U_, int string_len _U_)
1890
0
{
1891
0
    uint32_t curr_offset = offset;
1892
1893
0
    static int * const flags_oct3[] = {
1894
0
        &hf_nas_5gs_nw_feat_sup_mpsi_b7,
1895
0
        &hf_nas_5gs_nw_feat_sup_ims_iwk_n26_b6,
1896
0
        &hf_nas_5gs_nw_feat_sup_ims_emf_b5b4,
1897
0
        &hf_nas_5gs_nw_feat_sup_ims_emc_b3b2,
1898
0
        &hf_nas_5gs_nw_feat_sup_ims_vops_n3gpp,
1899
0
        &hf_nas_5gs_nw_feat_sup_ims_vops_3gpp,
1900
0
        NULL
1901
0
    };
1902
1903
0
    static int * const flags_oct4[] = {
1904
0
        &hf_nas_5gs_nw_feat_sup_5g_ciot_up,
1905
0
        &hf_nas_5gs_nw_feat_sup_5g_iphc_cp_ciot,
1906
0
        &hf_nas_5gs_nw_feat_sup_n3_data,
1907
0
        &hf_nas_5gs_nw_feat_sup_5g_cp_ciot,
1908
0
        &hf_nas_5gs_nw_feat_sup_restrict_ec,
1909
0
        &hf_nas_5gs_nw_feat_sup_mcsi,
1910
0
        &hf_nas_5gs_nw_feat_sup_emcn3,
1911
0
        NULL
1912
0
    };
1913
1914
0
    static int * const flags_oct5[] = {
1915
0
        &hf_nas_5gs_nw_feat_sup_un_per,
1916
0
        &hf_nas_5gs_nw_feat_sup_pr,
1917
0
        &hf_nas_5gs_nw_feat_sup_rpr,
1918
0
        &hf_nas_5gs_nw_feat_sup_piv,
1919
0
        &hf_nas_5gs_nw_feat_sup_ncr,
1920
0
        &hf_nas_5gs_nw_feat_sup_5g_ehc_cp_ciot,
1921
0
        &hf_nas_5gs_nw_feat_sup_ats_ind,
1922
0
        &hf_nas_5gs_nw_feat_sup_5g_lcs,
1923
0
        NULL
1924
0
    };
1925
1926
0
    static int * const flags_oct6[] = {
1927
0
        &hf_nas_5gs_spare_b7,
1928
0
        &hf_nas_5gs_spare_b6,
1929
0
        &hf_nas_5gs_nw_feat_sup_ef5l,
1930
0
        &hf_nas_5gs_nw_feat_sup_mlcsup,
1931
0
        &hf_nas_5gs_nw_feat_sup_rslp,
1932
0
        &hf_nas_5gs_nw_feat_sup_supl,
1933
0
        &hf_nas_5gs_nw_feat_sup_lcs_upp,
1934
0
        &hf_nas_5gs_nw_feat_sup_naps,
1935
0
        NULL
1936
0
    };
1937
1938
    /* MPSI    IWK N26    EMF    EMC    IMS VoPS    octet 3*/
1939
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_oct3, ENC_BIG_ENDIAN);
1940
0
    curr_offset++;
1941
1942
0
    if (len == 1) {
1943
0
        return len;
1944
0
    }
1945
1946
    /* 5G-UP CIoT 5G-IPHC-CP CIoT N3 data 5G-CP CIoT RestrictEC MCSI EMCN3 octet 4*/
1947
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_oct4, ENC_BIG_ENDIAN);
1948
0
    curr_offset++;
1949
1950
0
    if (len == 2) {
1951
0
        return len;
1952
0
    }
1953
1954
    /* UN-PER PR RPR PIV NCR 5G-EHC-CP CIoT ATS-IND 5G-LCS octet 5*/
1955
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_oct5, ENC_BIG_ENDIAN);
1956
0
    curr_offset++;
1957
1958
0
    if (len == 3) {
1959
0
        return len;
1960
0
    }
1961
1962
    /* spare spare spare spare RSLP SUPL LCS-UPP NAPS octet 6*/
1963
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_oct6, ENC_BIG_ENDIAN);
1964
0
    curr_offset++;
1965
1966
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
1967
1968
0
    return len;
1969
0
}
1970
1971
/*
1972
 * 9.11.3.6    5GS registration result
1973
 */
1974
1975
static const value_string nas_5gs_mm_reg_res_values[] = {
1976
    { 0x1, "3GPP access" },
1977
    { 0x2, "Non-3GPP access" },
1978
    { 0x3, "3GPP access and non-3GPP access" },
1979
{ 0, NULL }
1980
};
1981
1982
static true_false_string tfs_nas_5gs_mm_reg_res_nssaa_perf = {
1983
    "Network slice-specific authentication and authorization is to be performed",
1984
    "Network slice-specific authentication and authorization is not to be performed"
1985
};
1986
1987
static true_false_string tfs_nas_5gs_mm_reg_res_emergency_reg = {
1988
    "Registered for emergency services",
1989
    "Not registered for emergency services"
1990
};
1991
1992
static true_false_string tfs_nas_5gs_mm_reg_res_disaster_roaming_reg_res = {
1993
    "Request for registration for disaster roaming services accepted as registration not for disaster roaming services",
1994
    "No additional information"
1995
};
1996
1997
static uint16_t
1998
de_nas_5gs_mm_5gs_reg_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
1999
    uint32_t offset, unsigned len _U_,
2000
    char *add_string _U_, int string_len _U_)
2001
0
{
2002
2003
0
    static int* const flags[] = {
2004
0
        &hf_nas_5gs_mm_reg_res_disaster_roaming_reg_res,
2005
0
        &hf_nas_5gs_mm_reg_res_emergency_reg,
2006
0
        &hf_nas_5gs_mm_reg_res_nssaa_perf,
2007
0
        &hf_nas_5gs_mm_reg_res_sms_allowed,
2008
0
        &hf_nas_5gs_mm_reg_res_res,
2009
0
        NULL
2010
0
    };
2011
2012
    /* 0 Spare 0 Spare 0 Spare NSSAA Performed SMS allowed 5GS registration result value */
2013
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
2014
2015
0
    return 1;
2016
0
}
2017
2018
/*
2019
 * 9.11.3.7    5GS registration type
2020
 */
2021
2022
static const value_string nas_5gs_registration_type_values[] = {
2023
    { 0x1, "initial registration" },
2024
    { 0x2, "mobility registration updating" },
2025
    { 0x3, "periodic registration updating" },
2026
    { 0x4, "emergency registration" },
2027
    { 0x5, "SNPN onboarding registration" },
2028
    { 0x6, "disaster roaming mobility registration updating" },
2029
    { 0x7, "disaster roaming initial registration" },
2030
    { 0, NULL }
2031
 };
2032
2033
static true_false_string nas_5gs_for_tfs = {
2034
    "Follow-on request pending",
2035
    "No follow-on request pending"
2036
};
2037
2038
static int * const nas_5gs_registration_type_flags[] = {
2039
    &hf_nas_5gs_mm_for,
2040
    &hf_nas_5gs_mm_5gs_reg_type,
2041
    NULL
2042
};
2043
2044
static uint16_t
2045
de_nas_5gs_mm_5gs_reg_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
2046
    uint32_t offset, unsigned len _U_,
2047
    char *add_string _U_, int string_len _U_)
2048
0
{
2049
2050
2051
2052
    /* FOR    SMS requested    5GS registration type value    octet 3*/
2053
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, nas_5gs_registration_type_flags, ENC_BIG_ENDIAN);
2054
2055
0
    return 1;
2056
0
}
2057
2058
/*
2059
 * 9.11.3.8     5GS tracking area identity
2060
 */
2061
static uint16_t
2062
de_nas_5gs_mm_5gs_ta_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
2063
    uint32_t offset, unsigned len _U_,
2064
    char *add_string _U_, int string_len _U_)
2065
0
{
2066
    /* MCC digit 2    MCC digit 1 Octet 2*/
2067
    /* MNC digit 3    MCC digit 3 Octet 3*/
2068
    /* MNC digit 2    MNC digit 1 Octet 4*/
2069
    /* TAC Octet 5 - 7 */
2070
0
    uint32_t curr_offset;
2071
2072
0
    curr_offset = offset;
2073
2074
0
    curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, curr_offset, E212_5GSTAI, true);
2075
0
    proto_tree_add_item(tree, hf_nas_5gs_tac, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
2076
0
    curr_offset += 3;
2077
2078
0
    return curr_offset - offset;
2079
0
}
2080
2081
/*
2082
 * 9.11.3.9     5GS tracking area identity list
2083
 */
2084
static const value_string nas_5gs_mm_tal_t_li_values[] = {
2085
    { 0x00, "list of TACs belonging to one PLMN or SNPN, with non-consecutive TAC values" },
2086
    { 0x01, "list of TACs belonging to one PLMN or SNPN, with consecutive TAC values" },
2087
    { 0x02, "list of TAIs belonging to different PLMNs" },
2088
    { 0, NULL } };
2089
2090
static const value_string nas_5gs_mm_tal_num_e[] = {
2091
    { 0x00, "1 element" },
2092
    { 0x01, "2 elements" },
2093
    { 0x02, "3 elements" },
2094
    { 0x03, "4 elements" },
2095
    { 0x04, "5 elements" },
2096
    { 0x05, "6 elements" },
2097
    { 0x06, "7 elements" },
2098
    { 0x07, "8 elements" },
2099
    { 0x08, "9 elements" },
2100
    { 0x09, "10 elements" },
2101
    { 0x0a, "11 elements" },
2102
    { 0x0b, "12 elements" },
2103
    { 0x0c, "13 elements" },
2104
    { 0x0d, "14 elements" },
2105
    { 0x0e, "15 elements" },
2106
    { 0x0f, "16 elements" },
2107
    { 0, NULL }
2108
};
2109
2110
static uint16_t
2111
de_nas_5gs_mm_5gs_ta_id_list(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
2112
    uint32_t offset, unsigned len,
2113
    char *add_string _U_, int string_len _U_)
2114
0
{
2115
0
    proto_tree *sub_tree;
2116
0
    proto_item *item;
2117
2118
0
    static int * const flags[] = {
2119
0
        &hf_nas_5gs_mm_tal_t_li,
2120
0
        &hf_nas_5gs_mm_tal_num_e,
2121
0
        NULL
2122
0
    };
2123
2124
0
    unsigned num_par_tal = 1;
2125
0
    uint32_t curr_offset = offset;
2126
0
    uint32_t start_offset;
2127
0
    uint8_t tal_head, tal_t_li, tal_num_e;
2128
2129
    /*Partial tracking area list*/
2130
0
    while ((curr_offset - offset) < len) {
2131
0
        start_offset = curr_offset;
2132
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_part_tal, &item, "Partial tracking area list  %u", num_par_tal);
2133
        /*Head of Partial tracking area list*/
2134
        /* Type of list    Number of elements    octet 1 */
2135
0
        tal_head = tvb_get_uint8(tvb, curr_offset);
2136
0
        tal_t_li = (tal_head & 0x60) >> 5;
2137
0
        tal_num_e = (tal_head & 0x1f) + 1;
2138
0
        proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, flags, ENC_BIG_ENDIAN);
2139
0
        curr_offset++;
2140
0
        switch (tal_t_li) {
2141
0
        case 0:
2142
            /*octet 2  MCC digit2  MCC digit1*/
2143
            /*octet 3  MNC digit3  MCC digit3*/
2144
            /*octet 4  MNC digit2  MNC digit1*/
2145
0
            dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_5GSTAI, true);
2146
0
            curr_offset += 3;
2147
0
            while (tal_num_e > 0) {
2148
0
                proto_tree_add_item(sub_tree, hf_nas_5gs_tac, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
2149
0
                curr_offset += 3;
2150
0
                tal_num_e--;
2151
0
            }
2152
0
            break;
2153
0
        case 1:
2154
            /*octet 2  MCC digit2  MCC digit1*/
2155
            /*octet 3  MNC digit3  MCC digit3*/
2156
            /*octet 4  MNC digit2  MNC digit1*/
2157
0
            dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_5GSTAI, true);
2158
0
            curr_offset += 3;
2159
2160
            /*octet 5  TAC 1*/
2161
0
            proto_tree_add_item(sub_tree, hf_nas_5gs_tac, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
2162
0
            curr_offset+=3;
2163
0
            break;
2164
0
        case 2:
2165
0
            while (tal_num_e > 0) {
2166
                /*octet 2  MCC digit2  MCC digit1*/
2167
                /*octet 3  MNC digit3  MCC digit3*/
2168
                /*octet 4  MNC digit2  MNC digit1*/
2169
0
                dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_5GSTAI, true);
2170
0
                curr_offset += 3;
2171
2172
                /*octet 5  TAC 1*/
2173
0
                proto_tree_add_item(sub_tree, hf_nas_5gs_tac, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
2174
0
                curr_offset += 3;
2175
2176
0
                tal_num_e--;
2177
0
            }
2178
0
            break;
2179
0
        case 3:
2180
0
            dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_5GSTAI, true);
2181
0
            curr_offset += 3;
2182
0
            break;
2183
0
        default:
2184
0
            proto_tree_add_expert(sub_tree, pinfo, &ei_nas_5gs_unknown_value, tvb, curr_offset, len - 1);
2185
0
        }
2186
2187
        /*calculate the length of IE?*/
2188
0
        proto_item_set_len(item, curr_offset - start_offset);
2189
        /*calculate the number of Partial tracking area list*/
2190
0
        num_par_tal++;
2191
0
    }
2192
2193
0
    return len;
2194
0
}
2195
2196
/*
2197
 * 9.11.3.9A    5GS update type
2198
 */
2199
static const value_string nas_5gs_mm_5gs_pnb_ciot_values[] = {
2200
    { 0x0, "no additional information" },
2201
    { 0x1, "control plane CIoT 5GS optimization" },
2202
    { 0x2, "user plane CIoT 5GS optimization" },
2203
    { 0x3, "reserved" },
2204
    { 0, NULL }
2205
};
2206
2207
static const value_string nas_5gs_mm_eps_pnb_ciot_values[] = {
2208
    { 0x0, "no additional information" },
2209
    { 0x1, "control plane CIoT EPS optimization" },
2210
    { 0x2, "user plane CIoT EPS optimization" },
2211
    { 0x3, "reserved" },
2212
    { 0, NULL }
2213
};
2214
2215
static uint16_t
2216
de_nas_5gs_mm_update_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
2217
    uint32_t offset, unsigned len _U_,
2218
    char *add_string _U_, int string_len _U_)
2219
0
{
2220
0
    static int * const flags[] = {
2221
0
        &hf_nas_5gs_spare_b7,
2222
0
        &hf_nas_5gs_spare_b6,
2223
0
        &hf_nas_5gs_mm_eps_pnb_ciot,
2224
0
        &hf_nas_5gs_mm_5gs_pnb_ciot,
2225
0
        &hf_nas_5gs_mm_ng_ran_rcu,
2226
0
        &hf_nas_5gs_mm_sms_requested,
2227
0
        NULL
2228
0
    };
2229
2230
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
2231
2232
0
    return 1;
2233
2234
0
}
2235
2236
/*
2237
 * 9.11.3.10    ABBA
2238
 */
2239
static uint16_t
2240
de_nas_5gs_mm_abba(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
2241
    uint32_t offset, unsigned len,
2242
    char *add_string _U_, int string_len _U_)
2243
0
{
2244
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_abba, tvb, offset, len, ENC_NA);
2245
2246
0
    return len;
2247
0
}
2248
2249
/*
2250
 * 9.11.3.11    Void
2251
 */
2252
2253
/*
2254
 * 9.11.3.12    Additional 5G security information
2255
 */
2256
static uint16_t
2257
de_nas_5gs_mm_add_5g_sec_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
2258
    uint32_t offset, unsigned len _U_,
2259
    char *add_string _U_, int string_len _U_)
2260
0
{
2261
0
    static int * const flags[] = {
2262
0
        &hf_nas_5gs_spare_b7,
2263
0
        &hf_nas_5gs_spare_b6,
2264
0
        &hf_nas_5gs_spare_b5,
2265
0
        &hf_nas_5gs_spare_b4,
2266
0
        &hf_nas_5gs_spare_b3,
2267
0
        &hf_nas_5gs_spare_b2,
2268
0
        &hf_nas_5gs_mm_rinmr,
2269
0
        &hf_nas_5gs_mm_hdp,
2270
0
        NULL
2271
0
    };
2272
2273
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
2274
2275
0
    return 1;
2276
0
}
2277
2278
/*
2279
 * 9.11.3.12A   Additional information requested
2280
 */
2281
static uint16_t
2282
de_nas_5gs_mm_add_inf_req(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
2283
    uint32_t offset, unsigned len _U_,
2284
    char* add_string _U_, int string_len _U_)
2285
0
{
2286
0
    static int* const flags[] = {
2287
0
        &hf_nas_5gs_spare_b7,
2288
0
        &hf_nas_5gs_spare_b6,
2289
0
        &hf_nas_5gs_spare_b5,
2290
0
        &hf_nas_5gs_spare_b4,
2291
0
        &hf_nas_5gs_spare_b3,
2292
0
        &hf_nas_5gs_spare_b2,
2293
0
        &hf_nas_5gs_spare_b1,
2294
0
        &hf_nas_5gs_mm_cipher_key,
2295
0
        NULL
2296
0
    };
2297
2298
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
2299
2300
0
    return 1;
2301
0
}
2302
2303
/*
2304
 *  9.11.3.13    Allowed PDU session status
2305
 */
2306
static true_false_string tfs_nas_5gs_allow_pdu_ses_sts_psi = {
2307
    "user-plane resources of corresponding PDU session can be re-established over 3GPP access",
2308
    "user-plane resources of corresponding PDU session is not allowed to be re-established over 3GPP access"
2309
};
2310
2311
static uint16_t
2312
de_nas_5gs_mm_allow_pdu_ses_sts(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
2313
    uint32_t offset, unsigned len,
2314
    char *add_string _U_, int string_len _U_)
2315
2316
0
{
2317
0
    int curr_offset;
2318
2319
0
    static int * const psi_0_7_flags[] = {
2320
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_7_b7,
2321
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_6_b6,
2322
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_5_b5,
2323
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_4_b4,
2324
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_3_b3,
2325
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_2_b2,
2326
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_1_b1,
2327
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_0_b0,
2328
0
        NULL
2329
0
    };
2330
2331
0
    static int * const psi_8_15_flags[] = {
2332
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_15_b7,
2333
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_14_b6,
2334
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_13_b5,
2335
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_12_b4,
2336
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_11_b3,
2337
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_10_b2,
2338
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_9_b1,
2339
0
        &hf_nas_5gs_allow_pdu_ses_sts_psi_8_b0,
2340
0
        NULL
2341
0
    };
2342
2343
0
    curr_offset = offset;
2344
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, psi_0_7_flags, ENC_BIG_ENDIAN);
2345
0
    curr_offset++;
2346
2347
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, psi_8_15_flags, ENC_BIG_ENDIAN);
2348
0
    curr_offset++;
2349
2350
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
2351
2352
0
    return (curr_offset - offset);
2353
0
}
2354
2355
/*
2356
 * 9.11.3.14    Authentication failure parameter
2357
 */
2358
/* See subclause 10.5.3.2.2 in 3GPP TS 24.008 */
2359
2360
/*
2361
 *  9.11.3.15    Authentication parameter AUTN
2362
 */
2363
/* See subclause 10.5.3.1 in 3GPP TS 24.008 */
2364
2365
/*
2366
 *   9.11.3.16    Authentication parameter RAND
2367
 */
2368
2369
/* See subclause 10.5.3.1 in 3GPP TS 24.008 */
2370
2371
/*
2372
 * 9.11.3.17    Authentication response parameter
2373
 */
2374
/* See subclause 9.9.3.4 in 3GPP TS 24.301 */
2375
2376
/*
2377
 *   9.11.3.18    Configuration update indication
2378
 */
2379
static uint16_t
2380
de_nas_5gs_mm_conf_upd_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
2381
    uint32_t offset, unsigned len _U_,
2382
    char *add_string _U_, int string_len _U_)
2383
0
{
2384
2385
0
    static int * const flags[] = {
2386
0
        &hf_nas_5gs_spare_b3,
2387
0
        &hf_nas_5gs_spare_b2,
2388
0
        &hf_nas_5gs_mm_conf_upd_ind_red_b1,
2389
0
        &hf_nas_5gs_mm_conf_upd_ind_ack_b0,
2390
0
        NULL
2391
0
    };
2392
2393
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
2394
2395
0
    return 1;
2396
0
}
2397
2398
/*
2399
 * 9.11.3.18A   CAG information list
2400
 */
2401
static true_false_string tfs_5gs_mm_cag_info_entry_cag_only = {
2402
    "the UE is not allowed to access 5GS via non-CAG cells",
2403
    "the UE is allowed to access 5GS via non-CAG cells"
2404
};
2405
2406
static uint16_t
2407
dissect_nas_5gs_mm_cag_information_list(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
2408
    uint32_t offset, unsigned len, bool is_ext)
2409
0
{
2410
0
    proto_tree *sub_tree;
2411
0
    proto_item *item;
2412
0
    unsigned num_entry = 1;
2413
0
    uint32_t curr_offset = offset;
2414
0
    uint32_t start_offset, entry_len, cag_id_offset;
2415
0
    bool caili, lci;
2416
2417
0
    while ((curr_offset - offset) < len) {
2418
0
        start_offset = curr_offset;
2419
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_cag_info_entry,
2420
0
                                                 &item, "%sCAG information entry %u",
2421
0
                                                 is_ext ? "Extended " : "", num_entry);
2422
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_cag_info_entry_len, tvb, curr_offset, is_ext ? 2 : 1, ENC_BIG_ENDIAN, &entry_len);
2423
0
        curr_offset += is_ext ? 2 : 1;
2424
0
        dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_NONE, true);
2425
0
        curr_offset += 3;
2426
0
        if (is_ext) {
2427
0
            proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, (curr_offset << 3), 4, ENC_BIG_ENDIAN);
2428
0
            proto_tree_add_item_ret_boolean(sub_tree, hf_nas_5gs_mm_cag_info_entry_caili, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &caili);
2429
0
            proto_tree_add_item_ret_boolean(sub_tree, hf_nas_5gs_mm_cag_info_entry_lci, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &lci);
2430
0
            proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, (curr_offset << 3) + 6, 1, ENC_BIG_ENDIAN);
2431
0
        } else {
2432
0
            proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, (curr_offset << 3), 7, ENC_BIG_ENDIAN);
2433
0
            caili = false;
2434
0
            lci = false;
2435
0
        }
2436
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_cag_info_entry_cag_only, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2437
0
        curr_offset++;
2438
0
        if (lci) {
2439
0
            cag_id_offset = curr_offset;
2440
0
            proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_cag_info_entry_cag_without_add_info_list_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &entry_len);
2441
0
            curr_offset += 2;
2442
0
        } else {
2443
0
            cag_id_offset = start_offset;
2444
0
        }
2445
0
        while ((curr_offset - cag_id_offset) < entry_len) {
2446
0
            proto_tree_add_item(sub_tree, hf_nas_5gs_mm_cag_info_entry_cag_id, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
2447
0
            curr_offset += 4;
2448
0
        }
2449
0
        if (caili) {
2450
0
            uint32_t caili_start_offset = curr_offset;
2451
0
            unsigned num_entry2 = 1;
2452
2453
0
            proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_cag_info_entry_cag_with_add_info_list_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &entry_len);
2454
0
            curr_offset += 2;
2455
0
            while ((curr_offset - caili_start_offset) < entry_len) {
2456
0
                proto_tree *sub_tree2;
2457
0
                proto_item *item2;
2458
0
                bool tvii;
2459
0
                uint32_t start_offset2 = curr_offset;
2460
2461
0
                sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, -1, ett_nas_5gs_mm_cag_info_entry,
2462
0
                                                          &item2, "CAG-ID with additional information entry %u", num_entry2);
2463
0
                proto_tree_add_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_cag_with_add_info_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2464
0
                curr_offset += 2;
2465
0
                proto_tree_add_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_cag_id, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
2466
0
                curr_offset += 4;
2467
0
                proto_tree_add_bits_item(sub_tree2, hf_nas_5gs_spare_bits, tvb, (curr_offset << 3), 1, ENC_BIG_ENDIAN);
2468
0
                proto_tree_add_bits_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_svii, tvb, (curr_offset << 3) + 1, 1, ENC_BIG_ENDIAN);
2469
0
                proto_tree_add_bits_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_svii, tvb, (curr_offset << 3) + 2, 1, ENC_BIG_ENDIAN);
2470
0
                proto_tree_add_bits_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_svii, tvb, (curr_offset << 3) + 3, 1, ENC_BIG_ENDIAN);
2471
0
                proto_tree_add_bits_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_svii, tvb, (curr_offset << 3) + 4, 1, ENC_BIG_ENDIAN);
2472
0
                proto_tree_add_bits_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_svii, tvb, (curr_offset << 3) + 5, 1, ENC_BIG_ENDIAN);
2473
0
                proto_tree_add_bits_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_svii, tvb, (curr_offset << 3) + 6, 1, ENC_BIG_ENDIAN);
2474
0
                proto_tree_add_item_ret_boolean(sub_tree2, hf_nas_5gs_mm_cag_info_entry_tvii, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &tvii);
2475
0
                curr_offset++;
2476
0
                if (tvii) {
2477
0
                    uint32_t time_periods, i;
2478
2479
0
                    proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_mm_cag_info_entry_nb_time_periods, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &time_periods);
2480
0
                    curr_offset++;
2481
0
                    for (i = 0; i < time_periods; i++) {
2482
0
                        proto_tree_add_item(sub_tree2, hf_nas_5gs_mm_cag_info_entry_time_period, tvb, curr_offset, 16, ENC_NA);
2483
0
                        curr_offset += 16;
2484
0
                    }
2485
0
                }
2486
0
                proto_item_set_len(item2, curr_offset - start_offset2);
2487
0
                num_entry2++;
2488
0
            }
2489
0
        }
2490
0
        proto_item_set_len(item, curr_offset - start_offset);
2491
0
        num_entry++;
2492
0
    }
2493
2494
0
    return len;
2495
0
}
2496
2497
static uint16_t
2498
de_nas_5gs_mm_cag_information_list(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
2499
    uint32_t offset, unsigned len,
2500
    char* add_string _U_, int string_len _U_)
2501
0
{
2502
0
    return dissect_nas_5gs_mm_cag_information_list(tvb, tree, pinfo, offset, len, false);
2503
0
}
2504
2505
/*
2506
 * 9.11.3.18B CIoT small data container
2507
 */
2508
static void
2509
nas_5gs_decode_user_data_cont(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
2510
                              uint32_t offset, unsigned len, int hfindex)
2511
0
{
2512
0
    proto_item *item;
2513
2514
0
    item = proto_tree_add_item(tree, hfindex, tvb, offset, len, ENC_NA);
2515
0
    if (g_nas_5gs_decode_user_data_container_as != DECODE_USER_DATA_AS_NONE) {
2516
0
        tvbuff_t *user_data_cont_tvb;
2517
0
        volatile dissector_handle_t handle;
2518
2519
0
        user_data_cont_tvb = tvb_new_subset_length(tvb, offset, len);
2520
0
        if (g_nas_5gs_decode_user_data_container_as == DECODE_USER_DATA_AS_IP) {
2521
0
            uint8_t first_byte = tvb_get_uint8(user_data_cont_tvb, 0);
2522
0
            if (first_byte >= 0x45 && first_byte <= 0x4f && len > 20)
2523
0
                handle = ipv4_handle;
2524
0
            else if ((first_byte & 0xf0) == 0x60 && len > 40)
2525
0
                handle = ipv6_handle;
2526
0
            else
2527
0
                handle = NULL;
2528
0
        } else if (g_nas_5gs_decode_user_data_container_as == DECODE_USER_DATA_AS_NON_IP) {
2529
0
            handle = non_ip_data_handle;
2530
0
        } else {
2531
0
            handle = ethernet_handle;
2532
0
        }
2533
0
        if (handle) {
2534
0
            col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
2535
0
            col_set_fence(pinfo->cinfo, COL_PROTOCOL);
2536
0
            col_append_str(pinfo->cinfo, COL_INFO, ", ");
2537
0
            col_set_fence(pinfo->cinfo, COL_INFO);
2538
0
            TRY {
2539
0
                proto_tree *toptree = proto_tree_get_root(tree);
2540
0
                call_dissector_only(handle, user_data_cont_tvb, pinfo, toptree, NULL);
2541
0
            } CATCH_BOUNDS_ERRORS {
2542
                /* Dissection exception: message was probably non IP and heuristic was too weak */
2543
0
                proto_tree *subtree = proto_item_add_subtree(item, ett_nas_5gs_user_data_cont);
2544
0
                show_exception(user_data_cont_tvb, pinfo, subtree, EXCEPT_CODE, GET_MESSAGE);
2545
0
            } ENDTRY
2546
0
        }
2547
0
    }
2548
0
}
2549
2550
static const value_string nas_5gs_mm_ciot_small_data_cont_data_type_values[] = {
2551
    { 0x00, "Control plane user data" },
2552
    { 0x01, "SMS" },
2553
    { 0x02, "Location services message container" },
2554
    { 0, NULL }
2555
};
2556
2557
static const value_string nas_5gs_mm_ciot_small_data_cont_ddx_values[] = {
2558
    { 0x00, "No information available" },
2559
    { 0x01, "No further uplink and no further downlink data transmission subsequent to the uplink data transmission is expected" },
2560
    { 0x02, "Only a single downlink data transmission and no further uplink data transmission subsequent to the uplink data transmission is expected" },
2561
    { 0x03, "Reserved" },
2562
    { 0, NULL }
2563
};
2564
2565
static uint16_t
2566
de_nas_5gs_mm_ciot_small_data_cont(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
2567
    uint32_t offset, unsigned len,
2568
    char* add_string _U_, int string_len _U_)
2569
0
{
2570
0
    uint32_t curr_offset = offset;
2571
0
    uint32_t data_type, add_info_len;
2572
0
    proto_tree *sub_tree;
2573
0
    proto_item *item;
2574
2575
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_ciot_small_data_cont_data_type,
2576
0
                                 tvb, curr_offset, 1, ENC_BIG_ENDIAN, &data_type);
2577
0
    switch (data_type) {
2578
0
    case 0:
2579
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_ciot_small_data_cont_ddx,
2580
0
                            tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2581
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_ciot_small_data_cont_pdu_session_id,
2582
0
                            tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2583
0
        curr_offset++;
2584
0
        nas_5gs_decode_user_data_cont(tvb, tree, pinfo, curr_offset, len - curr_offset,
2585
0
                                      hf_nas_5gs_mm_ciot_small_data_cont_data_contents);
2586
0
        break;
2587
0
    case 1:
2588
0
        proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb,
2589
0
                                 (curr_offset << 3) + 3, 5, ENC_BIG_ENDIAN);
2590
0
        curr_offset++;
2591
0
        item = proto_tree_add_item(tree, hf_nas_5gs_mm_ciot_small_data_cont_data_contents,
2592
0
                                   tvb, curr_offset, len - curr_offset, ENC_NA);
2593
0
        if (gsm_a_dtap_handle) {
2594
0
            sub_tree = proto_item_add_subtree(item, ett_nas_5gs_ciot_small_data_cont_data_contents);
2595
0
            call_dissector(gsm_a_dtap_handle, tvb_new_subset_length(tvb, curr_offset, curr_offset - len), pinfo, sub_tree);
2596
0
        }
2597
0
        break;
2598
0
    case 2:
2599
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_ciot_small_data_cont_ddx,
2600
0
                            tvb, curr_offset, 1, ENC_BIG_ENDIAN);
2601
0
        proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb,
2602
0
                                 (curr_offset << 3) + 5, 3, ENC_BIG_ENDIAN);
2603
0
        curr_offset++;
2604
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_ciot_small_data_cont_add_info_len,
2605
0
                                     tvb, curr_offset, 1, ENC_BIG_ENDIAN, &add_info_len);
2606
0
        curr_offset++;
2607
0
        if (add_info_len > 0) {
2608
0
            proto_tree_add_item(tree, hf_nas_5gs_mm_ciot_small_data_cont_add_info,
2609
0
                                tvb, curr_offset, add_info_len, ENC_NA);
2610
0
            curr_offset += add_info_len;
2611
0
        }
2612
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_ciot_small_data_cont_data_contents,
2613
0
                            tvb, curr_offset, len - curr_offset, ENC_NA);
2614
0
        break;
2615
0
    default:
2616
0
        proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_unknown_value, tvb, curr_offset, len);
2617
0
        break;
2618
0
    }
2619
2620
0
    return len;
2621
0
}
2622
2623
/*
2624
 * 9.11.3.18C   Ciphering key data
2625
 */
2626
2627
static uint16_t
2628
de_nas_5gs_mm_ciphering_key_data(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
2629
    uint32_t offset, unsigned len,
2630
    char* add_string _U_, int string_len _U_)
2631
0
{
2632
0
    uint32_t saved_offset, curr_offset = offset, c0_len, pos_sib_len, tai_len, i = 1;
2633
0
    uint8_t oct;
2634
0
    struct tm tm;
2635
0
    nstime_t tv;
2636
0
    proto_item *pi;
2637
0
    proto_tree *sub_tree;
2638
2639
0
    while ((curr_offset - offset) < len) {
2640
0
        static int * const eutra_flags1[] = {
2641
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_1,
2642
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_2,
2643
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_3,
2644
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_4,
2645
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_5,
2646
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_6,
2647
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_7,
2648
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_8,
2649
0
            NULL
2650
0
        };
2651
0
        static int * const eutra_flags2[] = {
2652
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_1,
2653
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_2,
2654
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_3,
2655
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_4,
2656
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_5,
2657
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_6,
2658
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_7,
2659
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_8,
2660
0
            NULL
2661
0
        };
2662
0
        static int * const eutra_flags3[] = {
2663
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_9,
2664
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_10,
2665
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_11,
2666
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_12,
2667
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_13,
2668
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_14,
2669
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_15,
2670
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_16,
2671
0
            NULL
2672
0
        };
2673
0
        static int * const eutra_flags4[] = {
2674
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_17,
2675
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_18,
2676
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_19,
2677
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_20,
2678
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_21,
2679
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_22,
2680
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_23,
2681
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_24,
2682
0
            NULL
2683
0
        };
2684
0
        static int * const eutra_flags5[] = {
2685
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_25,
2686
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_3_1,
2687
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_4_1,
2688
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_5_1,
2689
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_9,
2690
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_10,
2691
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_17a,
2692
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_18a,
2693
0
            NULL
2694
0
        };
2695
0
        static int * const eutra_flags6[] = {
2696
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_20a,
2697
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_26,
2698
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_27,
2699
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_11,
2700
0
            &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_12,
2701
0
            &hf_nas_5gs_spare_b2,
2702
0
            &hf_nas_5gs_spare_b1,
2703
0
            &hf_nas_5gs_spare_b0,
2704
0
            NULL
2705
0
        };
2706
0
        static int * const nr_flags1[] = {
2707
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_1,
2708
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_2,
2709
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_3,
2710
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_4,
2711
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_5,
2712
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_6,
2713
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_7,
2714
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_8,
2715
0
            NULL
2716
0
        };
2717
0
        static int * const nr_flags2[] = {
2718
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_1,
2719
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_2,
2720
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_3,
2721
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_4,
2722
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_5,
2723
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_6,
2724
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_7,
2725
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_8,
2726
0
            NULL
2727
0
        };
2728
0
        static int * const nr_flags3[] = {
2729
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_9,
2730
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_10,
2731
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_11,
2732
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_12,
2733
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_13,
2734
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_14,
2735
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_15,
2736
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_16,
2737
0
            NULL
2738
0
        };
2739
0
        static int * const nr_flags4[] = {
2740
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_17,
2741
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_18,
2742
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_19,
2743
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_20,
2744
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_21,
2745
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_22,
2746
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_23,
2747
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_3_1,
2748
0
            NULL
2749
0
        };
2750
0
        static int * const nr_flags5[] = {
2751
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_4_1,
2752
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_5_1,
2753
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_1,
2754
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_2,
2755
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_3,
2756
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_4,
2757
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_5,
2758
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_6,
2759
0
            NULL
2760
0
        };
2761
0
        static int * const nr_flags6[] = {
2762
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_9,
2763
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_10,
2764
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_24,
2765
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_25,
2766
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_17a,
2767
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_18a,
2768
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_20a,
2769
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_26,
2770
0
            NULL
2771
0
        };
2772
0
        static int * const nr_flags7[] = {
2773
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_27,
2774
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_11,
2775
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_12,
2776
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_7,
2777
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_1,
2778
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_2,
2779
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_3,
2780
0
            &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_4,
2781
0
            NULL
2782
0
        };
2783
2784
0
        saved_offset = curr_offset;
2785
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_ciph_data_set,
2786
0
                                                 &pi, "Ciphering data set #%u", i++);
2787
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_ciph_key_data_ciphering_set_id, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2788
0
        curr_offset += 2;
2789
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_ciph_key_data_ciphering_key, tvb, curr_offset, 16, ENC_NA);
2790
0
        curr_offset += 16;
2791
0
        proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, offset<<3, 3, ENC_BIG_ENDIAN);
2792
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_ciph_key_data_c0_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &c0_len);
2793
0
        curr_offset++;
2794
0
        if (c0_len) {
2795
0
            proto_tree_add_item(sub_tree, hf_nas_5gs_mm_ciph_key_data_c0, tvb, curr_offset, c0_len, ENC_NA);
2796
0
            curr_offset += c0_len;
2797
0
        }
2798
0
        proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, offset<<3, 4, ENC_BIG_ENDIAN);
2799
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &pos_sib_len);
2800
0
        curr_offset++;
2801
0
        if (pos_sib_len > 0) {
2802
0
            proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, eutra_flags1, ENC_NA);
2803
0
            if (pos_sib_len >= 2)
2804
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 1, 1, eutra_flags2, ENC_NA);
2805
0
            if (pos_sib_len >= 3)
2806
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 2, 1, eutra_flags3, ENC_NA);
2807
0
            if (pos_sib_len >= 4)
2808
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 3, 1, eutra_flags4, ENC_NA);
2809
0
            if (pos_sib_len >= 5)
2810
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 4, 1, eutra_flags5, ENC_NA);
2811
0
            if (pos_sib_len >= 6)
2812
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 5, 1, eutra_flags6, ENC_NA);
2813
0
            curr_offset += pos_sib_len;
2814
0
        }
2815
0
        proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, offset<<3, 4, ENC_BIG_ENDIAN);
2816
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &pos_sib_len);
2817
0
        curr_offset++;
2818
0
        if (pos_sib_len > 0) {
2819
0
            proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, nr_flags1, ENC_NA);
2820
0
            if (pos_sib_len >= 2)
2821
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 1, 1, nr_flags2, ENC_NA);
2822
0
            if (pos_sib_len >= 3)
2823
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 2, 1, nr_flags3, ENC_NA);
2824
0
            if (pos_sib_len >= 4)
2825
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 3, 1, nr_flags4, ENC_NA);
2826
0
            if (pos_sib_len >= 5)
2827
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 4, 1, nr_flags5, ENC_NA);
2828
0
            if (pos_sib_len >= 6)
2829
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 5, 1, nr_flags6, ENC_NA);
2830
0
            if (pos_sib_len >= 7)
2831
0
                proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset + 6, 1, nr_flags7, ENC_NA);
2832
0
            curr_offset += pos_sib_len;
2833
0
        }
2834
0
        tm.tm_wday = 0;
2835
0
        tm.tm_yday = 0;
2836
0
        tm.tm_isdst = -1;
2837
0
        oct = tvb_get_uint8(tvb, curr_offset);
2838
0
        tm.tm_year = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4) + 100;
2839
0
        oct = tvb_get_uint8(tvb, curr_offset+1);
2840
0
        tm.tm_mon = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4) - 1;
2841
0
        oct = tvb_get_uint8(tvb, curr_offset+2);
2842
0
        tm.tm_mday = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
2843
0
        oct = tvb_get_uint8(tvb, curr_offset+3);
2844
0
        tm.tm_hour = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
2845
0
        oct = tvb_get_uint8(tvb, curr_offset+4);
2846
0
        tm.tm_min = (oct & 0x0f)*10 + ((oct & 0xf0) >> 4);
2847
0
        tm.tm_sec = 0;
2848
0
        tv.secs = mktime(&tm);
2849
0
        tv.nsecs = 0;
2850
0
        proto_tree_add_time_format_value(sub_tree, hf_nas_5gs_mm_ciph_key_data_validity_start_time, tvb, curr_offset, 5, &tv,
2851
0
                                         "%s", abs_time_to_str(pinfo->pool, &tv, ABSOLUTE_TIME_LOCAL, false));
2852
0
        curr_offset += 5;
2853
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_ciph_key_data_validity_duration, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
2854
0
        curr_offset += 2;
2855
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_ciph_key_data_tais_list_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &tai_len);
2856
0
        curr_offset++;
2857
0
        if (tai_len) {
2858
0
            de_nas_5gs_mm_5gs_ta_id_list(tvb, sub_tree, pinfo, curr_offset, tai_len, NULL, 0);
2859
0
            curr_offset += tai_len;
2860
0
        }
2861
0
        proto_item_set_len(pi, curr_offset - saved_offset);
2862
0
    }
2863
2864
0
    return len;
2865
0
}
2866
2867
/*
2868
 * 9.11.3.18D   Control plane service type
2869
 */
2870
static const value_string nas_5gs_mm_ctrl_plane_serv_type_values[] = {
2871
    { 0x00, "mobile originating request" },
2872
    { 0x01, "mobile terminating request" },
2873
    { 0x02, "emergency services" },
2874
    { 0x03, "emergency services fallback" },
2875
    { 0, NULL }
2876
};
2877
2878
static uint16_t
2879
de_nas_5gs_mm_ctrl_plane_service_type(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
2880
    uint32_t offset, unsigned len,
2881
    char* add_string _U_, int string_len _U_)
2882
0
{
2883
0
    static int * const flags[] = {
2884
0
        &hf_nas_5gs_spare_b3,
2885
0
        &hf_nas_5gs_mm_ctrl_plane_serv_type,
2886
0
        NULL
2887
0
    };
2888
2889
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_NA);
2890
2891
0
    return len;
2892
0
}
2893
2894
/*
2895
 *   9.11.3.19    Daylight saving time
2896
 */
2897
/* See subclause 10.5.3.12 in 3GPP TS 24.008 */
2898
2899
/*
2900
 *   9.11.3.20    De-registration type
2901
 */
2902
static const true_false_string nas_5gs_mm_switch_off_tfs = {
2903
    "Switch off",
2904
    "Normal de-registration"
2905
};
2906
2907
static const true_false_string nas_5gs_mm_re_reg_req_tfs = {
2908
    "re-registration required",
2909
    "re-registration not required"
2910
};
2911
2912
static const value_string nas_5gs_mm_acc_type_vals[] = {
2913
    { 0x1, "3GPP access"},
2914
    { 0x2, "Non-3GPP access"},
2915
    { 0x3, "3GPP access and non-3GPP access"},
2916
    {   0, NULL }
2917
};
2918
2919
static uint16_t
2920
de_nas_5gs_mm_de_reg_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
2921
    uint32_t offset, unsigned len _U_,
2922
    char *add_string _U_, int string_len _U_)
2923
0
{
2924
    /* Switch off   Re-registration required    Access type */
2925
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_switch_off, tvb, offset, 1, ENC_BIG_ENDIAN);
2926
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_re_reg_req, tvb, offset, 1, ENC_BIG_ENDIAN);
2927
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_acc_type, tvb, offset, 1, ENC_BIG_ENDIAN);
2928
2929
0
    return 1;
2930
0
}
2931
2932
/* 9.11.3.21    Void*/
2933
/* 9.11.3.22    Void*/
2934
2935
/*
2936
 * 9.11.3.23    Emergency number list
2937
 */
2938
/* See subclause 10.5.3.13 in 3GPP TS 24.008 */
2939
2940
/*
2941
 *   9.11.3.24    EPS NAS message container
2942
 */
2943
static uint16_t
2944
de_nas_5gs_mm_eps_nas_msg_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
2945
    uint32_t offset, unsigned len,
2946
    char *add_string _U_, int string_len _U_)
2947
0
{
2948
    /* an EPS NAS message as specified in 3GPP TS 24.301 */
2949
0
    if (nas_eps_handle) {
2950
0
        col_set_fence(pinfo->cinfo, COL_PROTOCOL);
2951
0
        call_dissector(nas_eps_handle, tvb_new_subset_length(tvb, offset, len), pinfo, tree);
2952
0
    }
2953
2954
0
    return len;
2955
0
}
2956
2957
/*
2958
 * 9.11.3.25    EPS NAS security algorithms
2959
 */
2960
/* See subclause 9.9.3.23 in 3GPP TS 24.301 */
2961
2962
/*
2963
 * 9.11.3.26    Extended emergency number list
2964
 */
2965
/* See subclause 9.9.3.37A in 3GPP TS 24.301 */
2966
2967
/*
2968
 * 9.11.3.26A    Extended DRX parameters
2969
 */
2970
/* See subclause 10.5.5.32 in 3GPP TS 24.008 */
2971
2972
/* 9.11.3.27    Void*/
2973
2974
/*
2975
 *   9.11.3.28    IMEISV request
2976
 */
2977
/* See subclause 10.5.5.10 in 3GPP TS 24.008 */
2978
2979
/*
2980
 *   9.11.3.29    LADN indication
2981
 */
2982
2983
static uint16_t
2984
de_nas_5gs_mm_ladn_indic(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
2985
    uint32_t offset, unsigned len,
2986
    char *add_string _U_, int string_len _U_)
2987
0
{
2988
0
    proto_tree *sub_tree;
2989
0
    proto_item *item;
2990
0
    int i = 1;
2991
0
    uint32_t length;
2992
0
    uint32_t curr_offset;
2993
2994
0
    curr_offset = offset;
2995
2996
0
    while ((curr_offset - offset) < len) {
2997
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 2, ett_nas_5gs_mm_ladn_indic, &item, "LADN DNN value %u", i);
2998
        /*LADN DNN value is coded as the length and value part of DNN information element as specified in subclause 9.11.2.1B starting with the second octet*/
2999
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
3000
0
        curr_offset++;
3001
0
        curr_offset += de_nas_5gs_cmn_dnn(tvb, sub_tree, pinfo, curr_offset, length, NULL, 0);
3002
0
        proto_item_set_len(item, length + 1);
3003
3004
0
        i++;
3005
3006
0
    }
3007
3008
0
    return len;
3009
0
}
3010
3011
/*
3012
 *   9.11.3.30    LADN information
3013
 */
3014
3015
static uint16_t
3016
de_nas_5gs_mm_ladn_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3017
    uint32_t offset, unsigned len,
3018
    char *add_string _U_, int string_len _U_)
3019
0
{
3020
0
    proto_tree *sub_tree;
3021
0
    proto_item *item;
3022
0
    int i = 1;
3023
0
    uint32_t length;
3024
0
    uint32_t curr_offset;
3025
3026
0
    curr_offset = offset;
3027
3028
0
    while ((curr_offset - offset) < len) {
3029
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 2, ett_nas_5gs_mm_ladn_indic, &item, "LADN %u", i);
3030
        /* DNN value (octet 5 to octet m):
3031
         * LADN DNN value is coded as the length and value part of DNN information element as specified in
3032
         * subclause 9.11.2.1B starting with the second octet
3033
         */
3034
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
3035
0
        curr_offset++;
3036
0
        curr_offset += de_nas_5gs_cmn_dnn(tvb, sub_tree, pinfo, curr_offset, length, NULL, 0);
3037
        /* 5GS tracking area identity list (octet m+1 to octet a):
3038
         * 5GS tracking area identity list field is coded as the length and the value part of the
3039
         * 5GS Tracking area identity list information element as specified in subclause 9.11.3.9
3040
         * starting with the second octet
3041
         */
3042
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
3043
0
        curr_offset++;
3044
0
        curr_offset += de_nas_5gs_mm_5gs_ta_id_list(tvb, sub_tree, pinfo, curr_offset, length, NULL, 0);
3045
3046
0
        proto_item_set_len(item, curr_offset - offset);
3047
3048
0
        i++;
3049
3050
0
    }
3051
3052
0
    return len;
3053
0
}
3054
3055
/*
3056
 *   9.11.3.31    MICO indication
3057
 */
3058
static const true_false_string tfs_nas_5gs_raai = {
3059
    "all PLMN registration area allocated",
3060
    "all PLMN registration area not allocated"
3061
};
3062
3063
static uint16_t
3064
de_nas_5gs_mm_mico_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3065
    uint32_t offset, unsigned len _U_,
3066
    char *add_string _U_, int string_len _U_)
3067
0
{
3068
0
    static int * const flags[] = {
3069
0
        &hf_nas_5gs_spare_b3,
3070
0
        &hf_nas_5gs_spare_b2,
3071
0
        &hf_nas_5gs_mm_sprti_b1,
3072
0
        &hf_nas_5gs_mm_raai_b0,
3073
0
        NULL
3074
0
    };
3075
3076
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
3077
3078
0
    return 1;
3079
0
}
3080
3081
/*
3082
 * 9.11.3.31A   MA PDU session information
3083
 */
3084
static const value_string nas_5gs_mm_ma_pdu_session_info_vals[] = {
3085
    { 0x0, "No additional information"},
3086
    { 0x1, "MA PDU session network upgrade is allowed"},
3087
    {   0, NULL }
3088
};
3089
3090
static uint16_t
3091
de_nas_5gs_mm_ma_pdu_ses_inf(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
3092
    uint32_t offset, unsigned len,
3093
    char* add_string _U_, int string_len _U_)
3094
0
{
3095
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_ma_pdu_session_info_value, tvb, offset, 1, ENC_BIG_ENDIAN);
3096
3097
0
    return len;
3098
0
}
3099
3100
/*
3101
 * 9.11.3.31B   Mapped NSSAI
3102
 */
3103
static const value_string nas_5gs_mm_sst_vals[] = {
3104
    { 0x1, "eMBB"},
3105
    { 0x2, "URLLC"},
3106
    { 0x3, "MIoT"},
3107
    { 0x4, "V2X"},
3108
    {   0, NULL }
3109
};
3110
3111
static uint16_t
3112
de_nas_5gs_mm_mapped_nssai(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
3113
    uint32_t offset, unsigned len,
3114
    char* add_string _U_, int string_len _U_)
3115
0
{
3116
0
    proto_tree* sub_tree;
3117
0
    proto_item* item;
3118
0
    unsigned num_items = 1;
3119
0
    uint32_t curr_offset = offset;
3120
0
    uint32_t start_offset, nssai_len;
3121
3122
    /* Rejected NSSAI */
3123
0
    while ((curr_offset - offset) < len) {
3124
0
        start_offset = curr_offset;
3125
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_mapped_nssai,
3126
0
                                                 &item, "Mapped S-NSSAI content %u", num_items++);
3127
3128
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_len_of_mapped_s_nssai, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &nssai_len);
3129
0
        curr_offset++;
3130
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_sst, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3131
0
        curr_offset++;
3132
0
        if (nssai_len > 1) {
3133
0
            proto_tree_add_item(sub_tree, hf_nas_5gs_mm_sd, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
3134
0
            curr_offset += 3;
3135
0
        }
3136
0
        proto_item_set_len(item, curr_offset - start_offset);
3137
0
    }
3138
3139
0
    return len;
3140
0
}
3141
3142
/*
3143
 * 9.11.3.31C    Mobile station classmark 2
3144
 */
3145
/* See subclause 10.5.1.6 in 3GPP TS 24.008 */
3146
3147
/*
3148
 *   9.11.3.32    NAS key set identifier
3149
 */
3150
static const true_false_string nas_5gs_mm_tsc_tfs = {
3151
    "Mapped security context (for KSIASME)",
3152
    "Native security context (for KSIAMF)"
3153
};
3154
3155
static uint16_t
3156
de_nas_5gs_mm_nas_key_set_id(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3157
    uint32_t offset, unsigned len _U_,
3158
    char *add_string _U_, int string_len _U_)
3159
0
{
3160
0
    static int * const flags[] = {
3161
0
        &hf_nas_5gs_mm_tsc,
3162
0
        &hf_nas_5gs_mm_nas_key_set_id,
3163
0
        NULL
3164
0
    };
3165
3166
    /* NAS key set identifier IEI   TSC     NAS key set identifier */
3167
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
3168
3169
0
    return 1;
3170
0
}
3171
3172
/* High nibble version (LEFT_NIBBLE) */
3173
static uint16_t
3174
de_nas_5gs_mm_nas_key_set_id_h1(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
3175
    uint32_t offset, unsigned len _U_,
3176
    char* add_string _U_, int string_len _U_)
3177
0
{
3178
0
    static int* const flags[] = {
3179
0
        &hf_nas_5gs_mm_tsc_h1,
3180
0
        &hf_nas_5gs_mm_nas_key_set_id_h1,
3181
0
        NULL
3182
0
    };
3183
3184
    /* NAS key set identifier IEI   TSC     NAS key set identifier */
3185
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
3186
3187
0
    return 1;
3188
0
}
3189
3190
3191
/*
3192
 *   9.11.3.33    NAS message container
3193
 */
3194
static uint16_t
3195
de_nas_5gs_mm_nas_msg_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3196
    uint32_t offset, unsigned len,
3197
    char *add_string _U_, int string_len _U_)
3198
0
{
3199
    /* The purpose of the NAS message container IE is to encapsulate a plain 5GS NAS message. */
3200
    /* a NAS message without NAS security header */
3201
0
    struct nas5gs_private_data *nas5gs_data = nas5gs_get_private_data(pinfo);
3202
3203
0
    if (nas5gs_data->sec_hdr_type == NAS_5GS_PLAIN_NAS_MSG || g_nas_5gs_null_decipher) {
3204
0
        dissect_nas_5gs(tvb_new_subset_length(tvb, offset, len), pinfo, tree, NULL);
3205
0
    } else {
3206
0
        proto_tree_add_item(tree, hf_nas_5gs_ciphered_msg, tvb, offset, len, ENC_NA);
3207
0
    }
3208
3209
0
    return len;
3210
0
}
3211
3212
/*
3213
 *   9.11.3.34    NAS security algorithms
3214
 */
3215
3216
static const value_string nas_5gs_mm_type_of_ip_algo_vals[] = {
3217
    { 0x0, "5G-IA0 (null integrity protection algorithm)"},
3218
    { 0x1, "128-5G-IA1"},
3219
    { 0x2, "128-5G-IA2"},
3220
    { 0x3, "128-5G-IA3"},
3221
    { 0x4, "5G-IA4"},
3222
    { 0x5, "5G-IA5"},
3223
    { 0x6, "5G-IA6"},
3224
    { 0x7, "5G-IA7"},
3225
    {   0, NULL }
3226
};
3227
3228
static const value_string nas_5gs_mm_type_of_enc_algo_vals[] = {
3229
    { 0x0, "5G-EA0 (null ciphering algorithm)"},
3230
    { 0x1, "128-5G-EA1"},
3231
    { 0x2, "128-5G-EA2"},
3232
    { 0x3, "128-5G-EA3"},
3233
    { 0x4, "5G-EA4"},
3234
    { 0x5, "5G-EA5"},
3235
    { 0x6, "5G-EA6"},
3236
    { 0x7, "5G-EA7"},
3237
    {   0, NULL }
3238
};
3239
3240
static uint16_t
3241
de_nas_5gs_mm_nas_sec_algo(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3242
    uint32_t offset, unsigned len _U_,
3243
    char *add_string _U_, int string_len _U_)
3244
0
{
3245
3246
0
    static int * const flags[] = {
3247
0
        &hf_nas_5gs_mm_nas_sec_algo_enc,
3248
0
        &hf_nas_5gs_mm_nas_sec_algo_ip,
3249
0
        NULL
3250
0
    };
3251
3252
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
3253
3254
0
    return 1;
3255
0
}
3256
3257
3258
/*
3259
 *   9.11.3.35    Network name
3260
 */
3261
/* See subclause 10.5.3.5a in 3GPP TS 24.008 */
3262
3263
3264
/*
3265
 *   9.11.3.36    Network slicing indication
3266
 */
3267
3268
static const true_false_string nas_5gs_mm_dcni_tfs = {
3269
    "Requested NSSAI created from default configured NSSAI",
3270
    "Requested NSSAI not created from default configured NSSAI"
3271
};
3272
3273
static uint16_t
3274
de_nas_5gs_mm_nw_slicing_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3275
    uint32_t offset, unsigned len,
3276
    char *add_string _U_, int string_len _U_)
3277
0
{
3278
0
    static int * const flags[] = {
3279
0
        &hf_nas_5gs_spare_b3,
3280
0
        &hf_nas_5gs_spare_b2,
3281
0
        &hf_nas_5gs_mm_dcni,
3282
0
        &hf_nas_5gs_mm_nssci,
3283
0
        NULL
3284
0
    };
3285
3286
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
3287
3288
0
    return len;
3289
0
}
3290
3291
/*
3292
 *   9.11.3.37    NSSAI
3293
 */
3294
static uint16_t
3295
de_nas_5gs_mm_nssai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3296
    uint32_t offset, unsigned len,
3297
    char *add_string _U_, int string_len _U_)
3298
0
{
3299
0
    proto_tree *sub_tree;
3300
0
    proto_item *item;
3301
0
    int i = 1;
3302
0
    uint32_t length;
3303
0
    uint32_t curr_offset;
3304
3305
0
    curr_offset = offset;
3306
3307
0
    while ((curr_offset - offset) < len) {
3308
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 2, ett_nas_5gs_mm_nssai, &item, "S-NSSAI %u", i);
3309
3310
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
3311
0
        curr_offset++;
3312
0
        curr_offset += de_nas_5gs_cmn_s_nssai(tvb, sub_tree, pinfo, curr_offset, length, NULL, 0);
3313
0
        proto_item_set_len(item, length + 1);
3314
0
        i++;
3315
3316
0
    }
3317
3318
0
    return len;
3319
0
}
3320
3321
/*
3322
 *   9.11.3.37A    NSSAI inclusion mode
3323
 */
3324
3325
3326
static const value_string nas_5gs_mm_nssai_inc_mode_vals[] = {
3327
    { 0x00, "A" },
3328
    { 0x01, "B" },
3329
    { 0x02, "C" },
3330
    { 0x03, "D" },
3331
    {    0, NULL } };
3332
3333
static uint16_t
3334
de_nas_5gs_mm_nssai_inc_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3335
    uint32_t offset, unsigned len,
3336
    char *add_string _U_, int string_len _U_)
3337
0
{
3338
0
    static int * const flags[] = {
3339
0
        &hf_nas_5gs_spare_b3,
3340
0
        &hf_nas_5gs_spare_b2,
3341
0
        &hf_nas_5gs_mm_nssai_inc_mode,
3342
0
        NULL
3343
0
    };
3344
3345
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
3346
3347
0
    return len;
3348
0
}
3349
3350
/*
3351
 *   9.11.3.38    Operator-defined access category definitions
3352
 */
3353
3354
static void
3355
nas_5gs_mm_access_cat_number(char *s, uint32_t val)
3356
0
{
3357
0
    snprintf(s, ITEM_LABEL_LENGTH, "%u (%u)", 32+val, val);
3358
0
}
3359
3360
static void
3361
nas_5gs_mm_access_standardized_cat_number(char *s, uint32_t val)
3362
0
{
3363
0
    if (val <= 7)
3364
0
        snprintf(s, ITEM_LABEL_LENGTH, "%u", val);
3365
0
    else
3366
0
        snprintf(s, ITEM_LABEL_LENGTH, "Reserved (%u)", val);
3367
0
}
3368
3369
static const value_string nas_5gs_mm_op_def_access_cat_criteria_type_vals[] = {
3370
    { 0, "DNN" },
3371
    { 1, "OS Id + OS App Id" },
3372
    { 2, "S-NSSAI" },
3373
    { 0, NULL }
3374
};
3375
3376
static uint16_t
3377
de_nas_5gs_mm_op_def_acc_cat_def(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3378
    uint32_t offset, unsigned len,
3379
    char *add_string _U_, int string_len _U_)
3380
0
{
3381
0
    proto_tree *sub_tree, *sub_tree2, *sub_tree3;
3382
0
    proto_item *item, *item2, *item3;
3383
0
    uint32_t i = 1, j, k;
3384
0
    uint32_t length, criteria_length, criteria_type, criteria_count;
3385
0
    uint32_t curr_offset, saved_offset, saved_offset2, saved_offset3, criteria_offset;
3386
0
    bool psac;
3387
3388
0
    curr_offset = offset;
3389
3390
0
    while ((curr_offset - offset) < len) {
3391
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 4, ett_nas_5gs_mm_op_def_acc_cat_def,
3392
0
                                                 &item, "Operator-defined access category definition %u", i);
3393
3394
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_op_def_access_cat_len, tvb,
3395
0
                                     curr_offset, 1, ENC_BIG_ENDIAN, &length);
3396
0
        curr_offset++;
3397
0
        saved_offset = curr_offset;
3398
        /* Precedence value */
3399
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_op_def_access_cat_precedence,
3400
0
                            tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3401
0
        curr_offset++;
3402
        /* PSAC    0 Spare    0 Spare    Operator-defined access category number */
3403
0
        proto_tree_add_item_ret_boolean(sub_tree, hf_nas_5gs_mm_op_def_access_cat_psac,
3404
0
                                        tvb, curr_offset, 1, ENC_BIG_ENDIAN, &psac);
3405
0
        proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb,
3406
0
                                 (curr_offset << 3)+1, 2, ENC_BIG_ENDIAN);
3407
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_op_def_access_cat_number,
3408
0
                            tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3409
0
        curr_offset++;
3410
        /* Length of criteria */
3411
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_op_def_access_cat_criteria_length,
3412
0
                                     tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_length);
3413
0
        curr_offset++;
3414
0
        criteria_offset = curr_offset;
3415
0
        j = 1;
3416
0
        while ((curr_offset - criteria_offset) < criteria_length) {
3417
0
            saved_offset2 = curr_offset;
3418
0
            sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, 1, ett_nas_5gs_mm_op_def_acc_cat_criteria_component,
3419
0
                                                      &item2, "Criteria component %u", j++);
3420
            /* Criteria */
3421
0
            proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_type,
3422
0
                                         tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_type);
3423
0
            curr_offset++;
3424
0
            switch (criteria_type) {
3425
0
            case 0:
3426
0
                proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_count,
3427
0
                                             tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_count);
3428
0
                curr_offset++;
3429
0
                for (k = 1; k <= criteria_count; k++) {
3430
0
                    uint32_t dnn_len;
3431
0
                    saved_offset3 = curr_offset;
3432
0
                    sub_tree3 = proto_tree_add_subtree_format(sub_tree2, tvb, curr_offset, -1,
3433
0
                                                              ett_nas_5gs_mm_op_def_acc_cat_criteria, &item3, "DNN %u", k);
3434
0
                    proto_tree_add_item_ret_uint(sub_tree3, hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_len,
3435
0
                                                 tvb, curr_offset, 1, ENC_BIG_ENDIAN, &dnn_len);
3436
0
                    curr_offset++;
3437
0
                    de_nas_5gs_cmn_dnn(tvb, sub_tree3, pinfo, curr_offset, dnn_len, NULL, 0);
3438
0
                    curr_offset += dnn_len;
3439
0
                    proto_item_set_len(item3, curr_offset - saved_offset3);
3440
0
                }
3441
0
                break;
3442
0
            case 1:
3443
0
                proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_os_id_os_app_id_count,
3444
0
                                             tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_count);
3445
0
                curr_offset++;
3446
0
                for (k = 1; k <= criteria_count; k++) {
3447
0
                    uint32_t os_app_id_len;
3448
0
                    saved_offset3 = curr_offset;
3449
0
                    sub_tree3 = proto_tree_add_subtree_format(sub_tree2, tvb, curr_offset, -1, ett_nas_5gs_mm_op_def_acc_cat_criteria,
3450
0
                                                              &item3, "OS Id + Os App Id %u", k);
3451
0
                    proto_tree_add_item(sub_tree3, hf_nas_5gs_mm_op_def_access_cat_criteria_os_id,
3452
0
                                        tvb, curr_offset, 16, ENC_BIG_ENDIAN);
3453
0
                    curr_offset += 16;
3454
0
                    proto_tree_add_item_ret_uint(sub_tree3, hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id_len,
3455
0
                                                 tvb, curr_offset, 1, ENC_BIG_ENDIAN, &os_app_id_len);
3456
0
                    curr_offset++;
3457
0
                    proto_tree_add_item(sub_tree3, hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id,
3458
0
                                        tvb, curr_offset, os_app_id_len, ENC_NA);
3459
0
                    curr_offset += os_app_id_len;
3460
0
                    proto_item_set_len(item3, curr_offset - saved_offset3);
3461
0
                }
3462
0
                break;
3463
0
            case 2:
3464
0
                proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_count,
3465
0
                                             tvb, curr_offset, 1, ENC_BIG_ENDIAN, &criteria_count);
3466
0
                curr_offset++;
3467
0
                for (k = 1; k <= criteria_count; k++) {
3468
0
                    uint32_t s_nssai_len;
3469
0
                    saved_offset3 = curr_offset;
3470
0
                    sub_tree3 = proto_tree_add_subtree_format(sub_tree2, tvb, curr_offset, -1,
3471
0
                                                              ett_nas_5gs_mm_op_def_acc_cat_criteria, &item3, "S-NSSAI %u", k);
3472
0
                    proto_tree_add_item_ret_uint(sub_tree3, hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_len,
3473
0
                                                 tvb, curr_offset, 1, ENC_BIG_ENDIAN, &s_nssai_len);
3474
0
                    curr_offset++;
3475
0
                    curr_offset += de_nas_5gs_cmn_s_nssai(tvb, sub_tree3, pinfo, curr_offset, s_nssai_len, NULL, 0);
3476
0
                    proto_item_set_len(item3, curr_offset - saved_offset3);
3477
0
                }
3478
0
                break;
3479
0
            default:
3480
0
                break;
3481
0
            }
3482
0
            proto_item_set_len(item2, curr_offset - saved_offset2);
3483
0
        }
3484
0
        if (psac) {
3485
            /* 0 Spare    0 Spare    0 Spare    Standardized access category */
3486
0
            proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb,
3487
0
                                     (curr_offset << 3), 3, ENC_BIG_ENDIAN);
3488
0
            proto_tree_add_item(sub_tree, hf_nas_5gs_mm_op_def_access_cat_standardized_number,
3489
0
                                tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3490
0
        }
3491
0
        curr_offset = saved_offset + length;
3492
0
        proto_item_set_len(item, length + 1);
3493
0
        i++;
3494
0
    }
3495
3496
0
    return len;
3497
0
}
3498
3499
static const value_string nas_5gs_mm_pld_cont_event_notif_ind_type_vals[] = {
3500
    { 0x0, "SRVCC handover cancelled, IMS session re-establishment required" },
3501
    {   0, NULL }
3502
};
3503
3504
static const value_string nas_5gs_mm_pld_cont_opt_ie_type_vals[] = {
3505
    { 0x12, "PDU session ID" },
3506
    { 0x22, "S-NSSAI" },
3507
    { 0x24, "Additional information" },
3508
    { 0x25, "DNN" },
3509
    { 0x37, "Back-off timer value" },
3510
    { 0x58, "5GMM cause" },
3511
    { 0x59, "Old PDU session ID" },
3512
    { 0x80, "Request type" },
3513
    { 0xa0, "MA PDU session information" },
3514
    { 0xf0, "Release assistance indication" },
3515
    {    0, NULL }
3516
};
3517
3518
/*
3519
 *   9.11.3.39    Payload container
3520
 */
3521
static uint16_t
3522
// NOLINTNEXTLINE(misc-no-recursion)
3523
de_nas_5gs_mm_pld_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3524
    uint32_t offset, unsigned len,
3525
    char *add_string _U_, int string_len _U_)
3526
0
{
3527
0
    struct nas5gs_private_data *nas5gs_data = nas5gs_get_private_data(pinfo);
3528
3529
0
    increment_dissection_depth(pinfo);
3530
0
    switch (nas5gs_data->payload_container_type) {
3531
0
    case 1: /* N1 SM information */
3532
0
        dissect_nas_5gs_common(tvb_new_subset_length(tvb, offset, len), pinfo, tree, 0, NULL);
3533
0
        break;
3534
0
    case 2: /* SMS */
3535
0
    case 7: /* Location services */
3536
0
        if (gsm_a_dtap_handle) {
3537
0
            call_dissector(gsm_a_dtap_handle, tvb_new_subset_length(tvb, offset, len), pinfo, tree);
3538
0
        } else {
3539
0
            proto_tree_add_item(tree, hf_nas_5gs_mm_pld_cont, tvb, offset, len, ENC_NA);
3540
0
        }
3541
0
        break;
3542
0
    case 3: /* LPP */
3543
0
        if (lpp_handle) {
3544
0
            call_dissector(lpp_handle, tvb_new_subset_length(tvb, offset, len), pinfo, tree);
3545
0
        } else {
3546
0
            proto_tree_add_item(tree, hf_nas_5gs_mm_pld_cont, tvb, offset, len, ENC_NA);
3547
0
        }
3548
0
        break;
3549
0
    case 4: /* SOR transparent container */
3550
0
        de_nas_5gs_mm_sor_transp_cont(tvb, tree, pinfo, offset, len, NULL, 0);
3551
0
        break;
3552
0
    case 5: /* UE policy container */
3553
0
        dissect_nas_5gs_updp(tvb_new_subset_length(tvb, offset, len), pinfo, tree);
3554
0
        break;
3555
0
    case 8: /* CIoT user data container */
3556
0
        nas_5gs_decode_user_data_cont(tvb, tree, pinfo, offset, len, hf_nas_5gs_mm_pld_cont);
3557
0
        break;
3558
0
    case 9: /* service-level-AA container */
3559
0
        de_nas_5gs_cmn_service_level_aa_cont(tvb, tree, pinfo, offset, len, NULL, 0);
3560
0
        break;
3561
0
    case 10: /* event notification */
3562
0
        {
3563
0
            uint32_t curr_offset, events_count, event_len;
3564
0
            unsigned i;
3565
3566
0
            curr_offset = offset;
3567
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_pld_cont_event_notif_ind_nb, tvb, curr_offset, 1, ENC_NA, &events_count);
3568
0
            curr_offset++;
3569
0
            for (i = 0; i < events_count; i++) {
3570
0
                proto_item *item;
3571
0
                proto_tree *subtree;
3572
3573
0
                subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_pld_cont_event_notif_ind, &item, "Event notification indicator %d", i + 1);
3574
0
                proto_tree_add_item(subtree, hf_nas_5gs_mm_pld_cont_event_notif_ind_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3575
0
                curr_offset++;
3576
0
                proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_pld_cont_event_notif_ind_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &event_len);
3577
0
                curr_offset++;
3578
0
                proto_item_set_len(item, event_len + 2);
3579
0
                if (event_len > 0) {
3580
0
                    proto_tree_add_item(subtree, hf_nas_5gs_mm_pld_cont_event_notif_ind_val, tvb, curr_offset, event_len, ENC_NA);
3581
0
                    curr_offset += event_len;
3582
0
                }
3583
0
            }
3584
0
        }
3585
0
        break;
3586
0
    case 15: /* multiple payloads */
3587
0
        {
3588
0
            uint32_t curr_offset, entry_offset, payloads_count, payload_len, opt_ies_count, payload_type;
3589
0
            uint32_t opt_ie_type, opt_ie_len, type_backup;
3590
0
            unsigned i, j;
3591
3592
0
            curr_offset = offset;
3593
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_pld_cont_nb_entries, tvb, curr_offset, 1, ENC_NA, &payloads_count);
3594
0
            curr_offset++;
3595
0
            for (i = 0; i < payloads_count; i++) {
3596
0
                proto_item *item;
3597
0
                proto_tree *subtree, *subtree2;
3598
3599
0
                subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_pld_cont_pld_entry, &item, "Payload container entry %d", i + 1);
3600
0
                proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_pld_cont_pld_cont_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &payload_len);
3601
0
                proto_item_set_len(item, payload_len + 2);
3602
0
                curr_offset += 2;
3603
0
                entry_offset = curr_offset;
3604
0
                proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_pld_cont_nb_opt_ies, tvb, curr_offset, 1, ENC_NA, &opt_ies_count);
3605
0
                proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_pld_cont_pld_cont_type, tvb, curr_offset, 1, ENC_NA, &payload_type);
3606
0
                curr_offset++;
3607
0
                for (j = 0; j < opt_ies_count; j++) {
3608
0
                    item = proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_pld_cont_opt_ie_type, tvb, curr_offset, 1, ENC_NA, &opt_ie_type);
3609
0
                    curr_offset++;
3610
0
                    subtree2 = proto_item_add_subtree(item, ett_nas_5gs_mm_pld_cont_opt_ie);
3611
0
                    proto_tree_add_item_ret_uint(subtree2, hf_nas_5gs_mm_pld_cont_opt_ie_len, tvb, curr_offset, 1, ENC_NA, &opt_ie_len);
3612
0
                    curr_offset++;
3613
0
                    switch (opt_ie_type) {
3614
0
                    case 0x12:
3615
0
                        de_nas_5gs_mm_pdu_ses_id_2(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3616
0
                        break;
3617
0
                    case 0x22:
3618
0
                        de_nas_5gs_cmn_s_nssai(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3619
0
                        break;
3620
0
                    case 0x24:
3621
0
                        de_nas_5gs_cmn_add_inf(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3622
0
                        break;
3623
0
                    case 0x25:
3624
0
                        de_nas_5gs_cmn_dnn(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3625
0
                        break;
3626
0
                    case 0x37:
3627
0
                        de_gc_timer3(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3628
0
                        break;
3629
0
                    case 0x58:
3630
0
                        nas_5gs_mm_5gmm_status(tvb, subtree2, pinfo, curr_offset, opt_ie_len);
3631
0
                        break;
3632
0
                    case 0x59:
3633
0
                        de_nas_5gs_mm_pdu_ses_id_2(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3634
0
                        break;
3635
0
                    case 0x80:
3636
0
                        de_nas_5gs_mm_req_type(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3637
0
                        break;
3638
0
                    case 0xa0:
3639
0
                        de_nas_5gs_mm_ma_pdu_ses_inf(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3640
0
                        break;
3641
0
                    case 0xf0:
3642
0
                        de_esm_rel_assist_ind(tvb, subtree2, pinfo, curr_offset, opt_ie_len, NULL, 0);
3643
0
                        break;
3644
0
                    default:
3645
0
                        proto_tree_add_item(subtree2, hf_nas_5gs_mm_pld_cont_opt_ie_val, tvb, curr_offset, opt_ie_len, ENC_NA);
3646
0
                        break;
3647
0
                    }
3648
0
                    curr_offset += opt_ie_len;
3649
0
                }
3650
0
                type_backup = nas5gs_data->payload_container_type;
3651
0
                nas5gs_data->payload_container_type = payload_type;
3652
                /* N.B. this recursive call can overwrite nas5gs_data->payload_container_type */
3653
0
                de_nas_5gs_mm_pld_cont(tvb, subtree, pinfo, curr_offset, payload_len - (curr_offset - entry_offset), NULL, 0);
3654
0
                curr_offset = entry_offset + payload_len;
3655
0
                nas5gs_data->payload_container_type = type_backup;
3656
0
            }
3657
0
        }
3658
0
        break;
3659
0
    default:
3660
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_pld_cont, tvb, offset, len, ENC_NA);
3661
0
        break;
3662
0
    }
3663
0
    decrement_dissection_depth(pinfo);
3664
3665
0
    return len;
3666
0
}
3667
3668
/*
3669
 *   9.11.3.40    Payload container type
3670
 */
3671
static const value_string nas_5gs_mm_pld_cont_type_vals[] = {
3672
    { 0x01, "N1 SM information" },
3673
    { 0x02, "SMS" },
3674
    { 0x03, "LTE Positioning Protocol (LPP) message container" },
3675
    { 0x04, "SOR transparent container" },
3676
    { 0x05, "UE policy container" },
3677
    { 0x06, "UE parameters update transparent container" },
3678
    { 0x07, "Location services message container" },
3679
    { 0x08, "CIoT user data container" },
3680
    { 0x09, "Service-level-AA container" },
3681
    { 0x0a, "Event notification" },
3682
    { 0x0b, "UPP-CMI container" },
3683
    { 0x0c, "SLPP message container" },
3684
    { 0x0f, "Multiple payloads" },
3685
    {    0, NULL } };
3686
3687
static uint16_t
3688
de_nas_5gs_mm_pld_cont_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3689
    uint32_t offset, unsigned len _U_,
3690
    char *add_string _U_, int string_len _U_)
3691
0
{
3692
0
    struct nas5gs_private_data *nas5gs_data = nas5gs_get_private_data(pinfo);
3693
3694
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_pld_cont_type, tvb, offset, 1, ENC_BIG_ENDIAN, &nas5gs_data->payload_container_type);
3695
3696
0
    return 1;
3697
0
}
3698
3699
/*
3700
 *   9.11.3.41    PDU session identity 2
3701
 */
3702
static uint16_t
3703
de_nas_5gs_mm_pdu_ses_id_2(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3704
    uint32_t offset, unsigned len _U_,
3705
    char *add_string _U_, int string_len _U_)
3706
0
{
3707
0
    proto_tree_add_item(tree, hf_nas_5gs_pdu_session_id, tvb, offset, 1, ENC_BIG_ENDIAN);
3708
3709
0
    return 1;
3710
0
}
3711
3712
/*
3713
 *   9.11.3.42    PDU session reactivation result
3714
 */
3715
3716
3717
static true_false_string tfs_nas_5gs_pdu_ses_rect_res_psi = {
3718
    "1",
3719
    "0"
3720
};
3721
3722
static uint16_t
3723
de_nas_5gs_mm_pdu_ses_react_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3724
    uint32_t offset, unsigned len,
3725
    char *add_string _U_, int string_len _U_)
3726
0
{
3727
0
    int curr_offset;
3728
3729
0
    static int * const psi_0_7_flags[] = {
3730
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_7_b7,
3731
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_6_b6,
3732
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_5_b5,
3733
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_4_b4,
3734
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_3_b3,
3735
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_2_b2,
3736
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_1_b1,
3737
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_0_b0,
3738
0
        NULL
3739
0
         };
3740
3741
0
        static int * const psi_8_15_flags[] = {
3742
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_15_b7,
3743
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_14_b6,
3744
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_13_b5,
3745
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_12_b4,
3746
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_11_b3,
3747
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_10_b2,
3748
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_9_b1,
3749
0
        &hf_nas_5gs_pdu_ses_rect_res_psi_8_b0,
3750
0
        NULL
3751
0
         };
3752
3753
0
    curr_offset = offset;
3754
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, psi_0_7_flags, ENC_BIG_ENDIAN);
3755
0
    curr_offset++;
3756
3757
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, psi_8_15_flags, ENC_BIG_ENDIAN);
3758
0
    curr_offset++;
3759
3760
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
3761
3762
0
    return (curr_offset - offset);
3763
3764
0
}
3765
3766
/*
3767
 *   9.11.3.43    PDU session reactivation result error cause
3768
 */
3769
static uint16_t
3770
de_nas_5gs_mm_pdu_ses_react_res_err_c(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3771
    uint32_t offset, unsigned len,
3772
    char *add_string _U_, int string_len _U_)
3773
0
{
3774
0
    uint32_t curr_offset = offset;
3775
3776
    /*Partial service area list*/
3777
0
    while ((curr_offset - offset) < len) {
3778
0
        proto_tree_add_item(tree, hf_nas_5gs_pdu_session_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3779
0
        curr_offset++;
3780
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_5gmm_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3781
0
        curr_offset++;
3782
0
    }
3783
3784
0
    return len;
3785
0
}
3786
3787
/*
3788
*   9.11.3.44    PDU session status
3789
*/
3790
3791
static true_false_string tfs_nas_5gs_pdu_ses_sts_psi = {
3792
    "Not PDU SESSION INACTIVE",
3793
    "PDU SESSION INACTIVE"
3794
};
3795
3796
static uint16_t
3797
de_nas_5gs_mm_pdu_ses_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3798
    uint32_t offset, unsigned len,
3799
    char *add_string _U_, int string_len _U_)
3800
0
{
3801
0
    int curr_offset;
3802
3803
0
    static int * const psi_0_7_flags[] = {
3804
0
        &hf_nas_5gs_pdu_ses_sts_psi_7_b7,
3805
0
        &hf_nas_5gs_pdu_ses_sts_psi_6_b6,
3806
0
        &hf_nas_5gs_pdu_ses_sts_psi_5_b5,
3807
0
        &hf_nas_5gs_pdu_ses_sts_psi_4_b4,
3808
0
        &hf_nas_5gs_pdu_ses_sts_psi_3_b3,
3809
0
        &hf_nas_5gs_pdu_ses_sts_psi_2_b2,
3810
0
        &hf_nas_5gs_pdu_ses_sts_psi_1_b1,
3811
0
        &hf_nas_5gs_pdu_ses_sts_psi_0_b0,
3812
0
        NULL
3813
0
    };
3814
3815
0
    static int * const psi_8_15_flags[] = {
3816
0
        &hf_nas_5gs_pdu_ses_sts_psi_15_b7,
3817
0
        &hf_nas_5gs_pdu_ses_sts_psi_14_b6,
3818
0
        &hf_nas_5gs_pdu_ses_sts_psi_13_b5,
3819
0
        &hf_nas_5gs_pdu_ses_sts_psi_12_b4,
3820
0
        &hf_nas_5gs_pdu_ses_sts_psi_11_b3,
3821
0
        &hf_nas_5gs_pdu_ses_sts_psi_10_b2,
3822
0
        &hf_nas_5gs_pdu_ses_sts_psi_9_b1,
3823
0
        &hf_nas_5gs_pdu_ses_sts_psi_8_b0,
3824
0
        NULL
3825
0
    };
3826
3827
0
    curr_offset = offset;
3828
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, psi_0_7_flags, ENC_BIG_ENDIAN);
3829
0
    curr_offset++;
3830
3831
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, psi_8_15_flags, ENC_BIG_ENDIAN);
3832
0
    curr_offset++;
3833
3834
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
3835
3836
0
    return (curr_offset - offset);
3837
3838
0
}
3839
3840
3841
/*
3842
 *   9.11.3.45    PLMN list
3843
 */
3844
/* See subclause 10.5.1.13 in 3GPP TS 24.008 */
3845
3846
/*
3847
 *   9.11.3.46    Rejected NSSAI
3848
 */
3849
static const value_string nas_5gs_mm_rej_s_nssai_cause_vals[] = {
3850
    { 0x00, "S-NSSAI not available in the current PLMN or SNPN" },
3851
    { 0x01, "S-NSSAI not available in the current registration area" },
3852
    { 0x02, "S-NSSAI not available due to the failed or revoked network slice-specific authentication and authorization" },
3853
    {    0, NULL } };
3854
3855
static uint16_t
3856
de_nas_5gs_mm_rej_nssai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3857
    uint32_t offset, unsigned len,
3858
    char *add_string _U_, int string_len _U_)
3859
0
{
3860
0
    proto_tree* sub_tree;
3861
0
    proto_item* item;
3862
0
    unsigned num_items = 1;
3863
0
    uint32_t curr_offset = offset;
3864
0
    uint32_t start_offset, nssai_len;
3865
3866
    /* Rejected NSSAI */
3867
0
    while ((curr_offset - offset) < len) {
3868
0
        start_offset = curr_offset;
3869
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_rej_nssai, &item, "Rejected S-NSSAI %u", num_items++);
3870
3871
        /* Length of rejected S-NSSAI Cause value */
3872
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_mm_len_of_rej_s_nssai, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &nssai_len);
3873
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_rej_s_nssai_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3874
0
        curr_offset++;
3875
        /* SST */
3876
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_mm_sst, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
3877
0
        curr_offset += 1;
3878
0
        if (nssai_len > 1) {
3879
            /* SD    octet 3 - octet 5* */
3880
0
            proto_tree_add_item(sub_tree, hf_nas_5gs_mm_sd, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
3881
0
            curr_offset += 3;
3882
0
        }
3883
0
        proto_item_set_len(item, curr_offset - start_offset);
3884
0
    }
3885
3886
0
    return len;
3887
0
}
3888
3889
/*
3890
 *  9.11.3.46A     Release assistance indication
3891
 */
3892
/* See subclause 9.9.4.25 in 3GPP TS 24.301 */
3893
3894
/*
3895
*     9.11.3.47    Request type
3896
*/
3897
static const value_string nas_5gs_mm_req_type_vals[] = {
3898
    { 0x01, "Initial request" },
3899
    { 0x02, "Existing PDU session" },
3900
    { 0x03, "Initial emergency request" },
3901
    { 0x04, "Existing emergency PDU session" },
3902
    { 0x05, "Modification request" },
3903
    { 0x06, "MA PDU request" },
3904
    { 0x07, "Reserved" },
3905
    { 0, NULL } };
3906
3907
static uint16_t
3908
de_nas_5gs_mm_req_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
3909
    uint32_t offset, unsigned len _U_,
3910
    char *add_string _U_, int string_len _U_)
3911
0
{
3912
3913
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_req_type, tvb, offset, 1, ENC_BIG_ENDIAN);
3914
3915
0
    return 1;
3916
0
}
3917
3918
3919
/*
3920
 *    9.11.3.48    S1 UE network capability
3921
 */
3922
/* See subclause 9.9.3.34 in 3GPP TS 24.301 */
3923
3924
/*
3925
 *   9.11.3.48A    S1 UE security capability
3926
 */
3927
/*See subclause 9.9.3.36 in 3GPP TS 24.301 */
3928
3929
/*
3930
 *     9.11.3.49    Service area list
3931
 */
3932
static true_false_string tfs_nas_5gs_sal_al_t = {
3933
    "TAIs in the list are in the non-allowed area",
3934
    "TAIs in the list are in the allowed area"
3935
};
3936
3937
static const value_string nas_5gs_mm_sal_t_li_values[] = {
3938
    { 0x00, "list of TACs belonging to one PLMN, with non-consecutive TAC values" },
3939
    { 0x01, "list of TACs belonging to one PLMN, with consecutive TAC values" },
3940
    { 0x02, "list of TAIs belonging to different PLMNs" },
3941
    { 0x03, "All TAIs belonging to the PLMN are in the allowed area" },
3942
    { 0, NULL } };
3943
3944
static const value_string nas_5gs_mm_sal_num_e_vals[] = {
3945
    { 0x00, "1" },
3946
    { 0x01, "2" },
3947
    { 0x02, "3" },
3948
    { 0x03, "4" },
3949
    { 0x04, "5" },
3950
    { 0x05, "6" },
3951
    { 0x06, "7" },
3952
    { 0x07, "8" },
3953
    { 0x08, "9" },
3954
    { 0x09, "10" },
3955
    { 0x0a, "11" },
3956
    { 0x0b, "12" },
3957
    { 0x0c, "13" },
3958
    { 0x0d, "14" },
3959
    { 0x0e, "15" },
3960
    { 0x0f, "16" },
3961
    { 0, NULL } };
3962
3963
3964
3965
static uint16_t
3966
de_nas_5gs_mm_sal(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
3967
    uint32_t offset, unsigned len,
3968
    char *add_string _U_, int string_len _U_)
3969
0
{
3970
0
    proto_tree *sub_tree;
3971
0
    proto_item *item;
3972
3973
0
    static int * const flags_sal[] = {
3974
0
        &hf_nas_5gs_mm_sal_al_t,
3975
0
        &hf_nas_5gs_mm_sal_t_li,
3976
0
        &hf_nas_5gs_mm_sal_num_e,
3977
0
        NULL
3978
0
    };
3979
3980
0
    unsigned num_par_sal = 1;
3981
0
    uint32_t curr_offset = offset;
3982
0
    uint32_t start_offset;
3983
0
    uint8_t sal_head, sal_t_li, sal_num_e;
3984
3985
    /*Partial service area list*/
3986
0
    while ((curr_offset - offset) < len) {
3987
0
        start_offset = curr_offset;
3988
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_part_sal, &item, "Partial service area list  %u", num_par_sal);
3989
        /*Head of Partial service area list*/
3990
        /* Allowed type    Type of list    Number of elements    octet 1 */
3991
0
        sal_head = tvb_get_uint8(tvb, curr_offset);
3992
0
        sal_t_li = (sal_head & 0x60) >> 5;
3993
0
        sal_num_e = (sal_head & 0x1f) + 1;
3994
0
        proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, flags_sal, ENC_BIG_ENDIAN);
3995
0
        curr_offset++;
3996
0
        switch (sal_t_li) {
3997
0
        case 0:
3998
            /*octet 2  MCC digit2  MCC digit1*/
3999
            /*octet 3  MNC digit3  MCC digit3*/
4000
            /*octet 4  MNC digit2  MNC digit1*/
4001
0
            dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_5GSTAI, true);
4002
0
            curr_offset += 3;
4003
0
            while (sal_num_e > 0) {
4004
0
                proto_tree_add_item(sub_tree, hf_nas_5gs_tac, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
4005
0
                curr_offset += 3;
4006
0
                sal_num_e--;
4007
0
            }
4008
0
            break;
4009
0
        case 1:
4010
            /*octet 2  MCC digit2  MCC digit1*/
4011
            /*octet 3  MNC digit3  MCC digit3*/
4012
            /*octet 4  MNC digit2  MNC digit1*/
4013
0
            dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_5GSTAI, true);
4014
0
            curr_offset += 3;
4015
4016
            /*octet 5  TAC 1*/
4017
0
            proto_tree_add_item(sub_tree, hf_nas_5gs_tac, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
4018
0
            curr_offset+=3;
4019
0
            break;
4020
0
        case 2:
4021
0
            while (sal_num_e > 0) {
4022
                /*octet 2  MCC digit2  MCC digit1*/
4023
                /*octet 3  MNC digit3  MCC digit3*/
4024
                /*octet 4  MNC digit2  MNC digit1*/
4025
0
                dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_5GSTAI, true);
4026
0
                curr_offset += 3;
4027
4028
                /*octet 5  TAC 1*/
4029
0
                proto_tree_add_item(sub_tree, hf_nas_5gs_tac, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
4030
0
                curr_offset += 3;
4031
4032
0
                sal_num_e--;
4033
0
            }
4034
0
            break;
4035
0
        case 3:
4036
0
            dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_5GSTAI, true);
4037
0
            curr_offset += 3;
4038
0
            break;
4039
0
        default:
4040
0
            proto_tree_add_expert(sub_tree, pinfo, &ei_nas_5gs_unknown_value, tvb, curr_offset, len - 1);
4041
0
        }
4042
4043
4044
4045
        /*calculate the length of IE?*/
4046
0
        proto_item_set_len(item, curr_offset - start_offset);
4047
        /*calculate the number of Partial service area list*/
4048
0
        num_par_sal++;
4049
0
    }
4050
4051
0
    return len;
4052
0
}
4053
4054
4055
/*
4056
 *     9.11.3.50    Service type
4057
 */
4058
4059
/* Used inline as H1 (Upper nibble)*/
4060
static const value_string nas_5gs_mm_serv_type_vals[] = {
4061
    { 0x00, "Signalling" },
4062
    { 0x01, "Data" },
4063
    { 0x02, "Mobile terminated services" },
4064
    { 0x03, "Emergency services" },
4065
    { 0x04, "Emergency services fallback" },
4066
    { 0x05, "High priority access" },
4067
    { 0x06, "Elevated signalling" },
4068
    {    0, NULL }
4069
};
4070
4071
static uint16_t
4072
de_nas_5gs_mm_serv_type(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4073
    uint32_t offset, unsigned len,
4074
    char* add_string _U_, int string_len _U_)
4075
0
{
4076
4077
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_serv_type, tvb, offset, 1, ENC_BIG_ENDIAN);
4078
4079
0
    return len;
4080
0
}
4081
4082
/*
4083
 *   9.11.3.50A    SMS indication
4084
 */
4085
static uint16_t
4086
de_nas_5gs_mm_sms_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
4087
    uint32_t offset, unsigned len,
4088
    char *add_string _U_, int string_len _U_)
4089
0
{
4090
4091
0
    static int * const flags[] = {
4092
0
        &hf_nas_5gs_spare_b3,
4093
0
        &hf_nas_5gs_spare_b2,
4094
0
        &hf_nas_5gs_spare_b1,
4095
0
        &hf_nas_5gs_mm_sms_indic_sai,
4096
0
        NULL
4097
0
    };
4098
4099
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
4100
4101
0
    return len;
4102
0
}
4103
4104
/*
4105
 *    9.11.3.51    SOR transparent container
4106
 */
4107
static true_false_string tfs_nas_5gs_list_type = {
4108
    "PLMN ID and access technology list",
4109
    "Secured packet"
4110
};
4111
4112
static true_false_string tfs_nas_5gs_list_ind = {
4113
    "List of preferred PLMN/access technology combinations is provided",
4114
    "No list of preferred PLMN/access technology combinations is provided"
4115
};
4116
4117
static true_false_string tfs_nas_5gs_sor_data_type = {
4118
    "Carries acknowledgement of successful reception of the steering of roaming information",
4119
    "Carries steering of roaming information"
4120
};
4121
4122
static true_false_string tfs_nas_5gs_sor_sssi = {
4123
    "SOR-SNPN-SI present",
4124
    "subscribed SNPN or HPLMN indication that 'no change of the SOR-SNPN-SI stored in the UE is needed and thus no SOR-SNPN-SI is provided'"
4125
};
4126
4127
static uint16_t
4128
de_nas_5gs_mm_sor_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
4129
    uint32_t offset, unsigned len,
4130
    char *add_string _U_, int string_len _U_)
4131
0
{
4132
    /* Layout differs depending on SOR data type*/
4133
0
    static int * const flags_dt0[] = {
4134
0
    &hf_nas_5gs_spare_b7,
4135
0
    &hf_nas_5gs_spare_b6,
4136
0
    &hf_nas_5gs_spare_b5,
4137
0
    &hf_nas_5gs_sor_hdr0_ap,
4138
0
    &hf_nas_5gs_sor_hdr0_ack,
4139
0
    &hf_nas_5gs_sor_hdr0_list_type,
4140
0
    &hf_nas_5gs_sor_hdr0_list_ind,
4141
0
    &hf_nas_5gs_sor_hdr0_sor_data_type,
4142
0
    NULL
4143
0
    };
4144
4145
0
    static int * const flags_dt1[] = {
4146
0
    &hf_nas_5gs_spare_b7,
4147
0
    &hf_nas_5gs_spare_b6,
4148
0
    &hf_nas_5gs_spare_b5,
4149
0
    &hf_nas_5gs_spare_b4,
4150
0
    &hf_nas_5gs_sor_msssnpnsils,
4151
0
    &hf_nas_5gs_sor_mssnpnsi,
4152
0
    &hf_nas_5gs_sor_mssi,
4153
0
    &hf_nas_5gs_sor_hdr0_sor_data_type,
4154
0
    NULL
4155
0
    };
4156
    /* 3GPP TS 31.102 [22] subclause 4.2.5 */
4157
0
    static int * const flags_access_tech_1[] = {
4158
0
    &hf_nas_5gs_access_tech_o1_b7,
4159
0
    &hf_nas_5gs_access_tech_o1_b6,
4160
0
    &hf_nas_5gs_access_tech_o1_b5,
4161
0
    &hf_nas_5gs_access_tech_o1_b4,
4162
0
    &hf_nas_5gs_access_tech_o1_b3,
4163
0
    &hf_nas_5gs_rfu_b2,
4164
0
    &hf_nas_5gs_rfu_b1,
4165
0
    &hf_nas_5gs_rfu_b0,
4166
0
    NULL
4167
0
    };
4168
4169
0
    static int * const flags_access_tech_2[] = {
4170
0
    &hf_nas_5gs_access_tech_o2_b7,
4171
0
    &hf_nas_5gs_access_tech_o2_b6,
4172
0
    &hf_nas_5gs_access_tech_o2_b5,
4173
0
    &hf_nas_5gs_access_tech_o2_b4,
4174
0
    &hf_nas_5gs_access_tech_o2_b3,
4175
0
    &hf_nas_5gs_access_tech_o2_b2,
4176
0
    &hf_nas_5gs_rfu_b1,
4177
0
    &hf_nas_5gs_rfu_b0,
4178
0
    NULL
4179
0
    };
4180
4181
0
    proto_tree *sub_tree;
4182
0
    uint8_t oct, data_type, list_type, ap, list_ind;
4183
0
    uint32_t curr_offset = offset;
4184
0
    int i = 1;
4185
4186
0
    oct = tvb_get_uint8(tvb, offset);
4187
0
    data_type = oct & 0x01;
4188
0
    if (data_type == 0) {
4189
        /* SOR header    octet 4*/
4190
0
        proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_dt0, ENC_BIG_ENDIAN);
4191
0
        curr_offset++;
4192
0
        list_ind = (oct & 0x2) >> 1;
4193
0
        list_type = (oct & 0x4) >> 2;
4194
0
        ap = (oct & 0x10) >> 4;
4195
        /* SOR-MAC-IAUSF    octet 5-20 */
4196
0
        proto_tree_add_item(tree, hf_nas_5gs_sor_mac_iausf, tvb, curr_offset, 16, ENC_NA);
4197
0
        curr_offset += 16;
4198
        /* CounterSOR    octet 21-22 */
4199
0
        proto_tree_add_item(tree, hf_nas_5gs_counter_sor, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
4200
0
        curr_offset += 2;
4201
0
        if (list_type == 0) {
4202
            /* Secured packet    octet 23* - 2048* */
4203
0
            proto_tree_add_item(tree, hf_nas_5gs_sor_sec_pkt, tvb, curr_offset, len - 19, ENC_NA);
4204
0
            curr_offset = curr_offset + (len - 19);
4205
0
        } else if (ap == 1) {
4206
0
            uint32_t plmn_id_act_len, cont_len;
4207
0
            uint64_t oct_o_flags;
4208
4209
0
            static int * const flags_oct_o[] = {
4210
0
                &hf_nas_5gs_sor_sssli,
4211
0
                &hf_nas_5gs_sor_sssi,
4212
0
                &hf_nas_5gs_sor_sscmi,
4213
0
                &hf_nas_5gs_sor_si,
4214
0
                NULL
4215
0
            };
4216
4217
0
            if (list_ind) {
4218
0
                proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sor_plmn_id_act_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &plmn_id_act_len);
4219
0
                curr_offset++;
4220
0
                while ((curr_offset - offset) < plmn_id_act_len) {
4221
0
                    sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 5, ett_nas_5gs_mm_sor, NULL, "List item %u", i);
4222
0
                    curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_NONE, true);
4223
0
                    curr_offset += 3;
4224
0
                    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_access_tech_1, ENC_BIG_ENDIAN);
4225
0
                    curr_offset++;
4226
0
                    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_access_tech_2, ENC_BIG_ENDIAN);
4227
0
                    curr_offset++;
4228
0
                    i++;
4229
0
                }
4230
0
            }
4231
0
            proto_tree_add_bitmask_list_ret_uint64(tree, tvb, curr_offset, 1, flags_oct_o, ENC_BIG_ENDIAN, &oct_o_flags);
4232
0
            curr_offset++;
4233
0
            if (oct_o_flags & 0x01) {
4234
0
                proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sor_cmci_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &cont_len);
4235
0
                curr_offset += 2;
4236
0
                proto_tree_add_item(tree, hf_nas_5gs_sor_cmci_payload, tvb, curr_offset, cont_len, ENC_NA);
4237
0
                curr_offset += cont_len;
4238
0
            }
4239
0
            if (oct_o_flags & 0x04) {
4240
0
                proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sor_snpn_si_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &cont_len);
4241
0
                curr_offset += 2;
4242
0
                proto_tree_add_item(tree, hf_nas_5gs_sor_snpn_si_payload, tvb, curr_offset, cont_len, ENC_NA);
4243
0
                curr_offset += cont_len;
4244
0
            }
4245
0
            if (oct_o_flags & 0x08) {
4246
0
                proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sor_snpn_si_ls_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &cont_len);
4247
0
                curr_offset += 2;
4248
0
                proto_tree_add_item(tree, hf_nas_5gs_sor_snpn_si_ls_payload, tvb, curr_offset, cont_len, ENC_NA);
4249
0
                curr_offset += cont_len;
4250
0
            }
4251
0
        } else {
4252
            /* PLMN ID and access technology list    octet 23*-102* */
4253
0
            while ((curr_offset - offset) < len) {
4254
0
                sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 5, ett_nas_5gs_mm_sor, NULL, "List item %u", i);
4255
                /* The PLMN ID and access technology list consists of PLMN ID and access technology identifier
4256
                 * and are coded as specified in 3GPP TS 31.102 [22] subclause 4.2.5
4257
                 *  PLMN
4258
                 * Contents:
4259
                 * - Mobile Country Code (MCC) followed by the Mobile Network Code (MNC).
4260
                 * Coding:
4261
                 * - according to TS 24.008 [9].
4262
                 */
4263
                /* PLMN ID 1    octet 23*- 25* */
4264
0
                curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_NONE, true);
4265
                /* access technology identifier 1    octet 26*- 27* */
4266
0
                proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_access_tech_1, ENC_BIG_ENDIAN);
4267
0
                curr_offset++;
4268
0
                proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_access_tech_2, ENC_BIG_ENDIAN);
4269
0
                curr_offset++;
4270
0
                i++;
4271
0
            }
4272
0
        }
4273
4274
0
    } else {
4275
        /* SOR header    octet 4*/
4276
0
        proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags_dt1, ENC_BIG_ENDIAN);
4277
0
        curr_offset++;
4278
        /* SOR-MAC-IUE    octet 5 - 20*/
4279
0
        proto_tree_add_item(tree, hf_nas_5gs_sor_mac_iue, tvb, curr_offset, 16, ENC_NA);
4280
0
        curr_offset+=16;
4281
0
    }
4282
4283
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
4284
4285
0
    return (curr_offset - offset);
4286
4287
0
}
4288
4289
/*
4290
 *     9.11.3.52    Time zone
4291
 */
4292
/* See subclause 10.5.3.8 in 3GPP TS 24.008 */
4293
4294
/*
4295
 *     9.11.3.53    Time zone and time
4296
 */
4297
/* See subclause 10.5.3.9 in 3GPP TS 24.00 */
4298
4299
/*
4300
 *   9.11.3.53A    UE parameters update transparent container
4301
 */
4302
static uint16_t
4303
de_nas_5gs_mm_ue_par_upd_transp_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
4304
    uint32_t offset, unsigned len,
4305
    char *add_string _U_, int string_len _U_)
4306
0
{
4307
0
    proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_ie_not_dis, tvb, offset, len);
4308
4309
0
    return len;
4310
0
}
4311
4312
4313
/*
4314
 *     9.11.3.54    UE security capability
4315
 */
4316
4317
static uint16_t
4318
de_nas_5gs_mm_ue_sec_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
4319
    uint32_t offset, unsigned len,
4320
    char *add_string _U_, int string_len _U_)
4321
0
{
4322
0
    uint32_t curr_offset;
4323
4324
0
    static int * const oct3_flags[] = {
4325
0
        &hf_nas_5gs_mm_5g_ea0,
4326
0
        &hf_nas_5gs_mm_128_5g_ea1,
4327
0
        &hf_nas_5gs_mm_128_5g_ea2,
4328
0
        &hf_nas_5gs_mm_128_5g_ea3,
4329
0
        &hf_nas_5gs_mm_5g_ea4,
4330
0
        &hf_nas_5gs_mm_5g_ea5,
4331
0
        &hf_nas_5gs_mm_5g_ea6,
4332
0
        &hf_nas_5gs_mm_5g_ea7,
4333
0
        NULL
4334
0
    };
4335
4336
0
    static int * const oct4_flags[] = {
4337
0
        &hf_nas_5gs_mm_5g_ia0,
4338
0
        &hf_nas_5gs_mm_5g_128_ia1,
4339
0
        &hf_nas_5gs_mm_5g_128_ia2,
4340
0
        &hf_nas_5gs_mm_5g_128_ia3,
4341
0
        &hf_nas_5gs_mm_5g_ia4,
4342
0
        &hf_nas_5gs_mm_5g_ia5,
4343
0
        &hf_nas_5gs_mm_5g_ia6,
4344
0
        &hf_nas_5gs_mm_5g_ia7,
4345
0
        NULL
4346
0
    };
4347
4348
0
    static int * const oct5_flags[] = {
4349
0
        &hf_nas_5gs_mm_eea0,
4350
0
        &hf_nas_5gs_mm_128eea1,
4351
0
        &hf_nas_5gs_mm_128eea2,
4352
0
        &hf_nas_5gs_mm_eea3,
4353
0
        &hf_nas_5gs_mm_eea4,
4354
0
        &hf_nas_5gs_mm_eea5,
4355
0
        &hf_nas_5gs_mm_eea6,
4356
0
        &hf_nas_5gs_mm_eea7,
4357
0
        NULL
4358
0
    };
4359
4360
0
    static int * const oct6_flags[] = {
4361
0
        &hf_nas_5gs_mm_eia0,
4362
0
        &hf_nas_5gs_mm_128eia1,
4363
0
        &hf_nas_5gs_mm_128eia2,
4364
0
        &hf_nas_5gs_mm_eia3,
4365
0
        &hf_nas_5gs_mm_eia4,
4366
0
        &hf_nas_5gs_mm_eia5,
4367
0
        &hf_nas_5gs_mm_eia6,
4368
0
        &hf_nas_5gs_mm_eia7,
4369
0
        NULL
4370
0
    };
4371
4372
0
    curr_offset = offset;
4373
4374
4375
    /* 5G-EA0    128-5G-EA1    128-5G-EA2    128-5G-EA3    5G-EA4    5G-EA5    5G-EA6    5G-EA7    octet 3 */
4376
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, oct3_flags, ENC_NA);
4377
0
    curr_offset++;
4378
4379
    /* 5G-IA0    128-5G-IA1    128-5G-IA2    128-5G-IA3    5G-IA4    5G-IA5    5G-IA6    5G-IA7 octet 4 */
4380
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, oct4_flags, ENC_NA);
4381
0
    curr_offset++;
4382
4383
0
    if (len == 2) {
4384
0
        return len;
4385
0
    }
4386
4387
    /* EEA0    128-EEA1    128-EEA2    128-EEA3    EEA4    EEA5    EEA6    EEA7 octet 5 */
4388
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, oct5_flags, ENC_NA);
4389
0
    curr_offset++;
4390
4391
    /* EIA0    128-EIA1    128-EIA2    128-EIA3    EIA4    EIA5    EIA6    EIA7 octet 6 */
4392
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, oct6_flags, ENC_NA);
4393
0
    curr_offset++;
4394
4395
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
4396
4397
0
    return len;
4398
0
}
4399
4400
/*
4401
 * 9.11.3.55    UE's usage setting
4402
 */
4403
static true_false_string tfs_nas_5gs_mm_ue_usage_setting = {
4404
    "Data centric",
4405
    "Voice centric"
4406
};
4407
4408
static uint16_t
4409
de_nas_5gs_mm_ue_usage_set(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
4410
    uint32_t offset, unsigned len,
4411
    char *add_string _U_, int string_len _U_)
4412
0
{
4413
0
    static int * const flags[] = {
4414
0
        &hf_nas_5gs_spare_b3,
4415
0
        &hf_nas_5gs_spare_b2,
4416
0
        &hf_nas_5gs_spare_b1,
4417
0
        &hf_nas_5gs_mm_ue_usage_setting,
4418
0
        NULL
4419
0
    };
4420
4421
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
4422
4423
0
    return len;
4424
0
}
4425
4426
/*
4427
 *    9.11.3.56    UE status
4428
 */
4429
4430
static true_false_string tfs_nas_5gs_mm_n1_mod = {
4431
    "UE is in 5GMM-REGISTERED state",
4432
    "UE is not in 5GMM-REGISTERED state"
4433
};
4434
4435
static true_false_string tfs_nas_5gs_mm_s1_mod = {
4436
    "UE is in EMM-REGISTERED state",
4437
    "UE is not in EMM-REGISTERED state"
4438
};
4439
4440
4441
4442
static uint16_t
4443
de_nas_5gs_mm_ue_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
4444
    uint32_t offset, unsigned len _U_,
4445
    char *add_string _U_, int string_len _U_)
4446
0
{
4447
0
    static int * const flags[] = {
4448
0
        &hf_nas_5gs_spare_b7,
4449
0
        &hf_nas_5gs_spare_b6,
4450
0
        &hf_nas_5gs_spare_b5,
4451
0
        &hf_nas_5gs_spare_b4,
4452
0
        &hf_nas_5gs_spare_b3,
4453
0
        &hf_nas_5gs_spare_b2,
4454
0
        &hf_nas_5gs_mm_n1_mode_reg_b1,
4455
0
        &hf_nas_5gs_mm_s1_mode_reg_b0,
4456
0
        NULL
4457
0
    };
4458
4459
    /* 0 Spare    0 Spare    0 Spare    0 Spare    0 Spare    0 Spare    N1 mode    S1 mode reg */
4460
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
4461
4462
0
    return 1;
4463
0
}
4464
4465
/*
4466
 * 9.11.3.57    Uplink data status
4467
 */
4468
4469
static true_false_string tfs_nas_5gs_ul_data_sts_psi = {
4470
    "uplink data are pending",
4471
    "no uplink data are pending"
4472
};
4473
4474
static uint16_t
4475
de_nas_5gs_mm_ul_data_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
4476
    uint32_t offset, unsigned len,
4477
    char *add_string _U_, int string_len _U_)
4478
0
{
4479
0
    int curr_offset;
4480
4481
0
    static int * const psi_0_7_flags[] = {
4482
0
        &hf_nas_5gs_ul_data_sts_psi_7_b7,
4483
0
        &hf_nas_5gs_ul_data_sts_psi_6_b6,
4484
0
        &hf_nas_5gs_ul_data_sts_psi_5_b5,
4485
0
        &hf_nas_5gs_ul_data_sts_psi_4_b4,
4486
0
        &hf_nas_5gs_ul_data_sts_psi_3_b3,
4487
0
        &hf_nas_5gs_ul_data_sts_psi_2_b2,
4488
0
        &hf_nas_5gs_ul_data_sts_psi_1_b1,
4489
0
        &hf_nas_5gs_ul_data_sts_psi_0_b0,
4490
0
        NULL
4491
0
    };
4492
4493
0
    static int * const psi_8_15_flags[] = {
4494
0
        &hf_nas_5gs_ul_data_sts_psi_15_b7,
4495
0
        &hf_nas_5gs_ul_data_sts_psi_14_b6,
4496
0
        &hf_nas_5gs_ul_data_sts_psi_13_b5,
4497
0
        &hf_nas_5gs_ul_data_sts_psi_12_b4,
4498
0
        &hf_nas_5gs_ul_data_sts_psi_11_b3,
4499
0
        &hf_nas_5gs_ul_data_sts_psi_10_b2,
4500
0
        &hf_nas_5gs_ul_data_sts_psi_9_b1,
4501
0
        &hf_nas_5gs_ul_data_sts_psi_8_b0,
4502
0
        NULL
4503
0
    };
4504
4505
0
    curr_offset = offset;
4506
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, psi_0_7_flags, ENC_BIG_ENDIAN);
4507
0
    curr_offset++;
4508
4509
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, psi_8_15_flags, ENC_BIG_ENDIAN);
4510
0
    curr_offset++;
4511
4512
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
4513
4514
0
    return (curr_offset - offset);
4515
0
}
4516
4517
/*
4518
 * 9.11.3.58 Void
4519
 * 9.11.3.59 Void
4520
 * 9.11.3.60 Void
4521
 * 9.11.3.61 Void
4522
 * 9.11.3.62 Void
4523
 * 9.11.3.63 Void
4524
 * 9.11.3.64 Void
4525
 * 9.11.3.65 Void
4526
 * 9.11.3.66 Void
4527
 * 9.11.3.67 Void
4528
 */
4529
4530
/*
4531
 * 9.11.3.68 UE radio capability ID
4532
 */
4533
/*
4534
 * The UE radio capability ID contents contain the UE radio capability ID as specified in 3GPP TS 23.003
4535
 * with each digit coded in BCD, starting with the first digit coded in bits 4 to 1 of octet 3,
4536
 * the second digit coded in bits 8 to 5 of octet 3, and so on. If the UE radio capability ID contains
4537
 * an odd number of digits, bits 8 to 5 of the last octet (octet n) shall be coded as "1111".
4538
*/
4539
4540
uint16_t
4541
de_nas_5gs_mm_ue_radio_cap_id(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4542
    uint32_t offset, unsigned len,
4543
    char* add_string _U_, int string_len _U_)
4544
2
{
4545
2
    int curr_offset;
4546
4547
2
    curr_offset = offset;
4548
4549
2
    proto_tree_add_item(tree, hf_nas_5gs_mm_ue_radio_cap_id, tvb, curr_offset, len, ENC_BCD_DIGITS_0_9|ENC_LITTLE_ENDIAN);
4550
4551
2
    return len;
4552
2
}
4553
4554
/*
4555
 * 9.11.3.69    UE radio capability ID deletion indication
4556
 */
4557
static const value_string nas_5gs_mm_ue_radio_cap_id_del_req_vals[] = {
4558
    { 0x0, "UE radio capability ID deletion not requested" },
4559
    { 0x1, "Network-assigned UE radio capability IDs deletion requested" },
4560
    {   0, NULL }
4561
};
4562
4563
static uint16_t
4564
de_nas_5gs_mm_ue_radio_cap_id_del_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4565
    uint32_t offset, unsigned len,
4566
    char* add_string _U_, int string_len _U_)
4567
0
{
4568
0
    static int* const flags[] = {
4569
0
        &hf_nas_5gs_spare_b3,
4570
0
        &hf_nas_5gs_mm_ue_radio_cap_id_del_req,
4571
0
        NULL
4572
0
    };
4573
4574
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
4575
4576
0
    return len;
4577
0
}
4578
4579
/*
4580
 * 9.11.3.70    Truncated 5G-S-TMSI configuration
4581
 */
4582
static const value_string nas_5gs_mm_amf_trunc_set_id_vals[] = {
4583
    { 0x0, "reserved" },
4584
    { 0x1, "1 least significant bit of the AMF Set ID" },
4585
    { 0x2, "2 least significant bit of the AMF Set ID" },
4586
    { 0x3, "3 least significant bit of the AMF Set ID" },
4587
    { 0x4, "4 least significant bit of the AMF Set ID" },
4588
    { 0x5, "5 least significant bit of the AMF Set ID" },
4589
    { 0x6, "6 least significant bit of the AMF Set ID" },
4590
    { 0x7, "7 least significant bit of the AMF Set ID" },
4591
    { 0x8, "8 least significant bit of the AMF Set ID" },
4592
    { 0x9, "9 least significant bit of the AMF Set ID" },
4593
    { 0xa, "10 least significant bit of the AMF Set ID" },
4594
    {   0, NULL }
4595
};
4596
4597
static const value_string nas_5gs_mm_amf_trunc_pointer_vals[] = {
4598
    { 0x0, "reserved" },
4599
    { 0x1, "1 least significant bit of the AMF Pointer" },
4600
    { 0x2, "2 least significant bit of the AMF Pointer" },
4601
    { 0x3, "3 least significant bit of the AMF Pointer" },
4602
    { 0x4, "4 least significant bit of the AMF Pointer" },
4603
    { 0x5, "5 least significant bit of the AMF Pointer" },
4604
    { 0x6, "6 least significant bit of the AMF Pointer" },
4605
    {   0, NULL }
4606
};
4607
4608
static uint16_t
4609
de_nas_5gs_mm_truncated_5g_s_tmsi_conf(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4610
    uint32_t offset, unsigned len,
4611
    char* add_string _U_, int string_len _U_)
4612
0
{
4613
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_trunc_amf_set_id, tvb, offset, 1, ENC_BIG_ENDIAN);
4614
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_trunc_amf_pointer, tvb, offset, 1, ENC_BIG_ENDIAN);
4615
4616
0
    return len;
4617
0
}
4618
4619
/*
4620
 * 9.11.3.71    WUS assistance information
4621
 */
4622
/* See subclause 9.9.3.62 in 3GPP TS 24.301 */
4623
4624
/*
4625
 * 9.11.3.72    N5GC indication
4626
 */
4627
static uint16_t
4628
de_nas_5gs_mm_n5gc_indication(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4629
    uint32_t offset, unsigned len _U_,
4630
    char* add_string _U_, int string_len _U_)
4631
0
{
4632
0
    static int* const flags[] = {
4633
0
        &hf_nas_5gs_spare_b3,
4634
0
        &hf_nas_5gs_spare_b2,
4635
0
        &hf_nas_5gs_spare_b1,
4636
0
        &hf_nas_5gs_mm_n5gcreg_b0,
4637
0
        NULL
4638
0
    };
4639
4640
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
4641
4642
0
    return 1;
4643
4644
0
}
4645
4646
/*
4647
 * 9.11.3.73    NB-N1 mode DRX parameters
4648
 */
4649
static const value_string nas_5gs_mm_nb_n1_drx_params_vals[] = {
4650
    { 0x0, "DRX value not specified"},
4651
    { 0x1, "DRX cycle parameter T = 32"},
4652
    { 0x2, "DRX cycle parameter T = 64"},
4653
    { 0x3, "DRX cycle parameter T = 128"},
4654
    { 0x4, "DRX cycle parameter T = 256"},
4655
    { 0x5, "DRX cycle parameter T = 512"},
4656
    { 0x7, "DRX cycle parameter T = 1024"},
4657
    { 0, NULL }
4658
};
4659
4660
static uint16_t
4661
de_nas_5gs_mm_nb_n1_mode_drx_pars(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4662
    uint32_t offset, unsigned len _U_,
4663
    char* add_string _U_, int string_len _U_)
4664
0
{
4665
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
4666
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_nb_n1_drx_value, tvb, offset, 1, ENC_BIG_ENDIAN);
4667
4668
0
    return 1;
4669
0
}
4670
4671
/*
4672
 * 9.11.3.74    Additional configuration indication
4673
 */
4674
static true_false_string tfs_nas_5gs_mm_scmr = {
4675
    "release of N1 NAS signalling connection not required",
4676
    "no additional information"
4677
};
4678
4679
static uint16_t
4680
de_nas_5gs_mm_additional_conf_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4681
    uint32_t offset, unsigned len _U_,
4682
    char* add_string _U_, int string_len _U_)
4683
0
{
4684
0
    static int* const flags[] = {
4685
0
        &hf_nas_5gs_spare_b3,
4686
0
        &hf_nas_5gs_spare_b2,
4687
0
        &hf_nas_5gs_spare_b1,
4688
0
        &hf_nas_5gs_mm_scmr,
4689
0
        NULL
4690
0
    };
4691
4692
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
4693
4694
0
    return 1;
4695
0
}
4696
4697
/*
4698
 * 9.11.3.75    Extended rejected NSSAI
4699
 */
4700
static const value_string nas_5gs_mm_extended_rejected_s_nssai_type_of_list_vals[] = {
4701
    { 0x00, "list of S-NSSAIs without any associated back-off timer value" },
4702
    { 0x01, "list of S-NSSAIs with one associated back-off timer value that applies to all S-NSSAIs in the list" },
4703
    {    0, NULL }
4704
};
4705
4706
static const value_string nas_5gs_mm_extended_rejected_s_nssai_number_of_element_vals[] = {
4707
    { 0x00, "1 element" },
4708
    { 0x01, "2 elements" },
4709
    { 0x02, "3 elements" },
4710
    { 0x03, "4 elements" },
4711
    { 0x04, "5 elements" },
4712
    { 0x05, "6 elements" },
4713
    { 0x06, "7 elements" },
4714
    { 0x07, "8 elements" },
4715
    {    0, NULL }
4716
};
4717
4718
static const value_string nas_5gs_mm_extended_rej_s_nssai_cause_vals[] = {
4719
    { 0x00, "S-NSSAI not available in the current PLMN or SNPN" },
4720
    { 0x01, "S-NSSAI not available in the current registration area" },
4721
    { 0x02, "S-NSSAI not available due to the failed or revoked network slice-specific authentication and authorization" },
4722
    { 0x03, "S-NSSAI not available due to maximum number of UEs reached" },
4723
    {    0, NULL }
4724
};
4725
4726
static uint16_t
4727
de_nas_5gs_mm_extended_rejected_nssai(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4728
    uint32_t offset, unsigned len,
4729
    char* add_string _U_, int string_len _U_)
4730
0
{
4731
0
    proto_tree* sub_partial_tree;
4732
0
    proto_tree* sub_rejected_tree;
4733
0
    proto_item* item;
4734
0
    int i;
4735
0
    unsigned num_partial_items = 1;
4736
0
    uint32_t curr_offset = offset;
4737
0
    uint32_t type_of_list, number_of_element, nssai_len;
4738
4739
    /* Rejected NSSAI */
4740
0
    while ((curr_offset - offset) < len) {
4741
0
        sub_partial_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_partial_extended_rejected_nssai_list,
4742
0
            &item, "Partial extended rejected NSSAI list %u", num_partial_items);
4743
4744
0
        proto_tree_add_item(sub_partial_tree, hf_nas_5gs_mm_extended_rejected_nssai_spare, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4745
0
        proto_tree_add_item_ret_uint(sub_partial_tree, hf_nas_5gs_mm_extended_rejected_nssai_type_of_list, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &type_of_list);
4746
0
        proto_tree_add_item_ret_uint(sub_partial_tree, hf_nas_5gs_mm_extended_rejected_nssai_number_of_element, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &number_of_element);
4747
0
        curr_offset++;
4748
4749
0
        if (type_of_list > 0) {
4750
0
            item = proto_tree_add_item(sub_partial_tree, hf_nas_5gs_mm_extended_rejected_nssai_back_off_timer, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4751
0
            de_gc_timer3(tvb, proto_item_add_subtree(item, ett_nas_5gs_mm_ext_rej_nssai_back_off_timer), pinfo, curr_offset, 1, NULL, 0);
4752
0
            curr_offset++;
4753
0
        }
4754
4755
0
        for (i = 0; i < ((int)number_of_element + 1); i++)
4756
0
        {
4757
0
            sub_rejected_tree = proto_tree_add_subtree_format(sub_partial_tree, tvb, curr_offset, -1, ett_nas_5gs_mm_ext_rej_nssai,
4758
0
                &item, "Rejected S-NSSAI %u", i+1);
4759
4760
4761
0
            proto_tree_add_item_ret_uint(sub_rejected_tree, hf_nas_5gs_mm_len_of_rejected_s_nssai, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &nssai_len);
4762
0
            proto_tree_add_item(sub_rejected_tree, hf_nas_5gs_mm_rejected_s_nssai_cause_value, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4763
0
            proto_item_set_len(item, nssai_len);
4764
0
            curr_offset++;
4765
4766
            /* S-NSSAI */
4767
0
            curr_offset += de_nas_5gs_cmn_s_nssai(tvb, sub_rejected_tree, pinfo, curr_offset, nssai_len, NULL, 0);
4768
0
        }
4769
0
        num_partial_items++;
4770
0
    }
4771
0
    return len;
4772
0
}
4773
4774
/*
4775
 * 9.11.3.76    UE request type
4776
 */
4777
/* See subclause 9.9.3.65 in 3GPP TS 24.301 */
4778
4779
/*
4780
 * 9.11.3.77    Paging restriction
4781
 */
4782
static const value_string nas_5gs_mm_paging_restriction_type_vals[] = {
4783
    { 0x00, "reserved" },
4784
    { 0x01, "All paging is restricted" },
4785
    { 0x02, "All paging is restricted except for voice service" },
4786
    { 0x03, "All paging is restricted except for specified PDU session(s)" },
4787
    { 0x04, "All paging is restricted except for voice service and specified PDU session(s)" },
4788
    {    0, NULL }
4789
};
4790
4791
4792
static uint16_t
4793
de_nas_5gs_mm_paging_restriction(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4794
    uint32_t offset, unsigned len,
4795
    char* add_string _U_, int string_len _U_)
4796
0
{
4797
0
    uint64_t type;
4798
4799
0
    static int * const flags[] = {
4800
0
        &hf_nas_5gs_spare_b7,
4801
0
        &hf_nas_5gs_spare_b6,
4802
0
        &hf_nas_5gs_spare_b5,
4803
0
        &hf_nas_5gs_spare_b4,
4804
0
        &hf_nas_5gs_mm_paging_restriction_type,
4805
0
        NULL
4806
0
    };
4807
4808
0
    static int * const psi_0_7_flags[] = {
4809
0
        &hf_nas_5gs_mm_paging_restriction_psi_7,
4810
0
        &hf_nas_5gs_mm_paging_restriction_psi_6,
4811
0
        &hf_nas_5gs_mm_paging_restriction_psi_5,
4812
0
        &hf_nas_5gs_mm_paging_restriction_psi_4,
4813
0
        &hf_nas_5gs_mm_paging_restriction_psi_3,
4814
0
        &hf_nas_5gs_mm_paging_restriction_psi_2,
4815
0
        &hf_nas_5gs_mm_paging_restriction_psi_1,
4816
0
        &hf_nas_5gs_mm_paging_restriction_psi_0,
4817
0
        NULL
4818
0
    };
4819
4820
0
    static int * const psi_8_15_flags[] = {
4821
0
        &hf_nas_5gs_mm_paging_restriction_psi_15,
4822
0
        &hf_nas_5gs_mm_paging_restriction_psi_14,
4823
0
        &hf_nas_5gs_mm_paging_restriction_psi_13,
4824
0
        &hf_nas_5gs_mm_paging_restriction_psi_12,
4825
0
        &hf_nas_5gs_mm_paging_restriction_psi_11,
4826
0
        &hf_nas_5gs_mm_paging_restriction_psi_10,
4827
0
        &hf_nas_5gs_mm_paging_restriction_psi_9,
4828
0
        &hf_nas_5gs_mm_paging_restriction_psi_8,
4829
0
        NULL
4830
0
    };
4831
4832
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN, &type);
4833
0
    if (type == 3 || type == 4) {
4834
0
        proto_tree_add_bitmask_list(tree, tvb, offset+1, 1, psi_0_7_flags, ENC_BIG_ENDIAN);
4835
0
        proto_tree_add_bitmask_list(tree, tvb, offset+2, 1, psi_8_15_flags, ENC_BIG_ENDIAN);
4836
0
    }
4837
4838
0
    return len;
4839
0
}
4840
4841
/*
4842
 * 9.11.3.79    NID
4843
 */
4844
static const dgt_set_t dgt0_f_bcd = {
4845
    {
4846
        /*  0   1   2   3   4   5   6   7   8   9   a   b   c   d   e   f */
4847
           '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'
4848
    }
4849
};
4850
4851
static uint16_t
4852
de_nas_5gs_mm_nid(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
4853
    uint32_t offset, unsigned len,
4854
    char* add_string _U_, int string_len _U_)
4855
0
{
4856
0
    char *nid;
4857
4858
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_nid_assign_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
4859
0
    nid = tvb_get_bcd_string(pinfo->pool, tvb, offset, 6, &dgt0_f_bcd, true, true, false);
4860
0
    proto_tree_add_string(tree, hf_nas_5gs_mm_nid_value, tvb, offset, 6, nid);
4861
4862
0
    return len;
4863
0
}
4864
4865
/*
4866
 * 9.11.3.80    PEIPS assistance information
4867
 */
4868
static const value_string nas_5gs_mm_peips_assist_info_ue_paging_probability_info_vals[] = {
4869
  {  0, "p00" },
4870
  {  1, "p05" },
4871
  {  2, "p10" },
4872
  {  3, "p15" },
4873
  {  4, "p20" },
4874
  {  5, "p25" },
4875
  {  6, "p30" },
4876
  {  7, "p35" },
4877
  {  8, "p40" },
4878
  {  9, "p45" },
4879
  { 10, "p50" },
4880
  { 11, "p55" },
4881
  { 12, "p60" },
4882
  { 13, "p65" },
4883
  { 14, "p70" },
4884
  { 15, "p75" },
4885
  { 16, "p80" },
4886
  { 17, "p85" },
4887
  { 18, "p90" },
4888
  { 19, "p95" },
4889
  { 20, "p100" },
4890
  {  0, NULL }
4891
};
4892
static value_string_ext nas_5gs_mm_peips_assist_info_ue_paging_probability_info_vals_ext =
4893
    VALUE_STRING_EXT_INIT(nas_5gs_mm_peips_assist_info_ue_paging_probability_info_vals);
4894
4895
static uint16_t
4896
de_nas_5gs_mm_peips_assist_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4897
    uint32_t offset, unsigned len,
4898
    char* add_string _U_, int string_len _U_)
4899
0
{
4900
0
    uint32_t curr_offset, i;
4901
4902
0
    curr_offset = offset;
4903
0
    i = 1;
4904
0
    while ((curr_offset - offset) < len) {
4905
0
        proto_tree *subtree;
4906
0
        uint32_t type;
4907
4908
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 1, ett_nas_5gs_mm_peips_assist_info, NULL, "PEIPS assistance information type %u", i);
4909
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_peips_assist_info_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &type);
4910
0
        if (type == 0)
4911
0
            proto_tree_add_item(subtree, hf_nas_5gs_mm_peips_assist_info_paging_subgroup_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4912
0
        else if (type == 1)
4913
0
            proto_tree_add_item(subtree, hf_nas_5gs_mm_peips_assist_info_ue_paging_probability_info, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4914
0
        curr_offset++;
4915
0
        i++;
4916
0
    }
4917
4918
0
    return len;
4919
0
}
4920
4921
/*
4922
 * 9.11.3.81    5GS additional request result
4923
 */
4924
static const value_string nas_5gs_mm_add_req_res_prd_vals[] = {
4925
  { 0, "no additional information" },
4926
  { 1, "paging restriction is accepted" },
4927
  { 2, "paging restriction is rejected" },
4928
  { 0, NULL }
4929
};
4930
4931
static uint16_t
4932
de_nas_5gs_mm_5gs_add_req_res(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
4933
    uint32_t offset, unsigned len,
4934
    char* add_string _U_, int string_len _U_)
4935
0
{
4936
0
    static int* const flags[] = {
4937
0
        &hf_nas_5gs_spare_b7,
4938
0
        &hf_nas_5gs_spare_b6,
4939
0
        &hf_nas_5gs_spare_b5,
4940
0
        &hf_nas_5gs_spare_b4,
4941
0
        &hf_nas_5gs_spare_b3,
4942
0
        &hf_nas_5gs_spare_b2,
4943
0
        &hf_nas_5gs_mm_add_req_res_prd,
4944
0
        NULL
4945
0
    };
4946
4947
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
4948
4949
0
    return len;
4950
0
}
4951
4952
/*
4953
 * 9.11.3.82    NSSRG information
4954
 */
4955
static uint16_t
4956
de_nas_5gs_mm_nssrg_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
4957
    uint32_t offset, unsigned len,
4958
    char* add_string _U_, int string_len _U_)
4959
0
{
4960
0
    uint32_t curr_offset = offset, i = 1;
4961
4962
0
    while ((curr_offset - offset) < len) {
4963
0
        proto_item *item;
4964
0
        proto_tree *subtree;
4965
0
        uint32_t start_offset, nssrg_len, s_nssai_len;
4966
4967
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_nssrg_info, &item, "NSSRG values for S-NSSAI %u", i);
4968
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_nssrg_info_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &nssrg_len);
4969
0
        curr_offset++;
4970
0
        proto_item_set_len(item, nssrg_len + 1);
4971
0
        start_offset = curr_offset;
4972
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_nssrg_info_s_nssai_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &s_nssai_len);
4973
0
        curr_offset++;
4974
0
        curr_offset += de_nas_5gs_cmn_s_nssai(tvb, subtree, pinfo, curr_offset, s_nssai_len, NULL, 0);
4975
0
        while ((curr_offset - start_offset) < nssrg_len) {
4976
0
            proto_tree_add_item(subtree, hf_nas_5gs_mm_nssrg_info_nssrg, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
4977
0
            curr_offset++;
4978
0
        }
4979
0
        i++;
4980
0
    }
4981
4982
0
    return len;
4983
0
}
4984
4985
/*
4986
 * 9.11.3.83    List of PLMNs to be used in disaster condition
4987
 */
4988
static uint16_t
4989
de_nas_5gs_mm_plmns_list_disaster_cond(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
4990
    uint32_t offset, unsigned len,
4991
    char* add_string _U_, int string_len _U_)
4992
0
{
4993
0
    uint32_t curr_offset = offset, i = 1;
4994
4995
0
    while ((curr_offset - offset) < len) {
4996
0
        proto_tree *subtree;
4997
4998
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 3, ett_nas_5gs_mm_plmns_list_disaster_cond, NULL, "PLMN ID %u", i++);
4999
0
        dissect_e212_mcc_mnc(tvb, pinfo, subtree, curr_offset, E212_5GSTAI, true);
5000
0
        curr_offset += 3;
5001
0
    }
5002
5003
0
    return len;
5004
0
}
5005
5006
/*
5007
 * 9.11.3.84    Registration wait range
5008
 */
5009
static uint16_t
5010
de_nas_5gs_mm_reg_wait_range(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5011
    uint32_t offset, unsigned len,
5012
    char* add_string _U_, int string_len _U_)
5013
0
{
5014
0
    proto_tree *subtree;
5015
5016
0
    subtree = proto_tree_add_subtree(tree, tvb, offset, 1, ett_nas_5gs_mm_reg_wait_range, NULL, "Minimum registration wait time");
5017
0
    de_gc_timer(tvb, subtree, pinfo, offset, 1, NULL, 0);
5018
0
    subtree = proto_tree_add_subtree(tree, tvb, offset+1, 1, ett_nas_5gs_mm_reg_wait_range, NULL, "Maximum registration wait time");
5019
0
    de_gc_timer(tvb, subtree, pinfo, offset+1, 1, NULL, 0);
5020
5021
0
    return len;
5022
0
}
5023
5024
/*
5025
 * 9.11.3.85    PLMN identity
5026
 */
5027
static uint16_t
5028
de_nas_5gs_mm_plmn_id(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5029
    uint32_t offset, unsigned len,
5030
    char* add_string _U_, int string_len _U_)
5031
0
{
5032
0
    dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_5GSTAI, true);
5033
5034
0
    return len;
5035
0
}
5036
5037
/*
5038
 * 9.11.3.86    Extended CAG information list
5039
 */
5040
static uint16_t
5041
de_nas_5gs_mm_ext_cag_info_list(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5042
    uint32_t offset, unsigned len,
5043
    char* add_string _U_ , int string_len _U_)
5044
0
{
5045
0
    return dissect_nas_5gs_mm_cag_information_list(tvb, tree, pinfo, offset, len, true);
5046
0
}
5047
5048
/*
5049
 * 9.11.3.87    NSAG information
5050
 */
5051
static uint16_t
5052
de_nas_5gs_mm_nsag_info(tvbuff_t* tvb _U_, proto_tree* tree _U_, packet_info* pinfo _U_,
5053
    uint32_t offset _U_, unsigned len,
5054
    char* add_string _U_, int string_len _U_)
5055
0
{
5056
0
    uint32_t curr_offset = offset, i = 1;
5057
5058
0
    while ((curr_offset - offset) < len) {
5059
0
        proto_item *item;
5060
0
        proto_tree *subtree;
5061
0
        uint32_t nsag_len, s_nssai_len, s_nssai_start, tai_len, nsag_start, length;
5062
5063
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_nsag_info, &item, "NSSRG values for S-NSSAI %u", i);
5064
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_nsag_info_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &nsag_len);
5065
0
        curr_offset++;
5066
0
        proto_item_set_len(item, nsag_len + 1);
5067
0
        nsag_start = curr_offset;
5068
0
        proto_tree_add_item(subtree, hf_nas_5gs_mm_nsag_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5069
0
        curr_offset++;
5070
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_nsag_info_s_nssai_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &s_nssai_len);
5071
0
        curr_offset++;
5072
0
        s_nssai_start = curr_offset;
5073
0
        while ((curr_offset - s_nssai_start) < s_nssai_len) {
5074
0
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
5075
0
            curr_offset++;
5076
0
            curr_offset += de_nas_5gs_cmn_s_nssai(tvb, subtree, pinfo, curr_offset, length, NULL, 0);
5077
0
        }
5078
0
        proto_tree_add_item(subtree, hf_nas_5gs_mm_nsag_prio, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5079
0
        curr_offset++;
5080
0
        if ((curr_offset - nsag_start) < nsag_len) {
5081
0
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_nsag_tais_list_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &tai_len);
5082
0
            curr_offset++;
5083
0
            if (tai_len) {
5084
0
                curr_offset += de_nas_5gs_mm_5gs_ta_id_list(tvb, subtree, pinfo, curr_offset, tai_len, NULL, 0);
5085
0
            }
5086
0
        }
5087
0
        i++;
5088
0
    }
5089
5090
0
    return len;
5091
0
}
5092
5093
/*
5094
 * 9.11.3.88    ProSe relay transaction identity
5095
 */
5096
static void
5097
nas_5gs_mm_prose_relay_trans_id(char *s, uint32_t val)
5098
0
{
5099
0
    if (val == 0)
5100
0
        snprintf(s, ITEM_LABEL_LENGTH, "No ProSe relay transaction identity assigned (0)");
5101
0
    else if (val == 255)
5102
0
        snprintf(s, ITEM_LABEL_LENGTH, "Reserved (255)");
5103
0
    else
5104
0
        snprintf(s, ITEM_LABEL_LENGTH, "%u", val);
5105
0
}
5106
5107
static uint16_t
5108
de_nas_5gs_mm_prose_relay_trans_id(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5109
    uint32_t offset, unsigned len _U_,
5110
    char* add_string _U_, int string_len _U_)
5111
0
{
5112
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_prose_relay_trans_id, tvb, offset, 1, ENC_BIG_ENDIAN);
5113
5114
0
    return 1;
5115
0
}
5116
5117
/*
5118
 * 9.11.3.89    Relay key request parameters
5119
 */
5120
static true_false_string tfs_nas_5gs_mm_relay_key_req_params_uit = {
5121
    "CP-PRUK ID",
5122
    "SUCI"
5123
};
5124
5125
static uint16_t
5126
de_nas_5gs_mm_relay_key_req_params(tvbuff_t* tvb _U_, proto_tree* tree _U_, packet_info* pinfo _U_,
5127
    uint32_t offset _U_, unsigned len,
5128
    char* add_string _U_, int string_len _U_)
5129
0
{
5130
0
    uint32_t curr_offset = offset;
5131
5132
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_relay_key_req_params_relay_service_code, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
5133
0
    curr_offset += 3;
5134
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_relay_key_req_params_nonce_1, tvb, offset, 16, ENC_NA);
5135
0
    curr_offset += 16;
5136
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, (curr_offset << 3), 7, ENC_BIG_ENDIAN);
5137
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_relay_key_req_params_uit, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5138
0
    curr_offset++;
5139
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_relay_key_req_params_ue_id, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
5140
5141
0
    return len;
5142
0
}
5143
5144
/*
5145
 * 9.11.3.90    Relay key response parameters
5146
 */
5147
static uint16_t
5148
de_nas_5gs_mm_relay_key_resp_params(tvbuff_t* tvb _U_, proto_tree* tree _U_, packet_info* pinfo _U_,
5149
    uint32_t offset _U_, unsigned len,
5150
    char* add_string _U_, int string_len _U_)
5151
0
{
5152
0
    uint32_t curr_offset = offset;
5153
5154
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_relay_key_resp_params_key_knr_prose, tvb, curr_offset, 32, ENC_NA);
5155
0
    curr_offset += 32;
5156
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_relay_key_resp_params_nonce_2, tvb, offset, 16, ENC_NA);
5157
0
    curr_offset += 16;
5158
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_relay_key_resp_params_cp_pruk_id, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
5159
5160
0
    return len;
5161
0
}
5162
5163
/*
5164
 * 9.11.3.91    Priority indicator
5165
 */
5166
static true_false_string tfs_nas_5gs_mm_prio_ind_mcsi = {
5167
    "Access identity 2 valid",
5168
    "Access identity 2 not valid"
5169
};
5170
5171
static true_false_string tfs_nas_5gs_mm_prio_ind_mpsi = {
5172
    "Access identity 1 valid",
5173
    "Access identity 1 not valid"
5174
};
5175
5176
static uint16_t
5177
de_nas_5gs_mm_prio_ind(tvbuff_t* tvb _U_, proto_tree* tree _U_, packet_info* pinfo _U_,
5178
    uint32_t offset _U_, unsigned len _U_,
5179
    char* add_string _U_, int string_len _U_)
5180
0
{
5181
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, (offset << 3) + 4, 2, ENC_BIG_ENDIAN);
5182
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_prio_ind_mcsi, tvb, offset, 1, ENC_BIG_ENDIAN);
5183
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_prio_ind_mpsi, tvb, offset, 1, ENC_BIG_ENDIAN);
5184
5185
0
    return 1;
5186
0
}
5187
5188
/*
5189
 * 9.11.3.92    SNPN list
5190
 */
5191
static uint16_t
5192
de_nas_5gs_mm_snpn_list(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5193
    uint32_t offset, unsigned len,
5194
    char* add_string _U_, int string_len _U_)
5195
0
{
5196
0
    uint32_t curr_offset = offset, i = 1;
5197
5198
0
    while ((curr_offset - offset) < len) {
5199
0
        proto_tree *subtree;
5200
0
        char *nid;
5201
5202
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, 9, ett_nas_5gs_mm_snpn_list, NULL, "SNPN identity %u", i++);
5203
0
        dissect_e212_mcc_mnc(tvb, pinfo, subtree, curr_offset, E212_NONE, true);
5204
0
        curr_offset += 3;
5205
0
        nid = tvb_get_bcd_string(pinfo->pool, tvb, curr_offset, 6, &dgt0_f_bcd, true, true, false);
5206
0
        proto_tree_add_string(subtree, hf_nas_5gs_mm_nid_value, tvb, curr_offset, 6, nid);
5207
0
        curr_offset += 6;
5208
0
    }
5209
5210
0
    return len;
5211
0
}
5212
5213
/*
5214
 * 9.11.3.93    N3IWF identifier
5215
 */
5216
static const value_string nas_5gs_mm_n3iwf_id_type_vals[] = {
5217
    { 1, "IPv4" },
5218
    { 2, "IPv6" },
5219
    { 3, "IPv4v6" },
5220
    { 4, "FQDN" },
5221
    { 0, NULL }
5222
};
5223
5224
static uint16_t
5225
de_nas_5gs_mm_n3iwf_id(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5226
    uint32_t offset, unsigned len,
5227
    char* add_string _U_, int string_len _U_)
5228
0
{
5229
0
    uint32_t type;
5230
5231
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_n3iwf_id_type, tvb, offset, 1, ENC_BIG_ENDIAN, &type);
5232
0
    switch (type) {
5233
0
    case 1:
5234
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_n3iwf_id_ipv4, tvb, offset+1, 4, ENC_BIG_ENDIAN);
5235
0
        break;
5236
0
    case 2:
5237
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_n3iwf_id_ipv6, tvb, offset+1, 16, ENC_NA);
5238
0
        break;
5239
0
    case 3:
5240
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_n3iwf_id_ipv4, tvb, offset+1, 4, ENC_BIG_ENDIAN);
5241
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_n3iwf_id_ipv6, tvb, offset+5, 16, ENC_NA);
5242
0
        break;
5243
0
    case 4:
5244
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_n3iwf_id_fqdn, tvb, offset+1, len-1, ENC_APN_STR);
5245
0
        break;
5246
0
    default:
5247
0
        break;
5248
0
    }
5249
5250
0
    return len;
5251
0
}
5252
5253
/*
5254
 * 9.11.3.94    TNAN information
5255
 */
5256
static uint16_t
5257
de_nas_5gs_mm_tnan_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_ ,
5258
    uint32_t offset, unsigned len,
5259
    char* add_string _U_, int string_len _U_)
5260
0
{
5261
0
    uint32_t curr_offset = offset, ret_len;
5262
0
    static int * const flags[] = {
5263
0
        &hf_nas_5gs_spare_b7,
5264
0
        &hf_nas_5gs_spare_b6,
5265
0
        &hf_nas_5gs_spare_b5,
5266
0
        &hf_nas_5gs_spare_b4,
5267
0
        &hf_nas_5gs_spare_b3,
5268
0
        &hf_nas_5gs_spare_b2,
5269
0
        &hf_nas_5gs_mm_tnan_info_ssid_ind,
5270
0
        &hf_nas_5gs_mm_tnan_info_tngf_id_ind,
5271
0
        NULL
5272
0
    };
5273
0
    uint64_t ret_flags;
5274
5275
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, curr_offset, 1, flags, ENC_BIG_ENDIAN, &ret_flags);
5276
0
    curr_offset++;
5277
0
    if (ret_flags & 0x01) {
5278
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_tnan_info_tngf_id_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5279
0
        curr_offset++;
5280
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_tnan_info_tngf_id, tvb, curr_offset, ret_len, ENC_NA);
5281
0
        curr_offset += ret_len;
5282
0
    }
5283
0
    if (ret_flags & 0x02) {
5284
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_tnan_info_ssid_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5285
0
        curr_offset++;
5286
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_tnan_info_ssid, tvb, curr_offset, ret_len, ENC_NA);
5287
        /*curr_offset += ret_len;*/
5288
0
    }
5289
5290
0
    return len;
5291
0
}
5292
5293
/*
5294
 * 9.11.3.95    RAN timing synchronization
5295
 */
5296
static uint16_t
5297
de_nas_5gs_mm_ran_timing_sync(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5298
    uint32_t offset, unsigned len,
5299
    char* add_string _U_, int string_len _U_)
5300
0
{
5301
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN);
5302
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_ran_timing_sync_recreq, tvb, offset, 1, ENC_BIG_ENDIAN);
5303
5304
0
    return len;
5305
0
}
5306
5307
/*
5308
 * 9.11.3.96    Extended LADN information
5309
 */
5310
static uint16_t
5311
de_nas_5gs_mm_ext_ladn_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5312
    uint32_t offset, unsigned len,
5313
    char* add_string _U_, int string_len _U_)
5314
0
{
5315
0
    uint32_t curr_offset = offset;
5316
0
    unsigned i = 1;
5317
5318
0
    while ((curr_offset - offset) < len) {
5319
0
        proto_tree *subtree;
5320
0
        proto_item *item;
5321
0
        uint32_t start_offset = curr_offset, ret_len;
5322
5323
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_ext_ladn_info, &item, "LADN %u", i++);
5324
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5325
0
        curr_offset++;
5326
0
        curr_offset += de_nas_5gs_cmn_dnn(tvb, subtree, pinfo, curr_offset, len, NULL, 0);
5327
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5328
0
        curr_offset++;
5329
0
        curr_offset += de_nas_5gs_cmn_s_nssai(tvb, subtree, pinfo, curr_offset, ret_len, NULL, 0);
5330
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5331
0
        curr_offset++;
5332
0
        curr_offset += de_nas_5gs_mm_5gs_ta_id_list(tvb, subtree, pinfo, curr_offset, ret_len, NULL, 0);
5333
0
        proto_item_set_len(item, curr_offset - start_offset);
5334
0
    }
5335
5336
0
    return len;
5337
0
}
5338
5339
/*
5340
 * 9.11.3.97    Alternative NSSAI
5341
 */
5342
static uint16_t
5343
de_nas_5gs_mm_alt_nssai(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5344
    uint32_t offset, unsigned len,
5345
    char* add_string _U_, int string_len _U_)
5346
0
{
5347
0
    uint32_t curr_offset = offset;
5348
0
    unsigned i = 1;
5349
5350
0
    while ((curr_offset - offset) < len) {
5351
0
        proto_tree *subtree, *subtree2;
5352
0
        proto_item *item, *item2;
5353
0
        uint32_t start_offset = curr_offset, start_offset2, ret_len;
5354
5355
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_alt_nssai, &item, "Entry %u", i++);
5356
0
        subtree2 = proto_tree_add_subtree(subtree, tvb, curr_offset, -1, ett_nas_5gs_mm_alt_nssai_replaced, &item2, "S-NSSAI to be replaced");
5357
0
        start_offset2 = curr_offset;
5358
0
        proto_tree_add_item_ret_uint(subtree2, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5359
0
        curr_offset++;
5360
0
        curr_offset += de_nas_5gs_cmn_s_nssai(tvb, subtree2, pinfo, curr_offset, ret_len, NULL, 0);
5361
0
        proto_item_set_len(item2, curr_offset - start_offset2);
5362
0
        subtree2 = proto_tree_add_subtree(subtree, tvb, curr_offset, -1, ett_nas_5gs_mm_alt_nssai_alternative, &item2, "Alternative S-NSSAI");
5363
0
        start_offset2 = curr_offset;
5364
0
        proto_tree_add_item_ret_uint(subtree2, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5365
0
        curr_offset++;
5366
0
        curr_offset += de_nas_5gs_cmn_s_nssai(tvb, subtree2, pinfo, curr_offset, ret_len, NULL, 0);
5367
0
        proto_item_set_len(item2, curr_offset - start_offset2);
5368
0
        proto_item_set_len(item, curr_offset - start_offset);
5369
0
    }
5370
5371
0
    return len;
5372
0
}
5373
5374
/*
5375
 * 9.11.3.98    Type 6 IE container
5376
 */
5377
0
#define TYPE6_IE_TLV_E(EOT_iei, EOT_pdu_type, EOT_elem_idx, EOT_elem_name_addition) \
5378
0
{\
5379
0
    if ((signed)curr_len <= 0) return len; \
5380
0
    if ((consumed = elem_tlv_e(tvb, tree, pinfo, (uint8_t) EOT_iei, EOT_pdu_type, EOT_elem_idx, curr_offset, curr_len, EOT_elem_name_addition)) > 0) \
5381
0
    { \
5382
0
        curr_offset += consumed; \
5383
0
        curr_len -= consumed; \
5384
0
    } \
5385
0
}
5386
5387
static uint16_t
5388
de_nas_5gs_mm_type_6_ie_cont(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5389
    uint32_t offset, unsigned len,
5390
    char* add_string _U_, int string_len _U_)
5391
0
{
5392
0
    uint32_t curr_offset;
5393
0
    uint32_t consumed;
5394
0
    unsigned curr_len;
5395
5396
0
    curr_offset = offset;
5397
0
    curr_len = len;
5398
5399
    /* Information elements and IEIs for the Registration accept type 6 IE container */
5400
    /* 01 Extended LADN information    Extended LADN information    9.11.3.96    O    TLV-E    15-1787 */
5401
0
    TYPE6_IE_TLV_E(0x01, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXT_LADN_INFO, NULL);
5402
    /* 02 S-NSSAI location validity information    S-NSSAI location validity information    9.11.3.100    O    TLV-E    17-38611 */
5403
0
    TYPE6_IE_TLV_E(0x02, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_S_NSSAI_LOC_VALID_INFO, NULL);
5404
    /* 03 Partially allowed NSSAI    Partial NSSAI    9.11.3.103    O    TLV-E    3-808 */
5405
0
    TYPE6_IE_TLV_E(0x03, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PARTIAL_NSSAI, " - Partially allowed NSSAI");
5406
    /* 04 Partially allowed NSSAI    Partial NSSAI    9.11.3.103    O    TLV-E    3-808 */
5407
0
    TYPE6_IE_TLV_E(0x04, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PARTIAL_NSSAI, " - Partially rejected NSSAI");
5408
5409
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
5410
5411
0
    return len;
5412
0
}
5413
5414
/*
5415
 * 9.11.9.99    Non-3GPP access path switching indication
5416
 */
5417
static uint16_t
5418
de_nas_5gs_mm_n3gpp_acc_path_switch_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5419
    uint32_t offset, unsigned len,
5420
    char* add_string _U_, int string_len _U_)
5421
0
{
5422
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN);
5423
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_n3gpp_acc_path_switch_ind_naps, tvb, offset, 1, ENC_BIG_ENDIAN);
5424
5425
0
    return len;
5426
0
}
5427
5428
/*
5429
 * 9.11.3.100   S-NSSAI location validity information
5430
 */
5431
static uint16_t
5432
de_nas_5gs_mm_s_nssai_loc_valid_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5433
    uint32_t offset, unsigned len,
5434
    char* add_string _U_, int string_len _U_)
5435
0
{
5436
0
    uint32_t curr_offset = offset;
5437
0
    unsigned i = 1;
5438
5439
0
    while ((curr_offset - offset) < len) {
5440
0
        proto_tree *subtree;
5441
0
        proto_item *item;
5442
0
        uint32_t start_offset = curr_offset, length, j;
5443
5444
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_s_nssai_loc_valid_info, &item, "Per-S-NSSAI location validity information for S-NSSAI %u", i++);
5445
0
        proto_tree_add_item(subtree, hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5446
0
        curr_offset += 2;
5447
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
5448
0
        curr_offset++;
5449
0
        curr_offset += de_nas_5gs_cmn_s_nssai(tvb, subtree, pinfo, curr_offset, length, NULL, 0);
5450
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_nb_nr_cgi, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &length);
5451
0
        curr_offset += 2;
5452
0
        for (j = 0; j < length; j++) {
5453
0
            proto_tree_add_item(subtree, hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_nr_cell_id, tvb, curr_offset, 5, ENC_BIG_ENDIAN);
5454
0
            curr_offset += 5;
5455
0
            curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, subtree, curr_offset, E212_NONE, true);
5456
0
        }
5457
0
        proto_item_set_len(item, curr_offset - start_offset);
5458
0
    }
5459
5460
0
    return len;
5461
0
}
5462
5463
/*
5464
 * 9.11.3.101   S-NSSAI time validity information
5465
 */
5466
static const value_string nas_5gs_mm_s_nssai_time_valid_info_time_window_recurrence_pattern_vals[] = {
5467
    { 0, "Everyday" },
5468
    { 1, "Every weekday" },
5469
    { 2, "Every week" },
5470
    { 3, "Every 2 weeks" },
5471
    { 4, "Every month (absolute)" },
5472
    { 5, "Every month (relative)" },
5473
    { 6, "Every quarter (absolute)" },
5474
    { 7, "Every quarter (relative)" },
5475
    { 8, "Every 6 months (absolute)" },
5476
    { 9, "Every 6 months (relative)" },
5477
    { 0, NULL }
5478
};
5479
5480
static uint16_t
5481
de_nas_5gs_mm_s_nssai_time_valid_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5482
    uint32_t offset, unsigned len,
5483
    char* add_string _U_, int string_len _U_)
5484
0
{
5485
0
    uint32_t curr_offset = offset;
5486
0
    unsigned i = 1;
5487
5488
0
    while ((curr_offset - offset) < len) {
5489
0
        proto_tree *subtree;
5490
0
        proto_item *item;
5491
0
        uint32_t start_offset = curr_offset, length, start_offset2, time_window_len;
5492
5493
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_s_nssai_time_valid_info, &item, "Per-S-NSSAI time validity information for S-NSSAI %u", i++);
5494
0
        proto_tree_add_item(subtree, hf_nas_5gs_mm_s_nssai_time_valid_info_per_s_nssai_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
5495
0
        curr_offset++;
5496
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
5497
0
        curr_offset++;
5498
0
        curr_offset += de_nas_5gs_cmn_s_nssai(tvb, subtree, pinfo, curr_offset, length, NULL, 0);
5499
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_s_nssai_time_valid_info_per_s_nssai_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
5500
0
        curr_offset++;
5501
0
        start_offset2 = curr_offset;
5502
0
        while ((curr_offset - start_offset2) < length) {
5503
0
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &time_window_len);
5504
0
            curr_offset++;
5505
0
            proto_tree_add_item(subtree, hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_start_time, tvb, curr_offset, 8, ENC_BIG_ENDIAN);
5506
0
            curr_offset += 8;
5507
0
            proto_tree_add_item(subtree, hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_stop_time, tvb, curr_offset, 8, ENC_BIG_ENDIAN);
5508
0
            curr_offset += 8;
5509
0
            if (time_window_len >= 9) {
5510
0
                proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 4, ENC_BIG_ENDIAN);
5511
0
                proto_tree_add_item(tree, hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_recurrence_pattern, tvb, offset, 1, ENC_BIG_ENDIAN);
5512
0
                curr_offset++;
5513
0
                if (time_window_len >= 10) {
5514
0
                    proto_tree_add_item(subtree, hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_recurrence_end_time, tvb, curr_offset, 8, ENC_BIG_ENDIAN);
5515
0
                    curr_offset += 8;
5516
0
                }
5517
0
            }
5518
0
        }
5519
0
        proto_item_set_len(item, curr_offset - start_offset);
5520
0
    }
5521
5522
0
    return len;
5523
0
}
5524
5525
/*
5526
 * 9.11.3.102   Non-3GPP path switching information
5527
 */
5528
static uint16_t
5529
de_nas_5gs_mm_n3gpp_path_switch_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5530
    uint32_t offset, unsigned len,
5531
    char* add_string _U_, int string_len _U_)
5532
0
{
5533
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN);
5534
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_n3gpp_path_switch_info_nsonr, tvb, offset, 1, ENC_BIG_ENDIAN);
5535
5536
0
    return len;
5537
0
}
5538
5539
/*
5540
 * 9.11.3.103   Partial NSSAI
5541
 */
5542
static uint16_t
5543
de_nas_5gs_mm_partial_nssai(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5544
    uint32_t offset, unsigned len,
5545
    char* add_string _U_, int string_len _U_)
5546
0
{
5547
0
    uint32_t curr_offset = offset, ret_len;
5548
5549
0
    while ((curr_offset - offset) < len) {
5550
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5551
0
        curr_offset++;
5552
0
        if (ret_len > 0)
5553
0
            curr_offset += de_nas_5gs_cmn_s_nssai(tvb, tree, pinfo, curr_offset, ret_len, NULL, 0);
5554
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5555
0
        curr_offset++;
5556
0
        if (ret_len > 0)
5557
0
            curr_offset += de_nas_5gs_mm_5gs_ta_id_list(tvb, tree, pinfo, curr_offset, ret_len, NULL, 0);
5558
0
    }
5559
5560
0
    return len;
5561
0
}
5562
5563
/*
5564
 * 9.11.3.104   AUN3 indication
5565
 */
5566
static uint16_t
5567
de_nas_5gs_mm_au3n_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5568
    uint32_t offset, unsigned len,
5569
    char* add_string _U_, int string_len _U_)
5570
0
{
5571
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN);
5572
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_au3n_ind_aun3reg, tvb, offset, 1, ENC_BIG_ENDIAN);
5573
5574
0
    return len;
5575
0
}
5576
5577
/*
5578
 * 9.11.3.105   Feature authorization indication
5579
 */
5580
static const true_false_string tfs_nas_5gs_mm_feat_auth_ind_hpase = {
5581
    "High priority access UEs are not exempt from service area restrictions",
5582
    "High priority access UEs are exempt from service area restrictions or the network does not support operator policy for high priority access exemptions for service area restrictions"
5583
};
5584
5585
static const value_string nas_5gs_mm_feat_auth_ind_mbsrai_vals[] = {
5586
    { 0, "no information" },
5587
    { 1, "not authorized to operate as MBSR but allowed to operate as a UE" },
5588
    { 2, "authorized to operate as MBSR" },
5589
    { 0, NULL }
5590
};
5591
5592
static uint16_t
5593
de_nas_5gs_mm_feat_auth_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5594
    uint32_t offset, unsigned len,
5595
    char* add_string _U_, int string_len _U_)
5596
0
{
5597
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 5, ENC_BIG_ENDIAN);
5598
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_feat_auth_ind_hpase, tvb, offset, 1, ENC_BIG_ENDIAN);
5599
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_feat_auth_ind_mbsrai, tvb, offset, 1, ENC_BIG_ENDIAN);
5600
5601
0
    return len;
5602
0
}
5603
5604
/*
5605
 * 9.11.3.106   Payload container information
5606
 */
5607
static const true_false_string tfs_nas_5gs_mm_payload_cont_info_pru = {
5608
    "Payload container related to PRU",
5609
    "Payload container not related to PRU"
5610
};
5611
5612
static uint16_t
5613
de_nas_5gs_mm_payload_cont_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5614
    uint32_t offset, unsigned len,
5615
    char* add_string _U_, int string_len _U_)
5616
0
{
5617
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN);
5618
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_payload_cont_info_pru, tvb, offset, 1, ENC_BIG_ENDIAN);
5619
5620
0
    return len;
5621
0
}
5622
5623
/*
5624
 * 9.11.3.107   AUN3 device security key
5625
 */
5626
static const value_string nas_5gs_mm_aun3_device_sec_key_askt_vals[] = {
5627
    { 0, "Master session key is included" },
5628
    { 1, "K_WAGF key is included" },
5629
    { 0, NULL }
5630
};
5631
5632
static uint16_t
5633
de_nas_5gs_mm_aun3_device_sec_key(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5634
    uint32_t offset, unsigned len,
5635
    char* add_string _U_, int string_len _U_)
5636
0
{
5637
0
    uint32_t ret_len;
5638
5639
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 6, ENC_BIG_ENDIAN);
5640
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_aun3_device_sec_key_askt, tvb, offset, 1, ENC_BIG_ENDIAN);
5641
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_aun3_device_sec_key_key_len, tvb, offset + 1, 1, ENC_BIG_ENDIAN, &ret_len);
5642
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_aun3_device_sec_key_key, tvb, offset + 2, ret_len, ENC_NA);
5643
5644
0
    return len;
5645
0
}
5646
5647
/*
5648
 * 9.11.3.108   On-demand NSSAI
5649
 */
5650
static uint16_t
5651
de_nas_5gs_mm_on_demand_nssai(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
5652
    uint32_t offset, unsigned len,
5653
    char* add_string _U_, int string_len _U_)
5654
0
{
5655
0
    uint32_t curr_offset = offset;
5656
0
    unsigned i = 1;
5657
5658
0
    while ((curr_offset - offset) < len) {
5659
0
        proto_tree *subtree;
5660
0
        proto_item *item;
5661
0
        uint32_t start_offset = curr_offset, length, ret_len;
5662
5663
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_mm_on_demand_nssai, &item, "Information of on-demand S-NSSAI %u", i++);
5664
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_on_demand_nssai_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
5665
0
        curr_offset++;
5666
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_mm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ret_len);
5667
0
        curr_offset++;
5668
0
        curr_offset += de_nas_5gs_cmn_s_nssai(tvb, subtree, pinfo, curr_offset, ret_len, NULL, 0);
5669
0
        if ((curr_offset - start_offset) < (length + 1)) {
5670
0
            proto_tree_add_item(subtree, hf_nas_5gs_mm_on_demand_nssai_slice_dereg_inactiv_timer, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
5671
0
            curr_offset += 2;
5672
0
        }
5673
0
        proto_item_set_len(item, curr_offset - start_offset);
5674
0
    }
5675
5676
0
    return len;
5677
0
}
5678
5679
/*
5680
 * 9.11.3.109   Extended 5GMM cause
5681
 */
5682
static const true_false_string tfs_nas_5gs_mm_ext_5gmm_cause_sat_nr = {
5683
    "Satellite NG-RAN allowed in PLMN",
5684
    "Satellite NG-RAN not allowed in PLMN"
5685
};
5686
5687
static uint16_t
5688
de_nas_5gs_mm_ext_5gmm_cause(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5689
    uint32_t offset, unsigned len,
5690
    char* add_string _U_, int string_len _U_)
5691
0
{
5692
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, offset << 3, 7, ENC_BIG_ENDIAN);
5693
0
    proto_tree_add_item(tree, hf_nas_5gs_mm_ext_5gmm_cause_sat_nr, tvb, offset, 1, ENC_BIG_ENDIAN);
5694
5695
0
    return len;
5696
0
}
5697
5698
/*
5699
 * 9.11.3.110 Access technology utilization control
5700
 */
5701
/* See subclause 9.9.3.3A in 3GPP TS 24.301 [15]. */
5702
5703
/*
5704
 * 9.11.3.111 LP-WUSPS assistance information
5705
 */
5706
static const value_string nas_5gs_mm_lp_wusps_assist_info_type_vals[] = {
5707
    { 0x0, "LP-WUSPS paging subgroup ID" },
5708
    { 0x1, "UE paging probability information" },
5709
    { 0,   NULL }
5710
};
5711
5712
static uint16_t
5713
de_nas_5gs_mm_lp_wusps_assist_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5714
    uint32_t offset, unsigned len,
5715
    char* add_string _U_, int string_len _U_)
5716
0
{
5717
0
    uint8_t type;
5718
5719
0
    proto_tree_add_item_ret_uint8(tree, hf_nas_5gs_mm_lp_wusps_assist_info_type, tvb, offset, 1, ENC_BIG_ENDIAN, &type);
5720
0
    switch (type) {
5721
0
    case 0:
5722
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_lp_wusps_assist_info_paging_subgroup_id, tvb, offset, 1, ENC_BIG_ENDIAN);
5723
0
        break;
5724
0
    case 1:
5725
0
        proto_tree_add_item(tree, hf_nas_5gs_mm_lp_wusps_assist_info_ue_paging_prob_info, tvb, offset, 1, ENC_BIG_ENDIAN);
5726
0
        break;
5727
0
    case 2:
5728
0
        proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, (offset << 3) + 3, 5, ENC_BIG_ENDIAN);
5729
0
    }
5730
5731
0
    return len;
5732
0
}
5733
5734
/*
5735
 * 9.11.3.112 LP-WUS status
5736
 */
5737
static uint16_t
5738
de_nas_5gs_mm_lp_wus_status(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
5739
    uint32_t offset, unsigned len _U_,
5740
    char* add_string _U_, int string_len _U_)
5741
0
{
5742
0
    static int* const flags[] = {
5743
0
        &hf_nas_5gs_spare_b3,
5744
0
        &hf_nas_5gs_spare_b2,
5745
0
        &hf_nas_5gs_spare_b1,
5746
0
        &hf_nas_5gs_mm_lws,
5747
0
        NULL
5748
0
    };
5749
5750
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
5751
5752
0
    return 1;
5753
0
}
5754
5755
/*
5756
 * 9.11.4    5GS session management (5GSM) information elements
5757
 */
5758
5759
/*
5760
 * 9.11.4.1 5GSM capability
5761
 */
5762
static const value_string nas_5gs_sm_atsss_st_b3_b6_vals[] = {
5763
    { 0x0, "ATSSS not supported" },
5764
    { 0x1, "ATSSS Low-Layer functionality with any steering mode allowed for ATSSS-LL supported" },
5765
    { 0x2, "MPTCP functionality with any steering mode and ATSSS-LL functionality with only active-standby steering mode supported" },
5766
    { 0x3, "MPTCP functionality with any steering mode and ATSSS-LL functionality with any steering mode allowed for ATSSS-LL supported" },
5767
    { 0x4, "MPQUIC functionality with any steering mode and ATSSS-LL functionality with only active-standby steering mode supported" },
5768
    { 0x5, "MPQUIC functionality with any steering mode and ATSSS-LL functionality with any steering mode allowed for ATSSS-LL supported" },
5769
    { 0x6, "MPTCP functionality with any steering mode, MPQUIC functionality with any steering mode and ATSSS-LL functionality with only active-standby steering mode supported" },
5770
    { 0x7, "MPTCP functionality with any steering mode, MPQUIC functionality with any steering mode and ATSSS-LL functionality with any steering mode allowed for ATSSS-LL supported" },
5771
    { 0,   NULL }
5772
};
5773
5774
static const value_string nas_nas_5gs_sm_atsss_ll_b3_b4_vals[] = {
5775
    { 0x0, "ATSSS-LL functionality not supported" },
5776
    { 0x1, "ATSSS-LL functionality with only active-standby steering mode supported" },
5777
    { 0x2, "ATSSS-LL functionality with any steering mode allowed for ATSSS-LL supported" },
5778
    { 0,   NULL }
5779
};
5780
5781
static uint16_t
5782
de_nas_5gs_sm_5gsm_cap(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
5783
    uint32_t offset, unsigned len,
5784
    char *add_string _U_, int string_len _U_)
5785
0
{
5786
0
    uint32_t curr_offset = offset;
5787
5788
0
    static int * const flags1[] = {
5789
0
        &hf_nas_5gs_sm_tpmic_b7,
5790
0
        &hf_nas_5gs_sm_atsss_st_b3_b6,
5791
0
        &hf_nas_5gs_sm_ept_s1_b2,
5792
0
        &hf_nas_5gs_sm_mh6_pdu_b1,
5793
0
        &hf_nas_5gs_sm_rqos_b0,
5794
0
        NULL
5795
0
    };
5796
5797
0
    static int * const flags2[] = {
5798
0
        &hf_nas_5gs_sm_mpquic_ip_b7,
5799
0
        &hf_nas_5gs_sm_mpquic_udp_b6,
5800
0
        &hf_nas_5gs_sm_mptcp_b5,
5801
0
        &hf_nas_5gs_sm_atsss_ll_b3_b4,
5802
0
        &hf_nas_5gs_rtpmmii_b2,
5803
0
        &hf_nas_5gs_sm_sdnaepc_b1,
5804
0
        &hf_nas_5gs_sm_apmqf_b0,
5805
0
        NULL
5806
0
    };
5807
5808
0
    static int * const flags3[] = {
5809
0
        &hf_nas_5gs_spare_b7,
5810
0
        &hf_nas_5gs_spare_b6,
5811
0
        &hf_nas_5gs_spare_b5,
5812
0
        &hf_nas_5gs_spare_b4,
5813
0
        &hf_nas_5gs_spare_b3,
5814
0
        &hf_nas_5gs_spare_b2,
5815
0
        &hf_nas_5gs_sm_e8pcpdei_b1,
5816
0
        &hf_nas_5gs_sm_mpquic_e_b0,
5817
0
        NULL
5818
0
    };
5819
5820
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags1, ENC_BIG_ENDIAN);
5821
0
    curr_offset++;
5822
5823
0
    if ((curr_offset - offset) >= len)
5824
0
        return (len);
5825
5826
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags2, ENC_BIG_ENDIAN);
5827
0
    curr_offset++;
5828
5829
0
    if ((curr_offset - offset) >= len)
5830
0
        return (len);
5831
5832
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags3, ENC_BIG_ENDIAN);
5833
0
    curr_offset++;
5834
5835
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
5836
5837
0
    return (curr_offset - offset);
5838
0
}
5839
5840
/*
5841
 *     9.11.4.2    5GSM cause
5842
 */
5843
5844
const value_string nas_5gs_sm_cause_vals[] = {
5845
    { 0x08, "Operator determined barring" },
5846
    { 0x1a, "Insufficient resources" },
5847
    { 0x1b, "Missing or unknown DNN" },
5848
    { 0x1c, "Unknown PDU session type" },
5849
    { 0x1d, "User authentication or authorization failed" },
5850
    { 0x1f, "Request rejected, unspecified" },
5851
    { 0x20, "Service option not supported" },
5852
    { 0x21, "Requested service option not subscribed" },
5853
    { 0x22, "Service option temporarily out of order" }, /* no more defined, kept for backward compatibility */
5854
    { 0x23, "PTI already in use" },
5855
    { 0x24, "Regular deactivation" },
5856
    { 0x25, "5GS QoS not accepted" },
5857
    { 0x26, "Network failure" },
5858
    { 0x27, "Reactivation requested" },
5859
    { 0x29, "Semantic error in the TFT operation" },
5860
    { 0x2a, "Syntactical error in the TFT operation" },
5861
    { 0x2b, "Invalid PDU session identity" },
5862
    { 0x2c, "Semantic errors in packet filter(s)" },
5863
    { 0x2d, "Syntactical error in packet filter(s)" },
5864
    { 0x2e, "Out of LADN service area" },
5865
    { 0x2f, "PTI mismatch" },
5866
    { 0x32, "PDU session type IPv4 only allowed" },
5867
    { 0x33, "PDU session type IPv6 only allowed" },
5868
    { 0x36, "PDU session does not exist" },
5869
    { 0x39, "PDU session type IPv4v6 only allowed" },
5870
    { 0x3a, "PDU session type Unstructured only allowed" },
5871
    { 0x3b, "Unsupported 5QI value" },
5872
    { 0x3d, "PDU session type Ethernet only allowed" },
5873
    { 0x43, "Insufficient resources for specific slice and DNN" },
5874
    { 0x44, "Not supported SSC mode" },
5875
    { 0x45, "Insufficient resources for specific slice" },
5876
    { 0x46, "Missing or unknown DNN in a slice" },
5877
    { 0x51, "Invalid PTI value" },
5878
    { 0x52, "Maximum data rate per UE for user-plane integrity protection is too low" },
5879
    { 0x53, "Semantic error in the QoS operation" },
5880
    { 0x54, "Syntactical error in the QoS operation" },
5881
    { 0x55, "Invalid mapped EPS bearer identity" },
5882
    { 0x56, "UAS services not allowed" },
5883
    { 0x57, "QoS differentiation for non-3GPP device identifier(s) not available" },
5884
    { 0x5f, "Semantically incorrect message" },
5885
    { 0x60, "Invalid mandatory information" },
5886
    { 0x61, "Message type non-existent or not implemented" },
5887
    { 0x62, "Message type not compatible with the protocol state" },
5888
    { 0x63, "Information element non-existent or not implemented" },
5889
    { 0x64, "Conditional IE error" },
5890
    { 0x65, "Message not compatible with the protocol state" },
5891
    { 0x6f, "Protocol error, unspecified" },
5892
    { 0,    NULL }
5893
};
5894
5895
static uint16_t
5896
de_nas_5gs_sm_5gsm_cause(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
5897
    uint32_t offset, unsigned len _U_,
5898
    char *add_string _U_, int string_len _U_)
5899
0
{
5900
0
    uint32_t cause;
5901
5902
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sm_5gsm_cause, tvb, offset, 1, ENC_BIG_ENDIAN, &cause);
5903
5904
0
    col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)",
5905
0
        val_to_str_const(cause, nas_5gs_sm_cause_vals, "Unknown"));
5906
5907
5908
0
    return 1;
5909
0
}
5910
5911
/*
5912
 * 9.11.4.3 Always-on PDU session indication
5913
 */
5914
static true_false_string tfs_nas_5gs_sm_apsi = {
5915
    "required",
5916
    "not allowed"
5917
};
5918
5919
static uint16_t
5920
de_nas_5gs_sm_always_on_pdu_ses_ind(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
5921
    uint32_t offset, unsigned len,
5922
    char *add_string _U_, int string_len _U_)
5923
0
{
5924
0
    static int * const flags[] = {
5925
0
        &hf_nas_5gs_spare_b3,
5926
0
        &hf_nas_5gs_spare_b2,
5927
0
        &hf_nas_5gs_spare_b1,
5928
0
        &hf_nas_5gs_sm_apsi,
5929
0
        NULL
5930
0
    };
5931
5932
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
5933
5934
0
    return len;
5935
0
}
5936
5937
/*
5938
 * 9.11.4.4 Always-on PDU session requested
5939
 */
5940
static uint16_t
5941
de_nas_5gs_sm_always_on_pdu_ses_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
5942
    uint32_t offset, unsigned len,
5943
    char *add_string _U_, int string_len _U_)
5944
0
{
5945
0
    static int * const flags[] = {
5946
0
        &hf_nas_5gs_spare_b3,
5947
0
        &hf_nas_5gs_spare_b2,
5948
0
        &hf_nas_5gs_spare_b1,
5949
0
        &hf_nas_5gs_sm_apsr,
5950
0
        NULL
5951
0
    };
5952
5953
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
5954
5955
0
    return len;
5956
0
}
5957
5958
/*
5959
 * 9.11.4.5    Allowed SSC mode
5960
 */
5961
5962
static uint16_t
5963
de_nas_5gs_sm_5gsm_allowed_ssc_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
5964
    uint32_t offset, unsigned len _U_,
5965
    char *add_string _U_, int string_len _U_)
5966
0
{
5967
5968
0
    static int * const flags[] = {
5969
0
        &hf_nas_5gs_spare_b3,
5970
0
        &hf_nas_5gs_sm_all_ssc_mode_b2,
5971
0
        &hf_nas_5gs_sm_all_ssc_mode_b1,
5972
0
        &hf_nas_5gs_sm_all_ssc_mode_b0,
5973
0
        NULL
5974
0
    };
5975
5976
5977
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
5978
5979
0
    return 1;
5980
0
}
5981
5982
/*
5983
 *     9.11.4.6    Extended protocol configuration options
5984
 */
5985
/* See subclause 10.5.6.3A in 3GPP TS 24.008 */
5986
5987
/*
5988
 * 9.11.4.7 Integrity protection maximum data rate
5989
 */
5990
static const value_string nas_5gs_sm_int_prot_max_data_rate_vals[] = {
5991
    { 0x00, "64 kbps" },
5992
    { 0x01, "NULL" },
5993
    { 0xff, "Full data rate" },
5994
    { 0,    NULL }
5995
};
5996
5997
static uint16_t
5998
de_nas_5gs_sm_int_prot_max_data_rte(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
5999
    uint32_t offset, unsigned len _U_,
6000
    char *add_string _U_, int string_len _U_)
6001
0
{
6002
    /* Maximum data rate per UE for user-plane integrity protection for uplink */
6003
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_int_prot_max_data_rate_ul, tvb, offset, 1, ENC_BIG_ENDIAN);
6004
6005
    /* Maximum data rate per UE for user-plane integrity protection for downlink */
6006
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_int_prot_max_data_rate_dl, tvb, offset+1, 1, ENC_BIG_ENDIAN);
6007
6008
0
    return 2;
6009
0
}
6010
6011
/*
6012
 *     9.11.4.8 Mapped EPS bearer contexts
6013
 */
6014
static const value_string nas_5gs_sm_mapd_eps_b_cont_opt_code_vals[] = {
6015
    { 0x0,  "Reserved" },
6016
    { 0x01, "Create new EPS bearer" },
6017
    { 0x02, "Delete existing EPS bearer" },
6018
    { 0x03, "Modify existing EPS bearer" },
6019
    { 0,    NULL }
6020
};
6021
6022
static const value_string nas_5gs_sm_mapd_eps_b_cont_E_vals[] = {
6023
    { 0x0,  "parameters list is not included" },
6024
    { 0x01, "parameters list is included" },
6025
    { 0,    NULL }
6026
};
6027
6028
static const value_string nas_5gs_sm_mapd_eps_b_cont_E_Modify_vals[] = {
6029
    { 0x0,  "extension of previously provided parameters list" },
6030
    { 0x01, "replacement of all previously provided parameters list" },
6031
    { 0,    NULL }
6032
};
6033
6034
static const value_string nas_5gs_sm_mapd_eps_b_cont_param_id_vals[] = {
6035
    { 0x01, "Mapped EPS QoS parameters" },
6036
    { 0x02, "Mapped extended EPS QoS parameters" },
6037
    { 0x03, "Traffic flow template" },
6038
    { 0x04, "APN-AMBR" },
6039
    { 0x05, "Extended APN-AMBR" },
6040
    { 0,    NULL }
6041
};
6042
6043
static uint16_t
6044
de_nas_5gs_sm_mapped_eps_b_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
6045
    uint32_t offset, unsigned len,
6046
    char *add_string _U_, int string_len _U_)
6047
0
{
6048
6049
0
    uint32_t curr_offset;
6050
0
    proto_tree * sub_tree, *sub_tree1;
6051
0
    uint32_t num_cont, length, opt_code, num_eps_parms, param_id;
6052
0
    proto_item * item;
6053
0
    unsigned i;
6054
6055
0
    curr_offset = offset;
6056
0
    num_cont = 1;
6057
6058
0
    static int * const mapd_eps_b_cont_flags[] = {
6059
0
        &hf_nas_5gs_sm_mapd_eps_b_cont_opt_code,
6060
0
        &hf_nas_5gs_spare_b5,
6061
0
        &hf_nas_5gs_sm_mapd_eps_b_cont_E,
6062
0
        &hf_nas_5gs_sm_mapd_eps_b_cont_num_eps_parms,
6063
0
        NULL
6064
0
     };
6065
6066
0
    static int * const mapd_eps_b_cont_flags_modify[] = {
6067
0
        &hf_nas_5gs_sm_mapd_eps_b_cont_opt_code,
6068
0
        &hf_nas_5gs_spare_b5,
6069
0
        &hf_nas_5gs_sm_mapd_eps_b_cont_E_mod,
6070
0
        &hf_nas_5gs_sm_mapd_eps_b_cont_num_eps_parms,
6071
0
        NULL
6072
0
    };
6073
6074
    /* The IE contains a number of Mapped EPS bearer context */
6075
0
    while ((curr_offset - offset) < len) {
6076
        /* Figure 9.11.4.5.2: Mapped EPS bearer context */
6077
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_mapd_eps_b_cont, &item,
6078
0
            "Mapped EPS bearer context %u", num_cont);
6079
6080
        /* EPS bearer identity */
6081
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_sm_mapd_eps_b_cont_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6082
0
        curr_offset++;
6083
6084
        /* Length of Mapped EPS bearer context*/
6085
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_sm_length, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &length);
6086
0
        curr_offset += 2;
6087
6088
        /*  8     7     6     5     4     3     2     1          */
6089
        /* operation code | spare | E | number of EPS params     */
6090
0
        proto_item_set_len(item, length + 3);
6091
6092
0
        num_eps_parms = tvb_get_uint8(tvb, curr_offset);
6093
6094
0
        opt_code = (num_eps_parms & 0xc0) >> 6;
6095
0
        num_eps_parms = num_eps_parms & 0x0f;
6096
6097
        /* operation code = 3 Modify existing EPS bearer */
6098
0
        if (opt_code == 3) {
6099
0
            proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, mapd_eps_b_cont_flags_modify, ENC_BIG_ENDIAN);
6100
6101
0
        } else {
6102
0
            proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, mapd_eps_b_cont_flags, ENC_BIG_ENDIAN);
6103
6104
0
        }
6105
0
        curr_offset++;
6106
0
        i = 1;
6107
6108
        /* EPS parameters list */
6109
0
        while (num_eps_parms > 0) {
6110
6111
0
            sub_tree1 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, -1, ett_nas_5gs_sm_mapd_eps_b_cont_params_list, &item,
6112
0
                "EPS parameter %u", i);
6113
6114
            /* EPS parameter identifier */
6115
0
            proto_tree_add_item_ret_uint(sub_tree1, hf_nas_5gs_sm_mapd_eps_b_cont_param_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &param_id);
6116
0
            proto_item_append_text(item, " - %s", val_to_str_const(param_id, nas_5gs_sm_mapd_eps_b_cont_param_id_vals, "Unknown"));
6117
0
            curr_offset++;
6118
6119
            /*length of the EPS parameter contents field */
6120
0
            proto_tree_add_item_ret_uint(sub_tree1, hf_nas_5gs_sm_length, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &length);
6121
0
            curr_offset++;
6122
6123
0
            proto_item_set_len(item, length + 2);
6124
            /*content of the EPS parameter contents field */
6125
0
            switch (param_id) {
6126
0
            case 1:
6127
                /* 01H (Mapped EPS QoS parameters) */
6128
0
                de_esm_qos(tvb, sub_tree1, pinfo, curr_offset, length, NULL, 0);
6129
0
                break;
6130
0
            case 2:
6131
                /* 02H (Mapped extended EPS QoS parameters) */
6132
0
                de_esm_ext_eps_qos(tvb, sub_tree1, pinfo, curr_offset, length, NULL, 0);
6133
0
                break;
6134
0
            case 3:
6135
                /* 03H (Traffic flow template)*/
6136
0
                de_sm_tflow_temp(tvb, sub_tree1, pinfo, curr_offset, length, NULL, 0);
6137
0
                break;
6138
0
            case 4:
6139
                /* 04H (APN-AMBR) */
6140
0
                de_esm_apn_aggr_max_br(tvb, sub_tree1, pinfo, curr_offset, length, NULL, 0);
6141
0
                break;
6142
0
            case 5:
6143
                /* 05H (extended APN-AMBR). */
6144
0
                de_esm_ext_apn_agr_max_br(tvb, sub_tree1, pinfo, curr_offset, length, NULL, 0);
6145
0
                break;
6146
0
            default:
6147
0
                proto_tree_add_item(sub_tree1, hf_nas_5gs_sm_mapd_eps_b_cont_eps_param_cont, tvb, curr_offset, length, ENC_NA);
6148
0
                break;
6149
0
            }
6150
0
            curr_offset +=length;
6151
0
            i++;
6152
0
            num_eps_parms--;
6153
0
        }
6154
6155
0
        num_cont++;
6156
0
    }
6157
6158
0
    return len;
6159
6160
6161
0
}
6162
6163
/*
6164
 *     9.11.4.9    Maximum number of supported packet filters
6165
 */
6166
static uint16_t
6167
de_nas_5gs_sm_max_num_sup_pkt_flt(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
6168
    uint32_t offset, unsigned len _U_,
6169
    char *add_string _U_, int string_len _U_)
6170
0
{
6171
0
    static int * const flags[] = {
6172
0
        &hf_nas_5gs_sm_max_nb_sup_pkt_flt_nb,
6173
0
        &hf_nas_5gs_sm_max_nb_sup_pkt_flt_spare,
6174
0
        NULL
6175
0
    };
6176
6177
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 2, flags, ENC_BIG_ENDIAN);
6178
6179
0
    return 2;
6180
0
}
6181
6182
/*
6183
 *     9.11.4.10    PDU address
6184
 */
6185
6186
static const value_string nas_5gs_sm_pdu_ses_type_vals[] = {
6187
    { 0x1, "IPv4" },
6188
    { 0x2, "IPv6" },
6189
    { 0x3, "IPv4v6" },
6190
    { 0,    NULL }
6191
};
6192
6193
6194
static uint16_t
6195
de_nas_5gs_sm_pdu_address(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
6196
    uint32_t offset, unsigned len,
6197
    char *add_string _U_, int string_len _U_)
6198
0
{
6199
0
    proto_item *ti;
6200
0
    bool si6lla;
6201
0
    uint32_t pdu_addr;
6202
0
    uint8_t interface_id[8];
6203
6204
    /* 0 Spare    0 Spare    0 Spare    0 Spare    SI6LLA    PDU session type value */
6205
0
    proto_tree_add_item_ret_boolean(tree, hf_nas_5gs_sm_si6lla, tvb, offset, 1, ENC_BIG_ENDIAN, &si6lla);
6206
0
    ti = proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sm_pdu_ses_type, tvb, offset, 1, ENC_BIG_ENDIAN, &pdu_addr);
6207
0
    offset++;
6208
6209
    /* PDU address information */
6210
0
    switch (pdu_addr) {
6211
0
    case 1:
6212
        /* IPv4 */
6213
0
        proto_tree_add_item(tree, hf_nas_5gs_sm_pdu_addr_inf_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
6214
0
        offset += 4;
6215
0
        break;
6216
0
    case 2:
6217
        /* If the PDU session type value indicates IPv6, the PDU address information in octet 4 to octet 11
6218
         * contains an interface identifier for the IPv6 link local address.
6219
         */
6220
0
        tvb_memcpy(tvb, interface_id, offset, 8);
6221
0
        proto_tree_add_bytes_format_value(tree, hf_nas_5gs_sm_pdu_addr_inf_ipv6, tvb, offset, 8, NULL,
6222
0
                                          "::%x:%x:%x:%x", pntohu16(&interface_id[0]), pntohu16(&interface_id[2]),
6223
0
                                          pntohu16(&interface_id[4]), pntohu16(&interface_id[6]));
6224
0
        offset += 8;
6225
0
        break;
6226
0
    case 3:
6227
        /* If the PDU session type value indicates IPv4v6, the PDU address information in octet 4 to octet 11
6228
         * contains an interface identifier for the IPv6 link local address and in octet 12 to octet 15
6229
         * contains an IPv4 address.
6230
         */
6231
0
        tvb_memcpy(tvb, interface_id, offset, 8);
6232
0
        proto_tree_add_bytes_format_value(tree, hf_nas_5gs_sm_pdu_addr_inf_ipv6, tvb, offset, 8, NULL,
6233
0
                                          "::%x:%x:%x:%x", pntohu16(&interface_id[0]), pntohu16(&interface_id[2]),
6234
0
                                          pntohu16(&interface_id[4]), pntohu16(&interface_id[6]));
6235
0
        offset += 8;
6236
0
        proto_tree_add_item(tree, hf_nas_5gs_sm_pdu_addr_inf_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
6237
0
        offset += 4;
6238
0
        break;
6239
0
    default:
6240
0
        expert_add_info(pinfo, ti, &ei_nas_5gs_unknown_value);
6241
0
        return len;
6242
0
    }
6243
6244
    /* SMF's IPv6 link local address */
6245
0
    if (si6lla) {
6246
0
        proto_tree_add_item(tree, hf_nas_5gs_sm_smf_ipv6_lla, tvb, offset, 16, ENC_NA);
6247
0
    }
6248
6249
0
    return len;
6250
0
}
6251
6252
/*
6253
 *     9.11.4.11    PDU session type
6254
 */
6255
static const value_string nas_5gs_pdu_session_type_values[] = {
6256
    { 0x1, "IPv4" },
6257
    { 0x2, "Ipv6" },
6258
    { 0x3, "Ipv4v6" },
6259
    { 0x4, "Unstructured" },
6260
    { 0x5, "Ethernet" },
6261
    { 0, NULL }
6262
 };
6263
6264
6265
static uint16_t
6266
de_nas_5gs_sm_pdu_session_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
6267
    uint32_t offset, unsigned len _U_,
6268
    char *add_string _U_, int string_len _U_)
6269
0
{
6270
6271
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_pdu_session_type, tvb, offset, 1, ENC_BIG_ENDIAN);
6272
6273
0
    return 1;
6274
0
}
6275
6276
/*
6277
 * 9.11.4.12 QoS flow descriptions
6278
 */
6279
6280
static const value_string nas_5gs_sm_qos_des_flow_opt_code_vals[] = {
6281
    { 0x00, "Reserved" },
6282
    { 0x01, "Create new QoS flow description" },
6283
    { 0x02, "Delete existing QoS flow description" },
6284
    { 0x03, "Modify existing QoS flow description" },
6285
    { 0,    NULL }
6286
};
6287
6288
static const value_string nas_5gs_sm_param_id_values[] = {
6289
    { 0x01, "5QI" },
6290
    { 0x02, "GFBR uplink" },
6291
    { 0x03, "GFBR downlink" },
6292
    { 0x04, "MFBR uplink" },
6293
    { 0x05, "MFBR downlink" },
6294
    { 0x06, "Averaging window" },
6295
    { 0x07, "EPS bearer identity" },
6296
    { 0, NULL }
6297
};
6298
6299
uint16_t
6300
de_nas_5gs_sm_qos_flow_des(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
6301
    uint32_t offset, unsigned len,
6302
    char *add_string _U_, int string_len _U_)
6303
120
{
6304
6305
120
    proto_tree *sub_tree, *sub_tree2;
6306
120
    proto_item *item, *sub_item;
6307
120
    int i = 1, j;
6308
120
    uint32_t param_len, param_id;
6309
120
    uint32_t curr_offset, start_offset, start_offset2;
6310
120
    uint8_t num_param;
6311
120
    uint32_t unit, mult, val;
6312
120
    const char *unit_str;
6313
120
    int hf_unit, hf_val;
6314
6315
120
    static int * const param_flags[] = {
6316
120
        &hf_nas_5gs_sm_e,
6317
120
        &hf_nas_5gs_sm_nof_params,
6318
120
        NULL
6319
120
    };
6320
6321
120
    curr_offset = offset;
6322
6323
697
    while ((curr_offset - offset) < len) {
6324
6325
        /* QoS flow description */
6326
665
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, len - (curr_offset - offset), ett_nas_5gs_sm_qos_params, &item, "QoS flow description %u", i);
6327
665
        start_offset = curr_offset;
6328
6329
        /* 0 0 QFI */
6330
665
        proto_tree_add_item(sub_tree, hf_nas_5gs_sm_qfi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6331
665
        curr_offset += 1;
6332
6333
        /* Operation code */
6334
665
        proto_tree_add_item(sub_tree, hf_nas_5gs_sm_qos_des_flow_opt_code, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6335
665
        curr_offset++;
6336
6337
        /* 0 Spare    E    Number of parameters */
6338
665
        j = 1;
6339
665
        num_param = tvb_get_uint8(tvb, curr_offset);
6340
665
        num_param = num_param & 0x3f;
6341
665
        proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, param_flags, ENC_BIG_ENDIAN);
6342
665
        curr_offset++;
6343
6344
6345
2.13k
        while (num_param > 0) {
6346
            /* Parameter list */
6347
1.55k
            sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, len - (curr_offset - offset), ett_nas_5gs_sm_qos_rules, &sub_item, "Parameter %u", j);
6348
1.55k
            start_offset2 = curr_offset;
6349
6350
            /* Parameter identifier */
6351
1.55k
            proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_sm_param_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &param_id);
6352
1.55k
            proto_item_append_text(item, " - %s", val_to_str_const(param_id, nas_5gs_sm_param_id_values, "Unknown"));
6353
1.55k
            curr_offset++;
6354
            /* Length of parameter contents */
6355
1.55k
            proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_sm_param_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &param_len);
6356
1.55k
            curr_offset++;
6357
6358
            /*parameter content*/
6359
1.55k
            switch (param_id) {
6360
                /* 01H (5QI)*/
6361
143
            case 0x01:
6362
143
                proto_tree_add_item(sub_tree2, hf_nas_5gs_sm_5qi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6363
143
                curr_offset += param_len;
6364
143
                break;
6365
                /* 02H (GFBR uplink); 04H (MFBR uplink);*/
6366
128
            case 0x02:
6367
221
            case 0x03:
6368
242
            case 0x04:
6369
279
            case 0x05:
6370
279
                if (param_id == 2) {
6371
128
                    hf_unit = hf_nas_5gs_sm_unit_for_gfbr_ul;
6372
128
                    hf_val = hf_nas_5gs_sm_gfbr_ul;
6373
151
                } else if (param_id == 3) {
6374
93
                    hf_unit = hf_nas_5gs_sm_unit_for_gfbr_dl;
6375
93
                    hf_val = hf_nas_5gs_sm_gfbr_dl;
6376
93
                } else if (param_id == 4) {
6377
21
                    hf_unit = hf_nas_5gs_sm_unit_for_mfbr_ul;
6378
21
                    hf_val = hf_nas_5gs_sm_mfbr_ul;
6379
37
                } else {
6380
37
                    hf_unit = hf_nas_5gs_sm_unit_for_mfbr_dl;
6381
37
                    hf_val = hf_nas_5gs_sm_mfbr_dl;
6382
37
                }
6383
279
                proto_tree_add_item_ret_uint(sub_tree2, hf_unit, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &unit);
6384
279
                curr_offset++;
6385
279
                mult = get_ext_ambr_unit(unit, &unit_str);
6386
279
                val = tvb_get_ntohs(tvb, curr_offset);
6387
279
                proto_tree_add_uint_format_value(sub_tree2, hf_val, tvb, curr_offset, param_len - 1,
6388
279
                    val, "%u %s (%u)", val * mult, unit_str, val);
6389
279
                curr_offset += (param_len - 1);
6390
279
                break;
6391
32
            case 0x06:
6392
32
                proto_tree_add_item(sub_tree2, hf_nas_5gs_sm_averaging_window, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6393
32
                curr_offset += param_len;
6394
32
                break;
6395
44
            case 0x07:
6396
44
                proto_tree_add_item(sub_tree2, hf_nas_5gs_sm_eps_bearer_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6397
44
                curr_offset += param_len;
6398
44
                break;
6399
1.02k
            default:
6400
1.02k
                proto_tree_add_item(sub_tree2, hf_nas_5gs_sm_param_cont, tvb, curr_offset, param_len, ENC_NA);
6401
1.02k
                curr_offset += param_len;
6402
1.02k
                break;
6403
1.55k
            }
6404
1.46k
            num_param--;
6405
1.46k
            j++;
6406
1.46k
            proto_item_set_len(sub_item, curr_offset - start_offset2);
6407
1.46k
        }
6408
577
        i++;
6409
577
        proto_item_set_len(item, curr_offset - start_offset);
6410
577
    }
6411
6412
32
    return len;
6413
120
}
6414
/*
6415
 *     9.11.4.13    QoS rules
6416
 */
6417
6418
static true_false_string tfs_nas_5gs_sm_dqr = {
6419
    "The QoS rule is the default QoS rule",
6420
    "The QoS rule is not the default QoS rule"
6421
};
6422
6423
static const value_string nas_5gs_rule_operation_code_values[] = {
6424
    { 0x0, "Reserved" },
6425
    { 0x1, "Create new QoS rule" },
6426
    { 0x2, "Delete existing QoS rule" },
6427
    { 0x3, "Modify existing QoS rule and add packet filters" },
6428
    { 0x4, "Modify existing QoS rule and replace packet filters" },
6429
    { 0x5, "Modify existing QoS rule and delete packet filters" },
6430
    { 0x6, "Modify existing QoS rule without modifying packet filters" },
6431
    { 0x7, "Reserved" },
6432
    { 0, NULL }
6433
 };
6434
6435
static const value_string nas_5gs_sm_pf_type_values[] = {
6436
    { 0x01, "Match-all type" },
6437
    { 0x10, "IPv4 remote address type" },
6438
    { 0x11, "IPv4 local address type" },
6439
    { 0x21, "IPv6 remote address/prefix length type" },
6440
    { 0x23, "IPv6 local address/prefix length type" },
6441
    { 0x30, "Protocol identifier/Next header type" },
6442
    { 0x40, "Single local port type" },
6443
    { 0x41, "Local port range type" },
6444
    { 0x50, "Single remote port type" },
6445
    { 0x51, "Remote port range type" },
6446
    { 0x60, "Security parameter index type" },
6447
    { 0x70, "Type of service/Traffic class type" },
6448
    { 0x80, "Flow label type" },
6449
    { 0x81, "Destination MAC address type" },
6450
    { 0x82, "Source MAC address type" },
6451
    { 0x83, "802.1Q C-TAG VID type" },
6452
    { 0x84, "802.1Q S-TAG VID type" },
6453
    { 0x85, "802.1Q C-TAG PCP/DEI type" },
6454
    { 0x86, "802.1Q S-TAG PCP/DEI type" },
6455
    { 0x87, "Ethertype type" },
6456
    { 0x88, "Destination MAC address range type" },
6457
    { 0x89, "Source MAC address range type" },
6458
    { 0x8a, "Extended 802.1Q C-TAG PCP/DEI type" },
6459
    { 0x8b, "Extended 802.1Q S-TAG PCP/DEI type" },
6460
    { 0x91, "(S)RTP multiplexed media identification information type" },
6461
    { 0, NULL }
6462
 };
6463
6464
static const value_string nas_5gs_sm_pkt_flt_dir_values[] = {
6465
    { 0x00, "Reserved" },
6466
    { 0x01, "Downlink only" },
6467
    { 0x02, "Uplink only" },
6468
    { 0x03, "Bidirectional" },
6469
    { 0, NULL }
6470
 };
6471
6472
uint16_t
6473
de_nas_5gs_sm_qos_rules(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
6474
    uint32_t offset, unsigned len,
6475
    char *add_string _U_, int string_len _U_)
6476
314
{
6477
6478
314
    proto_tree *sub_tree, *sub_tree2, *sub_tree3;
6479
314
    proto_item *item, *item2;
6480
314
    int i = 1, j, k = 1;
6481
314
    uint32_t qos_rule_id, pf_len, pf_type, pfc_len;
6482
314
    uint32_t length, curr_offset, saved_offset, start_offset;
6483
314
    uint8_t num_pkt_flt, rop;
6484
6485
314
    static int * const pkt_flt_flags[] = {
6486
314
        &hf_nas_5gs_sm_rop,
6487
314
        &hf_nas_5gs_sm_dqr,
6488
314
        &hf_nas_5gs_sm_nof_pkt_filters,
6489
314
        NULL
6490
314
    };
6491
6492
314
    curr_offset = offset;
6493
6494
711
    while ((curr_offset - offset) < len) {
6495
6496
        /* QoS Rule */
6497
602
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_qos_rules, &item, "QoS rule %u", i);
6498
6499
        /* QoS rule identifier Octet 4*/
6500
602
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_sm_qos_rule_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &qos_rule_id);
6501
602
        curr_offset += 1;
6502
        /* Length of QoS rule Octet 5 - 6*/
6503
602
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_sm_length, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &length);
6504
602
        curr_offset += 2;
6505
6506
602
        saved_offset = curr_offset;
6507
602
        proto_item_set_len(item, length + 3);
6508
6509
        /* Rule operation code    DQR bit    Number of packet filters */
6510
602
        num_pkt_flt = tvb_get_uint8(tvb, curr_offset);
6511
602
        rop = num_pkt_flt >> 5;
6512
602
        num_pkt_flt = num_pkt_flt & 0x0f;
6513
602
        proto_tree_add_bitmask_list(sub_tree, tvb, curr_offset, 1, pkt_flt_flags, ENC_BIG_ENDIAN);
6514
602
        curr_offset++;
6515
6516
        /* For the "delete existing QoS rule" operation and for the "modify existing QoS rule without modifying packet filters"
6517
         * operation, the number of packet filters shall be coded as 0.
6518
         */
6519
602
        if ((rop == 0) || (rop == 7)) {
6520
            /* Reserved */
6521
70
            proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_unknown_value, tvb, curr_offset, length - 1);
6522
70
            i++;
6523
70
            curr_offset += (length - 1);
6524
70
            continue;
6525
70
        }
6526
532
        if (((rop == 2) || (rop == 6)) && (num_pkt_flt != 0)) {
6527
17
            proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_num_pkt_flt, tvb, curr_offset, length - 1);
6528
17
            i++;
6529
17
            curr_offset += (length - 1);
6530
17
            continue;
6531
17
        }
6532
515
        if ((rop == 2) && (length > 1)) {
6533
8
            proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_extraneous_data, tvb, curr_offset, length - 1);
6534
8
            i++;
6535
8
            curr_offset += (length - 1);
6536
8
            continue;
6537
8
        }
6538
6539
        /* Packet filter list */
6540
507
        j = 1;
6541
2.19k
        while (num_pkt_flt > 0) {
6542
1.89k
            sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, -1, ett_nas_5gs_sm_qos_rules, &item, "Packet filter %u", j);
6543
1.89k
            start_offset = curr_offset;
6544
1.89k
            if (rop == 5) {
6545
                /* modify existing QoS rule and delete packet filters */
6546
                /* 0    0    0    0    Packet filter identifier x*/
6547
488
                proto_tree_add_item(sub_tree2, hf_nas_5gs_sm_pkt_flt_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6548
488
                curr_offset++;
6549
1.40k
            } else {
6550
                /* "create new QoS rule", or "modify existing QoS rule and add packet filters"
6551
                 * or "modify existing QoS rule and replace packet filters"
6552
                 */
6553
                 /* 0    0    Packet filter direction 1    Packet filter identifier 1*/
6554
1.40k
                proto_tree_add_item(sub_tree2, hf_nas_5gs_sm_pkt_flt_dir, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6555
1.40k
                proto_tree_add_item(sub_tree2, hf_nas_5gs_sm_pkt_flt_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6556
1.40k
                curr_offset++;
6557
                /* Length of packet filter contents */
6558
1.40k
                proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_sm_pf_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &pf_len);
6559
1.40k
                curr_offset++;
6560
6561
1.40k
                k = 1;
6562
                /* Packet filter contents */
6563
4.02k
                while (pf_len > 0) {
6564
2.82k
                    sub_tree3 = proto_tree_add_subtree_format(sub_tree2, tvb, curr_offset, -1, ett_nas_5gs_sm_pkt_filter_components, &item2, "Packet filter component %u", k);
6565
                    /* Each packet filter component shall be encoded as a sequence of a one octet packet filter component type identifier
6566
                     * and a fixed length packet filter component value field.
6567
                     * The packet filter component type identifier shall be transmitted first.
6568
                     */
6569
2.82k
                    proto_tree_add_item_ret_uint(sub_tree3, hf_nas_5gs_sm_pf_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &pf_type);
6570
2.82k
                    curr_offset++;
6571
                    /* Packet filter length contains the length of component type and content */
6572
2.82k
                    pf_len--;
6573
2.82k
                    switch (pf_type) {
6574
71
                    case 1:
6575
                        /* Match-all type
6576
                         * . If the "match-all type" packet filter component is present in the packet filter, no other packet filter
6577
                         * component shall be present in the packet filter and the length of the packet filter contents field shall
6578
                         * be set to one.
6579
                         */
6580
71
                        pfc_len = 0;
6581
71
                        break;
6582
47
                    case 16:
6583
                        /* For "IPv4 remote address type", the packet filter component value field shall be encoded as a sequence
6584
                         * of a four octet IPv4 address field and a four octet IPv4 address mask field.
6585
                         * The IPv4 address field shall be transmitted first.
6586
                         */
6587
68
                    case 17:
6588
                        /* For "IPv4 local address type", the packet filter component value field shall be encoded as defined
6589
                         * for "IPv4 remote address type"
6590
                         */
6591
68
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_sm_pdu_addr_inf_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
6592
68
                        curr_offset += 4;
6593
68
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_addr_mask_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
6594
68
                        curr_offset += 4;
6595
68
                        pfc_len = 8;
6596
68
                        break;
6597
12
                    case 33:
6598
44
                    case 35:
6599
44
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_ipv6, tvb, curr_offset, 16, ENC_NA);
6600
44
                        curr_offset += 16;
6601
44
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_ipv6_prefix_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6602
44
                        curr_offset++;
6603
44
                        pfc_len = 17;
6604
44
                        break;
6605
225
                    case 48:
6606
225
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_protocol_identifier_or_next_hd, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6607
225
                        curr_offset++;
6608
225
                        pfc_len = 1;
6609
225
                        break;
6610
32
                    case 64:
6611
111
                    case 80:
6612
111
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_single_port_type, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6613
111
                        curr_offset += 2;
6614
111
                        pfc_len = 2;
6615
111
                        break;
6616
46
                    case 65:
6617
69
                    case 81:
6618
69
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_port_range_type_low, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6619
69
                        curr_offset += 2;
6620
69
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_port_range_type_high, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6621
69
                        curr_offset += 2;
6622
69
                        pfc_len = 4;
6623
69
                        break;
6624
7
                    case 96:
6625
7
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_sec_param_idx, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
6626
7
                        curr_offset += 4;
6627
7
                        pfc_len = 4;
6628
7
                        break;
6629
150
                    case 112:
6630
150
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_tos_tc_val, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6631
150
                        curr_offset++;
6632
150
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_tos_tc_mask, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6633
150
                        curr_offset++;
6634
150
                        pfc_len = 2;
6635
150
                        break;
6636
233
                    case 128:
6637
233
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_flow_label, tvb, curr_offset, 3, ENC_BIG_ENDIAN);
6638
233
                        curr_offset += 3;
6639
233
                        pfc_len = 3;
6640
233
                        break;
6641
41
                    case 129:
6642
79
                    case 130:
6643
79
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_mac_addr, tvb, curr_offset, 6, ENC_NA);
6644
79
                        curr_offset += 6;
6645
79
                        pfc_len = 6;
6646
79
                        break;
6647
92
                    case 131:
6648
164
                    case 132:
6649
164
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_vlan_tag_vid, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6650
164
                        curr_offset += 2;
6651
164
                        pfc_len = 2;
6652
164
                        break;
6653
129
                    case 133:
6654
233
                    case 134:
6655
233
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_vlan_tag_pcp, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6656
233
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_vlan_tag_dei, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6657
233
                        curr_offset++;
6658
233
                        pfc_len = 1;
6659
233
                        break;
6660
190
                    case 135:
6661
190
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_ethertype, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
6662
190
                        curr_offset += 2;
6663
190
                        pfc_len = 2;
6664
190
                        break;
6665
6
                    case 136:
6666
45
                    case 137:
6667
45
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_mac_addr_low, tvb, curr_offset, 6, ENC_NA);
6668
45
                        curr_offset += 6;
6669
45
                        proto_tree_add_item(sub_tree3, hf_nas_5gs_mac_addr_high, tvb, curr_offset, 6, ENC_NA);
6670
45
                        curr_offset += 6;
6671
45
                        pfc_len = 12;
6672
45
                        break;
6673
124
                    case 138:
6674
200
                    case 139:
6675
200
                        {
6676
200
                            uint8_t flags = tvb_get_bits8(tvb, (curr_offset << 3) + 2, 2);
6677
200
                            proto_tree_add_item(sub_tree3, hf_nas_5gs_vlan_tag_pcp_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6678
200
                            proto_tree_add_item(sub_tree3, hf_nas_5gs_vlan_tag_dei_ind, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6679
200
                            if (flags & 2)
6680
17
                                proto_tree_add_item(sub_tree3, hf_nas_5gs_vlan_tag_pcp, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6681
200
                            if (flags & 1)
6682
10
                                proto_tree_add_item(sub_tree3, hf_nas_5gs_vlan_tag_dei, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6683
200
                            curr_offset++;
6684
200
                            pfc_len = 1;
6685
200
                        }
6686
200
                        break;
6687
47
                    case 145:
6688
47
                        {
6689
47
                            uint32_t srtp_offset = curr_offset;
6690
47
                            uint8_t entries_nb, entry = 1, entry_len, mid_id_tag_len;
6691
47
                            proto_tree *sub_tree4;
6692
47
                            proto_item *item3;
6693
47
                            uint64_t ret_flags;
6694
47
                            static int * const srtp_flags[] = {
6695
47
                                &hf_nas_5gs_spare_b7,
6696
47
                                &hf_nas_5gs_spare_b6,
6697
47
                                &hf_nas_5gs_spare_b5,
6698
47
                                &hf_nas_5gs_srtp_mult_media_id_info_rptpi,
6699
47
                                &hf_nas_5gs_srtp_mult_media_id_info_rshempi,
6700
47
                                &hf_nas_5gs_srtp_mult_media_id_info_mitpi,
6701
47
                                &hf_nas_5gs_srtp_mult_media_id_info_ptpi,
6702
47
                                &hf_nas_5gs_srtp_mult_media_id_info_ssrcpi,
6703
47
                                NULL
6704
47
                            };
6705
6706
47
                            proto_tree_add_item_ret_uint8(sub_tree3, hf_nas_5gs_srtp_mult_media_id_info_nb,
6707
47
                                                          tvb, curr_offset, 1, ENC_BIG_ENDIAN, &entries_nb);
6708
47
                            curr_offset++;
6709
923
                            for (entry = 1; entry <= entries_nb; entry++) {
6710
876
                                sub_tree4 = proto_tree_add_subtree_format(sub_tree3, tvb, curr_offset, -1, ett_nas_5gs_sm_srtp_mult_media_id_info, &item3,
6711
876
                                                                          "(S)RTP multiplexed media identification information entry %u", entry);
6712
876
                                proto_tree_add_item_ret_uint8(sub_tree4, hf_nas_5gs_srtp_mult_media_id_info_len,
6713
876
                                                              tvb, curr_offset, 1, ENC_BIG_ENDIAN, &entry_len);
6714
876
                                curr_offset++;
6715
876
                                proto_item_set_len(item3, entry_len + 1);
6716
876
                                proto_tree_add_bitmask_list_ret_uint64(sub_tree4, tvb, curr_offset, 1, srtp_flags, ENC_BIG_ENDIAN, &ret_flags);
6717
876
                                curr_offset++;
6718
876
                                if (ret_flags & 0x01) {
6719
192
                                    proto_tree_add_item(sub_tree4, hf_nas_5gs_srtp_mult_media_id_info_ssrc, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
6720
192
                                    curr_offset += 4;
6721
192
                                }
6722
876
                                if (ret_flags & 0x02) {
6723
204
                                    proto_tree_add_item(sub_tree4, hf_nas_5gs_srtp_mult_media_id_info_payload_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6724
204
                                    curr_offset++;
6725
204
                                }
6726
876
                                if (ret_flags & 0x04) {
6727
100
                                    proto_tree_add_item_ret_uint8(sub_tree4, hf_nas_5gs_srtp_mult_media_id_info_mid_id_tag_len,
6728
100
                                                                  tvb, curr_offset, 1, ENC_BIG_ENDIAN, &mid_id_tag_len);
6729
100
                                    curr_offset++;
6730
100
                                    proto_tree_add_item(sub_tree4, hf_nas_5gs_srtp_mult_media_id_info_mid_id_tag,
6731
100
                                                        tvb, curr_offset, mid_id_tag_len, ENC_NA);
6732
100
                                    curr_offset += mid_id_tag_len;
6733
100
                                }
6734
876
                                if (ret_flags & 0x08) {
6735
75
                                    proto_tree_add_item(sub_tree4, hf_nas_5gs_srtp_mult_media_id_info_sdes_hdr_ext_id, tvb, curr_offset, entry_len - 1, ENC_NA);
6736
75
                                    curr_offset += entry_len - 1;
6737
75
                                }
6738
876
                                if (ret_flags & 0x10) {
6739
254
                                    proto_tree_add_item(sub_tree4, hf_nas_5gs_srtp_mult_media_id_info_rtcp_pkt_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6740
254
                                    curr_offset++;
6741
254
                                }
6742
876
                            }
6743
47
                            pfc_len = curr_offset - srtp_offset;
6744
47
                        }
6745
47
                        break;
6746
885
                    default:
6747
885
                        proto_tree_add_expert(sub_tree3, pinfo, &ei_nas_5gs_not_diss, tvb, curr_offset, pf_len);
6748
885
                        curr_offset += pf_len;
6749
885
                        pfc_len = pf_len;
6750
885
                        break;
6751
2.82k
                    }
6752
2.62k
                    pf_len -= pfc_len;
6753
2.62k
                    k++;
6754
2.62k
                    proto_item_set_len(item2, pfc_len + 1);
6755
2.62k
                }
6756
1.40k
            }
6757
1.68k
            num_pkt_flt--;
6758
1.68k
            j++;
6759
1.68k
            proto_item_set_len(item, curr_offset - start_offset);
6760
6761
1.68k
        }
6762
302
        if (rop != 2 && (curr_offset - saved_offset) < length) { /* Delete existing QoS rule */
6763
            /* QoS rule precedence (octet z+1)
6764
            * For the "delete existing QoS rule" operation, the QoS rule precedence value field shall not be included.
6765
            * For the "create new QoS rule" operation, the QoS rule precedence value field shall be included.
6766
            */
6767
251
            proto_tree_add_item(sub_tree, hf_nas_5gs_sm_qos_rule_precedence, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6768
251
            curr_offset++;
6769
251
            if ((curr_offset - saved_offset) < length) {
6770
                /* QoS flow identifier (QFI) (bits 6 to 1 of octet z+2)
6771
                * For the "delete existing QoS rule" operation, the QoS flow identifier value field shall not be included.
6772
                * For the "create new QoS rule" operation, the QoS flow identifier value field shall be included.
6773
                */
6774
248
                proto_tree_add_item(sub_tree, hf_nas_5gs_spare_b7, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6775
                /* Segregation bit (bit 7 of octet z+2) */
6776
248
                if (pinfo->link_dir == P2P_DIR_UL)
6777
0
                    proto_tree_add_item(sub_tree, hf_nas_5gs_sm_segregation, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6778
248
                else
6779
248
                    proto_tree_add_item(sub_tree, hf_nas_5gs_spare_b6, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6780
248
                proto_tree_add_item(sub_tree, hf_nas_5gs_sm_qfi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
6781
248
                curr_offset++;
6782
248
            }
6783
251
        }
6784
6785
302
        i++;
6786
302
    }
6787
6788
109
    return len;
6789
314
}
6790
6791
/*
6792
 *      9.11.4.14    Session-AMBR
6793
 */
6794
6795
static const value_string nas_5gs_sm_unit_for_session_ambr_values[] = {
6796
    { 0x00, "value is not used" },
6797
    { 0x01, "value is incremented in multiples of 1 Kbps" },
6798
    { 0x02, "value is incremented in multiples of 4 Kbps" },
6799
    { 0x03, "value is incremented in multiples of 16 Kbps" },
6800
    { 0x04, "value is incremented in multiples of 64 Kbps" },
6801
    { 0x05, "value is incremented in multiples of 256 kbps" },
6802
    { 0x06, "value is incremented in multiples of 1 Mbps" },
6803
    { 0x07, "value is incremented in multiples of 4 Mbps" },
6804
    { 0x08, "value is incremented in multiples of 16 Mbps" },
6805
    { 0x09, "value is incremented in multiples of 64 Mbps" },
6806
    { 0x0a, "value is incremented in multiples of 256 Mbps" },
6807
    { 0x0b, "value is incremented in multiples of 1 Gbps" },
6808
    { 0x0c, "value is incremented in multiples of 4 Gbps" },
6809
    { 0x0d, "value is incremented in multiples of 16 Gbps" },
6810
    { 0x0e, "value is incremented in multiples of 64 Gbps" },
6811
    { 0x0f, "value is incremented in multiples of 256 Gbps" },
6812
    { 0x10, "value is incremented in multiples of 1 Tbps" },
6813
    { 0x11, "value is incremented in multiples of 4 Tbps" },
6814
    { 0x12, "value is incremented in multiples of 16 Tbps" },
6815
    { 0x13, "value is incremented in multiples of 64 Tbps" },
6816
    { 0x14, "value is incremented in multiples of 256 Tbps" },
6817
    { 0x15, "value is incremented in multiples of 1 Pbps" },
6818
    { 0x16, "value is incremented in multiples of 4 Pbps" },
6819
    { 0x17, "value is incremented in multiples of 16 Pbps" },
6820
    { 0x18, "value is incremented in multiples of 64 Pbps" },
6821
    { 0x19, "value is incremented in multiples of 256 Pbps" },
6822
    { 0, NULL }
6823
};
6824
6825
6826
uint16_t
6827
de_nas_5gs_sm_session_ambr(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
6828
    uint32_t offset, unsigned len,
6829
    char *add_string _U_, int string_len _U_)
6830
25
{
6831
25
    uint32_t unit, mult, ambr_val;
6832
25
    const char *unit_str;
6833
6834
    /* Unit for Session-AMBR for downlink */
6835
25
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sm_unit_for_session_ambr_dl, tvb, offset, 1, ENC_BIG_ENDIAN, &unit);
6836
25
    offset++;
6837
6838
    /* Session-AMBR for downlink (octets 4 and 5) */
6839
25
    mult = get_ext_ambr_unit(unit, &unit_str);
6840
25
    ambr_val = tvb_get_ntohs(tvb, offset);
6841
25
    proto_tree_add_uint_format_value(tree, hf_nas_5gs_sm_session_ambr_dl, tvb, offset, 2,
6842
25
        ambr_val, "%u %s (%u)", ambr_val * mult, unit_str, ambr_val);
6843
25
    offset += 2;
6844
6845
25
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sm_unit_for_session_ambr_ul, tvb, offset, 1, ENC_NA, &unit);
6846
25
    offset++;
6847
25
    mult = get_ext_ambr_unit(unit, &unit_str);
6848
25
    ambr_val = tvb_get_ntohs(tvb, offset);
6849
25
    proto_tree_add_uint_format_value(tree, hf_nas_5gs_sm_session_ambr_ul, tvb, offset, 2,
6850
25
        ambr_val, "%u %s (%u)", ambr_val * mult, unit_str, ambr_val);
6851
6852
25
    return len;
6853
25
}
6854
6855
/*
6856
 *      9.11.4.15    SM PDU DN request container
6857
 */
6858
/* The SM PDU DN request container contains a DN-specific identity of the UE in the network access identifier (NAI) format */
6859
static uint16_t
6860
de_nas_5gs_sm_pdu_dn_req_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
6861
    uint32_t offset, unsigned len,
6862
    char *add_string _U_, int string_len _U_)
6863
0
{
6864
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_dm_spec_id, tvb, offset, len, ENC_UTF_8);
6865
6866
0
    return len;
6867
0
}
6868
6869
/*
6870
 *      9.11.4.16    SSC mode
6871
 */
6872
6873
static const value_string nas_5gs_sc_mode_values[] = {
6874
    { 0x1, "SSC mode 1" },
6875
    { 0x2, "SSC mode 2" },
6876
    { 0x3, "SSC mode 3" },
6877
    { 0, NULL }
6878
 };
6879
6880
6881
static uint16_t
6882
de_nas_5gs_sm_ssc_mode(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
6883
    uint32_t offset, unsigned len _U_,
6884
    char *add_string _U_, int string_len _U_)
6885
0
{
6886
6887
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_sc_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
6888
6889
0
    return 1;
6890
0
}
6891
6892
/*
6893
 * 9.11.4.17 Re-attempt indicator
6894
 */
6895
static true_false_string tfs_nas_5gs_sm_eplmnc = {
6896
    "UE is not allowed to re-attempt the procedure in an equivalent PLMN",
6897
    "UE is allowed to re-attempt the procedure in an equivalent PLMN"
6898
};
6899
6900
static true_false_string tfs_nas_5gs_sm_ratc = {
6901
    "UE is not allowed to re-attempt the procedure in S1 mode",
6902
    "UE is allowed to re-attempt the procedure in S1 mode"
6903
};
6904
6905
static uint16_t
6906
de_nas_5gs_sm_re_attempt_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
6907
    uint32_t offset, unsigned len,
6908
    char* add_string _U_, int string_len _U_)
6909
0
{
6910
0
    static int* const flags[] = {
6911
0
        &hf_nas_5gs_spare_b7,
6912
0
        &hf_nas_5gs_spare_b6,
6913
0
        &hf_nas_5gs_spare_b5,
6914
0
        &hf_nas_5gs_spare_b4,
6915
0
        &hf_nas_5gs_spare_b3,
6916
0
        &hf_nas_5gs_spare_b2,
6917
0
        &hf_nas_5gs_sm_eplmnc,
6918
0
        &hf_nas_5gs_sm_ratc,
6919
0
        NULL
6920
0
    };
6921
6922
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
6923
6924
0
    return len;
6925
0
}
6926
/*
6927
 * 9.11.4.18 5GSM network feature support
6928
 */
6929
static uint16_t
6930
de_nas_5gs_sm_5gsm_nw_feature_sup(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
6931
    uint32_t offset, unsigned len,
6932
    char* add_string _U_, int string_len _U_)
6933
0
{
6934
0
    uint32_t curr_offset = offset;
6935
6936
0
    static int* const flags[] = {
6937
0
        &hf_nas_5gs_spare_b7,
6938
0
        &hf_nas_5gs_spare_b6,
6939
0
        &hf_nas_5gs_spare_b5,
6940
0
        &hf_nas_5gs_spare_b4,
6941
0
        &hf_nas_5gs_spare_b3,
6942
0
        &hf_nas_5gs_spare_b2,
6943
0
        &hf_nas_5gs_sm_naps,
6944
0
        &hf_nas_5gs_sm_ept_s1,
6945
0
        NULL
6946
0
    };
6947
6948
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags, ENC_BIG_ENDIAN);
6949
0
    curr_offset++;
6950
6951
0
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
6952
6953
0
    return (curr_offset - offset);
6954
0
}
6955
/*
6956
 * 9.11.4.19 Void
6957
 */
6958
6959
/*
6960
 * 9.11.4.20 Serving PLMN rate control
6961
 * See subclause 9.9.4.28 in 3GPP TS 24.301
6962
 */
6963
6964
/*
6965
 * 9.11.4.21 5GSM congestion re-attempt indicator
6966
 */
6967
static true_false_string tfs_5gs_sm_catbo = {
6968
    "The back-off timer is applied in the current access type",
6969
    "The back-off timer is applied in both 3GPP access type and non-3GPP access type"
6970
};
6971
6972
static true_false_string tfs_5gs_sm_abo = {
6973
    "The back-off timer is applied in all PLMNs or all equivalent SNPNs",
6974
    "The back-off timer is applied in the registered PLMN or registered SNPN"
6975
};
6976
6977
static uint16_t
6978
de_nas_5gs_sm_5gsm_cong_re_attempt_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
6979
    uint32_t offset, unsigned len,
6980
    char* add_string _U_, int string_len _U_)
6981
0
{
6982
0
    static int* const flags[] = {
6983
0
        &hf_nas_5gs_spare_b7,
6984
0
        &hf_nas_5gs_spare_b6,
6985
0
        &hf_nas_5gs_spare_b5,
6986
0
        &hf_nas_5gs_spare_b4,
6987
0
        &hf_nas_5gs_spare_b3,
6988
0
        &hf_nas_5gs_spare_b2,
6989
0
        &hf_nas_5gs_sm_catbo,
6990
0
        &hf_nas_5gs_sm_abo,
6991
0
        NULL
6992
0
    };
6993
6994
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
6995
6996
0
    return len;
6997
0
}
6998
6999
/*
7000
 * 9.11.4.22 ATSSS container
7001
 */
7002
static uint16_t
7003
de_nas_5gs_sm_atsss_cont(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7004
    uint32_t offset, unsigned len,
7005
    char* add_string _U_, int string_len _U_)
7006
0
{
7007
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_atsss_cont, tvb, offset, len, ENC_NA);
7008
7009
0
    return len;
7010
0
}
7011
7012
/*
7013
 * 9.11.4.23 Control plane only indication
7014
 */
7015
static true_false_string tfs_5gs_sm_cpoi = {
7016
    "PDU session can be used for control plane CIoT 5GS optimization only",
7017
    "reserved"
7018
};
7019
7020
static uint16_t
7021
de_nas_5gs_sm_ctl_plane_only_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7022
    uint32_t offset, unsigned len _U_,
7023
    char* add_string _U_, int string_len _U_)
7024
0
{
7025
0
    static int* const flags[] = {
7026
0
        &hf_nas_5gs_spare_b3,
7027
0
        &hf_nas_5gs_spare_b2,
7028
0
        &hf_nas_5gs_spare_b1,
7029
0
        &hf_nas_5gs_sm_cpoi,
7030
0
        NULL
7031
0
    };
7032
7033
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_BIG_ENDIAN);
7034
7035
0
    return 1;
7036
0
}
7037
/*
7038
 * 9.11.4.24 IP header compression configuration
7039
 */
7040
static const value_string nas_5gs_sm_ip_hdr_comp_config_add_ip_hdr_compr_cxt_setup_params_type_vals[] = {
7041
    { 0x00, "0x0000 (No Compression)" },
7042
    { 0x01, "0x0002 (UDP/IP)" },
7043
    { 0x02, "0x0003 (ESP/IP)" },
7044
    { 0x03, "0x0004 (IP)" },
7045
    { 0x04, "0x0006 (TCP/IP)" },
7046
    { 0x05, "0x0102 (UDP/IP)" },
7047
    { 0x06, "0x0103 (ESP/IP)" },
7048
    { 0x07, "0x0104 (IP)" },
7049
    { 0x08, "Other" },
7050
    { 0x0, NULL }
7051
};
7052
7053
static uint16_t
7054
de_nas_5gs_sm_ip_hdr_comp_conf(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7055
    uint32_t offset, unsigned len,
7056
    char* add_string _U_, int string_len _U_)
7057
0
{
7058
0
    uint32_t curr_offset = offset;
7059
7060
0
    static int * const flags[] = {
7061
0
        &hf_nas_5gs_spare_b7,
7062
0
        &hf_nas_5gs_sm_ip_hdr_comp_config_p0104,
7063
0
        &hf_nas_5gs_sm_ip_hdr_comp_config_p0103,
7064
0
        &hf_nas_5gs_sm_ip_hdr_comp_config_p0102,
7065
0
        &hf_nas_5gs_sm_ip_hdr_comp_config_p0006,
7066
0
        &hf_nas_5gs_sm_ip_hdr_comp_config_p0004,
7067
0
        &hf_nas_5gs_sm_ip_hdr_comp_config_p0003,
7068
0
        &hf_nas_5gs_sm_ip_hdr_comp_config_p0002,
7069
0
        NULL
7070
0
    };
7071
7072
0
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags, ENC_NA);
7073
0
    curr_offset++;
7074
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_ip_hdr_comp_config_max_cid, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
7075
0
    curr_offset += 2;
7076
7077
0
    if ((curr_offset - offset) >= len) {
7078
0
        return len;
7079
0
    }
7080
7081
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_ip_hdr_comp_config_add_ip_hdr_compr_cxt_setup_params_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7082
0
    curr_offset++;
7083
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_ip_hdr_comp_config_add_ip_hdr_compr_cxt_setup_params_cont, tvb, curr_offset, len - (curr_offset - offset), ENC_NA);
7084
7085
0
    return len;
7086
0
}
7087
/*
7088
 * 9.11.4.25 DS-TT Ethernet port MAC address
7089
 */
7090
static uint16_t
7091
de_nas_5gs_sm_ds_tt_eth_port_mac_addr(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7092
    uint32_t offset, unsigned len,
7093
    char* add_string _U_, int string_len _U_)
7094
0
{
7095
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_ds_tt_eth_port_mac_addr, tvb, offset, 6, ENC_NA);
7096
7097
0
    return len;
7098
0
}
7099
7100
/*
7101
 * 9.11.4.26 UE-DS-TT residence time
7102
 */
7103
static uint16_t
7104
de_nas_5gs_sm_ue_ds_tt_residence_t(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7105
    uint32_t offset, unsigned len,
7106
    char* add_string _U_, int string_len _U_)
7107
0
{
7108
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_ue_ds_tt_residence_time, tvb, offset, 8, ENC_NA);
7109
7110
0
    return len;
7111
0
}
7112
7113
/*
7114
* 9.11.4.27 Port management information container
7115
*/
7116
static uint16_t
7117
de_nas_5gs_sm_port_mgnt_inf_cont(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7118
    uint32_t offset, unsigned len,
7119
    char* add_string _U_, int string_len _U_)
7120
0
{
7121
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_port_mgmt_info_cont, tvb, offset, len, ENC_NA);
7122
7123
0
    return len;
7124
0
}
7125
7126
/*
7127
 * 9.11.4.28 Ethernet header compression configuration
7128
 */
7129
static const value_string nas_5gs_sm_eth_hdr_comp_config_cid_len_vals[] = {
7130
    { 0x0, "Ethernet header compression not used" },
7131
    { 0x1, "7 bits" },
7132
    { 0x2, "15 bits" },
7133
    { 0x0, NULL }
7134
};
7135
7136
static uint16_t
7137
de_nas_5gs_sm_eth_hdr_comp_conf(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7138
    uint32_t offset, unsigned len,
7139
    char* add_string _U_, int string_len _U_)
7140
0
{
7141
0
    static int * const flags[] = {
7142
0
        &hf_nas_5gs_spare_b7,
7143
0
        &hf_nas_5gs_spare_b6,
7144
0
        &hf_nas_5gs_spare_b5,
7145
0
        &hf_nas_5gs_spare_b4,
7146
0
        &hf_nas_5gs_spare_b3,
7147
0
        &hf_nas_5gs_spare_b2,
7148
0
        &hf_nas_5gs_sm_eth_hdr_comp_config_cid_len,
7149
0
        NULL
7150
0
    };
7151
7152
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_NA);
7153
7154
0
    return len;
7155
0
}
7156
7157
/*
7158
 * 9.11.4.29 Remote UE context list
7159
 */
7160
static uint16_t
7161
de_nas_5gs_sm_remote_ue_ctx_list(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7162
    uint32_t offset, unsigned len,
7163
    char* add_string _U_, int string_len _U_)
7164
0
{
7165
0
    uint32_t curr_offset = offset;
7166
0
    uint32_t num_ue_ctx, i;
7167
7168
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sm_remote_ue_ctx_list_nb_ue_ctx, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &num_ue_ctx);
7169
0
    curr_offset++;
7170
7171
0
    for (i = 0; i < num_ue_ctx && (curr_offset - offset) < len; i++) {
7172
0
        proto_tree *subtree;
7173
0
        proto_item *item;
7174
0
        uint32_t ctx_len, start_offset = curr_offset;
7175
7176
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_remote_ue_ctx, &item, "Remote UE context %u", i + 1);
7177
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_remote_ue_ctx_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ctx_len);
7178
0
        curr_offset++;
7179
7180
0
        if (ctx_len > 0) {
7181
0
            uint32_t addr_type, userid_len;
7182
0
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_remote_ue_ctx_addr_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &addr_type);
7183
0
            curr_offset++;
7184
7185
0
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_remote_ue_ctx_userid_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &userid_len);
7186
0
            curr_offset++;
7187
7188
0
            if (userid_len > 0) {
7189
0
                proto_tree_add_item(subtree, hf_nas_5gs_sm_remote_ue_ctx_userid, tvb, curr_offset, userid_len, ENC_NA);
7190
0
                curr_offset += userid_len;
7191
0
            }
7192
7193
0
            if ((curr_offset - start_offset - 1) < ctx_len) {
7194
                /* IP address fields if present */
7195
0
                if (addr_type & 0x01) {
7196
0
                    proto_tree_add_item(subtree, hf_nas_5gs_sm_remote_ue_ctx_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
7197
0
                    curr_offset += 4;
7198
0
                }
7199
0
                if (addr_type & 0x02) {
7200
0
                    proto_tree_add_item(subtree, hf_nas_5gs_sm_remote_ue_ctx_ipv6_pfx_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7201
0
                    curr_offset++;
7202
0
                    proto_tree_add_item(subtree, hf_nas_5gs_sm_remote_ue_ctx_ipv6, tvb, curr_offset, 16, ENC_NA);
7203
0
                    curr_offset += 16;
7204
0
                }
7205
0
            }
7206
0
        }
7207
0
        proto_item_set_end(item, tvb, curr_offset);
7208
0
    }
7209
7210
0
    return len;
7211
0
}
7212
7213
/*
7214
 * 9.11.4.30 Requested MBS container
7215
 */
7216
static const value_string nas_5gs_sm_req_mbs_sess_op_vals[] = {
7217
    { 0x0, "Join" },
7218
    { 0x1, "Leave" },
7219
    { 0,   NULL }
7220
};
7221
7222
static const value_string nas_5gs_sm_mbs_sess_id_type_vals[] = {
7223
    { 0x0, "TMGI" },
7224
    { 0x1, "Source specific IP multicast address for IPv4" },
7225
    { 0x2, "Source specific IP multicast address for IPv6" },
7226
    { 0,   NULL }
7227
};
7228
7229
static uint16_t
7230
de_nas_5gs_sm_req_mbs_cont(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7231
    uint32_t offset, unsigned len,
7232
    char* add_string _U_, int string_len _U_)
7233
0
{
7234
0
    uint32_t curr_offset = offset;
7235
0
    uint32_t num_sess, i;
7236
7237
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sm_req_mbs_cont_num_sess, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &num_sess);
7238
0
    curr_offset++;
7239
7240
0
    for (i = 0; i < num_sess && (curr_offset - offset) < len; i++) {
7241
0
        proto_tree *subtree;
7242
0
        proto_item *item;
7243
0
        uint32_t sess_len, id_type, start_offset = curr_offset;
7244
7245
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_req_mbs_sess_info, &item, "MBS session info %u", i + 1);
7246
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_req_mbs_sess_info_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &sess_len);
7247
0
        curr_offset += 2;
7248
7249
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_req_mbs_sess_op, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7250
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_req_mbs_sess_id_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &id_type);
7251
0
        curr_offset++;
7252
7253
0
        switch (id_type) {
7254
0
        case 0: /* TMGI */
7255
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_req_mbs_tmgi, tvb, curr_offset, 6, ENC_NA);
7256
0
            curr_offset += 6;
7257
0
            break;
7258
0
        case 1: /* IPv4 */
7259
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_req_mbs_src_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
7260
0
            curr_offset += 4;
7261
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_req_mbs_mcast_ipv4, tvb, curr_offset, 4, ENC_BIG_ENDIAN);
7262
0
            curr_offset += 4;
7263
0
            break;
7264
0
        case 2: /* IPv6 */
7265
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_req_mbs_src_ipv6, tvb, curr_offset, 16, ENC_NA);
7266
0
            curr_offset += 16;
7267
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_req_mbs_mcast_ipv6, tvb, curr_offset, 16, ENC_NA);
7268
0
            curr_offset += 16;
7269
0
            break;
7270
0
        default:
7271
0
            curr_offset = start_offset + 2 + sess_len;
7272
0
            break;
7273
0
        }
7274
0
        proto_item_set_end(item, tvb, curr_offset);
7275
0
    }
7276
7277
0
    return len;
7278
0
}
7279
7280
/*
7281
 * 9.11.4.31 Received MBS container
7282
 */
7283
static const value_string nas_5gs_sm_rec_mbs_decision_vals[] = {
7284
    { 0x0, "Network accepts the join of the MBS session" },
7285
    { 0x1, "Network rejects the join of the MBS session" },
7286
    { 0x2, "Network removes the UE from the MBS session" },
7287
    { 0x3, "Network accepts the leave of the MBS session" },
7288
    { 0,   NULL }
7289
};
7290
7291
static uint16_t
7292
de_nas_5gs_sm_rec_mbs_cont(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7293
    uint32_t offset, unsigned len,
7294
    char* add_string _U_, int string_len _U_)
7295
0
{
7296
0
    uint32_t curr_offset = offset;
7297
0
    uint32_t num_sess, i;
7298
7299
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sm_rec_mbs_cont_num_sess, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &num_sess);
7300
0
    curr_offset++;
7301
7302
0
    for (i = 0; i < num_sess && (curr_offset - offset) < len; i++) {
7303
0
        proto_tree *subtree;
7304
0
        proto_item *item;
7305
0
        uint32_t info_len, start_offset = curr_offset;
7306
7307
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_rec_mbs_info, &item, "Received MBS info %u", i + 1);
7308
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_rec_mbs_info_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &info_len);
7309
0
        curr_offset += 2;
7310
7311
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_rec_mbs_decision, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7312
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_rec_mbs_sess_id_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7313
0
        curr_offset++;
7314
7315
0
        if (info_len > 1) {
7316
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_rec_mbs_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7317
0
        }
7318
7319
        /* Skip remaining content of this entry */
7320
0
        curr_offset = start_offset + 2 + info_len;
7321
0
        proto_item_set_end(item, tvb, curr_offset);
7322
0
    }
7323
7324
0
    return len;
7325
0
}
7326
7327
/*
7328
 * 9.11.4.32 PDU session pair ID
7329
 */
7330
static uint16_t
7331
de_nas_5gs_sm_pdu_session_pair_id(tvbuff_t* tvb _U_, proto_tree* tree _U_, packet_info* pinfo _U_,
7332
    uint32_t offset _U_, unsigned len,
7333
    char* add_string _U_, int string_len _U_)
7334
0
{
7335
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_pdu_session_pair_id, tvb, offset, 1, ENC_BIG_ENDIAN);
7336
7337
0
    return len;
7338
0
}
7339
7340
/*
7341
 * 9.11.4.33 RSN
7342
 */
7343
static const value_string nas_5gs_sm_pdu_session_rsn_vals[] = {
7344
    { 0x0, "v1"},
7345
    { 0x1, "v2"},
7346
    {   0, NULL }
7347
};
7348
7349
static uint16_t
7350
de_nas_5gs_sm_rsn(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7351
    uint32_t offset, unsigned len,
7352
    char* add_string _U_, int string_len _U_)
7353
0
{
7354
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_pdu_session_rsn, tvb, offset, 1, ENC_BIG_ENDIAN);
7355
7356
0
    return len;
7357
0
}
7358
7359
/*
7360
 * 9.11.4.36 N3QAI
7361
 */
7362
static const value_string nas_5gs_sm_n3qai_param_id_vals[] = {
7363
    { 0x01, "5QI" },
7364
    { 0x02, "GFBR uplink" },
7365
    { 0x03, "GFBR downlink" },
7366
    { 0x04, "MFBR uplink" },
7367
    { 0x05, "MFBR downlink" },
7368
    { 0x06, "Averaging window" },
7369
    { 0x07, "Resource type" },
7370
    { 0x08, "Priority level" },
7371
    { 0x09, "Packet delay budget" },
7372
    { 0x0a, "Packet error rate" },
7373
    { 0x0b, "Maximum data burst volume" },
7374
    { 0x0c, "Maximum packet loss rate downlink" },
7375
    { 0x0d, "Maximum packet loss rate uplink" },
7376
    { 0x0e, "ARP" },
7377
    { 0x0f, "Periodicity" },
7378
    { 0,    NULL }
7379
};
7380
7381
static uint16_t
7382
de_nas_5gs_sm_n3qai(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7383
    uint32_t offset, unsigned len,
7384
    char* add_string _U_, int string_len _U_)
7385
0
{
7386
0
    uint32_t curr_offset = offset;
7387
0
    unsigned i = 1;
7388
7389
0
    while ((curr_offset - offset) < len) {
7390
0
        proto_tree *subtree;
7391
0
        proto_item *item;
7392
0
        uint32_t num_qfis, num_params, j;
7393
0
        uint32_t start_offset = curr_offset;
7394
7395
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_n3qai_entry, &item, "N3QAI %u", i++);
7396
7397
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_n3qai_num_qfis, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &num_qfis);
7398
0
        curr_offset++;
7399
7400
0
        for (j = 0; j < num_qfis && (curr_offset - offset) < len; j++) {
7401
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_n3qai_qfi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7402
0
            curr_offset++;
7403
0
        }
7404
7405
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_n3qai_num_params, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &num_params);
7406
0
        curr_offset++;
7407
7408
0
        for (j = 0; j < num_params && (curr_offset - offset) < len; j++) {
7409
0
            proto_tree *param_tree;
7410
0
            proto_item *param_item;
7411
0
            uint32_t param_len;
7412
7413
0
            param_tree = proto_tree_add_subtree_format(subtree, tvb, curr_offset, -1, ett_nas_5gs_sm_n3qai_param, &param_item, "Parameter %u", j + 1);
7414
0
            proto_tree_add_item(param_tree, hf_nas_5gs_sm_n3qai_param_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7415
0
            curr_offset++;
7416
0
            proto_tree_add_item_ret_uint(param_tree, hf_nas_5gs_sm_n3qai_param_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &param_len);
7417
0
            curr_offset++;
7418
0
            proto_tree_add_item(param_tree, hf_nas_5gs_sm_n3qai_param_contents, tvb, curr_offset, param_len, ENC_NA);
7419
0
            curr_offset += param_len;
7420
0
            proto_item_set_end(param_item, tvb, curr_offset);
7421
0
        }
7422
0
        proto_item_set_end(item, tvb, curr_offset);
7423
7424
0
        if (curr_offset == start_offset)
7425
0
            break;
7426
0
    }
7427
7428
0
    return len;
7429
0
}
7430
7431
/*
7432
 * 9.11.4.37 Non-3GPP delay budget
7433
 */
7434
static uint16_t
7435
de_nas_5gs_sm_n3gpp_delay_budget(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7436
    uint32_t offset, unsigned len,
7437
    char* add_string _U_, int string_len _U_)
7438
0
{
7439
0
    uint32_t curr_offset = offset;
7440
0
    unsigned i = 1;
7441
7442
0
    while ((curr_offset - offset) < len) {
7443
0
        proto_tree *subtree;
7444
0
        proto_item *item;
7445
0
        uint32_t flags, num_qfis, j;
7446
0
        uint32_t start_offset = curr_offset;
7447
7448
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_n3gpp_delay_budget_entry, &item, "Non-3GPP delay budget %u", i++);
7449
7450
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_n3gpp_delay_budget_val, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
7451
0
        curr_offset += 2;
7452
7453
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_n3gpp_delay_budget_flags, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &flags);
7454
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_n3gpp_delay_budget_qfipi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7455
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_n3gpp_delay_budget_pfpi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7456
0
        curr_offset++;
7457
7458
0
        if (flags & 0x02) { /* QFIPI */
7459
0
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_n3gpp_delay_budget_num_qfis, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &num_qfis);
7460
0
            curr_offset++;
7461
0
            for (j = 0; j < num_qfis && (curr_offset - offset) < len; j++) {
7462
0
                proto_tree_add_item(subtree, hf_nas_5gs_sm_n3gpp_delay_budget_qfi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7463
0
                curr_offset++;
7464
0
            }
7465
0
        }
7466
7467
        /* PFPI - packet filter list: skip for now (complex, reuses QoS rule packet filter format) */
7468
0
        if (flags & 0x01) {
7469
            /* Remaining bytes in this entry belong to the packet filter list */
7470
0
            uint32_t remaining = len - (curr_offset - offset);
7471
0
            if (remaining > 0) {
7472
0
                curr_offset += remaining;
7473
0
            }
7474
0
        }
7475
7476
0
        proto_item_set_end(item, tvb, curr_offset);
7477
7478
0
        if (curr_offset == start_offset)
7479
0
            break;
7480
0
    }
7481
7482
0
    return len;
7483
0
}
7484
7485
/*
7486
 * 9.11.4.38 URSP rule enforcement reports
7487
 */
7488
static uint16_t
7489
de_nas_5gs_sm_ursp_rule_enforce_reports(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7490
    uint32_t offset, unsigned len,
7491
    char* add_string _U_, int string_len _U_)
7492
0
{
7493
0
    uint32_t curr_offset = offset;
7494
0
    unsigned i = 1;
7495
7496
0
    while ((curr_offset - offset) < len) {
7497
0
        proto_tree *subtree;
7498
0
        proto_item *item;
7499
0
        uint32_t num_caps, j;
7500
7501
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_ursp_report, &item, "URSP rule enforcement report %u", i++);
7502
7503
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_ursp_report_num_conn_caps, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &num_caps);
7504
0
        curr_offset++;
7505
7506
0
        for (j = 0; j < num_caps && (curr_offset - offset) < len; j++) {
7507
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_ursp_report_conn_cap_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7508
0
            curr_offset++;
7509
0
        }
7510
0
        proto_item_set_end(item, tvb, curr_offset);
7511
0
    }
7512
7513
0
    return len;
7514
0
}
7515
7516
/*
7517
 * 9.11.4.39 Protocol description
7518
 */
7519
static const value_string nas_5gs_sm_prot_desc_tp_vals[] = {
7520
    { 0x01, "RTP" },
7521
    { 0x02, "SRTP" },
7522
    { 0,    NULL }
7523
};
7524
7525
static const value_string nas_5gs_sm_prot_desc_rtp_hdr_ext_type_vals[] = {
7526
    { 0x01, "RTP Header Extension for PDU Set Marking" },
7527
    { 0,    NULL }
7528
};
7529
7530
static const value_string nas_5gs_sm_prot_desc_rtp_payload_format_vals[] = {
7531
    { 0x01, "H.264/AVC" },
7532
    { 0x02, "H.265/HEVC" },
7533
    { 0,    NULL }
7534
};
7535
7536
static uint16_t
7537
de_nas_5gs_sm_prot_desc(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7538
    uint32_t offset, unsigned len,
7539
    char* add_string _U_, int string_len _U_)
7540
0
{
7541
0
    uint32_t curr_offset = offset;
7542
0
    unsigned i = 1;
7543
7544
0
    while ((curr_offset - offset) < len) {
7545
0
        proto_tree *subtree;
7546
0
        proto_item *item;
7547
0
        uint32_t desc_len, flags, start_offset = curr_offset;
7548
7549
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_prot_desc_entry, &item, "Protocol description %u", i++);
7550
7551
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_prot_desc_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &desc_len);
7552
0
        curr_offset += 2;
7553
7554
0
        if (desc_len == 0) {
7555
0
            proto_item_set_end(item, tvb, curr_offset);
7556
0
            continue;
7557
0
        }
7558
7559
0
        if (desc_len == 1) {
7560
            /* Only QRI */
7561
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_prot_desc_qri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7562
0
            curr_offset++;
7563
0
            proto_item_set_end(item, tvb, curr_offset);
7564
0
            continue;
7565
0
        }
7566
7567
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_prot_desc_qri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7568
0
        curr_offset++;
7569
7570
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_prot_desc_tp, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &flags);
7571
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_prot_desc_heipi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7572
0
        proto_tree_add_item(subtree, hf_nas_5gs_sm_prot_desc_pilpi, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7573
0
        curr_offset++;
7574
7575
0
        if (flags & 0x10) { /* HEIPI */
7576
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_prot_desc_rtp_hdr_ext_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7577
0
            curr_offset++;
7578
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_prot_desc_rtp_hdr_ext_id, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7579
0
            curr_offset++;
7580
0
        }
7581
7582
0
        if (flags & 0x20) { /* PILPI */
7583
0
            uint32_t pil_len, num_pt, j;
7584
0
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_prot_desc_rtp_payload_info_list_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &pil_len);
7585
0
            curr_offset += 2;
7586
7587
0
            uint32_t pil_end = curr_offset + pil_len;
7588
0
            while (curr_offset < pil_end && (curr_offset - offset) < len) {
7589
0
                proto_tree *pi_tree;
7590
0
                proto_item *pi_item;
7591
7592
0
                pi_tree = proto_tree_add_subtree(subtree, tvb, curr_offset, -1, ett_nas_5gs_sm_prot_desc_rtp_payload_info, &pi_item, "RTP payload information");
7593
0
                proto_tree_add_item(pi_tree, hf_nas_5gs_sm_prot_desc_rtp_payload_format, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7594
0
                curr_offset++;
7595
0
                proto_tree_add_item_ret_uint(pi_tree, hf_nas_5gs_sm_prot_desc_rtp_num_payload_types, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &num_pt);
7596
0
                curr_offset++;
7597
0
                for (j = 0; j < num_pt && (curr_offset - offset) < len; j++) {
7598
0
                    proto_tree_add_item(pi_tree, hf_nas_5gs_sm_prot_desc_rtp_payload_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7599
0
                    curr_offset++;
7600
0
                }
7601
0
                proto_item_set_end(pi_item, tvb, curr_offset);
7602
0
            }
7603
0
        }
7604
7605
        /* Advance to end of this description entry */
7606
0
        curr_offset = start_offset + 2 + desc_len;
7607
0
        proto_item_set_end(item, tvb, curr_offset);
7608
7609
0
        if (curr_offset == start_offset)
7610
0
            break;
7611
0
    }
7612
7613
0
    return len;
7614
0
}
7615
7616
/*
7617
 * 9.11.4.40 ECN marking for L4S indication
7618
 */
7619
static uint16_t
7620
de_nas_5gs_sm_ecn_mark_l4s_ind(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7621
    uint32_t offset, unsigned len,
7622
    char* add_string _U_, int string_len _U_)
7623
0
{
7624
0
    uint32_t curr_offset = offset;
7625
7626
0
    while ((curr_offset - offset) < len) {
7627
0
        proto_tree_add_item(tree, hf_nas_5gs_sm_ecn_mark_l4s_ind_qri, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7628
0
        curr_offset++;
7629
0
    }
7630
7631
0
    return len;
7632
0
}
7633
7634
/*
7635
 * 9.11.4.41 Non-3GPP device information
7636
 */
7637
static uint16_t
7638
de_nas_5gs_sm_n3gpp_device_info(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
7639
    uint32_t offset, unsigned len,
7640
    char* add_string _U_, int string_len _U_)
7641
0
{
7642
0
    uint32_t curr_offset = offset;
7643
0
    unsigned i = 1;
7644
7645
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_n3gpp_dev_info_pdu_sess_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7646
0
    curr_offset++;
7647
7648
0
    while ((curr_offset - offset) < len) {
7649
0
        proto_tree *subtree;
7650
0
        proto_item *item;
7651
0
        uint32_t entry_len, id_len;
7652
7653
0
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_sm_n3gpp_dev_info_entry, &item, "Non-3GPP device %u", i++);
7654
7655
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_n3gpp_dev_info_entry_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &entry_len);
7656
0
        curr_offset++;
7657
7658
0
        if (entry_len == 0) {
7659
0
            proto_item_set_end(item, tvb, curr_offset);
7660
0
            continue;
7661
0
        }
7662
7663
0
        uint32_t entry_end = curr_offset + entry_len;
7664
7665
0
        proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_sm_n3gpp_dev_info_id_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &id_len);
7666
0
        id_len &= 0x7F; /* 7 bits for length */
7667
0
        curr_offset++;
7668
7669
0
        if (id_len > 0 && (curr_offset + id_len) <= (offset + len)) {
7670
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_n3gpp_dev_info_id, tvb, curr_offset, id_len, ENC_NA);
7671
0
            curr_offset += id_len;
7672
0
        }
7673
7674
0
        if (curr_offset < entry_end && (curr_offset - offset) < len) {
7675
0
            proto_tree_add_item(subtree, hf_nas_5gs_sm_n3gpp_dev_info_conn_info, tvb, curr_offset, entry_end - curr_offset, ENC_NA);
7676
0
        }
7677
7678
0
        curr_offset = entry_end;
7679
0
        proto_item_set_end(item, tvb, curr_offset);
7680
0
    }
7681
7682
0
    return len;
7683
0
}
7684
7685
/*
7686
 *   9.10.2    Common information elements
7687
 */
7688
7689
/* 9.10.2.1    Additional information*/
7690
7691
static uint16_t
7692
de_nas_5gs_cmn_add_inf(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
7693
    uint32_t offset, unsigned len,
7694
    char *add_string _U_, int string_len _U_)
7695
0
{
7696
0
    proto_tree_add_item(tree, hf_nas_5gs_cmn_add_info, tvb, offset, len, ENC_NA);
7697
7698
0
    return len;
7699
0
}
7700
7701
/*
7702
 * 9.11.2.1A    Access type
7703
 */
7704
static const value_string nas_5gs_cmn_acc_type_vals[] = {
7705
    { 0x1, "3GPP access"},
7706
    { 0x2, "Non-3GPP access"},
7707
    {   0, NULL }
7708
};
7709
7710
static int* const nas_5gs_cmn_access_type_flags[] = {
7711
    &hf_nas_5gs_spare_b3,
7712
    &hf_nas_5gs_spare_b2,
7713
    &hf_nas_5gs_cmn_acc_type,
7714
    NULL
7715
};
7716
7717
static uint16_t
7718
de_nas_5gs_cmn_access_type(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
7719
    uint32_t offset, unsigned len _U_,
7720
    char *add_string _U_, int string_len _U_)
7721
0
{
7722
7723
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, nas_5gs_cmn_access_type_flags, ENC_BIG_ENDIAN);
7724
7725
0
    return 1;
7726
7727
0
}
7728
7729
/*
7730
 * 9.11.2.1B    DNN
7731
 */
7732
7733
uint16_t
7734
de_nas_5gs_cmn_dnn(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
7735
    uint32_t offset, unsigned len,
7736
    char *add_string _U_, int string_len _U_)
7737
32
{
7738
7739
32
    uint32_t    curr_offset;
7740
32
    proto_item *pi;
7741
7742
32
    curr_offset = offset;
7743
    /* A DNN value field contains an APN as defined in 3GPP TS 23.003 */
7744
7745
32
    pi = proto_tree_add_item(tree, hf_nas_5gs_cmn_dnn, tvb, curr_offset, len, ENC_APN_STR);
7746
7747
32
    if (len > 100) {
7748
8
        expert_add_info(pinfo, pi, &ei_nas_5gs_dnn_too_long);
7749
8
    }
7750
32
    curr_offset += len;
7751
7752
32
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
7753
7754
32
    return (curr_offset - offset);
7755
7756
32
}
7757
7758
/* 9.11.2.2    EAP message*/
7759
7760
static uint16_t
7761
de_nas_5gs_cmn_eap_msg(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
7762
    uint32_t offset, unsigned len,
7763
    char *add_string _U_, int string_len _U_)
7764
0
{
7765
    /* EAP message as specified in IETF RFC 3748 */
7766
0
    if (eap_handle) {
7767
0
        col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
7768
0
        col_set_fence(pinfo->cinfo, COL_PROTOCOL);
7769
0
        col_append_str(pinfo->cinfo, COL_INFO, ", ");
7770
0
        col_set_fence(pinfo->cinfo, COL_INFO);
7771
0
        call_dissector(eap_handle, tvb_new_subset_length(tvb, offset, len), pinfo, tree);
7772
0
    }
7773
7774
0
    return len;
7775
0
}
7776
7777
/* 9.11.2.3    GPRS timer */
7778
/* See subclause 10.5.7.3 in 3GPP TS 24.008 */
7779
7780
/* 9.11.2.4    GPRS timer 2*/
7781
/* See subclause 10.5.7.4 in 3GPP TS 24.008 */
7782
7783
/* 9.11.2.5    GPRS timer 3*/
7784
/* See subclause 10.5.7.4a in 3GPP TS 24.008 */
7785
7786
/* 9.11.2.8    S-NSSAI */
7787
uint16_t
7788
de_nas_5gs_cmn_s_nssai(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
7789
    uint32_t offset, unsigned len,
7790
    char *add_string _U_, int string_len _U_)
7791
51
{
7792
    /* SST
7793
    * This field contains the 8 bit SST value. The coding of the SST value part is defined in 3GPP TS 23.003
7794
    */
7795
51
    proto_tree_add_item(tree, hf_nas_5gs_mm_sst, tvb, offset, 1, ENC_BIG_ENDIAN);
7796
51
    if (len == 1) {
7797
1
        return len;
7798
1
    }
7799
50
    offset += 1;
7800
50
    if (len > 2) {
7801
        /* SD */
7802
37
        proto_tree_add_item(tree, hf_nas_5gs_mm_sd, tvb, offset, 3, ENC_BIG_ENDIAN);
7803
37
        if (len == 4) {
7804
2
            return len;
7805
2
        }
7806
35
        offset += 3;
7807
35
    }
7808
    /* Mapped HPLMN SST */
7809
48
    proto_tree_add_item(tree, hf_nas_5gs_mm_mapped_hplmn_sst, tvb, offset, 1, ENC_BIG_ENDIAN);
7810
48
    if ((len == 2) || (len == 5)) {
7811
4
        return len;
7812
4
    }
7813
44
    offset += 1;
7814
    /* Mapped HPLMN SD */
7815
44
    proto_tree_add_item(tree, hf_nas_5gs_mm_mapped_hplmn_ssd, tvb, offset, 3, ENC_BIG_ENDIAN);
7816
7817
44
    return len;
7818
48
}
7819
7820
/*
7821
* 9.11.2.9    S1 mode to N1 mode NAS transparent container
7822
*/
7823
    /* Message authentication code */
7824
    /* Type of ciphering algorithmType of integrity protection algorithm */
7825
    /* 0 Spare NCC TSC Key set identifier in 5G */
7826
    /* Spare */
7827
    /* Spare */
7828
7829
/* 9.11.2.10    Service-level-AA container */
7830
762
#define NAS_5GS_TV_IE_MASK    0x80
7831
762
#define NAS_5GS_TV_IE_VAL     0x80
7832
440
#define NAS_5GS_TLV_E_IE_MASK 0xf0
7833
440
#define NAS_5GS_TLV_E_IE_VAL  0x70
7834
7835
static const value_string nas_5gs_cmn_service_level_aa_param_type_vals[] = {
7836
    { 0x10, "Service-level device ID"},
7837
    { 0x20, "Service-level-AA server address"},
7838
    { 0x30, "Service-level-AA response"},
7839
    { 0x40, "Service-level-AA payload type"},
7840
    { 0x70, "Service-level-AA payload"},
7841
    { 0xa0, "Service-level-AA pending indication"},
7842
    {    0, NULL }
7843
};
7844
7845
static const value_string nas_5gs_cmn_service_level_aa_param_serv_addr_type_vals[] = {
7846
    { 1, "IPv4"},
7847
    { 2, "IPv6"},
7848
    { 3, "IPv4v6"},
7849
    { 4, "FQDN"},
7850
    { 0, NULL }
7851
};
7852
7853
static const value_string nas_5gs_cmn_service_level_aa_param_resp_c2ar_vals[] = {
7854
    { 0, "No information"},
7855
    { 1, "C2 authorization was successful"},
7856
    { 2, "C2 authorization was not successful or C2 authorization is revoked"},
7857
    { 3, "Reserved"},
7858
    { 0, NULL }
7859
};
7860
7861
static const value_string nas_5gs_cmn_service_level_aa_param_resp_slar_vals[] = {
7862
    { 0, "No information"},
7863
    { 1, "Service level authentication and authorization was successful"},
7864
    { 2, "Service level authentication and authorization was not successful or service level authorization is revoked"},
7865
    { 3, "Reserved"},
7866
    { 0, NULL }
7867
};
7868
7869
static const value_string nas_5gs_cmn_service_level_aa_param_payload_type_vals[] = {
7870
    { 1, "UUAA payload"},
7871
    { 2, "C2 authorization payload"},
7872
    { 0, NULL }
7873
};
7874
7875
static true_false_string nas_5gs_cmn_service_level_aa_param_pending_ind_slapi_value = {
7876
    "Service-level-AA procedure is to be performed",
7877
    "Reserved"
7878
};
7879
7880
static true_false_string nas_5gs_enabled_not_enabled_value = {
7881
    "Enabled",
7882
    "Not enabled"
7883
};
7884
7885
uint16_t
7886
de_nas_5gs_cmn_service_level_aa_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_,
7887
    uint32_t offset, unsigned len,
7888
    char *add_string _U_, int string_len _U_)
7889
67
{
7890
67
    uint32_t curr_offset, i;
7891
7892
67
    curr_offset = offset;
7893
67
    i = 0;
7894
780
    while ((curr_offset - offset) < len) {
7895
762
        proto_item *item;
7896
762
        proto_tree *subtree;
7897
762
        uint32_t param_len, param_offset = curr_offset;
7898
762
        uint8_t type;
7899
7900
762
        subtree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_cmn_service_level_aa_cont_param, &item, "Service-level-AA parameter %d", i + 1);
7901
762
        proto_tree_add_item_ret_uint8(subtree, hf_nas_5gs_cmn_service_level_aa_param_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &type);
7902
762
        curr_offset++;
7903
762
        if ((type & NAS_5GS_TV_IE_MASK) == NAS_5GS_TV_IE_VAL) {
7904
322
            param_len = 0;
7905
322
            type &= 0xf0;
7906
440
        } else if ((type & NAS_5GS_TLV_E_IE_MASK) == NAS_5GS_TLV_E_IE_VAL) {
7907
9
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_cmn_service_level_aa_param_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &param_len);
7908
9
            curr_offset += 2;
7909
431
        } else {
7910
431
            proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_cmn_service_level_aa_param_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &param_len);
7911
431
            curr_offset++;
7912
431
        }
7913
762
        proto_item_set_len(item, curr_offset + param_len - param_offset);
7914
762
        switch (type) {
7915
13
        case 0x10:
7916
13
            proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_device_id, tvb, curr_offset, param_len, ENC_UTF_8);
7917
13
            break;
7918
14
        case 0x20:
7919
14
            {
7920
14
                uint32_t addr_type;
7921
7922
14
                proto_tree_add_item_ret_uint(subtree, hf_nas_5gs_cmn_service_level_aa_param_addr_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &addr_type);
7923
14
                switch (addr_type) {
7924
2
                case 1:
7925
2
                    proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_addr_ipv4, tvb, curr_offset+1, 4, ENC_BIG_ENDIAN);
7926
2
                    break;
7927
1
                case 2:
7928
1
                    proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_addr_ipv6, tvb, curr_offset+1, 16, ENC_NA);
7929
1
                    break;
7930
1
                case 3:
7931
1
                    proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_addr_ipv4, tvb, curr_offset+1, 4, ENC_BIG_ENDIAN);
7932
1
                    proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_addr_ipv6, tvb, curr_offset+5, 16, ENC_NA);
7933
1
                    break;
7934
1
                case 4:
7935
1
                    proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_addr_fqdn, tvb, curr_offset+1, param_len-1, ENC_APN_STR);
7936
1
                    break;
7937
9
                default:
7938
9
                    break;
7939
14
                }
7940
14
            }
7941
9
            break;
7942
9
        case 0x30:
7943
3
            {
7944
3
                static int * const flags[] = {
7945
3
                    &hf_nas_5gs_spare_b7,
7946
3
                    &hf_nas_5gs_spare_b6,
7947
3
                    &hf_nas_5gs_spare_b5,
7948
3
                    &hf_nas_5gs_spare_b4,
7949
3
                    &hf_nas_5gs_cmn_service_level_aa_param_resp_c2ar,
7950
3
                    &hf_nas_5gs_cmn_service_level_aa_param_resp_slar,
7951
3
                    NULL
7952
3
                };
7953
3
                proto_tree_add_bitmask_list(subtree, tvb, curr_offset, 1, flags, ENC_BIG_ENDIAN);
7954
3
            }
7955
3
            break;
7956
7
        case 0x40:
7957
7
            proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_payload_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
7958
7
            break;
7959
4
        case 0x70:
7960
4
            proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_payload, tvb, curr_offset, param_len, ENC_NA);
7961
4
            break;
7962
149
        case 0xa0:
7963
149
            {
7964
149
                static int * const flags[] = {
7965
149
                    &hf_nas_5gs_spare_b3,
7966
149
                    &hf_nas_5gs_spare_b2,
7967
149
                    &hf_nas_5gs_spare_b1,
7968
149
                    &hf_nas_5gs_cmn_service_level_aa_param_pending_ind_slapi,
7969
149
                    NULL
7970
149
                };
7971
                /* curr_offset was already incremented, need to use previous byte */
7972
149
                proto_tree_add_bitmask_list(subtree, tvb, curr_offset-1, 1, flags, ENC_BIG_ENDIAN);
7973
149
            }
7974
149
            break;
7975
3
        case 0x50:
7976
3
            {
7977
3
                static int * const flags[] = {
7978
3
                    &hf_nas_5gs_spare_b3,
7979
3
                    &hf_nas_5gs_spare_b2,
7980
3
                    &hf_nas_5gs_spare_b1,
7981
3
                    &hf_nas_5gs_cmn_service_level_aa_param_service_status_ind_uas,
7982
3
                    NULL
7983
3
                };
7984
                /* curr_offset was already incremented, need to use previous byte */
7985
3
                proto_tree_add_bitmask_list(subtree, tvb, curr_offset-1, 1, flags, ENC_BIG_ENDIAN);
7986
3
            }
7987
3
            break;
7988
555
        default:
7989
555
            proto_tree_add_item(subtree, hf_nas_5gs_cmn_service_level_aa_param_unknown, tvb, curr_offset, param_len, ENC_NA);
7990
555
            break;
7991
762
        }
7992
713
        curr_offset += param_len;
7993
713
        i++;
7994
713
    }
7995
18
    return len;
7996
67
}
7997
7998
/*
7999
 * Note this enum must be of the same size as the element decoding list
8000
 */
8001
typedef enum
8002
{
8003
    DE_NAS_5GS_CMN_ADD_INF,                      /* 9.11.2.1     Additional information*/
8004
    DE_NAS_5GS_ACCESS_TYPE,                      /* 9.11.2.1A    Access type */
8005
    DE_NAS_5GS_CMN_DNN,                          /* 9.11.2.1B    DNN*/
8006
    DE_NAS_5GS_CMN_EAP_MESSAGE,                  /* 9.11.2.2     EAP message*/
8007
    DE_NAS_5GS_CMN_GPRS_TIMER,                   /* 9.11.2.3     GPRS timer */
8008
    DE_NAS_5GS_CMN_GPRS_TIMER2,                  /* 9.11.2.4     GPRS timer 2*/
8009
    DE_NAS_5GS_CMN_GPRS_TIMER3,                  /* 9.11.2.5     GPRS timer 3*/
8010
    DE_NAS_5GS_CMN_INTRA_N1_MODE_NAS_TRANS_CONT, /* 9.11.2.6     Intra N1 mode NAS transparent container*/
8011
    DE_NAS_5GS_CMN_N1_TO_S1_MODE_TRANS_CONT,     /* 9.11.2.7     N1 mode to S1 mode NAS transparent container */
8012
    DE_NAS_5GS_CMN_S_NSSAI,                      /* 9.11.2.8     S-NSSAI */
8013
    DE_NAS_5GS_CMN_S1_TO_N1_MODE_TRANS_CONT,     /* 9.11.2.9     S1 mode to N1 mode NAS transparent container */
8014
    DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT,        /* 9.11.2.10    Service-level-AA container */
8015
    DE_NAS_5GS_COMMON_NONE                       /* NONE */
8016
}
8017
nas_5gs_common_elem_idx_t;
8018
8019
static const value_string nas_5gs_common_elem_strings[] = {
8020
    { DE_NAS_5GS_CMN_ADD_INF,                       "Additional information" },                          /* 9.11.2.1     Additional information*/
8021
    { DE_NAS_5GS_ACCESS_TYPE,                       "Access type"},                                      /* 9.11.2.1A    Access type */
8022
    { DE_NAS_5GS_CMN_DNN,                           "DNN" },                                             /* 9.11.2.1B    DNN*/
8023
    { DE_NAS_5GS_CMN_EAP_MESSAGE,                   "EAP message" },                                     /* 9.11.2.2     EAP message*/
8024
    { DE_NAS_5GS_CMN_GPRS_TIMER,                    "GPRS timer" },                                      /* 9.11.2.3     GPRS timer*/
8025
    { DE_NAS_5GS_CMN_GPRS_TIMER2,                   "GPRS timer 2" },                                    /* 9.11.2.4     GPRS timer 2*/
8026
    { DE_NAS_5GS_CMN_GPRS_TIMER3,                   "GPRS timer 3" },                                    /* 9.11.2.5     GPRS timer 3*/
8027
    { DE_NAS_5GS_CMN_INTRA_N1_MODE_NAS_TRANS_CONT,  "Intra N1 mode NAS transparent container" },         /* 9.11.2.6     Intra N1 mode NAS transparent container*/
8028
    { DE_NAS_5GS_CMN_N1_TO_S1_MODE_TRANS_CONT,      "N1 mode to S1 mode NAS transparent container" },    /* 9.11.2.7     N1 mode to S1 mode NAS transparent container */
8029
    { DE_NAS_5GS_CMN_S_NSSAI,                       "S-NSSAI" },                                         /* 9.11.2.8     S-NSSAI */
8030
    { DE_NAS_5GS_CMN_S1_TO_N1_MODE_TRANS_CONT,      "S1 mode to N1 mode NAS transparent container" },    /* 9.11.2.9     S1 mode to N1 mode NAS transparent container */
8031
    { DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT,         "Service-level-AA container" },                      /* 9.11.2.10    Service-level-AA container */
8032
    { 0, NULL }
8033
};
8034
value_string_ext nas_5gs_common_elem_strings_ext = VALUE_STRING_EXT_INIT(nas_5gs_common_elem_strings);
8035
8036
224
#define NUM_NAS_5GS_COMMON_ELEM array_length(nas_5gs_common_elem_strings)
8037
int ett_nas_5gs_common_elem[NUM_NAS_5GS_COMMON_ELEM];
8038
8039
8040
uint16_t(* const nas_5gs_common_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
8041
    uint32_t offset, unsigned len,
8042
    char *add_string, int string_len) = {
8043
        /*  9.10.2    Common information elements */
8044
        de_nas_5gs_cmn_add_inf,                      /* 9.11.2.1     Additional information*/
8045
        de_nas_5gs_cmn_access_type,                  /* 9.11.2.1A    Access type */
8046
        de_nas_5gs_cmn_dnn,                          /* 9.11.2.1B    DNN*/
8047
        de_nas_5gs_cmn_eap_msg,                      /* 9.11.2.2     EAP message*/
8048
        NULL,                                        /* 9.11.2.3     GPRS timer*/
8049
        NULL,                                        /* 9.11.2.4     GPRS timer 2*/
8050
        NULL,                                        /* 9.11.2.5     GPRS timer 3*/
8051
        NULL,                                        /* 9.11.2.6     Intra N1 mode NAS transparent container*/
8052
        NULL,                                        /* 9.11.2.7     N1 mode to S1 mode NAS transparent container */
8053
        de_nas_5gs_cmn_s_nssai,                      /* 9.11.2.8     S-NSSAI */
8054
        NULL,                                        /* 9.11.2.9     S1 mode to N1 mode NAS transparent container */
8055
        de_nas_5gs_cmn_service_level_aa_cont,        /* 9.11.2.10    Service-level-AA container */
8056
        NULL,   /* NONE */
8057
};
8058
8059
8060
8061
/*
8062
 * 9.11.3    5GS mobility management (5GMM) information elements
8063
 */
8064
#if 0
8065
typedef enum
8066
{
8067
    DE_NAS_5GS_MM_5GMM_CAP,                  /* 9.11.3.1     5GMM capability*/
8068
    DE_NAS_5GS_MM_5GMM_CAUSE,                /* 9.11.3.2     5GMM cause*/
8069
    DE_NAS_5GS_MM_5GS_DRX_PARAM,             /* 9.11.3.2A    5GS DRX parameters*/
8070
    DE_NAS_5GS_MM_5GS_IDENTITY_TYPE,         /* 9.11.3.3     5GS identity type*/
8071
    DE_NAS_5GS_MM_5GS_MOBILE_ID,             /* 9.11.3.4     5GS mobile identity*/
8072
    DE_NAS_5GS_MM_5GS_NW_FEAT_SUP,           /* 9.11.3.5     5GS network feature support*/
8073
    DE_NAS_5GS_MM_5GS_REG_RES,               /* 9.11.3.6     5GS registration result*/
8074
    DE_NAS_5GS_MM_5GS_REG_TYPE,              /* 9.11.3.7     5GS registration type*/
8075
    DE_NAS_5GS_MM_5GS_TA_ID,                 /* 9.11.3.8     5GS tracking area identity */
8076
    DE_NAS_5GS_MM_5GS_TA_ID_LIST,            /* 9.11.3.9     5GS tracking area identity list */
8077
    DE_NAS_5GS_MM_UPDATE_TYPE,               /* 9.11.3.9A    5GS update type */
8078
    DE_NAS_5GS_MM_ABBA,                      /* 9.11.3.10    ABBA */
8079
                                             /* 9.11.3.11    void */
8080
    DE_NAS_5GS_MM_ADD_5G_SEC_INF,            /* 9.11.3.12    Additional 5G security information */
8081
    DE_NAS_5GS_MM_ADD_INF_REQ,               /* 9.11.3.12A   Additional information requested */
8082
    DE_NAS_5GS_MM_ALLOW_PDU_SES_STS,         /* 9.11.3.13    Allowed PDU session status*/
8083
    DE_NAS_5GS_MM_AUT_FAIL_PAR,              /* 9.11.3.14    Authentication failure parameter */
8084
    DE_NAS_5GS_MM_AUT_PAR_AUTN,              /* 9.11.3.15    Authentication parameter AUTN*/
8085
    DE_NAS_5GS_MM_AUT_PAR_RAND,              /* 9.11.3.16    Authentication parameter RAND*/
8086
    DE_NAS_5GS_MM_AUT_RESP_PAR,              /* 9.11.3.17    Authentication response parameter */
8087
    DE_NAS_5GS_MM_CONF_UPD_IND,              /* 9.11.3.18    Configuration update indication*/
8088
    DE_NAS_5GS_MM_CAG_INFORMATION_LIST,      /* 9.11.3.18A   CAG information list*/
8089
    DE_NAS_5GS_MM_CIOT_SMALL_DATA_CONT,      /* 9.11.3.18B   CIoT small data container */
8090
    DE_NAS_5GS_MM_CIPHERING_KEY_DATA,        /* 9.11.3.18C   Ciphering key data*/
8091
    DE_NAS_5GS_MM_CTRL_PLANE_SERVICE_TYPE,   /* 9.11.3.18D   Control plane service type*/
8092
    DE_NAS_5GS_MM_DLGT_SAVING_TIME,          /* 9.11.3.19    Daylight saving time*/
8093
    DE_NAS_5GS_MM_DE_REG_TYPE,               /* 9.11.3.20    De-registration type*/
8094
                                             /* 9.11.3.21    Void */
8095
                                             /* 9.11.3.22    Void*/
8096
    DE_NAS_5GS_MM_EMRG_NR_LIST,              /* 9.11.3.23    Emergency number list */
8097
    DE_NAS_5GS_MM_EPS_BEARER_CTX_STATUS,     /* 9.11.3.23A   EPS bearer context status */
8098
    DE_NAS_5GS_MM_EPS_NAS_MSG_CONT,          /* 9.11.3.24    EPS NAS message container */
8099
    DE_NAS_5GS_MM_EPS_NAS_SEC_ALGO,          /* 9.11.3.25    EPS NAS security algorithms */
8100
    DE_NAS_5GS_MM_EXT_EMERG_NUM_LIST,        /* 9.11.3.26    Extended emergency number list */
8101
    DE_NAS_5GS_MM_EXTENDED_DRX_PARAMETERS,   /* 9.11.3.26A   Extended DRX parameters */
8102
                                             /* 9.11.3.27    Void*/
8103
    DE_NAS_5GS_MM_IMEISV_REQ,                /* 9.11.3.28    IMEISV request*/
8104
    DE_NAS_5GS_MM_LADN_INDIC,                /* 9.11.3.29    LADN indication*/
8105
    DE_NAS_5GS_MM_LADN_INF,                  /* 9.11.3.30    LADN information */
8106
    DE_NAS_5GS_MM_MICO_IND,                  /* 9.11.3.31    MICO indication*/
8107
    DE_NAS_5GS_MM_MA_PDU_SES_INF,            /* 9.11.3.31A   MA PDU session information */
8108
    DE_NAS_5GS_MM_MAPPED_NSSAI,              /* 9.11.3.31B   Mapped NSSAI */
8109
    DE_NAS_5GS_MM_MOBILE_STATION_CLSMK_2,    /* 9.11.3.31C   Mobile station classmark 2 */
8110
    DE_NAS_5GS_MM_NAS_KEY_SET_ID,            /* 9.11.3.32    NAS key set identifier*/
8111
    DE_NAS_5GS_MM_NAS_KEY_SET_ID_H1,         /* 9.11.3.32    NAS key set identifier*/
8112
    DE_NAS_5GS_MM_NAS_MSG_CONT,              /* 9.11.3.33    NAS message container*/
8113
    DE_NAS_5GS_MM_NAS_SEC_ALGO,              /* 9.11.3.34    NAS security algorithms*/
8114
    DE_NAS_5GS_MM_NW_NAME,                   /* 9.11.3.35    Network name*/
8115
    DE_NAS_5GS_MM_NW_SLICING_IND,            /* 9.11.3.36    Network slicing indication */
8116
    DE_NAS_5GS_MM_NW_NON_3GPP_NW_PROV_POL,   /* 9.11.3.36A   Non-3GPP NW provided policies */
8117
    DE_NAS_5GS_MM_NSSAI,                     /* 9.11.3.37    NSSAI*/
8118
    DE_NAS_5GS_MM_NSSAI_INC_MODE,            /* 9.11.3.37A   NSSAI inclusion mode */
8119
    DE_NAS_5GS_MM_OP_DEF_ACC_CAT_DEF,        /* 9.11.3.38    Operator-defined access category definitions */
8120
    DE_NAS_5GS_MM_PLD_CONT,                  /* 9.11.3.39    Payload container*/
8121
    DE_NAS_5GS_MM_PLD_CONT_TYPE,             /* 9.11.3.40    Payload container type*/
8122
    DE_NAS_5GS_MM_PDU_SES_ID_2,              /* 9.11.3.41    PDU session identity 2 */
8123
    DE_NAS_5GS_MM_PDU_SES_REACT_RES,         /* 9.11.3.42    PDU session reactivation result*/
8124
    DE_NAS_5GS_MM_PDU_SES_REACT_RES_ERR_C,   /* 9.11.3.43    PDU session reactivation result error cause */
8125
    DE_NAS_5GS_MM_PDU_SES_STATUS,            /* 9.11.3.44    PDU session status */
8126
    DE_NAS_5GS_MM_PLMN_LIST,                 /* 9.11.3.45    PLMN list*/
8127
    DE_NAS_5GS_MM_REJ_NSSAI,                 /* 9.11.3.46    Rejected NSSAI*/
8128
    DE_NAS_5GS_MM_REL_ASS_IND,               /* 9.11.3.46A   Release assistance indication*/
8129
    DE_NAS_5GS_MM_REQ_TYPE,                  /* 9.11.3.47    Request type */
8130
    DE_NAS_5GS_MM_S1_UE_NW_CAP,              /* 9.11.3.48    S1 UE network capability*/
8131
    DE_NAS_5GS_MM_S1_UE_SEC_CAP,             /* 9.11.3.48A   S1 UE security capability*/
8132
    DE_NAS_5GS_MM_SAL,                       /* 9.11.3.49    Service area list*/
8133
    DE_NAS_5GS_MM_SERV_TYPE,                 /* 9.11.3.50    Service type,*/
8134
    DE_NAS_5GS_MM_SMS_IND,                   /* 9.11.3.50A   SMS indication */
8135
    DE_NAS_5GS_MM_SOR_TRANSP_CONT,           /* 9.11.3.51    SOR transparent container */
8136
    DE_NAS_5GS_MM_SUPPORTED_CODEC_LIST,      /* 9.11.3.51A   Supported codec list */
8137
    DE_NAS_5GS_MM_TZ,                        /* 9.11.3.52    Time zone*/
8138
    DE_NAS_5GS_MM_TZ_AND_T,                  /* 9.11.3.53    Time zone and time*/
8139
    DE_NAS_5GS_MM_UE_PAR_UPD_TRANSP_CONT,    /* 9.11.3.53A   UE parameters update transparent container */
8140
    DE_NAS_5GS_MM_UE_SEC_CAP,                /* 9.11.3.54    UE security capability*/
8141
    DE_NAS_5GS_MM_UE_USAGE_SET,              /* 9.11.3.55    UE's usage setting */
8142
    DE_NAS_5GS_MM_UE_STATUS,                 /* 9.11.3.56    UE status */
8143
    DE_NAS_5GS_MM_UL_DATA_STATUS,            /* 9.11.3.57    Uplink data status */
8144
    DE_NAS_5GS_MM_UE_RADIO_CAP_ID,           /* 9.11.3.68    UE radio capability ID*/
8145
    DE_NAS_5GS_MM_UE_RADIO_CAP_ID_DEL_IND,   /* 9.11.3.69    UE radio capability ID deletion indication*/
8146
    DE_NAS_5GS_MM_TRUNCATED_5G_S_TMSI_CONF,  /* 9.11.3.70    Truncated 5G-S-TMSI configuration*/
8147
    DE_NAS_5GS_MM_WUS_ASSISTANCE_INF,        /* 9.11.3.71    WUS assistance information*/
8148
    DE_NAS_5GS_MM_N5GC_INDICATION,           /* 9.11.3.72    N5GC indication*/
8149
    DE_NAS_5GS_MM_NB_N1_MODE_DRX_PARS,       /* 9.11.3.73    NB-N1 mode DRX parameters*/
8150
    DE_NAS_5GS_MM_ADDITIONAL_CONF_IND,       /* 9.11.3.74    Additional configuration indication*/
8151
    DE_NAS_5GS_MM_EXTENDED_REJECTED_NSSAI,   /* 9.11.3.75    Extended rejected NSSAI*/
8152
    DE_NAS_5GS_MM_UE_REQUEST_TYPE,           /* 9.11.3.76    UE request type */
8153
    DE_NAS_5GS_MM_PAGING_RESTRICTION,        /* 9.11.3.77    Paging restriction */
8154
    DE_NAS_5GS_MM_NID,                       /* 9.11.3.79    NID */
8155
    DE_NAS_5GS_MM_PEIPS_ASSIST_INFO,         /* 9.11.3.80    PEIPS assistance information */
8156
    DE_NAS_5GS_MM_5GS_ADD_REQ_RES,           /* 9.11.3.81    5GS additional request result */
8157
    DE_NAS_5GS_MM_NSSRG_INFO,                /* 9.11.3.82    NSSRG information */
8158
    DE_NAS_5GS_MM_PLMNS_LIST_DISASTER_COND,  /* 9.11.3.83    List of PLMNs to be used in disaster condition */
8159
    DE_NAS_5GS_MM_REG_WAIT_RANGE,            /* 9.11.3.84    Registration wait range */
8160
    DE_NAS_5GS_MM_PLMN_ID,                   /* 9.11.3.85    PLMN identity */
8161
    DE_NAS_5GS_MM_EXT_CAG_INFO_LIST,         /* 9.11.3.86    Extended CAG information list */
8162
    DE_NAS_5GS_MM_NSAG_INFO,                 /* 9.11.3.87    NSAG information */
8163
    DE_NAS_5GS_MM_PROSE_RELAY_TRANS_ID,      /* 9.11.3.88    ProSe relay transaction identity */
8164
    DE_NAS_5GS_MM_RELAY_KEY_REQ_PARAMS,      /* 9.11.3.89    Relay key request parameters */
8165
    DE_NAS_5GS_MM_RELAY_KEY_RESP_PARAMS,     /* 9.11.3.90    Relay key response parameters */
8166
    DE_NAS_5GS_MM_PRIO_IND,                  /* 9.11.3.91    Priority indicator */
8167
    DE_NAS_5GS_MM_SNPN_LIST,                 /* 9.11.3.92    SNPN list */
8168
    DE_NAS_5GS_MM_N3IWF_ID,                  /* 9.11.3.93    N3IWF identifier */
8169
    DE_NAS_5GS_MM_TNAN_INFO,                 /* 9.11.3.94    TNAN information */
8170
    DE_NAS_5GS_MM_RAN_TIMING_SYNC,           /* 9.11.3.95    RAN timing synchronization */
8171
    DE_NAS_5GS_MM_EXT_LADN_INFO,             /* 9.11.3.96    Extended LADN information */
8172
    DE_NAS_5GS_MM_ALT_NSSAI,                 /* 9.11.3.97    Alternative NSSAI */
8173
    DE_NAS_5GS_MM_TYPE_6_IE_CONT,            /* 9.11.3.98    Type 6 IE container */
8174
    DE_NAS_5GS_MM_N3GPP_ACC_PATH_SWITCH_IND, /* 9.11.9.99    Non-3GPP access path switching indication */
8175
    DE_NAS_5GS_MM_S_NSSAI_LOC_VALID_INFO,    /* 9.11.3.100   S-NSSAI location validity information */
8176
    DE_NAS_5GS_MM_S_NSSAI_TIME_VALID_INFO,   /* 9.11.3.101   S-NSSAI time validity information */
8177
    DE_NAS_5GS_MM_N3GPP_PATH_SWITCH_INFO,    /* 9.11.3.102   Non-3GPP path switching information */
8178
    DE_NAS_5GS_MM_PARTIAL_NSSAI,             /* 9.11.3.103   Partial NSSAI */
8179
    DE_NAS_5GS_MM_AU3N_IND,                  /* 9.11.3.104   AUN3 indication */
8180
    DE_NAS_5GS_MM_FEAT_AUTH_IND,             /* 9.11.3.105   Feature authorization indication */
8181
    DE_NAS_5GS_MM_PAYLOAD_CONT_INFO,         /* 9.11.3.106   Payload container information */
8182
    DE_NAS_5GS_MM_AUN3_DEVICE_SEC_KEY,       /* 9.11.3.107   AUN3 device security key */
8183
    DE_NAS_5GS_MM_ON_DEMAND_NSSAI,           /* 9.11.3.108   On-demand NSSAI */
8184
    DE_NAS_5GS_MM_EXT_5GMM_CAUSE,            /* 9.11.3.109   Extended 5GMM cause */
8185
    DE_NAS_5GS_MM_LP_WUSPS_ASSIST_INFO,      /* 9.11.3.111   LP-WUSPS assistance information */
8186
    DE_NAS_5GS_MM_LP_WUS_STATUS,             /* 9.11.3.112   LP-WUS status */
8187
8188
    DE_NAS_5GS_MM_NONE        /* NONE */
8189
}
8190
nas_5gs_mm_elem_idx_t;
8191
#endif
8192
8193
static const value_string nas_5gs_mm_elem_strings[] = {
8194
    { DE_NAS_5GS_MM_5GMM_CAP,                   "5GMM capability" },                    /* 9.11.3.1     5GMM capability*/
8195
    { DE_NAS_5GS_MM_5GMM_CAUSE,                 "5GMM cause" },                         /* 9.11.3.2     5GMM cause*/
8196
    { DE_NAS_5GS_MM_5GS_DRX_PARAM,              "5GS DRX parameters" },                 /* 9.11.3.2A    5GS DRX parameters*/
8197
    { DE_NAS_5GS_MM_5GS_IDENTITY_TYPE,          "5GS identity type" },                  /* 9.11.3.3     5GS identity type*/
8198
    { DE_NAS_5GS_MM_5GS_MOBILE_ID,              "5GS mobile identity" },                /* 9.11.3.4     5GS mobile identity*/
8199
    { DE_NAS_5GS_MM_5GS_NW_FEAT_SUP,            "5GS network feature support" },        /* 9.11.3.5     5GS network feature support*/
8200
    { DE_NAS_5GS_MM_5GS_REG_RES,                "5GS registration result" },            /* 9.11.3.6     5GS registration result*/
8201
    { DE_NAS_5GS_MM_5GS_REG_TYPE,               "5GS registration type" },              /* 9.11.3.7     5GS registration type*/
8202
    { DE_NAS_5GS_MM_5GS_TA_ID,                  "5GS tracking area identity" },         /* 9.11.3.8     5GS tracking area identity */
8203
    { DE_NAS_5GS_MM_5GS_TA_ID_LIST,             "5GS tracking area identity list" },    /* 9.11.3.9     5GS tracking area identity list*/
8204
    { DE_NAS_5GS_MM_UPDATE_TYPE,                "5GS update type" },                    /* 9.11.3.9A    5GS update type */
8205
    { DE_NAS_5GS_MM_ABBA,                       "ABBA" },                               /* 9.11.3.10    ABBA */
8206
                                                                                        /* 9.11.3.11    Void */
8207
    { DE_NAS_5GS_MM_ADD_5G_SEC_INF,             "Additional 5G security information" }, /* 9.11.3.12    Additional 5G security information */
8208
    { DE_NAS_5GS_MM_ADD_INF_REQ,                "Additional information requested" },   /* 9.11.3.12A   Additional information requested */
8209
    { DE_NAS_5GS_MM_ALLOW_PDU_SES_STS,          "Allowed PDU session status" },         /* 9.11.3.13    Allowed PDU session status*/
8210
    { DE_NAS_5GS_MM_AUT_FAIL_PAR,               "Authentication failure parameter" },   /* 9.11.3.14    Authentication failure parameter*/
8211
    { DE_NAS_5GS_MM_AUT_PAR_AUTN,               "Authentication parameter AUTN" },      /* 9.11.3.15    Authentication parameter AUTN*/
8212
    { DE_NAS_5GS_MM_AUT_PAR_RAND,               "Authentication parameter RAND" },      /* 9.11.3.16    Authentication parameter RAND*/
8213
    { DE_NAS_5GS_MM_AUT_RESP_PAR,               "Authentication response parameter" },  /* 9.11.3.17    Authentication response parameter*/
8214
    { DE_NAS_5GS_MM_CONF_UPD_IND,               "Configuration update indication" },    /* 9.11.3.18    Configuration update indication*/
8215
    { DE_NAS_5GS_MM_CAG_INFORMATION_LIST,       "CAG information list" },               /* 9.11.3.18A   CAG information list*/
8216
    { DE_NAS_5GS_MM_CIOT_SMALL_DATA_CONT,       "CIoT small data container" },          /* 9.11.3.18B   CIoT small data container */
8217
    { DE_NAS_5GS_MM_CIPHERING_KEY_DATA,         "Ciphering key data" },                 /* 9.11.3.18C   Ciphering key data*/
8218
    { DE_NAS_5GS_MM_CTRL_PLANE_SERVICE_TYPE,    "Control plane service type" },         /* 9.11.3.18D   Control plane service type*/
8219
    { DE_NAS_5GS_MM_DLGT_SAVING_TIME,           "Daylight saving time" },               /* 9.11.3.19    Daylight saving time*/
8220
    { DE_NAS_5GS_MM_DE_REG_TYPE,                "De-registration type" },               /* 9.11.3.20    De-registration type*/
8221
                                                                                        /* 9.11.3.21    Void */
8222
                                                                                        /* 9.11.3.22    Void*/
8223
    { DE_NAS_5GS_MM_EMRG_NR_LIST,               "Emergency number list" },              /* 9.11.3.23    Emergency number list*/
8224
    { DE_NAS_5GS_MM_EPS_BEARER_CTX_STATUS,      "EPS bearer context status" },          /* 9.11.3.23A   EPS bearer context status */
8225
    { DE_NAS_5GS_MM_EPS_NAS_MSG_CONT,           "EPS NAS message container" },          /* 9.11.3.24    EPS NAS message container*/
8226
    { DE_NAS_5GS_MM_EPS_NAS_SEC_ALGO,           "EPS NAS security algorithms" },        /* 9.11.3.25    EPS NAS security algorithms*/
8227
    { DE_NAS_5GS_MM_EXT_EMERG_NUM_LIST,         "Extended emergency number list" },     /* 9.11.3.26    Extended emergency number list */
8228
    { DE_NAS_5GS_MM_EXTENDED_DRX_PARAMETERS,    "Extended DRX parameters" },            /* 9.11.3.26A   Extended DRX parameters */
8229
                                                                                        /* 9.11.3.27    Void*/
8230
    { DE_NAS_5GS_MM_IMEISV_REQ,                 "IMEISV request" },                     /* 9.11.3.28    IMEISV request*/
8231
    { DE_NAS_5GS_MM_LADN_INDIC,                 "LADN indication" },                    /* 9.11.3.29    LADN indication*/
8232
    { DE_NAS_5GS_MM_LADN_INF,                   "LADN information" },                   /* 9.11.3.30    LADN information*/
8233
    { DE_NAS_5GS_MM_MICO_IND,                   "MICO indication" },                    /* 9.11.3.31    MICO indication*/
8234
    { DE_NAS_5GS_MM_MA_PDU_SES_INF,             "MA PDU session information" },         /* 9.11.3.31A   MA PDU session information */
8235
    { DE_NAS_5GS_MM_MAPPED_NSSAI,               "Mapped NSSAI" },                       /* 9.11.3.31B   Mapped NSSAI */
8236
    { DE_NAS_5GS_MM_MOBILE_STATION_CLSMK_2,     "Mobile station classmark 2" },         /* 9.11.3.31C   Mobile station classmark 2 */
8237
    { DE_NAS_5GS_MM_NAS_KEY_SET_ID,             "NAS key set identifier" },             /* 9.11.3.32    NAS key set identifier*/
8238
    { DE_NAS_5GS_MM_NAS_KEY_SET_ID_H1,          "NAS key set identifier" },             /* 9.11.3.32    NAS key set identifier*/
8239
    { DE_NAS_5GS_MM_NAS_MSG_CONT,               "NAS message container" },              /* 9.11.3.33    NAS message container*/
8240
    { DE_NAS_5GS_MM_NAS_SEC_ALGO,               "NAS security algorithms" },            /* 9.11.3.34    NAS security algorithms*/
8241
    { DE_NAS_5GS_MM_NW_NAME,                    "Network name" },                       /* 9.11.3.35    Network name*/
8242
    { DE_NAS_5GS_MM_NW_SLICING_IND,             "Network slicing indication" },         /* 9.11.3.36    Network slicing indication */
8243
    { DE_NAS_5GS_MM_NW_NON_3GPP_NW_PROV_POL,    "Non-3GPP NW provided policies" },      /* 9.11.3.36A   Non-3GPP NW provided policies */
8244
    { DE_NAS_5GS_MM_NSSAI,                      "NSSAI" },                              /* 9.11.3.37    NSSAI*/
8245
    { DE_NAS_5GS_MM_NSSAI_INC_MODE,             "NSSAI inclusion mode" },               /* 9.11.3.37A   NSSAI inclusion mode */
8246
    { DE_NAS_5GS_MM_OP_DEF_ACC_CAT_DEF,         "Operator-defined access category definitions" },/* 9.11.3.38    Operator-defined access category definitions */
8247
8248
    { DE_NAS_5GS_MM_PLD_CONT,                   "Payload container" },                  /* 9.11.3.39    Payload container*/
8249
    { DE_NAS_5GS_MM_PLD_CONT_TYPE,              "Payload container type" },             /* 9.11.3.40    Payload container type*/
8250
    { DE_NAS_5GS_MM_PDU_SES_ID_2,               "PDU session identity 2" },             /* 9.11.3.42    PDU session identity 2*/
8251
    { DE_NAS_5GS_MM_PDU_SES_REACT_RES,          "PDU session reactivation result" },    /* 9.11.3.43    PDU session reactivation result*/
8252
    { DE_NAS_5GS_MM_PDU_SES_REACT_RES_ERR_C,    "PDU session reactivation result error cause" },    /* 9.11.3.43    PDU session reactivation result error cause*/
8253
    { DE_NAS_5GS_MM_PDU_SES_STATUS,             "PDU session status" },                 /* 9.11.3.44    PDU session status*/
8254
    { DE_NAS_5GS_MM_PLMN_LIST,                  "PLMN list" },                          /* 9.11.3.45    PLMN list*/
8255
    { DE_NAS_5GS_MM_REJ_NSSAI,                  "Rejected NSSAI" },                     /* 9.11.3.46    Rejected NSSAI*/
8256
    { DE_NAS_5GS_MM_REL_ASS_IND,                "Release assistance indication" },      /* 9.11.3.46A   Release assistance indication*/
8257
    { DE_NAS_5GS_MM_REQ_TYPE,                   "Request type" },                       /* 9.11.3.47    Request type*/
8258
    { DE_NAS_5GS_MM_S1_UE_NW_CAP,               "S1 UE network capability" },           /* 9.11.3.48    S1 UE network capability*/
8259
    { DE_NAS_5GS_MM_S1_UE_SEC_CAP,              "S1 UE security capability" },          /* 9.11.3.48A   S1 UE security capability*/
8260
    { DE_NAS_5GS_MM_SAL,                        "Service area list" },                  /* 9.11.3.49    Service area list*/
8261
    { DE_NAS_5GS_MM_SERV_TYPE,                  "Service type" },                       /* 9.11.3.50    Service type*/
8262
    { DE_NAS_5GS_MM_SMS_IND,                    "SMS indication" },                     /* 9.11.3.50A   SMS indication */
8263
    { DE_NAS_5GS_MM_SOR_TRANSP_CONT,            "SOR transparent container" },          /* 9.11.3.51    SOR transparent container */
8264
    { DE_NAS_5GS_MM_SUPPORTED_CODEC_LIST,       "Supported codec list" },               /* 9.11.3.51A   Supported codec list */
8265
    { DE_NAS_5GS_MM_TZ,                         "Time zone" },                          /* 9.11.3.52    Time zone*/
8266
    { DE_NAS_5GS_MM_TZ_AND_T,                   "Time zone and time" },                 /* 9.11.3.53    Time zone and time*/
8267
    { DE_NAS_5GS_MM_UE_PAR_UPD_TRANSP_CONT,     "UE parameters update transparent container" }, /* 9.11.3.53A   UE parameters update transparent container */
8268
    { DE_NAS_5GS_MM_UE_SEC_CAP,                 "UE security capability" },             /* 9.11.3.54    UE security capability*/
8269
    { DE_NAS_5GS_MM_UE_USAGE_SET,               "UE's usage setting" },                 /* 9.11.3.55    UE's usage setting*/
8270
    { DE_NAS_5GS_MM_UE_STATUS,                  "UE status" },                          /* 9.11.3.56    UE status*/
8271
    { DE_NAS_5GS_MM_UL_DATA_STATUS,             "Uplink data status" },                 /* 9.11.3.57    Uplink data status*/
8272
    { DE_NAS_5GS_MM_UE_RADIO_CAP_ID,            "UE radio capability ID" },             /* 9.11.3.68    UE radio capability ID*/
8273
    { DE_NAS_5GS_MM_UE_RADIO_CAP_ID_DEL_IND,    "UE radio capability ID deletion indication" },/* 9.11.3.69    UE radio capability ID deletion indication*/
8274
    { DE_NAS_5GS_MM_TRUNCATED_5G_S_TMSI_CONF,   "Truncated 5G-S-TMSI configuration" },  /* 9.11.3.70    Truncated 5G-S-TMSI configuration*/
8275
    { DE_NAS_5GS_MM_WUS_ASSISTANCE_INF,         "WUS assistance information" },         /* 9.11.3.71    WUS assistance information*/
8276
    { DE_NAS_5GS_MM_N5GC_INDICATION,            "N5GC indication" },                    /* 9.11.3.72    N5GC indication*/
8277
    { DE_NAS_5GS_MM_NB_N1_MODE_DRX_PARS,        "NB-N1 mode DRX parameters" },          /* 9.11.3.73    NB-N1 mode DRX parameters*/
8278
    { DE_NAS_5GS_MM_ADDITIONAL_CONF_IND,        "Additional configuration indication" },/* 9.11.3.74    Additional configuration indication*/
8279
    { DE_NAS_5GS_MM_EXTENDED_REJECTED_NSSAI,    "Extended rejected NSSAI" },            /* 9.11.3.75    Extended rejected NSSAI*/
8280
    { DE_NAS_5GS_MM_UE_REQUEST_TYPE,            "UE request type" },                    /* 9.11.3.76    UE request type */
8281
    { DE_NAS_5GS_MM_PAGING_RESTRICTION,         "Paging restriction" },                 /* 9.11.3.77    Paging restriction */
8282
    { DE_NAS_5GS_MM_NID,                        "NID" },                                /* 9.11.3.79    NID */
8283
    { DE_NAS_5GS_MM_PEIPS_ASSIST_INFO,          "PEIPS assistance information" },       /* 9.11.3.80    PEIPS assistance information */
8284
    { DE_NAS_5GS_MM_5GS_ADD_REQ_RES,            "5GS additional request result" },      /* 9.11.3.81    5GS additional request result */
8285
    { DE_NAS_5GS_MM_NSSRG_INFO,                 "NSSRG information" },                  /* 9.11.3.82    NSSRG information */
8286
    { DE_NAS_5GS_MM_PLMNS_LIST_DISASTER_COND,   "List of PLMNs to be used in disaster condition" },/* 9.11.3.83    List of PLMNs to be used in disaster condition */
8287
    { DE_NAS_5GS_MM_REG_WAIT_RANGE,             "Registration wait range" },            /* 9.11.3.84    Registration wait range */
8288
    { DE_NAS_5GS_MM_PLMN_ID,                    "PLMN identity" },                      /* 9.11.3.85    PLMN identity */
8289
    { DE_NAS_5GS_MM_EXT_CAG_INFO_LIST,          "Extended CAG information list" },      /* 9.11.3.86    Extended CAG information list */
8290
    { DE_NAS_5GS_MM_NSAG_INFO,                  "NSAG information" },                   /* 9.11.3.87    NSAG information */
8291
    { DE_NAS_5GS_MM_PROSE_RELAY_TRANS_ID,       "ProSe relay transaction identity" },   /* 9.11.3.88    ProSe relay transaction identity */
8292
    { DE_NAS_5GS_MM_RELAY_KEY_REQ_PARAMS,       "Relay key request parameters" },       /* 9.11.3.89    Relay key request parameters */
8293
    { DE_NAS_5GS_MM_RELAY_KEY_RESP_PARAMS,      "Relay key response parameters" },      /* 9.11.3.90    Relay key response parameters */
8294
    { DE_NAS_5GS_MM_PRIO_IND,                   "Priority indicator" },                 /* 9.11.3.91    Priority indicator */
8295
    { DE_NAS_5GS_MM_SNPN_LIST,                  "SNPN list" },                          /* 9.11.3.92    SNPN list */
8296
    { DE_NAS_5GS_MM_N3IWF_ID,                   "N3IWF identifier" },                   /* 9.11.3.93    N3IWF identifier */
8297
    { DE_NAS_5GS_MM_TNAN_INFO,                  "TNAN information" },                   /* 9.11.3.94    TNAN information */
8298
    { DE_NAS_5GS_MM_RAN_TIMING_SYNC,            "RAN timing synchronization" },         /* 9.11.3.95    RAN timing synchronization */
8299
    { DE_NAS_5GS_MM_EXT_LADN_INFO,              "Extended LADN information" },          /* 9.11.3.96    Extended LADN information */
8300
    { DE_NAS_5GS_MM_ALT_NSSAI,                  "Alternative NSSAI" },                  /* 9.11.3.97    Alternative NSSAI */
8301
    { DE_NAS_5GS_MM_TYPE_6_IE_CONT,             "Type 6 IE container" },                /* 9.11.3.98    Type 6 IE container */
8302
    { DE_NAS_5GS_MM_N3GPP_ACC_PATH_SWITCH_IND,  "Non-3GPP access path switching indication" },/* 9.11.9.99    Non-3GPP access path switching indication */
8303
    { DE_NAS_5GS_MM_S_NSSAI_LOC_VALID_INFO,     "S-NSSAI location validity information" },/* 9.11.3.100   S-NSSAI location validity information */
8304
    { DE_NAS_5GS_MM_S_NSSAI_TIME_VALID_INFO,    "S-NSSAI time validity information" },  /* 9.11.3.101   S-NSSAI time validity information */
8305
    { DE_NAS_5GS_MM_N3GPP_PATH_SWITCH_INFO,     "Non-3GPP path switching information" },/* 9.11.3.102   Non-3GPP path switching information */
8306
    { DE_NAS_5GS_MM_PARTIAL_NSSAI,              "Partial NSSAI" },                      /* 9.11.3.103   Partial NSSAI */
8307
    { DE_NAS_5GS_MM_AU3N_IND,                   "AUN3 indication" },                    /* 9.11.3.104   AUN3 indication */
8308
    { DE_NAS_5GS_MM_FEAT_AUTH_IND,              "Feature authorization indication" },   /* 9.11.3.105   Feature authorization indication */
8309
    { DE_NAS_5GS_MM_PAYLOAD_CONT_INFO,          "Payload container information" },      /* 9.11.3.106   Payload container information */
8310
    { DE_NAS_5GS_MM_AUN3_DEVICE_SEC_KEY,        "AUN3 device security key" },           /* 9.11.3.107   AUN3 device security key */
8311
    { DE_NAS_5GS_MM_ON_DEMAND_NSSAI,            "On-demand NSSAI" },                    /* 9.11.3.108   On-demand NSSAI */
8312
    { DE_NAS_5GS_MM_EXT_5GMM_CAUSE,             "Extended 5GMM cause" },                /* 9.11.3.109   Extended 5GMM cause */
8313
    { DE_NAS_5GS_MM_LP_WUSPS_ASSIST_INFO,       "LP-WUSPS assistance information" },    /* 9.11.3.111   LP-WUSPS assistance information */
8314
    { DE_NAS_5GS_MM_LP_WUS_STATUS,              "LP-WUS status" },                      /* 9.11.3.112   LP-WUS status */
8315
8316
    { 0, NULL }
8317
};
8318
value_string_ext nas_5gs_mm_elem_strings_ext = VALUE_STRING_EXT_INIT(nas_5gs_mm_elem_strings);
8319
8320
1.88k
#define NUM_NAS_5GS_MM_ELEM array_length(nas_5gs_mm_elem_strings)
8321
int ett_nas_5gs_mm_elem[NUM_NAS_5GS_MM_ELEM];
8322
8323
uint16_t(* const nas_5gs_mm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
8324
    uint32_t offset, unsigned len,
8325
    char *add_string, int string_len) = {
8326
        /*  9.11.3    5GS mobility management (5GMM) information elements */
8327
        de_nas_5gs_mm_5gmm_cap,                  /* 9.11.3.1     5GMM capability*/
8328
        de_nas_5gs_mm_5gmm_cause,                /* 9.11.3.2     5GMM cause*/
8329
        de_nas_5gs_mm_5gs_drx_param,             /* 9.11.3.2A    5GS DRX parameters*/
8330
        de_nas_5gs_mm_5gs_identity_type,         /* 9.11.3.3     5GS identity type*/
8331
        de_nas_5gs_mm_5gs_mobile_id,             /* 9.11.3.4     5GS mobile identity*/
8332
        de_nas_5gs_mm_5gs_nw_feat_sup,           /* 9.11.3.5     5GS network feature support*/
8333
        de_nas_5gs_mm_5gs_reg_res,               /* 9.11.3.6     5GS registration result*/
8334
        de_nas_5gs_mm_5gs_reg_type,              /* 9.11.3.7     5GS registration type*/
8335
        de_nas_5gs_mm_5gs_ta_id,                 /* 9.11.3.8     5GS tracking area identity */
8336
        de_nas_5gs_mm_5gs_ta_id_list,            /* 9.11.3.9     5GS tracking area identity list */
8337
        de_nas_5gs_mm_update_type,               /* 9.11.3.9A    5GS update type */
8338
        de_nas_5gs_mm_abba,                      /* 9.11.3.10    ABBA */
8339
                                                 /* 9.11.3.11    Void */
8340
        de_nas_5gs_mm_add_5g_sec_inf,            /* 9.11.3.12    Additional 5G security information */
8341
        de_nas_5gs_mm_add_inf_req,               /* 9.11.3.12A   Additional information requested */
8342
        de_nas_5gs_mm_allow_pdu_ses_sts,         /* 9.11.3.13    Allowed PDU session status*/
8343
        NULL,                                    /* 9.11.3.14    Authentication failure parameter */
8344
        NULL,                                    /* 9.11.3.15    Authentication parameter AUTN*/
8345
        NULL,                                    /* 9.11.3.16    Authentication parameter RAND*/
8346
        NULL,                                    /* 9.11.3.17    Authentication response parameter */
8347
        de_nas_5gs_mm_conf_upd_ind,              /* 9.11.3.18    Configuration update indication*/
8348
        de_nas_5gs_mm_cag_information_list,      /* 9.11.3.18A   CAG information list*/
8349
        de_nas_5gs_mm_ciot_small_data_cont,      /* 9.11.3.18B   CIoT small data container */
8350
        de_nas_5gs_mm_ciphering_key_data,        /* 9.11.3.18C   Ciphering key data*/
8351
        de_nas_5gs_mm_ctrl_plane_service_type,   /* 9.11.3.18D   Control plane service type*/
8352
8353
        NULL,                                    /* 9.11.3.19    Daylight saving time*/
8354
        de_nas_5gs_mm_de_reg_type,               /* 9.11.3.20    De-registration type*/
8355
                                                 /* 9.11.3.21    Void */
8356
                                                 /* 9.11.3.22    Void*/
8357
        NULL,                                    /* 9.11.3.23    Emergency number list*/
8358
        NULL,                                    /* 9.11.3.23A   EPS bearer context status */
8359
        de_nas_5gs_mm_eps_nas_msg_cont,          /* 9.11.3.24    EPS NAS message container*/
8360
        NULL,                                    /* 9.11.3.25    EPS NAS security algorithms*/
8361
        NULL,                                    /* 9.11.3.26    Extended emergency number list*/
8362
        NULL,                                    /* 9.11.3.26A   Extended DRX parameters */
8363
                                                 /* 9.11.3.27    Void*/
8364
        NULL,                                    /* 9.11.3.28    IMEISV request*/
8365
        de_nas_5gs_mm_ladn_indic,                /* 9.11.3.29    LADN indication*/
8366
        de_nas_5gs_mm_ladn_inf,                  /* 9.11.3.30    LADN information*/
8367
        de_nas_5gs_mm_mico_ind,                  /* 9.11.3.31    MICO indication*/
8368
        de_nas_5gs_mm_ma_pdu_ses_inf,            /* 9.11.3.31A   MA PDU session information */
8369
        de_nas_5gs_mm_mapped_nssai,              /* 9.11.3.31B   Mapped NSSAI */
8370
        NULL,                                    /* 9.11.3.31C   Mobile station classmark 2 */
8371
8372
        de_nas_5gs_mm_nas_key_set_id,            /* 9.11.3.32    NAS key set identifier*/
8373
        de_nas_5gs_mm_nas_key_set_id_h1,         /* 9.11.3.32    NAS key set identifier*/
8374
        de_nas_5gs_mm_nas_msg_cont,              /* 9.11.3.33    NAS message container*/
8375
        de_nas_5gs_mm_nas_sec_algo,              /* 9.11.3.34    NAS security algorithms*/
8376
        NULL,                                    /* 9.11.3.35    Network name*/
8377
        de_nas_5gs_mm_nw_slicing_ind,            /* 9.11.3.36    Network slicing indication */
8378
        NULL,                                    /* 9.11.3.36A   Non-3GPP NW provided policies */
8379
        de_nas_5gs_mm_nssai,                     /* 9.11.3.37    NSSAI*/
8380
        de_nas_5gs_mm_nssai_inc_mode,            /* 9.11.3.37A   NSSAI inclusion mode */
8381
        de_nas_5gs_mm_op_def_acc_cat_def,        /* 9.11.3.38    Operator-defined access category definitions */
8382
        de_nas_5gs_mm_pld_cont,                  /* 9.11.3.39    Payload container*/
8383
        de_nas_5gs_mm_pld_cont_type,             /* 9.11.3.40    Payload container type*/
8384
        de_nas_5gs_mm_pdu_ses_id_2,              /* 9.11.3.41    PDU session identity 2*/
8385
        de_nas_5gs_mm_pdu_ses_react_res,         /* 9.11.3.42    PDU session reactivation result*/
8386
        de_nas_5gs_mm_pdu_ses_react_res_err_c,   /* 9.11.3.43    PDU session reactivation result error cause */
8387
        de_nas_5gs_mm_pdu_ses_status,            /* 9.11.3.44    PDU session status*/
8388
        NULL,                                    /* 9.11.3.45    PLMN list*/
8389
        de_nas_5gs_mm_rej_nssai,                 /* 9.11.3.46    Rejected NSSAI*/
8390
        NULL,                                    /* 9.11.3.46A   Release assistance indication*/
8391
        de_nas_5gs_mm_req_type,                  /* 9.11.3.47    Request type*/
8392
        NULL,                                    /* 9.11.3.48    S1 UE network capability*/
8393
        NULL,                                    /* 9.11.3.48A   S1 UE security capability*/
8394
        de_nas_5gs_mm_sal,                       /* 9.11.3.49    Service area list*/
8395
        de_nas_5gs_mm_serv_type,                 /* 9.11.3.50    Service type*/
8396
        de_nas_5gs_mm_sms_ind,                   /* 9.11.3.50A   SMS indication */
8397
        de_nas_5gs_mm_sor_transp_cont,           /* 9.11.3.51    SOR transparent container */
8398
        NULL,                                    /* 9.11.3.51A   Supported codec list */
8399
        NULL,                                    /* 9.11.3.52    Time zone*/
8400
        NULL,                                    /* 9.11.3.53    Time zone and time*/
8401
        de_nas_5gs_mm_ue_par_upd_transp_cont,    /* 9.11.3.53A   UE parameters update transparent container */
8402
        de_nas_5gs_mm_ue_sec_cap,                /* 9.11.3.54    UE security capability*/
8403
        de_nas_5gs_mm_ue_usage_set,              /* 9.11.3.55    UE's usage setting*/
8404
        de_nas_5gs_mm_ue_status,                 /* 9.11.3.56    UE status*/
8405
        de_nas_5gs_mm_ul_data_status,            /* 9.11.3.57    Uplink data status*/
8406
        de_nas_5gs_mm_ue_radio_cap_id,           /* 9.11.3.68    UE radio capability ID*/
8407
        de_nas_5gs_mm_ue_radio_cap_id_del_ind,   /* 9.11.3.69    UE radio capability ID deletion indication*/
8408
        de_nas_5gs_mm_truncated_5g_s_tmsi_conf,  /* 9.11.3.70    Truncated 5G-S-TMSI configuration*/
8409
        NULL,                                    /* 9.11.3.71    WUS assistance information*/
8410
        de_nas_5gs_mm_n5gc_indication,           /* 9.11.3.72    N5GC indication*/
8411
        de_nas_5gs_mm_nb_n1_mode_drx_pars,       /* 9.11.3.73    NB-N1 mode DRX parameters*/
8412
        de_nas_5gs_mm_additional_conf_ind,       /* 9.11.3.74    Additional configuration indication*/
8413
        de_nas_5gs_mm_extended_rejected_nssai,   /* 9.11.3.75    Extended rejected NSSAI*/
8414
        NULL,                                    /* 9.11.3.76    UE request type */
8415
        de_nas_5gs_mm_paging_restriction,        /* 9.11.3.77    Paging restriction */
8416
        de_nas_5gs_mm_nid,                       /* 9.11.3.79    NID */
8417
        de_nas_5gs_mm_peips_assist_info,         /* 9.11.3.80    PEIPS assistance information */
8418
        de_nas_5gs_mm_5gs_add_req_res,           /* 9.11.3.81    5GS additional request result */
8419
        de_nas_5gs_mm_nssrg_info,                /* 9.11.3.82    NSSRG information */
8420
        de_nas_5gs_mm_plmns_list_disaster_cond,  /* 9.11.3.83    List of PLMNs to be used in disaster condition */
8421
        de_nas_5gs_mm_reg_wait_range,            /* 9.11.3.84    Registration wait range */
8422
        de_nas_5gs_mm_plmn_id,                   /* 9.11.3.85    PLMN identity */
8423
        de_nas_5gs_mm_ext_cag_info_list,         /* 9.11.3.86    Extended CAG information list */
8424
        de_nas_5gs_mm_nsag_info,                 /* 9.11.3.87    NSAG information */
8425
        de_nas_5gs_mm_prose_relay_trans_id,      /* 9.11.3.88    ProSe relay transaction identity */
8426
        de_nas_5gs_mm_relay_key_req_params,      /* 9.11.3.89    Relay key request parameters */
8427
        de_nas_5gs_mm_relay_key_resp_params,     /* 9.11.3.90    Relay key response parameters */
8428
        de_nas_5gs_mm_prio_ind,                  /* 9.11.3.91    Priority indicator */
8429
        de_nas_5gs_mm_snpn_list,                 /* 9.11.3.92    SNPN list */
8430
        de_nas_5gs_mm_n3iwf_id,                  /* 9.11.3.93    N3IWF identifier */
8431
        de_nas_5gs_mm_tnan_info,                 /* 9.11.3.94    TNAN information */
8432
        de_nas_5gs_mm_ran_timing_sync,           /* 9.11.3.95    RAN timing synchronization */
8433
        de_nas_5gs_mm_ext_ladn_info,             /* 9.11.3.96    Extended LADN information */
8434
        de_nas_5gs_mm_alt_nssai,                 /* 9.11.3.97    Alternative NSSAI */
8435
        de_nas_5gs_mm_type_6_ie_cont,            /* 9.11.3.98    Type 6 IE container */
8436
        de_nas_5gs_mm_n3gpp_acc_path_switch_ind, /* 9.11.9.99    Non-3GPP access path switching indication */
8437
        de_nas_5gs_mm_s_nssai_loc_valid_info,    /* 9.11.3.100   S-NSSAI location validity information */
8438
        de_nas_5gs_mm_s_nssai_time_valid_info,   /* 9.11.3.101   S-NSSAI time validity information */
8439
        de_nas_5gs_mm_n3gpp_path_switch_info,    /* 9.11.3.102   Non-3GPP path switching information */
8440
        de_nas_5gs_mm_partial_nssai,             /* 9.11.3.103   Partial NSSAI */
8441
        de_nas_5gs_mm_au3n_ind,                  /* 9.11.3.104   AUN3 indication */
8442
        de_nas_5gs_mm_feat_auth_ind,             /* 9.11.3.105   Feature authorization indication */
8443
        de_nas_5gs_mm_payload_cont_info,         /* 9.11.3.106   Payload container information */
8444
        de_nas_5gs_mm_aun3_device_sec_key,       /* 9.11.3.107   AUN3 device security key */
8445
        de_nas_5gs_mm_on_demand_nssai,           /* 9.11.3.108   On-demand NSSAI */
8446
        de_nas_5gs_mm_ext_5gmm_cause,            /* 9.11.3.109   Extended 5GMM cause */
8447
        de_nas_5gs_mm_lp_wusps_assist_info,      /* 9.11.3.111   LP-WUSPS assistance information */
8448
        de_nas_5gs_mm_lp_wus_status,             /* 9.11.3.112   LP-WUS status */
8449
8450
        NULL,   /* NONE */
8451
};
8452
8453
8454
/*
8455
 * 9.11.4    5GS session management (5GSM) information elements
8456
 */
8457
8458
typedef enum
8459
{
8460
8461
    DE_NAS_5GS_SM_5GSM_CAP,                 /* 9.11.4.1    5GSM capability */
8462
    DE_NAS_5GS_SM_5GSM_CAUSE,               /* 9.11.4.2    5GSM cause */
8463
    DE_NAS_5GS_SM_ALWAYS_ON_PDU_SES_IND,    /* 9.11.4.3    Always-on PDU session indication */
8464
    DE_NAS_5GS_SM_ALWAYS_ON_PDU_SES_REQ,    /* 9.11.4.4    Always-on PDU session requested */
8465
    DE_NAS_5GS_SM_5GSM_ALLOWED_SSC_MODE,    /* 9.11.4.5    Allowed SSC mode */
8466
    DE_NAS_5GS_SM_EXT_PROT_CONF_OPT,        /* 9.11.4.6    Extended protocol configuration options */
8467
    DE_NAS_5GS_SM_INT_PROT_MAX_DATA_RTE,    /* 9.11.4.7    Integrity protection maximum data rate */
8468
    DE_NAS_5GS_SM_MAPPED_EPS_B_CONT,        /* 9.11.4.8    Mapped EPS bearer contexts */
8469
    DE_NAS_5GS_SM_MAX_NUM_SUP_PKT_FLT,      /* 9.11.4.9    Maximum number of supported packet filters */
8470
    DE_NAS_5GS_SM_PDU_ADDRESS,              /* 9.11.4.10   PDU address */
8471
    DE_NAS_5GS_SM_PDU_SESSION_TYPE,         /* 9.11.4.11   PDU session type */
8472
    DE_NAS_5GS_SM_QOS_FLOW_DES,             /* 9.11.4.12   QoS flow descriptions */
8473
    DE_NAS_5GS_SM_QOS_RULES,                /* 9.11.4.13   QoS rules */
8474
    DE_NAS_5GS_SM_SESSION_AMBR,             /* 9.11.4.14   Session-AMBR */
8475
    DE_NAS_5GS_SM_PDU_DN_REQ_CONT,          /* 9.11.4.15   SM PDU DN request container */
8476
    DE_NAS_5GS_SM_SSC_MODE,                 /* 9.11.4.16   SSC mode */
8477
    DE_NAS_5GS_SM_RE_ATTEMPT_IND,           /* 9.11.4.17   Re-attempt indicator */
8478
    DE_NAS_5GS_SM_5GSM_NW_FEATURE_SUP,      /* 9.11.4.18   5GSM network feature support */
8479
                                            /* 9.11.4.19   Void */
8480
    DE_NAS_5GS_SM_SERVING_PLMN_RTE_CTL,     /* 9.11.4.20   Serving PLMN rate control */
8481
    DE_NAS_5GS_SM_5GSM_CONG_RE_ATTEMPT_IND, /* 9.11.4.21   5GSM congestion re-attempt indicator */
8482
    DE_NAS_5GS_SM_ATSSS_CONT,               /* 9.11.4.22   ATSSS container */
8483
    DE_NAS_5GS_SM_CTL_PLANE_ONLY_IND,       /* 9.11.4.23   Control plane only indication */
8484
    DE_NAS_5GS_SM_IP_HDR_COMP_CONF,         /* 9.11.4.24   IP header compression configuration */
8485
    DE_NAS_5GS_SM_DS_TT_ETH_PORT_MAC_ADDR,  /* 9.11.4.25   DS-TT Ethernet port MAC address */
8486
    DE_NAS_5GS_SM_UE_DS_TT_RESIDENCE_T,     /* 9.11.4.26   UE-DS-TT residence time */
8487
    DE_NAS_5GS_SM_PORT_MGNT_INF_CONT,       /* 9.11.4.27   Port management information container */
8488
    DE_NAS_5GS_SM_ETH_HDR_COMP_CONF,        /* 9.11.4.28   Ethernet header compression configuration */
8489
    DE_NAS_5GS_SM_REMOTE_UE_CTX_LIST,       /* 9.11.4.29   Remote UE context list */
8490
    DE_NAS_5GS_SM_REQ_MBS_CONT,             /* 9.11.4.30   Requested MBS container */
8491
    DE_NAS_5GS_SM_REC_MBS_CONT,             /* 9.11.4.31   Received MBS container */
8492
    DE_NAS_5GS_SM_PDU_SESSION_PAIR_ID,      /* 9.11.4.32   PDU session pair ID */
8493
    DE_NAS_5GS_SM_RSN,                      /* 9.11.4.33   RSN */
8494
    DE_NAS_5GS_SM_N3QAI,                    /* 9.11.4.36   N3QAI */
8495
    DE_NAS_5GS_SM_N3GPP_DELAY_BUDGET,       /* 9.11.4.37   Non-3GPP delay budget */
8496
    DE_NAS_5GS_SM_URSP_RULE_ENFORCE_REPORTS,/* 9.11.4.38   URSP rule enforcement reports */
8497
    DE_NAS_5GS_SM_PROT_DESC,                /* 9.11.4.39   Protocol description */
8498
    DE_NAS_5GS_SM_ECN_MARK_L4S_IND,         /* 9.11.4.40   ECN marking for L4S indication */
8499
    DE_NAS_5GS_SM_N3GPP_DEVICE_INFO,        /* 9.11.4.41   Non-3GPP device information */
8500
8501
    DE_NAS_5GS_SM_NONE        /* NONE */
8502
}
8503
nas_5gs_sm_elem_idx_t;
8504
8505
8506
static const value_string nas_5gs_sm_elem_strings[] = {
8507
    { DE_NAS_5GS_SM_5GSM_CAP, "5GSM capability" },                                         /* 9.11.4.1    5GSM capability */
8508
    { DE_NAS_5GS_SM_5GSM_CAUSE, "5GSM cause" },                                            /* 9.11.4.2    5GSM cause */
8509
    { DE_NAS_5GS_SM_ALWAYS_ON_PDU_SES_IND, "Always-on PDU session indication" },           /* 9.11.4.3    Always-on PDU session indication */
8510
    { DE_NAS_5GS_SM_ALWAYS_ON_PDU_SES_REQ, "Always-on PDU session requested" },            /* 9.11.4.4    Always-on PDU session requested */
8511
    { DE_NAS_5GS_SM_5GSM_ALLOWED_SSC_MODE, "Allowed SSC mode" },                           /* 9.11.4.5    Allowed SSC mode */
8512
    { DE_NAS_5GS_SM_EXT_PROT_CONF_OPT, "Extended protocol configuration options" },        /* 9.11.4.6    Extended protocol configuration options */
8513
    { DE_NAS_5GS_SM_INT_PROT_MAX_DATA_RTE, "Integrity protection maximum data rate" },     /* 9.11.4.7    Integrity protection maximum data rate */
8514
    { DE_NAS_5GS_SM_MAPPED_EPS_B_CONT, "Mapped EPS bearer contexts" },                     /* 9.11.4.8    Mapped EPS bearer contexts */
8515
    { DE_NAS_5GS_SM_MAX_NUM_SUP_PKT_FLT, "Maximum number of supported packet filters" },   /* 9.11.4.9    Maximum number of supported packet filters */
8516
    { DE_NAS_5GS_SM_PDU_ADDRESS, "PDU address" },                                          /* 9.11.4.10   PDU address */
8517
    { DE_NAS_5GS_SM_PDU_SESSION_TYPE, "PDU session type" },                                /* 9.11.4.11   PDU session type */
8518
    { DE_NAS_5GS_SM_QOS_FLOW_DES, "QoS flow descriptions" },                               /* 9.11.4.12   QoS flow descriptions */
8519
    { DE_NAS_5GS_SM_QOS_RULES, "QoS rules" },                                              /* 9.11.4.13   QoS rules */
8520
    { DE_NAS_5GS_SM_SESSION_AMBR, "Session-AMBR" },                                        /* 9.11.4.14   Session-AMBR */
8521
    { DE_NAS_5GS_SM_PDU_DN_REQ_CONT, "SM PDU DN request container" },                      /* 9.11.4.15   SM PDU DN request container */
8522
    { DE_NAS_5GS_SM_SSC_MODE, "SSC mode" },                                                /* 9.11.4.16   SSC mode */
8523
    { DE_NAS_5GS_SM_RE_ATTEMPT_IND, "Re-attempt indicator" },                              /* 9.11.4.17   Re-attempt indicator */
8524
    { DE_NAS_5GS_SM_5GSM_NW_FEATURE_SUP, "5GSM network feature support" },                 /* 9.11.4.18   5GSM network feature support */
8525
                                                                                           /* 9.11.4.19   Void */
8526
    { DE_NAS_5GS_SM_SERVING_PLMN_RTE_CTL, "Serving PLMN rate control" },                   /* 9.11.4.20   Serving PLMN rate control */
8527
    { DE_NAS_5GS_SM_5GSM_CONG_RE_ATTEMPT_IND, "5GSM congestion re-attempt indicator" },    /* 9.11.4.21   5GSM congestion re-attempt indicator */
8528
    { DE_NAS_5GS_SM_ATSSS_CONT, "ATSSS container" },                                       /* 9.11.4.22   ATSSS container */
8529
    { DE_NAS_5GS_SM_CTL_PLANE_ONLY_IND, "Control plane only indication" },                 /* 9.11.4.23   Control plane only indication */
8530
    { DE_NAS_5GS_SM_IP_HDR_COMP_CONF, "IP header compression configuration" },             /* 9.11.4.24   IP header compression configuration */
8531
    { DE_NAS_5GS_SM_DS_TT_ETH_PORT_MAC_ADDR, " DS-TT Ethernet port MAC address" },         /* 9.11.4.25   DS-TT Ethernet port MAC address */
8532
    { DE_NAS_5GS_SM_UE_DS_TT_RESIDENCE_T, "UE-DS-TT residence time" },                     /* 9.11.4.26   UE-DS-TT residence time */
8533
    { DE_NAS_5GS_SM_PORT_MGNT_INF_CONT, "Port management information container" },         /* 9.11.4.27   Port management information container */
8534
    { DE_NAS_5GS_SM_ETH_HDR_COMP_CONF, "Ethernet header compression configuration" },      /* 9.11.4.28   Ethernet header compression configuration */
8535
    { DE_NAS_5GS_SM_REMOTE_UE_CTX_LIST, "Remote UE context list" },                        /* 9.11.4.29   Remote UE context list */
8536
    { DE_NAS_5GS_SM_REQ_MBS_CONT, "Requested MBS container" },                             /* 9.11.4.30   Requested MBS container */
8537
    { DE_NAS_5GS_SM_REC_MBS_CONT, "Received MBS container" },                              /* 9.11.4.30   Received MBS container */
8538
    { DE_NAS_5GS_SM_PDU_SESSION_PAIR_ID, "PDU session pair ID" },                          /* 9.11.4.32   PDU session pair ID */
8539
    { DE_NAS_5GS_SM_RSN, "RSN" },                                                          /* 9.11.4.33   RSN */
8540
    { DE_NAS_5GS_SM_N3QAI, "N3QAI" },                                                      /* 9.11.4.36   N3QAI */
8541
    { DE_NAS_5GS_SM_N3GPP_DELAY_BUDGET, "Non-3GPP delay budget" },                         /* 9.11.4.37   Non-3GPP delay budget */
8542
    { DE_NAS_5GS_SM_URSP_RULE_ENFORCE_REPORTS, "URSP rule enforcement reports" },          /* 9.11.4.38   URSP rule enforcement reports */
8543
    { DE_NAS_5GS_SM_PROT_DESC, "Protocol description" },                                   /* 9.11.4.39   Protocol description */
8544
    { DE_NAS_5GS_SM_ECN_MARK_L4S_IND, "ECN marking for L4S indication" },                  /* 9.11.4.40   ECN marking for L4S indication */
8545
    { DE_NAS_5GS_SM_N3GPP_DEVICE_INFO, "Non-3GPP device information" },                    /* 9.11.4.41   Non-3GPP device information */
8546
8547
    { 0, NULL }
8548
};
8549
value_string_ext nas_5gs_sm_elem_strings_ext = VALUE_STRING_EXT_INIT(nas_5gs_sm_elem_strings);
8550
8551
640
#define NUM_NAS_5GS_SM_ELEM array_length(nas_5gs_sm_elem_strings)
8552
int ett_nas_5gs_sm_elem[NUM_NAS_5GS_SM_ELEM];
8553
8554
uint16_t(* const nas_5gs_sm_elem_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo,
8555
    uint32_t offset, unsigned len,
8556
    char *add_string, int string_len) = {
8557
        /*  5GS session management (5GSM) information elements */
8558
        de_nas_5gs_sm_5gsm_cap,                 /* 9.11.4.1    5GSM capability */
8559
        de_nas_5gs_sm_5gsm_cause,               /* 9.11.4.2    5GSM cause */
8560
        de_nas_5gs_sm_always_on_pdu_ses_ind,    /* 9.11.4.3    Always-on PDU session indication */
8561
        de_nas_5gs_sm_always_on_pdu_ses_req,    /* 9.11.4.4    Always-on PDU session requested */
8562
        de_nas_5gs_sm_5gsm_allowed_ssc_mode,    /* 9.11.4.5    Allowed SSC mode */
8563
        NULL,                                   /* 9.11.4.6    Extended protocol configuration options */
8564
        de_nas_5gs_sm_int_prot_max_data_rte,    /* 9.11.4.7    Integrity protection maximum data rate */
8565
        de_nas_5gs_sm_mapped_eps_b_cont,        /* 9.11.4.8    Mapped EPS bearer contexts */
8566
        de_nas_5gs_sm_max_num_sup_pkt_flt,      /* 9.11.4.9    Maximum number of supported packet filters */
8567
        de_nas_5gs_sm_pdu_address,              /* 9.11.4.10   PDU address */
8568
        de_nas_5gs_sm_pdu_session_type,         /* 9.11.4.11   PDU session type */
8569
        de_nas_5gs_sm_qos_flow_des,             /* 9.11.4.12   QoS flow descriptions */
8570
        de_nas_5gs_sm_qos_rules,                /* 9.11.4.13    QoS rules */
8571
        de_nas_5gs_sm_session_ambr,             /* 9.11.4.14   Session-AMBR */
8572
        de_nas_5gs_sm_pdu_dn_req_cont,          /* 9.11.4.15   SM PDU DN request container */
8573
        de_nas_5gs_sm_ssc_mode,                 /* 9.11.4.16   SSC mode */
8574
        de_nas_5gs_sm_re_attempt_ind,           /* 9.11.4.17   Re-attempt indicator */
8575
        de_nas_5gs_sm_5gsm_nw_feature_sup,      /* 9.11.4.18   5GSM network feature support */
8576
                                                /* 9.11.4.19   Void */
8577
        NULL,                                   /* 9.11.4.20   Serving PLMN rate control */
8578
        de_nas_5gs_sm_5gsm_cong_re_attempt_ind, /* 9.11.4.21   5GSM congestion re-attempt indicator */
8579
        de_nas_5gs_sm_atsss_cont,               /* 9.11.4.22   ATSSS container */
8580
        de_nas_5gs_sm_ctl_plane_only_ind,       /* 9.11.4.23   Control plane only indication */
8581
        de_nas_5gs_sm_ip_hdr_comp_conf,         /* 9.11.4.24   IP header compression configuration */
8582
        de_nas_5gs_sm_ds_tt_eth_port_mac_addr,  /* 9.11.4.25   DS-TT Ethernet port MAC address */
8583
        de_nas_5gs_sm_ue_ds_tt_residence_t,     /* 9.11.4.26   UE-DS-TT residence time */
8584
        de_nas_5gs_sm_port_mgnt_inf_cont,       /* 9.11.4.27   Port management information container */
8585
        de_nas_5gs_sm_eth_hdr_comp_conf,        /* 9.11.4.28   Ethernet header compression configuration */
8586
        de_nas_5gs_sm_remote_ue_ctx_list,       /* 9.11.4.29   Remote UE context list */
8587
        de_nas_5gs_sm_req_mbs_cont,             /* 9.11.4.30   Requested MBS container */
8588
        de_nas_5gs_sm_rec_mbs_cont,             /* 9.11.4.31   Received MBS container */
8589
        de_nas_5gs_sm_pdu_session_pair_id,      /* 9.11.4.32   PDU session pair ID */
8590
        de_nas_5gs_sm_rsn,                      /* 9.11.4.33   RSN */
8591
        de_nas_5gs_sm_n3qai,                    /* 9.11.4.36   N3QAI */
8592
        de_nas_5gs_sm_n3gpp_delay_budget,       /* 9.11.4.37   Non-3GPP delay budget */
8593
        de_nas_5gs_sm_ursp_rule_enforce_reports,/* 9.11.4.38   URSP rule enforcement reports */
8594
        de_nas_5gs_sm_prot_desc,                /* 9.11.4.39   Protocol description */
8595
        de_nas_5gs_sm_ecn_mark_l4s_ind,         /* 9.11.4.40   ECN marking for L4S indication */
8596
        de_nas_5gs_sm_n3gpp_device_info,        /* 9.11.4.41   Non-3GPP device information */
8597
8598
        NULL,   /* NONE */
8599
};
8600
8601
/* Gap fill msg decoding*/
8602
static void
8603
nas_5gs_exp_not_dissected_yet(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
8604
2
{
8605
8606
2
    proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_msg_not_dis, tvb, offset, len);
8607
2
}
8608
8609
/*
8610
 * 8.2.1    Authentication request
8611
 */
8612
static void
8613
nas_5gs_mm_authentication_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
8614
0
{
8615
0
    uint32_t curr_offset;
8616
0
    uint32_t consumed;
8617
0
    unsigned   curr_len;
8618
8619
0
    curr_offset = offset;
8620
0
    curr_len = len;
8621
8622
    /*ngKSI     NAS key set identifier 9.11.3.29    M    V    1/2  */
8623
    /* Spare half octet    Spare half octet     9.5    M    V    1/2 H1 */
8624
0
    proto_tree_add_item(tree, hf_nas_5gs_spare_half_octet, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8625
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_KEY_SET_ID, " - ngKSI", ei_nas_5gs_missing_mandatory_element);
8626
    /* ABBA    ABBA 9.11.3.10    M    LV    3-n */
8627
0
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ABBA, NULL, ei_nas_5gs_missing_mandatory_element);
8628
    /*21    Authentication parameter RAND (5G authentication challenge)    Authentication parameter RAND     9.11.3.13    O    TV    17*/
8629
0
    ELEM_OPT_TV(0x21, GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_RAND, " - 5G authentication challenge");
8630
    /*20    Authentication parameter AUTN (5G authentication challenge)    Authentication parameter AUTN     9.11.3.14    O    TLV    18*/
8631
0
    ELEM_OPT_TLV(0x20, GSM_A_PDU_TYPE_DTAP, DE_AUTH_PARAM_AUTN, " - 5G authentication challenge");
8632
    /*78    EAP message    EAP message 9.10.2.2    O    TLV-E    7-1503 */
8633
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
8634
8635
8636
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
8637
8638
0
}
8639
/*
8640
 *8.2.2    Authentication response
8641
 */
8642
static void
8643
nas_5gs_mm_authentication_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
8644
0
{
8645
0
    uint32_t curr_offset;
8646
0
    uint32_t consumed;
8647
0
    unsigned   curr_len;
8648
8649
0
    curr_offset = offset;
8650
0
    curr_len = len;
8651
8652
    /* 2D    Authentication response parameter    Authentication response parameter 9.11.3.15    O    TLV    6-18 */
8653
0
    ELEM_OPT_TLV( 0x2d, NAS_PDU_TYPE_EMM, DE_EMM_AUTH_RESP_PAR, NULL);
8654
    /* 78 EAP message    EAP message     9.10.2.2    O    TLV-E    7-1503 */
8655
0
    ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
8656
8657
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
8658
8659
0
}
8660
8661
/*
8662
 * 8.2.3 Authentication result
8663
 */
8664
static void
8665
nas_5gs_mm_authentication_result(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
8666
0
{
8667
0
    uint32_t curr_offset;
8668
0
    uint32_t consumed;
8669
0
    unsigned   curr_len;
8670
8671
0
    curr_offset = offset;
8672
0
    curr_len = len;
8673
8674
    /* ngKSI    NAS key set identifier 9.11.3.27    M    V    1/2
8675
       Spare half octet    Spare half octet 9.5    M    V    1/2  H1 */
8676
0
    proto_tree_add_item(tree, hf_nas_5gs_spare_half_octet, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
8677
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_KEY_SET_ID, " - ngKSI", ei_nas_5gs_missing_mandatory_element);
8678
    /* EAP message    EAP message     9.11.2.2    M    LV-E    7-1503 */
8679
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL, ei_nas_5gs_missing_mandatory_element);
8680
    /* 38    ABBA    ABBA 9.11.3.10    O    TLV    4-n */
8681
0
    ELEM_OPT_TLV(0x38, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ABBA, NULL);
8682
    /* 55    AUN3 device security key    AUN3 device security key 9.11.3.107    O    TLV    36-n */
8683
0
    ELEM_OPT_TLV(0x55, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_AUN3_DEVICE_SEC_KEY, NULL);
8684
8685
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
8686
8687
0
}
8688
/*
8689
 * 8.2.4 Authentication failure
8690
 */
8691
static void
8692
nas_5gs_mm_authentication_failure(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
8693
0
{
8694
0
    uint32_t curr_offset;
8695
0
    uint32_t consumed;
8696
0
    unsigned   curr_len;
8697
8698
0
    curr_offset = offset;
8699
0
    curr_len = len;
8700
8701
    /* 5GMM cause   5GMM cause     9.11.3.2  M   V   1 */
8702
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GMM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
8703
8704
    /* 30    Authentication failure parameter    Authentication failure parameter 9.11.3.14    O    TLV    16 */
8705
0
    ELEM_OPT_TLV(0x30, GSM_A_PDU_TYPE_DTAP, DE_AUTH_FAIL_PARAM, NULL);
8706
8707
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
8708
8709
0
}
8710
/*
8711
 * 8.2.5 Authentication reject
8712
 */
8713
static void
8714
nas_5gs_mm_authentication_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
8715
0
{
8716
0
    uint32_t curr_offset;
8717
0
    uint32_t consumed;
8718
0
    unsigned   curr_len;
8719
8720
0
    curr_offset = offset;
8721
0
    curr_len = len;
8722
8723
    /* 78    EAP message    EAP message 9.11.2.2    O    TLV-E    7-1503 */
8724
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
8725
8726
8727
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
8728
8729
0
}
8730
8731
/*
8732
 * 8.2.6 Registration request
8733
 */
8734
8735
static void
8736
nas_5gs_mm_registration_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
8737
0
{
8738
0
    uint32_t curr_offset;
8739
0
    uint32_t consumed;
8740
0
    unsigned   curr_len;
8741
8742
0
    curr_offset = offset;
8743
0
    curr_len = len;
8744
8745
    /* Direction: UE to network */
8746
0
    pinfo->link_dir = P2P_DIR_UL;
8747
8748
    /* Initialize the private struct */
8749
0
    nas5gs_get_private_data(pinfo);
8750
8751
    /*    ngKSI    NAS key set identifier 9.11.3.32    M    V    1/2 H1*/
8752
    /*   5GS registration type    5GS registration type 9.11.3.7    M    V    1/2  H0*/
8753
0
    ELEM_MAND_VV_SHORT(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_REG_TYPE, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_KEY_SET_ID_H1, ei_nas_5gs_missing_mandatory_element);
8754
    /*    Mobile identity    5GS mobile identity 9.11.3.4    M    LV-E    6-n*/
8755
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, NULL, ei_nas_5gs_missing_mandatory_element);
8756
    /*C-    Non-current native NAS KSI    NAS key set identifier 9.11.3.32    O    TV    1*/
8757
0
    ELEM_OPT_TV_SHORT(0xc0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_KEY_SET_ID, " - native KSI");
8758
    /*10    5GMM capability    5GMM capability 9.11.3.1    O    TLV    3-15*/
8759
0
    ELEM_OPT_TLV(0x10, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GMM_CAP, NULL);
8760
    /*2E    UE security capability    UE security capability 9.11.3.54    O    TLV    4-10*/
8761
0
    ELEM_OPT_TLV(0x2e, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_SEC_CAP, NULL);
8762
    /*2F    Requested NSSAI    NSSAI 9.11.3.37    O    TLV    4-74*/
8763
0
    ELEM_OPT_TLV(0x2f, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSAI, " - Requested NSSAI");
8764
    /*52    Last visited registered TAI    5GS tracking area identity 9.11.3.8    O    TV    7 */
8765
0
    ELEM_OPT_TV(0x52, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID, " - Last visited registered TAI");
8766
    /*17    S1 UE network capability    S1 UE network capability 9.11.3.48    O    TLV    4-15 */
8767
0
    ELEM_OPT_TLV(0x17, NAS_PDU_TYPE_EMM, DE_EMM_UE_NET_CAP, NULL);
8768
    /*40    Uplink data status    Uplink data status 9.11.3.57    O    TLV    4-34 */
8769
0
    ELEM_OPT_TLV(0x40, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UL_DATA_STATUS, NULL);
8770
    /*50    PDU session status    PDU session status 9.11.3.44    O    TLV    4-34 */
8771
0
    ELEM_OPT_TLV(0x50, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_STATUS, NULL);
8772
    /*B-    MICO indication    MICO indication 9.11.3.31    O    TV    1*/
8773
0
    ELEM_OPT_TV_SHORT(0xb0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_MICO_IND, NULL);
8774
    /*2B    UE status    UE status 9.11.3.56    O    TLV    3*/
8775
0
    ELEM_OPT_TLV(0x2b, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_STATUS, NULL);
8776
    /*77    Additional GUTI    5GS mobile identity 9.11.3.4    O    TLV-E    14 */
8777
0
    ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, " -  Additional GUTI");
8778
    /*25    Allowed PDU session status    Allowed PDU session status         9.11.3.13    O    TLV    4 - 34 */
8779
0
    ELEM_OPT_TLV(0x25, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ALLOW_PDU_SES_STS, NULL);
8780
    /*18    UE's usage setting    UE's usage setting         9.11.3.55    O    TLV    3 */
8781
0
    ELEM_OPT_TLV(0x18, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_USAGE_SET, NULL);
8782
    /*51    Requested DRX parameters    5GS DRX parameters 9.11.3.2A    O    TLV    3 */
8783
0
    ELEM_OPT_TLV(0x51, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_DRX_PARAM, " - Requested DRX parameters");
8784
    /*70    EPS NAS message container    EPS NAS message container 9.11.3.24    O    TLV-E    4-n */
8785
0
    ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EPS_NAS_MSG_CONT, NULL);
8786
    /* 74    LADN indication    LADN indication 9.11.3.29    O    TLV-E    3-811 */
8787
0
    ELEM_OPT_TLV_E(0x74, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_LADN_INDIC, NULL);
8788
    /* 8-    Payload container type    Payload container type 9.11.3.40    O    TV    1 */
8789
0
    ELEM_OPT_TV_SHORT(0x80, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLD_CONT_TYPE, NULL);
8790
    /* 7B    Payload container     Payload container 9.11.3.39    O    TLV-E    4-65538 */
8791
0
    ELEM_OPT_TLV_E(0x7B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLD_CONT, NULL);
8792
    /* 9-    Network slicing indication    Network slicing indication 9.11.3.36    O    TV    1 */
8793
0
    ELEM_OPT_TV_SHORT(0x90, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NW_SLICING_IND, NULL);
8794
    /* 53    5GS update type    5GS update type 9.11.3.9A    O    TLV    3 */
8795
0
    ELEM_OPT_TLV(0x53, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UPDATE_TYPE, NULL);
8796
    /* 41    Mobile station classmark 2    Mobile station classmark 2    9.11.3.31C    O    TLV 5 */
8797
0
    ELEM_OPT_TLV(0x41, NAS_PDU_TYPE_COMMON, DE_EPS_MS_CM_2 , NULL );
8798
    /* 42    Supported Codecs    Supported Codec List    9.11.3.51A    O    TLV 5-n */
8799
0
    ELEM_OPT_TLV(0x42, GSM_A_PDU_TYPE_DTAP, DE_SUP_CODEC_LIST, " - Supported Codecs");
8800
    /* 71    NAS message container    NAS message container 9.11.3.33    O    TLV-E    4-n */
8801
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_MSG_CONT, NULL);
8802
    /* 60    EPS bearer context status    EPS bearer context status 9.11.3.23A    O    TLV    4 */
8803
0
    ELEM_OPT_TLV(0x60, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, NULL);
8804
    /* 6E    Requested extended DRX parameters    Extended DRX parameters 9.11.3.60    O    TLV    3-4 */
8805
0
    ELEM_OPT_TLV(0x6E, GSM_A_PDU_TYPE_GM, DE_EXT_DRX_PARAMS, NULL);
8806
    /* 6A    T3324 value    GPRS timer 3 9.11.2.5    O    TLV    3 */
8807
0
    ELEM_OPT_TLV(0x6A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3324 value");
8808
    /* 67    UE radio capability ID    UE radio capability ID 9.11.3.68    O    TLV    3-n */
8809
0
    ELEM_OPT_TLV(0x67, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID, NULL);
8810
    /* 35    Requested mapped NSSAI    Mapped NSSAI 9.11.3.31B    O    TLV    3-42 */
8811
0
    ELEM_OPT_TLV(0x35, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_MAPPED_NSSAI, NULL);
8812
    /* 48    Additional information requested    Additional information requested 9.11.3.12A    O    TLV    3 */
8813
0
    ELEM_OPT_TLV(0x48, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ADD_INF_REQ, NULL);
8814
    /* 1A    Requested WUS assistance information    WUS assistance information 9.11.3.71    O    TLV    3-n */
8815
0
    ELEM_OPT_TLV(0x1A, NAS_PDU_TYPE_EMM, DE_EMM_WUS_ASSIST_INFO, " - Requested");
8816
    /* A-    N5GC indication    N5GC indication 9.11.3.72    O    T    1 */
8817
0
    ELEM_OPT_TV_SHORT(0xA0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_N5GC_INDICATION, NULL);
8818
    /* 30    Requested NB-N1 mode DRX parameters    NB-N1 mode DRX parameters 9.11.3.73    O    TLV    3 */
8819
0
    ELEM_OPT_TLV(0x30, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NB_N1_MODE_DRX_PARS, NULL);
8820
    /* 29    UE request type    UE request type 9.11.3.76    O    TLV    3 */
8821
0
    ELEM_OPT_TLV(0x29, NAS_PDU_TYPE_EMM, DE_EMM_UE_REQUEST_TYPE, NULL);
8822
    /* 28    Paging restriction    Paging restriction 9.11.3.77    O    TLV    3-35 */
8823
0
    ELEM_OPT_TLV(0x28, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PAGING_RESTRICTION, NULL);
8824
    /* 72    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
8825
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
8826
    /* 32    NID    NID 9.11.3.79    O    TLV    8 */
8827
0
    ELEM_OPT_TLV(0x32, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NID, NULL);
8828
    /* 16    UE determined PLMN with disaster condition    PLMN identity 9.11.3.85    O    TLV    5 */
8829
0
    ELEM_OPT_TLV(0x16, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLMN_ID, " - UE determined PLMN with disaster condition");
8830
    /* 2A    Requested PEIPS assistance information    PEIPS assistance information 9.11.3.80    O    TLV    3-n */
8831
0
    ELEM_OPT_TLV(0x2A, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PEIPS_ASSIST_INFO, " - Requested");
8832
    /* 3B    Requested T3512 value    GPRS timer 3     9.11.2.5    O    TLV    3 */
8833
0
    ELEM_OPT_TLV(0x3B, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Requested T3512 value");
8834
    /* 3C    Unavailability information    Unavailability information     9.11.2.20    O    TLV    3-9 */
8835
0
    ELEM_OPT_TLV(0x3C, NAS_PDU_TYPE_EMM, DE_EMM_UNAVAIL_INFO, NULL);
8836
    /* 3F    Non-3GPP path switching information    Non-3GPP path switching information     9.11.3.102    O    TLV    3 */
8837
0
    ELEM_OPT_TLV(0x3F, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_N3GPP_PATH_SWITCH_INFO, NULL);
8838
    /* 56    AUN3 indication    AUN3 indication     9.11.3.104    O    TLV    3 */
8839
0
    ELEM_OPT_TLV(0x56, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_AU3N_IND, NULL);
8840
    /* 64    Requested LP-WUSPS assistance information    LP-WUSPS assistance information     9.11.3.111    O    TLV    3 */
8841
0
    ELEM_OPT_TLV(0x64, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_LP_WUSPS_ASSIST_INFO, " - Requested");
8842
8843
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
8844
8845
0
}
8846
8847
/*
8848
 * 8.2.7    Registration accept
8849
 */
8850
8851
static void
8852
nas_5gs_mm_registration_accept(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
8853
0
{
8854
0
    uint32_t curr_offset;
8855
0
    uint32_t consumed;
8856
0
    unsigned   curr_len;
8857
8858
0
    curr_offset = offset;
8859
0
    curr_len = len;
8860
8861
    /*      5GS registration result    5GS registration result     9.11.3.6    M    LV    2*/
8862
0
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_REG_RES, NULL, ei_nas_5gs_missing_mandatory_element);
8863
    /*77    5G-GUTI    5GS mobile identity 9.11.3.4    O    TLV-E    14 */
8864
0
    ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, " - 5G-GUTI");
8865
    /*4A    Equivalent PLMNs    PLMN list     9.11.3.33    O    TLV    5-47*/
8866
0
    ELEM_OPT_TLV(0x4a, GSM_A_PDU_TYPE_COMMON, DE_PLMN_LIST, " - Equivalent PLMNs");
8867
    /*54    TAI list    Tracking area identity list     9.11.3.9    O    TLV    9-114 */
8868
0
    ELEM_OPT_TLV(0x54, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, NULL);
8869
    /*15    Allowed NSSAI    NSSAI     9.11.3.28    O    TLV    4-74*/
8870
0
    ELEM_OPT_TLV(0x15, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSAI, " - Allowed NSSAI");
8871
    /*11    Rejected NSSAI    Rejected NSSAI     9.11.3.46    O    TLV    4-42*/
8872
0
    ELEM_OPT_TLV(0x11, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REJ_NSSAI, NULL);
8873
    /*31    Configured NSSAI    NSSAI 9.11.3.34    O    TLV    4-146 */
8874
0
    ELEM_OPT_TLV(0x31, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSAI, " - Configured NSSAI");
8875
    /*21    5GS network feature support    5GS network feature support 9.11.3.5    O    TLV    3-5 */
8876
0
    ELEM_OPT_TLV(0x21, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_NW_FEAT_SUP, NULL);
8877
    /*50    PDU session status    PDU session status     9.10.2.2    O    TLV    4*/
8878
0
    ELEM_OPT_TLV(0x50, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_STATUS, NULL);
8879
    /*26    PDU session reactivation result    PDU session reactivation result     9.11.3.32    O    TLV    4-32*/
8880
0
    ELEM_OPT_TLV(0x26, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_REACT_RES, NULL);
8881
    /*72    PDU session reactivation result error cause PDU session reactivation result error cause 9.11.3.40  O TLV-E  5-515*/
8882
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_REACT_RES_ERR_C, NULL);
8883
    /*79    LADN information    LADN information     9.11.3.19    O    TLV-E    11-1579*/
8884
0
    ELEM_OPT_TLV_E(0x79, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_LADN_INF, NULL);
8885
    /*B-    MICO indication    MICO indication     9.11.3.31    O    TV    1*/
8886
0
    ELEM_OPT_TV_SHORT(0xb0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_MICO_IND, NULL);
8887
    /* 9-    Network slicing indication    Network slicing indication 9.11.3.36    O    TV    1 */
8888
0
    ELEM_OPT_TV_SHORT(0x90, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NW_SLICING_IND, NULL);
8889
    /*27    Service area list    Service area list     9.11.3.47    O    TLV    6-194*/
8890
0
    ELEM_OPT_TLV(0x27, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_SAL, NULL);
8891
    /*5E    T3512 value    GPRS timer 3     9.11.2.5    O    TLV    3*/
8892
0
    ELEM_OPT_TLV(0x5E, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3512 value");
8893
    /*5D    Non-3GPP de-registration timer value    GPRS timer 2     9.11.3.20    O    TLV    3*/
8894
0
    ELEM_OPT_TLV(0x5D, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - Non-3GPP de-registration timer value");
8895
    /*16    T3502 value    GPRS timer 2     9.10.2.4     O    TLV    3*/
8896
0
    ELEM_OPT_TLV(0x16, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3502 value");
8897
    /*34    Emergency number list    Emergency number list     9.11.3.17    O    TLV    5-50*/
8898
0
    ELEM_OPT_TLV(0x34, GSM_A_PDU_TYPE_DTAP, DE_EMERGENCY_NUM_LIST, NULL);
8899
    /*7A    Extended emergency number list    Extended emergency number list 9.11.3.24    O    TLV-E    7-65538 */
8900
0
    ELEM_OPT_TLV_E(0x7A, NAS_PDU_TYPE_EMM, DE_EMM_EXT_EMERG_NUM_LIST, NULL);
8901
    /*73    SOR transparent container    SOR transparent container 9.11.3.51    O    TLV-E    20-2048 */
8902
0
    ELEM_OPT_TLV_E(0x73, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_SOR_TRANSP_CONT, NULL);
8903
    /*78    EAP message    EAP message 9.10.2.2    O    TLV-E    7-1503 */
8904
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
8905
    /* A-    NSSAI inclusion mode    NSSAI inclusion mode 9.11.3.37A    O    TV    1 */
8906
0
    ELEM_OPT_TV_SHORT(0xA0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSAI_INC_MODE, NULL);
8907
    /* 76    Operator-defined access category definitions    Operator-defined access category definitions 9.11.3.38    O    TLV-E    3-8323 */
8908
0
    ELEM_OPT_TLV_E(0x76, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_OP_DEF_ACC_CAT_DEF, NULL);
8909
    /* 51    Negotiated DRX parameters    5GS DRX parameters 9.11.3.2A    O    TLV    3 */
8910
0
    ELEM_OPT_TLV(0x51, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_DRX_PARAM, " -  Negotiated DRX parameters");
8911
    /* D-    Non-3GPP NW policies    Non-3GPP NW provided policies 9.11.3.36A    O    TV    1 */
8912
0
    ELEM_OPT_TV_SHORT(0xD0, GSM_A_PDU_TYPE_GM, DE_NON_3GPP_NW_PROV_POL, NULL);
8913
    /* 60    EPS bearer context status    EPS bearer context status 9.11.3.59    O    TLV    4 */
8914
0
    ELEM_OPT_TLV(0x60, NAS_PDU_TYPE_COMMON, DE_EPS_CMN_EPS_BE_CTX_STATUS, NULL);
8915
    /* 6E    Negotiated extended DRX parameters    Extended DRX parameters 9.11.3.60    O    TLV    3-4 */
8916
0
    ELEM_OPT_TLV(0x6E, GSM_A_PDU_TYPE_GM, DE_EXT_DRX_PARAMS, NULL);
8917
    /* 6C    T3447 value    GPRS timer 3 9.11.2.5    O    TLV    3 */
8918
0
    ELEM_OPT_TLV(0x6C, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3447 value");
8919
    /* 6B    T3448 value    GPRS timer 3 9.11.2.4    O    TLV    3 */
8920
0
    ELEM_OPT_TLV(0x6B, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3448 value");
8921
    /* 6A    T3324 value    GPRS timer 3 9.11.2.5    O    TLV    3 */
8922
0
    ELEM_OPT_TLV(0x6A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3324 value");
8923
    /* 67    UE radio capability ID    UE radio capability ID 9.11.3.yy    O    TLV    3-n */
8924
0
    ELEM_OPT_TLV(0x67, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID, NULL);
8925
    /* E-    UE radio capability ID deletion indication    UE radio capability ID deletion indication 9.11.3.69    O    TV    1 */
8926
0
    ELEM_OPT_TV_SHORT(0xE0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID_DEL_IND, NULL);
8927
    /* 39    Pending NSSAI    NSSAI 9.11.3.37    O    TLV    4-146 */
8928
0
    ELEM_OPT_TLV(0x39, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSAI, " - Pending NSSAI");
8929
    /* 74    Ciphering key data    Ciphering key data 9.11.3.18C    O    TLV-E    34-n */
8930
0
    ELEM_OPT_TLV_E(0x74, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CIPHERING_KEY_DATA, NULL);
8931
    /* 75    CAG information list    CAG information list 9.11.3.18A    O    TLV-E    3-n */
8932
0
    ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CAG_INFORMATION_LIST, NULL);
8933
    /* 1B    Truncated 5G-S-TMSI configuration    Truncated 5G-S-TMSI configuration 9.11.3.70    O    TLV    3 */
8934
0
    ELEM_OPT_TLV(0x1B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_TRUNCATED_5G_S_TMSI_CONF, NULL);
8935
    /* 1C    Negotiated WUS assistance information    WUS assistance information 9.11.3.71    O    TLV    3-n */
8936
0
    ELEM_OPT_TLV(0x1C, NAS_PDU_TYPE_EMM, DE_EMM_WUS_ASSIST_INFO, " - Negotiated");
8937
    /* 29    Negotiated NB-N1 mode DRX parameters    NB-N1 mode DRX parameters 9.11.3.73    O    TLV    3 */
8938
0
    ELEM_OPT_TLV(0x29, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NB_N1_MODE_DRX_PARS, NULL);
8939
    /* 68    Extended rejected NSSAI    Extended rejected NSSAI 9.11.3.75    O    TLV    5-90 */
8940
0
    ELEM_OPT_TLV(0x68, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXTENDED_REJECTED_NSSAI, NULL);
8941
    /* 7B    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
8942
0
    ELEM_OPT_TLV_E(0x7B, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
8943
    /* 33    Negotiated PEIPS assistance information    PEIPS assistance information 9.11.3.80    O    TLV    3-n */
8944
0
    ELEM_OPT_TLV(0x33, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PEIPS_ASSIST_INFO, " - Negotiated");
8945
    /* 35    5GS additional request result    5GS additional request result 9.11.3.81    O    TLV    3 */
8946
0
    ELEM_OPT_TLV(0x35, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_ADD_REQ_RES, NULL);
8947
    /* 70    NSSRG information    NSSRG information 9.11.3.82    O    TLV-E    7-4099 */
8948
0
    ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSRG_INFO, NULL);
8949
    /* 14    Disaster roaming wait range    Registration wait range 9.11.3.84    O    TLV    4 */
8950
0
    ELEM_OPT_TLV(0x14, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REG_WAIT_RANGE, " - Disaster roaming");
8951
    /* 2C    Disaster return wait range    Registration wait range 9.11.3.84    O    TLV    4 */
8952
0
    ELEM_OPT_TLV(0x2C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REG_WAIT_RANGE, " - Disaster return");
8953
    /* 13    List of PLMNs to be used in disaster condition    List of PLMNs to be used in disaster condition 9.11.3.83    O    TLV    2-n */
8954
0
    ELEM_OPT_TLV(0x13, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLMNS_LIST_DISASTER_COND, NULL);
8955
    /* 1D    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for roaming"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
8956
0
    ELEM_OPT_TLV(0x1D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for roaming\"");
8957
    /* 1E    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for regional provision of service"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
8958
0
    ELEM_OPT_TLV(0x1E, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for regional provision of service\"");
8959
    /* 71    Extended CAG information list    Extended CAG information list 9.11.3.86    O    TLV-E    3-n */
8960
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXT_CAG_INFO_LIST, NULL);
8961
    /* 7C    NSAG information    NSAG information 9.11.3.87    O    TLV-E    9-3143 */
8962
0
    ELEM_OPT_TLV_E(0x7C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSAG_INFO, NULL);
8963
    /* 3D    Equivalent SNPNs    SNPN list 9.11.3.92    O    TLV    11-137 */
8964
0
    ELEM_OPT_TLV(0x3D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_SNPN_LIST, " - Equivalent SNPNs");
8965
    /* 32    NID    NID 9.11.3.79    O    TLV    8 */
8966
0
    ELEM_OPT_TLV(0x32, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NID, NULL);
8967
    /* 7D    Registration accept type 6 IE container    Type 6 IE container 9.11.3.98    O    TLV-E    6-65538 */
8968
0
    ELEM_OPT_TLV_E(0x7D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_TYPE_6_IE_CONT, " - Registration accept type 6 IE container");
8969
    /* 4B    RAN timing synchronization    RAN timing synchronization 9.11.3.95    O    TLV    3 */
8970
0
    ELEM_OPT_TLV(0x4B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_RAN_TIMING_SYNC, NULL);
8971
    /* 4C    Alternative NSSAI    Alternative NSSAI 9.11.3.97    O    TLV    2-146 */
8972
0
    ELEM_OPT_TLV(0x4C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ALT_NSSAI, NULL);
8973
    /* 4F    Discontinuous coverage maximum time offset    GPRS timer 3 9.11.2.5    O    TLV    3 */
8974
0
    ELEM_OPT_TLV(0x4F, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Discontinuous coverage maximum time offset");
8975
    /* 5B    S-NSSAI time validity information    S-NSSAI time validity information 9.11.3.101    O    TLV    23-257 */
8976
0
    ELEM_OPT_TLV(0x5B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_S_NSSAI_TIME_VALID_INFO, NULL);
8977
    /* 3C   Unavailability configuration    Unavailability configuration 9.11.2.21    O    TLV 3-9 */
8978
0
    ELEM_OPT_TLV(0x3C, NAS_PDU_TYPE_EMM, DE_EMM_UNAVAIL_CONFIG, NULL);
8979
    /* 5C    Feature authorization indication    Feature authorization indication 9.11.3.105    O    TLV    3-257 */
8980
0
    ELEM_OPT_TLV(0x5C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_FEAT_AUTH_IND, NULL);
8981
    /* 61    On-demand NSSAI    On-demand NSSAI 9.11.3.108    O    TLV    5-210 */
8982
0
    ELEM_OPT_TLV(0x61, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ON_DEMAND_NSSAI, NULL);
8983
    /* 63    Access technology utilization control    Access technology utilization control  9.11.3.110 O TLV 4-5 */
8984
0
    ELEM_OPT_TLV(0x63, NAS_PDU_TYPE_EMM, DE_EMM_ACCESS_TECH_UTIL_CTRL, NULL);
8985
    /* 64    Negotiated LP-WUSPS assistance information    LP-WUSPS assistance information     9.11.3.111    O    TLV    3 */
8986
0
    ELEM_OPT_TLV(0x64, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_LP_WUSPS_ASSIST_INFO, " - Negotiated");
8987
    /* 8-    LP-WUS status    LP-WUS status     9.11.3.112    O    TV    1 */
8988
0
    ELEM_OPT_TV_SHORT(0x80, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_LP_WUS_STATUS, NULL);
8989
8990
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
8991
8992
0
}
8993
8994
/*
8995
 * 8.2.8 Registration complete
8996
 */
8997
static void
8998
nas_5gs_mm_registration_complete(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
8999
0
{
9000
0
    uint32_t curr_offset;
9001
0
    uint32_t consumed;
9002
0
    unsigned   curr_len;
9003
9004
0
    curr_offset = offset;
9005
0
    curr_len = len;
9006
9007
    /* 73    SOR transparent container    SOR transparent container 9.11.3.51    O    TLV-E    20-2048 */
9008
0
    ELEM_OPT_TLV_E(0x73, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_SOR_TRANSP_CONT, NULL);
9009
9010
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9011
9012
0
}
9013
9014
/*
9015
* 8.2.9 Registration reject
9016
*/
9017
static void
9018
nas_5gs_mm_registration_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9019
0
{
9020
0
    uint32_t curr_offset;
9021
0
    uint32_t consumed;
9022
0
    unsigned   curr_len;
9023
9024
0
    curr_offset = offset;
9025
0
    curr_len = len;
9026
9027
    /* 5GMM cause   5GMM cause     9.11.3.2  M   V   1 */
9028
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GMM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
9029
    /* 5F  T3346 value GPRS timer 2     9.11.3.16   O   TLV 3 */
9030
0
    ELEM_OPT_TLV(0x5F, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
9031
    /* 16    T3502 value    GPRS timer 2 9.10.2.4    O    TLV    3 */
9032
0
    ELEM_OPT_TLV(0x16, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3502 value");
9033
    /* 78    EAP message    EAP message 9.10.2.2    O    TLV-E    7-1503 */
9034
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
9035
    /* 69    Rejected NSSAI    Rejected NSSAI 9.11.3.46    O    TLV    4-42 DE_NAS_5GS_MM_REJ_NSSAI*/
9036
0
    ELEM_OPT_TLV(0x69, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REJ_NSSAI, NULL);
9037
    /* 75    CAG information list    CAG information list 9.11.3.18A    O    TLV-E    3-n */
9038
0
    ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CAG_INFORMATION_LIST, NULL);
9039
    /* 68    Extended rejected NSSAI    Extended rejected NSSAI 9.11.3.75    O    TLV    5-90 */
9040
0
    ELEM_OPT_TLV(0x68, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXTENDED_REJECTED_NSSAI, NULL);
9041
    /* 2C    Disaster return wait range    Registration wait range 9.11.3.84    O    TLV    4 */
9042
0
    ELEM_OPT_TLV(0x2C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REG_WAIT_RANGE, " - Disaster return");
9043
    /* 71    Extended CAG information list    Extended CAG information list 9.11.3.86    O    TLV-E    3-n */
9044
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXT_CAG_INFO_LIST, NULL);
9045
    /* 3A    Lower bound timer value    GPRS timer 3 9.11.2.5    O    TLV    3 */
9046
0
    ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Lower bound timer value");
9047
    /* 1D    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for roaming"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
9048
0
    ELEM_OPT_TLV(0x1D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for roaming\"");
9049
    /* 1E    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for regional provision of service"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
9050
0
    ELEM_OPT_TLV(0x1E, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for regional provision of service\"");
9051
    /* 3E    N3IWF identifier    N3IWF identifier 9.11.3.93    O    TLV    7-n */
9052
0
    ELEM_OPT_TLV(0x3E, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_N3IWF_ID, NULL);
9053
    /* 4D    TNAN information    TNAN information 9.11.3.94    O    TLV    3-n */
9054
0
    ELEM_OPT_TLV(0x4D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_TNAN_INFO, NULL);
9055
    /* 62    Extended 5GMM cause    Extended 5GMM cause 9.11.3.109    O    TLV    3 */
9056
0
    ELEM_OPT_TLV(0x62, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXT_5GMM_CAUSE, NULL);
9057
    /* 63    Access technology utilization control    Access technology utilization control  9.11.3.110 O TLV 4-5 */
9058
0
    ELEM_OPT_TLV(0x63, NAS_PDU_TYPE_EMM, DE_EMM_ACCESS_TECH_UTIL_CTRL, NULL);
9059
9060
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9061
9062
0
}
9063
9064
/*
9065
 * 8.2.10    UL NAS transport
9066
 */
9067
static void
9068
nas_5gs_mm_ul_nas_transp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
9069
0
{
9070
0
    uint32_t curr_offset;
9071
0
    uint32_t consumed;
9072
0
    unsigned   curr_len;
9073
9074
    /* Direction: UE to network */
9075
0
    pinfo->link_dir = P2P_DIR_UL;
9076
9077
0
    curr_offset = offset;
9078
0
    curr_len = len;
9079
9080
    /* Initialize the private struct */
9081
0
    nas5gs_get_private_data(pinfo);
9082
9083
    /*Payload container type    Payload container type     9.11.3.31    M    V    1/2 */
9084
    /*Spare half octet    Spare half octet    9.5    M    V    1/2*/
9085
0
    proto_tree_add_item(tree, hf_nas_5gs_spare_half_octet, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
9086
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLD_CONT_TYPE, NULL, ei_nas_5gs_missing_mandatory_element);
9087
    /*Payload container    Payload container    9.11.3.30    M    LV-E    3-65537*/
9088
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLD_CONT, NULL, ei_nas_5gs_missing_mandatory_element);
9089
    /*12    PDU session ID    PDU session identity 2 9.11.3.41    C    TV    2 */
9090
0
    ELEM_OPT_TV(0x12, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_ID_2, " - PDU session ID");
9091
    /*59    Old PDU session ID    PDU session identity 2 9.11.3.41    O    TV    2 */
9092
0
    ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_ID_2, " - Old PDU session ID");
9093
    /*8-    Request type    Request type    9.11.3.42    O    TV    1 */
9094
0
    ELEM_OPT_TV_SHORT(0x80, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REQ_TYPE, NULL);
9095
    /*22    S-NSSAI    S-NSSAI    9.11.2.8    O    TLV    3-10 */
9096
0
    ELEM_OPT_TLV(0x22, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_S_NSSAI, NULL);
9097
    /*25    DNN    DNN    9.11.2.1B    O    TLV    3-102 */
9098
0
    ELEM_OPT_TLV(0x25, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_DNN, NULL);
9099
    /*24    Additional information    Additional information    9.10.2.1    O    TLV    3-n */
9100
0
    ELEM_OPT_TLV(0x24, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_ADD_INF, NULL);
9101
    /* A-    MA PDU session information    MA PDU session information 9.11.3.31A    O    TV    1 DE_NAS_5GS_MM_MA_PDU_SES_INF*/
9102
0
    ELEM_OPT_TV_SHORT(0xA0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_MA_PDU_SES_INF, NULL);
9103
    /* F-    Release assistance indication    Release assistance indication 9.11.3.46A    O    TV    1 */
9104
0
    ELEM_OPT_TV_SHORT(0xF0, NAS_PDU_TYPE_ESM, DE_ESM_REL_ASSIST_IND, NULL);
9105
    /*4E    Non-3GPP access path switching indication    Non-3GPP access path switching indication    9.11.3.99    O    TLV    3 */
9106
0
    ELEM_OPT_TLV(0x4E, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_N3GPP_ACC_PATH_SWITCH_IND, NULL);
9107
    /*5A    Alternative S-NSSAI    S-NSSAI    9.11.2.8    O    TLV    3-10 */
9108
0
    ELEM_OPT_TLV(0x5A, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_S_NSSAI, " - Alternative S-NSSAI");
9109
    /* 9-    Payload container information    Payload container information 9.11.3.106    O    TV    1 */
9110
0
    ELEM_OPT_TV_SHORT(0x90, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PAYLOAD_CONT_INFO, NULL);
9111
9112
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9113
9114
0
}
9115
9116
/*
9117
* 8.2.11 DL NAS transport
9118
*/
9119
static void
9120
nas_5gs_mm_dl_nas_transp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len)
9121
0
{
9122
0
    uint32_t curr_offset;
9123
0
    uint32_t consumed;
9124
0
    unsigned   curr_len;
9125
9126
    /* Direction: network to UE */
9127
0
    pinfo->link_dir = P2P_DIR_DL;
9128
9129
0
    curr_offset = offset;
9130
0
    curr_len = len;
9131
9132
    /* Initialize the private struct */
9133
0
    nas5gs_get_private_data(pinfo);
9134
9135
    /*Payload container type    Payload container type     9.11.3.40    M    V    1/2 H0*/
9136
    /*Spare half octet    Spare half octet    9.5    M    V    1/2 H1*/
9137
0
    proto_tree_add_item(tree, hf_nas_5gs_spare_half_octet, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
9138
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLD_CONT_TYPE, NULL, ei_nas_5gs_missing_mandatory_element);
9139
    /*Payload container    Payload container    9.11.3.39    M    LV-E    3-65537*/
9140
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLD_CONT, NULL, ei_nas_5gs_missing_mandatory_element);
9141
    /*12    PDU session ID    PDU session identity 2 9.11.3.41    C    TV    2 */
9142
0
    ELEM_OPT_TV(0x12, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_ID_2, " - PDU session ID");
9143
    /*24    Additional information    Additional information    9.10.2.1    O    TLV    3-n*/
9144
0
    ELEM_OPT_TLV(0x24, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_ADD_INF, NULL);
9145
    /*58    5GMM cause    5GMM cause 9.11.3.2    O    TV    2 */
9146
0
    ELEM_OPT_TV(0x58, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GMM_CAUSE, NULL);
9147
    /*37    Back-off timer value    GPRS timer 3 9.11.2.5    O    TLV    3 */
9148
0
    ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Back-off timer value");
9149
    /*3A    Lower bound timer value    GPRS timer 3 9.11.2.5    O    TLV    3 */
9150
0
    ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Lower bound timer value");
9151
9152
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9153
9154
0
}
9155
9156
/*
9157
 * 8.2.12 De-registration request (UE originating de-registration)
9158
 */
9159
static void
9160
nas_5gs_mm_de_reg_req_ue_orig(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9161
0
{
9162
0
    uint32_t curr_offset;
9163
0
    uint32_t consumed;
9164
0
    unsigned   curr_len;
9165
9166
0
    curr_offset = offset;
9167
0
    curr_len = len;
9168
9169
    /* De-registration type    De-registration type     9.11.3.18   M   V   1 */
9170
    /* ngKSI    NAS key set identifier 9.11.3.32    M    V    1/2 H1 */
9171
0
    ELEM_MAND_VV_SHORT(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_DE_REG_TYPE, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_KEY_SET_ID_H1, ei_nas_5gs_missing_mandatory_element);
9172
    /*5GS mobile identity     5GS mobile identity 9.11.3.4    M    LV-E    6-n */
9173
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, NULL, ei_nas_5gs_missing_mandatory_element);
9174
    /* 3C    Unavailability information    Unavailability information     9.11.2.20    O    TLV    3-9 */
9175
0
    ELEM_OPT_TLV(0x3C, NAS_PDU_TYPE_EMM, DE_EMM_UNAVAIL_INFO, NULL);
9176
    /* 71    NAS message container    NAS message container 9.11.3.33    O    TLV-E    4-n */
9177
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_MSG_CONT, NULL);
9178
9179
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9180
9181
0
}
9182
9183
/*
9184
 * 8.2.13 De-registration accept (UE originating de-registration)
9185
 */
9186
/* No data */
9187
9188
/*
9189
 * 8.2.14 De-registration request (UE terminated de-registration)
9190
 */
9191
static void
9192
nas_5gs_mm_de_registration_req_ue_term(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9193
0
{
9194
0
    uint32_t curr_offset;
9195
0
    uint32_t consumed;
9196
0
    unsigned   curr_len;
9197
9198
0
    curr_offset = offset;
9199
0
    curr_len = len;
9200
9201
    /* De-registration type    De-registration type 9.11.3.20   M   V   1 */
9202
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_DE_REG_TYPE, NULL, ei_nas_5gs_missing_mandatory_element);
9203
    /* Spare half octet    Spare half octet 9.5    M    V    1/2 */
9204
    /* 58 5GMM cause   5GMM cause     9.11.3.2  O   TV   2 */
9205
0
    ELEM_OPT_TV(0x58, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GMM_CAUSE, NULL);
9206
    /* 5F  T3346 value GPRS timer 2     9.11.2.4   O   TLV 3 */
9207
0
    ELEM_OPT_TLV(0x5F, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
9208
    /* 6D    Rejected NSSAI    Rejected NSSAI 9.11.3.46    O    TLV    4-42 */
9209
0
    ELEM_OPT_TLV(0x6D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REJ_NSSAI, NULL);
9210
    /* 75    CAG information list    CAG information list 9.11.3.18A    O    TLV-E    3-n */
9211
0
    ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CAG_INFORMATION_LIST, NULL);
9212
    /* 68    Extended rejected NSSAI    Extended rejected NSSAI 9.11.3.75    O    TLV    5-90 */
9213
0
    ELEM_OPT_TLV(0x68, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXTENDED_REJECTED_NSSAI, NULL);
9214
    /* 2C    Disaster return wait range    Registration wait range 9.11.3.84    O    TLV    4 */
9215
0
    ELEM_OPT_TLV(0x2C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REG_WAIT_RANGE, " - Disaster return");
9216
    /* 71    Extended CAG information list    Extended CAG information list 9.11.3.86    O    TLV-E    3-n */
9217
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXT_CAG_INFO_LIST, NULL);
9218
    /* 3A    Lower bound timer value    GPRS timer 3 9.11.2.5    O    TLV    3 */
9219
0
    ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Lower bound timer value");
9220
    /* 1D    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for roaming"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
9221
0
    ELEM_OPT_TLV(0x1D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for roaming\"");
9222
    /* 1E    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for regional provision of service"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
9223
0
    ELEM_OPT_TLV(0x1E, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for regional provision of service\"");
9224
    /* 63    Access technology utilization control    Access technology utilization control  9.11.3.110 O TLV 4-5 */
9225
0
    ELEM_OPT_TLV(0x63, NAS_PDU_TYPE_EMM, DE_EMM_ACCESS_TECH_UTIL_CTRL, NULL);
9226
9227
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9228
9229
0
}
9230
9231
/*
9232
 * 8.2.15 De-registration accept (UE terminated de-registration)
9233
 */
9234
 /* No data */
9235
9236
9237
/*
9238
 * 8.2.16 Service request
9239
 */
9240
static void
9241
nas_5gs_mm_service_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9242
0
{
9243
0
    uint32_t curr_offset;
9244
0
    uint32_t consumed;
9245
0
    unsigned   curr_len;
9246
9247
0
    curr_offset = offset;
9248
0
    curr_len = len;
9249
9250
    /* ngKSI     NAS key set identifier 9.11.3.29    M    V    1/2 */
9251
    /* Service type    Service type 9.11.3.50    M    V    1/2 */
9252
0
    ELEM_MAND_VV_SHORT(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_KEY_SET_ID, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_SERV_TYPE, ei_nas_5gs_missing_mandatory_element);
9253
    /* 5G-S-TMSI    5GS mobile identity 9.11.3.4    M    LV    6 */
9254
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, NULL, ei_nas_5gs_missing_mandatory_element);
9255
    /*40    Uplink data status    Uplink data status         9.11.3.53    O    TLV    4 - 34*/
9256
0
    ELEM_OPT_TLV(0x40, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UL_DATA_STATUS, NULL);
9257
    /*50    PDU session status    PDU session status         9.11.3.40    O    TLV    4 - 34*/
9258
0
    ELEM_OPT_TLV(0x50, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_STATUS, NULL);
9259
    /*25    Allowed PDU session status    Allowed PDU session status         9.11.3.11    O    TLV    4 - 34*/
9260
0
    ELEM_OPT_TLV(0x25, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ALLOW_PDU_SES_STS, NULL);
9261
    /* 71    NAS message container    NAS message container 9.11.3.33    O    TLV-E    4-n */
9262
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_MSG_CONT, NULL);
9263
    /* 29    UE request type    UE request type 9.11.3.76    O    TLV    3 */
9264
0
    ELEM_OPT_TLV(0x29, NAS_PDU_TYPE_EMM, DE_EMM_UE_REQUEST_TYPE, NULL);
9265
    /* 28    Paging restriction    Paging restriction 9.11.3.77    O    TLV    3-35 */
9266
0
    ELEM_OPT_TLV(0x28, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PAGING_RESTRICTION, NULL);
9267
9268
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9269
9270
0
}
9271
9272
/*
9273
  * 8.2.17 Service accept
9274
 */
9275
static void
9276
nas_5gs_mm_service_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9277
0
{
9278
0
    uint32_t curr_offset;
9279
0
    uint32_t consumed;
9280
0
    unsigned   curr_len;
9281
9282
0
    curr_offset = offset;
9283
0
    curr_len = len;
9284
9285
    /*50    PDU session status    PDU session status     9.11.3.44    O    TLV    4-34*/
9286
0
    ELEM_OPT_TLV(0x50, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_STATUS, NULL);
9287
9288
    /*26    PDU session reactivation result    PDU session reactivation result 9.11.3.42    O    TLV    4-32*/
9289
0
    ELEM_OPT_TLV(0x26, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_REACT_RES, NULL);
9290
    /*72    PDU session reactivation result error cause    PDU session reactivation result error cause 9.11.3.43    O    TLV-E    5-515 */
9291
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_REACT_RES_ERR_C, NULL);
9292
    /*78    EAP message    EAP message     9.11.2.2    O    TLV-E    7-1503*/
9293
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
9294
    /* 6B    T3448 value    GPRS timer 2 9.11.2.4    O    TLV    3 */
9295
0
    ELEM_OPT_TLV(0x6B, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3448 value");
9296
    /* 34    5GS additional request result    5GS additional request result 9.11.3.81    O    TLV    3 */
9297
0
    ELEM_OPT_TLV(0x34, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_ADD_REQ_RES, NULL);
9298
    /* 1D    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for roaming"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
9299
0
    ELEM_OPT_TLV(0x1D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for roaming\"");
9300
    /* 1E    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for regional provision of service"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
9301
0
    ELEM_OPT_TLV(0x1E, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for regional provision of service\"");
9302
9303
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9304
0
}
9305
9306
/*
9307
 * 8.2.18 Service reject
9308
 */
9309
static void
9310
nas_5gs_mm_service_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9311
0
{
9312
0
    uint32_t curr_offset;
9313
0
    uint32_t consumed;
9314
0
    unsigned   curr_len;
9315
9316
0
    curr_offset = offset;
9317
0
    curr_len = len;
9318
9319
    /* 5GMM cause   5GMM cause     9.11.3.2  M   V   1 */
9320
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GMM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
9321
    /*50    PDU session status    PDU session status 9.11.3.44    O    TLV    4*/
9322
0
    ELEM_OPT_TLV(0x50, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_STATUS, NULL);
9323
    /* 5F  T3346 value GPRS timer 2     9.11.2.4   O   TLV 3 */
9324
0
    ELEM_OPT_TLV(0x5F, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3346 value");
9325
    /* 78    EAP message    EAP message 9.11.2.2    O    TLV-E    7-1503 */
9326
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
9327
    /* 6B    T3448 value    GPRS timer 3 9.11.2.4    O    TLV    3 */
9328
0
    ELEM_OPT_TLV(0x6B, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_2, " - T3448 value");
9329
    /* 75    CAG information list    CAG information list 9.11.3.18A    O    TLV-E    3-n */
9330
0
    ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CAG_INFORMATION_LIST, NULL);
9331
    /* 2C    Disaster return wait range    Registration wait range 9.11.3.84    O    TLV    4 */
9332
0
    ELEM_OPT_TLV(0x2C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REG_WAIT_RANGE, " - Disaster return");
9333
    /* 71    Extended CAG information list    Extended CAG information list 9.11.3.86    O    TLV-E    3-n */
9334
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXT_CAG_INFO_LIST, NULL);
9335
    /* 3A    Lower bound timer value    GPRS timer 3 9.11.2.5    O    TLV    3 */
9336
0
    ELEM_OPT_TLV(0x3A, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Lower bound timer value");
9337
    /* 1D    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for roaming"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
9338
0
    ELEM_OPT_TLV(0x1D, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for roaming\"");
9339
    /* 1E    Forbidden TAI(s) for the list of "5GS forbidden tracking areas for regional provision of service"    5GS tracking area identity list 9.11.3.9    O    TLV    9-114 */
9340
0
    ELEM_OPT_TLV(0x1E, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, " - Forbidden TAI(s) for the list of \"5GS forbidden tracking areas for regional provision of service\"");
9341
    /* 63    Access technology utilization control    Access technology utilization control  9.11.3.110 O TLV 4-5 */
9342
0
    ELEM_OPT_TLV(0x63, NAS_PDU_TYPE_EMM, DE_EMM_ACCESS_TECH_UTIL_CTRL, NULL);
9343
9344
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9345
9346
0
}
9347
9348
/*
9349
 * 8.2.19 Configuration update command
9350
 */
9351
static void
9352
nas_5gs_mm_conf_upd_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9353
0
{
9354
0
    uint32_t curr_offset;
9355
0
    uint32_t consumed;
9356
0
    unsigned   curr_len;
9357
9358
0
    curr_offset = offset;
9359
0
    curr_len = len;
9360
9361
    /*D-    Configuration update indication    Configuration update indication 9.11.3.16    O    TV    1 */
9362
0
    ELEM_OPT_TV_SHORT(0xD0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CONF_UPD_IND, NULL);
9363
    /*77    5G-GUTI    5GS mobile identity     9.11.3.4    O    TLV    TBD*/
9364
0
    ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, NULL);
9365
    /*54    TAI list    Tracking area identity list     9.11.3.45    O    TLV    8-98*/
9366
0
    ELEM_OPT_TLV(0x54, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_TA_ID_LIST, NULL);
9367
    /*15    Allowed NSSAI    NSSAI     9.11.3.28    O    TLV    4-74*/
9368
0
    ELEM_OPT_TLV(0x15, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSAI, " - Allowed NSSAI");
9369
    /*27    Service area list    Service area list     9.11.3.39    O    TLV    6-194 */
9370
0
    ELEM_OPT_TLV(0x27, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_SAL, NULL);
9371
    /*43    Full name for network    Network name     9.11.3.26    O    TLV    3-n*/
9372
0
    ELEM_OPT_TLV(0x43, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Full name for network");
9373
    /*45    Short name for network    Network name     9.11.3.26    O    TLV    3-n*/
9374
0
    ELEM_OPT_TLV(0x45, GSM_A_PDU_TYPE_DTAP, DE_NETWORK_NAME, " - Short Name");
9375
    /*46    Local time zone    Time zone     9.11.3.52    O    TV    2*/
9376
0
    ELEM_OPT_TV(0x46, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE, " - Local");
9377
    /*47    Universal time and local time zone    Time zone and time     9.11.3.53    O    TV    8*/
9378
0
    ELEM_OPT_TV(0x47, GSM_A_PDU_TYPE_DTAP, DE_TIME_ZONE_TIME, " - Universal Time and Local Time Zone");
9379
    /*49    Network daylight saving time    Daylight saving time     9.11.3.11    O    TLV    3*/
9380
0
    ELEM_OPT_TLV(0x49, GSM_A_PDU_TYPE_DTAP, DE_DAY_SAVING_TIME, NULL);
9381
    /*79    LADN information    LADN information     9.11.3.19    O    TLV-E    11-1579*/
9382
0
    ELEM_OPT_TLV_E(0x79, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_LADN_INF, NULL);
9383
    /*B-    MICO indication    MICO indication     9.11.3.31    O    TV    1*/
9384
0
    ELEM_OPT_TV_SHORT(0xB0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_MICO_IND, NULL);
9385
    /* 9-    Network slicing indication    Network slicing indication 9.11.3.36    O    TV    1 */
9386
0
    ELEM_OPT_TV_SHORT(0x90, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NW_SLICING_IND, NULL);
9387
    /*31    Configured NSSAI    NSSAI     9.11.3.28    O    TLV    4-74*/
9388
0
    ELEM_OPT_TLV(0x31, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSAI, " - Configured NSSAI");
9389
    /*11    Rejected NSSAI     Rejected NSSAI   9.11.3.46   O   TLV   4-42*/
9390
0
    ELEM_OPT_TLV(0x11, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REJ_NSSAI, NULL);
9391
    /* 76    Operator-defined access category definitions    Operator-defined access category definitions 9.11.3.38    O    TLV-E    3-8323 */
9392
0
    ELEM_OPT_TLV_E(0x76, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_OP_DEF_ACC_CAT_DEF, NULL);
9393
    /* F-    SMS indication    SMS indication 9.10.3.50A    O    TV    1 */
9394
0
    ELEM_OPT_TV_SHORT(0xF0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_SMS_IND, NULL);
9395
    /* 6C    T3447 value    GPRS timer 3 9.11.2.5    O    TLV    3 */
9396
0
    ELEM_OPT_TLV(0x6c, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - T3447");
9397
    /* 75    C75    CAG information list    CAG information list 9.11.3.18A    O    TLV-E    3-n  */
9398
0
    ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CAG_INFORMATION_LIST, NULL);
9399
    /* 67    UE radio capability ID    UE radio capability ID 9.11.3.68    O    TLV    3-n  */
9400
0
    ELEM_OPT_TLV(0x67, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID, NULL);
9401
    /* A-    UE radio capability ID deletion indication    UE radio capability ID deletion indication 9.11.3.69    O    TV    1 */
9402
0
    ELEM_OPT_TV_SHORT(0xA0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_RADIO_CAP_ID_DEL_IND, NULL);
9403
    /* 44    5GS registration result    5GS registration result 9.11.3.6    O    TLV    3 */
9404
0
    ELEM_OPT_TLV(0x44, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_REG_RES, NULL);
9405
    /* 1B    Truncated 5G-S-TMSI configuration    Truncated 5G-S-TMSI configuration 9.11.3.70    O    TLV    3 */
9406
0
    ELEM_OPT_TLV(0x1B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_TRUNCATED_5G_S_TMSI_CONF, NULL);
9407
    /* C-    Additional configuration indication    Additional configuration indication 9.11.3.74    O    TV    1 */
9408
0
    ELEM_OPT_TV_SHORT(0xC0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ADDITIONAL_CONF_IND, NULL);
9409
    /* 68    Extended rejected NSSAI    Extended rejected NSSAI 9.11.3.75    O    TLV    5-90 */
9410
0
    ELEM_OPT_TLV(0x68, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXTENDED_REJECTED_NSSAI, NULL);
9411
    /* 72    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
9412
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
9413
    /* 70    NSSRG information    NSSRG information 9.11.3.82    O    TLV-E    7-4099 */
9414
0
    ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSSRG_INFO, NULL);
9415
    /* 14    Disaster roaming wait range    Registration wait range 9.11.3.84    O    TLV    4 */
9416
0
    ELEM_OPT_TLV(0x14, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REG_WAIT_RANGE, " - Disaster roaming");
9417
    /* 2C    Disaster return wait range    Registration wait range 9.11.3.84    O    TLV    4 */
9418
0
    ELEM_OPT_TLV(0x2C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_REG_WAIT_RANGE, " - Disaster return");
9419
    /* 13    List of PLMNs to be used in disaster condition    List of PLMNs to be used in disaster condition 9.11.3.83    O    TLV    2-n */
9420
0
    ELEM_OPT_TLV(0x13, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLMNS_LIST_DISASTER_COND, NULL);
9421
    /* 71    Extended CAG information list    Extended CAG information list 9.11.3.86    O    TLV-E    3-n */
9422
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXT_CAG_INFO_LIST, NULL);
9423
    /* 1F    Updated PEIPS assistance information    PEIPS assistance information 9.11.3.80    O    TLV    3-n */
9424
0
    ELEM_OPT_TLV(0x1F, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PEIPS_ASSIST_INFO, " - Updated");
9425
    /* 73    NSAG information    NSAG information 9.11.3.87    O    TLV-E    9-3143 */
9426
0
    ELEM_OPT_TLV_E(0x73, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NSAG_INFO, NULL);
9427
    /* E-    Priority indicator    Priority indicator 9.11.3.91    O    TV    1 */
9428
0
    ELEM_OPT_TV_SHORT(0xE0, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PRIO_IND, NULL);
9429
    /* 4B    RAN timing synchronization    RAN timing synchronization 9.11.3.95    O    TLV    3 */
9430
0
    ELEM_OPT_TLV(0x4B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_RAN_TIMING_SYNC, NULL);
9431
    /* 78    Extended LADN information    Extended LADN information 9.11.3.96    O    TLV-E    3-1787 */
9432
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_EXT_LADN_INFO, NULL);
9433
    /* 4C    Alternative NSSAI    Alternative NSSAI 9.11.3.97    O    TLV    2-146 */
9434
0
    ELEM_OPT_TLV(0x4C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ALT_NSSAI, NULL);
9435
    /* 7B    S-NSSAI location validity information    S-NSSAI location validity information 9.11.3.100    O    TLV-E    17-38611 */
9436
0
    ELEM_OPT_TLV_E(0x7B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_S_NSSAI_LOC_VALID_INFO, NULL);
9437
    /* 5B    S-NSSAI time validity information    S-NSSAI time validity information 9.11.3.101    O    TLV    23-257 */
9438
0
    ELEM_OPT_TLV(0x5B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_S_NSSAI_TIME_VALID_INFO, NULL);
9439
    /* 4F    Discontinuous coverage maximum time offset    GPRS timer 3 9.11.2.5    O    TLV    3 */
9440
0
    ELEM_OPT_TLV(0x4F, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Discontinuous coverage maximum time offset");
9441
    /* 74    Partially allowed NSSAI    Partial NSSAI 9.11.3.103    O    TLV-E    3-808 */
9442
0
    ELEM_OPT_TLV_E(0x74, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PARTIAL_NSSAI, " - Partially allowed NSSAI");
9443
    /* 7A    Partially rejected NSSAI    Partial NSSAI 9.11.3.103    O    TLV-E    3-808 */
9444
0
    ELEM_OPT_TLV_E(0x7A, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PARTIAL_NSSAI, " - Partially rejected NSSAI");
9445
    /* 5C    Feature authorization indication    Feature authorization indication 9.11.3.105    O    TLV    3-257 */
9446
0
    ELEM_OPT_TLV(0x5C, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_FEAT_AUTH_IND, NULL);
9447
    /* 61    On-demand NSSAI    On-demand NSSAI 9.11.3.108    O    TLV    5-210 */
9448
0
    ELEM_OPT_TLV(0x61, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ON_DEMAND_NSSAI, NULL);
9449
    /* 63    Access technology utilization control Access technology utilization control 9.11.3.110 O TLV 4-5 */
9450
0
    ELEM_OPT_TLV(0x63, NAS_PDU_TYPE_EMM, DE_EMM_ACCESS_TECH_UTIL_CTRL, NULL);
9451
    /* 64    Updated LP-WUSPS assistance information    LP-WUSPS assistance information     9.11.3.111    O    TLV    3 */
9452
0
    ELEM_OPT_TLV(0x64, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_LP_WUSPS_ASSIST_INFO, " - Updated");
9453
    /* 8-    LP-WUS status    LP-WUS status     9.11.3.112    O    TV    1 */
9454
0
    ELEM_OPT_TV_SHORT(0x80, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_LP_WUS_STATUS, NULL);
9455
9456
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9457
9458
0
}
9459
9460
/*
9461
 * 8.2.20 Configuration update complete
9462
 */
9463
static void
9464
nas_5gs_mm_conf_update_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9465
0
{
9466
0
    uint32_t curr_offset;
9467
0
    unsigned   curr_len;
9468
9469
0
    curr_offset = offset;
9470
0
    curr_len = len;
9471
9472
    /* No Data */
9473
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9474
0
}
9475
/*
9476
 * 8.2.21 Identity request
9477
 */
9478
static void
9479
nas_5gs_mm_id_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9480
0
{
9481
0
    uint32_t curr_offset;
9482
0
    uint32_t consumed;
9483
0
    unsigned   curr_len;
9484
9485
0
    curr_offset = offset;
9486
0
    curr_len = len;
9487
9488
    /*     Identity type    5GS identity type 9.11.3.3    M    V    1/2 */
9489
    /* Spare half octet    Spare half octet 9.5    M    V    1/2 */
9490
0
    proto_tree_add_item(tree, hf_nas_5gs_spare_half_octet, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
9491
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_IDENTITY_TYPE, NULL, ei_nas_5gs_missing_mandatory_element);
9492
9493
9494
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9495
9496
0
}
9497
9498
/*
9499
 * 8.2.22 Identity response
9500
 */
9501
static void
9502
nas_5gs_mm_id_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9503
0
{
9504
0
    uint32_t curr_offset;
9505
0
    uint32_t consumed;
9506
0
    unsigned   curr_len;
9507
9508
0
    curr_offset = offset;
9509
0
    curr_len = len;
9510
9511
    /* Mobile identity  5GS mobile identity 9.11.3.4    M    LV-E    3-n  */
9512
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, NULL, ei_nas_5gs_missing_mandatory_element);
9513
9514
9515
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9516
9517
0
}
9518
9519
/*
9520
 * 8.2.23 Notification
9521
 */
9522
static void
9523
nas_5gs_mm_notification(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9524
0
{
9525
0
    uint32_t curr_offset;
9526
0
    uint32_t consumed;
9527
0
    unsigned   curr_len;
9528
9529
0
    curr_offset = offset;
9530
0
    curr_len = len;
9531
9532
    /* Access type    Access type 9.11.2.1A    M    V    1/2 DE_NAS_5GS_ACCESS_TYPE */
9533
    /* Spare half octet    Spare half octet 9.5    M    V    1/2  */
9534
0
    proto_tree_add_item(tree, hf_nas_5gs_spare_half_octet, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
9535
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_ACCESS_TYPE, NULL, ei_nas_5gs_missing_mandatory_element);
9536
9537
9538
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9539
9540
0
}
9541
9542
/*
9543
 * 8.2.24 Notification response
9544
 */
9545
static void
9546
nas_5gs_mm_notification_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9547
0
{
9548
0
    uint32_t curr_offset;
9549
0
    uint32_t consumed;
9550
0
    unsigned   curr_len;
9551
9552
0
    curr_offset = offset;
9553
0
    curr_len = len;
9554
9555
    /* 50    PDU session status    PDU session status 9.11.3.40    O    TLV    4-34 */
9556
0
    ELEM_OPT_TLV(0x50, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_STATUS, NULL);
9557
9558
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9559
9560
0
}
9561
9562
/*
9563
 * 8.2.25 Security mode command
9564
 */
9565
static void
9566
nas_5gs_mm_sec_mode_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9567
0
{
9568
0
    uint32_t curr_offset;
9569
0
    uint32_t consumed;
9570
0
    unsigned   curr_len;
9571
9572
0
    curr_offset = offset;
9573
0
    curr_len = len;
9574
9575
    /* Direction: network to UE */
9576
    /*Selected NAS security algorithms    NAS security algorithms     9.11.3.34    M    V    1  */
9577
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_SEC_ALGO, NULL, ei_nas_5gs_missing_mandatory_element);
9578
    /*ngKSI     NAS key set identifier 9.11.3.32    M    V    1/2  */
9579
    /* Spare half octet    Spare half octet     9.5    M    V    1/2 */
9580
0
    proto_tree_add_item(tree, hf_nas_5gs_spare_half_octet, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
9581
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_KEY_SET_ID, " - ngKSI", ei_nas_5gs_missing_mandatory_element);
9582
    /*Replayed UE security capabilities    UE security capability     9.11.3.54    M    LV    3-5*/
9583
0
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UE_SEC_CAP, " - Replayed UE security capabilities", ei_nas_5gs_missing_mandatory_element);
9584
    /*E-    IMEISV request    IMEISV request     9.11.3.28    O    TV    1*/
9585
0
    ELEM_OPT_TV_SHORT(0xE0, NAS_PDU_TYPE_EMM, DE_EMM_IMEISV_REQ, NULL);
9586
    /*57    Selected EPS NAS security algorithms    EPS NAS security algorithms 9.11.3.25    O    TV    2 */
9587
0
    ELEM_OPT_TV(0x57, NAS_PDU_TYPE_EMM, DE_EMM_NAS_SEC_ALGS, " - Selected EPS NAS security algorithms");
9588
    /*36    Additional 5G security information    Additional 5G security information 9.11.3.12    O    TLV    3 */
9589
0
    ELEM_OPT_TLV(0x36, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ADD_5G_SEC_INF, NULL);
9590
    /*78    EAP message    EAP message     9.10.2.2    O    TLV-E    7*/
9591
0
    ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
9592
    /*38    ABBA    ABBA 9.11.3.10    O    TLV    4-n */
9593
0
    ELEM_OPT_TLV(0x38, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ABBA, NULL);
9594
    /*19    Replayed S1 UE security capabilities    S1 UE security capability 9.11.3.48A    O    TLV    4-7 */
9595
0
    ELEM_OPT_TLV(0x19, NAS_PDU_TYPE_EMM, DE_EMM_UE_SEC_CAP, " - Replayed S1 UE security capabilities");
9596
    /* 55    AUN3 device security key    AUN3 device security key 9.11.3.107    O    TLV    36-257 */
9597
0
    ELEM_OPT_TLV(0x55, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_AUN3_DEVICE_SEC_KEY, NULL);
9598
9599
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9600
9601
0
}
9602
9603
/*
9604
 * 8.2.26 Security mode complete
9605
 */
9606
static void
9607
nas_5gs_mm_sec_mode_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9608
0
{
9609
0
    uint32_t curr_offset;
9610
0
    uint32_t consumed;
9611
0
    unsigned   curr_len;
9612
9613
0
    curr_offset = offset;
9614
0
    curr_len = len;
9615
9616
    /* 77    IMEISV    5G mobile identity 9.11.3.4    O    TLV-E    11 */
9617
0
    ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, NULL);
9618
    /* 71    NAS message container    NAS message container 9.11.3.33    O    TLV-E    4-n */
9619
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_MSG_CONT, NULL);
9620
    /* 78    non-IMEISV PEI    5GS mobile identity 9.11.3.4    O    TLV-E    7-n */
9621
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GS_MOBILE_ID, " - non-IMEISV PEI");
9622
9623
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9624
9625
0
}
9626
9627
/*
9628
 * 8.2.27 Security mode reject
9629
 */
9630
9631
static void
9632
nas_5gs_mm_sec_mode_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9633
0
{
9634
0
    uint32_t curr_offset;
9635
0
    uint32_t consumed;
9636
0
    unsigned   curr_len;
9637
9638
0
    curr_offset = offset;
9639
0
    curr_len = len;
9640
9641
    /* 5GMM cause    5GMM cause 9.11.3.2    M    V    1 */
9642
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GMM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
9643
9644
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9645
9646
0
}
9647
9648
/*
9649
 * 8.2.28    Security protected 5GS NAS message
9650
 */
9651
9652
/*
9653
 * 8.2.29 5GMM status
9654
 */
9655
9656
static void
9657
nas_5gs_mm_5gmm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9658
0
{
9659
0
    uint32_t curr_offset;
9660
0
    uint32_t consumed;
9661
0
    unsigned   curr_len;
9662
9663
0
    curr_offset = offset;
9664
0
    curr_len = len;
9665
9666
    /* Direction: both*/
9667
    /* 5GMM cause    5GMM cause 9.11.3.2    M    V    1 */
9668
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_5GMM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
9669
9670
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9671
9672
0
}
9673
9674
/*
9675
 * 8.2.30    Control Plane Service request
9676
 */
9677
9678
static void
9679
nas_5gs_mm_control_plane_service_req(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9680
0
{
9681
0
    uint32_t curr_offset;
9682
0
    uint32_t consumed;
9683
0
    unsigned   curr_len;
9684
9685
0
    curr_offset = offset;
9686
0
    curr_len = len;
9687
9688
    /* UE to network */
9689
0
    pinfo->link_dir = P2P_DIR_UL;
9690
9691
    /*     Control plane service type    Control plane service type 9.11.3.18D    M    V    1/2 */
9692
    /*     ngKSI     NAS key set identifier 9.11.3.32    M    V    1/2 */
9693
0
    ELEM_MAND_VV_SHORT(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CTRL_PLANE_SERVICE_TYPE, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_KEY_SET_ID_H1, ei_nas_5gs_missing_mandatory_element);
9694
    /* 6F    CIoT small data container    CIoT small data container 9.11.3.18B    O    TLV    4-257 */
9695
0
    ELEM_OPT_TLV(0x6f, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_CIOT_SMALL_DATA_CONT, NULL);
9696
    /* 8-    Payload container type    Payload container type 9.11.3.40    O    TV    1 */
9697
0
    ELEM_OPT_TV_SHORT(0x80, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLD_CONT_TYPE, NULL);
9698
    /* 7B    Payload container    Payload container 9.11.3.39    O    TLV-E    4-65538 */
9699
0
    ELEM_OPT_TLV_E(0x7B, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PLD_CONT, NULL);
9700
    /* 12    PDU session ID    PDU session identity 2 9.11.3.41    C    TV    2 */
9701
0
    ELEM_OPT_TV(0x12, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_ID_2, " - PDU session ID");
9702
    /* 50    PDU session status    PDU session status 9.11.3.44    O    TLV    4-34 */
9703
0
    ELEM_OPT_TLV(0x50, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PDU_SES_STATUS, NULL);
9704
    /* F-    Release assistance indication    Release assistance indication 9.11.3.46A    O    TV    1  */
9705
0
    ELEM_OPT_TV_SHORT(0xF0, NAS_PDU_TYPE_ESM, DE_ESM_REL_ASSIST_IND, NULL);
9706
    /* 40    Uplink data status    Uplink data status 9.11.3.57    O    TLV    4-34 */
9707
0
    ELEM_OPT_TLV(0x40, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_UL_DATA_STATUS, NULL);
9708
    /* 71    NAS message container    NAS message container 9.11.3.33    O    TLV-E    4-n */
9709
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_NAS_MSG_CONT, NULL);
9710
    /* 24    Additional information    Additional information 9.11.2.1    O    TLV    3-n */
9711
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_ADD_INF, NULL);
9712
    /* 25    Allowed PDU session status    Allowed PDU session status 9.11.3.11    O    TLV    4-34 */
9713
0
    ELEM_OPT_TLV(0x25, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_ALLOW_PDU_SES_STS, NULL);
9714
    /* 29    UE request type    UE request type 9.11.3.76    O    TLV    3 */
9715
0
    ELEM_OPT_TLV(0x29, NAS_PDU_TYPE_EMM, DE_EMM_UE_REQUEST_TYPE, NULL);
9716
    /* 28    Paging restriction    Paging restriction 9.11.3.77    O    TLV    3-35 */
9717
0
    ELEM_OPT_TLV(0x28, NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PAGING_RESTRICTION, NULL);
9718
9719
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9720
9721
0
}
9722
9723
/*
9724
 * 8.2.31    Network slice-specific authentication command
9725
 */
9726
static void
9727
nas_5gs_mm_nw_slice_spec_auth_cmd(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9728
0
{
9729
0
    uint32_t curr_offset;
9730
0
    uint32_t consumed;
9731
0
    unsigned   curr_len;
9732
9733
0
    curr_offset = offset;
9734
0
    curr_len = len;
9735
9736
    /* network to UE */
9737
    /* S-NSSAI    S-NSSAI 9.11.2.8    M    LV    2-5 */
9738
0
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_S_NSSAI, NULL, ei_nas_5gs_missing_mandatory_element);
9739
    /* EAP message    EAP message 9.11.2.2    M    LV-E    6-1502 */
9740
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL, ei_nas_5gs_missing_mandatory_element);
9741
9742
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9743
9744
0
}
9745
9746
/*
9747
 * 8.2.32    Network slice-specific authentication complete
9748
 */
9749
static void
9750
nas_5gs_mm_nw_slice_spec_auth_comp(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9751
0
{
9752
0
    uint32_t curr_offset;
9753
0
    uint32_t consumed;
9754
0
    unsigned   curr_len;
9755
9756
0
    curr_offset = offset;
9757
0
    curr_len = len;
9758
9759
    /* UE to network */
9760
    /* S-NSSAI    S-NSSAI 9.11.2.8    M    LV    2-5 */
9761
0
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_S_NSSAI, NULL, ei_nas_5gs_missing_mandatory_element);
9762
    /* EAP message    EAP message 9.11.2.2    M    LV-E    6-1502 */
9763
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL, ei_nas_5gs_missing_mandatory_element);
9764
9765
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9766
9767
0
}
9768
9769
/*
9770
 * 8.2.33    Network slice-specific authentication result
9771
 */
9772
static void
9773
nas_5gs_mm_nw_slice_spec_auth_res(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9774
0
{
9775
0
    uint32_t curr_offset;
9776
0
    uint32_t consumed;
9777
0
    unsigned   curr_len;
9778
9779
0
    curr_offset = offset;
9780
0
    curr_len = len;
9781
9782
    /* network to UE */
9783
    /* S-NSSAI    S-NSSAI 9.11.2.8    M    LV    2-5 */
9784
0
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_S_NSSAI, NULL, ei_nas_5gs_missing_mandatory_element);
9785
    /* EAP message    EAP message 9.11.2.2    M    LV-E    6-1502 */
9786
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL, ei_nas_5gs_missing_mandatory_element);
9787
9788
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9789
9790
0
}
9791
9792
/*
9793
 * 8.2.34    Relay key request
9794
 */
9795
static void
9796
nas_5gs_mm_relay_key_request(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9797
0
{
9798
0
    uint32_t curr_offset;
9799
0
    uint32_t consumed;
9800
0
    unsigned   curr_len;
9801
9802
0
    curr_offset = offset;
9803
0
    curr_len = len;
9804
9805
    /* UE to network */
9806
    /* PRTI    ProSe relay transaction identity 9.11.3.88    M    V    1 */
9807
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PROSE_RELAY_TRANS_ID, NULL, ei_nas_5gs_missing_mandatory_element);
9808
    /* Relay key request parameters    Relay key request parameters 9.11.3.89    M    LV-E    22-65537 */
9809
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_RELAY_KEY_REQ_PARAMS, NULL, ei_nas_5gs_missing_mandatory_element);
9810
9811
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9812
0
}
9813
9814
/*
9815
 * 8.2.35    Relay key accept
9816
 */
9817
static void
9818
nas_5gs_mm_relay_key_accept(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9819
0
{
9820
0
    uint32_t curr_offset;
9821
0
    uint32_t consumed;
9822
0
    unsigned   curr_len;
9823
9824
0
    curr_offset = offset;
9825
0
    curr_len = len;
9826
9827
    /* network to UE */
9828
    /* PRTI    ProSe relay transaction identity 9.11.3.88    M    V    1 */
9829
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PROSE_RELAY_TRANS_ID, NULL, ei_nas_5gs_missing_mandatory_element);
9830
    /* Relay key response parameters    Relay key response parameters 9.11.3.90    M    LV-E    51-65537 */
9831
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_RELAY_KEY_REQ_PARAMS, NULL, ei_nas_5gs_missing_mandatory_element);
9832
    /* 78    EAP message    EAP message 9.10.2.2    O    TLV-E    7 - 1503 */
9833
0
    ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
9834
9835
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9836
0
}
9837
9838
/*
9839
 * 8.2.36    Relay key reject
9840
 */
9841
static void
9842
nas_5gs_mm_relay_key_reject(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9843
0
{
9844
0
    uint32_t curr_offset;
9845
0
    uint32_t consumed;
9846
0
    unsigned   curr_len;
9847
9848
0
    curr_offset = offset;
9849
0
    curr_len = len;
9850
9851
    /* network to UE */
9852
    /* PRTI    ProSe relay transaction identity 9.11.3.88    M    V    1 */
9853
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PROSE_RELAY_TRANS_ID, NULL, ei_nas_5gs_missing_mandatory_element);
9854
    /* 78    EAP message    EAP message 9.10.2.2    O    TLV-E    7 - 1503 */
9855
0
    ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
9856
9857
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9858
0
}
9859
9860
/*
9861
 * 8.2.37    Relay authentication request
9862
 */
9863
static void
9864
nas_5gs_mm_relay_authentication_request(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9865
0
{
9866
0
    uint32_t curr_offset;
9867
0
    uint32_t consumed;
9868
0
    unsigned   curr_len;
9869
9870
0
    curr_offset = offset;
9871
0
    curr_len = len;
9872
9873
    /* network to UE */
9874
    /* PRTI    ProSe relay transaction identity 9.11.3.88    M    V    1 */
9875
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PROSE_RELAY_TRANS_ID, NULL, ei_nas_5gs_missing_mandatory_element);
9876
    /* EAP message    EAP message 9.10.2.2    O    LV-E    6 - 1502 */
9877
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL, ei_nas_5gs_missing_mandatory_element);
9878
9879
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9880
0
}
9881
9882
/*
9883
 * 8.2.38    Relay authentication response
9884
 */
9885
static void
9886
nas_5gs_mm_relay_authentication_response(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_, uint32_t offset, unsigned len)
9887
0
{
9888
0
    uint32_t curr_offset;
9889
0
    uint32_t consumed;
9890
0
    unsigned   curr_len;
9891
9892
0
    curr_offset = offset;
9893
0
    curr_len = len;
9894
9895
    /* UE to network */
9896
    /* PRTI    ProSe relay transaction identity 9.11.3.88    M    V    1 */
9897
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_MM, DE_NAS_5GS_MM_PROSE_RELAY_TRANS_ID, NULL, ei_nas_5gs_missing_mandatory_element);
9898
    /* EAP message    EAP message 9.10.2.2    O    LV-E    6 - 1502 */
9899
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL, ei_nas_5gs_missing_mandatory_element);
9900
9901
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9902
0
}
9903
9904
/* 8.3 5GS session management messages */
9905
9906
/*
9907
 * 8.3.1 PDU session establishment request
9908
 */
9909
static void
9910
nas_5gs_sm_pdu_ses_est_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9911
0
{
9912
0
    uint32_t curr_offset;
9913
0
    uint32_t consumed;
9914
0
    unsigned   curr_len;
9915
9916
0
    curr_offset = offset;
9917
0
    curr_len = len;
9918
9919
    /* Direction: UE to network */
9920
0
    pinfo->link_dir = P2P_DIR_UL;
9921
9922
    /*Integrity protection maximum data rate    Integrity protection maximum data rate 9.11.4.7    M    V    2*/
9923
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_INT_PROT_MAX_DATA_RTE, NULL, ei_nas_5gs_missing_mandatory_element);
9924
    /*9-    PDU session type    PDU session type     9.11.4.5    O    TV    1*/
9925
0
    ELEM_OPT_TV_SHORT(0x90, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PDU_SESSION_TYPE, NULL);
9926
    /*A-    SSC mode    SSC mode     9.11.4.9    O    TV    1*/
9927
0
    ELEM_OPT_TV_SHORT(0xa0, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_SSC_MODE, NULL);
9928
    /*28    5GSM capability    5GSM capability     9.11.4.10    O    TLV    3-15 */
9929
0
    ELEM_OPT_TLV(0x28, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAP, NULL);
9930
    /*55    Maximum number of supported packet filter    Maximum number of supported packet filter   9.11.4.9    O    TV    3*/
9931
0
    ELEM_OPT_TV(0x55, NAS_5GS_PDU_TYPE_SM,  DE_NAS_5GS_SM_MAX_NUM_SUP_PKT_FLT, NULL);
9932
    /* B-    Always-on PDU session requested    Always-on PDU session requested 9.11.4.4    O    TV    1 */
9933
0
    ELEM_OPT_TV_SHORT(0xB0, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ALWAYS_ON_PDU_SES_REQ, NULL);
9934
    /*39    SM PDU DN request container    SM PDU DN request container 9.11.4.15    O    TLV    3-255 */
9935
0
    ELEM_OPT_TLV(0x39, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PDU_DN_REQ_CONT, NULL);
9936
    /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
9937
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
9938
    /* 66    Header compression configuration    Header compression configuration 9.11.4.24    O    TLV    5-257 */
9939
0
    ELEM_OPT_TLV(0x66, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_IP_HDR_COMP_CONF, NULL);
9940
    /* 6E    DS-TT Ethernet port MAC address    DS-TT Ethernet port MAC address 9.11.4.25    O    TLV    8 */
9941
0
    ELEM_OPT_TLV(0x6E, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_DS_TT_ETH_PORT_MAC_ADDR, NULL);
9942
    /* 6F    UE-DS-TT residence time    UE-DS-TT residence time 9.11.4.26    O    TLV    10 */
9943
0
    ELEM_OPT_TLV(0x6F, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_UE_DS_TT_RESIDENCE_T, NULL);
9944
    /* 74    Port management information container    Port management information container 9.11.4.27    O    TLV-E    8-65538 */
9945
0
    ELEM_OPT_TLV_E(0x74, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PORT_MGNT_INF_CONT, NULL);
9946
    /* 1F    Ethernet header compression configuration    Ethernet header compression configuration 9.11.4.28    O    TLV    3 */
9947
0
    ELEM_OPT_TLV(0x1F, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ETH_HDR_COMP_CONF, NULL);
9948
    /* 29    Suggested interface identifier    PDU address 9.11.4.10    O    TLV    11 */
9949
0
    ELEM_OPT_TLV(0x29, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PDU_ADDRESS, " - Suggested interface identifier");
9950
    /* 72    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
9951
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
9952
    /* 70    Requested MBS container    Requested MBS container 9.11.4.30    O    TLV-E    8-65538 */
9953
0
    ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_REQ_MBS_CONT, NULL);
9954
    /* 34    PDU session pair ID    PDU session pair ID 9.11.4.32    O    TLV    3 */
9955
0
    ELEM_OPT_TLV(0x34, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PDU_SESSION_PAIR_ID, NULL);
9956
    /* 35    RSN    RSN 9.11.4.33    O    TLV    3 */
9957
0
    ELEM_OPT_TLV(0x35, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_RSN, NULL);
9958
    /* 36    URSP rule enforcement reports    URSP rule enforcement reports 9.11.4.38    O    TLV    4-n */
9959
0
    ELEM_OPT_TLV(0x36, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_URSP_RULE_ENFORCE_REPORTS, NULL);
9960
9961
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
9962
9963
0
}
9964
9965
/*
9966
 * 8.3.2 PDU session establishment accept
9967
 */
9968
static void
9969
nas_5gs_sm_pdu_ses_est_acc(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
9970
0
{
9971
0
    uint32_t curr_offset;
9972
0
    uint32_t consumed;
9973
0
    unsigned   curr_len;
9974
9975
0
    curr_offset = offset;
9976
0
    curr_len = len;
9977
9978
    /* Direction: network to UE */
9979
0
    pinfo->link_dir = P2P_DIR_DL;
9980
9981
    /*Selected SSC mode    SSC mode 9.11.4.9    M    V    1/2 H1*/
9982
0
    proto_tree_add_item(tree, hf_nas_5gs_sm_sel_sc_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
9983
    /*Selected PDU session type    PDU session type 9.11.4.5    M    V    1/2 H0*/
9984
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PDU_SESSION_TYPE, " - Selected PDU session type", ei_nas_5gs_missing_mandatory_element);
9985
    /*Authorized QoS rules    QoS rules 9.11.4.6    M    LV-E    2-65537 DE_NAS_5GS_SM_QOS_RULES*/
9986
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_QOS_RULES, " - Authorized QoS rules", ei_nas_5gs_missing_mandatory_element);
9987
    /*Session AMBR    Session-AMBR 9.11.4.14    M    LV    7 */
9988
0
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_SESSION_AMBR, NULL, ei_nas_5gs_missing_mandatory_element);
9989
    /*59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2*/
9990
0
    ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
9991
    /*29    PDU address    PDU address 9.11.4.10    O    TLV    7 */
9992
0
    ELEM_OPT_TLV(0x29, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PDU_ADDRESS, NULL);
9993
    /*56    RQ timer value    GPRS timer 9.10.2.3    O    TV    2*/
9994
0
    ELEM_OPT_TV(0x56, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - RQ timer value");
9995
    /*22    S-NSSAI    S-NSSAI 9.11.2.8    O    TLV    3-6*/
9996
0
    ELEM_OPT_TLV(0x22, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_S_NSSAI, NULL);
9997
    /* 8-    Always-on PDU session indication    Always-on PDU session indication 9.11.4.3    O    TV    1 */
9998
0
    ELEM_OPT_TV_SHORT(0x80, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ALWAYS_ON_PDU_SES_IND, NULL);
9999
    /* 75    Mapped EPS bearer contexts    Mapped EPS bearer contexts 9.11.4.9    O    TLV-E    7-65538 */
10000
0
    ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_MAPPED_EPS_B_CONT, NULL);
10001
    /*78    EAP message    EAP message 9.11.3.14    O    TLV-E    7-1503*/
10002
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
10003
    /*79    Authorized QoS flow descriptions    QoS flow descriptions 9.11.4.12    O    TLV-E    6-65538 */
10004
0
    ELEM_OPT_TLV_E(0x79, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_QOS_FLOW_DES, " - Authorized");
10005
    /*7B    Extended protocol configuration options    Extended protocol configuration options 9.11.4.2    O    TLV-E    4-65538*/
10006
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10007
    /* 25    DNN    DNN 9.11.2.1B    O    TLV    3-102 */
10008
0
    ELEM_OPT_TLV(0x25, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_DNN, NULL);
10009
    /* 17    5GSM network feature support    5GSM network feature support 9.11.4.18    O    TLV    3-15  */
10010
0
    ELEM_OPT_TLV(0x17, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_NW_FEATURE_SUP, NULL);
10011
    /* 18    Serving PLMN rate control    Serving PLMN rate control 9.11.4.20    O    TLV    4  */
10012
0
    ELEM_OPT_TLV(0x18, NAS_PDU_TYPE_ESM, DE_ESM_SERV_PLMN_RATE_CTRL, NULL);
10013
    /* 77    ATSSS container    ATSSS container 9.11.4.22    O    TLV-E    3-65538  */
10014
0
    ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ATSSS_CONT, NULL);
10015
    /* C-    Control plane only indication    Control plane only indication 9.11.4.23    O    TV    1  */
10016
0
    ELEM_OPT_TV_SHORT(0xC0, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_CTL_PLANE_ONLY_IND, NULL);
10017
    /* 66    IP header compression configuration    IP header compression configuration 9.11.4.24    O    TLV    5-257 */
10018
0
    ELEM_OPT_TLV(0x66, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_IP_HDR_COMP_CONF, NULL);
10019
    /* 1F    Ethernet header compression configuration    Ethernet header compression configuration 9.11.4.28    O    TLV    3 */
10020
0
    ELEM_OPT_TLV(0x1F, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ETH_HDR_COMP_CONF, NULL);
10021
    /* 72    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
10022
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
10023
    /* 71    Received MBS container    Received MBS container 9.11.4.31    O    TLV-E    8-65538 */
10024
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_REC_MBS_CONT, NULL);
10025
    /* 70    N3QAI    N3QAI 9.11.4.36    O    TLV-E    9-n */
10026
0
    ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_N3QAI, NULL);
10027
    /* 73    Protocol description    Protocol description 9.11.4.39    O    TLV-E    6-n */
10028
0
    ELEM_OPT_TLV_E(0x73, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PROT_DESC, NULL);
10029
    /* 38    ECN marking for L4S indication    ECN marking for L4S indication 9.11.4.40    O    TLV    2-257 */
10030
0
    ELEM_OPT_TLV(0x38, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ECN_MARK_L4S_IND, NULL);
10031
10032
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10033
10034
0
}
10035
10036
/*
10037
 * 8.3.3 PDU session establishment reject
10038
 */
10039
10040
static void
10041
nas_5gs_sm_pdu_ses_est_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10042
0
{
10043
0
    uint32_t curr_offset;
10044
0
    uint32_t consumed;
10045
0
    unsigned   curr_len;
10046
10047
0
    curr_offset = offset;
10048
0
    curr_len = len;
10049
10050
    /* Direction: network to UE */
10051
0
    pinfo->link_dir = P2P_DIR_DL;
10052
10053
    /* 5GSM cause    5GSM cause 9.11.4.2    M    V    1 */
10054
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, " - ESM cause", ei_nas_5gs_missing_mandatory_element);
10055
    /*37    Back-off timer value    GPRS timer 3 9.11.2.5    O    TLV    3 */
10056
0
    ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Back-off timer value");
10057
    /*F-    Allowed SSC mode    Allowed SSC mode 9.11.4.3    O    TV    1*/
10058
0
    ELEM_OPT_TV_SHORT(0xF0, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_ALLOWED_SSC_MODE, NULL);
10059
    /*78    EAP message    EAP message 9.11.3.14    O    TLV - E    7 - 1503*/
10060
0
    ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
10061
    /* 61    5GSM congestion re-attempt indicator    5GSM congestion re-attempt indicator 9.11.4.21    O    TLV    3 */
10062
0
    ELEM_OPT_TLV(0x61, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CONG_RE_ATTEMPT_IND, NULL);
10063
    /*7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10064
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10065
    /* 1D    Re-attempt indicator    Re-attempt indicator 9.11.4.17    O    TLV    3  */
10066
0
    ELEM_OPT_TLV(0x1D, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_RE_ATTEMPT_IND, NULL);
10067
    /* 72    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
10068
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
10069
    /* 77    ATSSS container    ATSSS container 9.11.4.22    O    TLV-E    3-65538  */
10070
0
    ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ATSSS_CONT, NULL);
10071
10072
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10073
10074
0
}
10075
10076
/*
10077
 * 8.3.4 PDU session authentication command
10078
 */
10079
10080
static void
10081
nas_5gs_sm_pdu_ses_auth_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10082
0
{
10083
0
    uint32_t curr_offset;
10084
0
    uint32_t consumed;
10085
0
    unsigned   curr_len;
10086
10087
0
    curr_offset = offset;
10088
0
    curr_len = len;
10089
10090
    /* Direction: network to UE */
10091
0
    pinfo->link_dir = P2P_DIR_DL;
10092
10093
    /*EAP message    EAP message 9.11.2.2    M    LV-E    6-1502 */
10094
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL, ei_nas_5gs_missing_mandatory_element);
10095
    /*7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10096
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10097
10098
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10099
10100
0
}
10101
/*
10102
 * 8.3.5 PDU session authentication complete
10103
 */
10104
10105
static void
10106
nas_5gs_sm_pdu_ses_auth_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10107
0
{
10108
0
    uint32_t curr_offset;
10109
0
    uint32_t consumed;
10110
0
    unsigned   curr_len;
10111
10112
0
    curr_offset = offset;
10113
0
    curr_len = len;
10114
10115
    /* Direction: UE to network */
10116
0
    pinfo->link_dir = P2P_DIR_UL;
10117
10118
    /*EAP message    EAP message 9.11.2.2    M    LV-E    6-1502 */
10119
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL, ei_nas_5gs_missing_mandatory_element);
10120
    /*7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10121
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10122
10123
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10124
10125
0
}
10126
10127
/*
10128
 * 8.3.6 PDU session authentication result
10129
 */
10130
static void
10131
nas_5gs_sm_pdu_ses_auth_res(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10132
0
{
10133
0
    uint32_t curr_offset;
10134
0
    uint32_t consumed;
10135
0
    unsigned   curr_len;
10136
10137
0
    curr_offset = offset;
10138
0
    curr_len = len;
10139
10140
    /* Direction: network to UE */
10141
0
    pinfo->link_dir = P2P_DIR_DL;
10142
10143
    /*EAP message    EAP message 9.11.2.2    O    TLV-E    7-1503 */
10144
0
    ELEM_OPT_TLV_E(0x78, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
10145
    /*7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10146
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10147
10148
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10149
10150
0
}
10151
10152
/*
10153
 *8.3.7 PDU session modification request
10154
 */
10155
10156
static void
10157
nas_5gs_sm_pdu_ses_mod_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10158
0
{
10159
0
    uint32_t curr_offset;
10160
0
    uint32_t consumed;
10161
0
    unsigned   curr_len;
10162
10163
0
    curr_offset = offset;
10164
0
    curr_len = len;
10165
10166
    /* Direction: UE to network */
10167
0
    pinfo->link_dir = P2P_DIR_UL;
10168
10169
    /* 28    5GSM capability    5GSM capability 9.11.4.10    O    TLV    3-15 */
10170
0
    ELEM_OPT_TLV(0x28, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAP, NULL);
10171
    /* 59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2 */
10172
0
    ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10173
    /* 55    Maximum number of supported packet filter    Maximum number of supported packet filter   9.11.4.6    O    TV    3*/
10174
0
    ELEM_OPT_TV(0x55, NAS_5GS_PDU_TYPE_SM,  DE_NAS_5GS_SM_MAX_NUM_SUP_PKT_FLT, NULL);
10175
    /* B-    Always-on PDU session requested    Always-on PDU session requested 9.11.4.4    O    TV    1 */
10176
0
    ELEM_OPT_TV_SHORT(0xB0, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ALWAYS_ON_PDU_SES_REQ, NULL);
10177
    /* 13    Integrity protection maximum data rate    Integrity protection maximum data rate 9.11.4.7    O    TV    3 */
10178
0
    ELEM_OPT_TV(0x13, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_INT_PROT_MAX_DATA_RTE, NULL);
10179
    /* 7A    Requested QoS rules    QoS rules 9.11.4.6    O    TLV-E    3-65538 */
10180
0
    ELEM_OPT_TLV_E(0x7A, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_QOS_RULES, " - Requested QoS rules");
10181
    /* 79    Requested QoS flow descriptions    QoS flow descriptions 9.11.4.12    O    TLV-E    5-65538 */
10182
0
    ELEM_OPT_TLV_E(0x79, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_QOS_FLOW_DES, " - Authorized");
10183
    /* 75    Mapped EPS bearer contexts    Mapped EPS bearer contexts 9.11.4.8    O    TLV-E    7-65538 */
10184
0
    ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_MAPPED_EPS_B_CONT, NULL);
10185
    /* 7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10186
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10187
    /* 74    Port management information container    Port management information container 9.11.4.27    O    TLV-E    4-65538 */
10188
0
    ELEM_OPT_TLV_E(0x74, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PORT_MGNT_INF_CONT, NULL);
10189
    /* 66    IP header compression configuration    Header compression configuration 9.11.4.24    O    TLV    5-257 */
10190
0
    ELEM_OPT_TLV(0x66, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_IP_HDR_COMP_CONF, NULL);
10191
    /* 1F    Ethernet header compression configuration    Ethernet header compression configuration 9.11.4.28    O    TLV    3 */
10192
0
    ELEM_OPT_TLV(0x1F, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ETH_HDR_COMP_CONF, NULL);
10193
    /* 70    Requested MBS container    Requested MBS container 9.11.4.30    O    TLV-E    8-65538 */
10194
0
    ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_REQ_MBS_CONT, NULL);
10195
    /* 72    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
10196
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
10197
    /* 73    Non-3GPP delay budget    Non-3GPP delay budget 9.11.4.37    O    TLV-E    6-n */
10198
0
    ELEM_OPT_TLV_E(0x73, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_N3GPP_DELAY_BUDGET, NULL);
10199
    /* 36    URSP rule enforcement reports    URSP rule enforcement reports 9.11.4.38    O    TLV    4-n */
10200
0
    ELEM_OPT_TLV(0x36, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_URSP_RULE_ENFORCE_REPORTS, NULL);
10201
    /* 7C    Non-3GPP device information    Non-3GPP device information 9.11.4.41    O    TLV-E    7-n */
10202
0
    ELEM_OPT_TLV_E(0x7C, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_N3GPP_DEVICE_INFO, NULL);
10203
10204
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10205
10206
0
}
10207
10208
/*
10209
 * 8.3.8    PDU session modification reject
10210
 */
10211
10212
static void
10213
nas_5gs_sm_pdu_ses_mod_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10214
0
{
10215
0
    uint32_t curr_offset;
10216
0
    uint32_t consumed;
10217
0
    unsigned   curr_len;
10218
10219
0
    curr_offset = offset;
10220
0
    curr_len = len;
10221
10222
    /* Direction: network to UE */
10223
0
    pinfo->link_dir = P2P_DIR_DL;
10224
10225
    /* 5GSM cause    5GSM cause 9.11.4.2    M    V    1 */
10226
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
10227
    /* 37    Back-off timer value    GPRS timer 3 9.11.2.5    O    TLV    3 */
10228
0
    ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Back-off timer value");
10229
    /* 61    5GSM congestion re-attempt indicator    5GSM congestion re-attempt indicator 9.11.4.21    O    TLV    3 */
10230
0
    ELEM_OPT_TLV(0x61, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CONG_RE_ATTEMPT_IND, NULL);
10231
    /* 7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.6    O    TLV - E    4 - 65538*/
10232
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10233
    /* 1D    Re-attempt indicator    Re-attempt indicator 9.11.4.17    O    TLV    3  */
10234
0
    ELEM_OPT_TLV(0x1D, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_RE_ATTEMPT_IND, NULL);
10235
10236
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10237
10238
0
}
10239
10240
/*
10241
* 8.3.9 PDU session modification command
10242
*/
10243
10244
static void
10245
nas_5gs_sm_pdu_ses_mod_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10246
0
{
10247
0
    uint32_t curr_offset;
10248
0
    uint32_t consumed;
10249
0
    unsigned   curr_len;
10250
10251
0
    curr_offset = offset;
10252
0
    curr_len = len;
10253
10254
    /* Direction: network to UE */
10255
0
    pinfo->link_dir = P2P_DIR_DL;
10256
10257
    /*59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2*/
10258
0
    ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10259
    /*2A    Session AMBR    Session-AMBR     9.11.4.14    O    TLV    8*/
10260
0
    ELEM_OPT_TLV(0x2A, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_SESSION_AMBR, NULL);
10261
    /*56    RQ timer value    GPRS timer     9.11.4.3    O    TV    2*/
10262
0
    ELEM_OPT_TV(0x56, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - PDU session release time");
10263
    /* 8-   Always-on PDU session indication    Always-on PDU session indication 9.11.4.3    O    TV    1 */
10264
0
    ELEM_OPT_TV_SHORT(0x80, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ALWAYS_ON_PDU_SES_IND, NULL);
10265
    /*7A    Authorized QoS rules    QoS rules     9.11.4.6    O    TLV-E    3-65538*/
10266
0
    ELEM_OPT_TLV_E(0x7A, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_QOS_RULES, " - Authorized QoS rules");
10267
    /*75    Mapped EPS bearer contexts     Mapped EPS  bearer contexts     9.11.4.5    O    TLV-E    7-65538*/
10268
0
    ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_MAPPED_EPS_B_CONT, NULL);
10269
    /*79    Authorized QoS flow descriptions     QoS flow descriptions     9.11.4.12    O    TLV-E    6-65538*/
10270
0
    ELEM_OPT_TLV_E(0x79, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_QOS_FLOW_DES, " - Authorized");
10271
    /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10272
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10273
    /* 77    ATSSS container    ATSSS container 9.11.4.22    O    TLV-E    3-65538  */
10274
0
    ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ATSSS_CONT, NULL);
10275
    /* 66    66    IP header compression configuration    IP header compression configuration 9.11.4.24    O    TLV    5-257  */
10276
0
    ELEM_OPT_TLV(0x66, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_IP_HDR_COMP_CONF, NULL);
10277
    /* 74    Port management information container    Port management information container 9.11.4.27    O    TLV-E    4-65538 */
10278
0
    ELEM_OPT_TLV_E(0x74, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PORT_MGNT_INF_CONT, NULL);
10279
    /* 1E    Serving PLMN rate control    Serving PLMN rate control 9.11.4.20    O    TLV    4 */
10280
0
    ELEM_OPT_TLV(0x1E, NAS_PDU_TYPE_ESM, DE_ESM_SERV_PLMN_RATE_CTRL, NULL);
10281
    /* 1F    Ethernet header compression configuration    Ethernet header compression configuration 9.11.4.28    O    TLV    3 */
10282
0
    ELEM_OPT_TLV(0x1F, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ETH_HDR_COMP_CONF, NULL);
10283
    /* 71    Received MBS container    Received MBS container 9.11.4.31    O    TLV-E    8-65538 */
10284
0
    ELEM_OPT_TLV_E(0x71, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_REC_MBS_CONT, NULL);
10285
    /* 72    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
10286
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
10287
    /* 5A    Alternative S-NSSAI    S-NSSAI    9.11.2.8    O    TLV    3-10 */
10288
0
    ELEM_OPT_TLV(0x5A, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_S_NSSAI, " - Alternative S-NSSAI");
10289
    /* 70    N3QAI    N3QAI 9.11.4.36    O    TLV-E    9-n */
10290
0
    ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_N3QAI, NULL);
10291
    /* 73    Protocol description    Protocol description 9.11.4.39    O    TLV-E    6-n */
10292
0
    ELEM_OPT_TLV_E(0x73, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PROT_DESC, NULL);
10293
    /* 38    ECN marking for L4S indication    ECN marking for L4S indication 9.11.4.40    O    TLV    2-257 */
10294
0
    ELEM_OPT_TLV(0x38, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ECN_MARK_L4S_IND, NULL);
10295
10296
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10297
10298
0
}
10299
10300
/*
10301
 * 8.3.10 PDU session modification complete
10302
 */
10303
10304
static void
10305
nas_5gs_sm_pdu_ses_mod_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10306
1
{
10307
1
    uint32_t curr_offset;
10308
1
    uint32_t consumed;
10309
1
    unsigned   curr_len;
10310
10311
1
    curr_offset = offset;
10312
1
    curr_len = len;
10313
10314
    /* Direction: UE to network */
10315
1
    pinfo->link_dir = P2P_DIR_UL;
10316
10317
    /* 7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10318
1
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10319
    /* 59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2*/
10320
0
    ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10321
    /* 7B    Extended protocol configuration options    Extended protocol configuration options 9.11.4.6    O    TLV-E    4-65538 */
10322
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10323
    /* 74    Port management information container    Port management information container 9.11.4.27    O    TLV-E    4-65538 */
10324
0
    ELEM_OPT_TLV_E(0x74, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PORT_MGNT_INF_CONT, NULL);
10325
10326
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10327
10328
0
}
10329
10330
/*
10331
 * 8.3.11 PDU session modification command reject
10332
 */
10333
10334
static void
10335
nas_5gs_sm_pdu_ses_mod_com_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10336
1
{
10337
1
    uint32_t curr_offset;
10338
1
    uint32_t consumed;
10339
1
    unsigned   curr_len;
10340
10341
1
    curr_offset = offset;
10342
1
    curr_len = len;
10343
10344
    /* Direction: UE to network */
10345
1
    pinfo->link_dir = P2P_DIR_UL;
10346
10347
    /* 5GSM cause    5GSM cause 9.11.4.2    M    V    1 */
10348
1
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
10349
    /*7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10350
1
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10351
10352
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10353
10354
0
}
10355
10356
/*
10357
 * 8.3.12 PDU session release request
10358
 */
10359
10360
static void
10361
nas_5gs_sm_pdu_ses_rel_req(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10362
0
{
10363
0
    uint32_t curr_offset;
10364
0
    uint32_t consumed;
10365
0
    unsigned   curr_len;
10366
10367
0
    curr_offset = offset;
10368
0
    curr_len = len;
10369
10370
    /* Direction: UE to network */
10371
0
    pinfo->link_dir = P2P_DIR_UL;
10372
10373
    /* 59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2 */
10374
0
    ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10375
    /* 7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10376
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10377
10378
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10379
10380
0
}
10381
10382
/*
10383
 * 8.3.13 PDU session release reject
10384
 */
10385
10386
static void
10387
nas_5gs_sm_pdu_ses_rel_rej(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10388
1
{
10389
1
    uint32_t curr_offset;
10390
1
    uint32_t consumed;
10391
1
    unsigned   curr_len;
10392
10393
1
    curr_offset = offset;
10394
1
    curr_len = len;
10395
10396
    /* Direction: network to UE */
10397
1
    pinfo->link_dir = P2P_DIR_DL;
10398
10399
    /* 5GSM cause    5GSM cause 9.11.4.2    M    V    1 */
10400
1
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
10401
    /*7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10402
1
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10403
10404
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10405
10406
0
}
10407
10408
/*
10409
 * 8.3.14 PDU session release command
10410
 */
10411
10412
static void
10413
nas_5gs_sm_pdu_ses_rel_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10414
0
{
10415
0
    uint32_t curr_offset;
10416
0
    uint32_t consumed;
10417
0
    unsigned   curr_len;
10418
10419
0
    curr_offset = offset;
10420
0
    curr_len = len;
10421
10422
    /* Direction: network to UE */
10423
0
    pinfo->link_dir = P2P_DIR_DL;
10424
10425
    /* 5GSM cause    5GSM cause 9.11.4.2    M    V    1 */
10426
0
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
10427
    /*37    Back-off timer value    GPRS timer 3 9.11.2.5    O    TLV    3 */
10428
0
    ELEM_OPT_TLV(0x37, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER_3, " - Back-off timer value");
10429
    /*78    EAP message    EAP message 9.10.2.2    O    TLV - E    7 - 1503*/
10430
0
    ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
10431
    /* 61    5GSM congestion re-attempt indicator    5GSM congestion re-attempt indicator 9.11.4.21    O    TLV    3 */
10432
0
    ELEM_OPT_TLV(0x61, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CONG_RE_ATTEMPT_IND, NULL);
10433
    /* 7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10434
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10435
    /* D-    Access type    Access type 9.11.2.1A    O    TV    1 */
10436
0
    ELEM_OPT_TV_SHORT(0xD0, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_ACCESS_TYPE, NULL);
10437
    /* 72    Service-level-AA container    Service-level-AA container 9.11.2.10    O    TLV-E    4-65538 */
10438
0
    ELEM_OPT_TLV_E(0x72, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL);
10439
    /* 5A    Alternative S-NSSAI    S-NSSAI    9.11.2.8    O    TLV    3-10 */
10440
0
    ELEM_OPT_TLV(0x5A, NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_S_NSSAI, " - Alternative S-NSSAI");
10441
10442
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10443
10444
0
}
10445
10446
/*
10447
* 8.3.15 PDU session release complete
10448
*/
10449
10450
static void
10451
nas_5gs_sm_pdu_ses_rel_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10452
1
{
10453
1
    uint32_t curr_offset;
10454
1
    uint32_t consumed;
10455
1
    unsigned   curr_len;
10456
10457
1
    curr_offset = offset;
10458
1
    curr_len = len;
10459
10460
    /* Direction: UE to network */
10461
1
    pinfo->link_dir = P2P_DIR_UL;
10462
10463
    /* 59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2 */
10464
1
    ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10465
    /*7B    Extended protocol configuration options    Extended protocol configuration options    9.11.4.2    O    TLV - E    4 - 65538*/
10466
0
    ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10467
10468
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10469
0
}
10470
10471
/*
10472
 * 8.3.16 5GSM status
10473
 */
10474
10475
static void
10476
nas_5gs_sm_5gsm_status(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10477
1
{
10478
1
    uint32_t curr_offset;
10479
1
    uint32_t consumed;
10480
1
    unsigned   curr_len;
10481
10482
1
    curr_offset = offset;
10483
1
    curr_len = len;
10484
10485
    /* Direction: both */
10486
    /* 5GSM cause    5GSM cause 9.11.4.2    M    V    1 */
10487
1
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
10488
10489
1
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10490
1
}
10491
10492
/*
10493
 * 8.3.17 Service-level authentication command
10494
 */
10495
10496
static void
10497
nas_5gs_sm_serv_level_auth_cmd(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10498
0
{
10499
0
    uint32_t curr_offset;
10500
0
    uint32_t consumed;
10501
0
    unsigned   curr_len;
10502
10503
0
    curr_offset = offset;
10504
0
    curr_len = len;
10505
10506
    /* Direction: network to UE */
10507
    /* Service-level-AA container    Service-level-AA container 9.11.2.10    M    LV-E    5-65538 */
10508
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL, ei_nas_5gs_missing_mandatory_element);
10509
10510
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10511
0
}
10512
10513
/*
10514
 * 8.3.18 Service-level authentication complete
10515
 */
10516
10517
static void
10518
nas_5gs_sm_serv_level_auth_comp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10519
0
{
10520
0
    uint32_t curr_offset;
10521
0
    uint32_t consumed;
10522
0
    unsigned   curr_len;
10523
10524
0
    curr_offset = offset;
10525
0
    curr_len = len;
10526
10527
    /* Direction: UE to network */
10528
    /* Service-level-AA container    Service-level-AA container 9.11.2.10    M    LV-E    5-65538 */
10529
0
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_SERVICE_LEVEL_AA_CONT, NULL, ei_nas_5gs_missing_mandatory_element);
10530
10531
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10532
0
}
10533
10534
/*
10535
 * 8.3.19 Remote UE report
10536
 */
10537
10538
static void
10539
nas_5gs_sm_remote_ue_report(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10540
1
{
10541
1
    uint32_t curr_offset;
10542
1
    uint32_t consumed;
10543
1
    unsigned   curr_len;
10544
10545
1
    curr_offset = offset;
10546
1
    curr_len = len;
10547
10548
    /* Direction: UE to network */
10549
    /* 76    Remote UE context connected    Remote UE context list 9.11.4.29    O    TLV-E    16-65538 */
10550
1
    ELEM_OPT_TLV_E(0x76, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_REMOTE_UE_CTX_LIST, " - Connected");
10551
    /* 70    Remote UE context disconnected    Remote UE context list 9.11.4.29    O    TLV-E    16-65538 */
10552
0
    ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_REMOTE_UE_CTX_LIST, " - Disconnected");
10553
10554
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10555
0
}
10556
10557
/*
10558
 * 8.3.20 Remote UE report response
10559
 */
10560
10561
static void
10562
nas_5gs_sm_remote_ue_resp(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len)
10563
0
{
10564
0
    uint32_t curr_offset;
10565
0
    unsigned   curr_len;
10566
10567
0
    curr_offset = offset;
10568
0
    curr_len = len;
10569
10570
    /* Direction: network to UE */
10571
10572
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10573
0
}
10574
10575
/* TS 29.502 6.1.6.4.4 n1SmInfoFromUe, n1SmInfoToUe, unknownN1SmInfo */
10576
10577
/*
10578
 * 6.1.6.4.4-1 n1SmInfoFromUE
10579
 */
10580
static void
10581
nas_5gs_n1_sm_info_from_ue(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, uint32_t message_type)
10582
0
{
10583
0
    uint32_t curr_offset;
10584
0
    uint32_t consumed;
10585
0
    unsigned   curr_len;
10586
10587
0
    curr_offset = offset;
10588
0
    curr_len = len;
10589
10590
    /* Direction: UE to network */
10591
0
    pinfo->link_dir = P2P_DIR_UL;
10592
10593
0
    switch(message_type) {
10594
0
        case NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_REQUEST:
10595
0
        {
10596
            /*9-    PDU session type    PDU session type     9.11.4.5    O    TV    1*/
10597
0
            ELEM_OPT_TV_SHORT(0x90, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PDU_SESSION_TYPE, NULL);
10598
10599
            /*A-    SSC mode    SSC mode     9.11.4.9    O    TV    1*/
10600
0
            ELEM_OPT_TV_SHORT(0xa0, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_SSC_MODE, NULL);
10601
10602
            /*28    5GSM capability    5GSM capability     9.11.4.10    O    TLV    3-15 */
10603
0
            ELEM_OPT_TLV(0x28, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAP, NULL);
10604
10605
            /*55    Maximum number of supported packet filter    Maximum number of supported packet filter   9.11.4.9    O    TV    3*/
10606
0
            ELEM_OPT_TV(0x55, NAS_5GS_PDU_TYPE_SM,  DE_NAS_5GS_SM_MAX_NUM_SUP_PKT_FLT, NULL);
10607
10608
            /*39    SM PDU DN request container    SM PDU DN request container 9.11.4.15    O    TLV    3-255 */
10609
0
            ELEM_OPT_TLV(0x39, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_PDU_DN_REQ_CONT, NULL);
10610
10611
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10612
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10613
10614
0
            break;
10615
0
        }
10616
0
        case NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_REQUEST:
10617
0
        {
10618
            /*28    5GSM capability    5GSM capability     9.11.4.10    O    TLV    3-15 */
10619
0
            ELEM_OPT_TLV(0x28, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAP, NULL);
10620
10621
            /* 59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2 */
10622
0
            ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10623
10624
            /*55    Maximum number of supported packet filter    Maximum number of supported packet filter   9.11.4.9    O    TV    3*/
10625
0
            ELEM_OPT_TV(0x55, NAS_5GS_PDU_TYPE_SM,  DE_NAS_5GS_SM_MAX_NUM_SUP_PKT_FLT, NULL);
10626
10627
            /* 13    Integrity protection maximum data rate    Integrity protection maximum data rate 9.11.4.7    O    TV    3 */
10628
0
            ELEM_OPT_TV(0x13, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_INT_PROT_MAX_DATA_RTE, NULL);
10629
10630
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10631
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10632
10633
            /* 7A    Requested QoS rules    QoS rules 9.11.4.13    O    TLV-E    3-65538 */
10634
0
            ELEM_OPT_TLV_E(0x7A, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_QOS_RULES, " - Requested QoS rules");
10635
10636
            /*79    Requested QoS flow descriptions     QoS flow descriptions     9.11.4.12    O    TLV-E    6-65538*/
10637
0
            ELEM_OPT_TLV_E(0x79, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_QOS_FLOW_DES, " - Requested");
10638
10639
            /*75    Mapped EPS bearer contexts     Mapped EPS  bearer contexts     9.11.4.5    O    TLV-E    7-65538*/
10640
0
            ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_MAPPED_EPS_B_CONT, NULL);
10641
10642
0
            break;
10643
0
        }
10644
0
        case NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMPLETE:
10645
0
        case NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMMAND_REJECT:
10646
0
        {
10647
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10648
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10649
10650
0
            break;
10651
0
        }
10652
0
        case NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_COMPLETE:
10653
0
        {
10654
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10655
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10656
10657
            /*78    EAP message    EAP message 9.10.2.2    O    TLV - E    7 - 1503*/
10658
0
            ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
10659
10660
0
            break;
10661
0
        }
10662
0
        case NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_REQUEST:
10663
0
        case NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_COMPLETE:
10664
0
        {
10665
            /* 59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2 */
10666
0
            ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10667
10668
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10669
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10670
10671
0
            break;
10672
0
        }
10673
0
        case NAS_5GS_SM_MSG_REMOTE_UE_REPORT:
10674
0
        {
10675
            /* 76    Remote UE context connected    Remote UE context list 9.11.4.29    O    TLV-E    16-65538 */
10676
0
            ELEM_OPT_TLV_E(0x76, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_REMOTE_UE_CTX_LIST, " - Connected");
10677
            /* 70    Remote UE context disconnected    Remote UE context list 9.11.4.29    O    TLV-E    16-65538 */
10678
0
            ELEM_OPT_TLV_E(0x70, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_REMOTE_UE_CTX_LIST, " - Disconnected");
10679
10680
0
            break;
10681
0
        }
10682
0
        default:
10683
0
            proto_tree_add_expert_remaining(tree, pinfo, &ei_nas_5gs_ie_not_dis, tvb, offset);
10684
10685
0
            break;
10686
0
    }
10687
10688
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10689
0
}
10690
10691
/*
10692
 * 6.1.6.4.4-2 n1SmInfoToUE
10693
 */
10694
static void
10695
nas_5gs_n1_sm_info_to_ue(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, uint32_t message_type _U_)
10696
0
{
10697
0
    uint32_t curr_offset;
10698
0
    uint32_t consumed;
10699
0
    unsigned   curr_len;
10700
10701
0
    curr_offset = offset;
10702
0
    curr_len = len;
10703
10704
    /* Direction: network to UE*/
10705
0
    pinfo->link_dir = P2P_DIR_DL;
10706
10707
0
    switch(message_type) {
10708
0
        case NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_RESPONSE:
10709
0
        {
10710
            /* 59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2 */
10711
0
            ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10712
10713
            /*56    RQ timer value    GPRS timer     9.11.4.3    O    TV    2*/
10714
0
            ELEM_OPT_TV(0x56, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - PDU session release time");
10715
10716
            /*75    Mapped EPS bearer contexts     Mapped EPS  bearer contexts     9.11.4.5    O    TLV-E    7-65538*/
10717
0
            ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_MAPPED_EPS_B_CONT, NULL);
10718
10719
            /*78    EAP message    EAP message 9.10.2.2    O    TLV - E    7 - 1503*/
10720
0
            ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
10721
10722
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10723
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10724
10725
            /* 77    ATSSS container    ATSSS container 9.11.4.22    O    TLV-E    3-65538  */
10726
0
            ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ATSSS_CONT, NULL);
10727
10728
0
            break;
10729
0
        }
10730
0
        case NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_REJECT:
10731
0
        {
10732
            /*F-    Allowed SSC mode    Allowed SSC mode 9.11.4.3    O    TV    1*/
10733
0
            ELEM_OPT_TV_SHORT(0xF0, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_ALLOWED_SSC_MODE, NULL);
10734
10735
            /*78    EAP message    EAP message 9.10.2.2    O    TLV - E    7 - 1503*/
10736
0
            ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
10737
10738
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10739
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10740
10741
0
            break;
10742
0
        }
10743
0
        case NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_COMMAND:
10744
0
        case NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_RESULT:
10745
0
        case NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_COMMAND:
10746
0
        {
10747
            /*78    EAP message    EAP message 9.10.2.2    O    TLV - E    7 - 1503*/
10748
0
            ELEM_OPT_TLV_E(0x78,  NAS_5GS_PDU_TYPE_COMMON, DE_NAS_5GS_CMN_EAP_MESSAGE, NULL);
10749
10750
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10751
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10752
10753
0
            break;
10754
0
        }
10755
0
        case NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMMAND:
10756
0
        {
10757
            /* 59    5GSM cause    5GSM cause 9.11.4.2    O    TV    2 */
10758
0
            ELEM_OPT_TV(0x59, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_5GSM_CAUSE, NULL);
10759
10760
            /*56    RQ timer value    GPRS timer     9.11.4.3    O    TV    2*/
10761
0
            ELEM_OPT_TV(0x56, GSM_A_PDU_TYPE_GM, DE_GPRS_TIMER, " - PDU session release time");
10762
10763
            /*75    Mapped EPS bearer contexts     Mapped EPS  bearer contexts     9.11.4.5    O    TLV-E    7-65538*/
10764
0
            ELEM_OPT_TLV_E(0x75, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_MAPPED_EPS_B_CONT, NULL);
10765
10766
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10767
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10768
10769
            /* 77    ATSSS container    ATSSS container 9.11.4.22    O    TLV-E    3-65538  */
10770
0
            ELEM_OPT_TLV_E(0x77, NAS_5GS_PDU_TYPE_SM, DE_NAS_5GS_SM_ATSSS_CONT, NULL);
10771
10772
0
            break;
10773
0
        }
10774
0
        case NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_REJECT:
10775
0
        case NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_REJECT:
10776
0
        {
10777
            /*7B    Extended protocol configuration options    Extended protocol configuration options     9.11.4.2    O    TLV-E    4-65538*/
10778
0
            ELEM_OPT_TLV_E(0x7B, NAS_PDU_TYPE_ESM, DE_ESM_EXT_PCO, NULL);
10779
10780
0
            break;
10781
0
        }
10782
0
    }
10783
10784
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10785
0
}
10786
10787
/*
10788
 * 6.1.6.4.4 unknownN1SmInfo
10789
 */
10790
static void
10791
nas_5gs_unknown_n1_sm_info(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, uint32_t offset, unsigned len, uint32_t message_type _U_)
10792
0
{
10793
0
    uint32_t curr_offset;
10794
0
    unsigned   curr_len;
10795
10796
0
    curr_offset = offset;
10797
0
    curr_len = len;
10798
10799
    /* Direction: network to UE*/
10800
0
    pinfo->link_dir = P2P_DIR_DL;
10801
10802
0
    EXTRANEOUS_DATA_CHECK(curr_len, 0, pinfo, &ei_nas_5gs_extraneous_data);
10803
0
}
10804
10805
/* Traffic descriptor component type identifier */
10806
static const value_string nas_5gs_ursp_traff_desc_component_type_values[] = {
10807
    { 0x01, "Match-all type" },
10808
    { 0x08, "OS Id + OS App Id type" },
10809
    { 0x10, "IPv4 remote address type" },
10810
    { 0x21, "IPv6 remote address/prefix length type" },
10811
    { 0x30, "Protocol identifier/next header type" },
10812
    { 0x50, "Single remote port type" },
10813
    { 0x51, "Remote port range type" },
10814
    { 0x52, "IP 3 tuple type" },
10815
    { 0x60, "Security parameter index type" },
10816
    { 0x70, "Type of service/traffic class type" },
10817
    { 0x80, "Flow label type" },
10818
    { 0x81, "Destination MAC address type" },
10819
    { 0x83, "802.1Q C-TAG VID type" },
10820
    { 0x84, "802.1Q S-TAG VID type" },
10821
    { 0x85, "802.1Q C-TAG PCP/DEI type" },
10822
    { 0x86, "802.1Q S-TAG PCP/DEI type" },
10823
    { 0x87, "Ethertype type" },
10824
    { 0x88, "DNN type" },
10825
    { 0x90, "Connection capabilities type" },
10826
    { 0x91, "Destination FQDN" },
10827
    { 0x92, "Regular expression" },
10828
    { 0xa0, "OS App Id type" },
10829
    { 0xa1, "Destination MAC address range type"},
10830
    { 0xa2, "PIN ID type" },
10831
    { 0xa3, "Connectivity group ID type" },
10832
    { 0, NULL }
10833
};
10834
10835
static const range_string nas_5gs_ursp_traff_desc_conn_cap_values[] = {
10836
    { 0x01, 0x01, "IMS" },
10837
    { 0x02, 0x02, "MMS" },
10838
    { 0x04, 0x04, "SUPL" },
10839
    { 0x08, 0x08, "Internet" },
10840
    { 0x10, 0x10, "LCS user plane positioning" },
10841
    { 0x20, 0x3f, "Operator specific" },
10842
    { 0xA1, 0xA1, "IoT delay-tolerant" },
10843
    { 0xA2, 0xA2, "IoT non-delay-tolerant" },
10844
    { 0xA3, 0xA3, "Downlink streaming" },
10845
    { 0xA4, 0xA4, "Uplink streaming" },
10846
    { 0xA5, 0xA5, "Vehicular communications" },
10847
    { 0xA6, 0xA6, "Real time interactive" },
10848
    { 0xA7, 0xA7, "Unified communications" },
10849
    { 0xA8, 0xA8, "Background" },
10850
    { 0xA9, 0xA9, "Mission critical communications" },
10851
    { 0xAA, 0xAA, "Time critical communications" },
10852
    { 0xAB, 0xAB, "Low latency loss tolerant communications in un-acknowledged mode" },
10853
    { 0, 0, NULL }
10854
};
10855
10856
static void
10857
de_nas_5gs_ursp_traff_desc(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
10858
0
{
10859
0
    unsigned len = tvb_reported_length(tvb);
10860
0
    uint32_t traff_desc, length, i, bmp;
10861
0
    unsigned offset = 0;
10862
10863
    /*
10864
    Traffic descriptor (octets v+5 to w)
10865
    The traffic descriptor field is of variable size and contains a variable number (at least one) of traffic descriptor components.
10866
    Each traffic descriptor component shall be encoded as a sequence of one octet traffic descriptor component type identifier
10867
    and a traffic descriptor component value field. The traffic descriptor component type identifier shall be transmitted first.
10868
    */
10869
0
    while (offset < len) {
10870
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_traff_desc, tvb, offset, 1, ENC_BIG_ENDIAN, &traff_desc);
10871
0
        offset++;
10872
0
        switch (traff_desc) {
10873
0
        case 0x01:
10874
            /* Match-all type*/
10875
0
            return;
10876
0
        case 0x08:
10877
            /* For "OS Id + OS App Id type", the traffic descriptor component value field shall be encoded as
10878
               a sequence of a sixteen octet OS Id field, a one octet OS App Id length field, and an OS App Id field.
10879
               The OS Id field shall be transmitted first. The OS Id field contains a Universally Unique IDentifier (UUID)
10880
               as specified in IETF RFC 4122 [16]. */
10881
0
            proto_tree_add_item(tree, hf_nas_5gs_os_id, tvb, offset, 16, ENC_BIG_ENDIAN);
10882
0
            offset += 16;
10883
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_os_app_id_len, tvb, offset, 1, ENC_BIG_ENDIAN, &length);
10884
0
            offset += 1;
10885
0
            proto_tree_add_item(tree, hf_nas_5gs_os_app_id, tvb, offset, length, ENC_NA);
10886
0
            offset += length;
10887
0
            break;
10888
0
        case 0x10:
10889
            /* For "IPv4 remote address type", the traffic descriptor component value field shall be encoded as
10890
                a sequence of a four octet IPv4 address field and a four octet IPv4 address mask field.
10891
                The IPv4 address field shall be transmitted first. */
10892
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10893
0
            offset += 4;
10894
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ipv4_mask, tvb, offset, 4, ENC_BIG_ENDIAN);
10895
0
            offset += 4;
10896
0
            break;
10897
0
        case 0x21:
10898
            /* For "IPv6 remote address/prefix length type", the traffic descriptor component value field shall be encoded as
10899
               a sequence of a sixteen octet IPv6 address field and one octet prefix length field.
10900
               The IPv6 address field shall be transmitted first. */
10901
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ipv6, tvb, offset, 16, ENC_NA);
10902
0
            offset += 16;
10903
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ipv6_prefix_len, tvb, offset, 1, ENC_NA);
10904
0
            offset += 1;
10905
0
            break;
10906
0
        case 0x30:
10907
            /* For "protocol identifier/next header type", the traffic descriptor component value field shall be encoded as
10908
               one octet which specifies the IPv4 protocol identifier or Ipv6 next header. */
10909
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_next_hdr, tvb, offset, 1, ENC_BIG_ENDIAN);
10910
0
            offset += 1;
10911
0
            break;
10912
0
        case 0x50:
10913
            /* For "single remote port type", the traffic descriptor component value field shall be encoded as
10914
               two octets which specify a port number. */
10915
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_single_remote_port, tvb, offset, 2, ENC_BIG_ENDIAN);
10916
0
            offset += 2;
10917
0
            break;
10918
0
        case 0x51:
10919
            /* For "remote port range type", the traffic descriptor component value field shall be encoded as a sequence of
10920
               a two octet port range low limit field and a two octet port range high limit field.
10921
               The port range low limit field shall be transmitted first. */
10922
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_remote_port_range_low, tvb, offset, 2, ENC_BIG_ENDIAN);
10923
0
            offset += 2;
10924
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_remote_port_range_high, tvb, offset, 2, ENC_BIG_ENDIAN);
10925
0
            offset += 2;
10926
0
            break;
10927
0
        case 0x52:
10928
            /* For "IP 3 tuple type", the traffic descriptor component value field shall be encoded as a
10929
               sequence of a one octet IP 3 tuple information bitmap field where:
10930
               - bit 1 set to zero indicates that the IPv4 address field is absent;
10931
               - bit 1 set to one indicates that the IPv4 address field is present;
10932
               - bit 2 set to zero indicates that the IPv6 remote address/prefix length field is absent;
10933
               - bit 2 set to one indicates that the IPv6 remote address/prefix length field is present;
10934
               - bit 3 set to zero indicates that the protocol identifier/next header field is absent;
10935
               - bit 3 set to one indicates that the protocol identifier/next header field is present;
10936
               - bit 4 set to zero indicates that the single remote port field is absent;
10937
               - bit 4 set to one indicates that the single remote port field is present;
10938
               - bit 5 set to zero indicates that the remote port range field is absent;
10939
               - bit 5 set to one indicates that the remote port range field is present; and
10940
               - bits 6,7, and 8 are spare bits;
10941
               followed by a four octet IPv4 address field and a four octet IPv4 address mask field, if
10942
               the IPv4 address field is present;
10943
               followed by a sixteen octet IPv6 address field and one octet prefix length field, if the
10944
               IPv6 remote address/prefix length field is present;
10945
               followed by one octet which specifies the IPv4 protocol identifier or IPv6 next header, if
10946
               the protocol identifier/next header field is present;
10947
               followed by two octets which specify a port number, if the single remote port field is
10948
               present;
10949
               followed by a two octet port range low limit field and a two octet port range high limit
10950
               field, if the remote port range field is present.
10951
               The IP 3 tuple information bitmap field shall be transmitted first.
10952
               The traffic descriptor component value field shall not contain both the IPv4 address
10953
               field and the IPv6 remote address/prefix length field. If the traffic descriptor component
10954
               value field contains both the IPv4 address field and the IPv6 remote address/prefix
10955
               length field, the receiving entity shall ignore the URSP rule.
10956
               The traffic descriptor component value field shall not contain both the single remote
10957
               port field and the remote port range field. If the traffic descriptor component value field
10958
               contains both the single remote port field and the remote port range field, the receiving
10959
               entity shall ignore the URSP rule.
10960
               The traffic descriptor component value field shall contain at least one of the IPv4
10961
               address field, IPv6 remote address/prefix length field, the protocol identifier/next
10962
               header field, the single remote port field and the remote port range field, otherwise the
10963
               receiving entity shall ignore the URSP rule. */
10964
0
               proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_traff_desc_ip_3_tuple_bitmap, tvb, offset, 1, ENC_NA, &bmp);
10965
0
               offset += 1;
10966
0
               if (bmp & 0x01) {
10967
0
                   proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10968
0
                   offset += 4;
10969
0
                   proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ipv4_mask, tvb, offset, 4, ENC_BIG_ENDIAN);
10970
0
                   offset += 4;
10971
0
               }
10972
0
               if (bmp & 0x02) {
10973
0
                   proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ipv6, tvb, offset, 16, ENC_NA);
10974
0
                   offset += 16;
10975
0
                   proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ipv6_prefix_len, tvb, offset, 1, ENC_NA);
10976
0
                   offset += 1;
10977
0
               }
10978
0
               if (bmp & 0x04) {
10979
0
                   proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_next_hdr, tvb, offset, 1, ENC_BIG_ENDIAN);
10980
0
                   offset += 1;
10981
0
               }
10982
0
               if (bmp & 0x08) {
10983
0
                   proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_single_remote_port, tvb, offset, 2, ENC_BIG_ENDIAN);
10984
0
                   offset += 2;
10985
0
               }
10986
0
               if (bmp & 0x10) {
10987
0
                   proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_remote_port_range_low, tvb, offset, 2, ENC_BIG_ENDIAN);
10988
0
                   offset += 2;
10989
0
                   proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_remote_port_range_high, tvb, offset, 2, ENC_BIG_ENDIAN);
10990
0
                   offset += 2;
10991
0
               }
10992
0
               break;
10993
0
        case 0x60:
10994
            /* For "security parameter index type", the traffic descriptor component value field shall be encoded as
10995
               four octets which specify the IPSec security parameter index. */
10996
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_sec_param_index, tvb, offset, 4, ENC_BIG_ENDIAN);
10997
0
            offset += 4;
10998
0
            break;
10999
0
        case 0x70:
11000
            /* For "type of service/traffic class type", the traffic descriptor component value field shall be encoded as a
11001
            sequence of a one octet type-of-service/traffic class field and a one octet type-of-service/traffic class mask field.
11002
            The type-of-service/traffic class field shall be transmitted first. */
11003
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_tos_tc, tvb, offset, 1, ENC_NA);
11004
0
            offset += 1;
11005
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_tos_tc_mask, tvb, offset, 1, ENC_NA);
11006
0
            offset += 1;
11007
0
            break;
11008
0
        case 0x80:
11009
            /* For "flow label type", the traffic descriptor component value field shall be encoded as three octets
11010
            which specify the IPv6 flow label. The bits 8 through 5 of the first octet shall be spare whereas the
11011
            remaining 20 bits shall contain the IPv6 flow label. */
11012
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_flow_label, tvb, offset, 3, ENC_BIG_ENDIAN);
11013
0
            offset += 3;
11014
0
            break;
11015
0
        case 0x81:
11016
            /* For "destination MAC address type", the traffic descriptor component value field shall be encoded as
11017
               6 octets which specify a MAC address. */
11018
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_dest_mac_addr, tvb, offset, 6, ENC_NA);
11019
0
            offset += 6;
11020
0
            break;
11021
0
        case 0x83:
11022
            /* For "802.1Q C-TAG VID type", the traffic descriptor component value field shall be encoded as
11023
               two octets which specify the VID of the customer-VLAN tag (C-TAG).
11024
               The bits 8 through 5 of the first octet shall be spare whereas the remaining 12 bits shall contain the VID. */
11025
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ctag_vid, tvb, offset, 2, ENC_BIG_ENDIAN);
11026
0
            offset += 2;
11027
0
            break;
11028
0
        case 0x84:
11029
            /* For "802.1Q S-TAG VID type", the traffic descriptor component value field shall be encoded as
11030
               two octets which specify the VID of the service-VLAN tag (S-TAG).
11031
               The bits 8 through 5 of the first octet shall be spare whereas the remaining 12 bits shall contain the VID. */
11032
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_stag_vid, tvb, offset, 2, ENC_BIG_ENDIAN);
11033
0
            offset += 2;
11034
0
            break;
11035
0
        case 0x85:
11036
            /* For "802.1Q C-TAG PCP/DEI type", the traffic descriptor component value field shall be encoded as
11037
               one octet which specifies the 802.1Q C-TAG PCP and DEI. The bits 8 through 5 of the octet shall be spare,
11038
               and the bits 4 through 2 contain the PCP and bit 1 contains the DEI. */
11039
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ctag_pcp, tvb, offset, 1, ENC_NA);
11040
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ctag_dei, tvb, offset, 1, ENC_NA);
11041
0
            offset += 1;
11042
0
            break;
11043
0
        case 0x86:
11044
            /* For "802.1Q S-TAG PCP/DEI type", the traffic descriptor component value field shall be encoded as
11045
               one octet which specifies the 802.1Q S-TAG PCP.
11046
               The bits 8 through 5 of the octet shall be spare, and the bits 4 through 2 contain the PCP and bit 1 contains the DEI. */
11047
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_stag_pcp, tvb, offset, 1, ENC_NA);
11048
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_stag_dei, tvb, offset, 1, ENC_NA);
11049
0
            offset += 1;
11050
0
            break;
11051
0
        case 0x87:
11052
            /* For "ethertype type", the traffic descriptor component value field shall be encoded as
11053
               two octets which specify an ethertype. */
11054
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_ethertype, tvb, offset, 2, ENC_BIG_ENDIAN);
11055
0
            offset += 2;
11056
0
            break;
11057
0
        case 0x88:
11058
            /* For "DNN type", the traffic descriptor component value field shall be encoded as
11059
               a sequence of a one octet DNN length field and a DNN value field of a variable size.
11060
               The DNN value contains an APN as defined in 3GPP TS 23.003 [4]. */
11061
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_dnn_len, tvb, offset, 1, ENC_BIG_ENDIAN, &length);
11062
0
            offset++;
11063
0
            de_nas_5gs_cmn_dnn(tvb, tree, pinfo, offset, length, NULL, 0);
11064
0
            offset += length;
11065
0
            break;
11066
0
        case 0x90:
11067
            /* For "connection capabilities" type, the traffic descriptor component value field shall be encoded as
11068
               a sequence of one octet for number of network capabilities followed by one or more octets,
11069
               each containing a connection capability identifier encoded as follows:
11070
               Bits
11071
               8 7 6 5 4 3 2 1
11072
               0 0 0 0 0 0 0 1 IMS
11073
               0 0 0 0 0 0 1 0 MMS
11074
               0 0 0 0 0 1 0 0 SUPL
11075
               0 0 0 0 1 0 0 0 Internet
11076
               All other values are spare. If received they shall be interpreted as unknown. */
11077
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_traff_desc_conn_cap_len, tvb, offset, 1, ENC_NA, &length);
11078
0
            offset += 1;
11079
0
            for (i = 0; i < length; i++)
11080
0
                proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_conn_cap, tvb, offset+i, 1, ENC_NA);
11081
0
            offset += length;
11082
0
            break;
11083
0
        case 0x91:
11084
            /* For "destination FQDN" type, the traffic descriptor component value field shall be encoded as
11085
               a sequence of one octet destination FQDN length field and a destination FQDN value of variable size.
11086
               The destination FQDN value field shall be encoded as defined in IETF RFC 1035 [12]. */
11087
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_traff_desc_dest_fqdn_len, tvb, offset, 1, ENC_NA, &length);
11088
0
            offset += 1;
11089
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_dest_fqdn, tvb, offset, length, ENC_APN_STR);
11090
0
            offset += length;
11091
0
            break;
11092
            /* For "regular expression" type, the traffic descriptor component value field shall be
11093
               encoded as a sequence of one octet regular expression length field and a regular
11094
               expression value of variable size. The regular expression value field shall take the form
11095
               of Extended Regular Expressions (ERE) as defined in chapter 9 in IEEE 1003.1-
11096
               2004 Part 1 [19]. */
11097
0
        case 0x92: /* Regular expression */
11098
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_traff_desc_regex_len, tvb, offset, 1, ENC_NA, &length);
11099
0
            offset += 1;
11100
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_regex, tvb, offset, length, ENC_UTF_8);
11101
0
            offset += length;
11102
0
            break;
11103
0
        case 0xa0:
11104
            /* For "OS App Id type", the traffic descriptor component value field shall be encoded as
11105
               a one octet OS App Id length field and an OS App Id field. */
11106
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_os_app_id_len, tvb, offset, 1, ENC_BIG_ENDIAN, &length);
11107
0
            offset += 1;
11108
0
            proto_tree_add_item(tree, hf_nas_5gs_os_app_id, tvb, offset, length, ENC_NA);
11109
0
            offset += length;
11110
0
            break;
11111
0
        case 0xa1:
11112
            /* For "destination MAC address range type", the traffic descriptor component value field
11113
               shall be encoded as a sequence of a 6 octet destination MAC address range low limit
11114
               field and a 6 octet destination MAC address range high limit field. The destination MAC
11115
               address range low limit field shall be transmitted first.*/
11116
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_dest_mac_addr_range_low, tvb, offset, 6, ENC_NA);
11117
0
            offset += 6;
11118
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_dest_mac_addr_range_high, tvb, offset, 6, ENC_NA);
11119
0
            offset += 6;
11120
0
            break;
11121
0
        case 0xa2: /* PIN ID */
11122
            /* For "PIN ID type", the traffic descriptor component value field shall be
11123
               encoded as a sequence of a one octet length field and a PIN ID value field
11124
               containing a UTF-8 string. TS 24.526 Section 5.2 */
11125
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_traff_desc_pin_id_len, tvb, offset, 1, ENC_NA, &length);
11126
0
            offset += 1;
11127
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_pin_id, tvb, offset, length, ENC_UTF_8);
11128
0
            offset += length;
11129
0
            break;
11130
0
        case 0xa3: /* Connectivity group ID */
11131
            /* For "connectivity group ID type", the traffic descriptor component value field
11132
               shall be encoded as a sequence of a one octet length field and a connectivity
11133
               group ID value field containing a UTF-8 string. TS 24.526 Section 5.2 */
11134
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_traff_desc_conn_group_id_len, tvb, offset, 1, ENC_NA, &length);
11135
0
            offset += 1;
11136
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_traff_desc_conn_group_id, tvb, offset, length, ENC_UTF_8);
11137
0
            offset += length;
11138
0
            break;
11139
0
        default:
11140
0
            proto_tree_add_expert_remaining(tree, pinfo, &ei_nas_5gs_ie_not_dis, tvb, offset);
11141
0
            return;
11142
0
        }
11143
0
    }
11144
0
}
11145
11146
/*
11147
Route selection descriptor contents (octets b+5 to c)
11148
The route selection descriptor contents field is of variable size and contains a variable number (at least one)
11149
of route selection descriptor components. Each route selection descriptor component shall be encoded as a sequence of
11150
a one octet route selection descriptor component type identifier and
11151
a route selection descriptor component value field.
11152
The route selection descriptor component type identifier shall be transmitted first.
11153
11154
Route selection descriptor component type identifier
11155
Bits
11156
8 7 6 5 4 3 2 1
11157
0 0 0 0 0 0 0 1    SSC mode type
11158
0 0 0 0 0 0 1 0    S-NSSAI type
11159
0 0 0 0 0 1 0 0    DNN type
11160
0 0 0 0 1 0 0 0    PDU session type type
11161
0 0 0 1 0 0 0 0    Preferred access type type
11162
0 0 0 1 0 0 0 1    Multi-access preference type
11163
0 0 1 0 0 0 0 0    Non-seamless non-3GPP offload indication type
11164
0 1 0 0 0 0 0 0    Location criteria type
11165
1 0 0 0 0 0 0 0    Time window type
11166
1 0 0 0 0 0 0 1    5G ProSe layer-3 UE-to-network relay offload indication type
11167
1 0 0 0 0 0 1 0    PDU session pair ID type (NOTE 5)
11168
1 0 0 0 0 0 1 1    RSN type (NOTE 5)
11169
11170
All other values are spare. If received they shall be interpreted as unknown.
11171
11172
*/
11173
static const value_string nas_5gs_ursp_r_sel_desc_loc_area_type_values[] = {
11174
    { 0x01, "E-UTRA cell identities list" },
11175
    { 0x02, "NR cell identities list" },
11176
    { 0x03, "Global RAN node identities list" },
11177
    { 0x04, "TAI list" },
11178
    { 0, NULL }
11179
};
11180
11181
static const value_string nas_5gs_ursp_r_sel_desc_comp_type_values[] = {
11182
    { 0x01, "SSC mode" },
11183
    { 0x02, "S-NSSAI" },
11184
    { 0x04, "DNN" },
11185
    { 0x08, "PDU session type" },
11186
    { 0x10, "Preferred access type" },
11187
    { 0x11, "Multi-access preference" },
11188
    { 0x20, "Non-seamless non-3GPP offload indication" },
11189
    { 0x40, "Location criteria type" },
11190
    { 0x80, "Time window type" },
11191
    { 0x81, "5G ProSe layer-3 UE-to-network relay offload type" },
11192
    { 0x82, "PDU session pair ID type" },
11193
    { 0x83, "RSN type" },
11194
    { 0x84, "5G ProSe multi-path preference type" },
11195
    { 0, NULL }
11196
};
11197
11198
static void
11199
de_nas_5gs_ursp_r_sel_desc(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
11200
0
{
11201
0
    unsigned len = tvb_reported_length(tvb);
11202
0
    uint32_t type_id;
11203
0
    unsigned offset = 0;
11204
0
    uint32_t length;
11205
11206
0
    while (offset < len) {
11207
11208
        /* Route selection descriptor component type identifier */
11209
0
        proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_ursp_r_sel_desc_comp_type, tvb, offset, 1, ENC_BIG_ENDIAN, &type_id);
11210
0
        offset++;
11211
11212
0
        switch (type_id) {
11213
0
        case 0x01: /* SSC mode*/
11214
            /* For "SSC mode type", the route selection descriptor component value field shall be encoded as a
11215
               one octet SSC mode field. The bits 8 through 4 of the octet shall be spare,
11216
               and the bits 3 through 1 shall be encoded as the value part of the SSC mode information element
11217
               defined in subclause 9.11.4.16 of 3GPP TS 24.501.
11218
               The "SSC mode type" route selection descriptor component shall not appear more than once
11219
               in the route selection descriptor.*/
11220
0
            proto_tree_add_item(tree, hf_nas_5gs_sm_sc_mode, tvb, offset, 1, ENC_BIG_ENDIAN);
11221
0
            offset++;
11222
0
            break;
11223
0
        case 0x02: /* S-NSSAI type*/
11224
            /* For "S-NSSAI type", the route selection descriptor component value field shall be
11225
             * encoded as a sequence of a one octet S-NSSAI length field and an S-NSSAI value
11226
             * field of a variable size. The S-NSSAI value shall be encoded as the value part of the
11227
             * S-NSSAI information element defined in clause 9.11.2.8 of 3GPP TS 24.501 [11], without
11228
             * the mapped HPLMN SST field and without the mapped HPLMN SD field. */
11229
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_mm_len_of_mapped_s_nssai, tvb, offset, 1, ENC_BIG_ENDIAN, &length);
11230
0
            offset++;
11231
0
            de_nas_5gs_cmn_s_nssai(tvb, tree, pinfo, offset, length, NULL, 0);
11232
0
            offset += length;
11233
0
            break;
11234
0
        case 0x04: /* DNN */
11235
            /* For "DNN type", the route selection descriptor component value field shall be encoded as a
11236
               sequence of a one octet DNN length field and a DNN value field of a variable size.
11237
               The DNN value contains an APN as defined in 3GPP TS 23.003.*/
11238
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_dnn_len, tvb, offset, 1, ENC_BIG_ENDIAN, &length);
11239
0
            offset++;
11240
0
            de_nas_5gs_cmn_dnn(tvb, tree, pinfo, offset, length, NULL, 0);
11241
0
            offset += length;
11242
0
            break;
11243
0
        case 0x08: /* PDU session type*/
11244
            /* For "PDU session type type", the route selection descriptor component value field shall be encoded as a
11245
               one octet PDU session type field. The bits 8 through 4 of the octet shall be spare, and the bits 3 through 1
11246
               shall be encoded as the value part of the PDU session type information element defined in
11247
               subclause 9.11.4.11 of 3GPP TS 24.501.
11248
               The "PDU session type type" route selection descriptor component shall not appear more than once
11249
               in the route selection descriptor.*/
11250
0
            proto_tree_add_item(tree, hf_nas_5gs_sm_pdu_session_type, tvb, offset, 1, ENC_BIG_ENDIAN);
11251
0
            offset++;
11252
0
            break;
11253
0
        case 0x10: /* preferred access type type */
11254
            /* For "preferred access type type", the route selection descriptor component value field shall be encoded as a
11255
               one octet preferred access type field. The bits 8 through 3 shall be spare, and the bits 2 and 1 shall be
11256
               encoded as the value part of the access type information element defined in subclause 9.11.2.1A of 3GPP TS 24.501.
11257
               The "preferred access type type" route selection descriptor component shall not appear more than once
11258
               in the route selection descriptor.*/
11259
0
            proto_tree_add_bitmask_list(tree, tvb, offset, 1, nas_5gs_cmn_access_type_flags, ENC_BIG_ENDIAN);
11260
0
            offset++;
11261
0
            break;
11262
0
        case  0x11: /* Multi-access preference */
11263
            /* For "multi-access preference type", the route selection descriptor component value field shall be of zero length.
11264
               The "multi-access preference type" route selection descriptor component shall not appear more than once
11265
               in the route selection descriptor.
11266
               The "multi-access preference type" route selection descriptor component in the route selection descriptor
11267
               indicates the multi-access preference.*/
11268
0
            break;
11269
0
        case 0x20: /* non-seamless non-3GPP offload indication type */
11270
            /* For "non-seamless non-3GPP offload indication type", the route selection descriptor component shall not include
11271
               the route selection descriptor component value field.
11272
               The "non-seamless non-3GPP offload indication type" route selection descriptor component shall not appear more than once
11273
               in the route selection descriptor.
11274
               If the "non-seamless non-3GPP offload indication type" route selection descriptor component is included
11275
               in a route selection descriptor, there shall be no route selection descriptor component with a type other than
11276
               "non-seamless non-3GPP offload indication type" in the route selection descriptor.*/
11277
0
            break;
11278
0
        case 0x40: /* Location criteria */
11279
            /* For "Location criteria type", the route selection descriptor component value field
11280
               shall be encoded as a sequence of a one octet length field and a location criteria
11281
               value field. TS 24.526 Section 5.2 */
11282
0
        {
11283
0
            uint32_t loc_len;
11284
0
            proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_r_sel_desc_loc_crit_len, tvb, offset, 1, ENC_BIG_ENDIAN, &loc_len);
11285
0
            offset++;
11286
0
            unsigned loc_end = offset + loc_len;
11287
0
            while (offset < loc_end) {
11288
0
                uint32_t loc_area_type;
11289
0
                proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_r_sel_desc_loc_area_type, tvb, offset, 1, ENC_BIG_ENDIAN, &loc_area_type);
11290
0
                offset++;
11291
0
                switch (loc_area_type) {
11292
0
                case 0x01: /* E-UTRA cell identities */
11293
0
                case 0x02: /* NR cell identities */
11294
0
                case 0x03: /* Global RAN node identities */
11295
0
                {
11296
0
                    uint32_t num_cells;
11297
0
                    int cell_id_len = (loc_area_type == 0x02) ? 5 : 4;
11298
0
                    int hf_num = (loc_area_type == 0x02) ? hf_nas_5gs_ursp_r_sel_desc_loc_num_nr_cells :
11299
0
                                 (loc_area_type == 0x01) ? hf_nas_5gs_ursp_r_sel_desc_loc_num_eutra_cells :
11300
0
                                 hf_nas_5gs_ursp_r_sel_desc_loc_num_gnb_ids;
11301
0
                    proto_tree_add_item_ret_uint(tree, hf_num, tvb, offset, 1, ENC_BIG_ENDIAN, &num_cells);
11302
0
                    offset++;
11303
0
                    for (uint32_t i = 0; i < num_cells; i++) {
11304
0
                        proto_tree *cell_tree;
11305
0
                        proto_item *cell_item;
11306
0
                        const char *cell_label = (loc_area_type == 0x02) ? "NR cell id" :
11307
0
                                                 (loc_area_type == 0x01) ? "E-UTRA cell id" :
11308
0
                                                 "Global gNB id";
11309
0
                        cell_tree = proto_tree_add_subtree_format(tree, tvb, offset, 3 + cell_id_len,
11310
0
                            ett_nas_5gs_ursp_r_sel_desc_cont, &cell_item, "%s %u", cell_label, i + 1);
11311
0
                        dissect_e212_mcc_mnc(tvb, pinfo, cell_tree, offset, E212_5GSTAI, true);
11312
0
                        offset += 3;
11313
0
                        if (loc_area_type == 0x02) {
11314
0
                            proto_tree_add_item(cell_tree, hf_nas_5gs_ursp_r_sel_desc_loc_nr_cell_id, tvb, offset, 5, ENC_BIG_ENDIAN);
11315
0
                        } else if (loc_area_type == 0x01) {
11316
0
                            proto_tree_add_item(cell_tree, hf_nas_5gs_ursp_r_sel_desc_loc_eutra_cell_id, tvb, offset, 4, ENC_BIG_ENDIAN);
11317
0
                        } else {
11318
0
                            proto_tree_add_item(cell_tree, hf_nas_5gs_ursp_r_sel_desc_loc_gnb_id, tvb, offset, 4, ENC_BIG_ENDIAN);
11319
0
                        }
11320
0
                        offset += cell_id_len;
11321
0
                    }
11322
0
                    break;
11323
0
                }
11324
0
                case 0x04: /* TAI list */
11325
0
                {
11326
0
                    uint32_t tai_len;
11327
0
                    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_ursp_r_sel_desc_loc_tai_len, tvb, offset, 1, ENC_BIG_ENDIAN, &tai_len);
11328
0
                    offset++;
11329
0
                    de_nas_5gs_mm_5gs_ta_id_list(tvb, tree, pinfo, offset, tai_len, NULL, 0);
11330
0
                    offset += tai_len;
11331
0
                    break;
11332
0
                }
11333
0
                default:
11334
0
                    offset = loc_end;
11335
0
                    break;
11336
0
                }
11337
0
            }
11338
0
            break;
11339
0
        }
11340
0
        case 0x80: /* Time window */
11341
            /* For "Time window type", the route selection descriptor component value field
11342
               shall be encoded as a sequence of a four octet start time field,
11343
               a four octet start time fraction field, a four octet stop time field,
11344
               and a four octet stop time fraction field.
11345
               The time values use UNIX epoch with 1/2^32 fractional seconds.
11346
               TS 24.526 Section 5.2 */
11347
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_r_sel_desc_time_win_start, tvb, offset, 8, ENC_TIME_RTPS | ENC_BIG_ENDIAN);
11348
0
            offset += 8;
11349
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_r_sel_desc_time_win_stop, tvb, offset, 8, ENC_TIME_RTPS | ENC_BIG_ENDIAN);
11350
0
            offset += 8;
11351
0
            break;
11352
0
        case 0x82: /* PDU session pair ID */
11353
            /* For "PDU session pair ID type", the route selection descriptor component
11354
               value field shall be encoded as one octet which specifies the PDU session
11355
               pair identifier value. TS 24.526 Section 5.2 */
11356
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_r_sel_desc_pdu_sess_pair_id, tvb, offset, 1, ENC_BIG_ENDIAN);
11357
0
            offset++;
11358
0
            break;
11359
0
        case 0x83: /* RSN */
11360
            /* For "RSN type", the route selection descriptor component value field
11361
               shall be encoded as one octet which specifies the RSN value.
11362
               TS 24.526 Section 5.2 */
11363
0
            proto_tree_add_item(tree, hf_nas_5gs_ursp_r_sel_desc_rsn, tvb, offset, 1, ENC_BIG_ENDIAN);
11364
0
            offset++;
11365
0
            break;
11366
0
        default:
11367
0
            proto_tree_add_expert_remaining(tree, pinfo, &ei_nas_5gs_ie_not_dis, tvb, offset);
11368
0
            return;
11369
0
        }
11370
0
    }
11371
11372
0
}
11373
/* Dissect UE policy part encoded as specified in 3GPP TS 24.526 */
11374
static void
11375
de_nas_5gs_ue_policies_ursp(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
11376
0
{
11377
0
    proto_tree* sub_tree, * traff_desc_sub_tree, *r_sel_list_tree, *r_sel_tree, *r_sel_desc_sub_tree;
11378
0
    proto_item* item, *r_sel_list;
11379
0
    uint32_t len = tvb_reported_length(tvb);
11380
0
    uint32_t curr_offset = 0, offset;
11381
0
    uint32_t list_len, traff_desc_len, r_sel_desc_lst_len, r_sel_desc_len, r_sel_desc_cont_len;
11382
11383
0
    int i = 0;
11384
0
    while ((curr_offset) < len) {
11385
0
        i++;
11386
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_ue_policies_ursp, &item,
11387
0
            "URSP rule %u", i);
11388
        /* Length of URSP rule octet v octet v+1 */
11389
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_ursp_rule_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &list_len);
11390
0
        proto_item_set_len(item, list_len + 2);
11391
0
        curr_offset += 2;
11392
11393
        /* Precedence value of URSP rule octet v+2 */
11394
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_ursp_rule_prec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
11395
0
        curr_offset += 1;
11396
11397
        /* Length of traffic descriptor octet v+3 octet v+4 */
11398
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_ursp_traff_desc_lst_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &traff_desc_len);
11399
0
        curr_offset += 2;
11400
11401
        /* Traffic descriptor octet v+5 octet w */
11402
0
        traff_desc_sub_tree = proto_tree_add_subtree(sub_tree, tvb, curr_offset, traff_desc_len, ett_nas_5gs_ursp_traff_desc, NULL, "Traffic descriptor");
11403
0
        de_nas_5gs_ursp_traff_desc(tvb_new_subset_length(tvb, curr_offset, traff_desc_len), pinfo, traff_desc_sub_tree);
11404
0
        curr_offset += traff_desc_len;
11405
11406
        /* Length of route selection descriptor list octet w+1 octet w+2 */
11407
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_ursp_r_sel_desc_lst_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &r_sel_desc_lst_len);
11408
0
        curr_offset += 2;
11409
11410
        /* Route selection descriptor list */
11411
0
        offset = curr_offset;
11412
0
        r_sel_list = proto_tree_add_item(sub_tree, hf_nas_5gs_ursp_r_sel_desc_lst, tvb, curr_offset, r_sel_desc_lst_len, ENC_NA);
11413
0
        r_sel_list_tree = proto_item_add_subtree(r_sel_list, ett_nas_5gs_usrp_r_sel_list);
11414
0
        int j = 0;
11415
0
        while ((curr_offset - offset) < r_sel_desc_lst_len) {
11416
0
            j++;
11417
0
            r_sel_tree = proto_tree_add_subtree_format(r_sel_list_tree, tvb, curr_offset, -1, ett_nas_5gs_usrp_r_sel, &item,
11418
0
                                                       "Route selection descriptor %u", j);
11419
            /* Length of route selection descriptor octet b octet b+1 */
11420
0
            proto_tree_add_item_ret_uint(r_sel_tree, hf_nas_5gs_ursp_traff_desc_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &r_sel_desc_len);
11421
0
            curr_offset += 2;
11422
            /* Precedence value of route selection descriptor octet b + 2 */
11423
0
            proto_tree_add_item(r_sel_tree, hf_nas_5gs_ursp_r_sel_des_prec, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
11424
0
            curr_offset++;
11425
11426
            /* Length of route selection descriptor contents octet b + 3 octet b + 4 */
11427
0
            proto_tree_add_item_ret_uint(r_sel_tree, hf_nas_5gs_ursp_r_sel_des_cont_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &r_sel_desc_cont_len);
11428
0
            curr_offset += 2;
11429
            /* Route selection descriptor contents octet b+5 octet c */
11430
0
            r_sel_desc_sub_tree = proto_tree_add_subtree(r_sel_tree, tvb, curr_offset, r_sel_desc_cont_len, ett_nas_5gs_ursp_r_sel_desc_cont, NULL, "Route selection descriptor contents");
11431
0
            de_nas_5gs_ursp_r_sel_desc(tvb_new_subset_length(tvb, curr_offset, r_sel_desc_cont_len), pinfo, r_sel_desc_sub_tree);
11432
0
            curr_offset += r_sel_desc_cont_len;
11433
0
        }
11434
0
        curr_offset = offset + r_sel_desc_lst_len;
11435
0
    }
11436
11437
0
}
11438
11439
static const value_string nas_5gs_andsp_info_type_values[] = {
11440
    { 0x00, "Reserved" },
11441
    { 0x01, "WLANSP" },
11442
    { 0x02, "N3AN node configuration information" },
11443
    { 0, NULL }
11444
};
11445
11446
//Selection criteria set type(bits 5 - 8 of octet 19) is coded as follows.
11447
//Bits
11448
//8 7 6 5
11449
static const value_string nas_5gs_andsp_wlansp_sel_crit_set_type_vals[] = {
11450
    { 0x00, "Reserved" },
11451
    { 0x01, "Preferred SSID list" },
11452
    { 0x02, "Preferred roaming partner list" },
11453
    { 0x03, "Required protocol port tuple" },
11454
    { 0x04, "SP exclusion list" },
11455
    { 0x05, "Minimum backhaul threshold" },
11456
    { 0, NULL }
11457
};
11458
11459
static const value_string nas_5gs_andsp_wlansp_loc_entry_type_vals[] = {
11460
    { 0x01, "3GPP location" },
11461
    { 0x02, "WLAN location" },
11462
    { 0x03, " Geo location" },
11463
    { 0, NULL }
11464
};
11465
11466
static const value_string nas_5gs_andsp_wlansp_location_field_type_vals[] = {
11467
    { 0x01, "TAC" },
11468
    { 0x02, "EUTRA CI" },
11469
    { 0x04, "NR CI" },
11470
    { 0x81, "HESSID" },
11471
    { 0x82, "SSID" },
11472
    { 0x84, "BSSID" },
11473
    { 0, NULL }
11474
};
11475
11476
static const value_string nas_5gs_wlansp_sp_excl_list_nw_type_vals[] = {
11477
    { 0x00, "Home" },
11478
    { 0x01, "Roaming" },
11479
    { 0, NULL }
11480
};
11481
11482
static void
11483
de_nas_5gs_ue_policies_andsp_wlansp_rule(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree)
11484
0
{
11485
0
    int offset = 0, current_offset;
11486
0
    proto_tree* sub_tree, *sel_crit_sub_tree, *val_tree, *sel_crit_entry_sub_tree, *time_tree, *sel_crit_set_sub_tree;
11487
0
    proto_item* item;
11488
0
    int len = tvb_reported_length(tvb);
11489
0
    uint32_t /*curr_offset = 0,*/ info_len, sel_crit_len, sel_crit_ent_len, sel_crit_set_type, sub_ent_len;
11490
0
    uint32_t num_sub_entr, val_area_len, time_of_day_len, sel_crit_set_len, num_loc_entr, num_sel_crit_ent;
11491
11492
0
    static int* const flags1[] = {
11493
0
    &hf_nas_5gs_roaming_ind,
11494
0
    &hf_nas_5gs_validity_area_ind,
11495
0
    &hf_nas_5gs_3gpp_loc_ind,
11496
0
    &hf_nas_5gs_wlan_loc_ind,
11497
0
    &hf_nas_5gs_geo_loc_ind,
11498
0
    &hf_nas_5gs_time_of_day_ind,
11499
0
    &hf_nas_5gs_spare_b1,
11500
0
    &hf_nas_5gs_spare_b0,
11501
0
    NULL
11502
0
    };
11503
11504
0
    static int* const flags2[] = {
11505
0
    &hf_nas_5gs_spare_b7,
11506
0
    &hf_nas_5gs_wlansp_maxbssload_ind,
11507
0
    &hf_nas_5gs_wlansp_homenetwork_ind,
11508
0
    &hf_nas_5gs_wlansp_criteria_priority,
11509
0
    NULL
11510
0
    };
11511
11512
0
    static int* const flags3[] = {
11513
0
    &hf_nas_5gs_wlansp_pref_ssid_list_hessid_ind,
11514
0
    &hf_nas_5gs_wlansp_pref_ssid_list_ssid_ind,
11515
0
    NULL
11516
0
    };
11517
11518
    /* Figure 5.3.2.4g */
11519
0
    static int* const flags4[] = {
11520
0
    &hf_nas_5gs_wlansp_sp_excl_list_ulbi_ind,
11521
0
    &hf_nas_5gs_wlansp_sp_excl_list_dlbi_ind,
11522
0
    &hf_nas_5gs_wlansp_sp_excl_list_nw_type,
11523
0
    NULL
11524
0
    };
11525
11526
    /* 5.3.2 Encoding of WLANSP */
11527
    /* WLANSP rule */
11528
0
    int i = 0;
11529
0
    while (offset < len) {
11530
0
        i++;
11531
0
        uint64_t retval1, retval2;
11532
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_nas_5gs_wlansp_rule, &item, "WLANSP Rule %u", i);
11533
        /* Length of WLANSP rule */
11534
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_wlansp_rule_len, tvb, offset, 2, ENC_BIG_ENDIAN, &info_len);
11535
0
        proto_item_set_len(item, info_len + 2);
11536
0
        offset += 2;
11537
        /* Rule identifier */
11538
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_wlansp_rule_id, tvb, offset, 1, ENC_BIG_ENDIAN);
11539
0
        offset++;
11540
        /* Rule priority */
11541
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_wlansp_rule_prio, tvb, offset, 1, ENC_BIG_ENDIAN);
11542
0
        offset++;
11543
        /* Roaming | validity area ind | 3GPP loc ind | WLAN loc ind | Geo loc ind | time of day ind | spare  spare*/
11544
0
        proto_tree_add_bitmask_list_ret_uint64(sub_tree, tvb, offset, 1, flags1, ENC_BIG_ENDIAN, &retval1);
11545
0
        offset++;
11546
        /* 5.3.2.4: Selection criteria */
11547
0
        sel_crit_sub_tree = proto_tree_add_subtree_format(sub_tree, tvb, offset, -1, ett_nas_5gs_wlansp_sel_crit, &item, "Selection criteria");
11548
        /* Length of selection criteria */
11549
0
        proto_tree_add_item_ret_uint(sel_crit_sub_tree, hf_nas_5gs_wlansp_sel_crit_len, tvb, offset, 2, ENC_BIG_ENDIAN, &sel_crit_len);
11550
0
        proto_item_set_len(item, sel_crit_len + 2);
11551
0
        offset += 2;
11552
        /* number of selection criteria entries */
11553
0
        proto_tree_add_item_ret_uint(sel_crit_sub_tree, hf_nas_5gs_wlansp_num_sel_crit_ent, tvb, offset, 1, ENC_BIG_ENDIAN, &num_sel_crit_ent);
11554
0
        offset++;
11555
        /* Selection criteria entry %n*/
11556
0
        uint32_t j = 0;
11557
0
        for (j = 0; j < num_sel_crit_ent; j++) {
11558
0
            sel_crit_entry_sub_tree = proto_tree_add_subtree_format(sel_crit_sub_tree, tvb, offset, -1, ett_nas_5gs_wlansp_sel_crit_ent, &item, "Selection criteria entry %u", j+1);
11559
            /* 5.3.2.4a: Selection criteria entry */
11560
            /* Length of selection criteria entry */
11561
0
            proto_tree_add_item_ret_uint(sel_crit_entry_sub_tree, hf_nas_5gs_wlansp_sel_crit_ent_len, tvb, offset, 2, ENC_BIG_ENDIAN, &sel_crit_ent_len);
11562
0
            proto_item_set_len(item, sel_crit_ent_len + 2);
11563
0
            offset += 2;
11564
            /* Spare MaxBS Sload ind Home network ind Criteria priority*/
11565
0
            proto_tree_add_bitmask_list_ret_uint64(sel_crit_entry_sub_tree, tvb, offset, 1, flags2, ENC_BIG_ENDIAN, &retval2);
11566
0
            offset++;
11567
            /* Maximum BSS load value */
11568
0
            if ((retval2 & 0x40) == 0x40) {
11569
0
                proto_tree_add_item(sel_crit_entry_sub_tree, hf_nas_5gs_wlansp_max_bss_ld_val, tvb, offset, 2, ENC_BIG_ENDIAN);
11570
0
                offset += 2;
11571
0
            }
11572
            /* Selection criteria set %n */
11573
0
            int end_offset = offset + sel_crit_ent_len - 3;
11574
0
            int m = 0;
11575
0
            while (offset < end_offset) {
11576
0
                m++;
11577
0
                uint64_t retval;
11578
                /* 5.3.2.4b: Selection criteria set */
11579
0
                sel_crit_set_sub_tree = proto_tree_add_subtree_format(sel_crit_entry_sub_tree, tvb, offset, -1, ett_nas_5gs_wlansp_sel_crit_ent, &item, "Selection criteria set %u", m);
11580
                /* Length of selection criteria set */
11581
0
                proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sel_crit_set_len, tvb, offset, 2, ENC_BIG_ENDIAN, &sel_crit_set_len);
11582
0
                proto_item_set_len(item, sel_crit_set_len + 2);
11583
0
                offset += 2;
11584
0
                proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sel_crit_set_type, tvb, offset, 1, ENC_BIG_ENDIAN, &sel_crit_set_type);
11585
0
                proto_item_append_text(item, " %s", val_to_str_const(sel_crit_set_type, nas_5gs_andsp_wlansp_sel_crit_set_type_vals, "Unknown"));
11586
11587
0
                proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sel_crit_num_sub_entr, tvb, offset, 1, ENC_BIG_ENDIAN, &num_sub_entr);
11588
0
                offset++;
11589
0
                uint32_t k, req_prot_port_len, ssid_len, fqdn_match_len, country_len, num_ports;
11590
0
                for (k = 0; k < num_sub_entr; k++) {
11591
0
                    switch (sel_crit_set_type) {
11592
0
                    case 1: /* preferred SSID list*/
11593
                        /* Length of sub entry {set type = preferred SSID list} */
11594
0
                        proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sub_ent_len, tvb, offset, 1, ENC_BIG_ENDIAN, &sub_ent_len);
11595
0
                        offset++;
11596
                        /* WLAN priority */
11597
0
                        proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_pref_ssid_list_wlan_prio, tvb, offset, 1, ENC_BIG_ENDIAN);
11598
0
                        offset++;
11599
                        /* 0 Spare HESS ID ind SSID ind */
11600
0
                        uint64_t retval3;
11601
0
                        proto_tree_add_bitmask_list_ret_uint64(sel_crit_set_sub_tree, tvb, offset, 1, flags3, ENC_BIG_ENDIAN, &retval3);
11602
0
                        offset++;
11603
                        /* SSID length */
11604
0
                        proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_ssid_len, tvb, offset, 1, ENC_BIG_ENDIAN, &ssid_len);
11605
0
                        offset++;
11606
                        /* SSID */
11607
0
                        if ((retval3 & 0x01) == 0x01) {
11608
0
                            proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_pref_ssid_list_ssid, tvb, offset, ssid_len, ENC_UTF_8);
11609
0
                            offset += ssid_len;
11610
0
                        }
11611
                        /* HESSID */
11612
0
                        if ((retval3 & 0x02) == 0x02) {
11613
0
                            proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_pref_ssid_list_hessid, tvb, offset, 6, ENC_NA);
11614
0
                            offset += 6;
11615
0
                        }
11616
0
                        break;
11617
0
                    case 2: /* preferred roaming partner list*/
11618
                        /* Length of sub entry {set type =  preferred roaming partner list} */
11619
0
                        proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sub_ent_len, tvb, offset, 1, ENC_BIG_ENDIAN, &sub_ent_len);
11620
0
                        offset++;
11621
                        /* Priority */
11622
0
                        proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_pref_roam_part_list_prio, tvb, offset, 1, ENC_BIG_ENDIAN);
11623
0
                        offset++;
11624
                        /* FQDN_Match length */
11625
0
                        proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_fqdn_match_len, tvb, offset, 1, ENC_BIG_ENDIAN, &fqdn_match_len);
11626
0
                        offset++;
11627
                        /* FQDN_Match */
11628
0
                        proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_fqdn_match, tvb, offset, fqdn_match_len, ENC_UTF_8);
11629
0
                        offset += fqdn_match_len;
11630
                        /* Country length */
11631
0
                        proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_country_len, tvb, offset, 1, ENC_BIG_ENDIAN, &country_len);
11632
0
                        offset++;
11633
                        /* Country */
11634
0
                        proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_country, tvb, offset, country_len, ENC_UTF_8);
11635
0
                        offset += country_len;
11636
0
                        break;
11637
0
                    case 3: /* Required protocol port tuple */
11638
                        /* Length of sub entry {set type =  Required protocol port tuple} */
11639
0
                        proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sub_ent_len, tvb, offset, 1, ENC_BIG_ENDIAN, &sub_ent_len);
11640
0
                        offset++;
11641
                        /* IP protocol */
11642
0
                        proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_req_prot_ip_prot, tvb, offset, 1, ENC_BIG_ENDIAN);
11643
0
                        offset++;
11644
                        /* Length of port number */
11645
0
                        proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_req_prot_port_len, tvb, offset, 1, ENC_BIG_ENDIAN, &req_prot_port_len);
11646
0
                        offset++;
11647
                        /* Port number */
11648
0
                        num_ports = req_prot_port_len >> 1;
11649
0
                        for (k = 0; k < num_ports; k++){
11650
0
                            proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_req_prot_port, tvb, offset, 2, ENC_BIG_ENDIAN);
11651
0
                            offset += 2;
11652
0
                        }
11653
0
                        break;
11654
0
                    case 4: /* SP exclusion list */
11655
                        /* Length of sub entry {set type = SP exclusion list} */
11656
0
                        proto_tree_add_item_ret_uint(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sub_ent_len, tvb, offset, 1, ENC_BIG_ENDIAN, &sub_ent_len);
11657
0
                        offset++;
11658
                        /* SSID */
11659
0
                        proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sel_crit_sp_exc, tvb, offset, sub_ent_len, ENC_NA);
11660
0
                        offset += sub_ent_len;
11661
0
                        break;
11662
0
                    case 5: /* minimum backhaul threshold */
11663
                        /* Spare ULBI DLBI Network type */
11664
0
                        proto_tree_add_bitmask_list_ret_uint64(sel_crit_set_sub_tree, tvb, offset, 1, flags4, ENC_BIG_ENDIAN, &retval);
11665
0
                        offset++;
11666
                        /* Downlink bandwidth */
11667
0
                        if ((retval & 0x04) == 0x04) {
11668
0
                            proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sp_excl_list_dlb, tvb, offset, 4, ENC_BIG_ENDIAN);
11669
0
                            offset += 4;
11670
0
                        }
11671
                        /* Uplink bandwidth */
11672
0
                        if ((retval & 0x08) == 0x08) {
11673
0
                            proto_tree_add_item(sel_crit_set_sub_tree, hf_nas_5gs_wlansp_sp_excl_list_ulb, tvb, offset, 4, ENC_BIG_ENDIAN);
11674
0
                            offset += 4;
11675
0
                        }
11676
0
                        break;
11677
0
                    default:
11678
                        /* Skip over the list*/
11679
0
                        k = num_sub_entr;
11680
0
                        offset += sel_crit_set_len - 1;
11681
0
                        break;
11682
0
                    }
11683
0
                }
11684
0
            }
11685
0
        }
11686
        /* Validity area */
11687
0
        if ((retval1 & 0x40) == 0x40) {
11688
0
            uint32_t loc_entry_len = 0, loc_entry_type;
11689
0
            val_tree = proto_tree_add_subtree_format(sub_tree, tvb, offset, -1, ett_nas_5gs_wlansp_val_area, &item, "Validity area");
11690
            /* length of validity area */
11691
0
            proto_tree_add_item_ret_uint(val_tree, hf_nas_5gs_wlansp_val_area_len, tvb, offset, 2, ENC_BIG_ENDIAN, &val_area_len);
11692
0
            proto_item_set_len(item, val_area_len + 2);
11693
0
            offset += 2;
11694
            /* number of location entries */
11695
0
            proto_tree_add_item_ret_uint(val_tree, hf_nas_5gs_wlansp_num_loc_entr, tvb, offset, 1, ENC_BIG_ENDIAN, &num_loc_entr);
11696
0
            offset++;
11697
            /* location entry %n*/
11698
0
            proto_tree* loc_tree;
11699
0
            uint32_t l = 0, tgpp_num_loc_fields;
11700
0
            proto_tree* loc_tree_sub_tree;
11701
0
            for (l = 0; l < num_loc_entr; l++) {
11702
0
                loc_tree = proto_tree_add_subtree_format(val_tree, tvb, offset, -1, ett_nas_5gs_wlansp_val_area, &item, "Location entry %u", l+1);
11703
                /* Length of location entry */
11704
0
                proto_tree_add_item_ret_uint(loc_tree, hf_nas_5gs_wlansp_loc_entry_len, tvb, offset, 2, ENC_BIG_ENDIAN, &loc_entry_len);
11705
0
                proto_item_set_len(item, loc_entry_len + 2);
11706
0
                offset += 2;
11707
                /* entry type {3GPP, WLAN, Geo} number of sub entries */
11708
0
                proto_tree_add_item_ret_uint(loc_tree, hf_nas_5gs_wlansp_loc_entry_type, tvb, offset, 1, ENC_BIG_ENDIAN, &loc_entry_type);
11709
                /* number of sub entries */
11710
0
                uint32_t loc_num_sub_entries;
11711
0
                proto_tree_add_item_ret_uint(loc_tree, hf_nas_5gs_wlansp_loc_num_sub_entries, tvb, offset, 1, ENC_BIG_ENDIAN, &loc_num_sub_entries);
11712
0
                offset++;
11713
0
                uint32_t m;
11714
0
                current_offset = offset;
11715
0
                for (m = 0; m < loc_num_sub_entries; m++) {
11716
0
                    uint32_t tgpp_sub_ent_len, wlan_sub_ent_len, wlan_sub_ent_type, loc_field_len, loc_field_type, num_loc_fields;
11717
0
                    loc_tree_sub_tree = proto_tree_add_subtree_format(loc_tree, tvb, current_offset, -1, ett_nas_5gs_loc_3gpp_sub_ent, &item, "%s sub entry %u",
11718
0
                        val_to_str_const(loc_entry_type, nas_5gs_andsp_wlansp_loc_entry_type_vals, "Unknown"), m + 1);
11719
0
                    switch (loc_entry_type) {
11720
0
                    case 1: /* 3GPP location */
11721
                        /* Length of 3GPP location sub entry */
11722
0
                        proto_tree_add_item_ret_uint(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_3gpp_sub_ent_len, tvb, current_offset, 2, ENC_BIG_ENDIAN, &tgpp_sub_ent_len);
11723
0
                        proto_item_set_len(item, tgpp_sub_ent_len + 2);
11724
0
                        current_offset += 2;
11725
                        /*
11726
                        * MCC digit 2 MCC digit 1 octet r+9
11727
                        * MNC digit 3 MCC digit 3 octet r+10
11728
                        * MNC digit 2 MNC digit 1 octet r+11
11729
                        */
11730
0
                        current_offset = dissect_e212_mcc_mnc(tvb, pinfo, loc_tree_sub_tree, current_offset, E212_NONE, true);
11731
                        /* number of location fields */
11732
0
                        proto_tree_add_item_ret_uint(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_3gpp_num_loc_fields, tvb, current_offset, 1, ENC_BIG_ENDIAN, &tgpp_num_loc_fields);
11733
0
                        current_offset++;
11734
                        /* 3GPP location field n*/
11735
0
                        uint32_t n = 0;
11736
0
                        for (n = 0; n < tgpp_num_loc_fields; n++) {
11737
                            /* Length of 3GPP location field */
11738
0
                            proto_tree_add_item_ret_uint(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_3gpp_loc_field_len, tvb, current_offset, 1, ENC_BIG_ENDIAN, &loc_field_len);
11739
0
                            current_offset++;
11740
                            /* field type  */
11741
0
                            proto_tree_add_item_ret_uint(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_3gpp_loc_field_type, tvb, current_offset, 1, ENC_BIG_ENDIAN, &loc_field_type);
11742
0
                            current_offset++;
11743
0
                            switch (loc_field_type) {
11744
0
                            case 1: /* TAC */
11745
0
                                proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_3gpp_loc_tac, tvb, current_offset, loc_field_len - 1, ENC_BIG_ENDIAN);
11746
0
                                current_offset += loc_field_len - 1;
11747
0
                                break;
11748
0
                            case 2: /* EUTRA CI */
11749
0
                                proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_3gpp_loc_eutra_ci, tvb, current_offset, 2, ENC_BIG_ENDIAN);
11750
0
                                current_offset += 2;
11751
0
                                break;
11752
0
                            case 4: /* NR CI */
11753
0
                                proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_3gpp_loc_nr_ci, tvb, current_offset, 3, ENC_BIG_ENDIAN);
11754
0
                                current_offset += 3;
11755
0
                                break;
11756
0
                            default:
11757
0
                                current_offset += loc_field_len - 1;
11758
0
                                break;
11759
0
                            }
11760
0
                        }
11761
0
                        break;
11762
0
                    case 2: /* WLAN location */
11763
                        /* Fall trough */
11764
0
                    case 3: /* Geo location */
11765
                        /* Figure 5.3.2.10a: Location sub entry {entry type= WLAN location or Geo location} */
11766
                        /* Length of location sub entry */
11767
0
                        proto_tree_add_item_ret_uint(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_sub_ent_len, tvb, current_offset, 2, ENC_BIG_ENDIAN, &wlan_sub_ent_len);
11768
0
                        proto_item_set_len(item, wlan_sub_ent_len + 2);
11769
0
                        current_offset += 2;
11770
                        /* number of location fields */
11771
0
                        proto_tree_add_item_ret_uint(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_num_loc_fields, tvb, current_offset, 1, ENC_BIG_ENDIAN, &num_loc_fields);
11772
0
                        current_offset++;
11773
0
                        uint32_t o;
11774
0
                        for (o = 0; o < num_loc_fields; o++) {
11775
0
                            if (loc_entry_type == 2) {
11776
                                    /* WLAN location */
11777
                                    /* Length of WLAN location field */
11778
0
                                proto_tree_add_item_ret_uint(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_wlan_loc_field_len, tvb, current_offset, 1, ENC_BIG_ENDIAN, &wlan_sub_ent_len);
11779
0
                                current_offset++;
11780
                                /* WLAN location field type */
11781
0
                                proto_tree_add_item_ret_uint(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_wlan_sub_ent_type, tvb, current_offset, 1, ENC_BIG_ENDIAN, &wlan_sub_ent_type);
11782
0
                                current_offset++;
11783
                                /* WLAN location field contents */
11784
0
                                switch (wlan_sub_ent_type) {
11785
0
                                case 0x81: /* HESSID */
11786
0
                                    proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_hessid, tvb, current_offset, 6, ENC_BIG_ENDIAN);
11787
0
                                    current_offset += 6;
11788
0
                                    break;
11789
0
                                case 0x82: /* SSID */
11790
0
                                    proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_ssid, tvb, current_offset, wlan_sub_ent_len - 1, ENC_NA);
11791
0
                                    current_offset += wlan_sub_ent_len - 1;
11792
0
                                    break;
11793
0
                                case 0x84: /* BSSID */
11794
0
                                    proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_wlansp_loc_bssid, tvb, current_offset, 6, ENC_BIG_ENDIAN);
11795
0
                                    current_offset += 6;
11796
0
                                    break;
11797
0
                                default:
11798
0
                                    current_offset += wlan_sub_ent_len - 3;
11799
0
                                    break;
11800
0
                                }
11801
0
                            } else {
11802
                                /* Geo location */
11803
                                /* Anchor latitude  */
11804
0
                                proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_geo_loc_anc_lat, tvb, current_offset, 4, ENC_BIG_ENDIAN);
11805
0
                                current_offset += 4;
11806
                                /* Anchor longitude */
11807
0
                                proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_geo_loc_anc_long, tvb, current_offset, 4, ENC_BIG_ENDIAN);
11808
0
                                current_offset += 4;
11809
                                /* Radius */
11810
0
                                proto_tree_add_item(loc_tree_sub_tree, hf_nas_5gs_geo_loc_rad, tvb, current_offset, 2, ENC_BIG_ENDIAN);
11811
0
                                current_offset += 2;
11812
0
                            }
11813
0
                        }
11814
0
                        break;
11815
0
                    default:
11816
0
                        break;
11817
0
                    }
11818
0
                }
11819
0
                offset += loc_entry_len - 1;
11820
0
            } /* Location entry */
11821
0
        }
11822
        /* Time of day */
11823
0
        if ((retval1 & 0x04) == 0x04) {
11824
0
            time_tree = proto_tree_add_subtree_format(sub_tree, tvb, offset, -1, ett_nas_5gs_wlansp_tod, &item, "Time of day");
11825
            /* Length of time of day */
11826
0
            proto_tree_add_item_ret_uint(time_tree, hf_nas_5gs_wlansp_time_of_day_len, tvb, offset, 2, ENC_BIG_ENDIAN, &time_of_day_len);
11827
0
            proto_item_set_len(item, time_of_day_len + 2);
11828
0
            offset += 2;
11829
0
            offset += time_of_day_len;
11830
            /* number of time of day entries */
11831
            /* Time of day entry %n*/
11832
11833
0
        }
11834
0
    }
11835
11836
0
}
11837
11838
static const value_string nas_5gs_n3nan_node_conf_inf_type_vals[] = {
11839
    { 0x01, "Home N3IWF identifier configuration" },
11840
    { 0x02, "Home ePDG identifier configuration" },
11841
    { 0x03, "Extended home N3IWF identifier configuration" },
11842
    { 0x04, "Slice-specific N3IWF prefix configuration" },
11843
    { 0, NULL }
11844
};
11845
11846
static const value_string nas_5gs_n3nan_n3nan_home_n3iwf_id_type_vals[] = {
11847
    { 0x01, "IPv4" },
11848
    { 0x02, "IPv6" },
11849
    { 0x03, "IPv4v6" },
11850
    { 0x04, "FQDN" },
11851
    { 0x05, "SNPN FQDN" },
11852
    { 0, NULL }
11853
};
11854
11855
11856
static void
11857
de_nas_5gs_n3nan_home_n3iwf_identifier_conf(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset, int length)
11858
0
{
11859
0
    proto_tree* entry_tree;
11860
0
    proto_item *item;
11861
0
    uint32_t type, fqdnlen;
11862
0
    int end_offset = offset + length;
11863
11864
0
    int i = 0;
11865
0
    while ( offset < end_offset) {
11866
0
        i++;
11867
0
        entry_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_nas_5gs_n3iwf_identifier_entry, &item, "Home N3IWF identifier entry %i", i);
11868
        /* Home N3IWF identifier type */
11869
0
        proto_tree_add_item_ret_uint(entry_tree, hf_nas_5gs_n3nan_home_n3iwf_id_type, tvb, offset, 1, ENC_BIG_ENDIAN, &type);
11870
0
        offset++;
11871
0
        switch (type) {
11872
0
        case 1: /* IPv4 */
11873
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_n3iwf_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN);
11874
0
            offset += 4;
11875
0
            proto_item_set_len(item, 4 + 2);
11876
0
            break;
11877
0
        case 2: /* ipv6 */
11878
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_n3iwf_ipv6_addr, tvb, offset, 16, ENC_NA);
11879
0
            offset += 16;
11880
0
            proto_item_set_len(item, 16 + 2);
11881
0
            break;
11882
0
        case 3: /* IPv4v6*/
11883
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_n3iwf_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN);
11884
0
            offset += 4;
11885
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_n3iwf_ipv6_addr, tvb, offset, 16, ENC_NA);
11886
0
            offset += 16;
11887
0
            proto_item_set_len(item, 20 + 2);
11888
0
            break;
11889
0
        case 4:
11890
            /* Length of home N3IWF FQDN */
11891
0
            proto_tree_add_item_ret_uint(entry_tree, hf_nas_5gs_home_n3iwf_fqdn_len, tvb, offset, 1, ENC_BIG_ENDIAN, &fqdnlen);
11892
0
            offset++;
11893
            /* Home N3IWF FQDN */
11894
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_n3iwf_fqdn, tvb, offset, fqdnlen, ENC_APN_STR);
11895
0
            offset += fqdnlen;
11896
0
            proto_item_set_len(item, fqdnlen + 2);
11897
0
            break;
11898
0
        case 5:  /* SNPN FQDN */
11899
            /* Length of Home N3IWF identifier contents */
11900
0
            proto_tree_add_item_ret_uint(entry_tree, hf_nas_5gs_home_n3iwf_id_cont_len, tvb, offset, 1, ENC_BIG_ENDIAN, &fqdnlen);
11901
0
            offset++;
11902
            /*  MCC digit 2         MCC digit 1
11903
                0    0    0    0    MCC digit 3
11904
                Spare    Spare   Spare    Spare */
11905
0
            offset = dissect_e212_mcc_mnc(tvb, pinfo, entry_tree, offset, E212_NONE, true);
11906
            /* Home N3IWF FQDN */
11907
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_n3iwf_fqdn, tvb, offset, fqdnlen, ENC_APN_STR);
11908
0
            offset += fqdnlen;
11909
0
            proto_item_set_len(item, fqdnlen + 2);
11910
0
            break;
11911
0
        default:
11912
0
            return;
11913
0
        }
11914
0
    }
11915
0
}
11916
11917
static void
11918
de_nas_5gs_n3nan_home_epdg_identifier_conf(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset, int length)
11919
0
{
11920
11921
0
    proto_tree* entry_tree;
11922
0
    proto_item* item;
11923
0
    uint32_t type, fqdnlen;
11924
0
    int end_offset = offset + length;
11925
11926
0
    int i = 0;
11927
0
    while (offset < end_offset) {
11928
0
        i++;
11929
0
        entry_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_nas_5gs_epdg_identifier_entry, &item, "Home ePDG identifier entry %i", i);
11930
        /*Home ePDG identifier type */
11931
0
        proto_tree_add_item_ret_uint(entry_tree, hf_nas_5gs_n3nan_home_epdg_id_type, tvb, offset, 1, ENC_BIG_ENDIAN, &type);
11932
0
        offset++;
11933
0
        switch (type) {
11934
0
        case 1: /* IPv4 */
11935
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_epdg_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN);
11936
0
            offset += 4;
11937
0
            break;
11938
0
        case 2: /* ipv6 */
11939
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_epdg_ipv6_addr, tvb, offset, 16, ENC_NA);
11940
0
            offset += 16;
11941
0
            break;
11942
0
        case 3: /* IPv4v6*/
11943
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_epdg_ipv4_addr, tvb, offset, 4, ENC_BIG_ENDIAN);
11944
0
            offset += 4;
11945
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_epdg_ipv6_addr, tvb, offset, 16, ENC_NA);
11946
0
            offset += 16;
11947
0
            break;
11948
0
        case 4:
11949
            /* Length of home N3IWF FQDN */
11950
0
            proto_tree_add_item_ret_uint(entry_tree, hf_nas_5gs_home_epdg_fqdn_len, tvb, offset, 1, ENC_BIG_ENDIAN, &fqdnlen);
11951
0
            offset++;
11952
            /* Home N3IWF FQDN */
11953
0
            proto_tree_add_item(entry_tree, hf_nas_5gs_home_epdg_fqdn, tvb, offset, fqdnlen, ENC_APN_STR);
11954
0
            offset += fqdnlen;
11955
0
            break;
11956
0
        default:
11957
0
            return;
11958
0
        }
11959
0
    }
11960
0
}
11961
11962
static void
11963
de_nas_5gs_n3nan_ext_home_n3iwf_identifier_conf(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset, int length)
11964
0
{
11965
    /* Home N3IWF identifier entry */
11966
    /* S-NSSAI list */
11967
0
    proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_msg_not_dis, tvb, offset, length);
11968
0
}
11969
11970
static void
11971
de_nas_5gs_n3nan_ext_slice_specific_n3iwf_prefix_conf(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree, int offset, int length)
11972
0
{
11973
0
    proto_tree_add_expert(tree, pinfo, &ei_nas_5gs_msg_not_dis, tvb, offset, length);
11974
0
}
11975
11976
11977
static void
11978
de_nas_5gs_ue_policies_andsp_n3nan(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree)
11979
0
{
11980
0
    proto_tree* sub_tree, *entry_tree, * conf_inf_tree;
11981
0
    proto_item* item;
11982
0
    unsigned offset = 0;
11983
0
    uint32_t inf_len, node_sel_entry_len, type, node_conf_len;
11984
0
    uint32_t len = tvb_reported_length(tvb);
11985
11986
0
    sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_nas_5gs_n3nan_sel_len, &item, "N3AN node selection information");
11987
    /* Length of N3AN node selection information */
11988
0
    proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_n3nan_sel_len, tvb, offset, 2, ENC_BIG_ENDIAN, &inf_len);
11989
0
    proto_item_set_len(item, inf_len + 2);
11990
0
    offset += 2;
11991
    /* If the N3AN node configuration information is provided by VPLMN,
11992
     * then length of N3AN node selection information field shall be set to zero
11993
     */
11994
0
    if (len == 0) {
11995
0
        return;
11996
0
    }
11997
11998
    /* Content of N3AN node selection information */
11999
0
    int i = 0;
12000
0
    while (offset < inf_len) {
12001
0
        i++;
12002
0
        entry_tree = proto_tree_add_subtree_format(sub_tree, tvb, offset, -1, ett_nas_5gs_n3nan_sel_info_entry, &item, "N3AN node selection information entry %i", i);
12003
        /* Length of N3AN node selection information entry */
12004
0
        proto_tree_add_item_ret_uint(entry_tree, hf_nas_5gs_n3nan_node_sel_entry_len, tvb, offset, 1, ENC_BIG_ENDIAN, &node_sel_entry_len);
12005
0
        proto_item_set_len(item, node_sel_entry_len + 2);
12006
0
        offset++;
12007
        /*  MCC digit 2 MCC digit 1 */
12008
        /*  MNC digit 3 MCC digit 3*/
12009
        /*  MNC digit 2 MNC digit 1*/
12010
0
        offset = dissect_e212_mcc_mnc(tvb, pinfo, entry_tree, offset, E212_NONE, true);
12011
        /*  FQDN format Preference Priority */
12012
0
        static int* const flags[] = {
12013
0
        &hf_nas_5gs_node_sel_entry_fqdn_format,
12014
0
        &hf_nas_5gs_node_sel_entry_pref,
12015
0
        &hf_nas_5gs_node_sel_entry_prio,
12016
0
        NULL
12017
0
        };
12018
12019
0
        proto_tree_add_bitmask_list(entry_tree, tvb, offset, 1, flags, ENC_NA);
12020
0
        offset++;
12021
0
    }
12022
12023
0
    while (offset < len) {
12024
0
        conf_inf_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_nas_5gs_n3nan_conf_inf, &item, "N3AN node configuration information");
12025
        /* N3AN node configuration information type */
12026
0
        proto_tree_add_item_ret_uint(conf_inf_tree, hf_nas_5gs_n3nan_node_conf_inf_type, tvb, offset, 1, ENC_BIG_ENDIAN, &type);
12027
0
        proto_item_append_text(item, " - %s", val_to_str_const(type, nas_5gs_n3nan_node_conf_inf_type_vals, "Unknown"));
12028
0
        offset++;
12029
0
        proto_tree_add_item_ret_uint(conf_inf_tree, hf_nas_5gs_n3nan_node_sel_entry_len, tvb, offset, 2, ENC_BIG_ENDIAN, &node_conf_len);
12030
0
        offset += 2;
12031
0
        proto_item_set_len(item, node_conf_len + 3);
12032
0
        switch (type)
12033
0
        {
12034
0
        case 1:/* Home N3IWF identifier configuration */
12035
0
            de_nas_5gs_n3nan_home_n3iwf_identifier_conf(tvb, pinfo, conf_inf_tree, offset, node_conf_len);
12036
0
            offset += node_conf_len;
12037
0
            break;
12038
0
        case 2: /* Home ePDG identifier configuration */
12039
0
            de_nas_5gs_n3nan_home_epdg_identifier_conf(tvb, pinfo, conf_inf_tree, offset, node_conf_len);
12040
0
            offset += node_conf_len;
12041
0
            break;
12042
0
        case 3: /* Extended home N3IWF identifier configuration */
12043
0
            de_nas_5gs_n3nan_ext_home_n3iwf_identifier_conf(tvb, pinfo, conf_inf_tree, offset, node_conf_len);
12044
0
            offset += node_conf_len;
12045
0
            break;
12046
0
        case 4: /* Slice-specific N3IWF prefix configuration */
12047
0
            de_nas_5gs_n3nan_ext_slice_specific_n3iwf_prefix_conf(tvb, pinfo, conf_inf_tree, offset, node_conf_len);
12048
0
            offset += node_conf_len;
12049
0
            break;
12050
0
        default:
12051
0
            offset += node_conf_len;
12052
0
            break;
12053
0
        }
12054
0
    }
12055
0
}
12056
12057
static void
12058
de_nas_5gs_ue_policies_andsp(tvbuff_t* tvb, packet_info* pinfo _U_, proto_tree* tree)
12059
0
{
12060
0
    proto_tree* sub_tree;
12061
0
    proto_item* item;
12062
0
    uint32_t len = tvb_reported_length(tvb);
12063
0
    uint32_t curr_offset = 0, andsp_info_type, info_len;
12064
12065
0
    int i = 0;
12066
0
    while ((curr_offset) < len) {
12067
0
        i++;
12068
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_ue_policies_andp, &item, "ANDSP info %u", i);
12069
        /* 0 0 0 0 ANDSP Info type octet k */
12070
0
        proto_tree_add_bits_item(sub_tree, hf_nas_5gs_spare_bits, tvb, (curr_offset << 3), 4, ENC_BIG_ENDIAN);
12071
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_andsp_info_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &andsp_info_type);
12072
0
        curr_offset++;
12073
        /* Length of ANDSP info contents */
12074
0
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_andsp_info_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &info_len);
12075
0
        proto_item_set_len(item, info_len + 2);
12076
0
        curr_offset += 2;
12077
        /* ANDSP info contents */
12078
0
        proto_tree_add_item(sub_tree, hf_nas_5gs_andsp_info_contents, tvb, curr_offset, info_len, ENC_NA);
12079
0
        switch (andsp_info_type) {
12080
0
        case 1: /* WLANSP */
12081
0
            de_nas_5gs_ue_policies_andsp_wlansp_rule(tvb_new_subset_length(tvb, curr_offset, info_len), pinfo, sub_tree);
12082
0
            break;
12083
0
        case 2: /* N3NAN TS 24.526 */
12084
0
            de_nas_5gs_ue_policies_andsp_n3nan(tvb_new_subset_length(tvb, curr_offset, info_len), pinfo, sub_tree);
12085
0
        default:
12086
0
            break;
12087
0
        }
12088
0
        curr_offset += info_len;
12089
0
    }
12090
12091
0
}
12092
12093
/* D.6.2 UE policy section management list */
12094
12095
static const value_string nas_5gs_updp_ue_policy_part_type_vals[] = {
12096
    { 0x0,    "Reserved"},
12097
    { 0x1,    "URSP"},
12098
    { 0x2,    "ANDSP"},
12099
    { 0,    NULL }
12100
};
12101
12102
static uint16_t
12103
de_nas_5gs_updp_ue_policy_section_mgm_lst(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
12104
    uint32_t offset, unsigned len,
12105
    char* add_string _U_, int string_len _U_)
12106
3
{
12107
3
    proto_tree *sub_tree, *sub_tree2, *sub_tree3;
12108
3
    proto_item* item;
12109
3
    uint32_t curr_offset = offset;
12110
3
    uint32_t sub_list_len, instr_len, policy_len;
12111
12112
    /* UE policy section management list contents Octet 4 - Octet z*/
12113
3
    int i = 0;
12114
6
    while ((curr_offset - offset) < len) {
12115
        /* UE policy section management sublist (PLMN X) */
12116
3
        i++;
12117
3
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_updp_ue_policy_section_mgm_lst, &item,
12118
3
            "UE policy section management sublist (PLMN %u)", i);
12119
        /* Length of UE policy section management sublist */
12120
3
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_updp_ue_pol_sect_sublst_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &sub_list_len);
12121
3
        proto_item_set_len(item, sub_list_len + 2);
12122
3
        curr_offset += 2;
12123
        /* MCC digit 2    MCC digit 1
12124
         * MNC digit 3    MCC digit 3
12125
         * MNC digit 2    MNC digit 1
12126
         */
12127
3
        curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_NONE, true);
12128
        /* UE policy section management sublist contents*/
12129
        /* Instruction X */
12130
3
        int j = 1;
12131
3
        sub_list_len = sub_list_len - 3;
12132
5
        while (sub_list_len > 0){
12133
2
            sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, -1, ett_nas_5gs_updp_ue_policy_section_mgm_sublst, &item,
12134
2
                "Instruction %u", j);
12135
            /* Instruction contents length */
12136
2
            proto_tree_add_item_ret_uint(sub_tree2, hf_nas_5gs_updp_instr_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &instr_len);
12137
2
            curr_offset += 2;
12138
            /* UPSC */
12139
2
            proto_tree_add_item(sub_tree2, hf_nas_5gs_updp_upsc, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
12140
2
            curr_offset += 2;
12141
2
            proto_item_set_len(item, instr_len + 2);
12142
            /* UE policy section contents */
12143
2
            sub_list_len = sub_list_len - instr_len - 2;
12144
2
            instr_len = instr_len - 2;
12145
2
            int k = 1;
12146
2
            while (instr_len > 0) {
12147
0
                uint32_t ue_policy_type;
12148
0
                sub_tree3 = proto_tree_add_subtree_format(sub_tree2, tvb, curr_offset, -1, ett_nas_5gs_updp_ue_policy_section_mgm_sublst, &item,
12149
0
                    "UE policy part %u", k);
12150
                /* UE policy part contents length */
12151
0
                proto_tree_add_item_ret_uint(sub_tree3, hf_nas_5gs_updp_policy_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &policy_len);
12152
0
                curr_offset += 2;
12153
0
                proto_item_set_len(item, policy_len + 2);
12154
                /* UE policy part type */
12155
0
                proto_tree_add_item_ret_uint(sub_tree3, hf_nas_5gs_updp_ue_policy_part_type, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &ue_policy_type);
12156
0
                curr_offset++;
12157
                /* UE policy part contents, This field contains a UE policy part encoded as specified in 3GPP TS 24.526 */
12158
0
                switch (ue_policy_type) {
12159
0
                case 1: /* 5.2 Encoding of UE policy part type URSP */
12160
0
                    de_nas_5gs_ue_policies_ursp(tvb_new_subset_length(tvb, curr_offset, policy_len - 1), pinfo, sub_tree3);
12161
0
                    break;
12162
0
                case 2: /* 5.3 Encoding of UE policy part type ANDSP */
12163
0
                    de_nas_5gs_ue_policies_andsp(tvb_new_subset_length(tvb, curr_offset, policy_len - 1), pinfo, sub_tree3);
12164
0
                    break;
12165
0
                default:
12166
0
                    proto_tree_add_item(sub_tree3, hf_nas_5gs_updp_ue_policy_part_cont, tvb, curr_offset, policy_len - 1, ENC_NA);
12167
0
                    break;
12168
0
                }
12169
0
                curr_offset += (policy_len - 1);
12170
0
                instr_len = instr_len - (policy_len + 2);
12171
0
                k++;
12172
0
            }
12173
2
            j++;
12174
2
        }
12175
3
    }
12176
12177
3
    return len;
12178
3
}
12179
12180
/* D.6.3 UE policy section management result */
12181
static uint16_t
12182
de_nas_5gs_updp_ue_policy_section_mgm_res(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
12183
    uint32_t offset, unsigned len,
12184
    char* add_string _U_, int string_len _U_)
12185
1
{
12186
1
    proto_tree *sub_tree, *sub_tree2;
12187
1
    proto_item* item;
12188
1
    uint32_t curr_offset = offset;
12189
1
    uint32_t number_of_result;
12190
12191
    /* UE policy section management result contents Octet 4 - Octet z*/
12192
1
    int i = 0;
12193
3
    while ((curr_offset - offset) < len) {
12194
        /* UE policy section management subresult (PLMN X) */
12195
2
        i++;
12196
2
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_updp_ue_policy_section_mgm_lst, &item,
12197
2
            "UE policy section management subresult (PLMN %u)", i);
12198
        /* Number of result */
12199
2
        proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_updp_ue_pol_sect_subresult_len, tvb, curr_offset, 1, ENC_BIG_ENDIAN, &number_of_result);
12200
2
        curr_offset += 1;
12201
        /* MCC digit 2    MCC digit 1
12202
         * MNC digit 3    MCC digit 3
12203
         * MNC digit 2    MNC digit 1
12204
         */
12205
2
        curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_NONE, true);
12206
        /* UE policy section management subresult contents*/
12207
        /* Result X */
12208
2
        int j = 1;
12209
2
        while (number_of_result > 0){
12210
0
            sub_tree2 = proto_tree_add_subtree_format(sub_tree, tvb, curr_offset, -1, ett_nas_5gs_updp_ue_policy_section_mgm_sublst, &item,
12211
0
                "Result %u", j);
12212
            /* UPSC */
12213
0
            proto_tree_add_item(sub_tree2, hf_nas_5gs_updp_upsc, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
12214
0
            curr_offset += 2;
12215
            /* Failed instruction order */
12216
0
            proto_tree_add_item(sub_tree2, hf_nas_5gs_updp_failed_instruction_order, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
12217
0
            curr_offset += 2;
12218
            /* Cause */
12219
0
            proto_tree_add_item(sub_tree2, hf_nas_5gs_upds_cause, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
12220
0
            curr_offset += 1;
12221
0
            j++;
12222
0
            number_of_result--;
12223
0
        }
12224
2
    }
12225
12226
1
    return len;
12227
1
}
12228
12229
/* D.6.4 UPSI list */
12230
static uint16_t
12231
de_nas_5gs_updp_upsi_list(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
12232
    uint32_t offset, unsigned len,
12233
    char* add_string _U_, int string_len _U_)
12234
7
{
12235
7
    proto_tree* sub_tree;
12236
7
    proto_item* item;
12237
7
    uint32_t curr_offset = offset;
12238
7
    uint32_t end_offset = offset + len;
12239
7
    int32_t sublist_len;
12240
12241
    /* UPSI sublist (PLMN 1) */
12242
7
    int i = 1;
12243
19
    while (curr_offset < end_offset ) {
12244
12
        sub_tree = proto_tree_add_subtree_format(tree, tvb, curr_offset, -1, ett_nas_5gs_updp_upsi_list, &item,
12245
12
            " UPSI sublist (PLMN %u)", i++);
12246
12
        proto_tree_add_item_ret_int(sub_tree, hf_nas_5gs_upsi_sublist_len, tvb, curr_offset, 2, ENC_BIG_ENDIAN, &sublist_len);
12247
12
        proto_item_set_len(item, sublist_len + 2);
12248
12
        curr_offset += 2;
12249
12
        curr_offset = dissect_e212_mcc_mnc(tvb, pinfo, sub_tree, curr_offset, E212_NONE, true);
12250
12
        sublist_len -= 3;
12251
13
        while (sublist_len > 0) {
12252
1
            proto_tree_add_item(sub_tree, hf_nas_5gs_upsc, tvb, curr_offset, 2, ENC_BIG_ENDIAN);
12253
1
            curr_offset += 2;
12254
1
            sublist_len -= 2;
12255
1
        }
12256
12
    }
12257
12258
12259
7
    return len;
12260
7
}
12261
12262
/* D.6.5 UE policy classmark */
12263
static uint16_t
12264
de_nas_5gs_updp_ue_policy_cm(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
12265
    uint32_t offset, unsigned len,
12266
    char* add_string _U_, int string_len _U_)
12267
1
{
12268
1
    static int* const flags_oct3[] = {
12269
1
    &hf_nas_5gs_spare_b7,
12270
1
    &hf_nas_5gs_spare_b6,
12271
1
    &hf_nas_5gs_spare_b5,
12272
1
    &hf_nas_5gs_e802cstag,
12273
1
    &hf_nas_5gs_sup_rure,
12274
1
    &hf_nas_5gs_svpsu,
12275
1
    &hf_nas_5gs_epsurdp,
12276
1
    &hf_nas_5gs_sup_andsp,
12277
1
    NULL
12278
1
    };
12279
12280
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags_oct3, ENC_NA);
12281
12282
1
    return len;
12283
1
}
12284
12285
/* D.6.6 UE OS Id */
12286
static uint16_t
12287
de_nas_5gs_updp_ue_os_id(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
12288
    uint32_t offset, unsigned len,
12289
    char* add_string _U_, int string_len _U_)
12290
0
{
12291
0
    uint32_t curr_offset = offset;
12292
    /* OS Id:
12293
    * The OS Id is coded as a sequence of a sixteen octet OS Id value field.
12294
    *  The OS Id value field is defined as Universally Unique IDentifier (UUID) as specified in IETF RFC 4122 [35A].
12295
    */
12296
0
    proto_tree_add_item(tree, hf_nas_5gs_ue_os_id, tvb, curr_offset, len, ENC_BIG_ENDIAN);
12297
12298
0
    return len;
12299
0
}
12300
12301
/* D.6.7 UE policy network classmark */
12302
static true_false_string tfs_nas_5gs_nssui = {
12303
    "UE is not allowed to accept URSP signalled by non-subscribed SNPNs",
12304
    "UE is allowed to accept URSP signalled by non-subscribed SNPNs"
12305
};
12306
12307
static uint16_t
12308
de_nas_5gs_updp_ue_policy_nw_classmark(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
12309
    uint32_t offset, unsigned len,
12310
    char* add_string _U_, int string_len _U_)
12311
0
{
12312
0
    uint32_t curr_offset = offset;
12313
12314
0
    proto_tree_add_bits_item(tree, hf_nas_5gs_spare_bits, tvb, (curr_offset << 3), 7, ENC_BIG_ENDIAN);
12315
0
    proto_tree_add_item(tree, hf_nas_5gs_nssui, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
12316
0
    curr_offset++;
12317
12318
0
    while ((curr_offset - offset) < len) {
12319
0
        proto_tree_add_item(tree, hf_nas_5gs_spare_bits, tvb, curr_offset, 1, ENC_BIG_ENDIAN);
12320
0
        curr_offset++;
12321
0
    }
12322
12323
0
    return len;
12324
0
}
12325
12326
/* 24.587 8.3.1 UPDS cause */
12327
static const value_string nas_5gs_updp_upds_cause_vals[] = {
12328
    { 0x1f, "Request rejected, unspecified"},
12329
    { 0x20, "Service option not supported"},
12330
    { 0x22, "Service option temporarily out of order"},
12331
    { 0x23, "PTI already in use"},
12332
    { 0x5f, "Semantically incorrect message"},
12333
    { 0x60, "Invalid mandatory information"},
12334
    { 0x61, "Message type non-existent or not implemented"},
12335
    { 0x62, "Message type not compatible with the protocol state"},
12336
    { 0x63, "Information element non-existent or not implemented"},
12337
    { 0x64, "Conditional IE error"},
12338
    { 0x6f, "Protocol error, unspecified"},
12339
    { 0,    NULL }
12340
};
12341
12342
static uint16_t
12343
de_nas_5gs_updp_upds_cause(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo _U_,
12344
    uint32_t offset, unsigned len,
12345
    char* add_string _U_, int string_len _U_)
12346
1
{
12347
1
    proto_tree_add_item(tree, hf_nas_5gs_upds_cause, tvb, offset, 1, ENC_BIG_ENDIAN);
12348
12349
1
    return len;
12350
1
}
12351
12352
/* 24.587 8.3.2 Requested UE policies */
12353
static uint16_t
12354
de_nas_5gs_updp_req_ue_policies(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
12355
    uint32_t offset, unsigned len _U_,
12356
    char* add_string _U_, int string_len _U_)
12357
5
{
12358
5
    uint32_t curr_offset = offset;
12359
12360
5
    static int* const flags[] = {
12361
5
        &hf_nas_5gs_spare_b7,
12362
5
        &hf_nas_5gs_spare_b6,
12363
5
        &hf_nas_5gs_spare_b5,
12364
5
        &hf_nas_5gs_spare_b4,
12365
5
        &hf_nas_5gs_spare_b3,
12366
5
        &hf_nas_5gs_spare_b2,
12367
5
        &hf_nas_5gs_v2xuui,
12368
5
        &hf_nas_5gs_v2xpc5i,
12369
5
        NULL
12370
5
    };
12371
12372
5
    proto_tree_add_bitmask_list(tree, tvb, curr_offset, 1, flags, ENC_BIG_ENDIAN);
12373
5
    curr_offset++;
12374
12375
5
    EXTRANEOUS_DATA_CHECK(len, curr_offset - offset, pinfo, &ei_nas_5gs_extraneous_data);
12376
12377
5
    return (curr_offset - offset);
12378
5
}
12379
12380
/* D.6 Information elements coding */
12381
typedef enum
12382
{
12383
    DE_NAS_5GS_UPDP_UE_POLICY_SECTION_MGM_LST,          /* D.6.2 UE policy section management list */
12384
    DE_NAS_5GS_UPDP_UE_POLICY_SECTION_MGM_RES,          /* D.6.3 UE policy section management result */
12385
    DE_NAS_5GS_UPDP_UPSI_LIST,                          /* D.6.4 UPSI list */
12386
    DE_NAS_5GS_UPDP_UE_POLICY_CM,                       /* D.6.5 UE policy classmark */
12387
    DE_NAS_5GS_UPDP_UE_OS_ID,                           /* D.6.6 UE OS Id */
12388
    DE_NAS_5GS_UPDP_UE_POLICY_NW_CLASSMARK,             /* D.6.7 UE policy network classmark */
12389
12390
    DE_NAS_5GS_UPDP_UPDS_CAUSE,                         /* 24.587 8.3.1 UPDS cause */
12391
    DE_NAS_5GS_UPDP_REQ_UE_POLICIES,                    /* 24.587 8.3.2 Requested UE policies */
12392
12393
    DE_NAS_5GS_UPDP_NONE                                /* NONE */
12394
}
12395
nas_5gs_updp_elem_idx_t;
12396
12397
static const value_string nas_5gs_updp_elem_strings[] = {
12398
    { DE_NAS_5GS_UPDP_UE_POLICY_SECTION_MGM_LST, "UE policy section management list" },                  /* D.6.2 UE policy section management list */
12399
    { DE_NAS_5GS_UPDP_UE_POLICY_SECTION_MGM_RES, "UE policy section management result" },                /* D.6.3 UE policy section management result */
12400
    { DE_NAS_5GS_UPDP_UPSI_LIST,                 "UPSI list" },                                          /* D.6.4 UPSI list */
12401
    { DE_NAS_5GS_UPDP_UE_POLICY_CM,              "UE policy classmark" },                                /* D.6.5 UE policy classmark */
12402
    { DE_NAS_5GS_UPDP_UE_OS_ID,                  "UE OS Id" },                                           /* D.6.6 UE OS Id */
12403
    { DE_NAS_5GS_UPDP_UE_POLICY_NW_CLASSMARK,    "UE policy network classmark" },                        /* D.6.7 UE policy network classmark */
12404
12405
    { DE_NAS_5GS_UPDP_UPDS_CAUSE,                "UPDS cause" },                                         /* 24.587 8.3.1 UPDS cause */
12406
    { DE_NAS_5GS_UPDP_REQ_UE_POLICIES,           "Requested UE policies" },                              /* 24.587 8.3.2 Requested UE policies */
12407
12408
    { 0, NULL }
12409
};
12410
value_string_ext nas_5gs_updp_elem_strings_ext = VALUE_STRING_EXT_INIT(nas_5gs_updp_elem_strings);
12411
12412
160
#define NUM_NAS_5GS_UPDP_ELEM array_length(nas_5gs_updp_elem_strings)
12413
int ett_nas_5gs_updp_elem[NUM_NAS_5GS_UPDP_ELEM];
12414
12415
uint16_t(* const nas_5gs_updp_elem_fcn[])(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo,
12416
    uint32_t offset, unsigned len,
12417
    char* add_string, int string_len) = {
12418
        /*  5GS session management (5GSM) information elements */
12419
        de_nas_5gs_updp_ue_policy_section_mgm_lst,          /* D.6.2 UE policy section management list */
12420
        de_nas_5gs_updp_ue_policy_section_mgm_res,          /* D.6.3 UE policy section management result */
12421
        de_nas_5gs_updp_upsi_list,                          /* D.6.4 UPSI list */
12422
        de_nas_5gs_updp_ue_policy_cm,                       /* D.6.5 UE policy classmark */
12423
        de_nas_5gs_updp_ue_os_id,                           /* D.6.6 UE OS Id */
12424
        de_nas_5gs_updp_ue_policy_nw_classmark,             /* D.6.7 UE policy network classmark */
12425
12426
        de_nas_5gs_updp_upds_cause,                         /* 24.587 8.3.1 UPDS cause */
12427
        de_nas_5gs_updp_req_ue_policies,                    /* 24.587 8.3.2 Requested UE policies */
12428
12429
        NULL,   /* NONE */
12430
};
12431
12432
12433
/* D.5.1 Manage UE policy command */
12434
static void
12435
nas_5gs_updp_manage_ue_policy_cmd(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, uint32_t offset, unsigned len)
12436
3
{
12437
3
    uint32_t curr_offset;
12438
3
    uint32_t consumed;
12439
3
    unsigned   curr_len;
12440
12441
3
    curr_offset = offset;
12442
3
    curr_len = len;
12443
12444
    /* Direction: network to UE */
12445
3
    pinfo->link_dir = P2P_DIR_DL;
12446
12447
    /* UE policy section management list    UE policy section management list     D.6.2    M    LV-E    11-65537 */
12448
3
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_UPDP, DE_NAS_5GS_UPDP_UE_POLICY_SECTION_MGM_LST, NULL, ei_nas_5gs_missing_mandatory_element);
12449
12450
    /* 42    UE policy network classmark    UE policy network classmark D.6.7    O    TLV    3-5 */
12451
3
    ELEM_OPT_TLV(0x42, NAS_5GS_PDU_TYPE_UPDP, DE_NAS_5GS_UPDP_UE_POLICY_NW_CLASSMARK, NULL);
12452
12453
3
}
12454
12455
/* D.5.2 Manage UE policy complete */
12456
/*
12457
Direction:        UE to network
12458
 No data
12459
*/
12460
12461
static void
12462
nas_5gs_updp_manage_ue_policy_cmd_cmpl(tvbuff_t* tvb _U_, proto_tree* tree _U_, packet_info* pinfo, uint32_t offset _U_, unsigned len _U_)
12463
1
{
12464
    /*  Direction: UE to network */
12465
1
    pinfo->link_dir = P2P_DIR_UL;
12466
12467
    /* No data */
12468
1
}
12469
12470
/* D.5.3 Manage UE policy command reject*/
12471
static void
12472
nas_5gs_updp_manage_ue_policy_cmd_rej(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, uint32_t offset, unsigned len)
12473
1
{
12474
1
    uint32_t curr_offset;
12475
1
    uint32_t consumed;
12476
1
    unsigned   curr_len;
12477
12478
1
    curr_offset = offset;
12479
1
    curr_len = len;
12480
12481
    /*  Direction: UE to network */
12482
1
    pinfo->link_dir = P2P_DIR_UL;
12483
12484
    /* UE policy section management result    UE policy section management result D.6.3    M    LV-E    11-65537 */
12485
1
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_UPDP, DE_NAS_5GS_UPDP_UE_POLICY_SECTION_MGM_RES, NULL, ei_nas_5gs_missing_mandatory_element);
12486
12487
1
}
12488
12489
12490
/* D.5.4 UE state indication */
12491
static void
12492
nas_5gs_updp_ue_state_indication(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, uint32_t offset, unsigned len)
12493
9
{
12494
9
    uint32_t curr_offset;
12495
9
    uint32_t consumed;
12496
9
    unsigned   curr_len;
12497
12498
9
    curr_offset = offset;
12499
9
    curr_len = len;
12500
12501
    /* Direction: UE to network */
12502
9
    pinfo->link_dir = P2P_DIR_UL;
12503
12504
    /* UPSI list    UPSI list     D.6.4    M    LV-E    9-65537*/
12505
9
    ELEM_MAND_LV_E(NAS_5GS_PDU_TYPE_UPDP, DE_NAS_5GS_UPDP_UPSI_LIST, NULL, ei_nas_5gs_missing_mandatory_element);
12506
12507
    /* UE policy classmark    UE policy classmark     D.6.5    M    LV    2 - 4*/
12508
9
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_UPDP, DE_NAS_5GS_UPDP_UE_POLICY_CM, NULL, ei_nas_5gs_missing_mandatory_element);
12509
12510
    /* 41    UE OS Id    OS Id D.6.6    O    TLV    18-242 */
12511
9
    ELEM_OPT_TLV(0x41, NAS_5GS_PDU_TYPE_UPDP, DE_NAS_5GS_UPDP_UE_OS_ID, NULL);
12512
12513
8
}
12514
12515
12516
/* 24.587 7.2.1 UE policy provisioning request */
12517
static void
12518
nas_5gs_updp_ue_policy_prov_req(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, uint32_t offset, unsigned len)
12519
5
{
12520
5
    uint32_t curr_offset;
12521
5
    uint32_t consumed;
12522
5
    unsigned   curr_len;
12523
12524
5
    curr_offset = offset;
12525
5
    curr_len = len;
12526
12527
    /* Direction: UE to network */
12528
5
    pinfo->link_dir = P2P_DIR_UL;
12529
12530
    /* Requested UE policies    Requested UE policies    8.3.2    M    LV    2-3 */
12531
5
    ELEM_MAND_LV(NAS_5GS_PDU_TYPE_UPDP, DE_NAS_5GS_UPDP_REQ_UE_POLICIES, NULL, ei_nas_5gs_missing_mandatory_element);
12532
12533
5
}
12534
12535
12536
/* 24.587 7.2.2 UE policy provisioning reject */
12537
static void
12538
nas_5gs_updp_ue_policy_prov_rej(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, uint32_t offset, unsigned len)
12539
2
{
12540
2
    uint32_t curr_offset;
12541
2
    uint32_t consumed;
12542
2
    unsigned   curr_len;
12543
12544
2
    curr_offset = offset;
12545
2
    curr_len = len;
12546
12547
    /* Direction: UE to network */
12548
2
    pinfo->link_dir = P2P_DIR_DL;
12549
12550
    /* UPDS cause    UPDS cause    8.3.1    M    V    1 */
12551
2
    ELEM_MAND_V(NAS_5GS_PDU_TYPE_UPDP, DE_NAS_5GS_UPDP_UPDS_CAUSE, NULL, ei_nas_5gs_missing_mandatory_element);
12552
12553
2
}
12554
12555
12556
/* 9.7  Message type */
12557
12558
/* 5GS mobility management messages */
12559
static const value_string nas_5gs_mm_message_type_vals[] = {
12560
    { 0x41,    "Registration request"},
12561
    { 0x42,    "Registration accept"},
12562
    { 0x43,    "Registration complete"},
12563
    { 0x44,    "Registration reject"},
12564
    { 0x45,    "Deregistration request (UE originating)"},
12565
    { 0x46,    "Deregistration accept (UE originating)"},
12566
    { 0x47,    "Deregistration request (UE terminated)"},
12567
    { 0x48,    "Deregistration accept (UE terminated)"},
12568
12569
    { 0x49,    "Not used in current version"},
12570
    { 0x4a,    "Not used in current version" },
12571
    { 0x4b,    "Not used in current version" },
12572
12573
    { 0x4c,    "Service request"},
12574
    { 0x4d,    "Service reject"},
12575
    { 0x4e,    "Service accept"},
12576
    { 0x4f,    "Control plane service request"},
12577
12578
    { 0x50,    "Network slice-specific authentication command"},
12579
    { 0x51,    "Network slice-specific authentication complete"},
12580
    { 0x52,    "Network slice-specific authentication result"},
12581
    { 0x53,    "Not used in current version"},
12582
    { 0x54,    "Configuration update command"},
12583
    { 0x55,    "Configuration update complete"},
12584
    { 0x56,    "Authentication request"},
12585
    { 0x57,    "Authentication response"},
12586
    { 0x58,    "Authentication reject"},
12587
    { 0x59,    "Authentication failure"},
12588
    { 0x5a,    "Authentication result"},
12589
    { 0x5b,    "Identity request"},
12590
    { 0x5c,    "Identity response"},
12591
    { 0x5d,    "Security mode command"},
12592
    { 0x5e,    "Security mode complete"},
12593
    { 0x5f,    "Security mode reject"},
12594
12595
    { 0x60,    "Not used in current version"},
12596
    { 0x61,    "Not used in current version"},
12597
    { 0x62,    "Not used in current version"},
12598
    { 0x63,    "Not used in current version"},
12599
12600
    { 0x64,    "5GMM status"},
12601
    { 0x65,    "Notification"},
12602
    { 0x66,    "Notification response"},
12603
    { 0x67,    "UL NAS transport"},
12604
    { 0x68,    "DL NAS transport"},
12605
12606
    { 0x69,    "Relay key request"},
12607
    { 0x6a,    "Relay key accept"},
12608
    { 0x6b,    "Relay key reject"},
12609
    { 0x6c,    "Relay authentication request"},
12610
    { 0x6d,    "Relay authentication response"},
12611
    { 0,    NULL }
12612
};
12613
12614
static value_string_ext nas_5gs_mm_msg_strings_ext = VALUE_STRING_EXT_INIT(nas_5gs_mm_message_type_vals);
12615
12616
752
#define NUM_NAS_5GS_MM_MSG array_length(nas_5gs_mm_message_type_vals)
12617
static int ett_nas_5gs_mm_msg[NUM_NAS_5GS_MM_MSG];
12618
static void(* const nas_5gs_mm_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len) = {
12619
    nas_5gs_mm_registration_req,                /* 0x41    Registration request */
12620
    nas_5gs_mm_registration_accept,             /* 0x42    Registration accept */
12621
    nas_5gs_mm_registration_complete,           /* 0x43    Registration complete */
12622
    nas_5gs_mm_registration_rej,                /* 0x44    Registration reject */
12623
    nas_5gs_mm_de_reg_req_ue_orig,              /* 0x45    Deregistration request (UE originating) */
12624
    NULL,                                       /* 0x46    Deregistration accept (UE originating) No data*/
12625
    nas_5gs_mm_de_registration_req_ue_term,     /* 0x47    Deregistration request (UE terminated) */
12626
    NULL,                                       /* 0x48    Deregistration accept (UE terminated) No data */
12627
12628
    nas_5gs_exp_not_dissected_yet,              /* 0x49    Not used in current version */
12629
    nas_5gs_exp_not_dissected_yet,              /* 0x4a    Not used in current version */
12630
    nas_5gs_exp_not_dissected_yet,              /* 0x4b    Not used in current version */
12631
12632
    nas_5gs_mm_service_req,                     /* 0x4c    Service request */
12633
    nas_5gs_mm_service_rej,                     /* 0x4d    Service reject */
12634
    nas_5gs_mm_service_acc,                     /* 0x4e    Service accept */
12635
    nas_5gs_mm_control_plane_service_req,       /* 0x4f    Control plane service request */
12636
12637
    nas_5gs_mm_nw_slice_spec_auth_cmd,          /* 0x50    Network slice-specific authentication command */
12638
    nas_5gs_mm_nw_slice_spec_auth_comp,         /* 0x51    Network slice-specific authentication complete */
12639
    nas_5gs_mm_nw_slice_spec_auth_res,          /* 0x52    Network slice-specific authentication result */
12640
    nas_5gs_exp_not_dissected_yet,              /* 0x53    Not used in current version */
12641
    nas_5gs_mm_conf_upd_cmd,                    /* 0x54    Configuration update command */
12642
    nas_5gs_mm_conf_update_comp,                /* 0x55    Configuration update complete */
12643
    nas_5gs_mm_authentication_req,              /* 0x56    Authentication request */
12644
    nas_5gs_mm_authentication_resp,             /* 0x57    Authentication response */
12645
    nas_5gs_mm_authentication_rej,              /* 0x58    Authentication reject */
12646
    nas_5gs_mm_authentication_failure,          /* 0x59    Authentication failure */
12647
    nas_5gs_mm_authentication_result,           /* 0x5a    Authentication result */
12648
    nas_5gs_mm_id_req,                          /* 0x5b    Identity request */
12649
    nas_5gs_mm_id_resp,                         /* 0x5c    Identity response */
12650
    nas_5gs_mm_sec_mode_cmd,                    /* 0x5d    Security mode command */
12651
    nas_5gs_mm_sec_mode_comp,                   /* 0x5e    Security mode complete */
12652
    nas_5gs_mm_sec_mode_rej,                    /* 0x5f    Security mode reject */
12653
12654
    nas_5gs_exp_not_dissected_yet,              /* 0x60    Not used in current version */
12655
    nas_5gs_exp_not_dissected_yet,              /* 0x61    Not used in current version */
12656
    nas_5gs_exp_not_dissected_yet,              /* 0x62    Not used in current version */
12657
    nas_5gs_exp_not_dissected_yet,              /* 0x63    Not used in current version */
12658
12659
    nas_5gs_mm_5gmm_status,                     /* 0x64    5GMM status */
12660
    nas_5gs_mm_notification,                    /* 0x65    Notification */
12661
    nas_5gs_mm_notification_resp,               /* 0x66    Notification */
12662
    nas_5gs_mm_ul_nas_transp,                   /* 0x67    UL NAS transport */
12663
    nas_5gs_mm_dl_nas_transp,                   /* 0x68    DL NAS transport */
12664
12665
    nas_5gs_mm_relay_key_request,               /* 0x69    Relay key request */
12666
    nas_5gs_mm_relay_key_accept,                /* 0x6a    Relay key accept */
12667
    nas_5gs_mm_relay_key_reject,                /* 0x6b    Relay key reject */
12668
    nas_5gs_mm_relay_authentication_request,    /* 0x6c    Relay authentication request */
12669
    nas_5gs_mm_relay_authentication_response,   /* 0x6d    Relay authentication response */
12670
    NULL,   /* NONE */
12671
12672
};
12673
12674
/* 5GS session management messages */
12675
static const value_string nas_5gs_sm_message_type_vals[] = {
12676
12677
    { NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_REQUEST,         "PDU session establishment request"},
12678
    { NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_RESPONSE,        "PDU session establishment accept"},
12679
    { NAS_5GS_SM_MSG_PDU_SESSION_ESTABLISHMENT_REJECT,          "PDU session establishment reject"},
12680
12681
    { 0xc4,                                                     "Not used in current version"},
12682
12683
    { NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_COMMAND,        "PDU session authentication command"},
12684
    { NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_COMPLETE,       "PDU session authentication complete"},
12685
    { NAS_5GS_SM_MSG_PDU_SESSION_AUTHENTICATION_RESULT,         "PDU session authentication result"},
12686
12687
    { 0xc8,                                                     "Not used in current version"},
12688
12689
    { NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_REQUEST,          "PDU session modification request"},
12690
    { NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_REJECT,           "PDU session modification reject"},
12691
    { NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMMAND,          "PDU session modification command"},
12692
    { NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMPLETE,         "PDU session modification complete"},
12693
    { NAS_5GS_SM_MSG_PDU_SESSION_MODIFICATION_COMMAND_REJECT,   "PDU session modification command reject"},
12694
12695
    { 0xce,                                                     "Not used in current version"},
12696
    { 0xcf,                                                     "Not used in current version"},
12697
    { 0xd0,                                                     "Not used in current version"},
12698
12699
    { NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_REQUEST,               "PDU session release request"},
12700
    { NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_REJECT,                "PDU session release reject"},
12701
    { NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_COMMAND,               "PDU session release command"},
12702
    { NAS_5GS_SM_MSG_PDU_SESSION_RELEASE_COMPLETE,              "PDU session release complete"},
12703
12704
    { 0xd5,                                                     "Not used in current version"},
12705
12706
    { NAS_5GS_SM_MSG_5GSM_STATUS,                               "5GSM status"},
12707
12708
    { 0xd7,                                                     "Not used in current version"},
12709
12710
    { NAS_5GS_SM_MSG_SERVICE_LEVEL_AUTHENTICATION_COMMAND,      "Service-level authentication command"},
12711
    { NAS_5GS_SM_MSG_SERVICE_LEVEL_AUTHENTICATION_COMPLETE,     "Service-level authentication complete"},
12712
12713
    { NAS_5GS_SM_MSG_REMOTE_UE_REPORT,                          "Remote UE report"},
12714
    { NAS_5GS_SM_MSG_REMOTE_UE_REPORT_RESPONSE,                 "Remote UE report response"},
12715
    { 0,    NULL }
12716
};
12717
static value_string_ext nas_5gs_sm_msg_strings_ext = VALUE_STRING_EXT_INIT(nas_5gs_sm_message_type_vals);
12718
12719
464
#define NUM_NAS_5GS_SM_MSG array_length(nas_5gs_sm_message_type_vals)
12720
static int ett_nas_5gs_sm_msg[NUM_NAS_5GS_SM_MSG];
12721
12722
static void(* const nas_5gs_sm_msg_fcn[])(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len) = {
12723
    nas_5gs_sm_pdu_ses_est_req,            /* 0xc1     PDU session establishment request */
12724
    nas_5gs_sm_pdu_ses_est_acc,            /* 0xc2     PDU session establishment accept */
12725
    nas_5gs_sm_pdu_ses_est_rej,            /* 0xc3     PDU session establishment reject */
12726
12727
    nas_5gs_exp_not_dissected_yet,         /* 0xc4     Not used in current version */
12728
12729
    nas_5gs_sm_pdu_ses_auth_cmd,           /* 0xc5     PDU session authentication command */
12730
    nas_5gs_sm_pdu_ses_auth_comp,          /* 0xc6     PDU session authentication complete */
12731
    nas_5gs_sm_pdu_ses_auth_res,           /* 0xc7     PDU session authentication result */
12732
12733
    nas_5gs_exp_not_dissected_yet,         /* 0xc8     Not used in current version */
12734
12735
    nas_5gs_sm_pdu_ses_mod_req,            /* 0xc9     PDU session modification request */
12736
    nas_5gs_sm_pdu_ses_mod_rej,            /* 0xca     PDU session modification reject */
12737
    nas_5gs_sm_pdu_ses_mod_cmd,            /* 0xcb     PDU session modification command */
12738
    nas_5gs_sm_pdu_ses_mod_comp,           /* 0xcc     PDU session modification complete */
12739
    nas_5gs_sm_pdu_ses_mod_com_rej,        /* 0xcd     PDU session modification command reject */
12740
12741
    nas_5gs_exp_not_dissected_yet,         /* 0xce     Not used in current version */
12742
    nas_5gs_exp_not_dissected_yet,         /* 0xcf     Not used in current version */
12743
    nas_5gs_exp_not_dissected_yet,         /* 0xd0     Not used in current version */
12744
12745
    nas_5gs_sm_pdu_ses_rel_req,            /* 0xd1     PDU session release request */
12746
    nas_5gs_sm_pdu_ses_rel_rej,            /* 0xd2     PDU session release reject */
12747
    nas_5gs_sm_pdu_ses_rel_cmd,            /* 0xd3     PDU session release command */
12748
    nas_5gs_sm_pdu_ses_rel_comp,           /* 0xd4     PDU session release complete */
12749
12750
    nas_5gs_exp_not_dissected_yet,         /* 0xd5     Not used in current version */
12751
12752
    nas_5gs_sm_5gsm_status,                /* 0xd6     5GSM status */
12753
12754
    nas_5gs_exp_not_dissected_yet,         /* 0xd7     Not used in current version */
12755
12756
    nas_5gs_sm_serv_level_auth_cmd,        /* 0xd8     Service-level authentication command */
12757
    nas_5gs_sm_serv_level_auth_comp,       /* 0xd9     Service-level authentication complete */
12758
12759
    nas_5gs_sm_remote_ue_report,           /* 0xda     Remote UE report */
12760
    nas_5gs_sm_remote_ue_resp,             /* 0xdb     Remote UE report response */
12761
12762
    NULL,   /* NONE */
12763
12764
};
12765
12766
/* Table D.6.1.1: UE policy delivery service message type */
12767
static const value_string nas_5gs_updp_msg_strings[] = {
12768
    { 0x0,    "Reserved"},
12769
    { 0x1,    "MANAGE UE POLICY COMMAND"},
12770
    { 0x2,    "MANAGE UE POLICY COMPLETE"},
12771
    { 0x3,    "MANAGE UE POLICY COMMAND REJECT"},
12772
    { 0x4,    "UE STATE INDICATION"},
12773
    { 0x5,    "UE POLICY PROVISIONING REQUEST"},
12774
    { 0x6,    "UE POLICY PROVISIONING REJECT"},
12775
    { 0,    NULL }
12776
};
12777
static value_string_ext nas_5gs_updp_msg_strings_ext = VALUE_STRING_EXT_INIT(nas_5gs_updp_msg_strings);
12778
12779
144
#define NUM_NAS_5GS_UPDP_MSG array_length(nas_5gs_updp_msg_strings)
12780
static int ett_nas_5gs_updp_msg[NUM_NAS_5GS_UPDP_MSG];
12781
12782
static void(* const nas_5gs_updp_msg_fcn[])(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, uint32_t offset, unsigned len) = {
12783
    nas_5gs_exp_not_dissected_yet,         /* 0x0     Reserved */
12784
    nas_5gs_updp_manage_ue_policy_cmd,     /* 0x1     MANAGE UE POLICY COMMAND */
12785
    nas_5gs_updp_manage_ue_policy_cmd_cmpl,/* 0x2     MANAGE UE POLICY COMPLETE */
12786
    nas_5gs_updp_manage_ue_policy_cmd_rej, /* 0x3     MANAGE UE POLICY COMMAND REJECT */
12787
    nas_5gs_updp_ue_state_indication,      /* 0x4     UE STATE INDICATION */
12788
    nas_5gs_updp_ue_policy_prov_req,       /* 0x5     UE POLICY PROVISIONING REQUEST */
12789
    nas_5gs_updp_ue_policy_prov_rej,       /* 0x6     UE POLICY PROVISIONING REJECT */
12790
12791
    NULL,   /* NONE */
12792
12793
};
12794
12795
static void
12796
get_nas_5gsmm_msg_params(uint8_t oct, const char **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p)
12797
14
{
12798
14
    int             idx;
12799
12800
14
    *msg_str = try_val_to_str_idx_ext((uint32_t)(oct & 0xff), &nas_5gs_mm_msg_strings_ext, &idx);
12801
14
    *hf_idx = hf_nas_5gs_mm_msg_type;
12802
14
    if (*msg_str != NULL) {
12803
0
        *ett_tree = ett_nas_5gs_mm_msg[idx];
12804
0
        *msg_fcn_p = nas_5gs_mm_msg_fcn[idx];
12805
0
    }
12806
14
}
12807
12808
static void
12809
get_nas_5gssm_msg_params(uint8_t oct, const char **msg_str, int *ett_tree, int *hf_idx, msg_fcn *msg_fcn_p)
12810
9
{
12811
9
    int             idx;
12812
12813
9
    *msg_str = try_val_to_str_idx_ext((uint32_t)(oct & 0xff), &nas_5gs_sm_msg_strings_ext, &idx);
12814
9
    *hf_idx = hf_nas_5gs_sm_msg_type;
12815
9
    if (*msg_str != NULL) {
12816
6
        *ett_tree = ett_nas_5gs_sm_msg[idx];
12817
6
        *msg_fcn_p = nas_5gs_sm_msg_fcn[idx];
12818
6
    }
12819
9
}
12820
12821
static void
12822
get_nas_5gs_updp_msg_params(uint8_t oct, const char** msg_str, int* ett_tree, int* hf_idx, msg_fcn* msg_fcn_p)
12823
30
{
12824
30
    int             idx;
12825
12826
30
    *msg_str = try_val_to_str_idx_ext((uint32_t)(oct & 0xff), &nas_5gs_updp_msg_strings_ext, &idx);
12827
30
    *hf_idx = hf_nas_5gs_updp_msg_type;
12828
30
    if (*msg_str != NULL) {
12829
23
        *ett_tree = ett_nas_5gs_updp_msg[idx];
12830
23
        *msg_fcn_p = nas_5gs_updp_msg_fcn[idx];
12831
23
    }
12832
30
}
12833
12834
static void
12835
dissect_nas_5gs_sm_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
12836
9
{
12837
9
    const char *msg_str;
12838
9
    uint32_t     len;
12839
9
    int          ett_tree;
12840
9
    int          hf_idx;
12841
9
    void(*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len);
12842
9
    uint8_t      oct;
12843
12844
9
    len = tvb_reported_length(tvb);
12845
12846
    /* Message type IE*/
12847
9
    oct = tvb_get_uint8(tvb, offset);
12848
9
    msg_fcn_p = NULL;
12849
9
    ett_tree = -1;
12850
9
    hf_idx = -1;
12851
9
    msg_str = NULL;
12852
12853
9
    get_nas_5gssm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
12854
12855
9
    if (msg_str) {
12856
6
        col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, msg_str);
12857
6
    }
12858
3
    else {
12859
3
        proto_tree_add_expert_format(tree, pinfo, &ei_nas_5gs_sm_unknown_msg_type, tvb, offset, 1, "Unknown Message Type 0x%02x", oct);
12860
3
        return;
12861
3
    }
12862
12863
    /*
12864
    * Add NAS message name
12865
    */
12866
6
    proto_tree_add_item(tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN);
12867
6
    offset++;
12868
12869
    /*
12870
    * decode elements
12871
    */
12872
6
    if (msg_fcn_p == NULL)
12873
0
    {
12874
0
        if (tvb_reported_length_remaining(tvb, offset)) {
12875
0
            proto_tree_add_item(tree, hf_nas_5gs_msg_elems, tvb, offset, len - offset, ENC_NA);
12876
0
        }
12877
0
    }
12878
6
    else
12879
6
    {
12880
6
        (*msg_fcn_p)(tvb, tree, pinfo, offset, len - offset);
12881
6
    }
12882
12883
6
}
12884
12885
static void
12886
dissect_nas_5gs_mm_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
12887
14
{
12888
12889
14
    const char *msg_str;
12890
14
    uint32_t     len;
12891
14
    int          ett_tree;
12892
14
    int          hf_idx;
12893
14
    void(*msg_fcn_p)(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, uint32_t offset, unsigned len);
12894
14
    uint8_t      oct;
12895
12896
14
    len = tvb_reported_length(tvb);
12897
12898
    /* Message type IE*/
12899
14
    oct = tvb_get_uint8(tvb, offset);
12900
14
    msg_fcn_p = NULL;
12901
14
    ett_tree = -1;
12902
14
    hf_idx = -1;
12903
14
    msg_str = NULL;
12904
12905
14
    get_nas_5gsmm_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
12906
12907
14
    if (msg_str) {
12908
0
        col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, msg_str);
12909
0
    }
12910
14
    else {
12911
14
        proto_tree_add_expert_format(tree, pinfo, &ei_nas_5gs_mm_unknown_msg_type, tvb, offset, 1, "Unknown Message Type 0x%02x", oct);
12912
14
        return;
12913
14
    }
12914
12915
    /*
12916
    * Add NAS message name
12917
    */
12918
0
    proto_tree_add_item(tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN);
12919
0
    offset++;
12920
12921
    /*
12922
    * decode elements
12923
    */
12924
0
    if (msg_fcn_p == NULL)
12925
0
    {
12926
0
        if (tvb_reported_length_remaining(tvb, offset)) {
12927
0
            proto_tree_add_item(tree, hf_nas_5gs_msg_elems, tvb, offset, len - offset, ENC_NA);
12928
0
        }
12929
0
    }
12930
0
    else
12931
0
    {
12932
0
        (*msg_fcn_p)(tvb, tree, pinfo, offset, len - offset);
12933
0
    }
12934
12935
0
}
12936
12937
/* 6.1.6.4.4 n1SmInfoFromUe, n1SmInfoToUe, unknownN1SmInfo */
12938
static void
12939
dissect_nas_5gs_sm_info(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset, const char *n1_msg_class)
12940
0
{
12941
0
    uint32_t     len;
12942
0
    uint32_t     message_type;
12943
0
    void(*msg_fcn_p)(tvbuff_t * tvb, proto_tree * tree, packet_info * pinfo, uint32_t offset, unsigned len, uint32_t message_type);
12944
12945
    /* make entry in the Protocol column on summary display */
12946
0
    col_append_sep_str(pinfo->cinfo, COL_PROTOCOL, "/", "NAS-5GS");
12947
12948
0
    len = tvb_reported_length(tvb);
12949
0
    msg_fcn_p = NULL;
12950
12951
0
    if (!strcmp(n1_msg_class, N1_SMINFO_FROM_UE)) {
12952
0
        msg_fcn_p = nas_5gs_n1_sm_info_from_ue;
12953
0
    } else if (!strcmp(n1_msg_class, N1_SMINFO_TO_UE)) {
12954
0
        msg_fcn_p = nas_5gs_n1_sm_info_to_ue;
12955
0
    } else if (!strcmp(n1_msg_class, UNKNOWN_N1_SMINFO)) {
12956
0
        msg_fcn_p = nas_5gs_unknown_n1_sm_info;
12957
0
    } else {
12958
0
        proto_tree_add_expert_format_remaining(tree, pinfo, &ei_nas_5gs_sm_unknown_msg_type, tvb, offset, "Unknown Message Type");
12959
0
        return;
12960
0
    }
12961
12962
0
    col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, n1_msg_class);
12963
12964
    /*
12965
    * Add PDCP message name
12966
    */
12967
0
    proto_tree_add_item_ret_uint(tree, hf_nas_5gs_sm_msg_type, tvb, offset, 1, ENC_BIG_ENDIAN, &message_type);
12968
0
    offset++;
12969
12970
    /*
12971
    * decode elements
12972
    */
12973
0
    (*msg_fcn_p)(tvb, tree, pinfo, offset, len - offset, message_type);
12974
12975
0
}
12976
12977
/* UPDP */
12978
/* D.6.1 UE policy delivery service message type */
12979
12980
void
12981
dissect_nas_5gs_updp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
12982
30
{
12983
12984
30
    const char* msg_str;
12985
30
    uint32_t     len;
12986
30
    int          ett_tree;
12987
30
    int          hf_idx;
12988
30
    void(*msg_fcn_p)(tvbuff_t * tvb, proto_tree * tree, packet_info * pinfo, uint32_t offset, unsigned len);
12989
30
    uint8_t      oct;
12990
30
    int          offset = 0;
12991
12992
30
    len = tvb_reported_length(tvb);
12993
12994
    /* 9.6  Procedure transaction identity
12995
    * Bits 1 to 8 of the third octet of every 5GSM message contain the procedure transaction identity.
12996
    * The procedure transaction identity and its use are defined in 3GPP TS 24.007
12997
    * XXX Only 5GSM ?
12998
    */
12999
30
    proto_tree_add_item(tree, hf_nas_5gs_proc_trans_id, tvb, offset, 1, ENC_BIG_ENDIAN);
13000
30
    offset++;
13001
13002
    /* Message type IE*/
13003
30
    oct = tvb_get_uint8(tvb, offset);
13004
30
    msg_fcn_p = NULL;
13005
30
    ett_tree = -1;
13006
30
    hf_idx = -1;
13007
30
    msg_str = NULL;
13008
13009
30
    get_nas_5gs_updp_msg_params(oct, &msg_str, &ett_tree, &hf_idx, &msg_fcn_p);
13010
13011
30
    if (msg_str) {
13012
23
        col_append_sep_str(pinfo->cinfo, COL_INFO, NULL, msg_str);
13013
23
    }
13014
7
    else {
13015
7
        proto_tree_add_expert_format(tree, pinfo, &ei_nas_5gs_updp_unknown_msg_type, tvb, offset, 1, "Unknown Message Type 0x%02x", oct);
13016
7
        return;
13017
7
    }
13018
13019
    /*
13020
    * Add PDCP message name
13021
    */
13022
23
    proto_tree_add_item(tree, hf_idx, tvb, offset, 1, ENC_BIG_ENDIAN);
13023
23
    offset++;
13024
13025
    /*
13026
    * decode elements
13027
    */
13028
23
    if (msg_fcn_p == NULL)
13029
0
    {
13030
0
        if (tvb_reported_length_remaining(tvb, offset)) {
13031
0
            proto_tree_add_item(tree, hf_nas_5gs_msg_elems, tvb, offset, len - offset, ENC_NA);
13032
0
        }
13033
0
    }
13034
23
    else
13035
23
    {
13036
23
        (*msg_fcn_p)(tvb, tree, pinfo, offset, len - offset);
13037
23
    }
13038
13039
23
}
13040
13041
13042
const value_string nas_5gs_pdu_session_id_vals[] = {
13043
    { 0x00, "No PDU session identity assigned" },
13044
    { 0x01, "PDU session identity value 1" },
13045
    { 0x02, "PDU session identity value 2" },
13046
    { 0x03, "PDU session identity value 3" },
13047
    { 0x04, "PDU session identity value 4" },
13048
    { 0x05, "PDU session identity value 5" },
13049
    { 0x06, "PDU session identity value 6" },
13050
    { 0x07, "PDU session identity value 7" },
13051
    { 0x08, "PDU session identity value 8" },
13052
    { 0x09, "PDU session identity value 9" },
13053
    { 0x0a, "PDU session identity value 10" },
13054
    { 0x0b, "PDU session identity value 11" },
13055
    { 0x0c, "PDU session identity value 12" },
13056
    { 0x0d, "PDU session identity value 13" },
13057
    { 0x0e, "PDU session identity value 14" },
13058
    { 0x0f, "PDU session identity value 15" },
13059
    { 0, NULL }
13060
};
13061
13062
static int
13063
dissect_nas_5gs_common(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, void* data)
13064
129
{
13065
129
    proto_tree *sub_tree;
13066
129
    uint32_t epd;
13067
13068
    /* Plain NAS 5GS Message */
13069
129
    sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_nas_5gs_plain, NULL, "Plain NAS 5GS Message");
13070
    /* Extended protocol discriminator  octet 1 */
13071
129
    proto_tree_add_item_ret_uint(sub_tree, hf_nas_5gs_epd, tvb, offset, 1, ENC_BIG_ENDIAN, &epd);
13072
129
    offset++;
13073
    /* Security header type associated with a spare half octet; or
13074
     * PDU session identity octet 2
13075
     */
13076
129
    switch (epd) {
13077
15
    case TGPP_PD_5GMM:
13078
        /* 9.5  Spare half octet
13079
        * Bits 5 to 8 of the second octet of every 5GMM message contains the spare half octet
13080
        * which is filled with spare bits set to zero.
13081
        */
13082
15
        proto_tree_add_item(sub_tree, hf_nas_5gs_spare_half_octet, tvb, offset, 1, ENC_BIG_ENDIAN);
13083
15
        proto_tree_add_item(sub_tree, hf_nas_5gs_security_header_type, tvb, offset, 1, ENC_BIG_ENDIAN);
13084
15
        break;
13085
9
    case TGPP_PD_5GSM:
13086
        /* 9.4  PDU session identity
13087
        * Bits 1 to 8 of the second octet of every 5GSM message contain the PDU session identity IE.
13088
        * The PDU session identity and its use to identify a message flow are defined in 3GPP TS 24.007
13089
        */
13090
9
        proto_tree_add_item(sub_tree, hf_nas_5gs_pdu_session_id, tvb, offset, 1, ENC_BIG_ENDIAN);
13091
9
        offset++;
13092
        /* 9.6  Procedure transaction identity
13093
        * Bits 1 to 8 of the third octet of every 5GSM message contain the procedure transaction identity.
13094
        * The procedure transaction identity and its use are defined in 3GPP TS 24.007
13095
        * XXX Only 5GSM ?
13096
        */
13097
9
        proto_tree_add_item(sub_tree, hf_nas_5gs_proc_trans_id, tvb, offset, 1, ENC_BIG_ENDIAN);
13098
9
        break;
13099
103
    default:
13100
103
        if ((epd & 0xf) == 15 && gsm_a_dtap_handle) {
13101
            /* dissect Test Procedure messages */
13102
24
            return call_dissector_with_data(gsm_a_dtap_handle, tvb_new_subset_remaining(tvb, offset - 1), pinfo, sub_tree, data);
13103
24
        }
13104
79
        proto_tree_add_expert_format_remaining(sub_tree, pinfo, &ei_nas_5gs_unknown_pd, tvb, offset, "Not a NAS 5GS PD %u (%s)",
13105
79
            epd, val_to_str_const(epd, nas_5gs_epd_vals, "Unknown"));
13106
79
        return 0;
13107
13108
129
    }
13109
23
    offset++;
13110
13111
23
    switch (epd) {
13112
14
    case TGPP_PD_5GMM:
13113
        /* 5GS mobility management messages */
13114
14
        dissect_nas_5gs_mm_msg(tvb, pinfo, sub_tree, offset);
13115
14
        break;
13116
9
    case TGPP_PD_5GSM:
13117
        /* 5GS session management messages. */
13118
9
        dissect_nas_5gs_sm_msg(tvb, pinfo, sub_tree, offset);
13119
9
        break;
13120
0
    default:
13121
0
        DISSECTOR_ASSERT_NOT_REACHED();
13122
0
        break;
13123
23
    }
13124
13125
23
    return tvb_reported_length(tvb);
13126
23
}
13127
13128
static int
13129
dissect_nas_5gs(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13130
308
{
13131
308
    proto_item *item;
13132
308
    proto_tree *nas_5gs_tree, *sub_tree;
13133
308
    unsigned offset = 0;
13134
308
    uint8_t sec_hdr_type, ext_pd;
13135
308
    struct nas5gs_private_data *nas5gs_data = nas5gs_get_private_data(pinfo);
13136
13137
    /* make entry in the Protocol column on summary display */
13138
308
    col_append_sep_str(pinfo->cinfo, COL_PROTOCOL, "/", "NAS-5GS");
13139
13140
308
    item = proto_tree_add_item(tree, proto_nas_5gs, tvb, 0, -1, ENC_NA);
13141
308
    nas_5gs_tree = proto_item_add_subtree(item, ett_nas_5gs);
13142
13143
    /* Extended protocol discriminator                              octet 1 */
13144
308
    ext_pd = tvb_get_uint8(tvb, offset);
13145
308
    if (ext_pd == TGPP_PD_5GSM) {
13146
9
        return dissect_nas_5gs_common(tvb, pinfo, nas_5gs_tree, offset, data);
13147
9
    }
13148
    /* Security header type associated with a spare half octet; or
13149
    * PDU session identity                                         octet 2 */
13150
    /* Determine if it's a plain 5GS NAS Message or not */
13151
299
    sec_hdr_type = tvb_get_uint8(tvb, offset + 1);
13152
299
    nas5gs_data->sec_hdr_type = sec_hdr_type;
13153
299
    if (sec_hdr_type == NAS_5GS_PLAIN_NAS_MSG) {
13154
22
        return dissect_nas_5gs_common(tvb, pinfo, nas_5gs_tree, offset, data);
13155
22
    }
13156
    /* Security protected NAS 5GS message*/
13157
277
    sub_tree = proto_tree_add_subtree(nas_5gs_tree, tvb, offset, 7, ett_nas_5gs_sec, NULL, "Security protected NAS 5GS message");
13158
13159
    /* Extended protocol discriminator  octet 1 */
13160
277
    proto_tree_add_item(sub_tree, hf_nas_5gs_epd, tvb, offset, 1, ENC_BIG_ENDIAN);
13161
277
    offset++;
13162
    /* Security header type associated with a spare half octet    octet 2 */
13163
277
    proto_tree_add_item(sub_tree, hf_nas_5gs_spare_half_octet, tvb, offset, 1, ENC_BIG_ENDIAN);
13164
277
    proto_tree_add_item(sub_tree, hf_nas_5gs_security_header_type, tvb, offset, 1, ENC_BIG_ENDIAN);
13165
277
    offset++;
13166
    /* Message authentication code octet 3 - 6 */
13167
277
    proto_tree_add_item(sub_tree, hf_nas_5gs_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN);
13168
277
    offset += 4;
13169
    /* Sequence number    octet 7 */
13170
277
    proto_tree_add_item(sub_tree, hf_nas_5gs_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN);
13171
277
    offset++;
13172
13173
277
    if ((sec_hdr_type != NAS_5GS_INTEG_CIPH_NAS_MSG && sec_hdr_type != NAS_5GS_INTEG_CIPH_NEW_NAS_MSG) ||
13174
98
        g_nas_5gs_null_decipher) {
13175
98
        return dissect_nas_5gs_common(tvb, pinfo, nas_5gs_tree, offset, data);
13176
179
    } else {
13177
179
        proto_tree_add_item(sub_tree, hf_nas_5gs_ciphered_msg, tvb, offset, -1, ENC_NA);
13178
179
    }
13179
13180
179
    return tvb_reported_length(tvb);
13181
277
}
13182
13183
/* 9.11.2.6 Intra N1 mode NAS transparent container */
13184
static true_false_string nas_5gs_kacf_tfs = {
13185
    "A new K_AMF has been calculated by the network",
13186
    "A new K_AMF has not been calculated by the network"
13187
};
13188
13189
void
13190
de_nas_5gs_intra_n1_mode_nas_transparent_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_)
13191
5
{
13192
5
    unsigned offset = 0;
13193
13194
5
    static int * const flags[] = {
13195
5
        &hf_nas_5gs_spare_b7,
13196
5
        &hf_nas_5gs_spare_b6,
13197
5
        &hf_nas_5gs_spare_b5,
13198
5
        &hf_nas_5gs_kacf,
13199
5
        &hf_nas_5gs_mm_tsc,
13200
5
        &hf_nas_5gs_mm_nas_key_set_id,
13201
5
        NULL
13202
5
    };
13203
13204
5
    proto_tree_add_item(tree, hf_nas_5gs_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN);
13205
5
    offset += 4;
13206
5
    proto_tree_add_item(tree, hf_nas_5gs_mm_nas_sec_algo_enc, tvb, offset, 1, ENC_BIG_ENDIAN);
13207
5
    proto_tree_add_item(tree, hf_nas_5gs_mm_nas_sec_algo_ip, tvb, offset, 1, ENC_BIG_ENDIAN);
13208
5
    offset++;
13209
5
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, flags, ENC_NA);
13210
5
    offset++;
13211
5
    proto_tree_add_item(tree, hf_nas_5gs_seq_no, tvb, offset, 1, ENC_BIG_ENDIAN);
13212
5
}
13213
13214
/* 9.11.2.7 N1 mode to S1 mode NAS transparent container */
13215
void
13216
de_nas_5gs_n1_mode_to_s1_mode_nas_transparent_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_)
13217
22
{
13218
22
    proto_tree_add_item(tree, hf_nas_5gs_seq_no, tvb, 0, 1, ENC_BIG_ENDIAN);
13219
22
}
13220
13221
/* 9.11.2.9 S1 mode to N1 mode NAS transparent container */
13222
void
13223
de_nas_5gs_s1_mode_to_n1_mode_nas_transparent_cont(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_)
13224
6
{
13225
6
    unsigned offset = 0;
13226
13227
6
    static int * const oct8_flags[] = {
13228
6
        &hf_nas_5gs_spare_b7,
13229
6
        &hf_nas_5gs_ncc,
13230
6
        &hf_nas_5gs_mm_tsc,
13231
6
        &hf_nas_5gs_mm_nas_key_set_id,
13232
6
        NULL
13233
6
    };
13234
13235
6
    proto_tree_add_item(tree, hf_nas_5gs_msg_auth_code, tvb, offset, 4, ENC_BIG_ENDIAN);
13236
6
    offset += 4;
13237
6
    proto_tree_add_item(tree, hf_nas_5gs_mm_nas_sec_algo_enc, tvb, offset, 1, ENC_BIG_ENDIAN);
13238
6
    proto_tree_add_item(tree, hf_nas_5gs_mm_nas_sec_algo_ip, tvb, offset, 1, ENC_BIG_ENDIAN);
13239
6
    offset++;
13240
6
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, oct8_flags, ENC_NA);
13241
6
    offset++;
13242
6
    proto_tree_add_item(tree, hf_nas_5gs_spare_octet, tvb, offset, 1, ENC_BIG_ENDIAN);
13243
6
    offset++;
13244
6
    proto_tree_add_item(tree, hf_nas_5gs_spare_octet, tvb, offset, 1, ENC_BIG_ENDIAN);
13245
6
}
13246
13247
/* 3GPP TS 29.502 chapter 6.1.6.4.2 and 29.518 chapter 6.1.6.4.2 */
13248
static int
13249
dissect_nas_5gs_media_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13250
0
{
13251
0
    int ret;
13252
0
    char *json_data;
13253
0
    const char *n1_msg_class, *str;
13254
0
    jsmntok_t *tokens, *cur_tok;
13255
0
    dissector_handle_t subdissector;
13256
0
    tvbuff_t* json_tvb = (tvbuff_t*)p_get_proto_data(pinfo->pool, pinfo, proto_json, 0);
13257
0
    media_content_info_t *content_info = (media_content_info_t *)data;
13258
13259
0
    if (!json_tvb || !content_info || !content_info->content_id)
13260
0
        return 0;
13261
13262
0
    json_data = (char*)tvb_get_string_enc(pinfo->pool, json_tvb, 0, tvb_reported_length(json_tvb), ENC_UTF_8|ENC_NA);
13263
0
    ret = json_parse(json_data, NULL, 0);
13264
0
    if (ret <= 0)
13265
0
        return 0;
13266
0
    tokens = wmem_alloc_array(pinfo->pool, jsmntok_t, ret);
13267
0
    if (json_parse(json_data, tokens, ret) <= 0)
13268
0
        return 0;
13269
0
    cur_tok = json_get_object(json_data, tokens, "n1MessageContainer");
13270
0
    if (cur_tok) {
13271
0
        n1_msg_class = json_get_string(json_data, cur_tok, "n1MessageClass");
13272
0
        if (!n1_msg_class)
13273
0
            return 0;
13274
0
        cur_tok = json_get_object(json_data, cur_tok, "n1MessageContent");
13275
0
        if (!cur_tok)
13276
0
            return 0;
13277
0
        str = json_get_string(json_data, cur_tok, "contentId");
13278
0
    } else {
13279
0
        cur_tok = json_get_object(json_data, tokens, "n1SmMsg");
13280
0
        if (cur_tok) {
13281
0
            n1_msg_class = "SM";
13282
0
            str = json_get_string(json_data, cur_tok, "contentId");
13283
0
        } else {
13284
            /* TS 29.502 ch6.1.6.4.4 n1SmInfoFromUe, n1SmInfoToUe, unknownN1SmInfo */
13285
0
            cur_tok = json_get_object(json_data, tokens, N1_SMINFO_FROM_UE);
13286
0
            n1_msg_class = N1_SMINFO_FROM_UE;
13287
13288
0
            if (!cur_tok) {
13289
0
                cur_tok = json_get_object(json_data, tokens, N1_SMINFO_TO_UE);
13290
0
                n1_msg_class = N1_SMINFO_TO_UE;
13291
0
            }
13292
0
            if (!cur_tok) {
13293
0
                cur_tok = json_get_object(json_data, tokens, UNKNOWN_N1_SMINFO);
13294
0
                n1_msg_class = UNKNOWN_N1_SMINFO;
13295
0
            }
13296
0
            if (cur_tok) {
13297
0
                str = json_get_string(json_data, cur_tok, "contentId");
13298
0
            } else {
13299
0
                return 0;
13300
0
            }
13301
0
        }
13302
0
    }
13303
0
    if (!str || strcmp(str, content_info->content_id))
13304
0
        return 0;
13305
0
    if (!strcmp(n1_msg_class, "5GMM") ||
13306
0
        !strcmp(n1_msg_class, "SM")) {
13307
0
        subdissector = nas_5gs_handle;
13308
0
    } else if (!strcmp(n1_msg_class, N1_SMINFO_FROM_UE) ||
13309
0
               !strcmp(n1_msg_class, N1_SMINFO_TO_UE) ||
13310
0
               !strcmp(n1_msg_class, UNKNOWN_N1_SMINFO)) {
13311
0
        dissect_nas_5gs_sm_info(tvb, pinfo, tree, 0, n1_msg_class);
13312
0
        return tvb_captured_length(tvb);
13313
0
    } else if (!strcmp(n1_msg_class, "LPP")) {
13314
0
        subdissector = lpp_handle;
13315
0
    } else if (!strcmp(n1_msg_class, "SMS")) {
13316
0
        subdissector = gsm_a_dtap_handle;
13317
0
    } else if (!strcmp(n1_msg_class, "UPDP")) {
13318
        /* UE policy delivery service */
13319
0
        dissect_nas_5gs_updp(tvb, pinfo, tree);
13320
0
        return tvb_captured_length(tvb);
13321
0
    } else {
13322
0
        subdissector = NULL;
13323
0
    }
13324
13325
0
    if (subdissector) {
13326
0
        call_dissector_with_data(subdissector, tvb, pinfo, tree, NULL);
13327
0
        return tvb_captured_length(tvb);
13328
0
  } else {
13329
0
        return 0;
13330
0
  }
13331
0
}
13332
13333
static unsigned
13334
get_nas_5gs_tcp_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
13335
0
{
13336
0
  return tvb_get_ntohs(tvb, offset) + 2;
13337
0
}
13338
13339
static int
13340
dissect_nas_5gs_tcp_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13341
0
{
13342
0
    col_clear(pinfo->cinfo, COL_INFO);
13343
0
    return dissect_nas_5gs(tvb_new_subset_remaining(tvb, 2), pinfo, tree, data);
13344
0
}
13345
13346
static int
13347
dissect_nas_5gs_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
13348
0
{
13349
0
    tcp_dissect_pdus(tvb, pinfo, tree, true, 2, get_nas_5gs_tcp_len,
13350
0
                     dissect_nas_5gs_tcp_pdu, data);
13351
0
    return tvb_reported_length(tvb);
13352
0
}
13353
13354
/* Heuristic dissector looks for "nas-5gs" string at packet start */
13355
static bool dissect_nas_5gs_heur(tvbuff_t *tvb, packet_info *pinfo,
13356
                                     proto_tree *tree, void *data _U_)
13357
0
{
13358
0
    unsigned offset = 0;
13359
0
    tvbuff_t *nas_tvb;
13360
13361
    /* Needs to be at least as long as:
13362
       - the signature string
13363
       - at least one byte of NAS PDU payload */
13364
0
    if (tvb_captured_length_remaining(tvb, offset) < (int)(strlen(PFNAME)+1)) {
13365
0
        return false;
13366
0
    }
13367
13368
    /* OK, compare with signature string */
13369
0
    if (tvb_strneql(tvb, offset, PFNAME, strlen(PFNAME)) != 0) {
13370
0
        return false;
13371
0
    }
13372
0
    offset += (int)strlen(PFNAME);
13373
13374
    /* Clear protocol name */
13375
0
    col_clear(pinfo->cinfo, COL_PROTOCOL);
13376
13377
    /* Clear info column */
13378
0
    col_clear(pinfo->cinfo, COL_INFO);
13379
13380
    /* Create tvb that starts at actual NAS PDU */
13381
0
    nas_tvb = tvb_new_subset_remaining(tvb, offset);
13382
0
    dissect_nas_5gs(nas_tvb, pinfo, tree, NULL);
13383
13384
0
    return true;
13385
0
}
13386
13387
void
13388
proto_register_nas_5gs(void)
13389
16
{
13390
13391
    /* List of fields */
13392
13393
16
    static hf_register_info hf[] = {
13394
16
        { &hf_nas_5gs_epd,
13395
16
        { "Extended protocol discriminator",   "nas-5gs.epd",
13396
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_epd_vals), 0x0,
13397
16
            NULL, HFILL }
13398
16
        },
13399
16
        { &hf_nas_5gs_spare_bits,
13400
16
        { "Spare",   "nas-5gs.spare_bits",
13401
16
            FT_UINT8, BASE_HEX, NULL, 0,
13402
16
            NULL, HFILL }
13403
16
        },
13404
16
        { &hf_nas_5gs_spare_b7,
13405
16
        { "Spare",   "nas-5gs.spare_b7",
13406
16
            FT_UINT8, BASE_DEC, NULL, 0x80,
13407
16
            NULL, HFILL }
13408
16
        },
13409
16
        { &hf_nas_5gs_spare_b6,
13410
16
        { "Spare",   "nas-5gs.spare_b6",
13411
16
            FT_UINT8, BASE_DEC, NULL, 0x40,
13412
16
            NULL, HFILL }
13413
16
        },
13414
16
        { &hf_nas_5gs_spare_b5,
13415
16
        { "Spare",   "nas-5gs.spare_b5",
13416
16
            FT_UINT8, BASE_DEC, NULL, 0x20,
13417
16
            NULL, HFILL }
13418
16
        },
13419
16
        { &hf_nas_5gs_spare_b4,
13420
16
        { "Spare",   "nas-5gs.spare_b4",
13421
16
            FT_UINT8, BASE_DEC, NULL, 0x10,
13422
16
            NULL, HFILL }
13423
16
        },
13424
16
        { &hf_nas_5gs_spare_b3,
13425
16
        { "Spare",   "nas-5gs.spare_b3",
13426
16
            FT_UINT8, BASE_DEC, NULL, 0x08,
13427
16
            NULL, HFILL }
13428
16
        },
13429
16
        { &hf_nas_5gs_spare_b2,
13430
16
        { "Spare",   "nas-5gs.spare_b2",
13431
16
            FT_UINT8, BASE_DEC, NULL, 0x04,
13432
16
            NULL, HFILL }
13433
16
        },
13434
16
        { &hf_nas_5gs_spare_b1,
13435
16
        { "Spare",   "nas-5gs.spare_b1",
13436
16
            FT_UINT8, BASE_DEC, NULL, 0x02,
13437
16
            NULL, HFILL }
13438
16
        },
13439
16
        { &hf_nas_5gs_spare_b0,
13440
16
        { "Spare",   "nas-5gs.spare_b0",
13441
16
            FT_UINT8, BASE_DEC, NULL, 0x01,
13442
16
            NULL, HFILL }
13443
16
        },
13444
16
        { &hf_nas_5gs_rfu_b2,
13445
16
        { "Reserved for Future Use(RFU)",   "nas-5gs.rfu.b2",
13446
16
            FT_UINT8, BASE_DEC, NULL, 0x04,
13447
16
            NULL, HFILL }
13448
16
        },
13449
16
        { &hf_nas_5gs_rfu_b1,
13450
16
        { "Reserved for Future Use(RFU)",   "nas-5gs.rfu.b1",
13451
16
            FT_UINT8, BASE_DEC, NULL, 0x02,
13452
16
            NULL, HFILL }
13453
16
        },
13454
16
        { &hf_nas_5gs_rfu_b0,
13455
16
        { "Reserved for Future Use(RFU)",   "nas-5gs.rfu.b0",
13456
16
            FT_UINT8, BASE_DEC, NULL, 0x01,
13457
16
            NULL, HFILL }
13458
16
        },
13459
13460
16
        { &hf_nas_5gs_security_header_type,
13461
16
        { "Security header type",   "nas-5gs.security_header_type",
13462
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_security_header_type_vals), 0x0f,
13463
16
            NULL, HFILL }
13464
16
        },
13465
16
        { &hf_nas_5gs_msg_auth_code,
13466
16
        { "Message authentication code",   "nas-5gs.msg_auth_code",
13467
16
            FT_UINT32, BASE_HEX, NULL, 0x0,
13468
16
            NULL, HFILL }
13469
16
        },
13470
16
        { &hf_nas_5gs_seq_no,
13471
16
        { "Sequence number",   "nas-5gs.seq_no",
13472
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
13473
16
            NULL, HFILL }
13474
16
        },
13475
16
        { &hf_nas_5gs_ciphered_msg,
13476
16
        { "Ciphered message",   "nas-5gs.ciphered_msg",
13477
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13478
16
            NULL, HFILL }
13479
16
        },
13480
16
        { &hf_nas_5gs_mm_msg_type,
13481
16
        { "Message type",   "nas-5gs.mm.message_type",
13482
16
        FT_UINT8, BASE_HEX | BASE_EXT_STRING, &nas_5gs_mm_msg_strings_ext, 0x0,
13483
16
            NULL, HFILL }
13484
16
        },
13485
16
        { &hf_nas_5gs_sm_msg_type,
13486
16
        { "Message type",   "nas-5gs.sm.message_type",
13487
16
        FT_UINT8, BASE_HEX | BASE_EXT_STRING, &nas_5gs_sm_msg_strings_ext, 0x0,
13488
16
            NULL, HFILL }
13489
16
        },
13490
16
        { &hf_nas_5gs_updp_msg_type,
13491
16
        { "Message type",   "nas-5gs.updp.message_type",
13492
16
        FT_UINT8, BASE_HEX | BASE_EXT_STRING, &nas_5gs_updp_msg_strings_ext, 0x0,
13493
16
            NULL, HFILL }
13494
16
        },
13495
16
        { &hf_nas_5gs_common_elem_id,
13496
16
            { "Element ID", "nas-5gs.common.elem_id",
13497
16
            FT_UINT8, BASE_HEX, NULL, 0,
13498
16
            NULL, HFILL }
13499
16
        },
13500
16
        { &hf_nas_5gs_mm_elem_id,
13501
16
            { "Element ID", "nas-5gs.mm.elem_id",
13502
16
            FT_UINT8, BASE_HEX, NULL, 0,
13503
16
            NULL, HFILL }
13504
16
        },
13505
16
        { &hf_nas_5gs_sm_elem_id,
13506
16
            { "Element ID", "nas-5gs.sm.elem_id",
13507
16
            FT_UINT8, BASE_HEX, NULL, 0,
13508
16
            NULL, HFILL }
13509
16
        },
13510
16
        { &hf_nas_5gs_updp_elem_id,
13511
16
            { "Element ID", "nas-5gs.updp.elem_id",
13512
16
            FT_UINT8, BASE_HEX, NULL, 0,
13513
16
            NULL, HFILL }
13514
16
        },
13515
16
        { &hf_nas_5gs_proc_trans_id,
13516
16
        { "Procedure transaction identity",   "nas-5gs.proc_trans_id",
13517
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
13518
16
            NULL, HFILL }
13519
16
        },
13520
16
        { &hf_nas_5gs_spare_half_octet,
13521
16
        { "Spare Half Octet",   "nas-5gs.spare_half_octet",
13522
16
            FT_UINT8, BASE_DEC, NULL, 0xf0,
13523
16
            NULL, HFILL }
13524
16
        },
13525
16
        { &hf_nas_5gs_spare_octet,
13526
16
        { "Spare", "nas-5gs.spare_octet",
13527
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
13528
16
            NULL, HFILL }
13529
16
        },
13530
16
        { &hf_nas_5gs_pdu_session_id,
13531
16
        { "PDU session identity",   "nas-5gs.pdu_session_id",
13532
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_pdu_session_id_vals), 0x0,
13533
16
            NULL, HFILL }
13534
16
        },
13535
16
        { &hf_nas_5gs_msg_elems,
13536
16
        { "Message Elements", "nas-5gs.message_elements",
13537
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13538
16
            NULL, HFILL }
13539
16
        },
13540
16
        { &hf_nas_5gs_cmn_add_info,
13541
16
        { "Additional information", "nas-5gs.cmn.add_info",
13542
16
            FT_BYTES, BASE_NONE, NULL,0x0,
13543
16
            NULL, HFILL }
13544
16
        },
13545
16
        { &hf_nas_5gs_cmn_acc_type,
13546
16
        { "Access type", "nas-5gs.cmn.acc_type",
13547
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_cmn_acc_type_vals), 0x03,
13548
16
            NULL, HFILL }
13549
16
        },
13550
16
        { &hf_nas_5gs_cmn_dnn,
13551
16
        { "DNN", "nas-5gs.cmn.dnn",
13552
16
            FT_STRING, BASE_NONE, NULL, 0x0,
13553
16
            NULL, HFILL }
13554
16
        },
13555
16
        { &hf_nas_5gs_cmn_service_level_aa_param_type,
13556
16
        { "Type of service-level-AA parameter", "nas-5gs.cmn.service_level_aa_param.type",
13557
16
            FT_UINT8, BASE_HEX, VALS(nas_5gs_cmn_service_level_aa_param_type_vals), 0x0,
13558
16
            NULL, HFILL }
13559
16
        },
13560
16
        { &hf_nas_5gs_cmn_service_level_aa_param_len,
13561
16
        { "Length of service-level-AA parameter", "nas-5gs.cmn.service_level_aa_param.len",
13562
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
13563
16
            NULL, HFILL }
13564
16
        },
13565
16
        { &hf_nas_5gs_cmn_service_level_aa_param_device_id,
13566
16
        { "Service-level device ID", "nas-5gs.cmn.service_level_aa_param.device_id",
13567
16
            FT_STRING, BASE_NONE, NULL, 0x0,
13568
16
            NULL, HFILL }
13569
16
        },
13570
16
        { &hf_nas_5gs_cmn_service_level_aa_param_addr_type,
13571
16
        { "Service-level-AA server address type", "nas-5gs.cmn.service_level_aa_param.addr.type",
13572
16
            FT_UINT8, BASE_HEX, VALS(nas_5gs_cmn_service_level_aa_param_serv_addr_type_vals), 0x0,
13573
16
            NULL, HFILL }
13574
16
        },
13575
16
        { &hf_nas_5gs_cmn_service_level_aa_param_addr_ipv4,
13576
16
        { "Service-level-AA server address IPv4", "nas-5gs.cmn.service_level_aa_param.addr.ipv4",
13577
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
13578
16
            NULL, HFILL }
13579
16
        },
13580
16
        { &hf_nas_5gs_cmn_service_level_aa_param_addr_ipv6,
13581
16
        { "Service-level-AA server address IPv6", "nas-5gs.cmn.service_level_aa_param.addr.ipv6",
13582
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
13583
16
            NULL, HFILL }
13584
16
        },
13585
16
        { &hf_nas_5gs_cmn_service_level_aa_param_addr_fqdn,
13586
16
        { "Service-level-AA server address FQDN", "nas-5gs.cmn.service_level_aa_param.addr.fqdn",
13587
16
            FT_STRING, BASE_NONE, NULL, 0x0,
13588
16
            NULL, HFILL }
13589
16
        },
13590
16
        { &hf_nas_5gs_cmn_service_level_aa_param_resp_c2ar,
13591
16
        { "C2 authorization result field (C2AR)", "nas-5gs.cmn.service_level_aa_param.response.c2ar",
13592
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_cmn_service_level_aa_param_resp_c2ar_vals), 0x0c,
13593
16
            NULL, HFILL }
13594
16
        },
13595
16
        { &hf_nas_5gs_cmn_service_level_aa_param_resp_slar,
13596
16
        { "Service-level-AA result field (SLAR)", "nas-5gs.cmn.service_level_aa_param.response.slar",
13597
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_cmn_service_level_aa_param_resp_slar_vals), 0x03,
13598
16
            NULL, HFILL }
13599
16
        },
13600
16
        { &hf_nas_5gs_cmn_service_level_aa_param_payload_type,
13601
16
        { "Service-level-AA payload type", "nas-5gs.cmn.service_level_aa_param.payload_type",
13602
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_cmn_service_level_aa_param_payload_type_vals), 0x0,
13603
16
            NULL, HFILL }
13604
16
        },
13605
16
        { &hf_nas_5gs_cmn_service_level_aa_param_payload,
13606
16
        { "Service-level-AA payload", "nas-5gs.cmn.service_level_aa_param.payload",
13607
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13608
16
            NULL, HFILL }
13609
16
        },
13610
16
        { &hf_nas_5gs_cmn_service_level_aa_param_pending_ind_slapi,
13611
16
        { "Service-level-AA pending indication (SLAPI)", "nas-5gs.cmn.service_level_aa_param.pending_indication.slapi",
13612
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_cmn_service_level_aa_param_pending_ind_slapi_value), 0x01,
13613
16
            NULL, HFILL }
13614
16
        },
13615
16
        { &hf_nas_5gs_cmn_service_level_aa_param_service_status_ind_uas,
13616
16
        { "UAS", "nas-5gs.cmn.service_level_aa_param.service_status_indication.uas",
13617
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_enabled_not_enabled_value), 0x01,
13618
16
            NULL, HFILL }
13619
16
        },
13620
16
        { &hf_nas_5gs_cmn_service_level_aa_param_unknown,
13621
16
        { "Value of service-level-AA parameter", "nas-5gs.cmn.service_level_aa_param.unknown",
13622
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13623
16
            NULL, HFILL }
13624
16
        },
13625
16
        { &hf_nas_5gs_mm_for,
13626
16
        { "Follow-On Request bit (FOR)",   "nas-5gs.mm.for",
13627
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_for_tfs), 0x08,
13628
16
            NULL, HFILL }
13629
16
        },
13630
16
        { &hf_nas_5gs_mm_sms_requested,
13631
16
        { "SMS over NAS transport requested (SMS requested)",   "nas-5gs.mm.sms_requested",
13632
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
13633
16
            NULL, HFILL }
13634
16
        },
13635
16
        { &hf_nas_5gs_mm_ng_ran_rcu,
13636
16
        { "NG-RAN Radio Capability Update (NG-RAN-RCU)", "nas-5gs.mm.ng_ran_rcu",
13637
16
            FT_BOOLEAN, 8, TFS(&tfs_needed_not_needed), 0x02,
13638
16
            NULL, HFILL }
13639
16
        },
13640
16
        { &hf_nas_5gs_mm_5gs_pnb_ciot,
13641
16
        { "5GS Preferred CIoT network behaviour (5GS PNB-CIoT)", "nas-5gs.mm.5gs_pnb_ciot",
13642
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_5gs_pnb_ciot_values), 0x0c,
13643
16
            NULL, HFILL }
13644
16
        },
13645
16
        { &hf_nas_5gs_mm_eps_pnb_ciot,
13646
16
        { "EPS Preferred CIoT network behaviour (EPS-PNB-CIoT)", "nas-5gs.mm.eps_pnb_ciot",
13647
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_eps_pnb_ciot_values), 0x30,
13648
16
            NULL, HFILL }
13649
16
        },
13650
16
        { &hf_nas_5gs_mm_5gs_reg_type,
13651
16
        { "5GS registration type",   "nas-5gs.mm.5gs_reg_type",
13652
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_registration_type_values), 0x07,
13653
16
            NULL, HFILL }
13654
16
        },
13655
16
        { &hf_nas_5gs_mm_tsc,
13656
16
        { "Type of security context flag (TSC)",   "nas-5gs.mm.tsc",
13657
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_mm_tsc_tfs), 0x08,
13658
16
            NULL, HFILL }
13659
16
        },
13660
16
        { &hf_nas_5gs_mm_nas_key_set_id,
13661
16
        { "NAS key set identifier",   "nas-5gs.mm.nas_key_set_id",
13662
16
            FT_UINT8, BASE_DEC, NULL, 0x07,
13663
16
            NULL, HFILL }
13664
16
        },
13665
16
        { &hf_nas_5gs_mm_tsc_h1,
13666
16
        { "Type of security context flag (TSC)",   "nas-5gs.mm.tsc.h1",
13667
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_mm_tsc_tfs), 0x80,
13668
16
            NULL, HFILL }
13669
16
        },
13670
16
        { &hf_nas_5gs_mm_nas_key_set_id_h1,
13671
16
        { "NAS key set identifier",   "nas-5gs.mm.nas_key_set_id.h1",
13672
16
            FT_UINT8, BASE_DEC, NULL, 0x70,
13673
16
            NULL, HFILL }
13674
16
        },
13675
16
        { &hf_nas_5gs_mm_5gmm_cause,
13676
16
        { "5GMM cause",   "nas-5gs.mm.5gmm_cause",
13677
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_cause_vals), 0x0,
13678
16
            NULL, HFILL }
13679
16
        },
13680
16
        { &hf_nas_5gs_mm_pld_cont_type,
13681
16
        { "Payload container type",   "nas-5gs.mm.pld_cont_type",
13682
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_pld_cont_type_vals), 0x0f,
13683
16
            NULL, HFILL }
13684
16
        },
13685
16
        { &hf_nas_5gs_mm_sst,
13686
16
        { "Slice/service type (SST)",   "nas-5gs.mm.sst",
13687
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_sst_vals), 0x0,
13688
16
            NULL, HFILL }
13689
16
        },
13690
16
        { &hf_nas_5gs_mm_sd,
13691
16
        { "Slice differentiator (SD)",   "nas-5gs.mm.mm_sd",
13692
16
            FT_UINT24, BASE_DEC, NULL, 0x0,
13693
16
            NULL, HFILL }
13694
16
        },
13695
16
        { &hf_nas_5gs_mm_mapped_hplmn_sst,
13696
16
        { "Mapped HPLMN SST",   "nas-5gs.mm.mapped_hplmn_sst",
13697
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
13698
16
            NULL, HFILL }
13699
16
        },
13700
16
        { &hf_nas_5gs_mm_mapped_hplmn_ssd,
13701
16
        { "Mapped HPLMN SD",   "nas-5gs.mm.mapped_hplmn_ssd",
13702
16
            FT_UINT24, BASE_DEC, NULL, 0x0,
13703
16
            NULL, HFILL }
13704
16
        },
13705
16
        { &hf_nas_5gs_mm_switch_off,
13706
16
        { "Switch off",   "nas-5gs.mm.switch_off",
13707
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_mm_switch_off_tfs), 0x08,
13708
16
            NULL, HFILL }
13709
16
        },
13710
16
        { &hf_nas_5gs_mm_re_reg_req,
13711
16
        { "Re-registration required",   "nas-5gs.mm.re_reg_req",
13712
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_mm_re_reg_req_tfs), 0x04,
13713
16
            NULL, HFILL }
13714
16
        },
13715
16
        { &hf_nas_5gs_mm_acc_type,
13716
16
        { "Access type",   "nas-5gs.mm.acc_type",
13717
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_acc_type_vals), 0x03,
13718
16
            NULL, HFILL }
13719
16
        },
13720
16
        { &hf_nas_5gs_mm_raai_b0,
13721
16
        { "Registration Area Allocation Indication (RAAI)",   "nas-5gs.mm.raai_b0",
13722
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_raai), 0x01,
13723
16
            NULL, HFILL }
13724
16
        },
13725
16
        { &hf_nas_5gs_mm_sprti_b1,
13726
16
        { "Strictly Periodic Registration Timer Indication (SPRTI)",   "nas-5gs.mm.sprti_b1",
13727
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
13728
16
            NULL, HFILL }
13729
16
        },
13730
16
        { &hf_nas_5gs_mm_ma_pdu_session_info_value,
13731
16
        { "MA PDU session information value",   "nas-5gs.mm.ma_pdu_session_info_value",
13732
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_ma_pdu_session_info_vals), 0x0f,
13733
16
            NULL, HFILL }
13734
16
        },
13735
16
        { &hf_nas_5gs_mm_len_of_mapped_s_nssai,
13736
16
        { "Length of Mapped S-NSSAI content",   "nas-5gs.mm.len_of_mapped_s_nssai",
13737
16
            FT_UINT8, BASE_DEC, NULL, 0,
13738
16
            NULL, HFILL }
13739
16
        },
13740
16
        { &hf_nas_5gs_mm_conf_upd_ind_ack_b0,
13741
16
        { "Acknowledgement",   "nas-5gs.mm.conf_upd_ind.ack",
13742
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
13743
16
            NULL, HFILL }
13744
16
        },
13745
16
        { &hf_nas_5gs_mm_conf_upd_ind_red_b1,
13746
16
        { "Registration",   "nas-5gs.mm.conf_upd_ind.red",
13747
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x02,
13748
16
            NULL, HFILL }
13749
16
        },
13750
16
        { &hf_nas_5gs_mm_cag_info_entry_len,
13751
16
        { "Length of entry contents",   "nas-5gs.mm.cag_info.entry.len",
13752
16
            FT_UINT16, BASE_DEC, NULL, 0,
13753
16
            NULL, HFILL }
13754
16
        },
13755
16
        { &hf_nas_5gs_mm_cag_info_entry_cag_only,
13756
16
        { "CAG only",   "nas-5gs.mm.cag_info.entry.cag_only",
13757
16
            FT_BOOLEAN, 8, TFS(&tfs_5gs_mm_cag_info_entry_cag_only), 0x01,
13758
16
            NULL, HFILL }
13759
16
        },
13760
16
        { &hf_nas_5gs_mm_cag_info_entry_lci,
13761
16
        { "Length of CAG-ID without additional information list (LCI)",   "nas-5gs.mm.cag_info.entry.lci",
13762
16
            FT_BOOLEAN, 8, TFS(&tfs_present_absent), 0x04,
13763
16
            NULL, HFILL }
13764
16
        },
13765
16
        { &hf_nas_5gs_mm_cag_info_entry_caili,
13766
16
        { "CAG-ID with additional information list indicator (CAILI)",   "nas-5gs.mm.cag_info.entry.caili",
13767
16
            FT_BOOLEAN, 8, TFS(&tfs_present_absent), 0x08,
13768
16
            NULL, HFILL }
13769
16
        },
13770
16
        { &hf_nas_5gs_mm_cag_info_entry_cag_without_add_info_list_len,
13771
16
        { "Length of CAG-IDs without additional information list",   "nas-5gs.mm.cag_info.entry.cag_without_add_info_list_len",
13772
16
            FT_UINT16, BASE_DEC, NULL, 0,
13773
16
            NULL, HFILL }
13774
16
        },
13775
16
        { &hf_nas_5gs_mm_cag_info_entry_cag_with_add_info_list_len,
13776
16
        { "Length of CAG-IDs with additional information list contents",   "nas-5gs.mm.cag_info.entry.cag_with_add_info_list_len",
13777
16
            FT_UINT16, BASE_DEC, NULL, 0,
13778
16
            NULL, HFILL }
13779
16
        },
13780
16
        { &hf_nas_5gs_mm_cag_info_entry_cag_with_add_info_len,
13781
16
        { "Length of CAG-ID with additional information contents",   "nas-5gs.mm.cag_info.entry.cag_with_add_info_len",
13782
16
            FT_UINT16, BASE_DEC, NULL, 0,
13783
16
            NULL, HFILL }
13784
16
        },
13785
16
        { &hf_nas_5gs_mm_cag_info_entry_cag_id,
13786
16
        { "CAG-ID",   "nas-5gs.mm.cag_info.entry.cag_id",
13787
16
            FT_UINT32, BASE_HEX, NULL, 0,
13788
16
            NULL, HFILL }
13789
16
        },
13790
16
        { &hf_nas_5gs_mm_cag_info_entry_svii,
13791
16
        { "Spare validity information indicator (SVII)",   "nas-5gs.mm.cag_info.entry.svii",
13792
16
            FT_BOOLEAN, BASE_NONE, TFS(&tfs_present_absent), 0x0,
13793
16
            NULL, HFILL }
13794
16
        },
13795
16
        { &hf_nas_5gs_mm_cag_info_entry_tvii,
13796
16
        { "Time validity information indicator (TVII)",   "nas-5gs.mm.cag_info.entry.tvii",
13797
16
            FT_BOOLEAN, 8, TFS(&tfs_present_absent), 0x01,
13798
16
            NULL, HFILL }
13799
16
        },
13800
16
        { &hf_nas_5gs_mm_cag_info_entry_nb_time_periods,
13801
16
        { "Number of time periods",   "nas-5gs.mm.cag_info.entry.nb_time_periods",
13802
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
13803
16
            NULL, HFILL }
13804
16
        },
13805
16
        { &hf_nas_5gs_mm_cag_info_entry_time_period,
13806
16
        { "Time period",   "nas-5gs.mm.cag_info.entry.time_period",
13807
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13808
16
            NULL, HFILL }
13809
16
        },
13810
16
        { &hf_nas_5gs_mm_ciot_small_data_cont_data_type,
13811
16
        { "Data type",   "nas-5gs.mm.ciot_small_data_cont.data_type",
13812
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_ciot_small_data_cont_data_type_values), 0xe0,
13813
16
            NULL, HFILL }
13814
16
        },
13815
16
        { &hf_nas_5gs_mm_ciot_small_data_cont_ddx,
13816
16
        { "Downlink data expected (DDX)",   "nas-5gs.mm.ciot_small_data_cont.ddx",
13817
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_ciot_small_data_cont_ddx_values), 0x18,
13818
16
            NULL, HFILL }
13819
16
        },
13820
16
        { &hf_nas_5gs_mm_ciot_small_data_cont_pdu_session_id,
13821
16
        { "PDU session identity",   "nas-5gs.mm.ciot_small_data_cont.pdu_session_id",
13822
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_pdu_session_id_vals), 0x07,
13823
16
            NULL, HFILL }
13824
16
        },
13825
16
        { &hf_nas_5gs_mm_ciot_small_data_cont_add_info_len,
13826
16
        { "Length of additional information",   "nas-5gs.mm.ciot_small_data_cont.add_info_len",
13827
16
            FT_UINT8, BASE_DEC, NULL, 0,
13828
16
            NULL, HFILL }
13829
16
        },
13830
16
        { &hf_nas_5gs_mm_ciot_small_data_cont_add_info,
13831
16
        { "Additional information",   "nas-5gs.mm.ciot_small_data_cont.add_info",
13832
16
            FT_BYTES, BASE_NONE, NULL, 0,
13833
16
            NULL, HFILL }
13834
16
        },
13835
16
        { &hf_nas_5gs_mm_ciot_small_data_cont_data_contents,
13836
16
        { "Data contents",   "nas-5gs.mm.ciot_small_data_cont.data_contents",
13837
16
            FT_BYTES, BASE_NONE, NULL, 0,
13838
16
            NULL, HFILL }
13839
16
        },
13840
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_1,
13841
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-1","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_1",
13842
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
13843
16
            NULL, HFILL }
13844
16
        },
13845
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_2,
13846
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-2","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_2",
13847
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
13848
16
            NULL, HFILL }
13849
16
        },
13850
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_3,
13851
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-3","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_3",
13852
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
13853
16
            NULL, HFILL }
13854
16
        },
13855
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_4,
13856
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-4","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_4",
13857
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
13858
16
            NULL, HFILL }
13859
16
        },
13860
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_5,
13861
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-5","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_5",
13862
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
13863
16
            NULL, HFILL }
13864
16
        },
13865
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_6,
13866
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-6","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_6",
13867
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
13868
16
            NULL, HFILL }
13869
16
        },
13870
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_7,
13871
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-7","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_7",
13872
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
13873
16
            NULL, HFILL }
13874
16
        },
13875
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_8,
13876
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-8","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_8",
13877
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
13878
16
            NULL, HFILL }
13879
16
        },
13880
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_1,
13881
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-1","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_1",
13882
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
13883
16
            NULL, HFILL }
13884
16
        },
13885
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_2,
13886
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-2","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_2",
13887
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
13888
16
            NULL, HFILL }
13889
16
        },
13890
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_3,
13891
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-3","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_3",
13892
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
13893
16
            NULL, HFILL }
13894
16
        },
13895
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_4,
13896
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-4","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_4",
13897
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
13898
16
            NULL, HFILL }
13899
16
        },
13900
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_5,
13901
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-5","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_5",
13902
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
13903
16
            NULL, HFILL }
13904
16
        },
13905
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_6,
13906
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-6","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_6",
13907
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
13908
16
            NULL, HFILL }
13909
16
        },
13910
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_7,
13911
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-7","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_7",
13912
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
13913
16
            NULL, HFILL }
13914
16
        },
13915
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_8,
13916
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-8","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_8",
13917
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
13918
16
            NULL, HFILL }
13919
16
        },
13920
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_9,
13921
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-9","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_9",
13922
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
13923
16
            NULL, HFILL }
13924
16
        },
13925
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_10,
13926
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-10","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_10",
13927
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
13928
16
            NULL, HFILL }
13929
16
        },
13930
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_11,
13931
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-11","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_11",
13932
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
13933
16
            NULL, HFILL }
13934
16
        },
13935
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_12,
13936
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-12","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_12",
13937
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
13938
16
            NULL, HFILL }
13939
16
        },
13940
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_13,
13941
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-13","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_13",
13942
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
13943
16
            NULL, HFILL }
13944
16
        },
13945
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_14,
13946
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-14","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_14",
13947
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
13948
16
            NULL, HFILL }
13949
16
        },
13950
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_15,
13951
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-15","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_15",
13952
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
13953
16
            NULL, HFILL }
13954
16
        },
13955
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_16,
13956
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-16","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_16",
13957
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
13958
16
            NULL, HFILL }
13959
16
        },
13960
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_17,
13961
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-17","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_17",
13962
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
13963
16
            NULL, HFILL }
13964
16
        },
13965
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_18,
13966
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-18","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_18",
13967
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
13968
16
            NULL, HFILL }
13969
16
        },
13970
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_19,
13971
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-19","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_19",
13972
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
13973
16
            NULL, HFILL }
13974
16
        },
13975
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_20,
13976
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-20","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_20",
13977
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
13978
16
            NULL, HFILL }
13979
16
        },
13980
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_21,
13981
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-21","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_21",
13982
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
13983
16
            NULL, HFILL }
13984
16
        },
13985
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_22,
13986
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-22","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_22",
13987
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
13988
16
            NULL, HFILL }
13989
16
        },
13990
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_23,
13991
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-23","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_23",
13992
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
13993
16
            NULL, HFILL }
13994
16
        },
13995
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_24,
13996
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-24","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_24",
13997
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
13998
16
            NULL, HFILL }
13999
16
        },
14000
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_25,
14001
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-25","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_25",
14002
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14003
16
            NULL, HFILL }
14004
16
        },
14005
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_3_1,
14006
16
        { "Ciphering data set for E-UTRA positioning SIB type 3-1","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_3_1",
14007
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14008
16
            NULL, HFILL }
14009
16
        },
14010
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_4_1,
14011
16
        { "Ciphering data set for E-UTRA positioning SIB type 4-1","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_4_1",
14012
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14013
16
            NULL, HFILL }
14014
16
        },
14015
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_5_1,
14016
16
        { "Ciphering data set for E-UTRA positioning SIB type 5-1","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_5_1",
14017
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14018
16
            NULL, HFILL }
14019
16
        },
14020
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_9,
14021
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-9","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_9",
14022
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14023
16
            NULL, HFILL }
14024
16
        },
14025
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_10,
14026
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-10","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_10",
14027
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
14028
16
            NULL, HFILL }
14029
16
        },
14030
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_17a,
14031
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-17a","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_17a",
14032
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
14033
16
            NULL, HFILL }
14034
16
        },
14035
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_18a,
14036
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-18a","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_18a",
14037
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
14038
16
            NULL, HFILL }
14039
16
        },
14040
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_20a,
14041
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-20a","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_20a",
14042
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14043
16
            NULL, HFILL }
14044
16
        },
14045
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_26,
14046
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-26","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_26",
14047
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14048
16
            NULL, HFILL }
14049
16
        },
14050
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_2_27,
14051
16
        { "Ciphering data set for E-UTRA positioning SIB type 2-27","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_2_27",
14052
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14053
16
            NULL, HFILL }
14054
16
        },
14055
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_11,
14056
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-11","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_11",
14057
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14058
16
            NULL, HFILL }
14059
16
        },
14060
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_type_1_12,
14061
16
        { "Ciphering data set for E-UTRA positioning SIB type 1-12","nas-5gs.mm.ciph_key_data.eutra_pos_sib_type_1_12",
14062
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14063
16
            NULL, HFILL }
14064
16
        },
14065
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_1,
14066
16
        { "Ciphering data set for NR positioning SIB type 1-1","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_1",
14067
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14068
16
            NULL, HFILL }
14069
16
        },
14070
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_2,
14071
16
        { "Ciphering data set for NR positioning SIB type 1-2","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_2",
14072
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14073
16
            NULL, HFILL }
14074
16
        },
14075
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_3,
14076
16
        { "Ciphering data set for NR positioning SIB type 1-3","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_3",
14077
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14078
16
            NULL, HFILL }
14079
16
        },
14080
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_4,
14081
16
        { "Ciphering data set for NR positioning SIB type 1-4","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_4",
14082
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14083
16
            NULL, HFILL }
14084
16
        },
14085
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_5,
14086
16
        { "Ciphering data set for NR positioning SIB type 1-5","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_5",
14087
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14088
16
            NULL, HFILL }
14089
16
        },
14090
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_6,
14091
16
        { "Ciphering data set for NR positioning SIB type 1-6","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_6",
14092
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
14093
16
            NULL, HFILL }
14094
16
        },
14095
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_7,
14096
16
        { "Ciphering data set for NR positioning SIB type 1-7","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_7",
14097
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
14098
16
            NULL, HFILL }
14099
16
        },
14100
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_8,
14101
16
        { "Ciphering data set for NR positioning SIB type 1-8","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_8",
14102
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
14103
16
            NULL, HFILL }
14104
16
        },
14105
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_1,
14106
16
        { "Ciphering data set for NR positioning SIB type 2-1","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_1",
14107
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14108
16
            NULL, HFILL }
14109
16
        },
14110
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_2,
14111
16
        { "Ciphering data set for NR positioning SIB type 2-2","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_2",
14112
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14113
16
            NULL, HFILL }
14114
16
        },
14115
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_3,
14116
16
        { "Ciphering data set for NR positioning SIB type 2-3","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_3",
14117
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14118
16
            NULL, HFILL }
14119
16
        },
14120
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_4,
14121
16
        { "Ciphering data set for NR positioning SIB type 2-4","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_4",
14122
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14123
16
            NULL, HFILL }
14124
16
        },
14125
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_5,
14126
16
        { "Ciphering data set for NR positioning SIB type 2-5","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_5",
14127
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14128
16
            NULL, HFILL }
14129
16
        },
14130
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_6,
14131
16
        { "Ciphering data set for NR positioning SIB type 2-6","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_6",
14132
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
14133
16
            NULL, HFILL }
14134
16
        },
14135
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_7,
14136
16
        { "Ciphering data set for NR positioning SIB type 2-7","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_7",
14137
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
14138
16
            NULL, HFILL }
14139
16
        },
14140
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_8,
14141
16
        { "Ciphering data set for NR positioning SIB type 2-8","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_8",
14142
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
14143
16
            NULL, HFILL }
14144
16
        },
14145
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_9,
14146
16
        { "Ciphering data set for NR positioning SIB type 2-9","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_9",
14147
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14148
16
            NULL, HFILL }
14149
16
        },
14150
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_10,
14151
16
        { "Ciphering data set for NR positioning SIB type 2-10","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_10",
14152
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14153
16
            NULL, HFILL }
14154
16
        },
14155
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_11,
14156
16
        { "Ciphering data set for NR positioning SIB type 2-11","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_11",
14157
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14158
16
            NULL, HFILL }
14159
16
        },
14160
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_12,
14161
16
        { "Ciphering data set for NR positioning SIB type 2-12","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_12",
14162
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14163
16
            NULL, HFILL }
14164
16
        },
14165
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_13,
14166
16
        { "Ciphering data set for NR positioning SIB type 2-13","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_13",
14167
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14168
16
            NULL, HFILL }
14169
16
        },
14170
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_14,
14171
16
        { "Ciphering data set for NR positioning SIB type 2-14","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_14",
14172
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
14173
16
            NULL, HFILL }
14174
16
        },
14175
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_15,
14176
16
        { "Ciphering data set for NR positioning SIB type 2-15","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_15",
14177
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
14178
16
            NULL, HFILL }
14179
16
        },
14180
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_16,
14181
16
        { "Ciphering data set for NR positioning SIB type 2-16","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_16",
14182
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
14183
16
            NULL, HFILL }
14184
16
        },
14185
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_17,
14186
16
        { "Ciphering data set for NR positioning SIB type 2-17","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_17",
14187
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14188
16
            NULL, HFILL }
14189
16
        },
14190
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_18,
14191
16
        { "Ciphering data set for NR positioning SIB type 2-18","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_18",
14192
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14193
16
            NULL, HFILL }
14194
16
        },
14195
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_19,
14196
16
        { "Ciphering data set for NR positioning SIB type 2-19","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_19",
14197
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14198
16
            NULL, HFILL }
14199
16
        },
14200
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_20,
14201
16
        { "Ciphering data set for NR positioning SIB type 2-20","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_20",
14202
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14203
16
            NULL, HFILL }
14204
16
        },
14205
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_21,
14206
16
        { "Ciphering data set for NR positioning SIB type 2-21","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_21",
14207
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14208
16
            NULL, HFILL }
14209
16
        },
14210
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_22,
14211
16
        { "Ciphering data set for NR positioning SIB type 2-22","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_22",
14212
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
14213
16
            NULL, HFILL }
14214
16
        },
14215
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_23,
14216
16
        { "Ciphering data set for NR positioning SIB type 2-23","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_23",
14217
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
14218
16
            NULL, HFILL }
14219
16
        },
14220
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_3_1,
14221
16
        { "Ciphering data set for NR positioning SIB type 3-1","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_3_1",
14222
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
14223
16
            NULL, HFILL }
14224
16
        },
14225
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_4_1,
14226
16
        { "Ciphering data set for NR positioning SIB type 4-1","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_4_1",
14227
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14228
16
            NULL, HFILL }
14229
16
        },
14230
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_5_1,
14231
16
        { "Ciphering data set for NR positioning SIB type 5-1","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_5_1",
14232
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14233
16
            NULL, HFILL }
14234
16
        },
14235
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_1,
14236
16
        { "Ciphering data set for NR positioning SIB type 6-1","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_6_1",
14237
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14238
16
            NULL, HFILL }
14239
16
        },
14240
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_2,
14241
16
        { "Ciphering data set for NR positioning SIB type 6-2","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_6_2",
14242
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14243
16
            NULL, HFILL }
14244
16
        },
14245
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_3,
14246
16
        { "Ciphering data set for NR positioning SIB type 6-3","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_6_3",
14247
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14248
16
            NULL, HFILL }
14249
16
        },
14250
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_4,
14251
16
        { "Ciphering data set for NR positioning SIB type 6-4","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_6_4",
14252
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
14253
16
            NULL, HFILL }
14254
16
        },
14255
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_5,
14256
16
        { "Ciphering data set for NR positioning SIB type 6-5","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_6_5",
14257
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
14258
16
            NULL, HFILL }
14259
16
        },
14260
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_6,
14261
16
        { "Ciphering data set for NR positioning SIB type 6-6","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_6_6",
14262
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
14263
16
            NULL, HFILL }
14264
16
        },
14265
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_9,
14266
16
        { "Ciphering data set for NR positioning SIB type 1-9","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_9",
14267
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14268
16
            NULL, HFILL }
14269
16
        },
14270
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_10,
14271
16
        { "Ciphering data set for NR positioning SIB type 1-10","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_10",
14272
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14273
16
            NULL, HFILL }
14274
16
        },
14275
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_24,
14276
16
        { "Ciphering data set for NR positioning SIB type 2-24","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_24",
14277
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14278
16
            NULL, HFILL }
14279
16
        },
14280
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_25,
14281
16
        { "Ciphering data set for NR positioning SIB type 2-25","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_25",
14282
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14283
16
            NULL, HFILL }
14284
16
        },
14285
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_17a,
14286
16
        { "Ciphering data set for NR positioning SIB type 2-17a","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_17a",
14287
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14288
16
            NULL, HFILL }
14289
16
        },
14290
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_18a,
14291
16
        { "Ciphering data set for NR positioning SIB type 2-18a","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_18a",
14292
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
14293
16
            NULL, HFILL }
14294
16
        },
14295
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_20a,
14296
16
        { "Ciphering data set for NR positioning SIB type 2-20a","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_20a",
14297
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
14298
16
            NULL, HFILL }
14299
16
        },
14300
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_26,
14301
16
        { "Ciphering data set for NR positioning SIB type 2-26","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_26",
14302
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
14303
16
            NULL, HFILL }
14304
16
        },
14305
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_2_27,
14306
16
        { "Ciphering data set for NR positioning SIB type 2-27","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_2_27",
14307
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x80,
14308
16
            NULL, HFILL }
14309
16
        },
14310
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_11,
14311
16
        { "Ciphering data set for NR positioning SIB type 1-11","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_11",
14312
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x40,
14313
16
            NULL, HFILL }
14314
16
        },
14315
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_1_12,
14316
16
        { "Ciphering data set for NR positioning SIB type 1-12","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_1_12",
14317
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x20,
14318
16
            NULL, HFILL }
14319
16
        },
14320
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_6_7,
14321
16
        { "Ciphering data set for NR positioning SIB type 6-7","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_6_7",
14322
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x10,
14323
16
            NULL, HFILL }
14324
16
        },
14325
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_1,
14326
16
        { "Ciphering data set for NR positioning SIB type 7-1","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_7_1",
14327
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x08,
14328
16
            NULL, HFILL }
14329
16
        },
14330
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_2,
14331
16
        { "Ciphering data set for NR positioning SIB type 7-2","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_7_2",
14332
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x04,
14333
16
            NULL, HFILL }
14334
16
        },
14335
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_3,
14336
16
        { "Ciphering data set for NR positioning SIB type 7-3","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_7_3",
14337
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x02,
14338
16
            NULL, HFILL }
14339
16
        },
14340
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_type_7_4,
14341
16
        { "Ciphering data set for NR positioning SIB type 7-4","nas-5gs.mm.ciph_key_data.nr_pos_sib_type_7_4",
14342
16
            FT_BOOLEAN, 8, TFS(&tfs_applicable_not_applicable), 0x01,
14343
16
            NULL, HFILL }
14344
16
        },
14345
16
        { &hf_nas_5gs_mm_ciph_key_data_ciphering_set_id,
14346
16
        { "Ciphering set ID","nas-5gs.mm.ciph_key_data.ciphering_set_id",
14347
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
14348
16
            NULL, HFILL }
14349
16
        },
14350
16
        { &hf_nas_5gs_mm_ciph_key_data_ciphering_key,
14351
16
            { "Ciphering key","nas-5gs.mm.ciph_key_data.ciphering_key",
14352
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
14353
16
            NULL, HFILL }
14354
16
        },
14355
16
        { &hf_nas_5gs_mm_ciph_key_data_c0_len,
14356
16
            { "c0 length","nas-5gs.mm.ciph_key_data.c0_len",
14357
16
            FT_UINT8, BASE_DEC, NULL, 0x1f,
14358
16
            NULL, HFILL }
14359
16
        },
14360
16
        { &hf_nas_5gs_mm_ciph_key_data_c0,
14361
16
            { "c0","nas-5gs.mm.ciph_key_data.c0",
14362
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
14363
16
            NULL, HFILL }
14364
16
        },
14365
16
        { &hf_nas_5gs_mm_ciph_key_data_eutra_pos_sib_len,
14366
16
            { "E-UTRA posSIB length","nas-5gs.mm.ciph_key_data.eutra_pos_sib_len",
14367
16
            FT_UINT8, BASE_DEC, NULL, 0x0f,
14368
16
            NULL, HFILL }
14369
16
        },
14370
16
        { &hf_nas_5gs_mm_ciph_key_data_nr_pos_sib_len,
14371
16
            { "NR posSIB length","nas-5gs.mm.ciph_key_data.nr_pos_sib_len",
14372
16
            FT_UINT8, BASE_DEC, NULL, 0x0f,
14373
16
            NULL, HFILL }
14374
16
        },
14375
16
        { &hf_nas_5gs_mm_ciph_key_data_validity_start_time,
14376
16
        { "Validity start time", "nas-5gs.mm.ciph_key_data.validity_start_time",
14377
16
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
14378
16
            NULL, HFILL }
14379
16
        },
14380
16
        { &hf_nas_5gs_mm_ciph_key_data_validity_duration,
14381
16
        { "Validity duration", "nas-5gs.mm.ciph_key_data.validity_duration",
14382
16
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_minute_minutes), 0x0,
14383
16
            NULL, HFILL }
14384
16
        },
14385
16
        { &hf_nas_5gs_mm_ciph_key_data_tais_list_len,
14386
16
        { "TAIs list length", "nas-5gs.mm.ciph_key_data.tais_list_len",
14387
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
14388
16
            NULL, HFILL }
14389
16
        },
14390
16
        { &hf_nas_5gs_mm_ctrl_plane_serv_type,
14391
16
        { "Control plane service type", "nas-5gs.mm.ctrl_plane_serv_type",
14392
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_ctrl_plane_serv_type_values), 0x07,
14393
16
            NULL, HFILL }
14394
16
        },
14395
16
        { &hf_nas_5gs_mm_nas_sec_algo_enc,
14396
16
        { "Type of ciphering algorithm",   "nas-5gs.mm.nas_sec_algo_enc",
14397
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_type_of_enc_algo_vals), 0xf0,
14398
16
            NULL, HFILL }
14399
16
        },
14400
16
        { &hf_nas_5gs_mm_nas_sec_algo_ip,
14401
16
        { "Type of integrity protection algorithm",   "nas-5gs.mm.nas_sec_algo_ip",
14402
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_type_of_ip_algo_vals), 0x0f,
14403
16
            NULL, HFILL }
14404
16
        },
14405
16
        { &hf_nas_5gs_mm_s1_mode_b0,
14406
16
        { "EPC NAS supported (S1 mode)",   "nas-5gs.mm.s1_mode_b0",
14407
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14408
16
            NULL, HFILL }
14409
16
        },
14410
16
        { &hf_nas_5gs_mm_ho_attach_b1,
14411
16
        { "ATTACH REQUEST message containing PDN CONNECTIVITY REQUEST message for handover support (HO attach)",   "nas-5gs.mm.ho_attach_b1",
14412
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14413
16
            NULL, HFILL }
14414
16
        },
14415
16
        { &hf_nas_5gs_mm_lpp_cap_b2,
14416
16
        { "LTE Positioning Protocol (LPP) capability",   "nas-5gs.mm.lpp_cap_b2",
14417
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14418
16
            NULL, HFILL }
14419
16
        },
14420
16
        { &hf_nas_5gs_mm_restrict_ec_b3,
14421
16
        { "Restriction on use of enhanced coverage support (RestrictEC)",   "nas-5gs.mm.restrict_ec_b3",
14422
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14423
16
            NULL, HFILL }
14424
16
        },
14425
16
        { &hf_nas_5gs_mm_5g_cp_ciot_b4,
14426
16
        { "Control plane CIoT 5GS optimization (5G-CP CIoT)",   "nas-5gs.mm.5g_cp_ciot_b4",
14427
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14428
16
            NULL, HFILL }
14429
16
        },
14430
16
        { &hf_nas_5gs_mm_n3_data_b5,
14431
16
        { "N3 data transfer (N3 data)",   "nas-5gs.mm.n3_data_b5",
14432
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14433
16
            NULL, HFILL }
14434
16
        },
14435
16
        { &hf_nas_5gs_mm_5g_iphc_cp_ciot_b6,
14436
16
        { "IP header compression for control plane CIoT 5GS optimization (5G-IPHC-CP CIoT)",   "nas-5gs.mm.5g_iphc_cp_ciot_b6",
14437
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14438
16
            NULL, HFILL }
14439
16
        },
14440
16
        { &hf_nas_5gs_mm_sgc_b7,
14441
16
        { "Service gap control (SGC)",   "nas-5gs.mm.sgc_b7",
14442
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14443
16
            NULL, HFILL }
14444
16
        },
14445
16
        { &hf_nas_5gs_mm_5g_srvcc_b0,
14446
16
        { "5G-SRVCC from NG-RAN to UTRAN (5GSRVCC) capability",   "nas-5gs.mm.5g_srvcc_b0",
14447
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14448
16
            NULL, HFILL }
14449
16
        },
14450
16
        { &hf_nas_5gs_mm_5g_up_ciot_b1,
14451
16
        { "User plane CIoT 5GS optimization (5G-UP CIoT)",   "nas-5gs.mm.5g_up_ciot_b1",
14452
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14453
16
            NULL, HFILL }
14454
16
        },
14455
16
        { &hf_nas_5gs_mm_v2x_b2,
14456
16
        { "V2X capability (V2X)",   "nas-5gs.mm.v2x_b2",
14457
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14458
16
            NULL, HFILL }
14459
16
        },
14460
16
        { &hf_nas_5gs_mm_v2xcepc5_b3,
14461
16
        { "V2X communication over E-UTRA-PC5 capability (V2XCEPC5)",   "nas-5gs.mm.v2xcepc5_b3",
14462
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14463
16
            NULL, HFILL }
14464
16
        },
14465
16
        { &hf_nas_5gs_mm_v2xcnpc5_b4,
14466
16
        { "V2X communication over NR-PC5 capability (V2XCNPC5)",   "nas-5gs.mm.v2xcnpc5_b4",
14467
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14468
16
            NULL, HFILL }
14469
16
        },
14470
16
        { &hf_nas_5gs_mm_5g_lcs_b5,
14471
16
        { "Location Services (5G-LCS) notification mechanisms capability",   "nas-5gs.mm.5g_lcs_b5",
14472
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14473
16
            NULL, HFILL }
14474
16
        },
14475
16
        { &hf_nas_5gs_mm_nssaa_b6,
14476
16
        { "Network slice-specific authentication and authorization (NSSAA)",   "nas-5gs.mm.nssaa_b6",
14477
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14478
16
            NULL, HFILL }
14479
16
        },
14480
16
        { &hf_nas_5gs_mm_racs_b7,
14481
16
        { "Radio capability signalling optimisation (RACS) capability",   "nas-5gs.mm.racs_b7",
14482
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14483
16
            NULL, HFILL }
14484
16
        },
14485
16
        { &hf_nas_5gs_mm_cag_b0,
14486
16
        { "Closed Access Group (CAG) capability",   "nas-5gs.mm.cag_b0",
14487
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14488
16
            NULL, HFILL }
14489
16
        },
14490
16
        { &hf_nas_5gs_mm_wsusa_b1,
14491
16
        { "WUS assistance (WUSA) information reception capability",   "nas-5gs.mm.wsusa_b1",
14492
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14493
16
            NULL, HFILL }
14494
16
        },
14495
16
        { &hf_nas_5gs_mm_multiple_up_b2,
14496
16
        { "Multiple user-plane resources support (multipleUP)",   "nas-5gs.mm.multiple_up_b2",
14497
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14498
16
            NULL, HFILL }
14499
16
        },
14500
16
        { &hf_nas_5gs_mm_5g_ehc_cp_ciot_b3,
14501
16
        { "Ethernet header compression for control plane CIoT 5GS optimization (5G-EHC-CP CIoT)",   "nas-5gs.mm.ehc_cp_ciot_b3",
14502
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14503
16
            NULL, HFILL }
14504
16
        },
14505
16
        { &hf_nas_5gs_mm_er_nssai_b4,
14506
16
        { "Extended rejected NSSAI (ER-NSSAI)",   "nas-5gs.mm.er_nssai_b4",
14507
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14508
16
            NULL, HFILL }
14509
16
        },
14510
16
        { &hf_nas_5gs_mm_5g_prose_dd_b5,
14511
16
        { "5G ProSe direct discovery (5G ProSe-dd)",   "nas-5gs.mm.prose_dd_b5",
14512
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14513
16
            NULL, HFILL }
14514
16
        },
14515
16
        { &hf_nas_5gs_mm_5g_prose_dc_b6,
14516
16
        { "5G ProSe direct communication (5G ProSe-dc)",   "nas-5gs.mm.prose_dc_b6",
14517
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14518
16
            NULL, HFILL }
14519
16
        },
14520
16
        { &hf_nas_5gs_mm_5g_prose_l2relay_b7,
14521
16
        { "5G ProSe layer-2 UE-to-network-relay (5G ProSe-l2relay)",   "nas-5gs.mm.prose_l2relay_b7",
14522
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14523
16
            NULL, HFILL }
14524
16
        },
14525
16
        { &hf_nas_5gs_mm_5g_prose_l3relay_b0,
14526
16
        { "5G ProSe layer-3 UE-to-network-relay (5G ProSe-l3relay)",   "nas-5gs.mm.5g_prose_l3relay_b0",
14527
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14528
16
            NULL, HFILL }
14529
16
        },
14530
16
        { &hf_nas_5gs_mm_5g_prose_l2rmt_b1,
14531
16
        { "5G ProSe layer-2 UE-to-network-remote (5G ProSe-l2rmt)",   "nas-5gs.mm.5g_prose_l2rmt_b1",
14532
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14533
16
            NULL, HFILL }
14534
16
        },
14535
16
        { &hf_nas_5gs_mm_5g_prose_l3rmt_b2,
14536
16
        { "5G ProSe layer-3 UE-to-network-remote (5G ProSe-l3rmt)",   "nas-5gs.mm.5g_prose_l3rmt_b2",
14537
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14538
16
            NULL, HFILL }
14539
16
        },
14540
16
        { &hf_nas_5gs_mm_nr_pssi_b3,
14541
16
        { "NR paging subgroup support indication (NR-PSSI)",   "nas-5gs.mm.nr_pssi_b3",
14542
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14543
16
            NULL, HFILL }
14544
16
        },
14545
16
        { &hf_nas_5gs_mm_ncr_b4,
14546
16
        { "N1 NAS signalling connection release (NCR)",   "nas-5gs.mm.ncr_b4",
14547
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14548
16
            NULL, HFILL }
14549
16
        },
14550
16
        { &hf_nas_5gs_mm_piv_b5,
14551
16
        { "Paging indication for voice services (PIV)",   "nas-5gs.mm.piv_b5",
14552
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14553
16
            NULL, HFILL }
14554
16
        },
14555
16
        { &hf_nas_5gs_mm_rpr_b6,
14556
16
        { "Reject paging request (RPR)",   "nas-5gs.mm.rpr_b6",
14557
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14558
16
            NULL, HFILL }
14559
16
        },
14560
16
        { &hf_nas_5gs_mm_pr_b7,
14561
16
        { "Paging restriction (PR)",   "nas-5gs.mm.pr_b7",
14562
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14563
16
            NULL, HFILL }
14564
16
        },
14565
16
        { &hf_nas_5gs_mm_nssrg_b0,
14566
16
        { "NSSRG",   "nas-5gs.mm.nssrg_b0",
14567
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14568
16
            NULL, HFILL }
14569
16
        },
14570
16
        { &hf_nas_5gs_mm_mint_b1,
14571
16
        { "Minimization of service interruption (MINT)",   "nas-5gs.mm.mint_b1",
14572
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14573
16
            NULL, HFILL }
14574
16
        },
14575
16
        { &hf_nas_5gs_mm_event_notif_b2,
14576
16
        { "Event notification",   "nas-5gs.mm.event_notif_b2",
14577
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14578
16
            NULL, HFILL }
14579
16
        },
14580
16
        { &hf_nas_5gs_mm_ssnpnsi_b3,
14581
16
        { "SOR SNPN SI",   "nas-5gs.mm.ssnpnsi_b3",
14582
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14583
16
            NULL, HFILL }
14584
16
        },
14585
16
        { &hf_nas_5gs_mm_ex_cag_b4,
14586
16
        { "Extended CAG information list support (Ex-CAG)",   "nas-5gs.mm.ex_cag_b4",
14587
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14588
16
            NULL, HFILL }
14589
16
        },
14590
16
        { &hf_nas_5gs_mm_nsag_b5,
14591
16
        { "NSAG",   "nas-5gs.mm.nsag_b5",
14592
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14593
16
            NULL, HFILL }
14594
16
        },
14595
16
        { &hf_nas_5gs_mm_uas_b6,
14596
16
        { "UAS",   "nas-5gs.mm.uas_b6",
14597
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14598
16
            NULL, HFILL }
14599
16
        },
14600
16
        { &hf_nas_5gs_mm_mpsiu_b7,
14601
16
        { "MPS indicator update (MPSIU)",   "nas-5gs.mm.mpsiu_b7",
14602
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14603
16
            NULL, HFILL }
14604
16
        },
14605
16
        { &hf_nas_5gs_mm_rcmap_b0,
14606
16
        { "Registration complete message for acknowledging negotiated PEIPS assistance information (RCMAP)",   "nas-5gs.mm.rcmap_b0",
14607
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14608
16
            NULL, HFILL }
14609
16
        },
14610
16
        { &hf_nas_5gs_mm_rcman_b1,
14611
16
        { "Registration complete message for acknowledging NSAG information (RCMAN)",   "nas-5gs.mm.rcman_b1",
14612
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14613
16
            NULL, HFILL }
14614
16
        },
14615
16
        { &hf_nas_5gs_mm_esi_b2,
14616
16
        { "Equivalent SNPNs indicator (ESI)",   "nas-5gs.mm.esi_b2",
14617
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14618
16
            NULL, HFILL }
14619
16
        },
14620
16
        { &hf_nas_5gs_mm_eci_b3,
14621
16
        { "Enhanced CAG information (ECI)",   "nas-5gs.mm.eci_b3",
14622
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14623
16
            NULL, HFILL }
14624
16
        },
14625
16
        { &hf_nas_5gs_mm_rantiming_b4,
14626
16
        { "Reconnection to the network due to RAN timing synchronization status change (RANtiming)",   "nas-5gs.mm.rantiming_b4",
14627
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14628
16
            NULL, HFILL }
14629
16
        },
14630
16
        { &hf_nas_5gs_mm_ladn_ds_b5,
14631
16
        { "LADN per DNN and S-NSSAI support (LADN-DS)",   "nas-5gs.mm.ladn_ds_b5",
14632
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14633
16
            NULL, HFILL }
14634
16
        },
14635
16
        { &hf_nas_5gs_mm_nsr_b6,
14636
16
        { "Network slice replacement (NSR)",   "nas-5gs.mm.nsr_b6",
14637
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14638
16
            NULL, HFILL }
14639
16
        },
14640
16
        { &hf_nas_5gs_mm_sbts_b7,
14641
16
        { "Slice-based TNGF selection support (SBTS)",   "nas-5gs.mm.sbts_b7",
14642
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14643
16
            NULL, HFILL }
14644
16
        },
14645
16
        { &hf_nas_5gs_mm_a2xepc5_b0,
14646
16
        { "A2X over E-UTRA-PC5 (A2XEPC5)",   "nas-5gs.mm.a2xepc5_b0",
14647
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14648
16
            NULL, HFILL }
14649
16
        },
14650
16
        { &hf_nas_5gs_mm_a2xnpc5_b1,
14651
16
        { "A2X over NR-PC5 (A2XNPC5)",   "nas-5gs.mm.a2xnpc5_b1",
14652
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14653
16
            NULL, HFILL }
14654
16
        },
14655
16
        { &hf_nas_5gs_mm_un_per_b2,
14656
16
        { "Unavailability period (UN-PER)",   "nas-5gs.mm.un_per_b2",
14657
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14658
16
            NULL, HFILL }
14659
16
        },
14660
16
        { &hf_nas_5gs_mm_sbns_b3,
14661
16
        { "Slice-based N3IWFselection support (SBNS)",   "nas-5gs.mm.sbns_b3",
14662
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14663
16
            NULL, HFILL }
14664
16
        },
14665
16
        { &hf_nas_5gs_mm_rslps_b4,
14666
16
        { "SL positioning server UE (RSLPS)",   "nas-5gs.mm.rslps_b4",
14667
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14668
16
            NULL, HFILL }
14669
16
        },
14670
16
        { &hf_nas_5gs_mm_5g_prose_l2u2u_relay_b5,
14671
16
        { "5G ProSe layer-2 UE-to-UE relay (5G ProSe-l2U2U relay)",   "nas-5gs.mm.5g_prose_l2u2u_relay_b5",
14672
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14673
16
            NULL, HFILL }
14674
16
        },
14675
16
        { &hf_nas_5gs_mm_5g_prose_l3u2u_relay_b6,
14676
16
        { "5G ProSe layer-3 UE-to-UE relay (5G ProSe-l3U2U relay)",   "nas-5gs.mm.5g_prose_l3u2u_relay_b6",
14677
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14678
16
            NULL, HFILL }
14679
16
        },
14680
16
        { &hf_nas_5gs_mm_5g_prose_l2end_b7,
14681
16
        { "5G ProSe layer-2 end UE (5G ProSe-l2end)",   "nas-5gs.mm.5g_prose_l2end_b7",
14682
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14683
16
            NULL, HFILL }
14684
16
        },
14685
16
        { &hf_nas_5gs_mm_5g_prose_l3end_b0,
14686
16
        { "5G ProSe layer-3 end UE (5G ProSe-l3end)",   "nas-5gs.mm.5g_prose_l3end_b0",
14687
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14688
16
            NULL, HFILL }
14689
16
        },
14690
16
        { &hf_nas_5gs_mm_rslp_b1,
14691
16
        { "Ranging and sidelink positioning support (RSLP)",   "nas-5gs.mm.rslp_b1",
14692
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14693
16
            NULL, HFILL }
14694
16
        },
14695
16
        { &hf_nas_5gs_mm_pns_b2,
14696
16
        { "Partial network slice (PNS)",   "nas-5gs.mm.pns_b2",
14697
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14698
16
            NULL, HFILL }
14699
16
        },
14700
16
        { &hf_nas_5gs_mm_lcs_upp_b3,
14701
16
        { "LCS-UPP user plane positioning (LCS-UPP)",   "nas-5gs.mm.lcs_upp_b3",
14702
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14703
16
            NULL, HFILL }
14704
16
        },
14705
16
        { &hf_nas_5gs_mm_supl_b4,
14706
16
        { "SUPL user plane positioning (SUPL)",   "nas-5gs.mm.supl_b4",
14707
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14708
16
            NULL, HFILL }
14709
16
        },
14710
16
        { &hf_nas_5gs_mm_tempns_b5,
14711
16
        { "S-NSSAI time validity information (TempNS)",   "nas-5gs.mm.tempns_b5",
14712
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14713
16
            NULL, HFILL }
14714
16
        },
14715
16
        { &hf_nas_5gs_mm_slvi_b6,
14716
16
        { "S-NSSAI location validity information (SLVI)",   "nas-5gs.mm.slvi_b6",
14717
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14718
16
            NULL, HFILL }
14719
16
        },
14720
16
        { &hf_nas_5gs_mm_a2x_uu_b7,
14721
16
        { "A2X over Uu capability (A2X-Uu)",   "nas-5gs.mm.a2x_uu_b7",
14722
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14723
16
            NULL, HFILL }
14724
16
        },
14725
16
        { &hf_nas_5gs_mm_mcsiu_b0,
14726
16
        { "MCS indicator update (MCSIU)",   "nas-5gs.mm.mcsiu_b0",
14727
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14728
16
            NULL, HFILL }
14729
16
        },
14730
16
        { &hf_nas_5gs_mm_nvl_satnr_b1,
14731
16
        { "Network verified UE location over satellite NG-RAN (NVL-SATNR)",   "nas-5gs.mm.nvl_satnr_b1",
14732
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14733
16
            NULL, HFILL }
14734
16
        },
14735
16
        { &hf_nas_5gs_rslpl_b2,
14736
16
        { "Ranging and sidelink positioning over PC5 for located UE support (RSLPL)",   "nas-5gs.mm.rslpl_b2",
14737
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14738
16
            NULL, HFILL }
14739
16
        },
14740
16
        { &hf_nas_5gs_nsuc_b3,
14741
16
        { "Network slice usage control (NSUC)",   "nas-5gs.mm.nsuc_b3",
14742
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14743
16
            NULL, HFILL }
14744
16
        },
14745
16
        { &hf_nas_5gs_rslpvu_b4,
14746
16
        { "Ranging and sidelink positioning with V2X capable UE (RSLPVU)",   "nas-5gs.mm.rslpvu_b4",
14747
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14748
16
            NULL, HFILL }
14749
16
        },
14750
16
        { &hf_nas_5gs_rslppu_b5,
14751
16
        { "Ranging and sidelink positioning with 5G ProSe capable UE support (RSLPPU)",   "nas-5gs.mm.rslppu_b5",
14752
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14753
16
            NULL, HFILL }
14754
16
        },
14755
16
        { &hf_nas_5gs_atuc_b6,
14756
16
        { "Access technology utilization control (ATUC)",   "nas-5gs.mm.atuc_b6",
14757
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14758
16
            NULL, HFILL }
14759
16
        },
14760
16
        { &hf_nas_5gs_lp_wuspsai_si_b7,
14761
16
        { "LP-WUSPS assistance information support indication (LP-WUSPSAI-SI)",   "nas-5gs.mm.lp_wuspsai_si_b7",
14762
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14763
16
            NULL, HFILL }
14764
16
        },
14765
16
        { &hf_nas_5gs_ophpae_b0,
14766
16
        { "Operator policy for high priority access exemptions for service area restrictions (OPHPAE)",   "nas-5gs.mm.ophpae_b0",
14767
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14768
16
            NULL, HFILL }
14769
16
        },
14770
16
        { &hf_nas_5gs_5g_prose_mci_b1,
14771
16
        { "5G ProSe Multi-hop relay communication indication (5G ProSe-MCI)",   "nas-5gs.mm.5g_prose_mci_b1",
14772
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14773
16
            NULL, HFILL }
14774
16
        },
14775
16
        { &hf_nas_5gs_mlcsup_b2,
14776
16
        { "Multiple LCS secured user plane connections (MLCSUP)",   "nas-5gs.mm.mlcsup_b2",
14777
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14778
16
            NULL, HFILL }
14779
16
        },
14780
16
        { &hf_nas_5gs_5g_prose_l3imrelay_b3,
14781
16
        { "5G ProSe layer-3 intermediate UE-to-network relay UE (5G ProSe-L3IMrelay)",   "nas-5gs.mm.5g_prose_l3imrelay_b3",
14782
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14783
16
            NULL, HFILL }
14784
16
        },
14785
16
        { &hf_nas_5gs_5g_prose_l2imrelay_b4,
14786
16
        { "5G ProSe layer-2 intermediate UE-to-network relay UE (5G ProSe-L2IMrelay)",   "nas-5gs.mm.5g_prose_l2imrelay_b4",
14787
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14788
16
            NULL, HFILL }
14789
16
        },
14790
16
        { &hf_nas_5gs_mint_eps_b5,
14791
16
        { "Minimization of service interruption support in EPS (MINT-EPS)",   "nas-5gs.mm.mint_eps_b5",
14792
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14793
16
            NULL, HFILL }
14794
16
        },
14795
16
        { &hf_nas_5gs_ef5l_b6,
14796
16
        { "ExtendedFacility IE for 5G LCS (EF5L)",   "nas-5gs.mm.ef5l_b6",
14797
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14798
16
            NULL, HFILL }
14799
16
        },
14800
16
        { &hf_nas_5gs_lwd_b7,
14801
16
        { "LP-WUS disabling (LWD)",   "nas-5gs.mm.lwd_b7",
14802
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14803
16
            NULL, HFILL }
14804
16
        },
14805
16
        { &hf_nas_5gs_nonsatlsp_b0,
14806
16
        { "Non satellite lower PLMN selection (NonSATLSP)",   "nas-5gs.mm.nonsatlsp_b0",
14807
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14808
16
            NULL, HFILL }
14809
16
        },
14810
16
        { &hf_nas_5gs_mm_type_id,
14811
16
        { "Type of identity",   "nas-5gs.mm.type_id",
14812
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_type_id_vals), 0x07,
14813
16
            NULL, HFILL }
14814
16
        },
14815
16
        { &hf_nas_5gs_mm_odd_even,
14816
16
        { "Odd/even indication","nas-5gs.mm.odd_even",
14817
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_odd_even_tfs), 0x08,
14818
16
            NULL, HFILL }
14819
16
        },
14820
16
        { &hf_nas_5gs_mm_length,
14821
16
        { "Length",   "nas-5gs.mm.length",
14822
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
14823
16
            NULL, HFILL }
14824
16
        },
14825
16
        { &hf_nas_5gs_mm_abba,
14826
16
        { "ABBA Contents",   "nas-5gs.mm.abba_contents",
14827
16
            FT_BYTES, BASE_NONE, NULL, 0x00,
14828
16
            NULL, HFILL }
14829
16
        },
14830
16
        { &hf_nas_5gs_mm_pld_cont,
14831
16
        { "Payload container",   "nas-5gs.mm.pld_cont",
14832
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
14833
16
            NULL, HFILL }
14834
16
        },
14835
16
        { &hf_nas_5gs_mm_pld_cont_event_notif_ind_nb,
14836
16
        { "Number of event notification indicators",   "nas-5gs.mm.pld_cont.event_notif_ind.nb",
14837
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
14838
16
            NULL, HFILL }
14839
16
        },
14840
16
        { &hf_nas_5gs_mm_pld_cont_event_notif_ind_type,
14841
16
        { "Type of event notification indicator",   "nas-5gs.mm.pld_cont.event_notif_ind.type",
14842
16
            FT_UINT8, BASE_HEX, VALS(nas_5gs_mm_pld_cont_event_notif_ind_type_vals), 0x0,
14843
16
            NULL, HFILL }
14844
16
        },
14845
16
        { &hf_nas_5gs_mm_pld_cont_event_notif_ind_len,
14846
16
        { "Length of event notification indicator",   "nas-5gs.mm.pld_cont.event_notif_ind.len",
14847
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
14848
16
            NULL, HFILL }
14849
16
        },
14850
16
        { &hf_nas_5gs_mm_pld_cont_event_notif_ind_val,
14851
16
        { "Value of event notification indicator",   "nas-5gs.mm.pld_cont.event_notif_ind.val",
14852
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
14853
16
            NULL, HFILL }
14854
16
        },
14855
16
        { &hf_nas_5gs_mm_pld_cont_nb_entries,
14856
16
        { "Number of entries",   "nas-5gs.mm.pld_cont.nb_entries",
14857
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
14858
16
            NULL, HFILL }
14859
16
        },
14860
16
        { &hf_nas_5gs_mm_pld_cont_pld_cont_len,
14861
16
        { "Length of Payload container entry",   "nas-5gs.mm.pld_cont.pld_cont_len",
14862
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
14863
16
            NULL, HFILL }
14864
16
        },
14865
16
        { &hf_nas_5gs_mm_pld_cont_nb_opt_ies,
14866
16
        { "Number of optional IEs",   "nas-5gs.mm.pld_cont.nb_opt_ies",
14867
16
            FT_UINT8, BASE_DEC, NULL, 0xf0,
14868
16
            NULL, HFILL }
14869
16
        },
14870
16
        { &hf_nas_5gs_mm_pld_cont_pld_cont_type,
14871
16
        { "Payload container type",   "nas-5gs.mm.pld_cont.pld_cont_type",
14872
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_pld_cont_type_vals), 0x0f,
14873
16
            NULL, HFILL }
14874
16
        },
14875
16
        { &hf_nas_5gs_mm_pld_cont_opt_ie_type,
14876
16
        { "Type of optional IE",   "nas-5gs.mm.pld_cont.opt_ie_type",
14877
16
            FT_UINT8, BASE_HEX, VALS(nas_5gs_mm_pld_cont_opt_ie_type_vals), 0x0,
14878
16
            NULL, HFILL }
14879
16
        },
14880
16
        { &hf_nas_5gs_mm_pld_cont_opt_ie_len,
14881
16
        { "Length of optional IE",   "nas-5gs.mm.pld_cont.opt_ie_len",
14882
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
14883
16
            NULL, HFILL }
14884
16
        },
14885
16
        { &hf_nas_5gs_mm_pld_cont_opt_ie_val,
14886
16
        { "Value of optional IE",   "nas-5gs.mm.pld_cont.opt_ie_val",
14887
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
14888
16
            NULL, HFILL }
14889
16
        },
14890
16
        { &hf_nas_5gs_mm_req_type,
14891
16
        { "Request type",   "nas-5gs.mm.req_type",
14892
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_req_type_vals), 0x07,
14893
16
            NULL, HFILL }
14894
16
        },
14895
16
        { &hf_nas_5gs_mm_serv_type,
14896
16
        { "Service type",   "nas-5gs.mm.serv_type",
14897
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_serv_type_vals), 0x70,
14898
16
            NULL, HFILL }
14899
16
        },
14900
16
        { &hf_nas_5gs_mm_5g_ea0,
14901
16
        { "5G-EA0","nas-5gs.mm.5g_ea0",
14902
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14903
16
            NULL, HFILL }
14904
16
        },
14905
16
        { &hf_nas_5gs_mm_128_5g_ea1,
14906
16
        { "128-5G-EA1","nas-5gs.mm.128_5g_ea1",
14907
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14908
16
            NULL, HFILL }
14909
16
        },
14910
16
        { &hf_nas_5gs_mm_128_5g_ea2,
14911
16
        { "128-5G-EA2","nas-5gs.mm.128_5g_ea2",
14912
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14913
16
            NULL, HFILL }
14914
16
        },
14915
16
        { &hf_nas_5gs_mm_128_5g_ea3,
14916
16
        { "128-5G-EA3","nas-5gs.mm.128_5g_ea3",
14917
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14918
16
            NULL, HFILL }
14919
16
        },
14920
16
        { &hf_nas_5gs_mm_5g_ea4,
14921
16
        { "5G-EA4","nas-5gs.mm.5g_ea4",
14922
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14923
16
            NULL, HFILL }
14924
16
        },
14925
16
        { &hf_nas_5gs_mm_5g_ea5,
14926
16
        { "5G-EA5","nas-5gs.mm.5g_ea5",
14927
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14928
16
            NULL, HFILL }
14929
16
        },
14930
16
        { &hf_nas_5gs_mm_5g_ea6,
14931
16
        { "5G-EA6","nas-5gs.mm.5g_ea6",
14932
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14933
16
            NULL, HFILL }
14934
16
        },
14935
16
        { &hf_nas_5gs_mm_5g_ea7,
14936
16
        { "5G-EA7","nas-5gs.mm.5g_ea7",
14937
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14938
16
            NULL, HFILL }
14939
16
        },
14940
16
        { &hf_nas_5gs_mm_5g_ia0,
14941
16
        { "5G-IA0","nas-5gs.mm.ia0",
14942
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14943
16
            NULL, HFILL }
14944
16
        },
14945
16
        { &hf_nas_5gs_mm_5g_128_ia1,
14946
16
        { "128-5G-IA1","nas-5gs.mm.5g_128_ia1",
14947
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14948
16
            NULL, HFILL }
14949
16
        },
14950
16
        { &hf_nas_5gs_mm_5g_128_ia2,
14951
16
        { "128-5G-IA2","nas-5gs.mm.5g_128_ia2",
14952
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14953
16
            NULL, HFILL }
14954
16
        },
14955
16
        { &hf_nas_5gs_mm_5g_128_ia3,
14956
16
        { "128-5G-IA3","nas-5gs.mm.5g_128_ia3",
14957
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14958
16
            NULL, HFILL }
14959
16
        },
14960
16
        { &hf_nas_5gs_mm_5g_ia4,
14961
16
        { "5G-IA4","nas-5gs.mm.5g_128_ia4",
14962
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14963
16
            NULL, HFILL }
14964
16
        },
14965
16
        { &hf_nas_5gs_mm_5g_ia5,
14966
16
        { "5G-IA5","nas-5gs.mm.5g_ia5",
14967
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14968
16
            NULL, HFILL }
14969
16
        },
14970
16
        { &hf_nas_5gs_mm_5g_ia6,
14971
16
        { "5G-IA6","nas-5gs.mm.5g_ia6",
14972
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14973
16
            NULL, HFILL }
14974
16
        },
14975
16
        { &hf_nas_5gs_mm_5g_ia7,
14976
16
        { "5G-IA7","nas-5gs.mm.5g_ia7",
14977
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14978
16
            NULL, HFILL }
14979
16
        },
14980
16
        { &hf_nas_5gs_mm_eea0,
14981
16
        { "EEA0","nas-5gs.mm.eea0",
14982
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14983
16
            NULL, HFILL }
14984
16
        },
14985
16
        { &hf_nas_5gs_mm_128eea1,
14986
16
        { "128-EEA1","nas-5gs.mm.128eea1",
14987
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14988
16
            NULL, HFILL }
14989
16
        },
14990
16
        { &hf_nas_5gs_mm_128eea2,
14991
16
        { "128-EEA2","nas-5gs.mm.128eea2",
14992
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14993
16
            NULL, HFILL }
14994
16
        },
14995
16
        { &hf_nas_5gs_mm_eea3,
14996
16
        { "128-EEA3","nas-5gs.mm.eea3",
14997
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14998
16
            NULL, HFILL }
14999
16
        },
15000
16
        { &hf_nas_5gs_mm_eea4,
15001
16
        { "EEA4","nas-5gs.mm.eea4",
15002
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
15003
16
            NULL, HFILL }
15004
16
        },
15005
16
        { &hf_nas_5gs_mm_eea5,
15006
16
        { "EEA5","nas-5gs.mm.eea5",
15007
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15008
16
            NULL, HFILL }
15009
16
        },
15010
16
        { &hf_nas_5gs_mm_eea6,
15011
16
        { "EEA6","nas-5gs.mm.eea6",
15012
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15013
16
            NULL, HFILL }
15014
16
        },
15015
16
        { &hf_nas_5gs_mm_eea7,
15016
16
        { "EEA7","nas-5gs.mm.eea7",
15017
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15018
16
            NULL, HFILL }
15019
16
        },
15020
16
        { &hf_nas_5gs_mm_eia0,
15021
16
        { "EIA0","nas-5gs.mm.eia0",
15022
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
15023
16
            NULL, HFILL }
15024
16
        },
15025
16
        { &hf_nas_5gs_mm_128eia1,
15026
16
        { "128-EIA1","nas-5gs.mm.128eia1",
15027
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
15028
16
            NULL, HFILL }
15029
16
        },
15030
16
        { &hf_nas_5gs_mm_128eia2,
15031
16
        { "128-EIA2","nas-5gs.mm.128eia2",
15032
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
15033
16
            NULL, HFILL }
15034
16
        },
15035
16
        { &hf_nas_5gs_mm_eia3,
15036
16
        { "128-EIA3","nas-5gs.mm.eia3",
15037
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
15038
16
            NULL, HFILL }
15039
16
        },
15040
16
        { &hf_nas_5gs_mm_eia4,
15041
16
        { "EIA4","nas-5gs.mm.eia4",
15042
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
15043
16
            NULL, HFILL }
15044
16
        },
15045
16
        { &hf_nas_5gs_mm_eia5,
15046
16
        { "EIA5","nas-5gs.mm.eia5",
15047
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15048
16
            NULL, HFILL }
15049
16
        },
15050
16
        { &hf_nas_5gs_mm_eia6,
15051
16
        { "EIA6","nas-5gs.mm.eia6",
15052
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15053
16
            NULL, HFILL }
15054
16
        },
15055
16
        { &hf_nas_5gs_mm_eia7,
15056
16
        { "EIA7","nas-5gs.mm.eia7",
15057
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15058
16
            NULL, HFILL }
15059
16
        },
15060
16
        { &hf_nas_5gs_mm_n1_mode_reg_b1,
15061
16
        { "N1 mode reg","nas-5gs.mm.n1_mode_reg_b1",
15062
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_n1_mod), 0x02,
15063
16
            NULL, HFILL }
15064
16
        },
15065
16
        { &hf_nas_5gs_mm_s1_mode_reg_b0,
15066
16
        { "S1 mode reg","nas-5gs.mm.s1_mode_reg_b0",
15067
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_s1_mod), 0x01,
15068
16
            NULL, HFILL }
15069
16
        },
15070
16
        { &hf_nas_5gs_mm_sal_al_t,
15071
16
        { "Allowed type","nas-5gs.mm.sal_al_t",
15072
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_sal_al_t), 0x80,
15073
16
            NULL, HFILL }
15074
16
        },
15075
16
        { &hf_nas_5gs_mm_sal_t_li,
15076
16
        { "Type of list",   "nas-5gs.mm.sal_t_li",
15077
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_sal_t_li_values), 0x60,
15078
16
            NULL, HFILL }
15079
16
        },
15080
16
        { &hf_nas_5gs_mm_sal_num_e,
15081
16
        { "Number of elements",   "nas-5gs.mm.sal_num_e",
15082
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_sal_num_e_vals), 0x1f,
15083
16
            NULL, HFILL }
15084
16
        },
15085
16
        { &hf_nas_5gs_sm_pdu_session_type,
15086
16
        { "PDU session type",   "nas-5gs.sm.pdu_session_type",
15087
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_pdu_session_type_values), 0x07,
15088
16
            NULL, HFILL }
15089
16
        },
15090
16
        { &hf_nas_5gs_pdu_ses_sts_psi_0_b0,
15091
16
        { "Spare","nas-5gs.pdu_ses_sts_psi_0_b0",
15092
16
            FT_BOOLEAN, 8, NULL, 0x01,
15093
16
            NULL, HFILL }
15094
16
        },
15095
16
        { &hf_nas_5gs_pdu_ses_sts_psi_1_b1,
15096
16
        { "PSI(1)","nas-5gs.pdu_ses_sts_psi_1_b1",
15097
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x02,
15098
16
            NULL, HFILL }
15099
16
        },
15100
16
        { &hf_nas_5gs_pdu_ses_sts_psi_2_b2,
15101
16
        { "PSI(2)","nas-5gs.pdu_ses_sts_psi_2_b2",
15102
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x04,
15103
16
            NULL, HFILL }
15104
16
        },
15105
16
        { &hf_nas_5gs_pdu_ses_sts_psi_3_b3,
15106
16
        { "PSI(3)","nas-5gs.pdu_ses_sts_psi_3_b3",
15107
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x08,
15108
16
            NULL, HFILL }
15109
16
        },
15110
16
        { &hf_nas_5gs_pdu_ses_sts_psi_4_b4,
15111
16
        { "PSI(4)","nas-5gs.pdu_ses_sts_psi_4_b4",
15112
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x10,
15113
16
            NULL, HFILL }
15114
16
        },
15115
16
        { &hf_nas_5gs_pdu_ses_sts_psi_5_b5,
15116
16
        { "PSI(5)","nas-5gs.pdu_ses_sts_psi_5_b5",
15117
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x20,
15118
16
            NULL, HFILL }
15119
16
        },
15120
16
        { &hf_nas_5gs_pdu_ses_sts_psi_6_b6,
15121
16
        { "PSI(6)","nas-5gs.pdu_ses_sts_psi_6_b6",
15122
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x40,
15123
16
            NULL, HFILL }
15124
16
        },
15125
16
        { &hf_nas_5gs_pdu_ses_sts_psi_7_b7,
15126
16
        { "PSI(7)","nas-5gs.pdu_ses_sts_psi_7_b7",
15127
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x80,
15128
16
            NULL, HFILL }
15129
16
        },
15130
16
        { &hf_nas_5gs_pdu_ses_sts_psi_8_b0,
15131
16
        { "PSI(8)","nas-5gs.pdu_ses_sts_psi_8_b0",
15132
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x01,
15133
16
            NULL, HFILL }
15134
16
        },
15135
16
        { &hf_nas_5gs_pdu_ses_sts_psi_9_b1,
15136
16
        { "PSI(9)","nas-5gs.pdu_ses_sts_psi_9_b1",
15137
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x02,
15138
16
            NULL, HFILL }
15139
16
        },
15140
16
        { &hf_nas_5gs_pdu_ses_sts_psi_10_b2,
15141
16
        { "PSI(10)","nas-5gs.pdu_ses_sts_psi_10_b2",
15142
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x04,
15143
16
            NULL, HFILL }
15144
16
        },
15145
16
        { &hf_nas_5gs_pdu_ses_sts_psi_11_b3,
15146
16
        { "PSI(11)","nas-5gs.pdu_ses_sts_psi_11_b3",
15147
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x08,
15148
16
            NULL, HFILL }
15149
16
        },
15150
16
        { &hf_nas_5gs_pdu_ses_sts_psi_12_b4,
15151
16
        { "PSI(12)","nas-5gs.pdu_ses_sts_psi_12_b4",
15152
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x10,
15153
16
            NULL, HFILL }
15154
16
        },
15155
16
        { &hf_nas_5gs_pdu_ses_sts_psi_13_b5,
15156
16
        { "PSI(13)","nas-5gs.pdu_ses_sts_psi_13_b5",
15157
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x20,
15158
16
            NULL, HFILL }
15159
16
        },
15160
16
        { &hf_nas_5gs_pdu_ses_sts_psi_14_b6,
15161
16
        { "PSI(14)","nas-5gs.pdu_ses_sts_psi_14_b6",
15162
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x40,
15163
16
            NULL, HFILL }
15164
16
        },
15165
16
        { &hf_nas_5gs_pdu_ses_sts_psi_15_b7,
15166
16
        { "PSI(15)","nas-5gs.pdu_ses_sts_psi_15_b7",
15167
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_sts_psi), 0x80,
15168
16
            NULL, HFILL }
15169
16
        },
15170
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_0_b0,
15171
16
        { "PSI(0) Spare","nas-5gs.pdu_ses_rect_res_psi_0_b0",
15172
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x01,
15173
16
            NULL, HFILL }
15174
16
        },
15175
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_1_b1,
15176
16
        { "PSI(1)","nas-5gs.pdu_ses_rect_res_psi_1_b1",
15177
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x02,
15178
16
            NULL, HFILL }
15179
16
        },
15180
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_2_b2,
15181
16
        { "PSI(2)","nas-5gs.pdu_ses_rect_res_psi_2_b2",
15182
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x04,
15183
16
            NULL, HFILL }
15184
16
        },
15185
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_3_b3,
15186
16
        { "PSI(3)","nas-5gs.pdu_ses_rect_res_psi_3_b3",
15187
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x08,
15188
16
            NULL, HFILL }
15189
16
        },
15190
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_4_b4,
15191
16
        { "PSI(4)","nas-5gs.pdu_ses_rect_res_psi_4_b4",
15192
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x10,
15193
16
            NULL, HFILL }
15194
16
        },
15195
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_5_b5,
15196
16
        { "PSI(5)","nas-5gs.pdu_ses_rect_res_psi_5_b5",
15197
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x20,
15198
16
            NULL, HFILL }
15199
16
        },
15200
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_6_b6,
15201
16
        { "PSI(6)","nas-5gs.pdu_ses_rect_res_psi_6_b6",
15202
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x40,
15203
16
            NULL, HFILL }
15204
16
        },
15205
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_7_b7,
15206
16
        { "PSI(7)","nas-5gs.pdu_ses_rect_res_psi_7_b7",
15207
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x80,
15208
16
            NULL, HFILL }
15209
16
        },
15210
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_8_b0,
15211
16
        { "PSI(8)","nas-5gs.pdu_ses_rect_res_psi_8_b0",
15212
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x01,
15213
16
            NULL, HFILL }
15214
16
        },
15215
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_9_b1,
15216
16
        { "PSI(9)","nas-5gs.pdu_ses_rect_res_psi_9_b1",
15217
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x02,
15218
16
            NULL, HFILL }
15219
16
        },
15220
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_10_b2,
15221
16
        { "PSI(10)","nas-5gs.pdu_ses_rect_res_psi_10_b2",
15222
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x04,
15223
16
            NULL, HFILL }
15224
16
        },
15225
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_11_b3,
15226
16
        { "PSI(11)","nas-5gs.pdu_ses_rect_res_psi_11_b3",
15227
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x08,
15228
16
            NULL, HFILL }
15229
16
        },
15230
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_12_b4,
15231
16
        { "PSI(12)","nas-5gs.pdu_ses_rect_res_psi_12_b4",
15232
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x10,
15233
16
            NULL, HFILL }
15234
16
        },
15235
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_13_b5,
15236
16
        { "PSI(13)","nas-5gs.pdu_ses_res_psi_13_b5",
15237
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x20,
15238
16
            NULL, HFILL }
15239
16
        },
15240
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_14_b6,
15241
16
        { "PSI(14)","nas-5gs.pdu_ses_res_psi_14_b6",
15242
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x40,
15243
16
            NULL, HFILL }
15244
16
        },
15245
16
        { &hf_nas_5gs_pdu_ses_rect_res_psi_15_b7,
15246
16
        { "PSI(15)","nas-5gs.pdu_ses_res_psi_15_b7",
15247
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_pdu_ses_rect_res_psi), 0x80,
15248
16
            NULL, HFILL }
15249
16
        },
15250
16
        { &hf_nas_5gs_ul_data_sts_psi_0_b0,
15251
16
        { "Spare","nas-5gs.ul_data_sts_psi_0_b0",
15252
16
            FT_BOOLEAN, 8, NULL, 0x01,
15253
16
            NULL, HFILL }
15254
16
        },
15255
16
        { &hf_nas_5gs_ul_data_sts_psi_1_b1,
15256
16
        { "PSI(1)","nas-5gs.ul_data_sts_psi_1_b1",
15257
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x02,
15258
16
            NULL, HFILL }
15259
16
        },
15260
16
        { &hf_nas_5gs_ul_data_sts_psi_2_b2,
15261
16
        { "PSI(2)","nas-5gs.ul_data_sts_psi_2_b2",
15262
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x04,
15263
16
            NULL, HFILL }
15264
16
        },
15265
16
        { &hf_nas_5gs_ul_data_sts_psi_3_b3,
15266
16
        { "PSI(3)","nas-5gs.ul_data_sts_psi_3_b3",
15267
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x08,
15268
16
            NULL, HFILL }
15269
16
        },
15270
16
        { &hf_nas_5gs_ul_data_sts_psi_4_b4,
15271
16
        { "PSI(4)","nas-5gs.ul_data_sts_psi_4_b4",
15272
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x10,
15273
16
            NULL, HFILL }
15274
16
        },
15275
16
        { &hf_nas_5gs_ul_data_sts_psi_5_b5,
15276
16
        { "PSI(5)","nas-5gs.ul_data_sts_psi_5_b5",
15277
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x20,
15278
16
            NULL, HFILL }
15279
16
        },
15280
16
        { &hf_nas_5gs_ul_data_sts_psi_6_b6,
15281
16
        { "PSI(6)","nas-5gs.ul_data_sts_psi_6_b6",
15282
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x40,
15283
16
            NULL, HFILL }
15284
16
        },
15285
16
        { &hf_nas_5gs_ul_data_sts_psi_7_b7,
15286
16
        { "PSI(7)","nas-5gs.ul_data_sts_psi_7_b7",
15287
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x80,
15288
16
            NULL, HFILL }
15289
16
        },
15290
16
        { &hf_nas_5gs_ul_data_sts_psi_8_b0,
15291
16
        { "PSI(8)","nas-5gs.ul_data_sts_psi_8_b0",
15292
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x01,
15293
16
            NULL, HFILL }
15294
16
        },
15295
16
        { &hf_nas_5gs_ul_data_sts_psi_9_b1,
15296
16
        { "PSI(9)","nas-5gs.ul_data_sts_psi_9_b1",
15297
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x02,
15298
16
            NULL, HFILL }
15299
16
        },
15300
16
        { &hf_nas_5gs_ul_data_sts_psi_10_b2,
15301
16
        { "PSI(10)","nas-5gs.ul_data_sts_psi_10_b2",
15302
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x04,
15303
16
            NULL, HFILL }
15304
16
        },
15305
16
        { &hf_nas_5gs_ul_data_sts_psi_11_b3,
15306
16
        { "PSI(11)","nas-5gs.ul_data_sts_psi_11_b3",
15307
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x08,
15308
16
            NULL, HFILL }
15309
16
        },
15310
16
        { &hf_nas_5gs_ul_data_sts_psi_12_b4,
15311
16
        { "PSI(12)","nas-5gs.ul_data_sts_psi_12_b4",
15312
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x10,
15313
16
            NULL, HFILL }
15314
16
        },
15315
16
        { &hf_nas_5gs_ul_data_sts_psi_13_b5,
15316
16
        { "PSI(13)","nas-5gs.ul_data_sts_psi_13_b5",
15317
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x20,
15318
16
            NULL, HFILL }
15319
16
        },
15320
16
        { &hf_nas_5gs_ul_data_sts_psi_14_b6,
15321
16
        { "PSI(14)","nas-5gs.ul_data_sts_psi_14_b6",
15322
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x40,
15323
16
            NULL, HFILL }
15324
16
        },
15325
16
        { &hf_nas_5gs_ul_data_sts_psi_15_b7,
15326
16
        { "PSI(15)","nas-5gs.ul_data_sts_psi_15_b7",
15327
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_ul_data_sts_psi), 0x80,
15328
16
            NULL, HFILL }
15329
16
        },
15330
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_0_b0,
15331
16
        { "Spare","nas-5gs.allow_pdu_ses_sts_psi_0_b0",
15332
16
            FT_BOOLEAN, 8, NULL, 0x01,
15333
16
            NULL, HFILL }
15334
16
        },
15335
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_1_b1,
15336
16
        { "PSI(1)","nas-5gs.allow_pdu_ses_sts_psi_1_b1",
15337
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x02,
15338
16
            NULL, HFILL }
15339
16
        },
15340
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_2_b2,
15341
16
        { "PSI(2)","nas-5gs.allow_pdu_ses_sts_psi_2_b2",
15342
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x04,
15343
16
            NULL, HFILL }
15344
16
        },
15345
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_3_b3,
15346
16
        { "PSI(3)","nas-5gs.allow_pdu_ses_sts_psi_3_b3",
15347
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x08,
15348
16
            NULL, HFILL }
15349
16
        },
15350
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_4_b4,
15351
16
        { "PSI(4)","nas-5gs.allow_pdu_ses_sts_psi_4_b4",
15352
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x10,
15353
16
            NULL, HFILL }
15354
16
        },
15355
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_5_b5,
15356
16
        { "PSI(5)","nas-5gs.allow_pdu_ses_sts_psi_5_b5",
15357
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x20,
15358
16
            NULL, HFILL }
15359
16
        },
15360
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_6_b6,
15361
16
        { "PSI(6)","nas-5gs.allow_pdu_ses_sts_psi_6_b6",
15362
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x40,
15363
16
            NULL, HFILL }
15364
16
        },
15365
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_7_b7,
15366
16
        { "PSI(7)","nas-5gs.allow_pdu_ses_sts_psi_7_b7",
15367
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x80,
15368
16
            NULL, HFILL }
15369
16
        },
15370
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_8_b0,
15371
16
        { "PSI(8)","nas-5gs.allow_pdu_ses_sts_psi_8_b0",
15372
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x01,
15373
16
            NULL, HFILL }
15374
16
        },
15375
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_9_b1,
15376
16
        { "PSI(9)","nas-5gs.allow_pdu_ses_sts_psi_9_b1",
15377
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x02,
15378
16
            NULL, HFILL }
15379
16
        },
15380
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_10_b2,
15381
16
        { "PSI(10)","nas-5gs.allow_pdu_ses_sts_psi_10_b2",
15382
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x04,
15383
16
            NULL, HFILL }
15384
16
        },
15385
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_11_b3,
15386
16
        { "PSI(11)","nas-5gs.allow_pdu_ses_sts_psi_11_b3",
15387
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x08,
15388
16
            NULL, HFILL }
15389
16
        },
15390
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_12_b4,
15391
16
        { "PSI(12)","nas-5gs.allow_pdu_ses_sts_psi_12_b4",
15392
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x10,
15393
16
            NULL, HFILL }
15394
16
        },
15395
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_13_b5,
15396
16
        { "PSI(13)","nas-5gs.allow_pdu_ses_sts_psi_13_b5",
15397
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x20,
15398
16
            NULL, HFILL }
15399
16
        },
15400
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_14_b6,
15401
16
        { "PSI(14)","nas-5gs.allow_pdu_ses_sts_psi_14_b6",
15402
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x40,
15403
16
            NULL, HFILL }
15404
16
        },
15405
16
        { &hf_nas_5gs_allow_pdu_ses_sts_psi_15_b7,
15406
16
        { "PSI(15)","nas-5gs.allow_pdu_ses_sts_psi_15_b7",
15407
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_allow_pdu_ses_sts_psi), 0x80,
15408
16
            NULL, HFILL }
15409
16
        },
15410
16
        { &hf_nas_5gs_sm_sc_mode,
15411
16
        { "SSC mode",   "nas-5gs.sm.sc_mode",
15412
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sc_mode_values), 0x07,
15413
16
            NULL, HFILL }
15414
16
        },
15415
16
        { &hf_nas_5gs_sm_eplmnc,
15416
16
        { "EPLMNC",   "nas-5gs.sm.eplmnc",
15417
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_sm_eplmnc), 0x02,
15418
16
            NULL, HFILL }
15419
16
        },
15420
16
        { &hf_nas_5gs_sm_ratc,
15421
16
        { "RATC",   "nas-5gs.sm.ratc",
15422
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_sm_ratc), 0x01,
15423
16
            NULL, HFILL }
15424
16
        },
15425
16
        { &hf_nas_5gs_sm_naps,
15426
16
        { "Non-3GPP access path switching (NAPS)",   "nas-5gs.sm.naps",
15427
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15428
16
            NULL, HFILL }
15429
16
        },
15430
16
        { &hf_nas_5gs_sm_ept_s1,
15431
16
        { "Ethernet PDN type in S1 mode (EPT-S1)",   "nas-5gs.sm.ept_s1",
15432
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15433
16
            NULL, HFILL }
15434
16
        },
15435
16
        { &hf_nas_5gs_sm_catbo,
15436
16
        { "Current Access Type Back-off timer (CATBO)",   "nas-5gs.sm.catbo",
15437
16
            FT_BOOLEAN, 8, TFS(&tfs_5gs_sm_catbo), 0x02,
15438
16
            NULL, HFILL }
15439
16
        },
15440
16
        { &hf_nas_5gs_sm_abo,
15441
16
        { "All PLMNs Back-off timer (ABO)",   "nas-5gs.sm.abo",
15442
16
            FT_BOOLEAN, 8, TFS(&tfs_5gs_sm_abo), 0x01,
15443
16
            NULL, HFILL }
15444
16
        },
15445
16
        { &hf_nas_5gs_sm_atsss_cont,
15446
16
        { "ATSSS container contents",   "nas-5gs.sm.atsss_cont",
15447
16
            FT_BYTES, BASE_NONE, NULL, 0,
15448
16
            NULL, HFILL }
15449
16
        },
15450
16
        { &hf_nas_5gs_sm_cpoi,
15451
16
        { "Control plane only indication value (CPOI)",   "nas-5gs.sm.cpoi",
15452
16
            FT_BOOLEAN, 8, TFS(&tfs_5gs_sm_cpoi), 0x01,
15453
16
            NULL, HFILL }
15454
16
        },
15455
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_p0104,
15456
16
        { "RoHC profile 0x0104 (IP)", "nas-5gs.sm.ip_hdr_comp_config.p0104",
15457
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
15458
16
            NULL, HFILL }
15459
16
        },
15460
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_p0103,
15461
16
        { "RoHC profile 0x0103 (ESP/IP)", "nas-5gs.sm.ip_hdr_comp_config.p0103",
15462
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
15463
16
            NULL, HFILL }
15464
16
        },
15465
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_p0102,
15466
16
        { "RoHC profile 0x0102 (UDP/IP)", "nas-5gs.sm.ip_hdr_comp_config.p0102",
15467
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
15468
16
            NULL, HFILL }
15469
16
        },
15470
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_p0006,
15471
16
        { "RoHC profile 0x0006 (TCP/IP)", "nas-5gs.sm.ip_hdr_comp_config.p0006",
15472
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
15473
16
            NULL, HFILL }
15474
16
        },
15475
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_p0004,
15476
16
        { "RoHC profile 0x0004 (IP)", "nas-5gs.sm.ip_hdr_comp_config.p0004",
15477
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15478
16
            NULL, HFILL }
15479
16
        },
15480
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_p0003,
15481
16
        { "RoHC profile 0x0003 (ESP/IP)", "nas-5gs.sm.ip_hdr_comp_config.p0003",
15482
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15483
16
            NULL, HFILL }
15484
16
        },
15485
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_p0002,
15486
16
        { "RoHC profile 0x0002 (UDP/IP)", "nas-5gs.sm.ip_hdr_comp_config.p0002",
15487
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15488
16
            NULL, HFILL }
15489
16
        },
15490
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_max_cid,
15491
16
        { "MAX_CID", "nas-5gs.sm.ip_hdr_comp_config.max_cid",
15492
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
15493
16
            NULL, HFILL }
15494
16
        },
15495
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_add_ip_hdr_compr_cxt_setup_params_type,
15496
16
        { "Additional header compression context setup parameters type", "nas-5gs.sm.ip_hdr_comp_config.add_hdr_compr_cxt_setup_params_type",
15497
16
            FT_UINT8, BASE_HEX, VALS(nas_5gs_sm_ip_hdr_comp_config_add_ip_hdr_compr_cxt_setup_params_type_vals), 0x0,
15498
16
            NULL, HFILL }
15499
16
        },
15500
16
        { &hf_nas_5gs_sm_ip_hdr_comp_config_add_ip_hdr_compr_cxt_setup_params_cont,
15501
16
        { "Additional header compression context setup parameters container", "nas-5gs.sm.ip_hdr_comp_config.add_hdr_compr_cxt_setup_params_cont",
15502
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15503
16
            NULL, HFILL }
15504
16
        },
15505
16
        { &hf_nas_5gs_sm_ds_tt_eth_port_mac_addr,
15506
16
        { "DS-TT Ethernet port MAC address", "nas-5gs.sm.ds_tt_eth_port_mac_addr",
15507
16
            FT_ETHER, BASE_NONE, NULL, 0x0,
15508
16
            NULL, HFILL }
15509
16
        },
15510
16
        { &hf_nas_5gs_sm_ue_ds_tt_residence_time,
15511
16
        { "UE-DS-TT residence time", "nas-5gs.sm.ue_ds_tt_residence_time",
15512
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15513
16
            NULL, HFILL }
15514
16
        },
15515
16
        { &hf_nas_5gs_sm_port_mgmt_info_cont,
15516
16
        { "Port management information container", "nas-5gs.sm.port_mgmt_info_cont",
15517
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15518
16
            NULL, HFILL }
15519
16
        },
15520
16
        { &hf_nas_5gs_sm_eth_hdr_comp_config_cid_len,
15521
16
        { "Port management information container", "nas-5gs.sm.eth_hdr_comp_config.cid_len",
15522
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_eth_hdr_comp_config_cid_len_vals), 0x03,
15523
16
            NULL, HFILL }
15524
16
        },
15525
16
        { &hf_nas_5gs_sm_pdu_session_pair_id,
15526
16
        { "PDU session pair ID", "nas-5gs.sm.pdu_session_pair_id",
15527
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15528
16
            NULL, HFILL }
15529
16
        },
15530
16
        { &hf_nas_5gs_sm_pdu_session_rsn,
15531
16
        { "RSN", "nas-5gs.sm.rsn",
15532
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_pdu_session_rsn_vals), 0x0,
15533
16
            NULL, HFILL }
15534
16
        },
15535
16
        { &hf_nas_5gs_sm_ecn_mark_l4s_ind_qri,
15536
16
        { "ECN marking for L4S indication QRI", "nas-5gs.sm.ecn_mark_l4s_ind.qri",
15537
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15538
16
            NULL, HFILL }
15539
16
        },
15540
15541
16
        { &hf_nas_5gs_sm_remote_ue_ctx_list_nb_ue_ctx,
15542
16
        { "Number of remote UE contexts", "nas-5gs.sm.remote_ue_ctx_list.nb_ue_ctx",
15543
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15544
16
            NULL, HFILL }
15545
16
        },
15546
16
        { &hf_nas_5gs_sm_remote_ue_ctx_len,
15547
16
        { "Length of remote UE context", "nas-5gs.sm.remote_ue_ctx.len",
15548
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15549
16
            NULL, HFILL }
15550
16
        },
15551
16
        { &hf_nas_5gs_sm_remote_ue_ctx_addr_type,
15552
16
        { "Address type", "nas-5gs.sm.remote_ue_ctx.addr_type",
15553
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
15554
16
            NULL, HFILL }
15555
16
        },
15556
16
        { &hf_nas_5gs_sm_remote_ue_ctx_userid_len,
15557
16
        { "User ID length", "nas-5gs.sm.remote_ue_ctx.userid_len",
15558
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15559
16
            NULL, HFILL }
15560
16
        },
15561
16
        { &hf_nas_5gs_sm_remote_ue_ctx_userid,
15562
16
        { "User ID", "nas-5gs.sm.remote_ue_ctx.userid",
15563
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15564
16
            NULL, HFILL }
15565
16
        },
15566
16
        { &hf_nas_5gs_sm_remote_ue_ctx_ipv4,
15567
16
        { "IPv4 address", "nas-5gs.sm.remote_ue_ctx.ipv4",
15568
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
15569
16
            NULL, HFILL }
15570
16
        },
15571
16
        { &hf_nas_5gs_sm_remote_ue_ctx_ipv6,
15572
16
        { "IPv6 address", "nas-5gs.sm.remote_ue_ctx.ipv6",
15573
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
15574
16
            NULL, HFILL }
15575
16
        },
15576
16
        { &hf_nas_5gs_sm_remote_ue_ctx_ipv6_pfx_len,
15577
16
        { "IPv6 prefix length", "nas-5gs.sm.remote_ue_ctx.ipv6_pfx_len",
15578
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15579
16
            NULL, HFILL }
15580
16
        },
15581
15582
16
        { &hf_nas_5gs_sm_req_mbs_cont_num_sess,
15583
16
        { "Number of MBS session infos", "nas-5gs.sm.req_mbs_cont.num_sess",
15584
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15585
16
            NULL, HFILL }
15586
16
        },
15587
16
        { &hf_nas_5gs_sm_req_mbs_sess_info_len,
15588
16
        { "MBS session info length", "nas-5gs.sm.req_mbs.sess_info_len",
15589
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
15590
16
            NULL, HFILL }
15591
16
        },
15592
16
        { &hf_nas_5gs_sm_req_mbs_sess_op,
15593
16
        { "MBS session operation", "nas-5gs.sm.req_mbs.sess_op",
15594
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_req_mbs_sess_op_vals), 0x80,
15595
16
            NULL, HFILL }
15596
16
        },
15597
16
        { &hf_nas_5gs_sm_req_mbs_sess_id_type,
15598
16
        { "Type of MBS session ID", "nas-5gs.sm.req_mbs.sess_id_type",
15599
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_mbs_sess_id_type_vals), 0x03,
15600
16
            NULL, HFILL }
15601
16
        },
15602
16
        { &hf_nas_5gs_sm_req_mbs_tmgi,
15603
16
        { "TMGI", "nas-5gs.sm.req_mbs.tmgi",
15604
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15605
16
            NULL, HFILL }
15606
16
        },
15607
16
        { &hf_nas_5gs_sm_req_mbs_src_ipv4,
15608
16
        { "Source IPv4 address", "nas-5gs.sm.req_mbs.src_ipv4",
15609
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
15610
16
            NULL, HFILL }
15611
16
        },
15612
16
        { &hf_nas_5gs_sm_req_mbs_mcast_ipv4,
15613
16
        { "Multicast IPv4 address", "nas-5gs.sm.req_mbs.mcast_ipv4",
15614
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
15615
16
            NULL, HFILL }
15616
16
        },
15617
16
        { &hf_nas_5gs_sm_req_mbs_src_ipv6,
15618
16
        { "Source IPv6 address", "nas-5gs.sm.req_mbs.src_ipv6",
15619
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
15620
16
            NULL, HFILL }
15621
16
        },
15622
16
        { &hf_nas_5gs_sm_req_mbs_mcast_ipv6,
15623
16
        { "Multicast IPv6 address", "nas-5gs.sm.req_mbs.mcast_ipv6",
15624
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
15625
16
            NULL, HFILL }
15626
16
        },
15627
15628
16
        { &hf_nas_5gs_sm_rec_mbs_cont_num_sess,
15629
16
        { "Number of received MBS infos", "nas-5gs.sm.rec_mbs_cont.num_sess",
15630
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15631
16
            NULL, HFILL }
15632
16
        },
15633
16
        { &hf_nas_5gs_sm_rec_mbs_info_len,
15634
16
        { "Received MBS info length", "nas-5gs.sm.rec_mbs.info_len",
15635
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
15636
16
            NULL, HFILL }
15637
16
        },
15638
16
        { &hf_nas_5gs_sm_rec_mbs_decision,
15639
16
        { "MBS decision", "nas-5gs.sm.rec_mbs.decision",
15640
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_rec_mbs_decision_vals), 0x70,
15641
16
            NULL, HFILL }
15642
16
        },
15643
16
        { &hf_nas_5gs_sm_rec_mbs_sess_id_type,
15644
16
        { "Type of MBS session ID", "nas-5gs.sm.rec_mbs.sess_id_type",
15645
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_mbs_sess_id_type_vals), 0x03,
15646
16
            NULL, HFILL }
15647
16
        },
15648
16
        { &hf_nas_5gs_sm_rec_mbs_cause,
15649
16
        { "MBS cause", "nas-5gs.sm.rec_mbs.cause",
15650
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15651
16
            NULL, HFILL }
15652
16
        },
15653
15654
16
        { &hf_nas_5gs_sm_n3qai_num_qfis,
15655
16
        { "Number of QFIs", "nas-5gs.sm.n3qai.num_qfis",
15656
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15657
16
            NULL, HFILL }
15658
16
        },
15659
16
        { &hf_nas_5gs_sm_n3qai_qfi,
15660
16
        { "QFI", "nas-5gs.sm.n3qai.qfi",
15661
16
            FT_UINT8, BASE_DEC, NULL, 0x3f,
15662
16
            NULL, HFILL }
15663
16
        },
15664
16
        { &hf_nas_5gs_sm_n3qai_num_params,
15665
16
        { "Number of N3QAI parameters", "nas-5gs.sm.n3qai.num_params",
15666
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15667
16
            NULL, HFILL }
15668
16
        },
15669
16
        { &hf_nas_5gs_sm_n3qai_param_id,
15670
16
        { "N3QAI parameter identifier", "nas-5gs.sm.n3qai.param_id",
15671
16
            FT_UINT8, BASE_HEX, VALS(nas_5gs_sm_n3qai_param_id_vals), 0x0,
15672
16
            NULL, HFILL }
15673
16
        },
15674
16
        { &hf_nas_5gs_sm_n3qai_param_len,
15675
16
        { "Length of N3QAI parameter contents", "nas-5gs.sm.n3qai.param_len",
15676
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15677
16
            NULL, HFILL }
15678
16
        },
15679
16
        { &hf_nas_5gs_sm_n3qai_param_contents,
15680
16
        { "N3QAI parameter contents", "nas-5gs.sm.n3qai.param_contents",
15681
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15682
16
            NULL, HFILL }
15683
16
        },
15684
15685
16
        { &hf_nas_5gs_sm_n3gpp_delay_budget_val,
15686
16
        { "Non-3GPP delay budget value", "nas-5gs.sm.n3gpp_delay_budget.value",
15687
16
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
15688
16
            NULL, HFILL }
15689
16
        },
15690
16
        { &hf_nas_5gs_sm_n3gpp_delay_budget_flags,
15691
16
        { "Flags", "nas-5gs.sm.n3gpp_delay_budget.flags",
15692
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
15693
16
            NULL, HFILL }
15694
16
        },
15695
16
        { &hf_nas_5gs_sm_n3gpp_delay_budget_qfipi,
15696
16
        { "QFIPI", "nas-5gs.sm.n3gpp_delay_budget.qfipi",
15697
16
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
15698
16
            "QoS flow identifier presence indicator", HFILL }
15699
16
        },
15700
16
        { &hf_nas_5gs_sm_n3gpp_delay_budget_pfpi,
15701
16
        { "PFPI", "nas-5gs.sm.n3gpp_delay_budget.pfpi",
15702
16
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15703
16
            "Packet filter presence indicator", HFILL }
15704
16
        },
15705
16
        { &hf_nas_5gs_sm_n3gpp_delay_budget_num_qfis,
15706
16
        { "Number of QFIs", "nas-5gs.sm.n3gpp_delay_budget.num_qfis",
15707
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15708
16
            NULL, HFILL }
15709
16
        },
15710
16
        { &hf_nas_5gs_sm_n3gpp_delay_budget_qfi,
15711
16
        { "QFI", "nas-5gs.sm.n3gpp_delay_budget.qfi",
15712
16
            FT_UINT8, BASE_DEC, NULL, 0x3f,
15713
16
            NULL, HFILL }
15714
16
        },
15715
15716
16
        { &hf_nas_5gs_sm_ursp_report_num_conn_caps,
15717
16
        { "Number of connection capability identifiers", "nas-5gs.sm.ursp_report.num_conn_caps",
15718
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15719
16
            NULL, HFILL }
15720
16
        },
15721
16
        { &hf_nas_5gs_sm_ursp_report_conn_cap_id,
15722
16
        { "Connection capability identifier", "nas-5gs.sm.ursp_report.conn_cap_id",
15723
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
15724
16
            NULL, HFILL }
15725
16
        },
15726
15727
16
        { &hf_nas_5gs_sm_prot_desc_len,
15728
16
        { "Length of protocol description", "nas-5gs.sm.prot_desc.len",
15729
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
15730
16
            NULL, HFILL }
15731
16
        },
15732
16
        { &hf_nas_5gs_sm_prot_desc_qri,
15733
16
        { "QoS Rule Identifier", "nas-5gs.sm.prot_desc.qri",
15734
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15735
16
            NULL, HFILL }
15736
16
        },
15737
16
        { &hf_nas_5gs_sm_prot_desc_tp,
15738
16
        { "Transport Protocol", "nas-5gs.sm.prot_desc.tp",
15739
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_prot_desc_tp_vals), 0x0f,
15740
16
            NULL, HFILL }
15741
16
        },
15742
16
        { &hf_nas_5gs_sm_prot_desc_heipi,
15743
16
        { "HEIPI", "nas-5gs.sm.prot_desc.heipi",
15744
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x10,
15745
16
            "RTP header extension information presence indicator", HFILL }
15746
16
        },
15747
16
        { &hf_nas_5gs_sm_prot_desc_pilpi,
15748
16
        { "PILPI", "nas-5gs.sm.prot_desc.pilpi",
15749
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x20,
15750
16
            "RTP payload information list presence indicator", HFILL }
15751
16
        },
15752
16
        { &hf_nas_5gs_sm_prot_desc_rtp_hdr_ext_type,
15753
16
        { "RTP header extension type", "nas-5gs.sm.prot_desc.rtp_hdr_ext_type",
15754
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_prot_desc_rtp_hdr_ext_type_vals), 0x0,
15755
16
            NULL, HFILL }
15756
16
        },
15757
16
        { &hf_nas_5gs_sm_prot_desc_rtp_hdr_ext_id,
15758
16
        { "RTP header extension id", "nas-5gs.sm.prot_desc.rtp_hdr_ext_id",
15759
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15760
16
            NULL, HFILL }
15761
16
        },
15762
16
        { &hf_nas_5gs_sm_prot_desc_rtp_payload_info_list_len,
15763
16
        { "Length of RTP payload information list", "nas-5gs.sm.prot_desc.rtp_payload_info_list_len",
15764
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
15765
16
            NULL, HFILL }
15766
16
        },
15767
16
        { &hf_nas_5gs_sm_prot_desc_rtp_payload_format,
15768
16
        { "RTP payload format", "nas-5gs.sm.prot_desc.rtp_payload_format",
15769
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_prot_desc_rtp_payload_format_vals), 0x0,
15770
16
            NULL, HFILL }
15771
16
        },
15772
16
        { &hf_nas_5gs_sm_prot_desc_rtp_num_payload_types,
15773
16
        { "Number of RTP payload types", "nas-5gs.sm.prot_desc.rtp_num_payload_types",
15774
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15775
16
            NULL, HFILL }
15776
16
        },
15777
16
        { &hf_nas_5gs_sm_prot_desc_rtp_payload_type,
15778
16
        { "RTP payload type", "nas-5gs.sm.prot_desc.rtp_payload_type",
15779
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15780
16
            NULL, HFILL }
15781
16
        },
15782
15783
16
        { &hf_nas_5gs_sm_n3gpp_dev_info_pdu_sess_type,
15784
16
        { "PDU session type", "nas-5gs.sm.n3gpp_dev_info.pdu_sess_type",
15785
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_pdu_session_type_values), 0x07,
15786
16
            NULL, HFILL }
15787
16
        },
15788
16
        { &hf_nas_5gs_sm_n3gpp_dev_info_entry_len,
15789
16
        { "Length of non-3GPP device information", "nas-5gs.sm.n3gpp_dev_info.entry_len",
15790
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15791
16
            NULL, HFILL }
15792
16
        },
15793
16
        { &hf_nas_5gs_sm_n3gpp_dev_info_id_len,
15794
16
        { "Length of non-3GPP device identifier", "nas-5gs.sm.n3gpp_dev_info.id_len",
15795
16
            FT_UINT8, BASE_DEC, NULL, 0x7f,
15796
16
            NULL, HFILL }
15797
16
        },
15798
16
        { &hf_nas_5gs_sm_n3gpp_dev_info_id,
15799
16
        { "Non-3GPP device identifier", "nas-5gs.sm.n3gpp_dev_info.id",
15800
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15801
16
            NULL, HFILL }
15802
16
        },
15803
16
        { &hf_nas_5gs_sm_n3gpp_dev_info_conn_info,
15804
16
        { "Connection information", "nas-5gs.sm.n3gpp_dev_info.conn_info",
15805
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15806
16
            NULL, HFILL }
15807
16
        },
15808
16
        { &hf_nas_5gs_sm_sel_sc_mode,
15809
16
        { "Selected SSC mode",   "nas-5gs.sm.sel_sc_mode",
15810
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sc_mode_values), 0x70,
15811
16
            NULL, HFILL }
15812
16
        },
15813
16
        { &hf_nas_5gs_sm_tpmic_b7,
15814
16
        { "Transfer of port management information containers (TPMIC)",   "nas-5gs.sm.tpmic",
15815
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
15816
16
            NULL, HFILL }
15817
16
        },
15818
16
        { &hf_nas_5gs_sm_atsss_st_b3_b6,
15819
16
        { "Supported ATSSS steering functionalities and steering modes (ATSSS-ST)",   "nas-5gs.sm.atsss_st",
15820
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_atsss_st_b3_b6_vals), 0x78,
15821
16
            NULL, HFILL }
15822
16
        },
15823
16
        { &hf_nas_5gs_sm_ept_s1_b2,
15824
16
        { "Ethernet PDN type in S1 mode (EPT-S1)",   "nas-5gs.sm.ept_s1",
15825
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15826
16
            NULL, HFILL }
15827
16
        },
15828
16
        { &hf_nas_5gs_sm_mh6_pdu_b1,
15829
16
        { "Multi-homed IPv6 PDU session (MH6-PDU)",   "nas-5gs.sm.mh6_pdu",
15830
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15831
16
            NULL, HFILL }
15832
16
        },
15833
16
        { &hf_nas_5gs_sm_rqos_b0,
15834
16
        { "Reflective QoS (RqoS)",   "nas-5gs.sm.rqos",
15835
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15836
16
            NULL, HFILL }
15837
16
        },
15838
16
        { &hf_nas_5gs_sm_mpquic_ip_b7,
15839
16
        { "Supporting MPQUIC-IP functionality with any steering mode (MPQUIC-IP)",   "nas-5gs.sm.mpquic_ip",
15840
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
15841
16
            NULL, HFILL }
15842
16
        },
15843
16
        { &hf_nas_5gs_sm_mpquic_udp_b6,
15844
16
        { "Supporting MPQUIC functionality with any steering mode (MPQUIC-UDP)",   "nas-5gs.sm.mpquic_udp",
15845
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
15846
16
            NULL, HFILL }
15847
16
        },
15848
16
        { &hf_nas_5gs_sm_mptcp_b5,
15849
16
        { "Supporting MPTCP functionality with any steering mode (MPTCP)",   "nas-5gs.sm.mptcp",
15850
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
15851
16
            NULL, HFILL }
15852
16
        },
15853
16
        { &hf_nas_5gs_sm_atsss_ll_b3_b4,
15854
16
        { "ATSSS-LL functionality support (ATSSS-LL)",   "nas-5gs.sm.atsss_ll",
15855
16
            FT_UINT8, BASE_DEC, VALS(nas_nas_5gs_sm_atsss_ll_b3_b4_vals), 0x18,
15856
16
            NULL, HFILL }
15857
16
        },
15858
16
        { &hf_nas_5gs_rtpmmii_b2,
15859
16
        { "(S)RTP multiplexed media identification information (RTPMMII)",   "nas-5gs.sm.rtpmmii",
15860
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15861
16
            NULL, HFILL }
15862
16
        },
15863
16
        { &hf_nas_5gs_sm_sdnaepc_b1,
15864
16
        { "Secondary DN authentication and authorization over EPC (SDNAEPC)",   "nas-5gs.sm.sdnaepc",
15865
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15866
16
            NULL, HFILL }
15867
16
        },
15868
16
        { &hf_nas_5gs_sm_apmqf_b0,
15869
16
        { "Access performance measurements per QoS flow rule (APMQF)",   "nas-5gs.sm.apmqf",
15870
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15871
16
            NULL, HFILL }
15872
16
        },
15873
16
        { &hf_nas_5gs_sm_e8pcpdei_b1,
15874
16
        { "Supporting extended 802.1Q C-TAG/S-TAG PCP/DEI (E8PCPDEI)",   "nas-5gs.sm.e8pcpdei",
15875
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15876
16
            NULL, HFILL }
15877
16
        },
15878
16
        { &hf_nas_5gs_sm_mpquic_e_b0,
15879
16
        { "Supporting MPQUIC-E functionality with any steering mode (MPQUIC-E)",   "nas-5gs.sm.mpquic_e",
15880
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15881
16
            NULL, HFILL }
15882
16
        },
15883
16
        { &hf_nas_5gs_sm_5gsm_cause,
15884
16
        { "5GSM cause",   "nas-5gs.sm.5gsm_cause",
15885
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_cause_vals), 0x0,
15886
16
            NULL, HFILL }
15887
16
        },
15888
16
        { &hf_nas_5gs_sm_apsi,
15889
16
        { "Always-on PDU session",   "nas-5gs.sm.apsi",
15890
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_sm_apsi), 0x01,
15891
16
            NULL, HFILL }
15892
16
        },
15893
16
        { &hf_nas_5gs_sm_apsr,
15894
16
        { "Always-on PDU session",   "nas-5gs.sm.apsr",
15895
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
15896
16
            NULL, HFILL }
15897
16
        },
15898
16
        { &hf_nas_5gs_sm_int_prot_max_data_rate_ul,
15899
16
        { "Integrity protection maximum data rate for uplink",   "nas-5gs.sm.int_prot_max_data_rate_ul",
15900
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_int_prot_max_data_rate_vals), 0x0,
15901
16
            NULL, HFILL }
15902
16
        },
15903
16
        { &hf_nas_5gs_sm_int_prot_max_data_rate_dl,
15904
16
        { "Integrity protection maximum data rate for downlink",   "nas-5gs.sm.int_prot_max_data_rate_dl",
15905
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_int_prot_max_data_rate_vals), 0x0,
15906
16
            NULL, HFILL }
15907
16
        },
15908
16
        { &hf_nas_5gs_sm_si6lla,
15909
16
        { "SMF's IPv6 link local address (SI6LLA)",   "nas-5gs.sm.si6lla",
15910
16
            FT_BOOLEAN, 8, TFS(&tfs_present_absent), 0x08,
15911
16
            NULL, HFILL }
15912
16
        },
15913
16
        { &hf_nas_5gs_sm_pdu_ses_type,
15914
16
        { "PDU session type",   "nas-5gs.sm.pdu_ses_type",
15915
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_pdu_ses_type_vals), 0x07,
15916
16
            NULL, HFILL }
15917
16
        },
15918
16
        { &hf_nas_5gs_sm_pdu_addr_inf_ipv4,
15919
16
        { "PDU address information", "nas-5gs.sm.pdu_addr_inf_ipv4",
15920
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
15921
16
            NULL, HFILL }
15922
16
        },
15923
16
        { &hf_nas_5gs_sm_pdu_addr_inf_ipv6,
15924
16
        { "PDU address information", "nas-5gs.sm.pdu_addr_inf_ipv6",
15925
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
15926
16
            NULL, HFILL }
15927
16
        },
15928
16
        { &hf_nas_5gs_sm_smf_ipv6_lla,
15929
16
        { "SMF's IPv6 link local address", "nas-5gs.sm.smf_ipv6_lla",
15930
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
15931
16
            NULL, HFILL }
15932
16
        },
15933
16
        { &hf_nas_5gs_sm_qos_rule_id,
15934
16
        { "QoS rule identifier",   "nas-5gs.sm.qos_rule_id",
15935
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15936
16
            NULL, HFILL }
15937
16
        },
15938
16
        { &hf_nas_5gs_sm_length,
15939
16
        { "Length",   "nas-5gs.sm.length",
15940
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
15941
16
            NULL, HFILL }
15942
16
        },
15943
16
        { &hf_nas_5gs_sm_rop,
15944
16
        { "Rule operation code",   "nas-5gs.sm.rop",
15945
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_rule_operation_code_values), 0xe0,
15946
16
            NULL, HFILL }
15947
16
        },
15948
16
        { &hf_nas_5gs_sm_dqr,
15949
16
        { "DQR",   "nas-5gs.sm.dqr",
15950
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_sm_dqr), 0x10,
15951
16
            NULL, HFILL }
15952
16
        },
15953
16
        { &hf_nas_5gs_sm_nof_pkt_filters,
15954
16
        { "Number of packet filters",   "nas-5gs.sm.nof_pkt_filters",
15955
16
            FT_UINT8, BASE_DEC, NULL, 0x0f,
15956
16
            NULL, HFILL }
15957
16
        },
15958
16
        { &hf_nas_5gs_sm_pkt_flt_dir,
15959
16
        { "Packet filter direction",   "nas-5gs.sm.pkt_flt_dir",
15960
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_pkt_flt_dir_values), 0x30,
15961
16
            NULL, HFILL }
15962
16
        },
15963
16
        { &hf_nas_5gs_sm_pkt_flt_id,
15964
16
        { "Packet filter identifier",   "nas-5gs.sm.pkt_flt_id",
15965
16
            FT_UINT8, BASE_DEC, NULL, 0x0f,
15966
16
            NULL, HFILL }
15967
16
        },
15968
16
        { &hf_nas_5gs_sm_pf_len,
15969
16
        { "Length",   "nas-5gs.sm.pf_len",
15970
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15971
16
            NULL, HFILL }
15972
16
        },
15973
16
        { &hf_nas_5gs_sm_pf_type,
15974
16
        { "Packet filter component type",   "nas-5gs.sm.pf_type",
15975
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_pf_type_values), 0x0,
15976
16
            NULL, HFILL }
15977
16
        },
15978
16
        { &hf_nas_5gs_sm_e,
15979
16
        { "E bit",   "nas-5gs.sm.e",
15980
16
            FT_UINT8, BASE_DEC, NULL, 0x40,
15981
16
            NULL, HFILL }
15982
16
        },
15983
16
        { &hf_nas_5gs_sm_nof_params,
15984
16
        { "Number of parameters",   "nas-5gs.sm.nof_params",
15985
16
            FT_UINT8, BASE_DEC, NULL, 0x3f,
15986
16
            NULL, HFILL }
15987
16
        },
15988
16
        { &hf_nas_5gs_sm_param_id,
15989
16
        { "Parameter identifier",   "nas-5gs.sm.param_id",
15990
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_param_id_values), 0x0,
15991
16
            NULL, HFILL }
15992
16
        },
15993
16
        { &hf_nas_5gs_sm_param_len,
15994
16
        { "Length",   "nas-5gs.sm.param_len",
15995
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
15996
16
            NULL, HFILL }
15997
16
        },
15998
16
        { &hf_nas_5gs_addr_mask_ipv4,
15999
16
        { "IPv4 address mask", "nas-5gs.ipv4_address_mask",
16000
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
16001
16
            NULL, HFILL }
16002
16
        },
16003
16
        { &hf_nas_5gs_ipv6,
16004
16
        { "IPv6 address", "nas-5gs.ipv6_address",
16005
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
16006
16
            NULL, HFILL }
16007
16
        },
16008
16
        { &hf_nas_5gs_ipv6_prefix_len,
16009
16
        { "IPv6 prefix length", "nas-5gs.ipv6_prefix_len",
16010
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16011
16
            NULL, HFILL }
16012
16
        },
16013
16
        { &hf_nas_5gs_protocol_identifier_or_next_hd,
16014
16
        { "Protocol identifier/Next header type", "nas-5gs.protocol_identifier_or_next_hd",
16015
16
            FT_UINT8, BASE_DEC | BASE_EXT_STRING, &ipproto_val_ext, 0x0,
16016
16
            NULL, HFILL }
16017
16
        },
16018
16
        { &hf_nas_5gs_sm_qos_rule_precedence,
16019
16
        { "QoS rule precedence",   "nas-5gs.sm.qos_rule_precedence",
16020
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16021
16
            NULL, HFILL }
16022
16
        },
16023
16
        { &hf_nas_5gs_sm_segregation,
16024
16
        { "Segregation",   "nas-5gs.sm.segregation",
16025
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x40,
16026
16
            NULL, HFILL }
16027
16
        },
16028
16
        { &hf_nas_5gs_sm_param_cont,
16029
16
        { "Parameter content",   "nas-5gs.sm.param_content",
16030
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16031
16
            NULL, HFILL }
16032
16
        },
16033
16
        { &hf_nas_5gs_sm_5qi,
16034
16
        { "5QI",   "nas-5gs.sm.5qi",
16035
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16036
16
            NULL, HFILL }
16037
16
        },
16038
16
        { &hf_nas_5gs_sm_unit_for_gfbr_ul,
16039
16
        { "Unit for GFBR uplink",   "nas-5gs.sm.unit_for_gfbr_ul",
16040
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_unit_for_session_ambr_values), 0x0,
16041
16
            NULL, HFILL }
16042
16
        },
16043
16
        { &hf_nas_5gs_sm_gfbr_ul,
16044
16
        { "GFBR uplink",   "nas-5gs.sm.gfbr_ul",
16045
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16046
16
            NULL, HFILL }
16047
16
        },
16048
16
        { &hf_nas_5gs_sm_unit_for_gfbr_dl,
16049
16
        { "Unit for GFBR downlink",   "nas-5gs.sm.unit_for_gfbr_dl",
16050
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_unit_for_session_ambr_values), 0x0,
16051
16
            NULL, HFILL }
16052
16
        },
16053
16
        { &hf_nas_5gs_sm_gfbr_dl,
16054
16
        { "GFBR downlink",   "nas-5gs.sm.gfbr_dl",
16055
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16056
16
            NULL, HFILL }
16057
16
        },
16058
16
        { &hf_nas_5gs_sm_unit_for_mfbr_ul,
16059
16
        { "Unit for MFBR uplink",   "nas-5gs.sm.unit_for_mfbr_ul",
16060
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_unit_for_session_ambr_values), 0x0,
16061
16
            NULL, HFILL }
16062
16
        },
16063
16
        { &hf_nas_5gs_sm_mfbr_ul,
16064
16
        { "MFBR uplink",   "nas-5gs.sm.mfbr_ul",
16065
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16066
16
            NULL, HFILL }
16067
16
        },
16068
16
        { &hf_nas_5gs_sm_unit_for_mfbr_dl,
16069
16
        { "Unit for MFBR downlink",   "nas-5gs.sm.unit_for_mfbr_dl",
16070
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_unit_for_session_ambr_values), 0x0,
16071
16
            NULL, HFILL }
16072
16
        },
16073
16
        { &hf_nas_5gs_sm_mfbr_dl,
16074
16
        { "MFBR downlink",   "nas-5gs.sm.mfbr_dl",
16075
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16076
16
            NULL, HFILL }
16077
16
        },
16078
16
        { &hf_nas_5gs_sm_averaging_window,
16079
16
        { "Averaging window",   "nas-5gs.sm.averaging_window",
16080
16
            FT_UINT16, BASE_DEC | BASE_UNIT_STRING, UNS(&units_millisecond_milliseconds), 0x0,
16081
16
            NULL, HFILL }
16082
16
        },
16083
16
        { &hf_nas_5gs_sm_eps_bearer_id,
16084
16
        { "EPS bearer identity",   "nas-5gs.sm.eps_bearer_id",
16085
16
            FT_UINT8, BASE_DEC, NULL, 0xf0,
16086
16
            NULL, HFILL }
16087
16
        },
16088
16
        { &hf_nas_5gs_sm_qfi,
16089
16
        { "Qos flow identifier",   "nas-5gs.sm.qfi",
16090
16
            FT_UINT8, BASE_DEC, NULL, 0x3f,
16091
16
            NULL, HFILL }
16092
16
        },
16093
16
        { &hf_nas_5gs_sm_mapd_eps_b_cont_id,
16094
16
        { "EPS bearer identity",   "nas-5gs.sm.mapd_eps_b_cont_id",
16095
16
            FT_UINT8, BASE_DEC, NULL, 0xf0,
16096
16
            NULL, HFILL }
16097
16
        },
16098
16
        { &hf_nas_5gs_sm_mapd_eps_b_cont_opt_code,
16099
16
        { "Operation code",   "nas-5gs.sm.mapd_eps_b_cont_opt_code",
16100
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_mapd_eps_b_cont_opt_code_vals), 0xc0,
16101
16
            NULL, HFILL }
16102
16
        },
16103
16
        { &hf_nas_5gs_sm_qos_des_flow_opt_code,
16104
16
        { "Operation code",   "nas-5gs.sm.hf_nas_5gs_sm_qos_des_flow_opt_code",
16105
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_qos_des_flow_opt_code_vals), 0xe0,
16106
16
            NULL, HFILL }
16107
16
        },
16108
16
        { &hf_nas_5gs_sm_mapd_eps_b_cont_E,
16109
16
        { "E bit",   "nas-5gs.sm.mapd_eps_b_cont_E",
16110
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_mapd_eps_b_cont_E_vals), 0x10,
16111
16
            NULL, HFILL }
16112
16
        },
16113
16
        { &hf_nas_5gs_sm_mapd_eps_b_cont_E_mod,
16114
16
        { "E bit",   "nas-5gs.sm.mapd_eps_b_cont_E_mod",
16115
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_mapd_eps_b_cont_E_Modify_vals), 0x10,
16116
16
            NULL, HFILL }
16117
16
        },
16118
16
        { &hf_nas_5gs_sm_mapd_eps_b_cont_num_eps_parms,
16119
16
        { "Number of EPS parameters",   "nas-5gs.sm.mapd_eps_b_cont_num_eps_parms",
16120
16
            FT_UINT8, BASE_DEC, NULL, 0x0f,
16121
16
            NULL, HFILL }
16122
16
        },
16123
16
        { &hf_nas_5gs_sm_mapd_eps_b_cont_param_id,
16124
16
        { "EPS parameter identity",   "nas-5gs.sm.mapd_eps_b_cont_param_id",
16125
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_mapd_eps_b_cont_param_id_vals), 0x0,
16126
16
            NULL, HFILL }
16127
16
        },
16128
16
        { &hf_nas_5gs_sm_unit_for_session_ambr_dl,
16129
16
         { "Unit for Session-AMBR for downlink",   "nas-5gs.sm.unit_for_session_ambr_dl",
16130
16
             FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_unit_for_session_ambr_values), 0x0,
16131
16
             NULL, HFILL }
16132
16
        },
16133
16
        { &hf_nas_5gs_sm_unit_for_session_ambr_ul,
16134
16
        { "Unit for Session-AMBR for uplink",   "nas-5gs.sm.unit_for_session_ambr_ul",
16135
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_unit_for_session_ambr_values), 0x0,
16136
16
            NULL, HFILL }
16137
16
        },
16138
16
        { &hf_nas_5gs_sm_session_ambr_dl,
16139
16
        { "Session-AMBR for downlink",   "nas-5gs.sm.session_ambr_dl",
16140
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16141
16
            NULL, HFILL }
16142
16
        },
16143
16
        { &hf_nas_5gs_sm_session_ambr_ul,
16144
16
        { "Session-AMBR for uplink",   "nas-5gs.sm.session_ambr_ul",
16145
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16146
16
            NULL, HFILL }
16147
16
        },
16148
16
        { &hf_nas_5gs_sm_dm_spec_id,
16149
16
        { "DN-specific identity",   "nas-5gs.sm.dm_spec_id",
16150
16
            FT_STRING, BASE_NONE, NULL, 0x0,
16151
16
            NULL, HFILL }
16152
16
        },
16153
16
        { &hf_nas_5gs_sm_all_ssc_mode_b0,
16154
16
        { "SSC mode 1",   "nas-5gs.sm.all_ssc_mode_b0",
16155
16
            FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed), 0x01,
16156
16
            NULL, HFILL }
16157
16
        },
16158
16
        { &hf_nas_5gs_sm_all_ssc_mode_b1,
16159
16
        { "SSC mode 2",   "nas-5gs.sm.all_ssc_mode_b1",
16160
16
            FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed), 0x02,
16161
16
            NULL, HFILL }
16162
16
        },
16163
16
        { &hf_nas_5gs_sm_all_ssc_mode_b2,
16164
16
        { "SSC mode 3",   "nas-5gs.sm.all_ssc_mode_b2",
16165
16
            FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed), 0x04,
16166
16
            NULL, HFILL }
16167
16
        },
16168
16
        { &hf_nas_5gs_mm_supi_fmt,
16169
16
        { "SUPI format","nas-5gs.mm.suci.supi_fmt",
16170
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_supi_fmt_vals), 0x70,
16171
16
            NULL, HFILL }
16172
16
        },
16173
16
        { &hf_nas_5gs_mm_routing_indicator,
16174
16
        { "Routing indicator",   "nas-5gs.mm.suci.routing_indicator",
16175
16
            FT_STRING, BASE_NONE, NULL, 0,
16176
16
            NULL, HFILL }
16177
16
        },
16178
16
        { &hf_nas_5gs_mm_prot_scheme_id,
16179
16
        { "Protection scheme Id",   "nas-5gs.mm.suci.scheme_id",
16180
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_prot_scheme_id_vals), 0x0f,
16181
16
            NULL, HFILL }
16182
16
        },
16183
16
        { &hf_nas_5gs_mm_pki,
16184
16
        { "Home network public key identifier",   "nas-5gs.mm.suci.pki",
16185
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16186
16
            NULL, HFILL }
16187
16
        },
16188
16
        { &hf_nas_5gs_mm_suci_msin,
16189
16
        { "MSIN", "nas-5gs.mm.suci.msin",
16190
16
            FT_STRING, BASE_NONE, NULL, 0,
16191
16
            NULL, HFILL }
16192
16
        },
16193
16
        { &hf_nas_5gs_mm_scheme_output,
16194
16
        { "Scheme output", "nas-5gs.mm.suci.scheme_output",
16195
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16196
16
            NULL, HFILL }
16197
16
        },
16198
16
        { &hf_nas_5gs_mm_scheme_output_ecc_public_key,
16199
16
        { "ECC ephemeral public key", "nas-5gs.mm.suci.scheme_output.ecc_public_key",
16200
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16201
16
            NULL, HFILL }
16202
16
        },
16203
16
        { &hf_nas_5gs_mm_scheme_output_ciphertext,
16204
16
        { "Ciphertext", "nas-5gs.mm.suci.scheme_output.ciphertext",
16205
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16206
16
            NULL, HFILL }
16207
16
        },
16208
16
        { &hf_nas_5gs_mm_scheme_output_mac_tag,
16209
16
        { "MAC tag", "nas-5gs.mm.suci.scheme_output.mac_tag",
16210
16
            FT_UINT64, BASE_HEX, NULL, 0x0,
16211
16
            NULL, HFILL }
16212
16
        },
16213
16
        { &hf_nas_5gs_mm_suci_nai,
16214
16
        { "NAI", "nas-5gs.mm.suci.nai",
16215
16
            FT_STRING, BASE_NONE, NULL, 0x0,
16216
16
            NULL, HFILL }
16217
16
        },
16218
16
        { &hf_nas_5gs_mm_imei,
16219
16
        { "IMEI", "nas-5gs.mm.imei",
16220
16
            FT_STRING, BASE_NONE, NULL, 0,
16221
16
            NULL, HFILL }
16222
16
        },
16223
16
        { &hf_nas_5gs_mm_imeisv,
16224
16
        { "IMEISV", "nas-5gs.mm.imeisv",
16225
16
            FT_STRING, BASE_NONE, NULL, 0,
16226
16
            NULL, HFILL }
16227
16
        },
16228
16
        { &hf_nas_5gs_mm_mauri,
16229
16
        { "MAC address usage restriction indication (MAURI)", "nas-5gs.mm.mauri",
16230
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_mauri_tfs), 0x08,
16231
16
            NULL, HFILL }
16232
16
        },
16233
16
        { &hf_nas_5gs_mm_mac_addr,
16234
16
        { "MAC address", "nas-5gs.mm.mac_addr",
16235
16
            FT_ETHER, BASE_NONE, NULL, 0,
16236
16
            NULL, HFILL }
16237
16
        },
16238
16
        { &hf_nas_5gs_mm_eui_64,
16239
16
        { "EUI-64", "nas-5gs.mm.eui_64",
16240
16
            FT_EUI64, BASE_NONE, NULL, 0,
16241
16
            NULL, HFILL }
16242
16
        },
16243
16
        { &hf_nas_5gs_mm_reg_res_res,
16244
16
        { "5GS registration result",   "nas-5gs.mm.reg_res.res",
16245
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_reg_res_values), 0x07,
16246
16
            NULL, HFILL }
16247
16
        },
16248
16
        { &hf_nas_5gs_mm_reg_res_sms_allowed,
16249
16
        { "SMS over NAS",   "nas-5gs.mm.reg_res.sms_all",
16250
16
            FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed), 0x08,
16251
16
            NULL, HFILL }
16252
16
        },
16253
16
        { &hf_nas_5gs_mm_reg_res_nssaa_perf,
16254
16
        { "NSSAA Performed",   "nas-5gs.mm.reg_res.nssaa_perf",
16255
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_reg_res_nssaa_perf), 0x10,
16256
16
            NULL, HFILL }
16257
16
        },
16258
16
        { &hf_nas_5gs_mm_reg_res_emergency_reg,
16259
16
        { "Emergency registered",   "nas-5gs.mm.reg_res.emergency_reg",
16260
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_reg_res_emergency_reg), 0x20,
16261
16
            NULL, HFILL }
16262
16
        },
16263
16
        { &hf_nas_5gs_mm_reg_res_disaster_roaming_reg_res,
16264
16
        { "Disaster roaming registration result",   "nas-5gs.mm.reg_res.disaster_roaming_reg_res",
16265
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_reg_res_disaster_roaming_reg_res), 0x40,
16266
16
            NULL, HFILL }
16267
16
        },
16268
16
        { &hf_nas_5gs_amf_region_id,
16269
16
        { "AMF Region ID",   "nas-5gs.amf_region_id",
16270
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16271
16
            NULL, HFILL }
16272
16
        },
16273
16
        { &hf_nas_5gs_amf_set_id,
16274
16
        { "AMF Set ID",   "nas-5gs.amf_set_id",
16275
16
            FT_UINT16, BASE_DEC, NULL, 0xffc0,
16276
16
            NULL, HFILL }
16277
16
        },
16278
16
        { &hf_nas_5gs_amf_pointer,
16279
16
        { "AMF Pointer",   "nas-5gs.amf_pointer",
16280
16
            FT_UINT8, BASE_DEC, NULL, 0x3f,
16281
16
            NULL, HFILL }
16282
16
        },
16283
16
        { &hf_nas_5gs_5g_tmsi,
16284
16
        { "5G-TMSI",   "nas-5gs.5g_tmsi",
16285
16
            FT_UINT32, BASE_DEC_HEX, NULL, 0x0,
16286
16
            NULL, HFILL }
16287
16
        },
16288
16
        { &hf_nas_5gs_nw_feat_sup_ims_vops_3gpp,
16289
16
        { "IMS voice over PS session indicator (IMS VoPS)",   "nas-5gs.nw_feat_sup.vops_3gpp",
16290
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16291
16
            NULL, HFILL }
16292
16
        },
16293
16
        { &hf_nas_5gs_nw_feat_sup_ims_vops_n3gpp,
16294
16
        { "IMS voice over PS session over non-3GPP access indicator (IMS-VoPS-N3GPP)",   "nas-5gs.nw_feat_sup.vops_n3gpp",
16295
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16296
16
            NULL, HFILL }
16297
16
        },
16298
16
        { &hf_nas_5gs_nw_feat_sup_ims_emc_b3b2,
16299
16
        { "Emergency service support indicator (EMC)",   "nas-5gs.nw_feat_sup.emc",
16300
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_nw_feat_sup_emc_values), 0x0c,
16301
16
            NULL, HFILL }
16302
16
        },
16303
16
        { &hf_nas_5gs_nw_feat_sup_ims_emf_b5b4,
16304
16
        { "Emergency service fallback indicator (EMF)",   "nas-5gs.nw_feat_sup.emf",
16305
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_nw_feat_sup_emf_values), 0x30,
16306
16
            NULL, HFILL }
16307
16
        },
16308
16
        { &hf_nas_5gs_nw_feat_sup_ims_iwk_n26_b6,
16309
16
        { "Interworking without N26 (IWK N26)",   "nas-5gs.nw_feat_sup.iwk_n26",
16310
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16311
16
            NULL, HFILL }
16312
16
        },
16313
16
        { &hf_nas_5gs_nw_feat_sup_mpsi_b7,
16314
16
        { "MPS indicator (MPSI)",   "nas-5gs.nw_feat_sup.mpsi",
16315
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_nw_feat_sup_mpsi), 0x80,
16316
16
            NULL, HFILL }
16317
16
        },
16318
16
        { &hf_nas_5gs_nw_feat_sup_emcn3,
16319
16
        { "Emergency services over non-3GPP access (EMCN3)",   "nas-5gs.nw_feat_sup.emcn3",
16320
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16321
16
            NULL, HFILL }
16322
16
        },
16323
16
        { &hf_nas_5gs_nw_feat_sup_mcsi,
16324
16
        { "MCS indicator (MCSI)",   "nas-5gs.nw_feat_sup.mcsi",
16325
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_nw_feat_sup_mcsi), 0x02,
16326
16
            NULL, HFILL }
16327
16
        },
16328
16
        { &hf_nas_5gs_nw_feat_sup_restrict_ec,
16329
16
        { "Restriction on enhanced coverage (RestrictEC)",   "nas-5gs.nw_feat_sup.restrict_ec",
16330
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_nw_feat_sup_restrict_ec_values), 0x0c,
16331
16
            NULL, HFILL }
16332
16
        },
16333
16
        { &hf_nas_5gs_nw_feat_sup_5g_cp_ciot,
16334
16
        { "Control plane CIoT 5GS optimization (5G-CP CIoT)",   "nas-5gs.nw_feat_sup.5g_cp_ciot",
16335
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16336
16
            NULL, HFILL }
16337
16
        },
16338
16
        { &hf_nas_5gs_nw_feat_sup_n3_data,
16339
16
        { "N3 data transfer (N3 data)",   "nas-5gs.nw_feat_sup.n3_data",
16340
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16341
16
            NULL, HFILL }
16342
16
        },
16343
16
        { &hf_nas_5gs_nw_feat_sup_5g_iphc_cp_ciot,
16344
16
        { "IP header compression for control plane CIoT 5GS optimization (5G-IPHC-CP CIoT)",   "nas-5gs.nw_feat_sup.5g_iphc_cp_ciot",
16345
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16346
16
            NULL, HFILL }
16347
16
        },
16348
16
        { &hf_nas_5gs_nw_feat_sup_5g_ciot_up,
16349
16
        { "User plane CIoT 5GS optimization (5G-UP CIoT)",   "nas-5gs.nw_feat_sup.5g_ciot_up",
16350
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16351
16
            NULL, HFILL }
16352
16
        },
16353
16
        { &hf_nas_5gs_nw_feat_sup_5g_lcs,
16354
16
        { "Location Services indicator in 5GC (5G-LCS)",   "nas-5gs.nw_feat_sup.5g_lcs",
16355
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16356
16
            NULL, HFILL }
16357
16
        },
16358
16
        { &hf_nas_5gs_nw_feat_sup_ats_ind,
16359
16
        { "ATSSS support indicator (ATS-IND)",   "nas-5gs.nw_feat_sup.ats_ind",
16360
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16361
16
            NULL, HFILL }
16362
16
        },
16363
16
        { &hf_nas_5gs_nw_feat_sup_5g_ehc_cp_ciot,
16364
16
        { "Ethernet header compression for control plane CIoT 5GS optimization (5G-EHC-CP CIoT)",   "nas-5gs.nw_feat_sup.5g_ehc_cp_ciot",
16365
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16366
16
            NULL, HFILL }
16367
16
        },
16368
16
        { &hf_nas_5gs_nw_feat_sup_ncr,
16369
16
        { "N1 NAS signalling connection release (NCR)",   "nas-5gs.nw_feat_sup.ncr",
16370
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16371
16
            NULL, HFILL }
16372
16
        },
16373
16
        { &hf_nas_5gs_nw_feat_sup_piv,
16374
16
        { "Paging indication for voice services (PIV)",   "nas-5gs.nw_feat_sup.piv",
16375
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16376
16
            NULL, HFILL }
16377
16
        },
16378
16
        { &hf_nas_5gs_nw_feat_sup_rpr,
16379
16
        { "Reject paging request (RPR)",   "nas-5gs.nw_feat_sup.rpr",
16380
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16381
16
            NULL, HFILL }
16382
16
        },
16383
16
        { &hf_nas_5gs_nw_feat_sup_pr,
16384
16
        { "Paging restriction (PR)",   "nas-5gs.nw_feat_sup.pr",
16385
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16386
16
            NULL, HFILL }
16387
16
        },
16388
16
        { &hf_nas_5gs_nw_feat_sup_un_per,
16389
16
        { "Unavailability period (UN-PER)",   "nas-5gs.nw_feat_sup.un_per",
16390
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16391
16
            NULL, HFILL }
16392
16
        },
16393
16
        { &hf_nas_5gs_nw_feat_sup_naps,
16394
16
        { "Non-3GPP access path switching (NAPS)",   "nas-5gs.nw_feat_sup.naps",
16395
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16396
16
            NULL, HFILL }
16397
16
        },
16398
16
        { &hf_nas_5gs_nw_feat_sup_lcs_upp,
16399
16
        { "LCS-UPP user plane positioning (LCS-UPP)",   "nas-5gs.nw_feat_sup.lcs_upp",
16400
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16401
16
            NULL, HFILL }
16402
16
        },
16403
16
        { &hf_nas_5gs_nw_feat_sup_supl,
16404
16
        { "SUPL user plane positioning (SUPL)",   "nas-5gs.nw_feat_sup.supl",
16405
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16406
16
            NULL, HFILL }
16407
16
        },
16408
16
        { &hf_nas_5gs_nw_feat_sup_rslp,
16409
16
        { "Ranging and sidelink positioning support (RSLP)",   "nas-5gs.nw_feat_sup.rslp",
16410
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16411
16
            NULL, HFILL }
16412
16
        },
16413
16
        { &hf_nas_5gs_nw_feat_sup_mlcsup,
16414
16
        { "Multiple LCS secured user plane connections (MLCSUP)",   "nas-5gs.nw_feat_sup.mlcsup",
16415
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16416
16
            NULL, HFILL }
16417
16
        },
16418
16
        { &hf_nas_5gs_nw_feat_sup_ef5l,
16419
16
        { "ExtendedFacility IE for 5G LCS (EF5L)",   "nas-5gs.nw_feat_sup.ef5l",
16420
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16421
16
            NULL, HFILL }
16422
16
        },
16423
16
        { &hf_nas_5gs_tac,
16424
16
        { "TAC",   "nas-5gs.tac",
16425
16
            FT_UINT24, BASE_DEC, NULL, 0x0,
16426
16
            NULL, HFILL }
16427
16
        },
16428
16
        { &hf_nas_5gs_mm_tal_t_li,
16429
16
        { "Type of list",   "nas-5gs.mm.tal_t_li",
16430
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_tal_t_li_values), 0x60,
16431
16
            NULL, HFILL }
16432
16
        },
16433
16
        { &hf_nas_5gs_mm_tal_num_e,
16434
16
        { "Number of elements",   "nas-5gs.mm.tal_num_e",
16435
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_tal_num_e), 0x1f,
16436
16
            NULL, HFILL }
16437
16
        },
16438
16
        { &hf_nas_5gs_sm_mapd_eps_b_cont_eps_param_cont,
16439
16
        { "EPS parameter contents",   "nas-5gs.sm.mapd_eps_b_cont_eps_param_cont",
16440
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16441
16
            NULL, HFILL }
16442
16
        },
16443
16
        { &hf_nas_5gs_sm_max_nb_sup_pkt_flt_nb,
16444
16
        { "Maximum number of supported packet filters", "nas-5gs.sm.max_nb_sup_pkt_flt.nb",
16445
16
            FT_UINT16, BASE_DEC, NULL, 0xffe0,
16446
16
            NULL, HFILL }
16447
16
        },
16448
16
        { &hf_nas_5gs_sm_max_nb_sup_pkt_flt_spare,
16449
16
        { "Spare", "nas-5gs.sm.max_nb_sup_pkt_flt.spare",
16450
16
            FT_UINT16, BASE_HEX, NULL, 0x001f,
16451
16
            NULL, HFILL }
16452
16
        },
16453
16
        { &hf_nas_5gs_kacf,
16454
16
        { "K_AMF change flag", "nas-5gs.kacf",
16455
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_kacf_tfs), 0x10,
16456
16
            NULL, HFILL }
16457
16
        },
16458
16
        { &hf_nas_5gs_ncc,
16459
16
        { "NCC", "nas-5gs.ncc",
16460
16
            FT_UINT8, BASE_DEC, NULL, 0x70,
16461
16
            NULL, HFILL }
16462
16
        },
16463
16
        { &hf_nas_5gs_mm_rinmr,
16464
16
        { "Retransmission of initial NAS message request (RINMR)", "nas-5gs.mm.rinmr",
16465
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x02,
16466
16
            NULL, HFILL }
16467
16
        },
16468
16
        { &hf_nas_5gs_mm_hdp,
16469
16
        { "Horizontal derivation parameter (HDP)", "nas-5gs.mm.hdp",
16470
16
            FT_BOOLEAN, 8, TFS(&tfs_required_not_required), 0x01,
16471
16
            NULL, HFILL }
16472
16
        },
16473
16
        { &hf_nas_5gs_mm_cipher_key,
16474
16
        { "Cipher Key", "nas-5gs.mm.cipher_key",
16475
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
16476
16
            NULL, HFILL }
16477
16
        },
16478
16
        { &hf_nas_5gs_mm_dcni,
16479
16
        { "Default configured NSSAI indication (DCNI)", "nas-5gs.mm.dcni",
16480
16
            FT_BOOLEAN, 8, TFS(&nas_5gs_mm_dcni_tfs), 0x02,
16481
16
            NULL, HFILL }
16482
16
        },
16483
16
        { &hf_nas_5gs_mm_nssci,
16484
16
        { "Network slicing subscription change indication (NSSCI)", "nas-5gs.mm.nssci",
16485
16
            FT_BOOLEAN, 8, TFS(&tfs_changed_not_changed), 0x01,
16486
16
            NULL, HFILL }
16487
16
        },
16488
16
        { &hf_nas_5gs_mm_nssai_inc_mode,
16489
16
        { "NSSAI inclusion mode", "nas-5gs.mm.nssai_inc_mode",
16490
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_nssai_inc_mode_vals), 0x03,
16491
16
            NULL, HFILL }
16492
16
        },
16493
16
        { &hf_nas_5gs_mm_ue_usage_setting,
16494
16
        { "UE's usage setting", "nas-5gs.mm.ue_usage_setting",
16495
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_ue_usage_setting), 0x01,
16496
16
            NULL, HFILL }
16497
16
        },
16498
16
        { &hf_nas_5gs_mm_5gs_drx_param,
16499
16
        { "DRX value", "nas-5gs.mm.drx_value",
16500
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_drx_vals), 0x0f,
16501
16
            NULL, HFILL }
16502
16
        },
16503
16
        { &hf_nas_5gs_mm_op_def_access_cat_len,
16504
16
        { "Length of operator-defined access category definition contents", "nas-5gs.mm.operator_defined_access_cat.len",
16505
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16506
16
            NULL, HFILL }
16507
16
        },
16508
16
        { &hf_nas_5gs_mm_op_def_access_cat_precedence,
16509
16
        { "Precedence", "nas-5gs.mm.operator_defined_access_cat.precedence",
16510
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16511
16
            NULL, HFILL }
16512
16
        },
16513
16
        { &hf_nas_5gs_mm_op_def_access_cat_psac,
16514
16
        { "Presence of standardized access category", "nas-5gs.mm.operator_defined_access_cat.psac",
16515
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x80,
16516
16
            NULL, HFILL }
16517
16
        },
16518
16
        { &hf_nas_5gs_mm_op_def_access_cat_number,
16519
16
        { "Access category number", "nas-5gs.mm.operator_defined_access_cat.number",
16520
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(nas_5gs_mm_access_cat_number), 0x1f,
16521
16
            NULL, HFILL }
16522
16
        },
16523
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_length,
16524
16
        { "Length of criteria", "nas-5gs.mm.operator_defined_access_cat.criteria_length",
16525
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16526
16
            NULL, HFILL }
16527
16
        },
16528
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_type,
16529
16
        { "Criteria type", "nas-5gs.mm.operator_defined_access_cat.criteria_type",
16530
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_op_def_access_cat_criteria_type_vals), 0x0,
16531
16
            NULL, HFILL }
16532
16
        },
16533
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_count,
16534
16
        { "DNN count", "nas-5gs.mm.operator_defined_access_cat.criteria_dnn_count",
16535
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16536
16
            NULL, HFILL }
16537
16
        },
16538
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_dnn_len,
16539
16
        { "DNN length", "nas-5gs.mm.operator_defined_access_cat.criteria_dnn_len",
16540
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16541
16
            NULL, HFILL }
16542
16
        },
16543
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_os_id_os_app_id_count,
16544
16
        { "OS Id + OS App Id count", "nas-5gs.mm.operator_defined_access_cat.criteria_os_id_os_app_id_count",
16545
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16546
16
            NULL, HFILL }
16547
16
        },
16548
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_os_id,
16549
16
        { "OS Id", "nas-5gs.mm.operator_defined_access_cat.criteria_os_id",
16550
16
            FT_GUID, BASE_NONE, NULL, 0x0,
16551
16
            NULL, HFILL }
16552
16
        },
16553
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id_len,
16554
16
        { "OS App Id length", "nas-5gs.mm.operator_defined_access_cat.criteria_os_app_id_len",
16555
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16556
16
            NULL, HFILL }
16557
16
        },
16558
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_os_app_id,
16559
16
        { "OS App Id", "nas-5gs.mm.operator_defined_access_cat.criteria_os_app_id",
16560
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16561
16
            NULL, HFILL }
16562
16
        },
16563
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_count,
16564
16
        { "S-NSSAI count", "nas-5gs.mm.operator_defined_access_cat.criteria_s_nssai_count",
16565
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16566
16
            NULL, HFILL }
16567
16
        },
16568
16
        { &hf_nas_5gs_mm_op_def_access_cat_criteria_s_nssai_len,
16569
16
        { "S-NSSAI length", "nas-5gs.mm.operator_defined_access_cat.criteria_s_nssai_len",
16570
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16571
16
            NULL, HFILL }
16572
16
        },
16573
16
        { &hf_nas_5gs_mm_op_def_access_cat_standardized_number,
16574
16
        { "Standardized access category number", "nas-5gs.mm.operator_defined_access_cat.standardized_number",
16575
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(nas_5gs_mm_access_standardized_cat_number), 0x1f,
16576
16
            NULL, HFILL }
16577
16
        },
16578
16
        { &hf_nas_5gs_mm_sms_indic_sai,
16579
16
        { "SMS over NAS",   "nas-5gs.mm.ms_indic.sai",
16580
16
            FT_BOOLEAN, 8, TFS(&tfs_allowed_not_allowed), 0x01,
16581
16
            "SMS availability indication (SAI)", HFILL }
16582
16
        },
16583
16
        { &hf_nas_5gs_sor_hdr0_ap,
16584
16
        { "Additional parameters (AP)",   "nas-5gs.sor_hdr0.ap",
16585
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x10,
16586
16
            NULL, HFILL }
16587
16
        },
16588
16
        { &hf_nas_5gs_sor_hdr0_ack,
16589
16
        { "Acknowledgement (ACK)",   "nas-5gs.sor_hdr0.ack",
16590
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x08,
16591
16
            NULL, HFILL }
16592
16
        },
16593
16
        { &hf_nas_5gs_sor_hdr0_list_type,
16594
16
        { "List type",   "nas-5gs.sor_hdr0.list_type",
16595
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_list_type), 0x04,
16596
16
            NULL, HFILL }
16597
16
        },
16598
16
        { &hf_nas_5gs_sor_hdr0_list_ind,
16599
16
        { "List indication",   "nas-5gs.sor_hdr0.list_ind",
16600
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_list_ind), 0x02,
16601
16
            NULL, HFILL }
16602
16
        },
16603
16
        { &hf_nas_5gs_sor_hdr0_sor_data_type,
16604
16
        { "SOR data type",   "nas-5gs.sor.sor_data_type",
16605
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_sor_data_type), 0x01,
16606
16
            NULL, HFILL }
16607
16
        },
16608
16
        { &hf_nas_5gs_sor_mssi,
16609
16
        { "ME support of SOR-CMCI indicator (MSSI)",   "nas-5gs.sor.mssi",
16610
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16611
16
            NULL, HFILL }
16612
16
        },
16613
16
        { &hf_nas_5gs_sor_mssnpnsi,
16614
16
        { "ME support of SOR-SNPN-SI indicator (MSSNPNSI)",   "nas-5gs.sor.mssnpnsi",
16615
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16616
16
            NULL, HFILL }
16617
16
        },
16618
16
        { &hf_nas_5gs_sor_msssnpnsils,
16619
16
        { "MS support of SOR-SNPN-SI-LS indicator (MSSNPNSILS)",   "nas-5gs.sor.msssnpnsils",
16620
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16621
16
            NULL, HFILL }
16622
16
        },
16623
16
        { &hf_nas_5gs_sor_mac_iue,
16624
16
        { "SOR-MAC-IUE", "nas-5gs.mm.sor_mac_iue",
16625
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16626
16
            NULL, HFILL }
16627
16
        },
16628
16
        { &hf_nas_5gs_sor_mac_iausf,
16629
16
        { "SOR-MAC-IAUSF", "nas-5gs.mm.sor_mac_iausf",
16630
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16631
16
            NULL, HFILL }
16632
16
        },
16633
16
        { &hf_nas_5gs_counter_sor,
16634
16
        { "CounterSOR", "nas-5gs.mm.counter_sor",
16635
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16636
16
            NULL, HFILL }
16637
16
        },
16638
16
        { &hf_nas_5gs_sor_sec_pkt,
16639
16
        { "Secured packet", "nas-5gs.mm.sor_sec_pkt",
16640
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16641
16
            NULL, HFILL }
16642
16
        },
16643
16
        { &hf_nas_5gs_sor_sssli,
16644
16
        { "SOR-SNPN-SI-LS indicator", "nas-5gs.mm.sor_sssli",
16645
16
            FT_BOOLEAN, 8, TFS(&tfs_present_absent), 0x08,
16646
16
            NULL, HFILL }
16647
16
        },
16648
16
        { &hf_nas_5gs_sor_sssi,
16649
16
        { "SOR-SNPN-SI indicator", "nas-5gs.mm.sor_sssi",
16650
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_sor_sssi), 0x04,
16651
16
            NULL, HFILL }
16652
16
        },
16653
16
        { &hf_nas_5gs_sor_sscmi,
16654
16
        { "Store SOR-CMCI in ME indicator (SSCMI)", "nas-5gs.mm.sor_sscmi",
16655
16
            FT_BOOLEAN, 8, TFS(&tfs_yes_no), 0x02,
16656
16
            NULL, HFILL }
16657
16
        },
16658
16
        { &hf_nas_5gs_sor_si,
16659
16
        { "SOR-CMCI indicator (SI)", "nas-5gs.mm.sor_si",
16660
16
            FT_BOOLEAN, 8, TFS(&tfs_present_absent), 0x01,
16661
16
            NULL, HFILL }
16662
16
        },
16663
16
        { &hf_nas_5gs_sor_plmn_id_act_len,
16664
16
        { "Length of PLMN ID and access technology list", "nas-5gs.mm.sor_plmn_id_act_len",
16665
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16666
16
            NULL, HFILL }
16667
16
        },
16668
16
        { &hf_nas_5gs_sor_cmci_len,
16669
16
        { "Length of SOR-CMCI contents", "nas-5gs.mm.sor_cmci_len",
16670
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16671
16
            NULL, HFILL }
16672
16
        },
16673
16
        { &hf_nas_5gs_sor_cmci_payload,
16674
16
        { "SOR-CMCI contents payload", "nas-5gs.mm.sor_cmci_payload",
16675
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16676
16
            NULL, HFILL }
16677
16
        },
16678
16
        { &hf_nas_5gs_sor_snpn_si_len,
16679
16
        { "Length of SOR-SNPN-SI contents", "nas-5gs.mm.snpn_si_len",
16680
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16681
16
            NULL, HFILL }
16682
16
        },
16683
16
        { &hf_nas_5gs_sor_snpn_si_payload,
16684
16
        { "SOR-SNPN-SI contents payload", "nas-5gs.mm.snpn_si_payload",
16685
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16686
16
            NULL, HFILL }
16687
16
        },
16688
16
        { &hf_nas_5gs_sor_snpn_si_ls_len,
16689
16
        { "Length of SOR-SNPN-SI-LS contents", "nas-5gs.mm.snpn_si_ls_len",
16690
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16691
16
            NULL, HFILL }
16692
16
        },
16693
16
        { &hf_nas_5gs_sor_snpn_si_ls_payload,
16694
16
        { "SOR-SNPN-SI-LS contents payload", "nas-5gs.mm.snpn_si_ls_payload",
16695
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16696
16
            NULL, HFILL }
16697
16
        },
16698
16
        { &hf_nas_5gs_access_tech_o1_b7,
16699
16
        { "Access technology UTRAN",   "nas-5gs.access_tech_o1_b7.utran",
16700
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x80,
16701
16
            NULL, HFILL }
16702
16
        },
16703
16
        { &hf_nas_5gs_access_tech_o1_b6,
16704
16
        { "Access technology E-UTRAN",   "nas-5gs.access_tech_o1_b6.e_utran",
16705
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x40,
16706
16
            NULL, HFILL }
16707
16
        },
16708
16
        { &hf_nas_5gs_access_tech_o1_b5,
16709
16
        { "Access technology E-UTRAN in WB-S1 mode",   "nas-5gs.access_tech_o1_b5.e_utran_in_wb_s1_mode",
16710
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x20,
16711
16
            NULL, HFILL }
16712
16
        },
16713
16
        { &hf_nas_5gs_access_tech_o1_b4,
16714
16
        { "Access technology E-UTRAN in NB-S1 mode",   "nas-5gs.access_tech_o1_b4.e_utran_in_nb_s1_mode",
16715
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x10,
16716
16
            NULL, HFILL }
16717
16
        },
16718
16
        { &hf_nas_5gs_access_tech_o1_b3,
16719
16
        { "Access technology NG-RAN",   "nas-5gs.access_tech_o1_b3.ng_ran",
16720
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x08,
16721
16
            NULL, HFILL }
16722
16
        },
16723
16
        { &hf_nas_5gs_access_tech_o2_b7,
16724
16
        { "Access technology GSM",   "nas-5gs.access_tech_o2_b7.gsm",
16725
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x80,
16726
16
            NULL, HFILL }
16727
16
        },
16728
16
        { &hf_nas_5gs_access_tech_o2_b6,
16729
16
        { "Access technology GSM COMPACT",   "nas-5gs.access_tech_o2_b6.gsm_compact",
16730
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x40,
16731
16
            NULL, HFILL }
16732
16
        },
16733
16
        { &hf_nas_5gs_access_tech_o2_b5,
16734
16
        { "Access technology CDMA2000 HRPD",   "nas-5gs.access_tech_o2_b5.cdma2000_hrpd",
16735
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x20,
16736
16
            NULL, HFILL }
16737
16
        },
16738
16
        { &hf_nas_5gs_access_tech_o2_b4,
16739
16
        { "Access technology CDMA2000 1xRTT",   "nas-5gs.access_tech_o2_b4.cdma2000_1x_rtt",
16740
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x10,
16741
16
            NULL, HFILL }
16742
16
        },
16743
16
        { &hf_nas_5gs_access_tech_o2_b3,
16744
16
        { "Access technology EC-GSM-IoT",   "nas-5gs.access_tech_o2_b3.ec_gsm_iot",
16745
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x08,
16746
16
            NULL, HFILL }
16747
16
        },
16748
16
        { &hf_nas_5gs_access_tech_o2_b2,
16749
16
        { "Access technology GSM",   "nas-5gs.access_tech_o2_b2.gsm",
16750
16
            FT_BOOLEAN, 8, TFS(&tfs_selected_not_selected), 0x04,
16751
16
            NULL, HFILL }
16752
16
        },
16753
16
        { &hf_nas_5gs_single_port_type,
16754
16
        { "Port number", "nas-5gs.single_port_number",
16755
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16756
16
            NULL, HFILL }
16757
16
        },
16758
16
        { &hf_nas_5gs_port_range_type_low,
16759
16
        { "Port range low limit", "nas-5gs.port_range_low_limit",
16760
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16761
16
            NULL, HFILL }
16762
16
        },
16763
16
        { &hf_nas_5gs_port_range_type_high,
16764
16
        { "Port range high limit", "nas-5gs.port_range_high_limit",
16765
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16766
16
            NULL, HFILL }
16767
16
        },
16768
16
        { &hf_nas_5gs_sec_param_idx,
16769
16
        { "Security parameter index", "nas-5gs.security_parameter_index",
16770
16
            FT_UINT32, BASE_HEX, NULL, 0x0,
16771
16
            NULL, HFILL }
16772
16
        },
16773
16
        { &hf_nas_5gs_tos_tc_val,
16774
16
        { "Type of service/Traffic class value", "nas-5gs.tos_tc_value",
16775
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
16776
16
            NULL, HFILL }
16777
16
        },
16778
16
        { &hf_nas_5gs_tos_tc_mask,
16779
16
        { "Type of service/Traffic class mask", "nas-5gs.tos_tc_mask",
16780
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
16781
16
            NULL, HFILL }
16782
16
        },
16783
16
        { &hf_nas_5gs_flow_label,
16784
16
        { "Flow label", "nas-5gs.flow_label",
16785
16
            FT_UINT24, BASE_HEX, NULL, 0x0fffff,
16786
16
            NULL, HFILL }
16787
16
        },
16788
16
        { &hf_nas_5gs_mac_addr,
16789
16
        { "MAC address", "nas-5gs.mac_addr",
16790
16
            FT_ETHER, BASE_NONE, NULL, 0x0,
16791
16
            NULL, HFILL }
16792
16
        },
16793
16
        { &hf_nas_5gs_vlan_tag_vid,
16794
16
        { "VID", "nas-5gs.vlan_tag_vid",
16795
16
            FT_UINT16, BASE_HEX, NULL, 0x0fff,
16796
16
            NULL, HFILL }
16797
16
        },
16798
16
        { &hf_nas_5gs_vlan_tag_pcp_ind,
16799
16
        { "PCP indicator", "nas-5gs.vlan_tag_pcp_ind",
16800
16
            FT_BOOLEAN, 8, NULL, 0x20,
16801
16
            NULL, HFILL }
16802
16
        },
16803
16
        { &hf_nas_5gs_vlan_tag_dei_ind,
16804
16
        { "DEI indicator", "nas-5gs.vlan_tag_dei_ind",
16805
16
            FT_BOOLEAN, 8, NULL, 0x10,
16806
16
            NULL, HFILL }
16807
16
        },
16808
16
        { &hf_nas_5gs_vlan_tag_pcp,
16809
16
        { "PCP", "nas-5gs.vlan_tag_pcp",
16810
16
            FT_UINT8, BASE_HEX, NULL, 0x0e,
16811
16
            NULL, HFILL }
16812
16
        },
16813
16
        { &hf_nas_5gs_vlan_tag_dei,
16814
16
        { "DEI", "nas-5gs.vlan_tag_dei",
16815
16
            FT_UINT8, BASE_HEX, NULL, 0x01,
16816
16
            NULL, HFILL }
16817
16
        },
16818
16
        { &hf_nas_5gs_ethertype,
16819
16
        { "Ethertype", "nas-5gs.ethertype",
16820
16
            FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0,
16821
16
            NULL, HFILL }
16822
16
        },
16823
16
        { &hf_nas_5gs_mac_addr_low,
16824
16
        { "MAC address range low limit", "nas-5gs.mac_addr_low",
16825
16
            FT_ETHER, BASE_NONE, NULL, 0x0,
16826
16
            NULL, HFILL }
16827
16
        },
16828
16
        { &hf_nas_5gs_mac_addr_high,
16829
16
        { "MAC address range high limit", "nas-5gs.mac_addr",
16830
16
            FT_ETHER, BASE_NONE, NULL, 0x0,
16831
16
            NULL, HFILL }
16832
16
        },
16833
16
        { &hf_nas_5gs_srtp_mult_media_id_info_rptpi,
16834
16
        { "RTCP packet type presence indicator (RPTPI)", "nas-5gs.srtp_mult_media_id_info.rptpi",
16835
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x10,
16836
16
            NULL, HFILL }
16837
16
        },
16838
16
        { &hf_nas_5gs_srtp_mult_media_id_info_rshempi,
16839
16
        { "RRTP SDES header extension id for MID presence indicator (RSHEMPI)", "nas-5gs.srtp_mult_media_id_info.rshempi",
16840
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x08,
16841
16
            NULL, HFILL }
16842
16
        },
16843
16
        { &hf_nas_5gs_srtp_mult_media_id_info_mitpi,
16844
16
        { "MID identification-tag presence indicator (MITPI)", "nas-5gs.srtp_mult_media_id_info.mitpi",
16845
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x04,
16846
16
            NULL, HFILL }
16847
16
        },
16848
16
        { &hf_nas_5gs_srtp_mult_media_id_info_ptpi,
16849
16
        { "Payload type presence indicator (PTPI)", "nas-5gs.srtp_mult_media_id_info.ptpi",
16850
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x02,
16851
16
            NULL, HFILL }
16852
16
        },
16853
16
        { &hf_nas_5gs_srtp_mult_media_id_info_ssrcpi,
16854
16
        { "SSRC presence indicator (SSRCPI)", "nas-5gs.srtp_mult_media_id_info.ssrcpi",
16855
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x01,
16856
16
            NULL, HFILL }
16857
16
        },
16858
16
        { &hf_nas_5gs_srtp_mult_media_id_info_nb,
16859
16
        { "Number of (S)RTP multiplexed media identification information entries", "nas-5gs.srtp_mult_media_id_info.nb",
16860
16
            FT_UINT8, BASE_DEC, NULL, 0,
16861
16
            NULL, HFILL }
16862
16
        },
16863
16
        { &hf_nas_5gs_srtp_mult_media_id_info_len,
16864
16
        { "Length of value part of (S)RTP multiplexed media identification information", "nas-5gs.srtp_mult_media_id_info.len",
16865
16
            FT_UINT8, BASE_DEC, NULL, 0,
16866
16
            NULL, HFILL }
16867
16
        },
16868
16
        { &hf_nas_5gs_srtp_mult_media_id_info_ssrc,
16869
16
        { "Synchronization source (SSRC)", "nas-5gs.srtp_mult_media_id_info.ssrc",
16870
16
            FT_UINT32, BASE_HEX, NULL, 0,
16871
16
            NULL, HFILL }
16872
16
        },
16873
16
        { &hf_nas_5gs_srtp_mult_media_id_info_payload_type,
16874
16
        { "Payload type", "nas-5gs.srtp_mult_media_id_info.payload_type",
16875
16
            FT_UINT8, BASE_DEC, NULL, 0,
16876
16
            NULL, HFILL }
16877
16
        },
16878
16
        { &hf_nas_5gs_srtp_mult_media_id_info_mid_id_tag_len,
16879
16
        { "MID identification-tag length", "nas-5gs.srtp_mult_media_id_info.mid_id_tag_len",
16880
16
            FT_UINT8, BASE_DEC, NULL, 0,
16881
16
            NULL, HFILL }
16882
16
        },
16883
16
        { &hf_nas_5gs_srtp_mult_media_id_info_mid_id_tag,
16884
16
        { "MID identification-tag", "nas-5gs.srtp_mult_media_id_info.mid_id_tag",
16885
16
            FT_BYTES, BASE_NONE, NULL, 0,
16886
16
            NULL, HFILL }
16887
16
        },
16888
16
        { &hf_nas_5gs_srtp_mult_media_id_info_sdes_hdr_ext_id,
16889
16
        { "RTP SDES header extension id for MID", "nas-5gs.srtp_mult_media_id_info.sdes_hdr_ext_id",
16890
16
            FT_BYTES, BASE_NONE, NULL, 0,
16891
16
            NULL, HFILL }
16892
16
        },
16893
16
        { &hf_nas_5gs_srtp_mult_media_id_info_rtcp_pkt_type,
16894
16
        { "RTCP packet type", "nas-5gs.srtp_mult_media_id_info.rtcp_pkt_type",
16895
16
            FT_UINT8, BASE_DEC, NULL, 0,
16896
16
            NULL, HFILL }
16897
16
        },
16898
16
        { &hf_nas_5gs_updp_ue_pol_sect_sublst_len,
16899
16
        { "Length", "nas-5gs.updp.ue_pol_sect_sublst_len",
16900
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16901
16
            NULL, HFILL }
16902
16
        },
16903
16
        { &hf_nas_5gs_updp_ue_pol_sect_subresult_len,
16904
16
        { "Number of results", "nas-5gs.updp.ue_pol_sect_subresult_len",
16905
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16906
16
            NULL, HFILL }
16907
16
        },
16908
16
        { &hf_nas_5gs_updp_instr_len,
16909
16
        { "Length", "nas-5gs.updp.instr_len",
16910
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16911
16
            NULL, HFILL }
16912
16
        },
16913
16
        { &hf_nas_5gs_updp_upsc,
16914
16
        { "UPSC", "nas-5gs.updp.upsc",
16915
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16916
16
            NULL, HFILL }
16917
16
        },
16918
16
        { &hf_nas_5gs_updp_failed_instruction_order,
16919
16
        { "Failed instruction order", "nas-5gs.updp.failed_instruction_order",
16920
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16921
16
            NULL, HFILL }
16922
16
        },
16923
16
        { &hf_nas_5gs_updp_policy_len,
16924
16
        { "Length", "nas-5gs.updp.policy_len",
16925
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16926
16
            NULL, HFILL }
16927
16
        },
16928
16
        { &hf_nas_5gs_updp_ue_policy_part_type,
16929
16
        { "UE policy part type", "nas-5gs.updp.ue_policy_part_type",
16930
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_updp_ue_policy_part_type_vals), 0x0f,
16931
16
            NULL, HFILL }
16932
16
        },
16933
16
        { &hf_nas_5gs_updp_ue_policy_part_cont,
16934
16
        { "UE policy part contents", "nas-5gs.updp.ue_policy_part_cont",
16935
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16936
16
            NULL, HFILL }
16937
16
        },
16938
16
        { &hf_nas_5gs_ursp_rule_len,
16939
16
        { "Length", "nas-5gs.ursp.rule_len",
16940
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16941
16
            NULL, HFILL }
16942
16
        },
16943
16
        { &hf_nas_5gs_ursp_rule_prec,
16944
16
        { "Precedence", "nas-5gs.ursp.rule_prec",
16945
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16946
16
            NULL, HFILL }
16947
16
        },
16948
16
        { &hf_nas_5gs_ursp_traff_desc_lst_len,
16949
16
        { "Length", "nas-5gs.ursp.traff_desc_len",
16950
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16951
16
            NULL, HFILL }
16952
16
        },
16953
16
        { &hf_nas_5gs_ursp_traff_desc,
16954
16
        { "Traffic descriptor", "nas-5gs.ursp.traff_desc",
16955
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_ursp_traff_desc_component_type_values), 0x0,
16956
16
            NULL, HFILL }
16957
16
        },
16958
16
        { &hf_nas_5gs_ursp_r_sel_desc_lst_len,
16959
16
        { "Length", "nas-5gs.ursp.r_sel_desc_lst_len",
16960
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16961
16
            NULL, HFILL }
16962
16
        },
16963
16
        { &hf_nas_5gs_ursp_r_sel_desc_lst,
16964
16
        { "Route selection descriptor list", "nas-5gs.ursp.r_sel_desc_lst",
16965
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
16966
16
            NULL, HFILL }
16967
16
        },
16968
16
        { &hf_nas_5gs_ursp_traff_desc_ipv4,
16969
16
        { "IPv4 address", "nas-5gs.ursp.traff_desc.ipv4",
16970
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
16971
16
            NULL, HFILL }
16972
16
        },
16973
16
        { &hf_nas_5gs_ursp_traff_desc_ipv4_mask,
16974
16
        { "IPv4 mask", "nas-5gs.ursp.traff_desc.ipv4_mask",
16975
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
16976
16
            NULL, HFILL }
16977
16
        },
16978
16
        { &hf_nas_5gs_ursp_traff_desc_ipv6,
16979
16
        { "IPv6 address", "nas-5gs.ursp.traff_desc.ipv6",
16980
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
16981
16
            NULL, HFILL }
16982
16
        },
16983
16
        { &hf_nas_5gs_ursp_traff_desc_ipv6_prefix_len,
16984
16
        { "IPv6 prefix length", "nas-5gs.ursp.traff_desc.ipv6_prefix_len",
16985
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
16986
16
            NULL, HFILL }
16987
16
        },
16988
16
        { &hf_nas_5gs_ursp_traff_desc_next_hdr,
16989
16
        { "Protocol identifier/next header type", "nas-5gs.ursp.traff_desc.next_hdr",
16990
16
            FT_UINT8, BASE_DEC | BASE_EXT_STRING, &ipproto_val_ext, 0x0,
16991
16
            NULL, HFILL }
16992
16
        },
16993
16
        { &hf_nas_5gs_ursp_traff_desc_single_remote_port,
16994
16
        { "Remote port", "nas-5gs.ursp.traff_desc.single_remote_port",
16995
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
16996
16
            NULL, HFILL }
16997
16
        },
16998
16
        { &hf_nas_5gs_ursp_traff_desc_remote_port_range_low,
16999
16
        { "Remote port range low", "nas-5gs.ursp.traff_desc.remote_port_range_low",
17000
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17001
16
            NULL, HFILL }
17002
16
        },
17003
16
        { &hf_nas_5gs_ursp_traff_desc_remote_port_range_high,
17004
16
        { "Remote port range high", "nas-5gs.ursp.traff_desc.remote_port_range_high",
17005
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17006
16
            NULL, HFILL }
17007
16
        },
17008
16
        { &hf_nas_5gs_ursp_traff_desc_ip_3_tuple_bitmap,
17009
16
            { "IP 3 tuple bitmap", "nas-5gs.ursp.traff_desc.ip_3_tuple_bitmap",
17010
16
                FT_UINT8, BASE_HEX, NULL, 0x0,
17011
16
                NULL, HFILL }
17012
16
            },
17013
16
        { &hf_nas_5gs_ursp_traff_desc_sec_param_index,
17014
16
        { "Security parameter index", "nas-5gs.ursp.traff_desc.sec_param_index",
17015
16
            FT_UINT32, BASE_HEX, NULL, 0x0,
17016
16
            NULL, HFILL }
17017
16
        },
17018
16
        { &hf_nas_5gs_ursp_traff_desc_tos_tc,
17019
16
        { "Type of service/traffic class", "nas-5gs.ursp.traff_desc.tos_tc",
17020
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
17021
16
            NULL, HFILL }
17022
16
        },
17023
16
        { &hf_nas_5gs_ursp_traff_desc_tos_tc_mask,
17024
16
        { "Type of service/traffic class mask", "nas-5gs.ursp.traff_desc.tos_tc_mask",
17025
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
17026
16
            NULL, HFILL }
17027
16
        },
17028
16
        { &hf_nas_5gs_ursp_traff_desc_flow_label,
17029
16
        { "Flow label", "nas-5gs.ursp.traff_desc.flow_label",
17030
16
            FT_UINT24, BASE_HEX, NULL, 0x0fffff,
17031
16
            NULL, HFILL }
17032
16
        },
17033
16
        { &hf_nas_5gs_ursp_traff_desc_dest_mac_addr,
17034
16
        { "Destination MAC address", "nas-5gs.ursp.traff_desc.dest_mac_addr",
17035
16
            FT_ETHER, BASE_NONE, NULL, 0x0,
17036
16
            NULL, HFILL }
17037
16
        },
17038
16
        { &hf_nas_5gs_ursp_traff_desc_ctag_vid,
17039
16
        { "802.1Q C-TAG VID", "nas-5gs.ursp.traff_desc.ctag_vid",
17040
16
            FT_UINT16, BASE_HEX, NULL, 0x0fff,
17041
16
            NULL, HFILL }
17042
16
        },
17043
16
        { &hf_nas_5gs_ursp_traff_desc_stag_vid,
17044
16
        { "802.1Q S-TAG VID", "nas-5gs.ursp.traff_desc.stag_vid",
17045
16
            FT_UINT16, BASE_HEX, NULL, 0x0fff,
17046
16
            NULL, HFILL }
17047
16
        },
17048
16
        { &hf_nas_5gs_ursp_traff_desc_ctag_pcp,
17049
16
        { "802.1Q C-TAG PCP", "nas-5gs.ursp.traff_desc.ctag_pcp",
17050
16
            FT_UINT8, BASE_HEX, NULL, 0x0e,
17051
16
            NULL, HFILL }
17052
16
        },
17053
16
        { &hf_nas_5gs_ursp_traff_desc_ctag_dei,
17054
16
        { "802.1Q C-TAG DEI", "nas-5gs.ursp.traff_desc.ctag_dei",
17055
16
            FT_UINT8, BASE_HEX, NULL, 0x01,
17056
16
            NULL, HFILL }
17057
16
        },
17058
16
        { &hf_nas_5gs_ursp_traff_desc_stag_pcp,
17059
16
        { "802.1Q S-TAG PCP", "nas-5gs.ursp.traff_desc.stag_pcp",
17060
16
            FT_UINT8, BASE_HEX, NULL, 0x0e,
17061
16
            NULL, HFILL }
17062
16
        },
17063
16
        { &hf_nas_5gs_ursp_traff_desc_stag_dei,
17064
16
        { "802.1Q S-TAG DEI", "nas-5gs.ursp.traff_desc.stag_dei",
17065
16
            FT_UINT8, BASE_HEX, NULL, 0x01,
17066
16
            NULL, HFILL }
17067
16
        },
17068
16
        { &hf_nas_5gs_ursp_traff_desc_ethertype,
17069
16
        { "Ethertype", "nas-5gs.ursp.traff_desc.ethertype",
17070
16
            FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0,
17071
16
            NULL, HFILL }
17072
16
        },
17073
16
        { &hf_nas_5gs_ursp_traff_desc_conn_cap_len,
17074
16
        { "Connection capabilities length", "nas-5gs.ursp.traff_desc.conn_cap_len",
17075
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17076
16
            NULL, HFILL }
17077
16
        },
17078
16
        { &hf_nas_5gs_ursp_traff_desc_conn_cap,
17079
16
        { "Connection capability", "nas-5gs.ursp.traff_desc.conn_cap",
17080
16
            FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(nas_5gs_ursp_traff_desc_conn_cap_values), 0x0,
17081
16
            NULL, HFILL }
17082
16
        },
17083
16
        { &hf_nas_5gs_ursp_traff_desc_dest_fqdn_len,
17084
16
        { "Destination FQDN length", "nas-5gs.ursp.traff_desc.dest_fqdn_len",
17085
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17086
16
            NULL, HFILL }
17087
16
        },
17088
16
        { &hf_nas_5gs_ursp_traff_desc_dest_fqdn,
17089
16
        { "Destination FQDN", "nas-5gs.ursp.traff_desc.dest_fqdn",
17090
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17091
16
            NULL, HFILL }
17092
16
        },
17093
16
        { &hf_nas_5gs_ursp_traff_desc_regex_len,
17094
16
        { "Regular expression length", "nas-5gs.ursp.traff_desc.regex_len",
17095
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17096
16
            NULL, HFILL }
17097
16
        },
17098
16
        { &hf_nas_5gs_ursp_traff_desc_regex,
17099
16
        { "Regular expression", "nas-5gs.ursp.traff_desc.regex",
17100
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17101
16
            NULL, HFILL }
17102
16
        },
17103
16
        { &hf_nas_5gs_ursp_traff_desc_dest_mac_addr_range_low,
17104
16
        { "Destination MAC address range low", "nas-5gs.ursp.traff_desc.dest_mac_addr_range_low",
17105
16
            FT_ETHER, BASE_NONE, NULL, 0x0,
17106
16
            NULL, HFILL }
17107
16
        },
17108
16
        { &hf_nas_5gs_ursp_traff_desc_dest_mac_addr_range_high,
17109
16
        { "Destination MAC address range high", "nas-5gs.ursp.traff_desc.dest_mac_addr_range_high",
17110
16
            FT_ETHER, BASE_NONE, NULL, 0x0,
17111
16
            NULL, HFILL }
17112
16
        },
17113
16
        { &hf_nas_5gs_ursp_traff_desc_pin_id_len,
17114
16
        { "PIN ID length", "nas-5gs.ursp.traff_desc.pin_id_len",
17115
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17116
16
            NULL, HFILL }
17117
16
        },
17118
16
        { &hf_nas_5gs_ursp_traff_desc_pin_id,
17119
16
        { "PIN ID", "nas-5gs.ursp.traff_desc.pin_id",
17120
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17121
16
            NULL, HFILL }
17122
16
        },
17123
16
        { &hf_nas_5gs_ursp_traff_desc_conn_group_id_len,
17124
16
        { "Connectivity group ID length", "nas-5gs.ursp.traff_desc.conn_group_id_len",
17125
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17126
16
            NULL, HFILL }
17127
16
        },
17128
16
        { &hf_nas_5gs_ursp_traff_desc_conn_group_id,
17129
16
        { "Connectivity group ID", "nas-5gs.ursp.traff_desc.conn_group_id",
17130
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17131
16
            NULL, HFILL }
17132
16
        },
17133
16
        { &hf_nas_5gs_ursp_traff_desc_len,
17134
16
        { "Length", "nas-5gs.ursp.r_sel_desc_len",
17135
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17136
16
            NULL, HFILL }
17137
16
        },
17138
16
        { &hf_nas_5gs_ursp_r_sel_des_prec,
17139
16
        { "Precedence", "nas-5gs.ursp.r_sel_des_prec",
17140
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17141
16
            NULL, HFILL }
17142
16
        },
17143
16
        { &hf_nas_5gs_ursp_r_sel_des_cont_len,
17144
16
        { "Length", "nas-5gs.ursp.r_sel_des_cont_len",
17145
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17146
16
            NULL, HFILL }
17147
16
        },
17148
16
        { &hf_nas_5gs_ursp_ursp_r_sel_desc_comp_type,
17149
16
        { "Route selection descriptor component type identifier", "nas-5gs.ursp.r_sel_desc_comp_type",
17150
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_ursp_r_sel_desc_comp_type_values), 0x0,
17151
16
            NULL, HFILL }
17152
16
        },
17153
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_crit_len,
17154
16
        { "Length of location criteria", "nas-5gs.ursp.r_sel_desc.loc_crit_len",
17155
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17156
16
            NULL, HFILL }
17157
16
        },
17158
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_area_type,
17159
16
        { "Type of location area", "nas-5gs.ursp.r_sel_desc.loc_area_type",
17160
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_ursp_r_sel_desc_loc_area_type_values), 0x0,
17161
16
            NULL, HFILL }
17162
16
        },
17163
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_num_eutra_cells,
17164
16
        { "Number of E-UTRA cell identities", "nas-5gs.ursp.r_sel_desc.loc_num_eutra_cells",
17165
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17166
16
            NULL, HFILL }
17167
16
        },
17168
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_num_nr_cells,
17169
16
        { "Number of NR cell identities", "nas-5gs.ursp.r_sel_desc.loc_num_nr_cells",
17170
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17171
16
            NULL, HFILL }
17172
16
        },
17173
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_num_gnb_ids,
17174
16
        { "Number of Global gNB identities", "nas-5gs.ursp.r_sel_desc.loc_num_gnb_ids",
17175
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17176
16
            NULL, HFILL }
17177
16
        },
17178
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_nr_cell_id,
17179
16
        { "NR Cell ID", "nas-5gs.ursp.r_sel_desc.nr_cell_id",
17180
16
            FT_UINT40, BASE_HEX, NULL, 0x0,
17181
16
            NULL, HFILL }
17182
16
        },
17183
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_eutra_cell_id,
17184
16
        { "E-UTRA Cell ID", "nas-5gs.ursp.r_sel_desc.eutra_cell_id",
17185
16
            FT_UINT32, BASE_HEX, NULL, 0x0,
17186
16
            NULL, HFILL }
17187
16
        },
17188
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_gnb_id,
17189
16
        { "gNB ID", "nas-5gs.ursp.r_sel_desc.gnb_id",
17190
16
            FT_UINT32, BASE_HEX, NULL, 0x0,
17191
16
            NULL, HFILL }
17192
16
        },
17193
16
        { &hf_nas_5gs_ursp_r_sel_desc_loc_tai_len,
17194
16
        { "Length", "nas-5gs.ursp.r_sel_desc.loc_tai_len",
17195
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17196
16
            NULL, HFILL }
17197
16
        },
17198
16
        { &hf_nas_5gs_ursp_r_sel_desc_time_win_start,
17199
16
        { "Start time", "nas-5gs.ursp.r_sel_desc.time_window.start",
17200
16
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
17201
16
            NULL, HFILL }
17202
16
        },
17203
16
        { &hf_nas_5gs_ursp_r_sel_desc_time_win_stop,
17204
16
        { "Stop time", "nas-5gs.ursp.r_sel_desc.time_window.stop",
17205
16
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
17206
16
            NULL, HFILL }
17207
16
        },
17208
16
        { &hf_nas_5gs_ursp_r_sel_desc_pdu_sess_pair_id,
17209
16
        { "PDU session pair ID", "nas-5gs.ursp.r_sel_desc.pdu_session_pair_id",
17210
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17211
16
            NULL, HFILL }
17212
16
        },
17213
16
        { &hf_nas_5gs_ursp_r_sel_desc_rsn,
17214
16
        { "RSN", "nas-5gs.ursp.r_sel_desc.rsn",
17215
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_sm_pdu_session_rsn_vals), 0x0,
17216
16
            NULL, HFILL }
17217
16
        },
17218
16
        { &hf_nas_5gs_dnn_len,
17219
16
        { "Length", "nas-5gs.dnn_len",
17220
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17221
16
            NULL, HFILL }
17222
16
        },
17223
16
        { &hf_nas_5gs_e802cstag,
17224
16
        { "Support of extended 802.1Q C-TAG/S-TAG PCP/DEI traffic descriptor",   "nas-5gs.e802cstag",
17225
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
17226
16
            NULL, HFILL }
17227
16
        },
17228
16
        { &hf_nas_5gs_sup_rure,
17229
16
        { "Support of Reporting URSP Rule Enforcement by the UE",   "nas-5gs.sup_rure",
17230
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
17231
16
            NULL, HFILL }
17232
16
        },
17233
16
        { &hf_nas_5gs_svpsu,
17234
16
        { "Support of VPS URSP",   "nas-5gs.svpsu",
17235
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
17236
16
            NULL, HFILL }
17237
16
        },
17238
16
        { &hf_nas_5gs_epsurdp,
17239
16
        { "Support of URSP provisioning in EPS by the UE",   "nas-5gs.epsurdp",
17240
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
17241
16
            NULL, HFILL }
17242
16
        },
17243
16
        { &hf_nas_5gs_sup_andsp,
17244
16
        { "Support of ANDSP by the UE",   "nas-5gs.sup_andsp",
17245
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
17246
16
            NULL, HFILL }
17247
16
        },
17248
16
        { &hf_nas_5gs_nssui,
17249
16
        { "Non-subscribed SNPN signalled URSP handling indication (NSSUI)",   "nas-5gs.nssui",
17250
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_nssui), 0x01,
17251
16
            NULL, HFILL }
17252
16
        },
17253
16
        { &hf_nas_5gs_upsi_sublist_len,
17254
16
        { "Length", "nas-5gs.upsi_sublist_len",
17255
16
            FT_INT32, BASE_DEC, NULL, 0x0,
17256
16
            NULL, HFILL }
17257
16
        },
17258
16
        { &hf_nas_5gs_upsc,
17259
16
        { "UPSC", "nas-5gs.upsc",
17260
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
17261
16
            NULL, HFILL }
17262
16
        },
17263
16
        { &hf_nas_5gs_os_id,
17264
16
          { "OS id(UUID)", "nas-5gs.os_id",
17265
16
            FT_GUID, BASE_NONE, NULL, 0x0,
17266
16
            NULL, HFILL } },
17267
16
        { &hf_nas_5gs_upds_cause,
17268
16
        { "UPDS cause", "nas-5gs.upds_cause",
17269
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_updp_upds_cause_vals), 0x0,
17270
16
            NULL, HFILL }
17271
16
        },
17272
16
        { &hf_nas_5gs_v2xuui,
17273
16
        { "UE policies for V2X communication over Uu indicator (V2XUUI)", "nas-5gs.v2xuui",
17274
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x02,
17275
16
            NULL, HFILL }
17276
16
        },
17277
16
        { &hf_nas_5gs_v2xpc5i,
17278
16
        { "UE policies for V2X communication over PC5 indicator (V2XPC5I)", "nas-5gs.v2xpc5i",
17279
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
17280
16
            NULL, HFILL }
17281
16
        },
17282
16
        { &hf_nas_5gs_os_app_id_len,
17283
16
        { "Length", "nas-5gs.app_id_len",
17284
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17285
16
            NULL, HFILL }
17286
16
        },
17287
16
        { &hf_nas_5gs_os_app_id,
17288
16
          { "OS App id", "nas-5gs.os_app_id",
17289
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
17290
16
            NULL, HFILL } },
17291
16
        { &hf_nas_5gs_mm_len_of_rej_s_nssai,
17292
16
        { "Length of rejected S-NSSAI", "nas-5gs.mm.len_of_rej_s_nssai",
17293
16
            FT_UINT8, BASE_DEC, NULL, 0xf0,
17294
16
            NULL, HFILL }
17295
16
        },
17296
16
        { &hf_nas_5gs_mm_rej_s_nssai_cause,
17297
16
        { "Cause", "nas-5gs.mm.rej_s_nssai.cause",
17298
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_rej_s_nssai_cause_vals), 0x0f,
17299
16
            NULL, HFILL }
17300
16
        },
17301
16
        { &hf_nas_5gs_mm_ue_radio_cap_id,
17302
16
        { "UE radio capability ID", "nas-5gs.mm.ue_radio_cap_id",
17303
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17304
16
            NULL, HFILL }
17305
16
        },
17306
16
        { &hf_nas_5gs_mm_ue_radio_cap_id_del_req,
17307
16
        { "Deletion request", "nas-5gs.mm.ue_radio_cap_id_del_req",
17308
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_ue_radio_cap_id_del_req_vals), 0x07,
17309
16
            NULL, HFILL }
17310
16
        },
17311
16
        { &hf_nas_5gs_mm_trunc_amf_set_id,
17312
16
        { "Truncated AMF Set ID value", "nas-5gs.mm.trunc_amf_set_id",
17313
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_amf_trunc_set_id_vals), 0xf0,
17314
16
            NULL, HFILL }
17315
16
        },
17316
16
        { &hf_nas_5gs_mm_trunc_amf_pointer,
17317
16
        { "Truncated AMF Pointer value", "nas-5gs.mm.trunc_amf_pointer",
17318
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_amf_trunc_pointer_vals), 0x0f,
17319
16
            NULL, HFILL }
17320
16
        },
17321
16
        { &hf_nas_5gs_mm_n5gcreg_b0,
17322
16
        { "N5GC device indication bit (N5GCREG)",   "nas-5gs.mm.n5gcreg",
17323
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
17324
16
            NULL, HFILL }
17325
16
        },
17326
16
        { &hf_nas_5gs_mm_nb_n1_drx_value,
17327
16
        { "NB-N1 mode DRX value", "nas-5gs.mm.nb_n1_drx_value",
17328
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_nb_n1_drx_params_vals), 0x0f,
17329
16
            NULL, HFILL }
17330
16
        },
17331
16
        { &hf_nas_5gs_mm_scmr,
17332
16
        { "Signalling connection maintain request (SCMR)",   "nas-5gs.mm.scmr",
17333
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_scmr), 0x01,
17334
16
            NULL, HFILL }
17335
16
        },
17336
16
        { &hf_nas_5gs_mm_extended_rejected_nssai_number_of_element,
17337
16
        { "Number of element",   "nas-5gs.mm.extended_rejected_nssai.number_of_element",
17338
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_extended_rejected_s_nssai_number_of_element_vals), 0x0f,
17339
16
            NULL, HFILL }
17340
16
        },
17341
16
        { &hf_nas_5gs_mm_extended_rejected_nssai_type_of_list,
17342
16
        { "Type of list",   "nas-5gs.mm.extended_rejected_nssai.type_of_list",
17343
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_extended_rejected_s_nssai_type_of_list_vals), 0x70,
17344
16
            NULL, HFILL }
17345
16
        },
17346
16
        { &hf_nas_5gs_mm_extended_rejected_nssai_spare,
17347
16
        { "Spare",   "nas-5gs.mm.extended_rejected_nssai.spare",
17348
16
            FT_UINT8, BASE_DEC, NULL, 0x80,
17349
16
            NULL, HFILL }
17350
16
        },
17351
16
        { &hf_nas_5gs_mm_extended_rejected_nssai_back_off_timer,
17352
16
        { "Back-off timer value",   "nas-5gs.mm.extended_rejected_nssai.back_off_timer",
17353
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
17354
16
            NULL, HFILL }
17355
16
        },
17356
16
        { &hf_nas_5gs_mm_len_of_rejected_s_nssai,
17357
16
        { "Length of rejected S-NSSAI",   "nas-5gs.mm.rejected_s_nssai.length",
17358
16
            FT_UINT8, BASE_DEC, NULL, 0xf0,
17359
16
            NULL, HFILL }
17360
16
        },
17361
16
        { &hf_nas_5gs_mm_rejected_s_nssai_cause_value,
17362
16
        { "Cause value",   "nas-5gs.mm.rejected_s_nssai.cause_value",
17363
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_extended_rej_s_nssai_cause_vals), 0x0f,
17364
16
            NULL, HFILL }
17365
16
        },
17366
16
        { &hf_nas_5gs_mm_paging_restriction_type,
17367
16
        { "Paging restriction type",   "nas-5gs.mm.paging_restriction.type",
17368
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_paging_restriction_type_vals), 0x0f,
17369
16
            NULL, HFILL }
17370
16
        },
17371
16
        { &hf_nas_5gs_mm_paging_restriction_psi_7,
17372
16
        { "PSI(7)",   "nas-5gs.mm.paging_restriction.psi_7",
17373
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x80,
17374
16
            NULL, HFILL }
17375
16
        },
17376
16
        { &hf_nas_5gs_mm_paging_restriction_psi_6,
17377
16
        { "PSI(6)",   "nas-5gs.mm.paging_restriction.psi_6",
17378
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x40,
17379
16
            NULL, HFILL }
17380
16
        },
17381
16
        { &hf_nas_5gs_mm_paging_restriction_psi_5,
17382
16
        { "PSI(5)",   "nas-5gs.mm.paging_restriction.psi_5",
17383
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x20,
17384
16
            NULL, HFILL }
17385
16
        },
17386
16
        { &hf_nas_5gs_mm_paging_restriction_psi_4,
17387
16
        { "PSI(4)",   "nas-5gs.mm.paging_restriction.psi_4",
17388
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x10,
17389
16
            NULL, HFILL }
17390
16
        },
17391
16
        { &hf_nas_5gs_mm_paging_restriction_psi_3,
17392
16
        { "PSI(3)",   "nas-5gs.mm.paging_restriction.psi_3",
17393
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x08,
17394
16
            NULL, HFILL }
17395
16
        },
17396
16
        { &hf_nas_5gs_mm_paging_restriction_psi_2,
17397
16
        { "PSI(2)",   "nas-5gs.mm.paging_restriction.psi_2",
17398
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x04,
17399
16
            NULL, HFILL }
17400
16
        },
17401
16
        { &hf_nas_5gs_mm_paging_restriction_psi_1,
17402
16
        { "PSI(1)",   "nas-5gs.mm.paging_restriction.psi_1",
17403
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x02,
17404
16
            NULL, HFILL }
17405
16
        },
17406
16
        { &hf_nas_5gs_mm_paging_restriction_psi_0,
17407
16
        { "PSI(0)",   "nas-5gs.mm.paging_restriction.psi_0",
17408
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x01,
17409
16
            NULL, HFILL }
17410
16
        },
17411
16
        { &hf_nas_5gs_mm_paging_restriction_psi_15,
17412
16
        { "PSI(15)",   "nas-5gs.mm.paging_restriction.psi_15",
17413
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x80,
17414
16
            NULL, HFILL }
17415
16
        },
17416
16
        { &hf_nas_5gs_mm_paging_restriction_psi_14,
17417
16
        { "PSI(14)",   "nas-5gs.mm.paging_restriction.psi_14",
17418
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x40,
17419
16
            NULL, HFILL }
17420
16
        },
17421
16
        { &hf_nas_5gs_mm_paging_restriction_psi_13,
17422
16
        { "PSI(13)",   "nas-5gs.mm.paging_restriction.psi_13",
17423
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x20,
17424
16
            NULL, HFILL }
17425
16
        },
17426
16
        { &hf_nas_5gs_mm_paging_restriction_psi_12,
17427
16
        { "PSI(12)",   "nas-5gs.mm.paging_restriction.psi_12",
17428
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x10,
17429
16
            NULL, HFILL }
17430
16
        },
17431
16
        { &hf_nas_5gs_mm_paging_restriction_psi_11,
17432
16
        { "PSI(11)",   "nas-5gs.mm.paging_restriction.psi_11",
17433
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x08,
17434
16
            NULL, HFILL }
17435
16
        },
17436
16
        { &hf_nas_5gs_mm_paging_restriction_psi_10,
17437
16
        { "PSI(10)",   "nas-5gs.mm.paging_restriction.psi_10",
17438
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x04,
17439
16
            NULL, HFILL }
17440
16
        },
17441
16
        { &hf_nas_5gs_mm_paging_restriction_psi_9,
17442
16
        { "PSI(9)",   "nas-5gs.mm.paging_restriction.psi_9",
17443
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x02,
17444
16
            NULL, HFILL }
17445
16
        },
17446
16
        { &hf_nas_5gs_mm_paging_restriction_psi_8,
17447
16
        { "PSI(8)",   "nas-5gs.mm.paging_restriction.psi_8",
17448
16
            FT_BOOLEAN, 8, TFS(&tfs_restricted_not_restricted), 0x01,
17449
16
            NULL, HFILL }
17450
16
        },
17451
16
        { &hf_nas_5gs_mm_nid_assign_mode,
17452
16
        { "Assignment mode",   "nas-5gs.mm.nid.assign_mode",
17453
16
            FT_UINT8, BASE_HEX, NULL, 0x0f,
17454
16
            NULL, HFILL }
17455
16
        },
17456
16
        { &hf_nas_5gs_mm_nid_value,
17457
16
        { "NID value",   "nas-5gs.mm.nid.value",
17458
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17459
16
            NULL, HFILL }
17460
16
        },
17461
16
        { &hf_nas_5gs_mm_peips_assist_info_type,
17462
16
        { "Type of information",   "nas-5gs.mm.eips_assist_info.type",
17463
16
            FT_UINT8, BASE_DEC, NULL, 0xe0,
17464
16
            NULL, HFILL }
17465
16
        },
17466
16
        { &hf_nas_5gs_mm_peips_assist_info_paging_subgroup_id,
17467
16
        { "Paging subgroup ID",   "nas-5gs.mm.eips_assist_info.paging_subgroup_id",
17468
16
            FT_UINT8, BASE_DEC, NULL, 0x1f,
17469
16
            NULL, HFILL }
17470
16
        },
17471
16
        { &hf_nas_5gs_mm_peips_assist_info_ue_paging_probability_info,
17472
16
        { "UE paging probability information",   "nas-5gs.mm.eips_assist_info.ue_paging_probability_info",
17473
16
            FT_UINT8, BASE_DEC|BASE_EXT_STRING, &nas_5gs_mm_peips_assist_info_ue_paging_probability_info_vals_ext, 0x1f,
17474
16
            NULL, HFILL }
17475
16
        },
17476
16
        { &hf_nas_5gs_mm_add_req_res_prd,
17477
16
        { "Paging restriction decision (PRD)",   "nas-5gs.mm.add_request_result.prd",
17478
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_add_req_res_prd_vals), 0x03,
17479
16
            NULL, HFILL }
17480
16
        },
17481
16
        { &hf_nas_5gs_mm_nssrg_info_len,
17482
16
        { "Length of NSSRG values for S-NSSAI",   "nas-5gs.mm.nssrg_info.len",
17483
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17484
16
            NULL, HFILL }
17485
16
        },
17486
16
        { &hf_nas_5gs_mm_nssrg_info_s_nssai_len,
17487
16
        { "S-NSSAI length",   "nas-5gs.mm.nssrg_info.s_nssai_len",
17488
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17489
16
            NULL, HFILL }
17490
16
        },
17491
16
        { &hf_nas_5gs_mm_nssrg_info_nssrg,
17492
16
        { "NSSRG",   "nas-5gs.mm.nssrg_info.nssrg",
17493
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17494
16
            NULL, HFILL }
17495
16
        },
17496
16
        { &hf_nas_5gs_mm_nsag_info_len,
17497
16
        { "Length of NSAG",   "nas-5gs.mm.nsag_info.len",
17498
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17499
16
            NULL, HFILL }
17500
16
        },
17501
16
        { &hf_nas_5gs_mm_nsag_id,
17502
16
        { "NSAG identifier",   "nas-5gs.mm.nsag_info.identifier",
17503
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17504
16
            NULL, HFILL }
17505
16
        },
17506
16
        { &hf_nas_5gs_mm_nsag_info_s_nssai_len,
17507
16
        { "Length of S-NSSAI list of NSAG",   "nas-5gs.mm.nsag_info.s_nssai_len",
17508
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17509
16
            NULL, HFILL }
17510
16
        },
17511
16
        { &hf_nas_5gs_mm_nsag_prio,
17512
16
        { "NSAG priority",   "nas-5gs.mm.nsag_info.priority",
17513
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17514
16
            NULL, HFILL }
17515
16
        },
17516
16
        { &hf_nas_5gs_mm_nsag_tais_list_len,
17517
16
        { "TAIs list length",   "nas-5gs.mm.nsag_info.tais_list_len",
17518
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17519
16
            NULL, HFILL }
17520
16
        },
17521
16
        { &hf_nas_5gs_mm_prose_relay_trans_id,
17522
16
        { "ProSe relay transaction identity", "nas-5gs.mm.prose_relay_trans_id",
17523
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(nas_5gs_mm_prose_relay_trans_id), 0,
17524
16
            NULL, HFILL }
17525
16
        },
17526
16
        { &hf_nas_5gs_mm_relay_key_req_params_relay_service_code,
17527
16
        { "Relay service code", "nas-5gs.mm.relay_key_req_params.relay_service_code",
17528
16
            FT_UINT24, BASE_DEC, NULL, 0,
17529
16
            NULL, HFILL }
17530
16
        },
17531
16
        { &hf_nas_5gs_mm_relay_key_req_params_nonce_1,
17532
16
        { "Nonce_1", "nas-5gs.mm.relay_key_req_params.nonce_1",
17533
16
            FT_BYTES, BASE_NONE, NULL, 0,
17534
16
            NULL, HFILL }
17535
16
        },
17536
16
        { &hf_nas_5gs_mm_relay_key_req_params_uit,
17537
16
        { "UE ID type (UIT)", "nas-5gs.mm.relay_key_req_params.uit",
17538
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_relay_key_req_params_uit), 0x01,
17539
16
            NULL, HFILL }
17540
16
        },
17541
16
        { &hf_nas_5gs_mm_relay_key_req_params_ue_id,
17542
16
        { "UE identity", "nas-5gs.mm.relay_key_req_params.ue_id",
17543
16
            FT_BYTES, BASE_NONE, NULL, 0,
17544
16
            NULL, HFILL }
17545
16
        },
17546
16
        { &hf_nas_5gs_mm_relay_key_resp_params_key_knr_prose,
17547
16
        { "Key KNR_ProSe", "nas-5gs.mm.relay_key_resp_params.key_knr_prose",
17548
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
17549
16
            NULL, HFILL }
17550
16
        },
17551
16
        { &hf_nas_5gs_mm_relay_key_resp_params_nonce_2,
17552
16
        { "Nonce_2", "nas-5gs.mm.relay_key_resp_params.nonce_2",
17553
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
17554
16
            NULL, HFILL }
17555
16
        },
17556
16
        { &hf_nas_5gs_mm_relay_key_resp_params_cp_pruk_id,
17557
16
        { "CP-PRUK ID", "nas-5gs.mm.relay_key_resp_params.cp_pruk_id",
17558
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
17559
16
            NULL, HFILL }
17560
16
        },
17561
16
        { &hf_nas_5gs_mm_prio_ind_mcsi,
17562
16
        { "MCS indicator (MCSI)", "nas-5gs.mm.priority_indicator.mcsi",
17563
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_prio_ind_mcsi), 0x02,
17564
16
            NULL, HFILL }
17565
16
        },
17566
16
        { &hf_nas_5gs_mm_prio_ind_mpsi,
17567
16
        { "MPS indicator (MPSI)", "nas-5gs.mm.priority_indicator.mpsi",
17568
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_prio_ind_mpsi), 0x01,
17569
16
            NULL, HFILL }
17570
16
        },
17571
16
        { &hf_nas_5gs_mm_n3iwf_id_type,
17572
16
        { "N3IWF identifier type", "nas-5gs.mm.n3iwf_id.type",
17573
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_n3iwf_id_type_vals), 0x0,
17574
16
            NULL, HFILL }
17575
16
        },
17576
16
        { &hf_nas_5gs_mm_n3iwf_id_ipv4,
17577
16
        { "N3IWF address IPv4", "nas-5gs.mm.n3iwf_id.ipv4",
17578
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
17579
16
            NULL, HFILL }
17580
16
        },
17581
16
        { &hf_nas_5gs_mm_n3iwf_id_ipv6,
17582
16
        { "N3IWF address IPv6", "nas-5gs.mm.n3iwf_id.ipv6",
17583
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
17584
16
            NULL, HFILL }
17585
16
        },
17586
16
        { &hf_nas_5gs_mm_n3iwf_id_fqdn,
17587
16
        { "N3IWF address FQDN", "nas-5gs.mm.n3iwf_id.fqdn",
17588
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17589
16
            NULL, HFILL }
17590
16
        },
17591
16
        { &hf_nas_5gs_mm_tnan_info_ssid_ind,
17592
16
        { "SSID indication", "nas-5gs.mm.tnan_info.ssid_ind",
17593
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x02,
17594
16
            NULL, HFILL }
17595
16
        },
17596
16
        { &hf_nas_5gs_mm_tnan_info_tngf_id_ind,
17597
16
        { "TNGF ID indication", "nas-5gs.mm.tnan_info.tngf_id_ind",
17598
16
            FT_BOOLEAN, 8, TFS(&tfs_included_not_included), 0x01,
17599
16
            NULL, HFILL }
17600
16
        },
17601
16
        { &hf_nas_5gs_mm_tnan_info_tngf_id_len,
17602
16
        { "TNGF ID length", "nas-5gs.mm.tnan_info.tngf_id_len",
17603
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17604
16
            NULL, HFILL }
17605
16
        },
17606
16
        { &hf_nas_5gs_mm_tnan_info_tngf_id,
17607
16
        { "TNGF ID", "nas-5gs.mm.tnan_info.tngf_id",
17608
16
            FT_BYTES, BASE_SHOW_UTF_8_PRINTABLE, NULL, 0x0,
17609
16
            NULL, HFILL }
17610
16
        },
17611
16
        { &hf_nas_5gs_mm_tnan_info_ssid_len,
17612
16
        { "SSID length", "nas-5gs.mm.tnan_info.ssid_len",
17613
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17614
16
            NULL, HFILL }
17615
16
        },
17616
16
        { &hf_nas_5gs_mm_tnan_info_ssid,
17617
16
        { "SSID", "nas-5gs.mm.tnan_info.ssid",
17618
16
            FT_BYTES, BASE_SHOW_UTF_8_PRINTABLE, NULL, 0x0,
17619
16
            NULL, HFILL }
17620
16
        },
17621
16
        { &hf_nas_5gs_mm_ran_timing_sync_recreq,
17622
16
        { "RecReq", "nas-5gs.mm.ran_timing_sync.recreq",
17623
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
17624
16
            NULL, HFILL }
17625
16
        },
17626
16
        { &hf_nas_5gs_mm_n3gpp_acc_path_switch_ind_naps,
17627
16
        { "Non-3GPP access path switching (NAPS)", "nas-5gs.mm.n3gpp_acc_path_switch_ind.naps",
17628
16
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
17629
16
            NULL, HFILL }
17630
16
        },
17631
16
        { &hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_len,
17632
16
        { "Length of Per-S-NSSAI location validity information for S-NSSAI", "nas-5gs.mm.s_nssai_loc_valid_info.per_s_nssai_len",
17633
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17634
16
            NULL, HFILL }
17635
16
        },
17636
16
        { &hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_nb_nr_cgi,
17637
16
        { "Number of NR CGIs", "nas-5gs.mm.s_nssai_loc_valid_info.nb_nr_cgi",
17638
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17639
16
            NULL, HFILL }
17640
16
        },
17641
16
        { &hf_nas_5gs_mm_s_nssai_loc_valid_info_per_s_nssai_nr_cell_id,
17642
16
        { "NR Cell ID", "nas-5gs.mm.s_nssai_loc_valid_info.nr_cell_id",
17643
16
            FT_UINT40, BASE_HEX, NULL, 0x0,
17644
16
            NULL, HFILL }
17645
16
        },
17646
16
        { &hf_nas_5gs_mm_s_nssai_time_valid_info_per_s_nssai_len,
17647
16
        { "Length of Per-S-NSSAI time validity information for S-NSSAI", "nas-5gs.mm.s_nssai_time_valid_info.per_s_nssai_len",
17648
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17649
16
            NULL, HFILL }
17650
16
        },
17651
16
        { &hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_len,
17652
16
        { "Length of Time window", "nas-5gs.mm.s_nssai_time_valid_info.time_window_len",
17653
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17654
16
            NULL, HFILL }
17655
16
        },
17656
16
        { &hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_start_time,
17657
16
        { "Start time", "nas-5gs.mm.s_nssai_time_valid_info.time_window_start_time",
17658
16
            FT_UINT64, BASE_HEX, NULL, 0x0,
17659
16
            NULL, HFILL }
17660
16
        },
17661
16
        { &hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_stop_time,
17662
16
        { "Stop time", "nas-5gs.mm.s_nssai_time_valid_info.time_window_stop_time",
17663
16
            FT_UINT64, BASE_HEX, NULL, 0x0,
17664
16
            NULL, HFILL }
17665
16
        },
17666
16
        { &hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_recurrence_pattern,
17667
16
        { "Recurrence pattern", "nas-5gs.mm.s_nssai_time_valid_info.time_window_recurrence_pattern",
17668
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_s_nssai_time_valid_info_time_window_recurrence_pattern_vals), 0x0f,
17669
16
            NULL, HFILL }
17670
16
        },
17671
16
        { &hf_nas_5gs_mm_s_nssai_time_valid_info_time_window_recurrence_end_time,
17672
16
        { "Recurrence end time", "nas-5gs.mm.s_nssai_time_valid_info.recurrence_end_time",
17673
16
            FT_UINT64, BASE_HEX, NULL, 0x0,
17674
16
            NULL, HFILL }
17675
16
        },
17676
16
        { &hf_nas_5gs_mm_n3gpp_path_switch_info_nsonr,
17677
16
        { "Non-3GPP path switching while using old non-3GPP resources (NSONR)", "nas-5gs.mm.n3gpp_path_switch_info.nsonr",
17678
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
17679
16
            NULL, HFILL }
17680
16
        },
17681
16
        { &hf_nas_5gs_mm_au3n_ind_aun3reg,
17682
16
        { "AUN3 device registration (AUN3REG)", "nas-5gs.mm.au3n_ind.aun3reg",
17683
16
            FT_BOOLEAN, 8, TFS(&tfs_requested_not_requested), 0x01,
17684
16
            NULL, HFILL }
17685
16
        },
17686
16
        { &hf_nas_5gs_mm_feat_auth_ind_hpase,
17687
16
        { "High priority access service area restriction exempt (HPASE)", "nas-5gs.mm.feat_auth_ind.hpase",
17688
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_feat_auth_ind_hpase), 0x04,
17689
16
            NULL, HFILL }
17690
16
        },
17691
16
        { &hf_nas_5gs_mm_feat_auth_ind_mbsrai,
17692
16
        { "MBSR authorization indication (MBSRAI)", "nas-5gs.mm.feat_auth_ind.mbsrai",
17693
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_feat_auth_ind_mbsrai_vals), 0x03,
17694
16
            NULL, HFILL }
17695
16
        },
17696
16
        { &hf_nas_5gs_mm_payload_cont_info_pru,
17697
16
        { "PRU related content (PRU)", "nas-5gs.mm.payload_cont_info.pru",
17698
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_payload_cont_info_pru), 0x01,
17699
16
            NULL, HFILL }
17700
16
        },
17701
16
        { &hf_nas_5gs_mm_aun3_device_sec_key_askt,
17702
16
        { "AUN3 device security key type (ASKT)", "nas-5gs.mm.aun3_device_sec_key.askt",
17703
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_aun3_device_sec_key_askt_vals), 0x03,
17704
16
            NULL, HFILL }
17705
16
        },
17706
16
        { &hf_nas_5gs_mm_aun3_device_sec_key_key_len,
17707
16
        { "Length of key content", "nas-5gs.mm.aun3_device_sec_key.key_len",
17708
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17709
16
            NULL, HFILL }
17710
16
        },
17711
16
        { &hf_nas_5gs_mm_aun3_device_sec_key_key,
17712
16
        { "Key content", "nas-5gs.mm.aun3_device_sec_key.key",
17713
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
17714
16
            NULL, HFILL }
17715
16
        },
17716
16
        { &hf_nas_5gs_mm_on_demand_nssai_len,
17717
16
        { "Length of Information of on-demand S-NSSAI", "nas-5gs.mm.on_demand_nssai.len",
17718
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17719
16
            NULL, HFILL }
17720
16
        },
17721
16
        { &hf_nas_5gs_mm_on_demand_nssai_slice_dereg_inactiv_timer,
17722
16
        { "Slice deregistration inactivity timer", "nas-5gs.mm.on_demand_nssai.slice_dereg_inactiv_timer",
17723
16
            FT_UINT16, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
17724
16
            NULL, HFILL }
17725
16
        },
17726
16
        { &hf_nas_5gs_mm_ext_5gmm_cause_sat_nr,
17727
16
        { "PRU related content (PRU)", "nas-5gs.mm.ext_5gmm_cause.sat_nr",
17728
16
            FT_BOOLEAN, 8, TFS(&tfs_nas_5gs_mm_ext_5gmm_cause_sat_nr), 0x01,
17729
16
            NULL, HFILL }
17730
16
        },
17731
16
        { &hf_nas_5gs_mm_lp_wusps_assist_info_type,
17732
16
        { "Type of information", "nas-5gs.mm.lp_wusps_assist_info.type",
17733
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_lp_wusps_assist_info_type_vals), 0xe0,
17734
16
            NULL, HFILL }
17735
16
        },
17736
16
        { &hf_nas_5gs_mm_lp_wusps_assist_info_paging_subgroup_id,
17737
16
        { "LP-WUSPS paging subgroup ID value", "nas-5gs.mm.lp_wusps_assist_info.paging_subgroup_id",
17738
16
            FT_UINT8, BASE_DEC, NULL, 0x1f,
17739
16
            NULL, HFILL }
17740
16
        },
17741
16
        { &hf_nas_5gs_mm_lp_wusps_assist_info_ue_paging_prob_info,
17742
16
        { "UE paging probability information value", "nas-5gs.mm.lp_wusps_assist_info.ue_paging_prob_info",
17743
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_mm_peips_assist_info_ue_paging_probability_info_vals), 0x1f,
17744
16
            NULL, HFILL }
17745
16
        },
17746
16
        { &hf_nas_5gs_mm_lws,
17747
16
        { "LP-WUS status indication (LWS)", "nas-5gs.mm.lws",
17748
16
            FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled), 0x01,
17749
16
            NULL, HFILL }
17750
16
        },
17751
16
        { &hf_nas_5gs_ue_os_id,
17752
16
        { "UE OS ID UUID", "nas-5gs.ue_os_id",
17753
16
            FT_GUID, BASE_NONE, NULL, 0x0,
17754
16
            NULL, HFILL }
17755
16
        },
17756
16
        { &hf_nas_5gs_andsp_info_type,
17757
16
        { "ANDSP info type", "nas-5gs.andsp.info_type",
17758
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_andsp_info_type_values), 0x0f,
17759
16
            NULL, HFILL }
17760
16
        },
17761
16
        { &hf_nas_5gs_andsp_info_len,
17762
16
        { "ANDSP info length", "nas-5gs.andsp.info_length",
17763
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17764
16
            NULL, HFILL }
17765
16
        },
17766
16
        { &hf_nas_5gs_andsp_info_contents,
17767
16
        { "ANDSP info contents", "nas-5gs.andsp.info",
17768
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
17769
16
            NULL, HFILL }
17770
16
        },
17771
16
        { &hf_nas_5gs_wlansp_rule_len,
17772
16
        { "Length of WLANSP rule", "nas-5gs.andsp.wlansp.rule_len",
17773
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17774
16
            NULL, HFILL }
17775
16
        },
17776
16
        { &hf_nas_5gs_wlansp_rule_id,
17777
16
        { "Rule identifier", "nas-5gs.andsp.wlansp.rule_id",
17778
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17779
16
            NULL, HFILL }
17780
16
        },
17781
16
        { &hf_nas_5gs_wlansp_rule_prio,
17782
16
        { "Rule priority", "nas-5gs.andsp.wlansp.rule_prio",
17783
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17784
16
            NULL, HFILL }
17785
16
        },
17786
16
        { &hf_nas_5gs_roaming_ind,
17787
16
        { "Roaming", "nas-5gs.andsp.wlansp.roaming_ind",
17788
16
            FT_BOOLEAN, 8, NULL, 0x80,
17789
16
            NULL, HFILL }
17790
16
        },
17791
16
        { &hf_nas_5gs_validity_area_ind,
17792
16
        { "Validity area ind", "nas-5gs.andsp.wlansp.validity_area_ind",
17793
16
            FT_BOOLEAN, 8, NULL, 0x40,
17794
16
            NULL, HFILL }
17795
16
        },
17796
16
        { &hf_nas_5gs_3gpp_loc_ind,
17797
16
        { "3gpp loc ind", "nas-5gs.andsp.wlansp.3gpp_loc_ind",
17798
16
            FT_BOOLEAN, 8, NULL, 0x20,
17799
16
            NULL, HFILL }
17800
16
        },
17801
16
        { &hf_nas_5gs_wlan_loc_ind,
17802
16
        { "WLAN loc ind", "nas-5gs.andsp.wlansp.wlan_loc_ind",
17803
16
            FT_BOOLEAN, 8, NULL, 0x10,
17804
16
            NULL, HFILL }
17805
16
        },
17806
16
        { &hf_nas_5gs_geo_loc_ind,
17807
16
        { "Geo loc ind", "nas-5gs.andsp.wlansp.geo_loc_ind",
17808
16
            FT_BOOLEAN, 8, NULL, 0x08,
17809
16
            NULL, HFILL }
17810
16
        },
17811
16
        { &hf_nas_5gs_time_of_day_ind,
17812
16
        { "Time of day ind", "nas-5gs.andsp.wlansp.time_of_day_ind",
17813
16
            FT_BOOLEAN, 8, NULL, 0x04,
17814
16
            NULL, HFILL }
17815
16
        },
17816
16
        { &hf_nas_5gs_wlansp_sel_crit_len,
17817
16
        { "Length of selection criteria", "nas-5gs.andsp.wlansp.sel_crit_len",
17818
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17819
16
            NULL, HFILL }
17820
16
        },
17821
16
        { &hf_nas_5gs_wlansp_num_sel_crit_ent,
17822
16
        { "Number of selection criteria entries", "nas-5gs.andsp.wlansp.num_sel_crit_ent",
17823
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17824
16
            NULL, HFILL }
17825
16
        },
17826
16
        { &hf_nas_5gs_wlansp_sel_crit_ent_len,
17827
16
        { "Length of selection criteria entry", "nas-5gs.andsp.wlansp.sel_crit_ent_len",
17828
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17829
16
            NULL, HFILL }
17830
16
        },
17831
16
        { &hf_nas_5gs_wlansp_maxbssload_ind,
17832
16
        { "MaxBSSload ind", "nas-5gs.andsp.wlansp.maxbssload_ind",
17833
16
            FT_BOOLEAN, 8, NULL, 0x40,
17834
16
            NULL, HFILL }
17835
16
        },
17836
16
        { &hf_nas_5gs_wlansp_homenetwork_ind,
17837
16
        { "Homenetwork ind", "nas-5gs.andsp.wlansp.homenetwork_ind",
17838
16
            FT_BOOLEAN, 8, NULL, 0x20,
17839
16
            NULL, HFILL }
17840
16
        },
17841
16
        { &hf_nas_5gs_wlansp_max_bss_ld_val,
17842
16
        { "Maximum BSS load value", "nas-5gs.andsp.wlansp_max_bss_ld_val",
17843
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17844
16
            NULL, HFILL }
17845
16
        },
17846
16
        { &hf_nas_5gs_wlansp_criteria_priority,
17847
16
        { "Criteria priority", "nas-5gs.andsp.wlansp.criteria_priority",
17848
16
            FT_UINT8, BASE_DEC, NULL, 0x1f,
17849
16
            NULL, HFILL }
17850
16
        },
17851
16
        { &hf_nas_5gs_wlansp_sel_crit_set_len,
17852
16
        { "Length of selection criteria set", "nas-5gs.andsp.wlansp.sel_crit_set_len",
17853
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17854
16
            NULL, HFILL }
17855
16
        },
17856
16
        { &hf_nas_5gs_wlansp_sel_crit_set_type,
17857
16
        { "Selection criteria set type", "nas-5gs.andsp.wlansp.sel_crit_set_type",
17858
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_andsp_wlansp_sel_crit_set_type_vals), 0xf0,
17859
16
            NULL, HFILL }
17860
16
        },
17861
16
        { &hf_nas_5gs_wlansp_sel_crit_num_sub_entr,
17862
16
        { "Number of sub entries", "nas-5gs.andsp.wlansp.sel_crit_num_sub_entr",
17863
16
            FT_UINT8, BASE_DEC, NULL, 0x0f,
17864
16
            NULL, HFILL }
17865
16
        },
17866
16
        { &hf_nas_5gs_wlansp_pref_ssid_list_wlan_prio,
17867
16
        { "WLAN priority", "nas-5gs.andsp.wlansp.wlansp_pref_ssid_list_wlan_prio",
17868
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17869
16
            NULL, HFILL }
17870
16
        },
17871
16
        { &hf_nas_5gs_wlansp_ssid_len,
17872
16
        { "SSID length", "nas-5gs.andsp.wlansp.pref_ssid_list_ssid_len",
17873
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17874
16
            NULL, HFILL }
17875
16
        },
17876
16
        { &hf_nas_5gs_wlansp_pref_ssid_list_ssid,
17877
16
        { "SSID", "nas-5gs.andsp.wlansp.pref_ssid_list_ssid",
17878
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17879
16
            NULL, HFILL }
17880
16
        },
17881
16
        { &hf_nas_5gs_wlansp_pref_ssid_list_hessid,
17882
16
        { "HESSID", "nas-5gs.andsp.wlansp.pref_ssid_list_hessid",
17883
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
17884
16
            NULL, HFILL }
17885
16
        },
17886
16
        { &hf_nas_5gs_wlansp_pref_roam_part_list_prio,
17887
16
        { "Priority", "nas-5gs.andsp.wlansp.pref_roam_part_list_prio",
17888
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17889
16
            NULL, HFILL }
17890
16
        },
17891
16
        { &hf_nas_5gs_wlansp_fqdn_match_len,
17892
16
        { "FQDN_Match length", "nas-5gs.andsp.wlansp.fqdn_match_len",
17893
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17894
16
            NULL, HFILL }
17895
16
        },
17896
16
        { &hf_nas_5gs_wlansp_fqdn_match,
17897
16
        { "FQDN_Match", "nas-5gs.andsp.wlansp.fqdn_match",
17898
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17899
16
            NULL, HFILL }
17900
16
        },
17901
16
        { &hf_nas_5gs_wlansp_country_len,
17902
16
        { "Country length", "nas-5gs.andsp.wlansp.country_len",
17903
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17904
16
            NULL, HFILL }
17905
16
        },
17906
16
        { &hf_nas_5gs_wlansp_country,
17907
16
        { "Country", "nas-5gs.andsp.wlansp.country",
17908
16
            FT_STRING, BASE_NONE, NULL, 0x0,
17909
16
            NULL, HFILL }
17910
16
        },
17911
16
        { &hf_nas_5gs_wlansp_pref_ssid_list_ssid_ind,
17912
16
        { "SSID ind", "nas-5gs.andsp.wlansp.pref_ssid_list_ssid_ind",
17913
16
            FT_BOOLEAN, 8, NULL, 0x01,
17914
16
            NULL, HFILL }
17915
16
        },
17916
16
        { &hf_nas_5gs_wlansp_pref_ssid_list_hessid_ind,
17917
16
        { "HESSID ind", "nas-5gs.andsp.wlansp.pref_ssid_list_hessid_ind",
17918
16
            FT_BOOLEAN, 8, NULL, 0x02,
17919
16
            NULL, HFILL }
17920
16
        },
17921
16
        { &hf_nas_5gs_wlansp_sub_ent_len,
17922
16
        { "Length of sub entry", "nas-5gs.andsp.wlansp.sub_ent_len",
17923
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17924
16
            NULL, HFILL }
17925
16
        },
17926
16
        { &hf_nas_5gs_wlansp_req_prot_ip_prot,
17927
16
        { "IP protocol", "nas-5gs.andsp.wlansp.req_prot_port_tup",
17928
16
            FT_UINT8, BASE_DEC | BASE_EXT_STRING,& ipproto_val_ext, 0x0,
17929
16
            NULL, HFILL }
17930
16
        },
17931
16
        { &hf_nas_5gs_wlansp_req_prot_port_len,
17932
16
        { "Length of port number", "nas-5gs.andsp.wlansp.req_prot_port_len",
17933
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17934
16
            NULL, HFILL }
17935
16
        },
17936
16
        { &hf_nas_5gs_wlansp_req_prot_port,
17937
16
        { "Port number", "nas-5gs.andsp.wlansp.req_prot_port",
17938
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17939
16
            NULL, HFILL }
17940
16
        },
17941
16
        { &hf_nas_5gs_wlansp_sel_crit_sp_exc,
17942
16
        { "SSID", "nas-5gs.andsp.wlansp.sel_crit_sp_exc",
17943
16
            FT_BYTES, BASE_SHOW_UTF_8_PRINTABLE, NULL, 0x0,
17944
16
            NULL, HFILL }
17945
16
        },
17946
16
        { &hf_nas_5gs_wlansp_sp_excl_list_ulbi_ind,
17947
16
        { "Uplink bandwidth field", "nas-5gs.andsp.wlansp.sp_excl_list_ulbi_ind",
17948
16
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
17949
16
            NULL, HFILL }
17950
16
        },
17951
16
        { &hf_nas_5gs_wlansp_sp_excl_list_dlbi_ind,
17952
16
        { "Downlink bandwidth field", "nas-5gs.andsp.wlansp.sp_excl_list_dlbi_ind",
17953
16
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17954
16
            NULL, HFILL }
17955
16
        },
17956
16
        { &hf_nas_5gs_wlansp_sp_excl_list_nw_type,
17957
16
        { "Network type", "nas-5gs.andsp.wlansp.sp_excl_list_nw_type",
17958
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_wlansp_sp_excl_list_nw_type_vals), 0x03,
17959
16
            NULL, HFILL }
17960
16
        },
17961
16
        { &hf_nas_5gs_wlansp_sp_excl_list_ulb,
17962
16
        { "Uplink bandwidth", "nas-5gs.andsp.wlansp.sp_excl_list_ulb",
17963
16
            FT_UINT32, BASE_DEC, NULL, 0x0,
17964
16
            NULL, HFILL }
17965
16
        },
17966
16
        { &hf_nas_5gs_wlansp_sp_excl_list_dlb,
17967
16
        { "Downlink bandwidth", "nas-5gs.andsp.wlansp.sp_excl_list_dlb",
17968
16
            FT_UINT32, BASE_DEC, NULL, 0x0,
17969
16
            NULL, HFILL }
17970
16
        },
17971
16
        { &hf_nas_5gs_wlansp_val_area_len,
17972
16
        { "length of validity area", "nas-5gs.andsp.wlansp.val_area_len",
17973
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17974
16
            NULL, HFILL }
17975
16
        },
17976
16
        { &hf_nas_5gs_wlansp_time_of_day_len,
17977
16
        { "Length of time of day", "nas-5gs.andsp.wlansp.time_of_day_len",
17978
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17979
16
            NULL, HFILL }
17980
16
        },
17981
16
        { &hf_nas_5gs_wlansp_num_loc_entr,
17982
16
        { "Number of location entries", "nas-5gs.andsp.wlansp.num_loc_entr",
17983
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
17984
16
            NULL, HFILL }
17985
16
        },
17986
16
        { &hf_nas_5gs_wlansp_loc_entry_len,
17987
16
        { "Length of location entry", "nas-5gs.andsp.wlansp.loc_entry_len",
17988
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
17989
16
            NULL, HFILL }
17990
16
        },
17991
16
        { &hf_nas_5gs_wlansp_loc_entry_type,
17992
16
        { "Entry type", "nas-5gs.andsp.wlansp.loc_entry_type",
17993
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_andsp_wlansp_loc_entry_type_vals), 0xc0,
17994
16
            NULL, HFILL }
17995
16
        },
17996
16
        { &hf_nas_5gs_wlansp_loc_num_sub_entries,
17997
16
        { "number of sub entries", "nas-5gs.andsp.wlansp.loc_num_sub_entries",
17998
16
            FT_UINT8, BASE_DEC, NULL, 0x3f,
17999
16
            NULL, HFILL }
18000
16
        },
18001
16
        { &hf_nas_5gs_wlansp_loc_3gpp_sub_ent_len,
18002
16
        { "Length of 3GPP location sub entry", "nas-5gs.andsp.wlansp.3gpp_sub_ent_len",
18003
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
18004
16
            NULL, HFILL }
18005
16
        },
18006
16
        { &hf_nas_5gs_wlansp_loc_3gpp_num_loc_fields,
18007
16
        { "Number of location fields", "nas-5gs.andsp.wlansp.3gpp_num_loc_fields",
18008
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
18009
16
            NULL, HFILL }
18010
16
        },
18011
16
        { &hf_nas_5gs_wlansp_loc_3gpp_loc_field_len,
18012
16
        { "Length of 3GPP location field", "nas-5gs.andsp.wlansp.3gpp_loc_field_len",
18013
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
18014
16
            NULL, HFILL }
18015
16
        },
18016
16
        { &hf_nas_5gs_wlansp_loc_3gpp_loc_field_type,
18017
16
        { "Field type", "nas-5gs.andsp.wlansp.3gpp_loc_field_type",
18018
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_andsp_wlansp_location_field_type_vals), 0x0,
18019
16
            NULL, HFILL }
18020
16
        },
18021
16
        { &hf_nas_5gs_wlansp_loc_3gpp_loc_tac,
18022
16
        { "TAC", "nas-5gs.andsp.wlansp.3gpp_loc_tac",
18023
16
            FT_UINT24, BASE_HEX, NULL, 0x0,
18024
16
            NULL, HFILL }
18025
16
        },
18026
16
        { &hf_nas_5gs_wlansp_loc_3gpp_loc_eutra_ci,
18027
16
        { "EUTRA CI", "nas-5gs.andsp.wlansp.3gpp_loc_eutra_ci",
18028
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
18029
16
            NULL, HFILL }
18030
16
        },
18031
16
        { &hf_nas_5gs_wlansp_loc_3gpp_loc_nr_ci,
18032
16
        { "NR CI", "nas-5gs.andsp.wlansp.3gpp_loc_nr_ci",
18033
16
            FT_UINT24, BASE_HEX, NULL, 0x0,
18034
16
            NULL, HFILL }
18035
16
        },
18036
16
        { &hf_nas_5gs_wlansp_loc_sub_ent_len,
18037
16
        { "Length of location sub entry", "nas-5gs.andsp.wlansp.loc_sub_ent_len",
18038
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
18039
16
            NULL, HFILL }
18040
16
        },
18041
16
        { &hf_nas_5gs_wlansp_loc_num_loc_fields,
18042
16
        { "Number of location fields", "nas-5gs.andsp.wlansp.oc_num_loc_fields",
18043
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
18044
16
            NULL, HFILL }
18045
16
        },
18046
16
        { &hf_nas_5gs_wlansp_loc_wlan_loc_field_len,
18047
16
        { "Length of WLAN location field", "nas-5gs.andsp.wlansp.wlan_sub_ent_len",
18048
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
18049
16
            NULL, HFILL }
18050
16
        },
18051
16
        { &hf_nas_5gs_wlansp_loc_wlan_sub_ent_type,
18052
16
        { "WLAN location field type", "nas-5gs.andsp.wlansp.wlan_sub_ent_type",
18053
16
            FT_UINT16, BASE_DEC, VALS(nas_5gs_andsp_wlansp_location_field_type_vals), 0x0,
18054
16
            NULL, HFILL }
18055
16
        },
18056
16
        { &hf_nas_5gs_wlansp_loc_hessid,
18057
16
        { "HESSID", "nas-5gs.andsp.wlansp.loc_hessid",
18058
16
            FT_UINT48, BASE_HEX, NULL, 0x0,
18059
16
            NULL, HFILL }
18060
16
        },
18061
16
        { &hf_nas_5gs_wlansp_loc_ssid,
18062
16
        { "SSID", "nas-5gs.andsp.wlansp.loc_ssid",
18063
16
            FT_BYTES, BASE_SHOW_UTF_8_PRINTABLE, NULL, 0x0,
18064
16
            NULL, HFILL }
18065
16
        },
18066
16
        { &hf_nas_5gs_wlansp_loc_bssid,
18067
16
        { "BSSID", "nas-5gs.andsp.wlansp.loc_bssid",
18068
16
            FT_UINT48, BASE_HEX, NULL, 0x0,
18069
16
            NULL, HFILL }
18070
16
        },
18071
16
        { &hf_nas_5gs_geo_loc_anc_lat,
18072
16
        { "Anchor latitude", "nas-5gs.andsp.wlansp.geo_loc_anc_lat",
18073
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(nas_5gs_degreesLatitude_fmt), 0x0,
18074
16
            NULL, HFILL }
18075
16
        },
18076
16
        { &hf_nas_5gs_geo_loc_anc_long,
18077
16
        { "Anchor longitude", "nas-5gs.andsp.wlansp.geo_loc_anc_long",
18078
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(nas_5gs_degreesLongitude_fmt), 0x0,
18079
16
            NULL, HFILL }
18080
16
        },
18081
16
        { &hf_nas_5gs_geo_loc_rad,
18082
16
        { "Radius", "nas-5gs.andsp.wlansp.geo_loc_rad",
18083
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(nas_5gs_radius_fmt), 0x0,
18084
16
            NULL, HFILL }
18085
16
        },
18086
16
        { &hf_nas_5gs_n3nan_sel_len,
18087
16
        { "N3AN node selection information length", "nas-5gs.andsp.n3nan.sel_len",
18088
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
18089
16
            NULL, HFILL }
18090
16
        },
18091
16
        { &hf_nas_5gs_n3nan_node_sel_entry_len,
18092
16
        { "Length of N3AN node selection information entry", "nas-5gs.andsp.n3nan.node_sel_entry_len",
18093
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
18094
16
            NULL, HFILL }
18095
16
        },
18096
16
        { &hf_nas_5gs_node_sel_entry_fqdn_format,
18097
16
        { "FQDN format", "nas-5gs.andsp.n3nan.node_sel_entry_fqdn_format",
18098
16
            FT_UINT8, BASE_DEC, NULL, 0xc0,
18099
16
            NULL, HFILL }
18100
16
        },
18101
16
        { &hf_nas_5gs_node_sel_entry_pref,
18102
16
        { "Preference", "nas-5gs.andsp.n3nan.node_sel_entry_pref",
18103
16
            FT_UINT8, BASE_DEC, NULL, 0x20,
18104
16
            NULL, HFILL }
18105
16
        },
18106
16
        { &hf_nas_5gs_node_sel_entry_prio,
18107
16
        { "Priority", "nas-5gs.andsp.n3nan.node_sel_entry_prio",
18108
16
            FT_UINT8, BASE_DEC, NULL, 0x1f,
18109
16
            NULL, HFILL }
18110
16
        },
18111
16
        { &hf_nas_5gs_n3nan_node_conf_inf_type,
18112
16
        { "N3AN node configuration information type", "nas-5gs.andsp.n3nan.wlan_sub_ent_type",
18113
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_n3nan_node_conf_inf_type_vals), 0x0,
18114
16
            NULL, HFILL }
18115
16
        },
18116
16
        { &hf_nas_5gs_n3nan_home_n3iwf_id_type,
18117
16
        { "Home N3IWF identifier type", "nas-5gs.andsp.n3nan.n3nan_home_n3iwf_id_type",
18118
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_n3nan_n3nan_home_n3iwf_id_type_vals), 0x0,
18119
16
            NULL, HFILL }
18120
16
        },
18121
16
        { &hf_nas_5gs_home_n3iwf_ipv4_addr,
18122
16
        { "Home N3IWF IPv4 addresses", "nas-5gs.andsp.n3nan.home_n3iwf_ipv4_addr",
18123
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
18124
16
            NULL, HFILL }
18125
16
        },
18126
16
        { &hf_nas_5gs_home_n3iwf_ipv6_addr,
18127
16
        { "Home N3IWF IPv6 addresses", "nas-5gs.andsp.n3nan.home_n3iwf_ipv6_addr",
18128
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
18129
16
            NULL, HFILL }
18130
16
        },
18131
16
        { &hf_nas_5gs_home_n3iwf_fqdn_len,
18132
16
        { "Length of home N3IWF FQDN", "nas-5gs.andsp.n3nan.home_n3iwf_fqdn_len",
18133
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
18134
16
            NULL, HFILL }
18135
16
        },
18136
16
        { &hf_nas_5gs_home_n3iwf_id_cont_len,
18137
16
        { "Length of Home N3IWF identifier contents", "nas-5gs.andsp.n3nan.home_n3iwf_id_cont_len",
18138
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
18139
16
            NULL, HFILL }
18140
16
        },
18141
16
        { &hf_nas_5gs_home_n3iwf_fqdn,
18142
16
        { "Home N3IWF FQDN", "nas-5gs.andsp.n3nan.home_n3iwf_fqdn",
18143
16
            FT_STRING, BASE_NONE, NULL, 0x0,
18144
16
            NULL, HFILL }
18145
16
        },
18146
18147
16
        { &hf_nas_5gs_n3nan_home_epdg_id_type,
18148
16
        { "Home N3IWF identifier type", "nas-5gs.andsp.n3nan.n3nan_home_epdg_id_type",
18149
16
            FT_UINT8, BASE_DEC, VALS(nas_5gs_n3nan_n3nan_home_n3iwf_id_type_vals), 0x0,
18150
16
            NULL, HFILL }
18151
16
        },
18152
16
        { &hf_nas_5gs_home_epdg_ipv4_addr,
18153
16
        { "Home ePDG IPv4 addresses", "nas-5gs.andsp.n3nan.home_epdg_ipv4_addr",
18154
16
            FT_IPv4, BASE_NONE, NULL, 0x0,
18155
16
            NULL, HFILL }
18156
16
        },
18157
16
        { &hf_nas_5gs_home_epdg_ipv6_addr,
18158
16
        { "Home ePDG IPv6 addresses", "nas-5gs.andsp.n3nan.home_epdg_ipv6_addr",
18159
16
            FT_IPv6, BASE_NONE, NULL, 0x0,
18160
16
            NULL, HFILL }
18161
16
        },
18162
16
        { &hf_nas_5gs_home_epdg_fqdn_len,
18163
16
        { "Length of home ePDG FQDN", "nas-5gs.andsp.n3nan.home_epdg_fqdn_len",
18164
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
18165
16
            NULL, HFILL }
18166
16
        },
18167
16
        { &hf_nas_5gs_home_epdg_id_cont_len,
18168
16
        { "Length of Home ePDG identifier contents", "nas-5gs.andsp.n3nan.home_epdg_id_cont_len",
18169
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
18170
16
            NULL, HFILL }
18171
16
        },
18172
16
        { &hf_nas_5gs_home_epdg_fqdn,
18173
16
        { "Home ePDG FQDN", "nas-5gs.andsp.n3nan.home_n3iwf_fqdn",
18174
16
            FT_STRING, BASE_NONE, NULL, 0x0,
18175
16
            NULL, HFILL }
18176
16
        },
18177
16
    };
18178
18179
16
    unsigned  i;
18180
16
    unsigned  last_offset;
18181
18182
    /* Setup protocol subtree array */
18183
16
#define NUM_INDIVIDUAL_ELEMS    75
18184
16
    int *ett[NUM_INDIVIDUAL_ELEMS +
18185
16
        NUM_NAS_5GS_COMMON_ELEM +
18186
16
        NUM_NAS_5GS_MM_MSG + NUM_NAS_5GS_MM_ELEM +
18187
16
        NUM_NAS_5GS_SM_MSG + NUM_NAS_5GS_SM_ELEM +
18188
16
        NUM_NAS_5GS_UPDP_MSG + NUM_NAS_5GS_UPDP_ELEM
18189
16
    ];
18190
18191
16
    ett[0] = &ett_nas_5gs;
18192
16
    ett[1] = &ett_nas_5gs_mm_nssai;
18193
16
    ett[2] = &ett_nas_5gs_mm_pdu_ses_id;
18194
16
    ett[3] = &ett_nas_5gs_sm_qos_rules;
18195
16
    ett[4] = &ett_nas_5gs_sm_qos_params;
18196
16
    ett[5] = &ett_nas_5gs_plain;
18197
16
    ett[6] = &ett_nas_5gs_sec;
18198
16
    ett[7] = &ett_nas_5gs_mm_part_sal;
18199
16
    ett[8] = &ett_nas_5gs_mm_part_tal;
18200
16
    ett[9] = &ett_nas_5gs_sm_mapd_eps_b_cont;
18201
16
    ett[10] = &ett_nas_5gs_sm_mapd_eps_b_cont_params_list;
18202
16
    ett[11] = &ett_nas_5gs_mm_ladn_indic;
18203
16
    ett[12] = &ett_nas_5gs_mm_sor;
18204
16
    ett[13] = &ett_nas_5gs_sm_pkt_filter_components;
18205
16
    ett[14] = &ett_nas_5gs_updp_ue_policy_section_mgm_lst;
18206
16
    ett[15] = &ett_nas_5gs_updp_ue_policy_section_mgm_sublst;
18207
16
    ett[16] = &ett_nas_5gs_ue_policies_ursp;
18208
16
    ett[17] = &ett_nas_5gs_ursp_traff_desc;
18209
16
    ett[18] = &ett_nas_5gs_usrp_r_sel_list;
18210
16
    ett[19] = &ett_nas_5gs_usrp_r_sel;
18211
16
    ett[20] = &ett_nas_5gs_ursp_r_sel_desc_cont;
18212
16
    ett[21] = &ett_nas_5gs_updp_upsi_list;
18213
16
    ett[22] = &ett_nas_5gs_mm_rej_nssai;
18214
16
    ett[23] = &ett_nas_5gs_mm_scheme_output;
18215
16
    ett[24] = &ett_nas_5gs_mm_pld_cont_pld_entry;
18216
16
    ett[25] = &ett_nas_5gs_mm_pld_cont_opt_ie;
18217
16
    ett[26] = &ett_nas_5gs_mm_cag_info_entry;
18218
16
    ett[27] = &ett_nas_5gs_ciot_small_data_cont_data_contents;
18219
16
    ett[28] = &ett_nas_5gs_user_data_cont;
18220
16
    ett[29] = &ett_nas_5gs_ciph_data_set;
18221
16
    ett[30] = &ett_nas_5gs_mm_mapped_nssai;
18222
16
    ett[31] = &ett_nas_5gs_mm_partial_extended_rejected_nssai_list;
18223
16
    ett[32] = &ett_nas_5gs_mm_ext_rej_nssai_back_off_timer;
18224
16
    ett[33] = &ett_nas_5gs_mm_ext_rej_nssai;
18225
16
    ett[34] = &ett_nas_5gs_mm_op_def_acc_cat_def;
18226
16
    ett[35] = &ett_nas_5gs_mm_op_def_acc_cat_criteria_component;
18227
16
    ett[36] = &ett_nas_5gs_mm_op_def_acc_cat_criteria;
18228
16
    ett[37] = &ett_nas_5gs_cmn_service_level_aa_cont_param;
18229
16
    ett[38] = &ett_nas_5gs_mm_pld_cont_event_notif_ind;
18230
16
    ett[39] = &ett_nas_5gs_mm_peips_assist_info;
18231
16
    ett[40] = &ett_nas_5gs_mm_nssrg_info;
18232
16
    ett[41] = &ett_nas_5gs_mm_plmns_list_disaster_cond;
18233
16
    ett[42] = &ett_nas_5gs_mm_reg_wait_range;
18234
16
    ett[43] = &ett_nas_5gs_mm_nsag_info;
18235
16
    ett[44] = &ett_nas_5gs_mm_snpn_list;
18236
16
    ett[45] = &ett_nas_5gs_mm_ext_ladn_info;
18237
16
    ett[46] = &ett_nas_5gs_mm_alt_nssai;
18238
16
    ett[47] = &ett_nas_5gs_mm_alt_nssai_replaced;
18239
16
    ett[48] = &ett_nas_5gs_mm_alt_nssai_alternative;
18240
16
    ett[49] = &ett_nas_5gs_mm_s_nssai_loc_valid_info;
18241
16
    ett[50] = &ett_nas_5gs_mm_s_nssai_time_valid_info;
18242
16
    ett[51] = &ett_nas_5gs_mm_on_demand_nssai;
18243
16
    ett[52] = &ett_nas_5gs_ue_policies_andp;
18244
16
    ett[53] = &ett_nas_5gs_wlansp_rule;
18245
16
    ett[54] = &ett_nas_5gs_wlansp_sel_crit;
18246
16
    ett[55] = &ett_nas_5gs_wlansp_sel_crit_ent;
18247
16
    ett[56] = &ett_nas_5gs_wlansp_val_area;
18248
16
    ett[57] = &ett_nas_5gs_wlansp_tod;
18249
16
    ett[58] = &ett_nas_5gs_loc_3gpp_sub_ent;
18250
16
    ett[59] = &ett_nas_5gs_n3nan_sel_len;
18251
16
    ett[60] = &ett_nas_5gs_n3nan_sel_info_entry;
18252
16
    ett[61] = &ett_nas_5gs_n3nan_conf_inf;
18253
16
    ett[62] = &ett_nas_5gs_n3iwf_identifier_entry;
18254
16
    ett[63] = &ett_nas_5gs_epdg_identifier_entry;
18255
16
    ett[64] = &ett_nas_5gs_sm_srtp_mult_media_id_info;
18256
16
    ett[65] = &ett_nas_5gs_sm_remote_ue_ctx;
18257
16
    ett[66] = &ett_nas_5gs_sm_req_mbs_sess_info;
18258
16
    ett[67] = &ett_nas_5gs_sm_rec_mbs_info;
18259
16
    ett[68] = &ett_nas_5gs_sm_n3qai_entry;
18260
16
    ett[69] = &ett_nas_5gs_sm_n3qai_param;
18261
16
    ett[70] = &ett_nas_5gs_sm_n3gpp_delay_budget_entry;
18262
16
    ett[71] = &ett_nas_5gs_sm_ursp_report;
18263
16
    ett[72] = &ett_nas_5gs_sm_prot_desc_entry;
18264
16
    ett[73] = &ett_nas_5gs_sm_prot_desc_rtp_payload_info;
18265
16
    ett[74] = &ett_nas_5gs_sm_n3gpp_dev_info_entry;
18266
18267
16
    last_offset = NUM_INDIVIDUAL_ELEMS;
18268
18269
224
    for (i = 0; i < NUM_NAS_5GS_COMMON_ELEM; i++, last_offset++)
18270
208
    {
18271
208
        ett[last_offset] = &ett_nas_5gs_common_elem[i];
18272
208
    }
18273
18274
    /* MM */
18275
752
    for (i = 0; i < NUM_NAS_5GS_MM_MSG; i++, last_offset++)
18276
736
    {
18277
736
        ett[last_offset] = &ett_nas_5gs_mm_msg[i];
18278
736
    }
18279
18280
1.88k
    for (i = 0; i < NUM_NAS_5GS_MM_ELEM; i++, last_offset++)
18281
1.87k
    {
18282
1.87k
        ett[last_offset] = &ett_nas_5gs_mm_elem[i];
18283
1.87k
    }
18284
18285
464
    for (i = 0; i < NUM_NAS_5GS_SM_MSG; i++, last_offset++)
18286
448
    {
18287
448
        ett[last_offset] = &ett_nas_5gs_sm_msg[i];
18288
448
    }
18289
18290
640
    for (i = 0; i < NUM_NAS_5GS_SM_ELEM; i++, last_offset++)
18291
624
    {
18292
624
        ett[last_offset] = &ett_nas_5gs_sm_elem[i];
18293
624
    }
18294
18295
144
    for (i = 0; i < NUM_NAS_5GS_UPDP_MSG; i++, last_offset++)
18296
128
    {
18297
128
        ett[last_offset] = &ett_nas_5gs_updp_msg[i];
18298
128
    }
18299
18300
160
    for (i = 0; i < NUM_NAS_5GS_UPDP_ELEM; i++, last_offset++)
18301
144
    {
18302
144
        ett[last_offset] = &ett_nas_5gs_updp_elem[i];
18303
144
    }
18304
18305
16
    static ei_register_info ei[] = {
18306
16
    { &ei_nas_5gs_extraneous_data, { "nas-5gs.extraneous_data", PI_PROTOCOL, PI_NOTE, "Extraneous Data, dissector bug or later version spec (report to wireshark.org)", EXPFILL }},
18307
16
    { &ei_nas_5gs_unknown_pd,{ "nas-5gs.unknown_pd", PI_PROTOCOL, PI_ERROR, "Unknown protocol discriminator", EXPFILL } },
18308
16
    { &ei_nas_5gs_mm_unknown_msg_type,{ "nas-5gs.mm.unknown_msg_type", PI_PROTOCOL, PI_WARN, "Unknown Message Type", EXPFILL } },
18309
16
    { &ei_nas_5gs_sm_unknown_msg_type,{ "nas-5gs.sm.unknown_msg_type", PI_PROTOCOL, PI_WARN, "Unknown Message Type", EXPFILL } },
18310
16
    { &ei_nas_5gs_updp_unknown_msg_type,{ "nas-5gs.updp.unknown_msg_type", PI_PROTOCOL, PI_WARN, "Unknown Message Type", EXPFILL } },
18311
16
    { &ei_nas_5gs_msg_not_dis,{ "nas-5gs.msg_not_dis", PI_PROTOCOL, PI_WARN, "MSG IEs not dissected yet", EXPFILL } },
18312
16
    { &ei_nas_5gs_ie_not_dis,{ "nas-5gs.ie_not_dis", PI_PROTOCOL, PI_WARN, "IE not dissected yet", EXPFILL } },
18313
16
    { &ei_nas_5gs_missing_mandatory_element,{ "nas-5gs.missing_mandatory_element", PI_PROTOCOL, PI_ERROR, "Missing Mandatory element, rest of dissection is suspect", EXPFILL } },
18314
16
    { &ei_nas_5gs_dnn_too_long,{ "nas-5gs.dnn_too_long", PI_PROTOCOL, PI_ERROR, "DNN encoding has more than 100 octets", EXPFILL } },
18315
16
    { &ei_nas_5gs_unknown_value,{ "nas-5gs.unknown_value", PI_PROTOCOL, PI_ERROR, "Value not according to (decoded)specification", EXPFILL } },
18316
16
    { &ei_nas_5gs_num_pkt_flt,{ "nas-5gs.num_pkt_flt", PI_PROTOCOL, PI_ERROR, "num_pkt_flt != 0", EXPFILL } },
18317
16
    { &ei_nas_5gs_not_diss,{ "nas-5gs.not_diss", PI_PROTOCOL, PI_NOTE, "Not dissected yet", EXPFILL } },
18318
16
    };
18319
18320
16
    expert_module_t* expert_nas_5gs;
18321
16
    module_t *nas_5GS_module;
18322
18323
    /* Register protocol */
18324
16
    proto_nas_5gs = proto_register_protocol("Non-Access-Stratum 5GS (NAS)PDU", "NAS-5GS", "nas-5gs");
18325
    /* Register fields and subtrees */
18326
16
    proto_register_field_array(proto_nas_5gs, hf, array_length(hf));
18327
16
    proto_register_subtree_array(ett, array_length(ett));
18328
16
    expert_nas_5gs = expert_register_protocol(proto_nas_5gs);
18329
16
    expert_register_field_array(expert_nas_5gs, ei, array_length(ei));
18330
18331
    /* Backward compatibility with old filters name */
18332
16
    proto_register_alias(proto_nas_5gs, "nas_5gs");
18333
18334
    /* Register dissector */
18335
16
    nas_5gs_handle = register_dissector("nas-5gs", dissect_nas_5gs, proto_nas_5gs);
18336
18337
16
    nas_5GS_module = prefs_register_protocol(proto_nas_5gs, proto_reg_handoff_nas_5gs);
18338
18339
16
    prefs_register_bool_preference(nas_5GS_module,
18340
16
        "null_decipher",
18341
16
        "Try to detect and decode 5G-EA0 ciphered messages",
18342
16
        "This should work when the NAS ciphering algorithm is NULL (5G-EEA0)",
18343
16
        &g_nas_5gs_null_decipher);
18344
18345
16
    prefs_register_enum_preference(nas_5GS_module, "decode_user_data_container_as",
18346
16
                                   "Try to decode User Data Container content as",
18347
16
                                   NULL,
18348
16
                                   &g_nas_5gs_decode_user_data_container_as,
18349
16
                                   nas_5gs_user_data_container_as_vals, false);
18350
18351
16
    prefs_register_dissector_preference(nas_5GS_module, "non_ip_data_dissector",
18352
16
                                        "Dissector name for non IP data", NULL,
18353
16
                                        &g_nas_5gs_non_ip_data_dissector);
18354
16
}
18355
18356
void
18357
proto_reg_handoff_nas_5gs(void)
18358
16
{
18359
16
    static bool initialized = false;
18360
18361
16
    if (!initialized) {
18362
16
        heur_dissector_add("udp", dissect_nas_5gs_heur, "NAS-5GS over UDP", "nas_5gs_udp", proto_nas_5gs, HEURISTIC_DISABLE);
18363
16
        eap_handle = find_dissector("eap");
18364
16
        nas_eps_handle = find_dissector("nas-eps");
18365
16
        lpp_handle = find_dissector("lpp");
18366
16
        gsm_a_dtap_handle = find_dissector("gsm_a_dtap");
18367
16
        ipv4_handle = find_dissector("ip");
18368
16
        ipv6_handle = find_dissector("ipv6");
18369
16
        ethernet_handle = find_dissector("eth_withoutfcs");
18370
16
        dissector_add_string("media_type", "application/vnd.3gpp.5gnas", create_dissector_handle(dissect_nas_5gs_media_type, proto_nas_5gs));
18371
16
        dissector_add_for_decode_as("tcp.port", create_dissector_handle(dissect_nas_5gs_tcp, proto_nas_5gs));
18372
16
        proto_json = proto_get_id_by_filter_name("json");
18373
16
        initialized = true;
18374
16
    }
18375
16
    if (g_nas_5gs_non_ip_data_dissector[0] != '\0') {
18376
0
        non_ip_data_handle = find_dissector(g_nas_5gs_non_ip_data_dissector);
18377
16
    } else {
18378
        non_ip_data_handle = NULL;
18379
16
    }
18380
16
}
18381
18382
/*
18383
* Editor modelines
18384
*
18385
* Local Variables:
18386
* c-basic-offset: 4
18387
* tab-width: 8
18388
* indent-tabs-mode: nil
18389
* End:
18390
*
18391
* ex: set shiftwidth=4 tabstop=8 expandtab:
18392
* :indentSize=4:tabSize=8:noTabs=true:
18393
*/