epan/dissectors/pidl/samr/samr.cnf cnf_dissect_lsa_BinaryString => lsarpc_dissect_str...
[wireshark-sm.git] / epan / dissectors / packet-json_3gpp.c
blobccc557fb59205ec0b30b64066f986c8d20d7c544
1 /* packet-json_3gpp.c
2 * Routines for JSON dissection - 3GPP Extension
4 * References:
5 * - 3GPP TS 24.301
6 * - 3GPP TS 24.501
7 * - 3GPP TS 29.274
8 * - 3GPP TS 29.502
9 * - 3GPP TS 29.507
10 * 3GPP TS 29.525
11 * - 3GPP TS 29.571
13 * Wireshark - Network traffic analyzer
14 * By Gerald Combs <gerald@wireshark.org>
15 * Copyright 1998 Gerald Combs
17 * SPDX-License-Identifier: GPL-2.0-or-later
20 /* This dissector registers a dissector table for 3GPP Vendor specific
21 * keys which will be called from the JSON dissector to dissect
22 * the content of keys of the OctetString type(or similar).
25 #include "config.h"
27 #include <epan/etypes.h>
28 #include <epan/expert.h>
29 #include <epan/packet.h>
30 #include <epan/tvbparse.h>
31 #include <epan/proto_data.h>
33 #include "packet-gtpv2.h"
34 #include "packet-gsm_a_common.h"
35 #include "packet-json.h"
36 #include "packet-http.h"
37 #include "packet-http2.h"
39 void proto_register_json_3gpp(void);
40 void proto_reg_handoff_json_3gpp(void);
42 static int proto_json_3gpp;
43 static int proto_http;
45 static int ett_json_base64decoded_eps_ie;
46 static int ett_json_base64decoded_nas5g_ie;
47 static int ett_json_3gpp_data;
49 static expert_field ei_json_3gpp_data_not_decoded;
50 static expert_field ei_json_3gpp_encoding_error;
52 static int hf_json_3gpp_binary_data;
54 static int hf_json_3gpp_ueepspdnconnection;
55 static int hf_json_3gpp_bearerlevelqos;
56 static int hf_json_3gpp_epsbearersetup;
57 static int hf_json_3gpp_forwardingbearercontexts;
58 static int hf_json_3gpp_forwardingfteid;
59 static int hf_json_3gpp_pgwnodename;
60 static int hf_json_3gpp_pgws8cfteid;
61 static int hf_json_3gpp_pgws8ufteid;
62 static int hf_json_3gpp_qosrules;
63 static int hf_json_3gpp_qosflowdescription;
64 static int hf_json_3gpp_suppFeat;
65 static int hf_json_3gpp_supportedFeatures;
68 static int hf_json_3gpp_suppfeat;
70 static int hf_json_3gpp_suppfeat_npcf_am_1_slicesupport;
71 static int hf_json_3gpp_suppfeat_npcf_am_2_pendingtransaction;
72 static int hf_json_3gpp_suppfeat_npcf_am_3_ueambrauthorization;
73 static int hf_json_3gpp_suppfeat_npcf_am_4_dnnreplacementcontrol;
75 static int hf_json_3gpp_suppfeat_npcf_am_5_multipleaccesstypes;
76 static int hf_json_3gpp_suppfeat_npcf_am_6_wirelinewirelessconvergence;
77 static int hf_json_3gpp_suppfeat_npcf_am_7_immediatereport;
78 static int hf_json_3gpp_suppfeat_npcf_am_8_es3xx;
80 static int hf_json_3gpp_suppfeat_npcf_am_9_ueslicembrauthorization;
81 static int hf_json_3gpp_suppfeat_npcf_am_10_aminfluence;
82 static int hf_json_3gpp_suppfeat_npcf_am_11_enena;
83 static int hf_json_3gpp_suppfeat_npcf_am_12_targetnssai;
85 static int hf_json_3gpp_suppfeat_npcf_am_13_5gaccessstratumtime;
87 static int hf_json_3gpp_suppfeat_npcf_sm_1_tsc;
88 static int hf_json_3gpp_suppfeat_npcf_sm_2_resshare;
89 static int hf_json_3gpp_suppfeat_npcf_sm_3_3gpppsdataoff;
90 static int hf_json_3gpp_suppfeat_npcf_sm_4_adc;
92 static int hf_json_3gpp_suppfeat_npcf_sm_5_umc;
93 static int hf_json_3gpp_suppfeat_npcf_sm_6_netloc;
94 static int hf_json_3gpp_suppfeat_npcf_sm_7_rannascause;
95 static int hf_json_3gpp_suppfeat_npcf_sm_8_provafsignalflow;
97 static int hf_json_3gpp_suppfeat_npcf_sm_9_pcscfrestorationenhancement;
98 static int hf_json_3gpp_suppfeat_npcf_sm_10_pra;
99 static int hf_json_3gpp_suppfeat_npcf_sm_11_ruleversioning;
100 static int hf_json_3gpp_suppfeat_npcf_sm_12_sponsoredconnectivity;
102 static int hf_json_3gpp_suppfeat_npcf_sm_13_ransupportinfo;
103 static int hf_json_3gpp_suppfeat_npcf_sm_14_policyupdatewhenuesuspends;
104 static int hf_json_3gpp_suppfeat_npcf_sm_15_accesstypecondition;
105 static int hf_json_3gpp_suppfeat_npcf_sm_16_multiipv6addrprefix;
107 static int hf_json_3gpp_suppfeat_npcf_sm_17_sessionruleerrorhandling;
108 static int hf_json_3gpp_suppfeat_npcf_sm_18_af_charging_identifier;
109 static int hf_json_3gpp_suppfeat_npcf_sm_19_atsss;
110 static int hf_json_3gpp_suppfeat_npcf_sm_20_pendingtransaction;
112 static int hf_json_3gpp_suppfeat_npcf_sm_21_urllc;
113 static int hf_json_3gpp_suppfeat_npcf_sm_22_macaddressrange;
114 static int hf_json_3gpp_suppfeat_npcf_sm_23_wwc;
115 static int hf_json_3gpp_suppfeat_npcf_sm_24_qosmonitoring;
117 static int hf_json_3gpp_suppfeat_npcf_sm_25_authorizationwithrequiredqos;
118 static int hf_json_3gpp_suppfeat_npcf_sm_26_enhancedbackgrounddatatransfer;
119 static int hf_json_3gpp_suppfeat_npcf_sm_27_dn_authorization;
120 static int hf_json_3gpp_suppfeat_npcf_sm_28_pdusessionrelcause;
122 static int hf_json_3gpp_suppfeat_npcf_sm_29_samepcf;
123 static int hf_json_3gpp_suppfeat_npcf_sm_30_adcmultiredirection;
124 static int hf_json_3gpp_suppfeat_npcf_sm_31_respbasedsessionrel;
125 static int hf_json_3gpp_suppfeat_npcf_sm_32_timesensitivenetworking;
127 static int hf_json_3gpp_suppfeat_npcf_sm_33_emdbv;
128 static int hf_json_3gpp_suppfeat_npcf_sm_34_dnnselectionmode;
129 static int hf_json_3gpp_suppfeat_npcf_sm_35_epsfallbackreport;
130 static int hf_json_3gpp_suppfeat_npcf_sm_36_policydecisionerrorhandling;
132 static int hf_json_3gpp_suppfeat_npcf_sm_37_ddneventpolicycontrol;
133 static int hf_json_3gpp_suppfeat_npcf_sm_38_reallocationofcredit;
134 static int hf_json_3gpp_suppfeat_npcf_sm_39_bdtpolicyrenegotiation;
135 static int hf_json_3gpp_suppfeat_npcf_sm_40_extpolicydecisionerrorhandling;
137 static int hf_json_3gpp_suppfeat_npcf_sm_41_immediatetermination;
138 static int hf_json_3gpp_suppfeat_npcf_sm_42_aggregateduelocchanges;
139 static int hf_json_3gpp_suppfeat_npcf_sm_43_es3xx;
140 static int hf_json_3gpp_suppfeat_npcf_sm_44_groupidlistchange;
142 static int hf_json_3gpp_suppfeat_npcf_sm_45_disableuenotification;
143 static int hf_json_3gpp_suppfeat_npcf_sm_46_offlinechonly;
144 static int hf_json_3gpp_suppfeat_npcf_sm_47_dual_connectivity_redundant_up_paths;
145 static int hf_json_3gpp_suppfeat_npcf_sm_48_ddneventpolicycontrol2;
147 static int hf_json_3gpp_suppfeat_npcf_sm_49_vplmn_qos_control;
148 static int hf_json_3gpp_suppfeat_npcf_sm_50_2g3giwk;
149 static int hf_json_3gpp_suppfeat_npcf_sm_51_timesensitivecommunication;
150 static int hf_json_3gpp_suppfeat_npcf_sm_52_enedge;
152 static int hf_json_3gpp_suppfeat_npcf_sm_53_satbackhaulcategorychg;
153 static int hf_json_3gpp_suppfeat_npcf_sm_54_chfsetsupport;
154 static int hf_json_3gpp_suppfeat_npcf_sm_55_enatsss;
155 static int hf_json_3gpp_suppfeat_npcf_sm_56_mpsfordts;
157 static int hf_json_3gpp_suppfeat_npcf_sm_57_routinginforemoval;
158 static int hf_json_3gpp_suppfeat_npcf_sm_58_epra;
159 static int hf_json_3gpp_suppfeat_npcf_sm_59_aminfluence;
160 static int hf_json_3gpp_suppfeat_npcf_sm_60_pvssupport;
162 static int hf_json_3gpp_suppfeat_npcf_sm_61_enena;
163 static int hf_json_3gpp_suppfeat_npcf_sm_62_biumr;
164 static int hf_json_3gpp_suppfeat_npcf_sm_63_easipreplacement;
165 static int hf_json_3gpp_suppfeat_npcf_sm_64_exposuretoeas;
167 static int hf_json_3gpp_suppfeat_npcf_sm_65_simultconnectivity;
168 static int hf_json_3gpp_suppfeat_npcf_sm_66_sgwrest;
169 static int hf_json_3gpp_suppfeat_npcf_sm_67_releasetoreactivate;
170 static int hf_json_3gpp_suppfeat_npcf_sm_68_easdiscovery;
172 static int hf_json_3gpp_suppfeat_npcf_sm_69_accnetchargid_string;
174 static int hf_json_3gpp_suppfeat_npcf_ue_1_pendingtransaction;
175 static int hf_json_3gpp_suppfeat_npcf_ue_2_plmnchange;
176 static int hf_json_3gpp_suppfeat_npcf_ue_3_connectivitystatechange;
177 static int hf_json_3gpp_suppfeat_npcf_ue_4_v2x;
179 static int hf_json_3gpp_suppfeat_npcf_ue_5_groupidlistchange;
180 static int hf_json_3gpp_suppfeat_npcf_ue_6_immediatereport;
181 static int hf_json_3gpp_suppfeat_npcf_ue_7_errorresponse;
182 static int hf_json_3gpp_suppfeat_npcf_ue_8_es3xx;
184 static int hf_json_3gpp_suppfeat_npcf_ue_9_prose;
187 static int hf_json_3gpp_suppfeat_nsmf_pdusession_1_ciot;
188 static int hf_json_3gpp_suppfeat_nsmf_pdusession_2_mapdu;
189 static int hf_json_3gpp_suppfeat_nsmf_pdusession_3_dtssa;
190 static int hf_json_3gpp_suppfeat_nsmf_pdusession_4_carpt;
192 static int hf_json_3gpp_suppfeat_nsmf_pdusession_5_ctxtr;
193 static int hf_json_3gpp_suppfeat_nsmf_pdusession_6_vqos;
194 static int hf_json_3gpp_suppfeat_nsmf_pdusession_7_hofail;
195 static int hf_json_3gpp_suppfeat_nsmf_pdusession_8_es3xx;
197 static int hf_json_3gpp_suppfeat_nsmf_pdusession_9_dce2er;
198 static int hf_json_3gpp_suppfeat_nsmf_pdusession_10_aasn;
199 static int hf_json_3gpp_suppfeat_nsmf_pdusession_11_enedge;
200 static int hf_json_3gpp_suppfeat_nsmf_pdusession_12_scpbu;
202 static int hf_json_3gpp_suppfeat_nsmf_pdusession_13_enpn;
203 static int hf_json_3gpp_suppfeat_nsmf_pdusession_14_spae;
204 static int hf_json_3gpp_suppfeat_nsmf_pdusession_15_5gsat;
205 static int hf_json_3gpp_suppfeat_nsmf_pdusession_16_upipe;
207 static int hf_json_3gpp_suppfeat_nsmf_pdusession_17_biumr;
208 static int hf_json_3gpp_suppfeat_nsmf_pdusession_18_acscr;
209 static int hf_json_3gpp_suppfeat_nsmf_pdusession_19_psetr;
210 static int hf_json_3gpp_suppfeat_nsmf_pdusession_20_dlset;
212 static int hf_json_3gpp_suppfeat_nsmf_pdusession_21_n9fsc;
214 #define NPCF_AM_POLICY_CONTROL "/npcf-am-policy-control/v1/policies"
215 #define NPCF_SM_POLICY_CONTROL "/npcf-smpolicycontrol/v1/sm-policies" /* inconsistency naming from 3gpp */
216 #define NPCF_UE_POLICY_CONTROL "/npcf-ue-policy-control/v1/policies"
217 #define NSMF_PDU_SESSION "/nsmf-pdusession/v1/"
220 /* Functions to sub dissect json content */
221 static void
222 dissect_base64decoded_eps_ie(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, int offset, int len, const char* key_str _U_)
224 /* base64-encoded characters, encoding the
225 * EPS IE specified in 3GPP TS 29.274.
228 proto_item* ti;
229 proto_tree* sub_tree;
230 tvbuff_t* bin_tvb = base64_tvb_to_new_tvb(tvb, offset, len);
231 int bin_tvb_length = tvb_reported_length(bin_tvb);
232 add_new_data_source(pinfo, bin_tvb, "Base64 decoded");
233 ti = proto_tree_add_item(tree, hf_json_3gpp_binary_data, bin_tvb, 0, bin_tvb_length, ENC_NA);
234 sub_tree = proto_item_add_subtree(ti, ett_json_base64decoded_eps_ie);
235 dissect_gtpv2_ie_common(bin_tvb, pinfo, sub_tree, 0, 0/* Message type 0, Reserved */, NULL, 0);
237 return;
240 static void
241 dissect_base64decoded_nas5g_ie(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, int offset, int len, const char* key_str)
243 /* base64-encoded characters, encoding the
244 * NAS-5G IE specified in 3GPP TS 24.501.
246 proto_item* ti;
247 proto_tree* sub_tree;
248 tvbuff_t* bin_tvb = base64_tvb_to_new_tvb(tvb, offset, len);
249 int bin_tvb_length = tvb_reported_length(bin_tvb);
250 add_new_data_source(pinfo, bin_tvb, "Base64 decoded");
251 ti = proto_tree_add_item(tree, hf_json_3gpp_binary_data, bin_tvb, 0, bin_tvb_length, ENC_NA);
252 sub_tree = proto_item_add_subtree(ti, ett_json_base64decoded_nas5g_ie);
254 if (strcmp(key_str, "qosRules") == 0) {
255 /* qosRules
256 * This IE shall contain the QoS Rule(s) associated to the QoS flow to be sent to the UE.
257 * It shall be encoded as the Qos rules IE specified in clause 9.11.4.13 of 3GPP TS 24.501 (starting from octet 4).
259 de_nas_5gs_sm_qos_rules(bin_tvb, sub_tree, pinfo, 0, bin_tvb_length, NULL, 0);
261 else if (strcmp(key_str, "qosFlowDescription") == 0) {
262 /* qosFlowDescription
263 * When present, this IE shall contain the description of the QoS Flow level Qos parameters to be sent to the UE.
264 * It shall be encoded as the Qos flow descriptions IE specified in clause 9.11.4.12 of 3GPP TS 24.501 (starting from octet 1),
265 * encoding one single Qos flow description for the QoS flow to be set up.
267 elem_telv(bin_tvb, sub_tree, pinfo, (uint8_t) 0x79, 18 /* NAS_5GS_PDU_TYPE_SM */, 11 /* DE_NAS_5GS_SM_QOS_FLOW_DES */, 0, bin_tvb_length, NULL);
270 return;
273 static void
274 dissect_3gpp_supportfeatures(tvbuff_t* tvb, proto_tree* tree, packet_info* pinfo, int offset, int len, const char* key_str _U_)
276 const char *path = NULL;
278 /* TS 29.571 ch5.2.2
279 * A string used to indicate the features supported by an API that is used as defined in clause 6.6 in 3GPP TS 29.500 [25].
280 * The string shall contain a bitmask indicating supported features in hexadecimal representation:
281 * Each character in the string shall take a value of "0" to "9", "a" to "f" or "A" to "F" and
282 * shall represent the support of 4 features as described in table 5.2.2-3.
283 * The most significant character representing the highest-numbered features shall appear first in the string,
284 * and the character representing features 1 to 4 shall appear last in the string.
285 * The list of features and their numbering (starting with 1) are defined separately for each API.
286 * If the string contains a lower number of characters than there are defined features for an API,
287 * all features that would be represented by characters that are not present in the string are not supported.
290 /* Expect to have :path from HTTP2 here, if not return */
291 if (proto_is_frame_protocol(pinfo->layers, "http2")) {
292 path = http2_get_header_value(pinfo, HTTP2_HEADER_PATH, false);
293 if (!path) {
294 path = http2_get_header_value(pinfo, HTTP2_HEADER_PATH, true);
296 } else if (proto_is_frame_protocol(pinfo->layers, "http")) {
297 /* 3GPP TS 29.500 says the service based interfaces use HTTP/2,
298 * but that doesn't stop implementations like OAI from using
299 * HTTP/1.1 with a 2.0 version string.
301 http_req_res_t* curr_req_res = (http_req_res_t*)p_get_proto_data(wmem_file_scope(), pinfo, proto_http, HTTP_PROTO_DATA_REQRES);
302 if (curr_req_res) {
303 path = curr_req_res->request_uri;
306 if (!path) {
307 return;
310 proto_item* ti;
311 proto_tree* sub_tree;
312 tvbuff_t *suppfeat_tvb;
314 ti = proto_tree_add_item(tree, hf_json_3gpp_suppfeat, tvb, offset, len, ENC_ASCII);
315 if (len <= 0) {
316 return;
318 sub_tree = proto_item_add_subtree(ti, ett_json_3gpp_data);
319 suppfeat_tvb = tvb_new_subset_length(tvb, offset, len);
321 int offset_reverse = len - 1;
323 /* Read in the HEX in ASCII form and validate it's 0-9,A-F */
324 uint8_t *hex_ascii = tvb_memdup(pinfo->pool, tvb, offset, len);
325 for (int i = 0; i < len; i++) {
326 char c = hex_ascii[i];
327 if (!g_ascii_isxdigit(c)) {
328 proto_tree_add_expert_format(sub_tree, pinfo, &ei_json_3gpp_encoding_error, suppfeat_tvb, 0, -1, "Invalid char pos=%d value=%02x", i, c);
329 return;
333 if (strcmp(path, NPCF_AM_POLICY_CONTROL) == 0) {
334 /* TS 29.507 ch5.8 Feature negotiation */
336 static int * const json_3gpp_suppfeat_npcf_am_list_1[] = {
337 &hf_json_3gpp_suppfeat_npcf_am_1_slicesupport,
338 &hf_json_3gpp_suppfeat_npcf_am_2_pendingtransaction,
339 &hf_json_3gpp_suppfeat_npcf_am_3_ueambrauthorization,
340 &hf_json_3gpp_suppfeat_npcf_am_4_dnnreplacementcontrol,
341 NULL
343 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_am_list_1, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
344 offset_reverse--;
346 if (offset_reverse == -1) {
347 return;
350 static int * const json_3gpp_suppfeat_npcf_am_list_2[] = {
351 &hf_json_3gpp_suppfeat_npcf_am_5_multipleaccesstypes,
352 &hf_json_3gpp_suppfeat_npcf_am_6_wirelinewirelessconvergence,
353 &hf_json_3gpp_suppfeat_npcf_am_7_immediatereport,
354 &hf_json_3gpp_suppfeat_npcf_am_8_es3xx,
355 NULL
357 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_am_list_2, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
358 offset_reverse--;
360 if (offset_reverse == -1) {
361 return;
364 static int * const json_3gpp_suppfeat_npcf_am_list_3[] = {
365 &hf_json_3gpp_suppfeat_npcf_am_9_ueslicembrauthorization,
366 &hf_json_3gpp_suppfeat_npcf_am_10_aminfluence,
367 &hf_json_3gpp_suppfeat_npcf_am_11_enena,
368 &hf_json_3gpp_suppfeat_npcf_am_12_targetnssai,
369 NULL
371 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_am_list_3, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
372 offset_reverse--;
374 if (offset_reverse == -1) {
375 return;
378 static int * const json_3gpp_suppfeat_npcf_am_list_4[] = {
379 &hf_json_3gpp_suppfeat_npcf_am_13_5gaccessstratumtime,
380 NULL
382 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_am_list_4, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
383 offset_reverse--;
385 if (offset_reverse == -1) {
386 return;
389 if (offset_reverse > -1) {
390 proto_tree_add_format_text(sub_tree, suppfeat_tvb, 0, (offset_reverse - len));
393 } else if (strcmp(path, NPCF_SM_POLICY_CONTROL) == 0) {
394 /* TS 29.512 ch5.8 Feature negotiation */
396 static int * const json_3gpp_suppfeat_npcf_sm_list_1[] = {
397 &hf_json_3gpp_suppfeat_npcf_sm_1_tsc,
398 &hf_json_3gpp_suppfeat_npcf_sm_2_resshare,
399 &hf_json_3gpp_suppfeat_npcf_sm_3_3gpppsdataoff,
400 &hf_json_3gpp_suppfeat_npcf_sm_4_adc,
401 NULL
403 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_1, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
404 offset_reverse--;
406 if (offset_reverse == -1) {
407 return;
410 static int * const json_3gpp_suppfeat_npcf_sm_list_2[] = {
411 &hf_json_3gpp_suppfeat_npcf_sm_5_umc,
412 &hf_json_3gpp_suppfeat_npcf_sm_6_netloc,
413 &hf_json_3gpp_suppfeat_npcf_sm_7_rannascause,
414 &hf_json_3gpp_suppfeat_npcf_sm_8_provafsignalflow,
415 NULL
417 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_2, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
418 offset_reverse--;
420 if (offset_reverse == -1) {
421 return;
424 static int * const json_3gpp_suppfeat_npcf_sm_list_3[] = {
425 &hf_json_3gpp_suppfeat_npcf_sm_9_pcscfrestorationenhancement,
426 &hf_json_3gpp_suppfeat_npcf_sm_10_pra,
427 &hf_json_3gpp_suppfeat_npcf_sm_11_ruleversioning,
428 &hf_json_3gpp_suppfeat_npcf_sm_12_sponsoredconnectivity,
429 NULL
431 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_3, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
432 offset_reverse--;
434 if (offset_reverse == -1) {
435 return;
438 static int * const json_3gpp_suppfeat_npcf_sm_list_4[] = {
439 &hf_json_3gpp_suppfeat_npcf_sm_13_ransupportinfo,
440 &hf_json_3gpp_suppfeat_npcf_sm_14_policyupdatewhenuesuspends,
441 &hf_json_3gpp_suppfeat_npcf_sm_15_accesstypecondition,
442 &hf_json_3gpp_suppfeat_npcf_sm_16_multiipv6addrprefix,
443 NULL
445 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_4, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
446 offset_reverse--;
448 if (offset_reverse == -1) {
449 return;
452 static int * const json_3gpp_suppfeat_npcf_sm_list_5[] = {
453 &hf_json_3gpp_suppfeat_npcf_sm_17_sessionruleerrorhandling,
454 &hf_json_3gpp_suppfeat_npcf_sm_18_af_charging_identifier,
455 &hf_json_3gpp_suppfeat_npcf_sm_19_atsss,
456 &hf_json_3gpp_suppfeat_npcf_sm_20_pendingtransaction,
457 NULL
459 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_5, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
460 offset_reverse--;
462 if (offset_reverse == -1) {
463 return;
466 static int * const json_3gpp_suppfeat_npcf_sm_list_6[] = {
467 &hf_json_3gpp_suppfeat_npcf_sm_21_urllc,
468 &hf_json_3gpp_suppfeat_npcf_sm_22_macaddressrange,
469 &hf_json_3gpp_suppfeat_npcf_sm_23_wwc,
470 &hf_json_3gpp_suppfeat_npcf_sm_24_qosmonitoring,
471 NULL
473 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_6, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
474 offset_reverse--;
476 if (offset_reverse == -1) {
477 return;
480 static int * const json_3gpp_suppfeat_npcf_sm_list_7[] = {
481 &hf_json_3gpp_suppfeat_npcf_sm_25_authorizationwithrequiredqos,
482 &hf_json_3gpp_suppfeat_npcf_sm_26_enhancedbackgrounddatatransfer,
483 &hf_json_3gpp_suppfeat_npcf_sm_27_dn_authorization,
484 &hf_json_3gpp_suppfeat_npcf_sm_28_pdusessionrelcause,
485 NULL
487 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_7, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
488 offset_reverse--;
490 if (offset_reverse == -1) {
491 return;
494 static int * const json_3gpp_suppfeat_npcf_sm_list_8[] = {
495 &hf_json_3gpp_suppfeat_npcf_sm_29_samepcf,
496 &hf_json_3gpp_suppfeat_npcf_sm_30_adcmultiredirection,
497 &hf_json_3gpp_suppfeat_npcf_sm_31_respbasedsessionrel,
498 &hf_json_3gpp_suppfeat_npcf_sm_32_timesensitivenetworking,
499 NULL
501 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_8, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
502 offset_reverse--;
504 if (offset_reverse == -1) {
505 return;
508 static int * const json_3gpp_suppfeat_npcf_sm_list_9[] = {
509 &hf_json_3gpp_suppfeat_npcf_sm_33_emdbv,
510 &hf_json_3gpp_suppfeat_npcf_sm_34_dnnselectionmode,
511 &hf_json_3gpp_suppfeat_npcf_sm_35_epsfallbackreport,
512 &hf_json_3gpp_suppfeat_npcf_sm_36_policydecisionerrorhandling,
513 NULL
515 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_9, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
516 offset_reverse--;
518 if (offset_reverse == -1) {
519 return;
522 static int * const json_3gpp_suppfeat_npcf_sm_list_10[] = {
523 &hf_json_3gpp_suppfeat_npcf_sm_37_ddneventpolicycontrol,
524 &hf_json_3gpp_suppfeat_npcf_sm_38_reallocationofcredit,
525 &hf_json_3gpp_suppfeat_npcf_sm_39_bdtpolicyrenegotiation,
526 &hf_json_3gpp_suppfeat_npcf_sm_40_extpolicydecisionerrorhandling,
527 NULL
529 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_10, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
530 offset_reverse--;
532 if (offset_reverse == -1) {
533 return;
536 static int * const json_3gpp_suppfeat_npcf_sm_list_11[] = {
537 &hf_json_3gpp_suppfeat_npcf_sm_41_immediatetermination,
538 &hf_json_3gpp_suppfeat_npcf_sm_42_aggregateduelocchanges,
539 &hf_json_3gpp_suppfeat_npcf_sm_43_es3xx,
540 &hf_json_3gpp_suppfeat_npcf_sm_44_groupidlistchange,
541 NULL
543 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_11, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
544 offset_reverse--;
546 if (offset_reverse == -1) {
547 return;
550 static int * const json_3gpp_suppfeat_npcf_sm_list_12[] = {
551 &hf_json_3gpp_suppfeat_npcf_sm_45_disableuenotification,
552 &hf_json_3gpp_suppfeat_npcf_sm_46_offlinechonly,
553 &hf_json_3gpp_suppfeat_npcf_sm_47_dual_connectivity_redundant_up_paths,
554 &hf_json_3gpp_suppfeat_npcf_sm_48_ddneventpolicycontrol2,
555 NULL
557 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_12, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
558 offset_reverse--;
560 if (offset_reverse == -1) {
561 return;
564 static int * const json_3gpp_suppfeat_npcf_sm_list_13[] = {
565 &hf_json_3gpp_suppfeat_npcf_sm_49_vplmn_qos_control,
566 &hf_json_3gpp_suppfeat_npcf_sm_50_2g3giwk,
567 &hf_json_3gpp_suppfeat_npcf_sm_51_timesensitivecommunication,
568 &hf_json_3gpp_suppfeat_npcf_sm_52_enedge,
569 NULL
571 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_13, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
572 offset_reverse--;
574 if (offset_reverse == -1) {
575 return;
578 static int * const json_3gpp_suppfeat_npcf_sm_list_14[] = {
579 &hf_json_3gpp_suppfeat_npcf_sm_53_satbackhaulcategorychg,
580 &hf_json_3gpp_suppfeat_npcf_sm_54_chfsetsupport,
581 &hf_json_3gpp_suppfeat_npcf_sm_55_enatsss,
582 &hf_json_3gpp_suppfeat_npcf_sm_56_mpsfordts,
583 NULL
585 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_14, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
586 offset_reverse--;
588 if (offset_reverse == -1) {
589 return;
592 static int * const json_3gpp_suppfeat_npcf_sm_list_15[] = {
593 &hf_json_3gpp_suppfeat_npcf_sm_57_routinginforemoval,
594 &hf_json_3gpp_suppfeat_npcf_sm_58_epra,
595 &hf_json_3gpp_suppfeat_npcf_sm_59_aminfluence,
596 &hf_json_3gpp_suppfeat_npcf_sm_60_pvssupport,
597 NULL
599 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_15, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
600 offset_reverse--;
602 if (offset_reverse == -1) {
603 return;
606 static int * const json_3gpp_suppfeat_npcf_sm_list_16[] = {
607 &hf_json_3gpp_suppfeat_npcf_sm_61_enena,
608 &hf_json_3gpp_suppfeat_npcf_sm_62_biumr,
609 &hf_json_3gpp_suppfeat_npcf_sm_63_easipreplacement,
610 &hf_json_3gpp_suppfeat_npcf_sm_64_exposuretoeas,
611 NULL
613 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_16, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
614 offset_reverse--;
616 if (offset_reverse == -1) {
617 return;
620 static int* const json_3gpp_suppfeat_npcf_sm_list_17[] = {
621 &hf_json_3gpp_suppfeat_npcf_sm_65_simultconnectivity,
622 &hf_json_3gpp_suppfeat_npcf_sm_66_sgwrest,
623 &hf_json_3gpp_suppfeat_npcf_sm_67_releasetoreactivate,
624 &hf_json_3gpp_suppfeat_npcf_sm_68_easdiscovery,
625 NULL
627 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_17, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
628 offset_reverse--;
630 if (offset_reverse == -1) {
631 return;
634 static int* const json_3gpp_suppfeat_npcf_sm_list_18[] = {
635 &hf_json_3gpp_suppfeat_npcf_sm_69_accnetchargid_string,
636 NULL
639 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_sm_list_18, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
640 offset_reverse--;
642 if (offset_reverse == -1) {
643 return;
646 if (offset_reverse > -1) {
647 proto_tree_add_format_text(sub_tree, suppfeat_tvb, 0, (offset_reverse - len));
650 } else if (strcmp(path, NPCF_UE_POLICY_CONTROL) == 0) {
651 /* TS 29.525 ch5.8 Feature negotiation */
653 static int * const json_3gpp_suppfeat_npcf_ue_list_1[] = {
654 &hf_json_3gpp_suppfeat_npcf_ue_1_pendingtransaction,
655 &hf_json_3gpp_suppfeat_npcf_ue_2_plmnchange,
656 &hf_json_3gpp_suppfeat_npcf_ue_3_connectivitystatechange,
657 &hf_json_3gpp_suppfeat_npcf_ue_4_v2x,
658 NULL
660 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_ue_list_1, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
661 offset_reverse--;
663 if (offset_reverse == -1) {
664 return;
667 static int * const json_3gpp_suppfeat_npcf_ue_list_2[] = {
668 &hf_json_3gpp_suppfeat_npcf_ue_5_groupidlistchange,
669 &hf_json_3gpp_suppfeat_npcf_ue_6_immediatereport,
670 &hf_json_3gpp_suppfeat_npcf_ue_7_errorresponse,
671 &hf_json_3gpp_suppfeat_npcf_ue_8_es3xx,
672 NULL
674 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_ue_list_2, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
675 offset_reverse--;
677 if (offset_reverse == -1) {
678 return;
681 static int * const json_3gpp_suppfeat_npcf_ue_list_3[] = {
682 &hf_json_3gpp_suppfeat_npcf_ue_9_prose,
683 NULL
685 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_npcf_ue_list_3, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
686 offset_reverse--;
688 if (offset_reverse == -1) {
689 return;
692 if (offset_reverse > -1) {
693 proto_tree_add_format_text(sub_tree, suppfeat_tvb, 0, (offset_reverse - len));
696 } else if (strncmp(path, NSMF_PDU_SESSION, 20) == 0) {
697 /* TS 29.502 ch6.1.8 Feature negotiation */
699 static int * const json_3gpp_suppfeat_nsmf_pdusession_list_1[] = {
700 &hf_json_3gpp_suppfeat_nsmf_pdusession_1_ciot,
701 &hf_json_3gpp_suppfeat_nsmf_pdusession_2_mapdu,
702 &hf_json_3gpp_suppfeat_nsmf_pdusession_3_dtssa,
703 &hf_json_3gpp_suppfeat_nsmf_pdusession_4_carpt,
704 NULL
706 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_nsmf_pdusession_list_1, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
707 offset_reverse--;
709 if (offset_reverse == -1) {
710 return;
713 static int * const json_3gpp_suppfeat_nsmf_pdusession_list_2[] = {
714 &hf_json_3gpp_suppfeat_nsmf_pdusession_5_ctxtr,
715 &hf_json_3gpp_suppfeat_nsmf_pdusession_6_vqos,
716 &hf_json_3gpp_suppfeat_nsmf_pdusession_7_hofail,
717 &hf_json_3gpp_suppfeat_nsmf_pdusession_8_es3xx,
718 NULL
720 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_nsmf_pdusession_list_2, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
721 offset_reverse--;
723 if (offset_reverse == -1) {
724 return;
727 static int * const json_3gpp_suppfeat_nsmf_pdusession_list_3[] = {
728 &hf_json_3gpp_suppfeat_nsmf_pdusession_9_dce2er,
729 &hf_json_3gpp_suppfeat_nsmf_pdusession_10_aasn,
730 &hf_json_3gpp_suppfeat_nsmf_pdusession_11_enedge,
731 &hf_json_3gpp_suppfeat_nsmf_pdusession_12_scpbu,
732 NULL
734 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_nsmf_pdusession_list_3, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
735 offset_reverse--;
737 if (offset_reverse == -1) {
738 return;
741 static int * const json_3gpp_suppfeat_nsmf_pdusession_list_4[] = {
742 &hf_json_3gpp_suppfeat_nsmf_pdusession_13_enpn,
743 &hf_json_3gpp_suppfeat_nsmf_pdusession_14_spae,
744 &hf_json_3gpp_suppfeat_nsmf_pdusession_15_5gsat,
745 &hf_json_3gpp_suppfeat_nsmf_pdusession_16_upipe,
746 NULL
748 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_nsmf_pdusession_list_4, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
749 offset_reverse--;
751 if (offset_reverse == -1) {
752 return;
755 static int * const json_3gpp_suppfeat_nsmf_pdusession_list_5[] = {
756 &hf_json_3gpp_suppfeat_nsmf_pdusession_17_biumr,
757 &hf_json_3gpp_suppfeat_nsmf_pdusession_18_acscr,
758 &hf_json_3gpp_suppfeat_nsmf_pdusession_19_psetr,
759 &hf_json_3gpp_suppfeat_nsmf_pdusession_20_dlset,
760 NULL
762 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_nsmf_pdusession_list_5, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
763 offset_reverse--;
765 if (offset_reverse == -1) {
766 return;
769 static int * const json_3gpp_suppfeat_nsmf_pdusession_list_6[] = {
770 &hf_json_3gpp_suppfeat_nsmf_pdusession_21_n9fsc,
771 NULL
773 proto_tree_add_bitmask_list_value(sub_tree, suppfeat_tvb, offset_reverse, 1, json_3gpp_suppfeat_nsmf_pdusession_list_6, g_ascii_xdigit_value(hex_ascii[offset_reverse]));
774 offset_reverse--;
776 if (offset_reverse == -1) {
777 return;
780 if (offset_reverse > -1) {
781 proto_tree_add_format_text(sub_tree, suppfeat_tvb, 0, (offset_reverse - len));
784 } else {
785 proto_tree_add_expert(tree, pinfo, &ei_json_3gpp_data_not_decoded, tvb, offset, -1);
788 return;
791 static void
792 register_static_headers(void) {
794 char* header_name;
796 /* Here hf[x].hfinfo.name is a header method which is used as key
797 * for matching ids while processing HTTP2 packets */
798 static hf_register_info hf[] = {
800 &hf_json_3gpp_ueepspdnconnection,
801 {"ueEpsPdnConnection", "json.3gpp.ueepspdnconnection",
802 FT_STRING, BASE_NONE, NULL, 0x0,
803 NULL, HFILL}
806 &hf_json_3gpp_bearerlevelqos,
807 {"bearerLevelQoS", "json.3gpp.bearerlevelqos",
808 FT_STRING, BASE_NONE, NULL, 0x0,
809 NULL, HFILL}
812 &hf_json_3gpp_epsbearersetup,
813 {"epsBearerSetup", "json.3gpp.epsbearersetup",
814 FT_STRING, BASE_NONE, NULL, 0x0,
815 NULL, HFILL}
818 &hf_json_3gpp_forwardingbearercontexts,
819 {"forwardingBearerContexts", "json.3gpp.forwardingbearercontexts",
820 FT_STRING, BASE_NONE, NULL, 0x0,
821 NULL, HFILL}
824 &hf_json_3gpp_forwardingfteid,
825 {"forwardingFTeid", "json.3gpp.forwardingfteid",
826 FT_STRING, BASE_NONE, NULL, 0x0,
827 NULL, HFILL}
830 &hf_json_3gpp_pgwnodename,
831 {"pgwNodeName", "json.3gpp.pgwnodename",
832 FT_STRING, BASE_NONE, NULL, 0x0,
833 NULL, HFILL}
836 &hf_json_3gpp_pgws8cfteid,
837 {"pgwS8cFteid", "json.3gpp.pgws8cfteid",
838 FT_STRING, BASE_NONE, NULL, 0x0,
839 NULL, HFILL}
842 &hf_json_3gpp_pgws8ufteid,
843 {"pgwS8uFteid", "json.3gpp.pgws8ufteid",
844 FT_STRING, BASE_NONE, NULL, 0x0,
845 NULL, HFILL}
848 &hf_json_3gpp_qosrules,
849 {"qosRules", "json.3gpp.qosrules",
850 FT_STRING, BASE_NONE, NULL, 0x0,
851 NULL, HFILL}
854 &hf_json_3gpp_qosflowdescription,
855 {"qosFlowDescription", "json.3gpp.qosflowdescription",
856 FT_STRING, BASE_NONE, NULL, 0x0,
857 NULL, HFILL}
860 &hf_json_3gpp_suppFeat,
861 {"suppFeat", "json.3gpp.suppFeat",
862 FT_STRING, BASE_NONE, NULL, 0x0,
863 NULL, HFILL}
866 &hf_json_3gpp_supportedFeatures,
867 {"supportedFeatures", "json.3gpp.supportedFeatures",
868 FT_STRING, BASE_NONE, NULL, 0x0,
869 NULL, HFILL}
873 /* List of decoding functions the index matches the HF */
874 static void(*json_decode_fn[])(tvbuff_t * tvb, proto_tree * tree, packet_info * pinfo, int offset, int len, const char* key_str) = {
875 dissect_base64decoded_eps_ie, /* ueEpsPdnConnection */
876 dissect_base64decoded_eps_ie, /* bearerLevelQoS */
877 dissect_base64decoded_eps_ie, /* epsBearerSetup */
878 dissect_base64decoded_eps_ie, /* forwardingBearerContexts */
879 dissect_base64decoded_eps_ie, /* forwardingFTeid */
880 dissect_base64decoded_eps_ie, /* pgwNodeName */
881 dissect_base64decoded_eps_ie, /* pgwS8cFteid */
882 dissect_base64decoded_eps_ie, /* pgwS8uFteid */
884 dissect_base64decoded_nas5g_ie, /* qosRules */
885 dissect_base64decoded_nas5g_ie, /* qosFlowDescription */
887 dissect_3gpp_supportfeatures, /* suppFeat */
888 dissect_3gpp_supportfeatures, /* supportedFeatures */
890 NULL, /* NONE */
893 /* Hfs with functions */
894 for (unsigned i = 0; i < G_N_ELEMENTS(hf); ++i) {
895 header_name = g_strdup(hf[i].hfinfo.name);
896 json_data_decoder_t* json_data_decoder_rec = g_new(json_data_decoder_t, 1);
897 json_data_decoder_rec->hf_id = &hf[i].hfinfo.id;
898 json_data_decoder_rec->json_data_decoder = json_decode_fn[i];
899 g_hash_table_insert(json_header_fields_hash, header_name, json_data_decoder_rec);
902 proto_register_field_array(proto_json_3gpp, hf, G_N_ELEMENTS(hf));
905 void
906 proto_register_json_3gpp(void)
908 static hf_register_info hf[] = {
910 /* 3GPP content */
911 { &hf_json_3gpp_binary_data,
912 { "Binary data", "json.binary_data",
913 FT_BYTES, BASE_NONE, NULL, 0x00,
914 "JSON binary data", HFILL }
916 { &hf_json_3gpp_suppfeat,
917 { "Supported Features", "json.3gpp.suppfeat",
918 FT_STRING, BASE_NONE, NULL, 0x0,
919 NULL, HFILL }
922 { &hf_json_3gpp_suppfeat_npcf_am_1_slicesupport,
923 { "SliceSupport", "json.3gpp.suppfeat.slicesupport",
924 FT_BOOLEAN, 4, NULL, 0x1,
925 NULL, HFILL }
927 { &hf_json_3gpp_suppfeat_npcf_am_2_pendingtransaction,
928 { "PendingTransaction", "json.3gpp.suppfeat.pendingtransaction",
929 FT_BOOLEAN, 4, NULL, 0x2,
930 NULL, HFILL }
932 { &hf_json_3gpp_suppfeat_npcf_am_3_ueambrauthorization,
933 { "UE-AMBR_Authorization", "json.3gpp.suppfeat.ueambrauthorization",
934 FT_BOOLEAN, 4, NULL, 0x4,
935 NULL, HFILL }
937 { &hf_json_3gpp_suppfeat_npcf_am_4_dnnreplacementcontrol,
938 { "DNNReplacementControl", "json.3gpp.suppfeat.dnnreplacementcontrol",
939 FT_BOOLEAN, 4, NULL, 0x8,
940 NULL, HFILL }
943 { &hf_json_3gpp_suppfeat_npcf_am_5_multipleaccesstypes,
944 { "MultipleAccessTypes", "json.3gpp.suppfeat.multipleaccesstypes",
945 FT_BOOLEAN, 4, NULL, 0x1,
946 NULL, HFILL }
948 { &hf_json_3gpp_suppfeat_npcf_am_6_wirelinewirelessconvergence,
949 { "WirelineWirelessConvergence", "json.3gpp.suppfeat.wirelinewirelessconvergence",
950 FT_BOOLEAN, 4, NULL, 0x2,
951 NULL, HFILL }
953 { &hf_json_3gpp_suppfeat_npcf_am_7_immediatereport,
954 { "ImmediateReport", "json.3gpp.suppfeat.immediatereport",
955 FT_BOOLEAN, 4, NULL, 0x4,
956 NULL, HFILL }
958 { &hf_json_3gpp_suppfeat_npcf_am_8_es3xx,
959 { "ES3XX", "json.3gpp.suppfeat.es3xx",
960 FT_BOOLEAN, 4, NULL, 0x8,
961 NULL, HFILL }
964 { &hf_json_3gpp_suppfeat_npcf_am_9_ueslicembrauthorization,
965 { "UE-Slice-MBR_Authorization", "json.3gpp.suppfeat.ueslicembrauthorization",
966 FT_BOOLEAN, 4, NULL, 0x1,
967 NULL, HFILL }
969 { &hf_json_3gpp_suppfeat_npcf_am_10_aminfluence,
970 { "AMInfluence", "json.3gpp.suppfeat.aminfluence",
971 FT_BOOLEAN, 4, NULL, 0x2,
972 NULL, HFILL }
974 { &hf_json_3gpp_suppfeat_npcf_am_11_enena,
975 { "EneNA", "json.3gpp.suppfeat.enena",
976 FT_BOOLEAN, 4, NULL, 0x4,
977 NULL, HFILL }
979 { &hf_json_3gpp_suppfeat_npcf_am_12_targetnssai,
980 { "TargetNSSAI", "json.3gpp.suppfeat.targetnssai",
981 FT_BOOLEAN, 4, NULL, 0x8,
982 NULL, HFILL }
985 { &hf_json_3gpp_suppfeat_npcf_am_13_5gaccessstratumtime,
986 { "5GAccessStratumTime", "json.3gpp.suppfeat.5gaccessstratumtime",
987 FT_BOOLEAN, 4, NULL, 0x1,
988 NULL, HFILL }
991 { &hf_json_3gpp_suppfeat_npcf_sm_1_tsc,
992 { "TSC", "json.3gpp.suppfeat.tsc",
993 FT_BOOLEAN, 4, NULL, 0x1,
994 NULL, HFILL }
996 { &hf_json_3gpp_suppfeat_npcf_sm_2_resshare,
997 { "ResShare", "json.3gpp.suppfeat.resshare",
998 FT_BOOLEAN, 4, NULL, 0x2,
999 NULL, HFILL }
1001 { &hf_json_3gpp_suppfeat_npcf_sm_3_3gpppsdataoff,
1002 { "3GPP-PS-Data-Off", "json.3gpp.suppfeat.3gpppsdataoff",
1003 FT_BOOLEAN, 4, NULL, 0x4,
1004 NULL, HFILL }
1006 { &hf_json_3gpp_suppfeat_npcf_sm_4_adc,
1007 { "ADC", "json.3gpp.suppfeat.adc",
1008 FT_BOOLEAN, 4, NULL, 0x8,
1009 NULL, HFILL }
1012 { &hf_json_3gpp_suppfeat_npcf_sm_5_umc,
1013 { "UMC", "json.3gpp.suppfeat.umc",
1014 FT_BOOLEAN, 4, NULL, 0x1,
1015 NULL, HFILL }
1017 { &hf_json_3gpp_suppfeat_npcf_sm_6_netloc,
1018 { "NetLoc", "json.3gpp.suppfeat.netloc",
1019 FT_BOOLEAN, 4, NULL, 0x2,
1020 NULL, HFILL }
1022 { &hf_json_3gpp_suppfeat_npcf_sm_7_rannascause,
1023 { "RAN-NAS-Cause", "json.3gpp.suppfeat.rannascause",
1024 FT_BOOLEAN, 4, NULL, 0x4,
1025 NULL, HFILL }
1027 { &hf_json_3gpp_suppfeat_npcf_sm_8_provafsignalflow,
1028 { "ProvAFsignalFlow", "json.3gpp.suppfeat.provafsignalflow",
1029 FT_BOOLEAN, 4, NULL, 0x8,
1030 NULL, HFILL }
1033 { &hf_json_3gpp_suppfeat_npcf_sm_9_pcscfrestorationenhancement,
1034 { "PCSCF-Restoration-Enhancement", "json.3gpp.suppfeat.pcscfrestorationenhancement",
1035 FT_BOOLEAN, 4, NULL, 0x1,
1036 NULL, HFILL }
1038 { &hf_json_3gpp_suppfeat_npcf_sm_10_pra,
1039 { "PRA", "json.3gpp.suppfeat.pra",
1040 FT_BOOLEAN, 4, NULL, 0x2,
1041 NULL, HFILL }
1043 { &hf_json_3gpp_suppfeat_npcf_sm_11_ruleversioning,
1044 { "RuleVersioning", "json.3gpp.suppfeat.ruleversioning",
1045 FT_BOOLEAN, 4, NULL, 0x4,
1046 NULL, HFILL }
1048 { &hf_json_3gpp_suppfeat_npcf_sm_12_sponsoredconnectivity,
1049 { "SponsoredConnectivity", "json.3gpp.suppfeat.sponsoredconnectivity",
1050 FT_BOOLEAN, 4, NULL, 0x8,
1051 NULL, HFILL }
1054 { &hf_json_3gpp_suppfeat_npcf_sm_13_ransupportinfo,
1055 { "RAN-Support-Info", "json.3gpp.suppfeat.ransupportinfo",
1056 FT_BOOLEAN, 4, NULL, 0x1,
1057 NULL, HFILL }
1059 { &hf_json_3gpp_suppfeat_npcf_sm_14_policyupdatewhenuesuspends,
1060 { "PolicyUpdateWhenUESuspends", "json.3gpp.suppfeat.policyupdatewhenuesuspends",
1061 FT_BOOLEAN, 4, NULL, 0x2,
1062 NULL, HFILL }
1064 { &hf_json_3gpp_suppfeat_npcf_sm_15_accesstypecondition,
1065 { "AccessTypeCondition", "json.3gpp.suppfeat.accesstypecondition",
1066 FT_BOOLEAN, 4, NULL, 0x4,
1067 NULL, HFILL }
1069 { &hf_json_3gpp_suppfeat_npcf_sm_16_multiipv6addrprefix,
1070 { "MultiIpv6AddrPrefix", "json.3gpp.suppfeat.multiipv6addrprefix",
1071 FT_BOOLEAN, 4, NULL, 0x8,
1072 NULL, HFILL }
1075 { &hf_json_3gpp_suppfeat_npcf_sm_17_sessionruleerrorhandling,
1076 { "SessionRuleErrorHandling", "json.3gpp.suppfeat.sessionruleerrorhandling",
1077 FT_BOOLEAN, 4, NULL, 0x1,
1078 NULL, HFILL }
1080 { &hf_json_3gpp_suppfeat_npcf_sm_18_af_charging_identifier,
1081 { "AF_Charging_Identifier", "json.3gpp.suppfeat.af_charging_identifier",
1082 FT_BOOLEAN, 4, NULL, 0x2,
1083 NULL, HFILL }
1085 { &hf_json_3gpp_suppfeat_npcf_sm_19_atsss,
1086 { "ATSSS", "json.3gpp.suppfeat.atsss",
1087 FT_BOOLEAN, 4, NULL, 0x4,
1088 NULL, HFILL }
1090 { &hf_json_3gpp_suppfeat_npcf_sm_20_pendingtransaction,
1091 { "PendingTransaction", "json.3gpp.suppfeat.pendingtransaction",
1092 FT_BOOLEAN, 4, NULL, 0x8,
1093 NULL, HFILL }
1096 { &hf_json_3gpp_suppfeat_npcf_sm_21_urllc,
1097 { "URLLC", "json.3gpp.suppfeat.urllc",
1098 FT_BOOLEAN, 4, NULL, 0x1,
1099 NULL, HFILL }
1101 { &hf_json_3gpp_suppfeat_npcf_sm_22_macaddressrange,
1102 { "MacAddressRange", "json.3gpp.suppfeat.macaddressrange",
1103 FT_BOOLEAN, 4, NULL, 0x2,
1104 NULL, HFILL }
1106 { &hf_json_3gpp_suppfeat_npcf_sm_23_wwc,
1107 { "WWC", "json.3gpp.suppfeat.wwc",
1108 FT_BOOLEAN, 4, NULL, 0x4,
1109 NULL, HFILL }
1111 { &hf_json_3gpp_suppfeat_npcf_sm_24_qosmonitoring,
1112 { "QosMonitoring", "json.3gpp.suppfeat.qosmonitoring",
1113 FT_BOOLEAN, 4, NULL, 0x8,
1114 NULL, HFILL }
1117 { &hf_json_3gpp_suppfeat_npcf_sm_25_authorizationwithrequiredqos,
1118 { "AuthorizationWithRequiredQoS", "json.3gpp.suppfeat.authorizationwithrequiredqos",
1119 FT_BOOLEAN, 4, NULL, 0x1,
1120 NULL, HFILL }
1122 { &hf_json_3gpp_suppfeat_npcf_sm_26_enhancedbackgrounddatatransfer,
1123 { "EnhancedBackgroundDataTransfer", "json.3gpp.suppfeat.enhancedbackgrounddatatransfer",
1124 FT_BOOLEAN, 4, NULL, 0x2,
1125 NULL, HFILL }
1127 { &hf_json_3gpp_suppfeat_npcf_sm_27_dn_authorization,
1128 { "DN-Authorization", "json.3gpp.suppfeat.dn_authorization",
1129 FT_BOOLEAN, 4, NULL, 0x4,
1130 NULL, HFILL }
1132 { &hf_json_3gpp_suppfeat_npcf_sm_28_pdusessionrelcause,
1133 { "PDUSessionRelCause", "json.3gpp.suppfeat.pdusessionrelcause",
1134 FT_BOOLEAN, 4, NULL, 0x8,
1135 NULL, HFILL }
1138 { &hf_json_3gpp_suppfeat_npcf_sm_29_samepcf,
1139 { "SamePcf", "json.3gpp.suppfeat.samepcf",
1140 FT_BOOLEAN, 4, NULL, 0x1,
1141 NULL, HFILL }
1143 { &hf_json_3gpp_suppfeat_npcf_sm_30_adcmultiredirection,
1144 { "ADCmultiRedirection", "json.3gpp.suppfeat.adcmultiredirection",
1145 FT_BOOLEAN, 4, NULL, 0x2,
1146 NULL, HFILL }
1148 { &hf_json_3gpp_suppfeat_npcf_sm_31_respbasedsessionrel,
1149 { "RespBasedSessionRel", "json.3gpp.suppfeat.respbasedsessionrel",
1150 FT_BOOLEAN, 4, NULL, 0x4,
1151 NULL, HFILL }
1153 { &hf_json_3gpp_suppfeat_npcf_sm_32_timesensitivenetworking,
1154 { "TimeSensitiveNetworking", "json.3gpp.suppfeat.timesensitivenetworking",
1155 FT_BOOLEAN, 4, NULL, 0x8,
1156 NULL, HFILL }
1159 { &hf_json_3gpp_suppfeat_npcf_sm_33_emdbv,
1160 { "EMDBV", "json.3gpp.suppfeat.emdbv",
1161 FT_BOOLEAN, 4, NULL, 0x1,
1162 NULL, HFILL }
1164 { &hf_json_3gpp_suppfeat_npcf_sm_34_dnnselectionmode,
1165 { "DNNSelectionMode", "json.3gpp.suppfeat.dnnselectionmodedirection",
1166 FT_BOOLEAN, 4, NULL, 0x2,
1167 NULL, HFILL }
1169 { &hf_json_3gpp_suppfeat_npcf_sm_35_epsfallbackreport,
1170 { "EPSFallbackReport", "json.3gpp.suppfeat.epsfallbackreport",
1171 FT_BOOLEAN, 4, NULL, 0x4,
1172 NULL, HFILL }
1174 { &hf_json_3gpp_suppfeat_npcf_sm_36_policydecisionerrorhandling,
1175 { "PolicyDecisionErrorHandling", "json.3gpp.suppfeat.policydecisionerrorhandling",
1176 FT_BOOLEAN, 4, NULL, 0x8,
1177 NULL, HFILL }
1180 { &hf_json_3gpp_suppfeat_npcf_sm_37_ddneventpolicycontrol,
1181 { "DDNEventPolicyControl", "json.3gpp.suppfeat.ddneventpolicycontrol",
1182 FT_BOOLEAN, 4, NULL, 0x1,
1183 NULL, HFILL }
1185 { &hf_json_3gpp_suppfeat_npcf_sm_38_reallocationofcredit,
1186 { "ReallocationOfCredit", "json.3gpp.suppfeat.reallocationofcredit",
1187 FT_BOOLEAN, 4, NULL, 0x2,
1188 NULL, HFILL }
1190 { &hf_json_3gpp_suppfeat_npcf_sm_39_bdtpolicyrenegotiation,
1191 { "BDTPolicyRenegotiation", "json.3gpp.suppfeat.bdtpolicyrenegotiation",
1192 FT_BOOLEAN, 4, NULL, 0x4,
1193 NULL, HFILL }
1195 { &hf_json_3gpp_suppfeat_npcf_sm_40_extpolicydecisionerrorhandling,
1196 { "ExtPolicyDecisionErrorHandling", "json.3gpp.suppfeat.extpolicydecisionerrorhandling",
1197 FT_BOOLEAN, 4, NULL, 0x8,
1198 NULL, HFILL }
1201 { &hf_json_3gpp_suppfeat_npcf_sm_41_immediatetermination,
1202 { "ImmediateTermination", "json.3gpp.suppfeat.immediatetermination",
1203 FT_BOOLEAN, 4, NULL, 0x1,
1204 NULL, HFILL }
1206 { &hf_json_3gpp_suppfeat_npcf_sm_42_aggregateduelocchanges,
1207 { "AggregatedUELocChanges", "json.3gpp.suppfeat.aggregateduelocchanges",
1208 FT_BOOLEAN, 4, NULL, 0x2,
1209 NULL, HFILL }
1211 { &hf_json_3gpp_suppfeat_npcf_sm_43_es3xx,
1212 { "ES3XX", "json.3gpp.suppfeat.es3xx",
1213 FT_BOOLEAN, 4, NULL, 0x4,
1214 NULL, HFILL }
1216 { &hf_json_3gpp_suppfeat_npcf_sm_44_groupidlistchange,
1217 { "GroupIdListChange", "json.3gpp.suppfeat.groupidlistchange",
1218 FT_BOOLEAN, 4, NULL, 0x8,
1219 NULL, HFILL }
1222 { &hf_json_3gpp_suppfeat_npcf_sm_45_disableuenotification,
1223 { "DisableUENotification", "json.3gpp.suppfeat.disableuenotification",
1224 FT_BOOLEAN, 4, NULL, 0x1,
1225 NULL, HFILL }
1227 { &hf_json_3gpp_suppfeat_npcf_sm_46_offlinechonly,
1228 { "OfflineChOnly", "json.3gpp.suppfeat.offlinechonly",
1229 FT_BOOLEAN, 4, NULL, 0x2,
1230 NULL, HFILL }
1232 { &hf_json_3gpp_suppfeat_npcf_sm_47_dual_connectivity_redundant_up_paths,
1233 { "Dual-Connectivity-redundant-UP-paths", "json.3gpp.suppfeat.dual_connectivity_redundant_up_paths",
1234 FT_BOOLEAN, 4, NULL, 0x4,
1235 NULL, HFILL }
1237 { &hf_json_3gpp_suppfeat_npcf_sm_48_ddneventpolicycontrol2,
1238 { "DDNEventPolicyControl2", "json.3gpp.suppfeat.ddneventpolicycontrol2",
1239 FT_BOOLEAN, 4, NULL, 0x8,
1240 NULL, HFILL }
1243 { &hf_json_3gpp_suppfeat_npcf_sm_49_vplmn_qos_control,
1244 { "VPLMN-QoS-Control", "json.3gpp.suppfeat.vplmn_qos_control",
1245 FT_BOOLEAN, 4, NULL, 0x1,
1246 NULL, HFILL }
1248 { &hf_json_3gpp_suppfeat_npcf_sm_50_2g3giwk,
1249 { "2G3GIWK", "json.3gpp.suppfeat.2g3giwk",
1250 FT_BOOLEAN, 4, NULL, 0x2,
1251 NULL, HFILL }
1253 { &hf_json_3gpp_suppfeat_npcf_sm_51_timesensitivecommunication,
1254 { "TimeSensitiveCommunication", "json.3gpp.suppfeat.timesensitivecommunication",
1255 FT_BOOLEAN, 4, NULL, 0x4,
1256 NULL, HFILL }
1258 { &hf_json_3gpp_suppfeat_npcf_sm_52_enedge,
1259 { "EnEDGE", "json.3gpp.suppfeat.enedge",
1260 FT_BOOLEAN, 4, NULL, 0x8,
1261 NULL, HFILL }
1264 { &hf_json_3gpp_suppfeat_npcf_sm_53_satbackhaulcategorychg,
1265 { "SatBackhaulCategoryChg", "json.3gpp.suppfeat.satbackhaulcategorychg",
1266 FT_BOOLEAN, 4, NULL, 0x1,
1267 NULL, HFILL }
1269 { &hf_json_3gpp_suppfeat_npcf_sm_54_chfsetsupport,
1270 { "CHFsetSupport", "json.3gpp.suppfeat.chfsetsupport",
1271 FT_BOOLEAN, 4, NULL, 0x2,
1272 NULL, HFILL }
1274 { &hf_json_3gpp_suppfeat_npcf_sm_55_enatsss,
1275 { "EnATSSS", "json.3gpp.suppfeat.enatsss",
1276 FT_BOOLEAN, 4, NULL, 0x4,
1277 NULL, HFILL }
1279 { &hf_json_3gpp_suppfeat_npcf_sm_56_mpsfordts,
1280 { "MPSforDTS", "json.3gpp.suppfeat.mpsfordts",
1281 FT_BOOLEAN, 4, NULL, 0x8,
1282 NULL, HFILL }
1285 { &hf_json_3gpp_suppfeat_npcf_sm_57_routinginforemoval,
1286 { "RoutingInfoRemoval", "json.3gpp.suppfeat.routinginforemoval",
1287 FT_BOOLEAN, 4, NULL, 0x1,
1288 NULL, HFILL }
1290 { &hf_json_3gpp_suppfeat_npcf_sm_58_epra,
1291 { "ePRA", "json.3gpp.suppfeat.epra",
1292 FT_BOOLEAN, 4, NULL, 0x2,
1293 NULL, HFILL }
1295 { &hf_json_3gpp_suppfeat_npcf_sm_59_aminfluence,
1296 { "AMInfluence", "json.3gpp.suppfeat.aminfluence",
1297 FT_BOOLEAN, 4, NULL, 0x4,
1298 NULL, HFILL }
1300 { &hf_json_3gpp_suppfeat_npcf_sm_60_pvssupport,
1301 { "PvsSupport", "json.3gpp.suppfeat.pvssupport",
1302 FT_BOOLEAN, 4, NULL, 0x8,
1303 NULL, HFILL }
1306 { &hf_json_3gpp_suppfeat_npcf_sm_61_enena,
1307 { "EneNA", "json.3gpp.suppfeat.enena",
1308 FT_BOOLEAN, 4, NULL, 0x1,
1309 NULL, HFILL }
1311 { &hf_json_3gpp_suppfeat_npcf_sm_62_biumr,
1312 { "BIUMR", "json.3gpp.suppfeat.biumr",
1313 FT_BOOLEAN, 4, NULL, 0x2,
1314 NULL, HFILL }
1316 { &hf_json_3gpp_suppfeat_npcf_sm_63_easipreplacement,
1317 { "EASIPreplacement", "json.3gpp.suppfeat.easipreplacement",
1318 FT_BOOLEAN, 4, NULL, 0x4,
1319 NULL, HFILL }
1321 { &hf_json_3gpp_suppfeat_npcf_sm_64_exposuretoeas,
1322 { "ExposureToEAS", "json.3gpp.suppfeat.exposuretoeas",
1323 FT_BOOLEAN, 4, NULL, 0x8,
1324 NULL, HFILL }
1326 { &hf_json_3gpp_suppfeat_npcf_sm_65_simultconnectivity,
1327 { "SimultConnectivity", "json.3gpp.suppfeat.simultconnectivity",
1328 FT_BOOLEAN, 4, NULL, 0x1,
1329 NULL, HFILL }
1331 { &hf_json_3gpp_suppfeat_npcf_sm_66_sgwrest,
1332 { "SGWRest", "json.3gpp.suppfeat.sgwrest",
1333 FT_BOOLEAN, 4, NULL, 0x2,
1334 NULL, HFILL }
1336 { &hf_json_3gpp_suppfeat_npcf_sm_67_releasetoreactivate,
1337 { "ReleaseToReactivate", "json.3gpp.suppfeat.releasetoreactivate",
1338 FT_BOOLEAN, 4, NULL, 0x4,
1339 NULL, HFILL }
1341 { &hf_json_3gpp_suppfeat_npcf_sm_68_easdiscovery,
1342 { "EASDiscovery", "json.3gpp.suppfeat.easdiscovery",
1343 FT_BOOLEAN, 4, NULL, 0x8,
1344 NULL, HFILL }
1346 { &hf_json_3gpp_suppfeat_npcf_sm_69_accnetchargid_string,
1347 { "AccNetChargId_String", "json.3gpp.suppfeat.accnetchargid_string",
1348 FT_BOOLEAN, 4, NULL, 0x1,
1349 NULL, HFILL }
1352 { &hf_json_3gpp_suppfeat_npcf_ue_1_pendingtransaction,
1353 { "PendingTransaction", "json.3gpp.suppfeat.pendingtransaction",
1354 FT_BOOLEAN, 4, NULL, 0x1,
1355 NULL, HFILL }
1357 { &hf_json_3gpp_suppfeat_npcf_ue_2_plmnchange,
1358 { "PlmnChange", "json.3gpp.suppfeat.plmnchange",
1359 FT_BOOLEAN, 4, NULL, 0x2,
1360 NULL, HFILL }
1362 { &hf_json_3gpp_suppfeat_npcf_ue_3_connectivitystatechange,
1363 { "ConnectivityStateChange", "json.3gpp.suppfeat.connectivitystatechange",
1364 FT_BOOLEAN, 4, NULL, 0x4,
1365 NULL, HFILL }
1367 { &hf_json_3gpp_suppfeat_npcf_ue_4_v2x,
1368 { "V2X", "json.3gpp.suppfeat.v2x",
1369 FT_BOOLEAN, 4, NULL, 0x8,
1370 NULL, HFILL }
1373 { &hf_json_3gpp_suppfeat_npcf_ue_5_groupidlistchange,
1374 { "GroupIdListChange", "json.3gpp.suppfeat.groupidlistchange",
1375 FT_BOOLEAN, 4, NULL, 0x1,
1376 NULL, HFILL }
1378 { &hf_json_3gpp_suppfeat_npcf_ue_6_immediatereport,
1379 { "ImmediateReport", "json.3gpp.suppfeat.immediatereport",
1380 FT_BOOLEAN, 4, NULL, 0x2,
1381 NULL, HFILL }
1383 { &hf_json_3gpp_suppfeat_npcf_ue_7_errorresponse,
1384 { "ErrorResponse", "json.3gpp.suppfeat.errorresponse",
1385 FT_BOOLEAN, 4, NULL, 0x4,
1386 NULL, HFILL }
1388 { &hf_json_3gpp_suppfeat_npcf_ue_8_es3xx,
1389 { "ES3XX", "json.3gpp.suppfeat.es3xx",
1390 FT_BOOLEAN, 4, NULL, 0x8,
1391 NULL, HFILL }
1394 { &hf_json_3gpp_suppfeat_npcf_ue_9_prose,
1395 { "ProSe", "json.3gpp.suppfeat.prose",
1396 FT_BOOLEAN, 4, NULL, 0x1,
1397 NULL, HFILL }
1400 { &hf_json_3gpp_suppfeat_nsmf_pdusession_1_ciot,
1401 { "CIOT", "json.3gpp.suppfeat.ciot",
1402 FT_BOOLEAN, 4, NULL, 0x1,
1403 "Cellular IoT", HFILL }
1405 { &hf_json_3gpp_suppfeat_nsmf_pdusession_2_mapdu,
1406 { "MAPDU", "json.3gpp.suppfeat.mapdu",
1407 FT_BOOLEAN, 4, NULL, 0x2,
1408 "Multi-Access PDU Session", HFILL }
1410 { &hf_json_3gpp_suppfeat_nsmf_pdusession_3_dtssa,
1411 { "DTSSA", "json.3gpp.suppfeat.dtssa",
1412 FT_BOOLEAN, 4, NULL, 0x4,
1413 "Deployments Topologies with specific SMF Service Areas", HFILL }
1415 { &hf_json_3gpp_suppfeat_nsmf_pdusession_4_carpt,
1416 { "CARPT", "json.3gpp.suppfeat.carpt",
1417 FT_BOOLEAN, 4, NULL, 0x8,
1418 "SMF derived CN Assisted RAN parameters Tuning", HFILL }
1421 { &hf_json_3gpp_suppfeat_nsmf_pdusession_5_ctxtr,
1422 { "CTXTR", "json.3gpp.suppfeat.ctxtr",
1423 FT_BOOLEAN, 4, NULL, 0x1,
1424 NULL, HFILL }
1426 { &hf_json_3gpp_suppfeat_nsmf_pdusession_6_vqos,
1427 { "VQOS", "json.3gpp.suppfeat.vqos",
1428 FT_BOOLEAN, 4, NULL, 0x2,
1429 "VPLMN QoS", HFILL }
1431 { &hf_json_3gpp_suppfeat_nsmf_pdusession_7_hofail,
1432 { "HOFAIL", "json.3gpp.suppfeat.hofail",
1433 FT_BOOLEAN, 4, NULL, 0x4,
1434 NULL, HFILL }
1436 { &hf_json_3gpp_suppfeat_nsmf_pdusession_8_es3xx,
1437 { "ES3XX", "json.3gpp.suppfeat.es3xx",
1438 FT_BOOLEAN, 4, NULL, 0x8,
1439 NULL, HFILL }
1442 { &hf_json_3gpp_suppfeat_nsmf_pdusession_9_dce2er,
1443 { "DCE2ER", "json.3gpp.suppfeat.dce2er",
1444 FT_BOOLEAN, 4, NULL, 0x1,
1445 NULL, HFILL }
1447 { &hf_json_3gpp_suppfeat_nsmf_pdusession_10_aasn,
1448 { "AASN", "json.3gpp.suppfeat.aasn",
1449 FT_BOOLEAN, 4, NULL, 0x2,
1450 NULL, HFILL }
1452 { &hf_json_3gpp_suppfeat_nsmf_pdusession_11_enedge,
1453 { "ENEDGE", "json.3gpp.suppfeat.enedge",
1454 FT_BOOLEAN, 4, NULL, 0x4,
1455 NULL, HFILL }
1457 { &hf_json_3gpp_suppfeat_nsmf_pdusession_12_scpbu,
1458 { "SCPBU", "json.3gpp.suppfeat.scpbu",
1459 FT_BOOLEAN, 4, NULL, 0x8,
1460 NULL, HFILL }
1463 { &hf_json_3gpp_suppfeat_nsmf_pdusession_13_enpn,
1464 { "ENPN", "json.3gpp.suppfeat.enpn",
1465 FT_BOOLEAN, 4, NULL, 0x1,
1466 NULL, HFILL }
1468 { &hf_json_3gpp_suppfeat_nsmf_pdusession_14_spae,
1469 { "SPAE", "json.3gpp.suppfeat.spae",
1470 FT_BOOLEAN, 4, NULL, 0x2,
1471 NULL, HFILL }
1473 { &hf_json_3gpp_suppfeat_nsmf_pdusession_15_5gsat,
1474 { "5GSAT", "json.3gpp.suppfeat.5gsat",
1475 FT_BOOLEAN, 4, NULL, 0x4,
1476 NULL, HFILL }
1478 { &hf_json_3gpp_suppfeat_nsmf_pdusession_16_upipe,
1479 { "UPIPE", "json.3gpp.suppfeat.upipe",
1480 FT_BOOLEAN, 4, NULL, 0x8,
1481 "User Plane Integrity Protection with EPS", HFILL }
1484 { &hf_json_3gpp_suppfeat_nsmf_pdusession_17_biumr,
1485 { "BIUMR", "json.3gpp.suppfeat.biumr",
1486 FT_BOOLEAN, 4, NULL, 0x1,
1487 NULL, HFILL }
1489 { &hf_json_3gpp_suppfeat_nsmf_pdusession_18_acscr,
1490 { "ACSCR", "json.3gpp.suppfeat.acscr",
1491 FT_BOOLEAN, 4, NULL, 0x2,
1492 NULL, HFILL }
1494 { &hf_json_3gpp_suppfeat_nsmf_pdusession_19_psetr,
1495 { "PSETR", "json.3gpp.suppfeat.psetr",
1496 FT_BOOLEAN, 4, NULL, 0x4,
1497 NULL, HFILL }
1499 { &hf_json_3gpp_suppfeat_nsmf_pdusession_20_dlset,
1500 { "DLSET", "json.3gpp.suppfeat.dlset",
1501 FT_BOOLEAN, 4, NULL, 0x8,
1502 NULL, HFILL }
1505 { &hf_json_3gpp_suppfeat_nsmf_pdusession_21_n9fsc,
1506 { "N9FSC", "json.3gpp.suppfeat.n9fsc",
1507 FT_BOOLEAN, 4, NULL, 0x1,
1508 NULL, HFILL }
1513 static int *ett[] = {
1514 &ett_json_base64decoded_eps_ie,
1515 &ett_json_base64decoded_nas5g_ie,
1516 &ett_json_3gpp_data,
1519 static ei_register_info ei[] = {
1520 { &ei_json_3gpp_data_not_decoded,{ "json.3gpp.data_not_decoded", PI_UNDECODED, PI_NOTE, "Data not decoded by WS yet", EXPFILL } },
1521 { &ei_json_3gpp_encoding_error,{ "json.3gpp.encoding_error", PI_UNDECODED, PI_ERROR, "Data wrongly encoded", EXPFILL } },
1524 expert_module_t* expert_json_3gpp;
1526 /* Required function calls to register the header fields and subtrees used */
1527 proto_json_3gpp = proto_register_protocol("JSON 3GPP","JSON_3GPP", "json.3gpp");
1528 proto_register_field_array(proto_json_3gpp, hf, array_length(hf));
1529 proto_register_subtree_array(ett, array_length(ett));
1530 expert_json_3gpp = expert_register_protocol(proto_json_3gpp);
1531 expert_register_field_array(expert_json_3gpp, ei, array_length(ei));
1533 /* Fill hash table with static headers */
1534 register_static_headers();
1537 void
1538 proto_reg_handoff_json_3gpp(void)
1540 proto_http = proto_get_id_by_filter_name("http");
1544 * Editor modelines - https://www.wireshark.org/tools/modelines.html
1546 * Local variables:
1547 * c-basic-offset: 8
1548 * tab-width: 8
1549 * indent-tabs-mode: t
1550 * End:
1552 * vi: set shiftwidth=8 tabstop=8 noexpandtab:
1553 * :indentSize=8:tabSize=8:noTabs=false: