Bug Summary

File:builds/wireshark/wireshark/epan/dissectors/packet-pfcp.c
Warning:line 12985, column 9
Value stored to 'firstField' is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name packet-pfcp.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -ffp-contract=on -fno-rounding-math -ffloat16-excess-precision=fast -fbfloat16-excess-precision=fast -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/builds/wireshark/wireshark/build -fcoverage-compilation-dir=/builds/wireshark/wireshark/build -resource-dir /usr/lib/llvm-18/lib/clang/18 -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/epan -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -D _GLIBCXX_ASSERTIONS -internal-isystem /usr/lib/llvm-18/lib/clang/18/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/14/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -Wno-format-truncation -Wno-format-nonliteral -Wno-pointer-sign -std=gnu11 -ferror-limit 19 -fvisibility=hidden -fwrapv -fstrict-flex-arrays=3 -stack-protector 2 -fstack-clash-protection -fcf-protection=full -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fexceptions -fcolor-diagnostics -analyzer-output=html -dwarf-debug-flags /usr/lib/llvm-18/bin/clang -### --analyze -x c -D G_DISABLE_DEPRECATED -D G_DISABLE_SINGLE_INCLUDES -D WS_BUILD_DLL -D WS_DEBUG -D WS_DEBUG_UTF_8 -I /builds/wireshark/wireshark/build -I /builds/wireshark/wireshark -I /builds/wireshark/wireshark/include -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/mit-krb5 -isystem /usr/include/libxml2 -isystem /builds/wireshark/wireshark/build/epan/dissectors -isystem /builds/wireshark/wireshark/epan/dissectors -isystem /builds/wireshark/wireshark/epan -fvisibility=hidden -fexcess-precision=fast -fstrict-flex-arrays=3 -fstack-clash-protection -fcf-protection=full -D _GLIBCXX_ASSERTIONS -fstack-protector-strong -fno-delete-null-pointer-checks -fno-strict-overflow -fno-strict-aliasing -fexceptions -Wno-format-truncation -Wno-format-nonliteral -fdiagnostics-color=always -Wno-pointer-sign -fmacro-prefix-map=/builds/wireshark/wireshark/= -fmacro-prefix-map=/builds/wireshark/wireshark/build/= -fmacro-prefix-map=../= -std=gnu11 -fPIC /builds/wireshark/wireshark/epan/dissectors/packet-pfcp.c -o /builds/wireshark/wireshark/sbout/2024-11-17-100340-3912-1 -Xclang -analyzer-output=html -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /builds/wireshark/wireshark/sbout/2024-11-17-100340-3912-1 -x c /builds/wireshark/wireshark/epan/dissectors/packet-pfcp.c
1/* packet-pfcp.c
2 *
3 * Routines for Packet Forwarding Control Protocol (PFCP) dissection
4 *
5 * Copyright 2017-2018, Anders Broman <[email protected]>
6 *
7 * Updates and corrections:
8 * Copyright 2017-2024, Joakim Karlsson <[email protected]>
9 *
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <[email protected]>
12 * Copyright 1998 Gerald Combs
13 *
14 * SPDX-License-Identifier: GPL-2.0-or-later
15 *
16 * Ref 3GPP TS 29.244 V18.6.0 (2024-06-26)
17 */
18#include "config.h"
19
20#include <math.h>
21
22#include <epan/packet.h>
23#include <epan/conversation.h>
24#include <epan/etypes.h>
25#include <epan/expert.h>
26#include <epan/ipproto.h>
27#include <epan/sminmpec.h>
28#include <epan/addr_resolv.h> /* Needed for BASE_ENTERPRISES */
29#include <epan/tap.h>
30#include <epan/srt_table.h>
31#include <epan/tfs.h>
32#include <epan/unit_strings.h>
33#include <proto.h>
34#include <tvbuff.h>
35#include <wsutil/array.h>
36#include "packet-e164.h"
37#include "packet-e212.h"
38#include "packet-ip.h"
39
40void proto_register_pfcp(void);
41void proto_reg_handoff_pfcp(void);
42
43static dissector_handle_t pfcp_handle;
44static dissector_handle_t gtpv2_uli_handle;
45
46#define UDP_PORT_PFCP8805 8805 /* IANA-registered */
47
48static int proto_pfcp;
49
50static int hf_pfcp_msg_type;
51static int hf_pfcp_msg_length;
52static int hf_pfcp_hdr_flags;
53static int hf_pfcp_version;
54static int hf_pfcp_fo_flag;
55static int hf_pfcp_mp_flag;
56static int hf_pfcp_s_flag;
57static int hf_pfcp_seid;
58static int hf_pfcp_seqno;
59static int hf_pfcp_mp;
60
61static int hf_pfcp2_ie;
62static int hf_pfcp2_ie_len;
63static int hf_pfcp2_enterprise_ie;
64static int hf_pfcp_enterprise_id;
65static int hf_pfcp_enterprise_data;
66
67static int hf_pfcp_response_in;
68static int hf_pfcp_response_to;
69static int hf_pfcp_response_time;
70
71static int hf_pfcp_session;
72
73static int hf_pfcp_spare_b0;
74static int hf_pfcp_spare_b1;
75static int hf_pfcp_spare_b2;
76static int hf_pfcp_spare_b3;
77static int hf_pfcp_spare_b4;
78static int hf_pfcp_spare_b5;
79static int hf_pfcp_spare_b6;
80static int hf_pfcp_spare_b7;
81static int hf_pfcp_spare_b7_b6;
82static int hf_pfcp_spare_b7_b5;
83static int hf_pfcp_spare_b7_b4;
84static int hf_pfcp_spare_b7_b3;
85static int hf_pfcp_spare_b7_b2;
86static int hf_pfcp_spare_b7_b1;
87static int hf_pfcp_spare_h0;
88static int hf_pfcp_spare_h1;
89static int hf_pfcp_spare_oct;
90static int hf_pfcp_spare;
91
92static int hf_pfcp2_cause;
93static int hf_pfcp_node_id_type;
94static int hf_pfcp_node_id_ipv4;
95static int hf_pfcp_node_id_ipv6;
96static int hf_pfcp_node_id_fqdn;
97static int hf_pfcp_recovery_time_stamp;
98static int hf_pfcp_b0_v6;
99static int hf_pfcp_b1_v4;
100static int hf_pfcp_f_seid_ipv4;
101static int hf_pfcp_f_seid_ipv6;
102static int hf_pfcp_pdr_id;
103static int hf_pfcp_precedence;
104static int hf_pfcp_source_interface;
105static int hf_pfcp_fteid_flg_spare;
106static int hf_pfcp_fteid_flg_b3_ch_id;
107static int hf_pfcp_fteid_flg_b2_ch;
108static int hf_pfcp_fteid_flg_b1_v6;
109static int hf_pfcp_fteid_flg_b0_v4;
110static int hf_pfcp_f_teid_ch_id;
111static int hf_pfcp_f_teid_teid;
112static int hf_pfcp_f_teid_ipv4;
113static int hf_pfcp_f_teid_ipv6;
114static int hf_pfcp_network_instance;
115static int hf_pfcp_pdn_type;
116static int hf_pfcp_failed_rule_id_type;
117static int hf_pfcp_time_quota_mechanism_bti_type;
118static int hf_pfcp_time_quota_mechanism_bti;
119static int hf_pfcp_multiplier_value_digits;
120static int hf_pfcp_multiplier_exponent;
121
122static int hf_pfcp_ue_ip_address_flag_b0_v6;
123static int hf_pfcp_ue_ip_address_flag_b1_v4;
124static int hf_pfcp_ue_ip_address_flag_b2_sd;
125static int hf_pfcp_ue_ip_address_flag_b3_v6d;
126static int hf_pfcp_ue_ip_address_flag_b4_chv4;
127static int hf_pfcp_ue_ip_address_flag_b5_chv6;
128static int hf_pfcp_ue_ip_address_flag_b6_v6pl;
129static int hf_pfcp_ue_ip_addr_ipv4;
130static int hf_pfcp_ue_ip_add_ipv6;
131static int hf_pfcp_ue_ip_add_ipv6_prefix_delegation_bits;
132static int hf_pfcp_ue_ip_add_ipv6_prefix_length;
133static int hf_pfcp_application_id;
134static int hf_pfcp_application_id_str;
135
136static int hf_pfcp_sdf_filter_flags_b0_fd;
137static int hf_pfcp_sdf_filter_flags_b1_ttc;
138static int hf_pfcp_sdf_filter_flags_b2_spi;
139static int hf_pfcp_sdf_filter_flags_b3_fl;
140static int hf_pfcp_sdf_filter_flags_b4_bid;
141
142static int hf_pfcp_flow_desc_len;
143static int hf_pfcp_flow_desc;
144static int hf_pfcp_traffic_class;
145static int hf_pfcp_traffic_mask;
146static int hf_pfcp_traffic_dscp;
147static int hf_pfcp_spi;
148static int hf_pfcp_flow_label_spare_bit;
149static int hf_pfcp_flow_label;
150static int hf_pfcp_sdf_filter_id;
151
152static int hf_pfcp_out_hdr_desc;
153static int hf_pfcp_gtpu_ext_hdr_del_b0_pdu_sess_cont;
154static int hf_pfcp_far_id_flg;
155static int hf_pfcp_far_id;
156static int hf_pfcp_urr_id_flg;
157static int hf_pfcp_urr_id;
158static int hf_pfcp_qer_id_flg;
159static int hf_pfcp_qer_id;
160static int hf_pfcp_predef_rules_name;
161
162
163
164static int hf_pfcp_apply_action_flags_o6_b4_mbsu;
165static int hf_pfcp_apply_action_flags_o6_b3_fssm;
166static int hf_pfcp_apply_action_flags_o6_b2_ddpn;
167static int hf_pfcp_apply_action_flags_o6_b1_bdpn;
168static int hf_pfcp_apply_action_flags_o6_b0_edrt;
169static int hf_pfcp_apply_action_flags_o5_b7_dfrt;
170static int hf_pfcp_apply_action_flags_o5_b6_ipmd;
171static int hf_pfcp_apply_action_flags_o5_b5_ipma;
172static int hf_pfcp_apply_action_flags_o5_b4_dupl;
173static int hf_pfcp_apply_action_flags_o5_b3_nocp;
174static int hf_pfcp_apply_action_flags_o5_b2_buff;
175static int hf_pfcp_apply_action_flags_o5_b1_forw;
176static int hf_pfcp_apply_action_flags_o5_b0_drop;
177
178static int hf_pfcp_bar_id;
179static int hf_pfcp_fq_csid_node_id_type;
180static int hf_pfcp_num_csid;
181static int hf_pfcp_fq_csid_node_id_ipv4;
182static int hf_pfcp_fq_csid_node_id_ipv6;
183static int hf_pfcp_fq_csid_node_id_mcc_mnc;
184static int hf_pfcp_fq_csid_node_id_int;
185static int hf_pfcp_fq_csid;
186static int hf_pfcp_fq_csid_node_type;
187static int hf_pfcp_measurement_period;
188static int hf_pfcp_duration_measurement;
189static int hf_pfcp_time_of_first_packet;
190static int hf_pfcp_time_of_last_packet;
191static int hf_pfcp_dst_interface;
192static int hf_pfcp_redirect_address_type;
193static int hf_pfcp_redirect_server_addr_len;
194static int hf_pfcp_redirect_server_address;
195static int hf_pfcp_other_redirect_server_addr_len;
196static int hf_pfcp_other_redirect_server_address;
197static int hf_pfcp_redirect_port;
198static int hf_pfcp_outer_hdr_desc_o5_b0_gtp_udp_ipv4;
199static int hf_pfcp_outer_hdr_desc_o5_b1_gtp_udp_ipv6;
200static int hf_pfcp_outer_hdr_desc_o5_b2_udp_ipv4;
201static int hf_pfcp_outer_hdr_desc_o5_b3_udp_ipv6;
202static int hf_pfcp_outer_hdr_desc_o5_b4_ipv4;
203static int hf_pfcp_outer_hdr_desc_o5_b5_ipv6;
204static int hf_pfcp_outer_hdr_desc_o5_b6_ctag;
205static int hf_pfcp_outer_hdr_desc_o5_b7_stag;
206static int hf_pfcp_outer_hdr_desc_o6_b0_n19;
207static int hf_pfcp_outer_hdr_desc_o6_b1_n6;
208static int hf_pfcp_outer_hdr_desc_o6_b2_ssm_cteid;
209static int hf_pfcp_outer_hdr_desc_o6_spare;
210static int hf_pfcp_outer_hdr_creation_teid;
211static int hf_pfcp_outer_hdr_creation_ipv4;
212static int hf_pfcp_outer_hdr_creation_ipv6;
213static int hf_pfcp_outer_hdr_creation_port;
214static int hf_pfcp_time_threshold;
215static int hf_pfcp_forwarding_policy_id_len;
216static int hf_pfcp_forwarding_policy_id;
217
218static int hf_pfcp_measurement_method_flags_b0_durat;
219static int hf_pfcp_measurement_method_flags_b1_volume;
220static int hf_pfcp_measurement_method_flags_b2_event;
221
222static int hf_pfcp_subsequent_time_threshold;
223static int hf_pfcp_inactivity_detection_time;
224static int hf_pfcp_monitoring_time;
225
226static int hf_pfcp_reporting_triggers_o5_b7_liusa;
227static int hf_pfcp_reporting_triggers_o5_b6_droth;
228static int hf_pfcp_reporting_triggers_o5_b5_stopt;
229static int hf_pfcp_reporting_triggers_o5_b4_start;
230static int hf_pfcp_reporting_triggers_o5_b3_quhti;
231static int hf_pfcp_reporting_triggers_o5_b2_timth;
232static int hf_pfcp_reporting_triggers_o5_b1_volth;
233static int hf_pfcp_reporting_triggers_o5_b0_perio;
234static int hf_pfcp_reporting_triggers_o6_b7_quvti;
235static int hf_pfcp_reporting_triggers_o6_b6_ipmjl;
236static int hf_pfcp_reporting_triggers_o6_b5_evequ;
237static int hf_pfcp_reporting_triggers_o6_b4_eveth;
238static int hf_pfcp_reporting_triggers_o6_b3_macar;
239static int hf_pfcp_reporting_triggers_o6_b2_envcl;
240static int hf_pfcp_reporting_triggers_o6_b1_timqu;
241static int hf_pfcp_reporting_triggers_o6_b0_volqu;
242static int hf_pfcp_reporting_triggers_o7_b1_upint;
243static int hf_pfcp_reporting_triggers_o7_b0_reemr;
244
245static int hf_pfcp_volume_threshold_b2_dlvol;
246static int hf_pfcp_volume_threshold_b1_ulvol;
247static int hf_pfcp_volume_threshold_b0_tovol;
248static int hf_pfcp_volume_threshold_tovol;
249static int hf_pfcp_volume_threshold_ulvol;
250static int hf_pfcp_volume_threshold_dlvol;
251
252static int hf_pfcp_volume_quota_b2_dlvol;
253static int hf_pfcp_volume_quota_b1_ulvol;
254static int hf_pfcp_volume_quota_b0_tovol;
255static int hf_pfcp_volume_quota_tovol;
256static int hf_pfcp_volume_quota_ulvol;
257static int hf_pfcp_volume_quota_dlvol;
258
259static int hf_pfcp_subseq_volume_threshold_b2_dlvol;
260static int hf_pfcp_subseq_volume_threshold_b1_ulvol;
261static int hf_pfcp_subseq_volume_threshold_b0_tovol;
262static int hf_pfcp_subseq_volume_threshold_tovol;
263static int hf_pfcp_subseq_volume_threshold_ulvol;
264static int hf_pfcp_subseq_volume_threshold_dlvol;
265
266static int hf_pfcp_time_quota;
267static int hf_pfcp_start_time;
268static int hf_pfcp_end_time;
269static int hf_pfcp_quota_holding_time;
270static int hf_pfcp_dropped_dl_traffic_threshold_b1_dlby;
271static int hf_pfcp_dropped_dl_traffic_threshold_b0_dlpa;
272static int hf_pfcp_downlink_packets;
273static int hf_pfcp_bytes_downlink_data;
274static int hf_pfcp_qer_correlation_id;
275static int hf_pfcp_gate_status_b0b1_dlgate;
276static int hf_pfcp_gate_status_b3b2_ulgate;
277static int hf_pfcp_ul_mbr;
278static int hf_pfcp_dl_mbr;
279static int hf_pfcp_ul_gbr;
280static int hf_pfcp_dl_gbr;
281
282static int hf_pfcp_report_type_b6_uisr;
283static int hf_pfcp_report_type_b5_sesr;
284static int hf_pfcp_report_type_b4_tmir;
285static int hf_pfcp_report_type_b3_upir;
286static int hf_pfcp_report_type_b2_erir;
287static int hf_pfcp_report_type_b1_usar;
288static int hf_pfcp_report_type_b0_dldr;
289
290static int hf_pfcp_offending_ie;
291static int hf_pfcp_offending_ie_value;
292
293static int hf_pfcp_up_function_features_o14_b0_mbsch;
294static int hf_pfcp_up_function_features_o13_b7_un6tu;
295static int hf_pfcp_up_function_features_o13_b6_umn6ip;
296static int hf_pfcp_up_function_features_o13_b5_upsbies;
297static int hf_pfcp_up_function_features_o13_b4_mtsdt;
298static int hf_pfcp_up_function_features_o13_b3_edbnc;
299static int hf_pfcp_up_function_features_o13_b2_qmdrm;
300static int hf_pfcp_up_function_features_o13_b1_cntl;
301static int hf_pfcp_up_function_features_o13_b0_pdusm;
302static int hf_pfcp_up_function_features_o12_b7_eml4s;
303static int hf_pfcp_up_function_features_o12_b6_detnet;
304static int hf_pfcp_up_function_features_o12_b5_qmcon;
305static int hf_pfcp_up_function_features_o12_b4_n6jedb;
306static int hf_pfcp_up_function_features_o12_b3_drtsc;
307static int hf_pfcp_up_function_features_o12_b2_tscts;
308static int hf_pfcp_up_function_features_o12_b1_dbdm;
309static int hf_pfcp_up_function_features_o12_b0_redsm;
310static int hf_pfcp_up_function_features_o11_b7_mpquic;
311static int hf_pfcp_up_function_features_o11_b6_afsfc;
312static int hf_pfcp_up_function_features_o11_b5_upidp;
313static int hf_pfcp_up_function_features_o11_b4_ratp;
314static int hf_pfcp_up_function_features_o11_b3_eppi;
315static int hf_pfcp_up_function_features_o11_b2_psuprm;
316static int hf_pfcp_up_function_features_o11_b1_mbsn4;
317static int hf_pfcp_up_function_features_o11_b0_drqos;
318static int hf_pfcp_up_function_features_o10_b7_dnsts;
319static int hf_pfcp_up_function_features_o10_b6_iprep;
320static int hf_pfcp_up_function_features_o10_b5_resps;
321static int hf_pfcp_up_function_features_o10_b4_upber;
322static int hf_pfcp_up_function_features_o10_b3_l2tp;
323static int hf_pfcp_up_function_features_o10_b2_nspoc;
324static int hf_pfcp_up_function_features_o10_b1_quasf;
325static int hf_pfcp_up_function_features_o10_b0_rttwp;
326static int hf_pfcp_up_function_features_o9_b7_rds;
327static int hf_pfcp_up_function_features_o9_b6_ddds;
328static int hf_pfcp_up_function_features_o9_b5_ethar;
329static int hf_pfcp_up_function_features_o9_b4_ciot;
330static int hf_pfcp_up_function_features_o9_b3_mt_edt;
331static int hf_pfcp_up_function_features_o9_b2_gpqm;
332static int hf_pfcp_up_function_features_o9_b1_qfqm;
333static int hf_pfcp_up_function_features_o9_b0_atsss_ll;
334static int hf_pfcp_up_function_features_o8_b7_mptcp;
335static int hf_pfcp_up_function_features_o8_b6_tsn;
336static int hf_pfcp_up_function_features_o8_b5_ip6pl;
337static int hf_pfcp_up_function_features_o8_b4_iptv;
338static int hf_pfcp_up_function_features_o8_b3_norp;
339static int hf_pfcp_up_function_features_o8_b2_vtime;
340static int hf_pfcp_up_function_features_o8_b1_rttl;
341static int hf_pfcp_up_function_features_o8_b0_mpas;
342static int hf_pfcp_up_function_features_o7_b7_gcom;
343static int hf_pfcp_up_function_features_o7_b6_bundl;
344static int hf_pfcp_up_function_features_o7_b5_mte_n4;
345static int hf_pfcp_up_function_features_o7_b4_mnop;
346static int hf_pfcp_up_function_features_o7_b3_sset;
347static int hf_pfcp_up_function_features_o7_b2_ueip;
348static int hf_pfcp_up_function_features_o7_b1_adpdp;
349static int hf_pfcp_up_function_features_o7_b0_dpdra;
350static int hf_pfcp_up_function_features_o6_b7_epfar;
351static int hf_pfcp_up_function_features_o6_b6_pfde;
352static int hf_pfcp_up_function_features_o6_b5_frrt;
353static int hf_pfcp_up_function_features_o6_b4_trace;
354static int hf_pfcp_up_function_features_o6_b3_quoac;
355static int hf_pfcp_up_function_features_o6_b2_udbc;
356static int hf_pfcp_up_function_features_o6_b1_pdiu;
357static int hf_pfcp_up_function_features_o6_b0_empu;
358static int hf_pfcp_up_function_features_o5_b7_treu;
359static int hf_pfcp_up_function_features_o5_b6_heeu;
360static int hf_pfcp_up_function_features_o5_b5_pfdm;
361static int hf_pfcp_up_function_features_o5_b4_ftup;
362static int hf_pfcp_up_function_features_o5_b3_trst;
363static int hf_pfcp_up_function_features_o5_b2_dlbd;
364static int hf_pfcp_up_function_features_o5_b1_ddnd;
365static int hf_pfcp_up_function_features_o5_b0_bucp;
366
367static int hf_pfcp_sequence_number;
368static int hf_pfcp_metric;
369static int hf_pfcp_timer_unit;
370static int hf_pfcp_timer_value;
371
372static int hf_pfcp_usage_report_trigger_o5_b7_immer;
373static int hf_pfcp_usage_report_trigger_o5_b6_droth;
374static int hf_pfcp_usage_report_trigger_o5_b5_stopt;
375static int hf_pfcp_usage_report_trigger_o5_b4_start;
376static int hf_pfcp_usage_report_trigger_o5_b3_quhti;
377static int hf_pfcp_usage_report_trigger_o5_b2_timth;
378static int hf_pfcp_usage_report_trigger_o5_b1_volth;
379static int hf_pfcp_usage_report_trigger_o5_b0_perio;
380static int hf_pfcp_usage_report_trigger_o6_b7_eveth;
381static int hf_pfcp_usage_report_trigger_o6_b6_macar;
382static int hf_pfcp_usage_report_trigger_o6_b5_envcl;
383static int hf_pfcp_usage_report_trigger_o6_b4_monit;
384static int hf_pfcp_usage_report_trigger_o6_b3_termr;
385static int hf_pfcp_usage_report_trigger_o6_b2_liusa;
386static int hf_pfcp_usage_report_trigger_o6_b1_timqu;
387static int hf_pfcp_usage_report_trigger_o6_b0_volqu;
388static int hf_pfcp_usage_report_trigger_o7_b5_upint;
389static int hf_pfcp_usage_report_trigger_o7_b4_emrre;
390static int hf_pfcp_usage_report_trigger_o7_b3_quvti;
391static int hf_pfcp_usage_report_trigger_o7_b2_ipmjl;
392static int hf_pfcp_usage_report_trigger_o7_b1_tebur;
393static int hf_pfcp_usage_report_trigger_o7_b0_evequ;
394
395static int hf_pfcp_volume_measurement_b5_dlnop;
396static int hf_pfcp_volume_measurement_b4_ulnop;
397static int hf_pfcp_volume_measurement_b3_tonop;
398static int hf_pfcp_volume_measurement_b2_dlvol;
399static int hf_pfcp_volume_measurement_b1_ulvol;
400static int hf_pfcp_volume_measurement_b0_tovol;
401static int hf_pfcp_vol_meas_tovol;
402static int hf_pfcp_vol_meas_ulvol;
403static int hf_pfcp_vol_meas_dlvol;
404static int hf_pfcp_vol_meas_tonop;
405static int hf_pfcp_vol_meas_ulnop;
406static int hf_pfcp_vol_meas_dlnop;
407
408static int hf_pfcp_cp_function_features_o6_b1_rpgur;
409static int hf_pfcp_cp_function_features_o6_b0_psucc;
410static int hf_pfcp_cp_function_features_o5_b7_uiaur;
411static int hf_pfcp_cp_function_features_o5_b6_ardr;
412static int hf_pfcp_cp_function_features_o5_b5_mpas;
413static int hf_pfcp_cp_function_features_o5_b4_bundl;
414static int hf_pfcp_cp_function_features_o5_b3_sset;
415static int hf_pfcp_cp_function_features_o5_b2_epfar;
416static int hf_pfcp_cp_function_features_o5_b1_ovrl;
417static int hf_pfcp_cp_function_features_o5_b0_load;
418
419static int hf_pfcp_usage_information_b3_ube;
420static int hf_pfcp_usage_information_b2_uae;
421static int hf_pfcp_usage_information_b1_aft;
422static int hf_pfcp_usage_information_b0_bef;
423
424static int hf_pfcp_application_instance_id;
425static int hf_pfcp_application_instance_id_str;
426static int hf_pfcp_flow_dir;
427static int hf_pfcp_packet_rate_b0_ulpr;
428static int hf_pfcp_packet_rate_b1_dlpr;
429static int hf_pfcp_packet_rate_b2_aprc;
430static int hf_pfcp_ul_time_unit;
431static int hf_pfcp_max_ul_pr;
432static int hf_pfcp_dl_time_unit;
433static int hf_pfcp_max_dl_pr;
434static int hf_pfcp_a_ul_time_unit;
435static int hf_pfcp_a_max_ul_pr;
436static int hf_pfcp_a_dl_time_unit;
437static int hf_pfcp_a_max_dl_pr;
438
439static int hf_pfcp_dl_flow_level_marking_b0_ttc;
440static int hf_pfcp_dl_flow_level_marking_b1_sci;
441
442static int hf_pfcp_sci;
443static int hf_pfcp_dl_data_notification_delay;
444static int hf_pfcp_packet_count;
445static int hf_pfcp_dl_data_service_inf_b0_ppi;
446static int hf_pfcp_dl_data_service_inf_b1_qfii;
447static int hf_pfcp_dl_data_service_inf_b2_dlpsi;
448static int hf_pfcp_paging_policy_indication;
449static int hf_pfcp_dldatapacketsize;
450
451static int hf_pfcp_pfcpsmreq_flags_b0_drobu;
452static int hf_pfcp_pfcpsmreq_flags_b1_sndem;
453static int hf_pfcp_pfcpsmreq_flags_b2_qaurr;
454static int hf_pfcp_pfcpsmreq_flags_b3_sumpc;
455static int hf_pfcp_pfcpsmreq_flags_b4_rumuc;
456static int hf_pfcp_pfcpsmreq_flags_b5_deteid;
457static int hf_pfcp_pfcpsmreq_flags_b6_hrsbom;
458
459static int hf_pfcp_pfcpsrrsp_flags_b0_drobu;
460
461static int hf_pfcp_pfd_contents_flags_b7_adnp;
462static int hf_pfcp_pfd_contents_flags_b6_aurl;
463static int hf_pfcp_pfd_contents_flags_b5_afd;
464static int hf_pfcp_pfd_contents_flags_b4_dnp;
465static int hf_pfcp_pfd_contents_flags_b3_cp;
466static int hf_pfcp_pfd_contents_flags_b2_dn;
467static int hf_pfcp_pfd_contents_flags_b1_url;
468static int hf_pfcp_pfd_contents_flags_b0_fd;
469
470static int hf_pfcp_url_len;
471static int hf_pfcp_url;
472static int hf_pfcp_dn_len;
473static int hf_pfcp_dn;
474static int hf_pfcp_cp_len;
475static int hf_pfcp_cp;
476static int hf_pfcp_dnp_len;
477static int hf_pfcp_dnp;
478static int hf_pfcp_afd_len;
479static int hf_pfcp_aurl_len;
480static int hf_pfcp_adnp_len;
481static int hf_pfcp_header_type;
482static int hf_pfcp_hf_len;
483static int hf_pfcp_hf_name;
484static int hf_pfcp_hf_val_len;
485static int hf_pfcp_hf_val;
486
487static int hf_pfcp_measurement_info_b0_mbqe;
488static int hf_pfcp_measurement_info_b1_inam;
489static int hf_pfcp_measurement_info_b2_radi;
490static int hf_pfcp_measurement_info_b3_istm;
491static int hf_pfcp_measurement_info_b4_mnop;
492static int hf_pfcp_measurement_info_b5_sspoc;
493static int hf_pfcp_measurement_info_b6_aspoc;
494static int hf_pfcp_measurement_info_b7_ciam;
495
496static int hf_pfcp_node_report_type_b0_upfr;
497static int hf_pfcp_node_report_type_b1_uprr;
498static int hf_pfcp_node_report_type_b2_ckdr;
499static int hf_pfcp_node_report_type_b3_gpqr;
500static int hf_pfcp_node_report_type_b4_purr;
501static int hf_pfcp_node_report_type_b5_vsr;
502
503static int hf_pfcp_remote_gtp_u_peer_flags_b0_v6;
504static int hf_pfcp_remote_gtp_u_peer_flags_b1_v4;
505static int hf_pfcp_remote_gtp_u_peer_flags_b2_di;
506static int hf_pfcp_remote_gtp_u_peer_flags_b3_ni;
507static int hf_pfcp_remote_gtp_u_peer_flags_b4_rts;
508static int hf_pfcp_remote_gtp_u_peer_ipv4;
509static int hf_pfcp_remote_gtp_u_peer_ipv6;
510static int hf_pfcp_remote_gtp_u_peer_length_di;
511static int hf_pfcp_remote_gtp_u_peer_length_ni;
512static int hf_pfcp_remote_gtp_u_peer_time_stamp;
513static int hf_pfcp_ur_seqn;
514
515static int hf_pfcp_oci_flags_b0_aoci;
516
517static int hf_pfcp_pfcp_assoc_rel_req_b0_sarr;
518static int hf_pfcp_pfcp_assoc_rel_req_b1_urss;
519
520static int hf_pfcp_upiri_flags_b0_v4;
521static int hf_pfcp_upiri_flags_b1_v6;
522static int hf_pfcp_upiri_flg_b6_assosi;
523static int hf_pfcp_upiri_flg_b5_assoni;
524static int hf_pfcp_upiri_flg_b2b4_teidri;
525static int hf_pfcp_upiri_teidri;
526static int hf_pfcp_upiri_teid_range;
527static int hf_pfcp_upiri_ipv4;
528static int hf_pfcp_upiri_ipv6;
529
530static int hf_pfcp_user_plane_inactivity_timer;
531
532static int hf_pfcp_subsequent_volume_quota_b2_dlvol;
533static int hf_pfcp_subsequent_volume_quota_b1_ulvol;
534static int hf_pfcp_subsequent_volume_quota_b0_tovol;
535static int hf_pfcp_subsequent_volume_quota_tovol;
536static int hf_pfcp_subsequent_volume_quota_ulvol;
537static int hf_pfcp_subsequent_volume_quota_dlvol;
538
539static int hf_pfcp_subsequent_time_quota;
540
541static int hf_pfcp_rqi_flag;
542static int hf_pfcp_qfi;
543static int hf_pfcp_query_urr_reference;
544static int hf_pfcp_additional_usage_reports_information_b14_b0_number_value;
545static int hf_pfcp_additional_usage_reports_information_b15_auri;
546static int hf_pfcp_traffic_endpoint_id;
547
548static int hf_pfcp_mac_address_flags_b3_udes;
549static int hf_pfcp_mac_address_flags_b2_usou;
550static int hf_pfcp_mac_address_flags_b1_dest;
551static int hf_pfcp_mac_address_flags_b0_sour;
552static int hf_pfcp_mac_address_upper_dest_mac_address;
553static int hf_pfcp_mac_address_upper_source_mac_address;
554static int hf_pfcp_mac_address_dest_mac_address;
555static int hf_pfcp_mac_address_source_mac_address;
556
557static int hf_pfcp_c_tag_flags_b2_vid;
558static int hf_pfcp_c_tag_flags_b1_dei;
559static int hf_pfcp_c_tag_flags_b0_pcp;
560static int hf_pfcp_c_tag_cvid;
561static int hf_pfcp_c_tag_dei_flag;
562static int hf_pfcp_c_tag_pcp_value;
563
564static int hf_pfcp_s_tag_flags_b2_vid;
565static int hf_pfcp_s_tag_flags_b1_dei;
566static int hf_pfcp_s_tag_flags_b0_pcp;
567static int hf_pfcp_s_tag_svid;
568static int hf_pfcp_s_tag_dei_flag;
569static int hf_pfcp_s_tag_pcp_value;
570
571static int hf_pfcp_ethertype;
572
573static int hf_pfcp_proxying_flags_b1_ins;
574static int hf_pfcp_proxying_flags_b0_arp;
575
576static int hf_pfcp_ethertype_filter_id;
577
578static int hf_pfcp_ethertype_filter_properties_flags_b0_bide;
579
580static int hf_pfcp_suggested_buffering_packets_count_packet_count;
581
582static int hf_pfcp_user_id_flags_b6_peif;
583static int hf_pfcp_user_id_flags_b5_gpsif;
584static int hf_pfcp_user_id_flags_b4_supif;
585static int hf_pfcp_user_id_flags_b3_naif;
586static int hf_pfcp_user_id_flags_b2_msisdnf;
587static int hf_pfcp_user_id_flags_b1_imeif;
588static int hf_pfcp_user_id_flags_b0_imsif;
589static int hf_pfcp_user_id_length_of_imsi;
590static int hf_pfcp_user_id_length_of_imei;
591static int hf_pfcp_user_id_imei;
592static int hf_pfcp_user_id_length_of_msisdn;
593static int hf_pfcp_user_id_length_of_nai;
594static int hf_pfcp_user_id_nai;
595static int hf_pfcp_user_id_length_of_supi;
596static int hf_pfcp_user_id_supi;
597static int hf_pfcp_user_id_length_of_gpsi;
598static int hf_pfcp_user_id_gpsi;
599static int hf_pfcp_user_id_length_of_pei;
600static int hf_pfcp_user_id_pei;
601
602static int hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi;
603
604static int hf_pfcp_mac_addresses_detected_number_of_mac_addresses;
605static int hf_pfcp_mac_addresses_detected_mac_address;
606static int hf_pfcp_mac_addresses_detected_length_of_ctag;
607static int hf_pfcp_mac_addresses_detected_length_of_stag;
608
609static int hf_pfcp_mac_addresses_removed_number_of_mac_addresses;
610static int hf_pfcp_mac_addresses_removed_mac_address;
611static int hf_pfcp_mac_addresses_removed_length_of_ctag;
612static int hf_pfcp_mac_addresses_removed_length_of_stag;
613
614static int hf_pfcp_ethernet_inactivity_timer;
615
616static int hf_pfcp_subsequent_event_quota;
617
618static int hf_pfcp_subsequent_event_threshold;
619
620static int hf_pfcp_trace_information_trace_id;
621static int hf_pfcp_trace_information_length_trigger_events;
622static int hf_pfcp_trace_information_trigger_events;
623static int hf_pfcp_trace_information_session_trace_depth;
624static int hf_pfcp_trace_information_length_list_interfaces;
625static int hf_pfcp_trace_information_list_interfaces;
626static int hf_pfcp_trace_information_length_ipaddress;
627static int hf_pfcp_trace_information_ipv4;
628static int hf_pfcp_trace_information_ipv6;
629
630static int hf_pfcp_framed_route;
631static int hf_pfcp_framed_routing;
632static int hf_pfcp_framed_ipv6_route;
633
634static int hf_pfcp_event_quota;
635
636static int hf_pfcp_event_threshold;
637
638static int hf_pfcp_time_stamp;
639
640static int hf_pfcp_averaging_window;
641
642static int hf_pfcp_paging_policy_indicator;
643
644static int hf_pfcp_apn_dnn;
645
646static int hf_pfcp_tgpp_interface_type;
647
648static int hf_pfcp_pfcpsrreq_flags_b0_psdbu;
649
650static int hf_pfcp_pfcpaureq_flags_b0_parps;
651
652static int hf_pfcp_activation_time;
653static int hf_pfcp_deactivation_time;
654
655static int hf_pfcp_mar_id;
656
657static int hf_pfcp_steering_functionality;
658static int hf_pfcp_steering_mode;
659
660static int hf_pfcp_weight;
661static int hf_pfcp_priority;
662
663static int hf_pfcp_ue_ip_address_pool_length;
664static int hf_pfcp_ue_ip_address_pool_identity;
665
666static int hf_pfcp_alternative_smf_ip_address_flags_ppe;
667static int hf_pfcp_alternative_smf_ip_address_ipv4;
668static int hf_pfcp_alternative_smf_ip_address_ipv6;
669
670static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b3_dcaroni;
671static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b2_prin6i;
672static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b1_prin19i;
673static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b0_priueai;
674
675static int hf_pfcp_validity_time_value;
676static int hf_pfcp_validity_time_str;
677
678static int hf_pfcp_number_of_reports;
679
680static int hf_pfcp_pfcpasrsp_flags_flags_b1_uupsi;
681static int hf_pfcp_pfcpasrsp_flags_flags_b0_psrei;
682
683static int hf_pfcp_cp_pfcp_entity_ip_address_ipv4;
684static int hf_pfcp_cp_pfcp_entity_ip_address_ipv6;
685
686static int hf_pfcp_pfcpsereq_flags_flags_b2_hrsbom;
687static int hf_pfcp_pfcpsereq_flags_flags_b1_sumpc;
688static int hf_pfcp_pfcpsereq_flags_flags_b0_resti;
689
690static int hf_pfcp_ip_multicast_address_flags_b3_any;
691static int hf_pfcp_ip_multicast_address_flags_b2_range;
692static int hf_pfcp_ip_multicast_address_start_ipv4;
693static int hf_pfcp_ip_multicast_address_start_ipv6;
694static int hf_pfcp_ip_multicast_address_end_ipv4;
695static int hf_pfcp_ip_multicast_address_end_ipv6;
696
697static int hf_pfcp_source_ip_address_flags_b2_mpl;
698static int hf_pfcp_source_ip_address_ipv4;
699static int hf_pfcp_source_ip_address_ipv6;
700static int hf_pfcp_source_ip_address_mask_prefix_lengt;
701
702static int hf_pfcp_packet_rate_status_flags_b2_apr;
703static int hf_pfcp_packet_rate_status_flags_b1_dl;
704static int hf_pfcp_packet_rate_status_flags_b0_ul;
705static int hf_pfcp_packet_rate_status_ul;
706static int hf_pfcp_packet_rate_status_dl;
707static int hf_pfcp_packet_rate_status_apr_ul;
708static int hf_pfcp_packet_rate_status_apr_dl;
709static int hf_pfcp_packet_rate_status_validity_time;
710
711static int hf_pfcp_create_bridge_router_info_flags_b1_rii;
712static int hf_pfcp_create_bridge_router_info_flags_b0_bii;
713
714static int hf_pfcp_port_number;
715
716static int hf_pfcp_nw_tt_port_number;
717
718static int hf_pfcp_5gs_user_plane_node_id_flags_b0_bid;
719static int hf_pfcp_5gs_user_plane_node_id_value;
720
721static int hf_pfcp_port_management_information;
722
723static int hf_pfcp_requested_clock_drift_control_information_flags_b1_rrcr;
724static int hf_pfcp_requested_clock_drift_control_information_flags_b0_rrto;
725
726static int hf_pfcp_time_domain_number_value;
727
728static int hf_pfcp_time_offset_threshold;
729
730static int hf_pfcp_cumulative_rate_ratio_threshold;
731
732static int hf_pfcp_time_offset_measurement;
733
734static int hf_pfcp_cumulative_rate_ratio_measurement;
735
736static int hf_pfcp_srr_id;
737
738static int hf_pfcp_requested_access_availability_control_information_flags_b0_rrca;
739
740static int hf_pfcp_availability_status;
741static int hf_pfcp_availability_type;
742
743static int hf_pfcp_mptcp_control_information_flags_b0_tci;
744
745static int hf_pfcp_atsss_ll_control_information_flags_b0_lli;
746
747static int hf_pfcp_pmf_control_information_flags_b2_pqpm;
748static int hf_pfcp_pmf_control_information_flags_b1_drtti;
749static int hf_pfcp_pmf_control_information_flags_b0_pmfi;
750static int hf_pfcp_pmf_control_information_number_of_qfi;
751
752static int hf_pfcp_mptcp_address_information_flags_b1_v6;
753static int hf_pfcp_mptcp_address_information_flags_b0_v4;
754static int hf_pfcp_mptcp_proxy_type;
755static int hf_pfcp_mptcp_proxy_port;
756static int hf_pfcp_mptcp_proxy_ip_address_ipv4;
757static int hf_pfcp_mptcp_proxy_ip_address_ipv6;
758
759static int hf_pfcp_link_specific_multipath_ip_address_flags_b3_nv6;
760static int hf_pfcp_link_specific_multipath_ip_address_flags_b2_nv4;
761static int hf_pfcp_link_specific_multipath_ip_address_flags_b1_v6;
762static int hf_pfcp_link_specific_multipath_ip_address_flags_b0_v4;
763static int hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv4;
764static int hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv6;
765static int hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv4;
766static int hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv6;
767
768static int hf_pfcp_pmf_address_information_flags_b2_mac;
769static int hf_pfcp_pmf_address_information_flags_b1_v6;
770static int hf_pfcp_pmf_address_information_flags_b0_v4;
771static int hf_pfcp_pmf_address_ipv4;
772static int hf_pfcp_pmf_address_ipv6;
773static int hf_pfcp_pmf_port_3gpp;
774static int hf_pfcp_pmf_port_non3gpp;
775static int hf_pfcp_pmf_mac_address_3gpp;
776static int hf_pfcp_pmf_mac_address_non3gpp;
777
778static int hf_pfcp_atsss_ll_information_flags_b0_lli;
779
780static int hf_pfcp_data_network_access_identifier;
781
782static int hf_pfcp_packet_delay_milliseconds;
783
784static int hf_pfcp_qos_report_trigger_flags_b2_ire;
785static int hf_pfcp_qos_report_trigger_flags_b1_thr;
786static int hf_pfcp_qos_report_trigger_flags_b0_per;
787
788static int hf_pfcp_gtp_u_path_interface_type_flags_b1_n3;
789static int hf_pfcp_gtp_u_path_interface_type_flags_b0_n9;
790
791static int hf_pfcp_requested_qos_monitoring_flags_b7_ulpr;
792static int hf_pfcp_requested_qos_monitoring_flags_b6_dlpr;
793static int hf_pfcp_requested_qos_monitoring_flags_b5_ulci;
794static int hf_pfcp_requested_qos_monitoring_flags_b4_dlci;
795static int hf_pfcp_requested_qos_monitoring_flags_b3_gtpupm;
796static int hf_pfcp_requested_qos_monitoring_flags_b2_rppd;
797static int hf_pfcp_requested_qos_monitoring_flags_b1_ulpd;
798static int hf_pfcp_requested_qos_monitoring_flags_b0_dlpd;
799
800static int hf_pfcp_reporting_frequency_flags_b2_sesrl;
801static int hf_pfcp_reporting_frequency_flags_b1_perio;
802static int hf_pfcp_reporting_frequency_flags_b0_evett;
803
804static int hf_pfcp_packet_delay_thresholds_flags_b2_rp;
805static int hf_pfcp_packet_delay_thresholds_flags_b1_ul;
806static int hf_pfcp_packet_delay_thresholds_flags_b0_dl;
807static int hf_pfcp_packet_delay_thresholds_downlink;
808static int hf_pfcp_packet_delay_thresholds_uplink;
809static int hf_pfcp_packet_delay_thresholds_roundtrip;
810
811static int hf_pfcp_minimum_wait_time_seconds;
812
813static int hf_pfcp_qos_monitoring_measurement_flags_b5_ulci;
814static int hf_pfcp_qos_monitoring_measurement_flags_b4_dlci;
815static int hf_pfcp_qos_monitoring_measurement_flags_b3_plmf;
816static int hf_pfcp_qos_monitoring_measurement_flags_b2_rppd;
817static int hf_pfcp_qos_monitoring_measurement_flags_b1_ulpd;
818static int hf_pfcp_qos_monitoring_measurement_flags_b0_dlpd;
819static int hf_pfcp_qos_monitoring_measurement_downlink_packet_delay;
820static int hf_pfcp_qos_monitoring_measurement_uplink_packet_delay;
821static int hf_pfcp_qos_monitoring_measurement_roundtrip;
822static int hf_pfcp_qos_monitoring_measurement_downlink_congestion_information;
823static int hf_pfcp_qos_monitoring_measurement_uplink_congestion_information;
824static int hf_pfcp_qos_monitoring_measurement_downlink_packet_rate;
825static int hf_pfcp_qos_monitoring_measurement_uplink_packet_rate;
826
827static int hf_pfcp_mt_edt_control_information_flags_b0_rdsi;
828
829static int hf_pfcp_dl_data_packets_size;
830
831static int hf_pfcp_qer_control_indications_o5_b0_rcsr;
832
833static int hf_pfcp_nf_instance_id;
834
835static int hf_pfcp_s_nssai_sst;
836static int hf_pfcp_s_nssai_sd;
837
838static int hf_pfcp_ip_version_flags_b1_v6;
839static int hf_pfcp_ip_version_flags_b0_v4;
840
841static int hf_pfcp_pfcpasreq_flags_flags_b0_uupsi;
842
843static int hf_pfcp_data_status_flags_b1_buff;
844static int hf_pfcp_data_status_flags_b0_drop;
845
846static int hf_pfcp_rds_configuration_information_flags_b0_rds;
847
848static int hf_pfcp_multipath_application_indication_flags_b1_mqai;
849static int hf_pfcp_multipath_application_indication_flags_b0_mtai;
850
851static int hf_pfcp_user_plane_node_management_information_container;
852
853static int hf_pfcp_number_of_ue_ip_addresses_b1_ipv6;
854static int hf_pfcp_number_of_ue_ip_addresses_b0_ipv4;
855static int hf_pfcp_number_of_ue_ip_addresses_ipv6;
856static int hf_pfcp_number_of_ue_ip_addresses_ipv4;
857
858static int hf_pfcp_validity_timer;
859
860static int hf_pfcp_rattype;
861
862static int hf_pfcp_l2tp_user_authentication_proxy_authen_type_value;
863static int hf_pfcp_l2tp_user_authentication_b3_pai;
864static int hf_pfcp_l2tp_user_authentication_b2_par;
865static int hf_pfcp_l2tp_user_authentication_b1_pac;
866static int hf_pfcp_l2tp_user_authentication_b0_pan;
867static int hf_pfcp_l2tp_user_authentication_proxy_authen_name_len;
868static int hf_pfcp_l2tp_user_authentication_proxy_authen_name;
869static int hf_pfcp_l2tp_user_authentication_proxy_authen_challenge_len;
870static int hf_pfcp_l2tp_user_authentication_proxy_authen_challenge;
871static int hf_pfcp_l2tp_user_authentication_proxy_authen_response_len;
872static int hf_pfcp_l2tp_user_authentication_proxy_authen_response;
873static int hf_pfcp_l2tp_user_authentication_proxy_authen_id;
874
875static int hf_pfcp_lns_address_ipv4;
876static int hf_pfcp_lns_address_ipv6;
877
878static int hf_pfcp_tunnel_preference_value;
879
880static int hf_pfcp_calling_number_value;
881static int hf_pfcp_called_number_value;
882
883static int hf_pfcp_l2tp_session_indications_o5_b2_rensa;
884static int hf_pfcp_l2tp_session_indications_o5_b1_redsa;
885static int hf_pfcp_l2tp_session_indications_o5_b0_reuia;
886
887static int hf_pfcp_maximum_receive_unit;
888
889static int hf_pfcp_thresholds_flags_b1_plr;
890static int hf_pfcp_thresholds_flags_b0_rtt;
891static int hf_pfcp_thresholds_rtt;
892static int hf_pfcp_thresholds_plr;
893
894static int hf_pfcp_l2tp_steering_mode_indications_o5_b1_ueai;
895static int hf_pfcp_l2tp_steering_mode_indications_o5_b0_albi;
896
897static int hf_pfcp_group_id;
898
899static int hf_pfcp_cp_ip_address_ipv4;
900static int hf_pfcp_cp_ip_address_ipv6;
901
902static int hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4;
903static int hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6;
904static int hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn;
905static int hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4;
906static int hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6;
907static int hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn;
908static int hf_pfcp_ip_address_and_port_number_replacement_flag_b6_umn6rs;
909static int hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4;
910static int hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6;
911static int hf_pfcp_ip_address_and_port_number_replacement_destination_port;
912static int hf_pfcp_ip_address_and_port_number_replacement_source_ipv4;
913static int hf_pfcp_ip_address_and_port_number_replacement_source_ipv6;
914static int hf_pfcp_ip_address_and_port_number_replacement_source_port;
915
916static int hf_pfcp_dns_query_filter_pattern_len;
917static int hf_pfcp_dns_query_filter_pattern;
918
919static int hf_pfcp_event_notification_uri;
920
921static int hf_pfcp_notification_correlation_id;
922
923static int hf_pfcp_reporting_flags_o5_b0_dupl;
924
925static int hf_pfcp_mbs_session_identifier_flag_b0_tmgi;
926static int hf_pfcp_mbs_session_identifier_flag_b1_ssmi;
927static int hf_pfcp_mbs_session_identifier_flag_b2_nidi;
928static int hf_pfcp_mbs_session_identifier_tmgi;
929static int hf_pfcp_mbs_session_identifier_nidi;
930static int hf_pfcp_mbs_session_identifier_source_address_type;
931static int hf_pfcp_mbs_session_identifier_source_address_length;
932static int hf_pfcp_mbs_session_identifier_source_address_ipv4;
933static int hf_pfcp_mbs_session_identifier_source_address_ipv6;
934
935static int hf_pfcp_multicast_transport_information_endpoint_identifier;
936static int hf_pfcp_multicast_transport_information_distribution_address_type;
937static int hf_pfcp_multicast_transport_information_distribution_address_length;
938static int hf_pfcp_multicast_transport_information_distribution_address_ipv4;
939static int hf_pfcp_multicast_transport_information_distribution_address_ipv6;
940static int hf_pfcp_multicast_transport_information_source_address_type;
941static int hf_pfcp_multicast_transport_information_source_address_length;
942static int hf_pfcp_multicast_transport_information_source_address_ipv4;
943static int hf_pfcp_multicast_transport_information_source_address_ipv6;
944
945static int hf_pfcp_mbsn4mbreq_flags_o5_b2_mbs_resti;
946static int hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm;
947static int hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm;
948
949static int hf_pfcp_local_ingress_tunnel_flags_b2_ch;
950static int hf_pfcp_local_ingress_tunnel_flags_b1_v6;
951static int hf_pfcp_local_ingress_tunnel_flags_b0_v4;
952static int hf_pfcp_local_ingress_tunnel_udp_port;
953static int hf_pfcp_local_ingress_tunnel_ipv4;
954static int hf_pfcp_local_ingress_tunnel_ipv6;
955
956static int hf_pfcp_mbs_unicast_parameters_id;
957
958static int hf_pfcp_mbsn4resp_flags_o5_b2_n19dtr;
959static int hf_pfcp_mbsn4resp_flags_o5_b1_jmti;
960static int hf_pfcp_mbsn4resp_flags_o5_b0_nn19dt;
961
962static int hf_pfcp_tunnel_password_value;
963
964static int hf_pfcp_area_session_id_value;
965
966static int hf_pfcp_dscp_to_ppi_mapping_info_ppi_value;
967static int hf_pfcp_dscp_to_ppi_mapping_info_dscp_value;
968
969static int hf_pfcp_pfcpsdrsp_flags_b0_puru;
970
971static int hf_pfcp_qer_indications_flags_b3_pdusm;
972static int hf_pfcp_qer_indications_flags_b2_eml4s;
973static int hf_pfcp_qer_indications_flags_b1_edbmi;
974static int hf_pfcp_qer_indications_flags_b0_iqfis;
975
976static int hf_pfcp_configured_time_domain_flags_b0_ctdi;
977
978static int hf_pfcp_metadata;
979static int hf_pfcp_metadata_binary_metadata;
980
981static int hf_pfcp_traffic_parameter_threshold_flags_b0_dl;
982static int hf_pfcp_traffic_parameter_threshold_downlink_n6_jitter_threshold;
983
984static int hf_pfcp_dl_periodicity_value;
985
986static int hf_pfcp_n6_jitter_measurement_flags_b0_dl;
987static int hf_pfcp_n6_jitter_measurement_dl_periodicity;
988static int hf_pfcp_n6_jitter_measurement_lower_dl_jitter_measurement;
989static int hf_pfcp_n6_jitter_measurement_higher_dl_jitter_measurement;
990
991
992static int hf_pfcp_traffic_parameter_measurement_indication_flags_b2_n6jmi;
993static int hf_pfcp_traffic_parameter_measurement_indication_flags_b1_dlpmi;
994static int hf_pfcp_traffic_parameter_measurement_indication_flags_b0_ulpmi;
995
996static int hf_pfcp_ul_periodicity_value;
997
998static int hf_pfcp_mpquic_control_information_flags_b0_cupd;
999
1000static int hf_pfcp_mpquic_address_information_flags_b1_v6;
1001static int hf_pfcp_mpquic_address_information_flags_b0_v4;
1002static int hf_pfcp_mpquic_address_information_type;
1003static int hf_pfcp_mpquic_address_information_port;
1004static int hf_pfcp_mpquic_address_information_address_ipv4;
1005static int hf_pfcp_mpquic_address_information_address_ipv6;
1006
1007static int hf_pfcp_transport_mode_value;
1008
1009static int hf_pfcp_protocol_description_flags_b2_srtp;
1010static int hf_pfcp_protocol_description_flags_b1_rtp;
1011static int hf_pfcp_protocol_description_flags_b0_h264;
1012
1013static int hf_pfcp_reporting_suggestion_info_reporting_urgency_value;
1014static int hf_pfcp_reporting_suggestion_info_reporting_time_info;
1015
1016static int hf_pfcp_tl_container;
1017
1018static int hf_pfcp_measurement_indication_flags_b0_dqfi;
1019
1020static int hf_pfcp_hplmn_s_nssai_sst;
1021static int hf_pfcp_hplmn_s_nssai_sd;
1022
1023static int hf_pfcp_media_transport_protocol;
1024
1025static int hf_pfcp_rtp_header_extension_type;
1026
1027static int hf_pfcp_rtp_header_extension_id;
1028
1029static int hf_pfcp_rtp_payload_type;
1030
1031static int hf_pfcp_rtp_payload_format;
1032
1033static int hf_pfcp_extended_dl_buffering_notification_policy_flags_b0_edbn;
1034
1035static int hf_pfcp_mt_sdt_control_information_flags_b0_rdsi;
1036
1037static int hf_pfcp_reporting_thresholds_flags_b3_uldr;
1038static int hf_pfcp_reporting_thresholds_flags_b2_dldr;
1039static int hf_pfcp_reporting_thresholds_flags_b1_ulci;
1040static int hf_pfcp_reporting_thresholds_flags_b0_dlci;
1041static int hf_pfcp_reporting_thresholds_dl_congestion_information_threshold;
1042static int hf_pfcp_reporting_thresholds_ul_congestion_information_threshold;
1043static int hf_pfcp_reporting_thresholds_dl_data_rate_threshold;
1044static int hf_pfcp_reporting_thresholds_ul_data_rate_threshold;
1045
1046static int hf_pfcp_rtp_header_extension_additional_information_flags_b1_pssai;
1047static int hf_pfcp_rtp_header_extension_additional_information_flags_b0_fi;
1048static int hf_pfcp_rtp_header_extension_additional_information_pssa;
1049static int hf_pfcp_rtp_header_extension_additional_information_format;
1050
1051static int hf_pfcp_mapped_n6_ip_address_b0_chv4;
1052static int hf_pfcp_mapped_n6_ip_address_b1_v4;
1053static int hf_pfcp_mapped_n6_ip_address_ipv4;
1054
1055static int hf_pfcp_n6_routing_information_flag_b0_sipv4;
1056static int hf_pfcp_n6_routing_information_flag_b1_sipv6;
1057static int hf_pfcp_n6_routing_information_flag_b2_spo;
1058static int hf_pfcp_n6_routing_information_flag_b3_dipv4;
1059static int hf_pfcp_n6_routing_information_flag_b4_dipv6;
1060static int hf_pfcp_n6_routing_information_flag_b5_dpo;
1061static int hf_pfcp_n6_routing_information_source_ipv4;
1062static int hf_pfcp_n6_routing_information_source_ipv6;
1063static int hf_pfcp_n6_routing_information_source_port;
1064static int hf_pfcp_n6_routing_information_destination_ipv4;
1065static int hf_pfcp_n6_routing_information_destination_ipv6;
1066static int hf_pfcp_n6_routing_information_destination_port;
1067
1068/* Enterprise IEs */
1069/* BBF */
1070static int hf_pfcp_bbf_up_function_features_o7_b7_nat_up;
1071static int hf_pfcp_bbf_up_function_features_o7_b6_nat_cp;
1072static int hf_pfcp_bbf_up_function_features_o7_b5_iptv;
1073static int hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload;
1074static int hf_pfcp_bbf_up_function_features_o7_b3_lns;
1075static int hf_pfcp_bbf_up_function_features_o7_b2_lac;
1076static int hf_pfcp_bbf_up_function_features_o7_b1_ipoe;
1077static int hf_pfcp_bbf_up_function_features_o7_b0_pppoe;
1078
1079static int hf_pfcp_bbf_logical_port_id;
1080static int hf_pfcp_bbf_logical_port_id_str;
1081
1082
1083static int hf_pfcp_bbf_outer_hdr_creation_desc_spare;
1084static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b4_ppp;
1085static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b3_l2tp;
1086static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b2_traffic_endpoint;
1087static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b1_crp_nsh;
1088static int hf_pfcp_bbf_outer_hdr_creation_tunnel_id;
1089static int hf_pfcp_bbf_outer_hdr_creation_session_id;
1090
1091static int hf_pfcp_bbf_out_hdr_desc;
1092
1093static int hf_pfcp_bbf_pppoe_session_id;
1094
1095static int hf_pfcp_bbf_ppp_protocol_flags;
1096static int hf_pfcp_bbf_ppp_protocol_b2_control;
1097static int hf_pfcp_bbf_ppp_protocol_b1_data;
1098static int hf_pfcp_bbf_ppp_protocol_b0_specific;
1099static int hf_pfcp_bbf_ppp_protocol;
1100
1101static int hf_pfcp_bbf_verification_timer_interval;
1102static int hf_pfcp_bbf_verification_timer_count;
1103
1104static int hf_pfcp_bbf_ppp_lcp_magic_number_tx;
1105static int hf_pfcp_bbf_ppp_lcp_magic_number_rx;
1106
1107static int hf_pfcp_bbf_mtu;
1108
1109static int hf_pfcp_bbf_l2tp_endp_flags;
1110static int hf_pfcp_bbf_l2tp_endp_flags_b2_ch;
1111static int hf_pfcp_bbf_l2tp_endp_flags_b1_v6;
1112static int hf_pfcp_bbf_l2tp_endp_flags_b0_v4;
1113static int hf_pfcp_bbf_l2tp_endp_id_tunnel_id;
1114static int hf_pfcp_bbf_l2tp_endp_id_ipv4;
1115static int hf_pfcp_bbf_l2tp_endp_id_ipv6;
1116
1117static int hf_pfcp_bbf_l2tp_session_id;
1118
1119static int hf_pfcp_bbf_l2tp_type_flags;
1120static int hf_pfcp_bbf_l2tp_type_flags_b0_t;
1121
1122static int hf_pfcp_bbf_multicast_flags_o7_b1_routeralertoff;
1123static int hf_pfcp_bbf_multicast_flags_o7_b0_fastleave;
1124
1125static int hf_pfcp_bbf_multicast_query_param_robustness;
1126static int hf_pfcp_bbf_multicast_query_param_query_interval;
1127static int hf_pfcp_bbf_multicast_query_param_query_response_interval;
1128static int hf_pfcp_bbf_multicast_query_param_group_query_interval;
1129
1130static int hf_pfcp_bbf_multicast_group_limit_max_joins;
1131
1132static int hf_pfcp_bbf_apply_action_flags_b0_nat;
1133
1134static int hf_pfcp_bbf_nat_external_port_range_start;
1135static int hf_pfcp_bbf_nat_external_port_range_end;
1136
1137static int hf_pfcp_bbf_nat_port_forward;
1138static int hf_pfcp_bbf_nat_port_forward_inside_ip;
1139static int hf_pfcp_bbf_nat_port_forward_inside_port;
1140static int hf_pfcp_bbf_nat_port_forward_outside_port;
1141static int hf_pfcp_bbf_nat_port_forward_protocol;
1142
1143static int hf_pfcp_bbf_reporting_trigger;
1144
1145static int hf_pfcp_bbf_dynamic_nat_block_port_range_start_port;
1146static int hf_pfcp_bbf_dynamic_nat_block_port_range_end_port;
1147
1148static int hf_pfcp_bbf_event_time_stamp;
1149
1150static int hf_pfcp_bbf_direction = -1;
1151static int hf_pfcp_bbf_family = -1;
1152static int hf_pfcp_bbf_sgrp_identifier = -1;
1153static int hf_pfcp_bbf_sgrp_state = -1;
1154static int hf_pfcp_bbf_sgrp_flags = -1;
1155static int hf_pfcp_bbf_sgrp_flags_b0_ras = -1;
1156static int hf_pfcp_bbf_sgrp_flags_b1_psa = -1;
1157static int hf_pfcp_bbf_operational_condition = -1;
1158static int hf_pfcp_bbf_ipv4_prefix = -1;
1159static int hf_pfcp_bbf_ipv4_prefix_length = -1;
1160static int hf_pfcp_bbf_ipv6_prefix = -1;
1161static int hf_pfcp_bbf_ipv6_prefix_length = -1;
1162static int hf_pfcp_bbf_prefix_tag_usage = -1;
1163static int hf_pfcp_bbf_prefix_tag = -1;
1164static int hf_pfcp_bbf_error_code = -1;
1165static int hf_pfcp_bbf_error_message = -1;
1166static int hf_pfcp_bbf_maximum_acl_chain_length = -1;
1167static int hf_pfcp_bbf_forwarding_capability = -1;
1168static int hf_pfcp_bbf_connectivity_status = -1;
1169static int hf_pfcp_bbf_vendor_specific_node_report_type = -1;
1170static int hf_pfcp_bbf_vendor_specific_node_report_type_b0_lpr = -1;
1171static int hf_pfcp_bbf_vendor_specific_node_report_type_b1_sgr = -1;
1172static int hf_pfcp_bbf_vendor_specific_node_report_type_b2_nir = -1;
1173static int hf_pfcp_bbf_ctag_range_start = -1;
1174static int hf_pfcp_bbf_ctag_range_end = -1;
1175static int hf_pfcp_bbf_stag_range_start = -1;
1176static int hf_pfcp_bbf_stag_range_end = -1;
1177
1178/* Travelping */
1179static int hf_pfcp_enterprise_travelping_packet_measurement;
1180static int hf_pfcp_enterprise_travelping_packet_measurement_b2_dlnop;
1181static int hf_pfcp_enterprise_travelping_packet_measurement_b1_ulnop;
1182static int hf_pfcp_enterprise_travelping_packet_measurement_b0_tonop;
1183static int hf_pfcp_travelping_pkt_meas_tonop;
1184static int hf_pfcp_travelping_pkt_meas_ulnop;
1185static int hf_pfcp_travelping_pkt_meas_dlnop;
1186
1187static int hf_pfcp_travelping_build_id;
1188static int hf_pfcp_travelping_build_id_str;
1189static int hf_pfcp_travelping_now;
1190static int hf_pfcp_travelping_error_message;
1191static int hf_pfcp_travelping_error_message_str;
1192static int hf_pfcp_travelping_file_name;
1193static int hf_pfcp_travelping_file_name_str;
1194static int hf_pfcp_travelping_line_number;
1195static int hf_pfcp_travelping_ipfix_policy;
1196static int hf_pfcp_travelping_ipfix_policy_str;
1197static int hf_pfcp_travelping_trace_parent;
1198static int hf_pfcp_travelping_trace_parent_str;
1199static int hf_pfcp_travelping_trace_state;
1200static int hf_pfcp_travelping_trace_state_str;
1201
1202/* Nokia */
1203
1204static int hf_pfcp_nokia_sap_template;
1205static int hf_pfcp_nokia_group_iface_template;
1206static int hf_pfcp_nokia_session_state_id;
1207static int hf_pfcp_nokia_detailed_stats_key;
1208static int hf_pfcp_nokia_detailed_stats_key_direction;
1209static int hf_pfcp_nokia_detailed_stats_key_object_id;
1210static int hf_pfcp_nokia_detailed_stats_key_stat_mode;
1211static int hf_pfcp_nokia_detailed_stats_key_type;
1212static int hf_pfcp_nokia_detailed_stats_bitmap_item;
1213static int hf_pfcp_nokia_detailed_stats_octets;
1214static int hf_pfcp_nokia_detailed_error;
1215static int hf_pfcp_nokia_qos_override;
1216static int hf_pfcp_nokia_measurement_info;
1217static int hf_pfcp_nokia_measurement_info_b0_det;
1218static int hf_pfcp_nokia_pfcpsmreq_flags;
1219static int hf_pfcp_nokia_pfcpsmreq_flags_b0_abs;
1220static int hf_pfcp_nokia_pfcpsmreq_flags_b1_audit;
1221static int hf_pfcp_nokia_up_function_features_bulk_audit;
1222static int hf_pfcp_nokia_up_function_features_sssg;
1223static int hf_pfcp_nokia_filter_override_type;
1224static int hf_pfcp_nokia_filter_override_name;
1225static int hf_pfcp_nokia_intermediate_destination;
1226static int hf_pfcp_nokia_nat_isa_members;
1227static int hf_pfcp_nokia_pfcphb_flags;
1228static int hf_pfcp_nokia_pfcphb_flags_b0_aud_r;
1229static int hf_pfcp_nokia_pfcphb_flags_b1_aud_s;
1230static int hf_pfcp_nokia_pfcphb_flags_b2_aud_e;
1231static int hf_pfcp_nokia_l2tp_lcp_request;
1232static int hf_pfcp_nokia_l2tp_auth_type;
1233static int hf_pfcp_nokia_l2tp_auth_name;
1234static int hf_pfcp_nokia_l2tp_auth_id;
1235static int hf_pfcp_nokia_l2tp_auth_challenge;
1236static int hf_pfcp_nokia_l2tp_auth_response;
1237static int hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address;
1238static int hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address;
1239static int hf_pfcp_nokia_l2tp_client_auth_id;
1240static int hf_pfcp_nokia_l2tp_server_auth_id;
1241static int hf_pfcp_nokia_l2tp_password;
1242static int hf_pfcp_nokia_l2tp_assignment_id;
1243static int hf_pfcp_nokia_l2tp_private_group_id;
1244static int hf_pfcp_nokia_l2tp_tunnel_params_flags;
1245static int hf_pfcp_nokia_l2tp_params_flags_b31_hello_interval;
1246static int hf_pfcp_nokia_l2tp_params_flags_b30_idle_timeout;
1247static int hf_pfcp_nokia_l2tp_params_flags_b29_session_limit;
1248static int hf_pfcp_nokia_l2tp_params_flags_b28_preference;
1249static int hf_pfcp_nokia_l2tp_params_flags_b27_df_bit;
1250static int hf_pfcp_nokia_l2tp_params_flags_b26_challenge;
1251static int hf_pfcp_nokia_l2tp_params_flags_b25_avp_hiding;
1252static int hf_pfcp_nokia_l2tp_params_flags_b24_algorithm;
1253static int hf_pfcp_nokia_l2tp_params_flags_b19_rx_window_size;
1254static int hf_pfcp_nokia_l2tp_params_flags_b18_max_retries_not_estab;
1255static int hf_pfcp_nokia_l2tp_params_flags_b17_max_retries_estab;
1256static int hf_pfcp_nokia_l2tp_params_flags_b16_destruct_timeout;
1257static int hf_pfcp_nokia_l2tp_params_hello_interval;
1258static int hf_pfcp_nokia_l2tp_params_idle_timeout;
1259static int hf_pfcp_nokia_l2tp_params_session_limit;
1260static int hf_pfcp_nokia_l2tp_params_preference;
1261static int hf_pfcp_nokia_l2tp_params_df_bit;
1262static int hf_pfcp_nokia_l2tp_params_challenge;
1263static int hf_pfcp_nokia_l2tp_params_avp_hiding;
1264static int hf_pfcp_nokia_l2tp_params_algorithm;
1265static int hf_pfcp_nokia_l2tp_params_rx_window_size;
1266static int hf_pfcp_nokia_l2tp_params_max_retries_not_estab;
1267static int hf_pfcp_nokia_l2tp_params_max_retries_estab;
1268static int hf_pfcp_nokia_l2tp_params_destruct_timeout;
1269static int hf_pfcp_nokia_l2tp_local_tunnel_id;
1270static int hf_pfcp_nokia_l2tp_remote_tunnel_id;
1271static int hf_pfcp_nokia_l2tp_local_session_id;
1272static int hf_pfcp_nokia_l2tp_remote_session_id;
1273static int hf_pfcp_nokia_l2tp_call_serial_num;
1274static int hf_pfcp_nokia_snat_inside_ipv4_address;
1275static int hf_pfcp_nokia_access_line_circuit_id;
1276static int hf_pfcp_nokia_access_line_remote_id;
1277static int hf_pfcp_nokia_access_line_params_flags;
1278static int hf_pfcp_nokia_access_line_params_flags_b24_act_up;
1279static int hf_pfcp_nokia_access_line_params_flags_b25_act_down;
1280static int hf_pfcp_nokia_access_line_params_flags_b26_min_up;
1281static int hf_pfcp_nokia_access_line_params_flags_b27_min_down;
1282static int hf_pfcp_nokia_access_line_params_flags_b28_att_up;
1283static int hf_pfcp_nokia_access_line_params_flags_b29_att_down;
1284static int hf_pfcp_nokia_access_line_params_flags_b30_max_up;
1285static int hf_pfcp_nokia_access_line_params_flags_b31_max_down;
1286static int hf_pfcp_nokia_access_line_params_flags_b16_min_up_lp;
1287static int hf_pfcp_nokia_access_line_params_flags_b17_min_down_lp;
1288static int hf_pfcp_nokia_access_line_params_flags_b18_max_inter_delay_up;
1289static int hf_pfcp_nokia_access_line_params_flags_b19_act_inter_delay_up;
1290static int hf_pfcp_nokia_access_line_params_flags_b20_max_inter_delay_down;
1291static int hf_pfcp_nokia_access_line_params_flags_b21_act_inter_delay_down;
1292static int hf_pfcp_nokia_access_line_params_flags_b22_access_loop_encap;
1293static int hf_pfcp_nokia_access_line_params_flags_b23_iw_session;
1294static int hf_pfcp_nokia_access_line_params_act_up;
1295static int hf_pfcp_nokia_access_line_params_act_down;
1296static int hf_pfcp_nokia_access_line_params_min_up;
1297static int hf_pfcp_nokia_access_line_params_min_down;
1298static int hf_pfcp_nokia_access_line_params_att_up;
1299static int hf_pfcp_nokia_access_line_params_att_down;
1300static int hf_pfcp_nokia_access_line_params_max_up;
1301static int hf_pfcp_nokia_access_line_params_max_down;
1302static int hf_pfcp_nokia_access_line_params_min_up_lp;
1303static int hf_pfcp_nokia_access_line_params_min_down_lp;
1304static int hf_pfcp_nokia_access_line_params_max_inter_delay_up;
1305static int hf_pfcp_nokia_access_line_params_act_inter_delay_up;
1306static int hf_pfcp_nokia_access_line_params_max_inter_delay_down;
1307static int hf_pfcp_nokia_access_line_params_act_inter_delay_down;
1308static int hf_pfcp_nokia_access_line_params_access_loop_encap;
1309static int hf_pfcp_nokia_acct_session_id;
1310static int hf_pfcp_nokia_fsg_template_name;
1311static int hf_pfcp_nokia_up_profile;
1312static int hf_pfcp_nokia_default_qos_id;
1313static int hf_pfcp_nokia_serving_node_id_flags;
1314static int hf_pfcp_nokia_serving_node_id_flg_b2_uuid;
1315static int hf_pfcp_nokia_serving_node_id_flg_b1_v6;
1316static int hf_pfcp_nokia_serving_node_id_flg_b0_v4;
1317static int hf_pfcp_nokia_serving_node_id_ipv4;
1318static int hf_pfcp_nokia_serving_node_id_ipv6;
1319static int hf_pfcp_nokia_serving_node_id_uuid;
1320static int hf_pfcp_nokia_pcc_rule_name;
1321static int hf_pfcp_nokia_calltrace_profile;
1322static int hf_pfcp_nokia_custom_charging_group;
1323
1324
1325static int ett_pfcp;
1326static int ett_pfcp_flags;
1327static int ett_pfcp_ie;
1328static int ett_pfcp_unknown_enterprise_ie;
1329static int ett_pfcp_grouped_ie;
1330static int ett_pfcp_reporting_triggers;
1331static int ett_pfcp_up_function_features;
1332static int ett_pfcp_report_trigger;
1333static int ett_pfcp_flow_desc;
1334static int ett_pfcp_tos;
1335static int ett_pfcp_spi;
1336static int ett_pfcp_flow_label;
1337static int ett_pfcp_sdf_filter_id;
1338static int ett_pfcp_adf;
1339static int ett_pfcp_aurl;
1340static int ett_pfcp_adnp;
1341
1342static int ett_pfcp_enterprise_travelping_packet_measurement;
1343static int ett_pfcp_enterprise_travelping_error_report;
1344static int ett_pfcp_enterprise_travelping_created_nat_binding;
1345static int ett_pfcp_enterprise_travelping_trace_info;
1346
1347static int ett_pfcp_bbf_ppp_protocol_flags;
1348static int ett_pfcp_bbf_l2tp_endp_flags;
1349static int ett_pfcp_bbf_l2tp_type_flags;
1350static int ett_pfcp_bbf_ppp_lcp_connectivity;
1351static int ett_pfcp_bbf_l2tp_tunnel;
1352static int ett_pfcp_bbf_nat_port_forward_list;
1353static int ett_pfcp_bbf_sgrp_flags;
1354static int ett_pfcp_bbf_vendor_specific_node_report_type;
1355
1356static int ett_pfcp_nokia_detailed_stats_key;
1357static int ett_pfcp_nokia_detailed_stats_bitmap;
1358static int ett_pfcp_nokia_measurement_info;
1359static int ett_pfcp_nokia_pfcpsmreq_flags;
1360static int ett_pfcp_nokia_pfcphb_flags;
1361static int ett_pfcp_nokia_l2tp_tunnel_params_flags;
1362static int ett_pfcp_nokia_access_line_params_flags;
1363static int ett_pfcp_nokia_serving_node_id_flags;
1364
1365static expert_field ei_pfcp_ie_reserved;
1366static expert_field ei_pfcp_ie_data_not_decoded;
1367static expert_field ei_pfcp_ie_not_decoded_null;
1368static expert_field ei_pfcp_ie_not_decoded_too_large;
1369static expert_field ei_pfcp_ie_encoding_error;
1370
1371static int pfcp_tap = -1;
1372
1373static bool_Bool g_pfcp_session;
1374static unsigned pref_pair_matching_max_interval_ms; /* Default: disable */
1375
1376static uint32_t pfcp_session_count;
1377
1378typedef struct pfcp_rule_ids {
1379 uint32_t far;
1380 uint32_t pdr;
1381 uint32_t qer;
1382 uint32_t urr;
1383 uint32_t bar;
1384 uint32_t mar;
1385 uint32_t srr;
1386} pfcp_rule_ids_t;
1387
1388typedef struct pfcp_session_args {
1389 wmem_list_t *seid_list;
1390 wmem_list_t *ip_list;
1391 uint64_t last_seid;
1392 address last_ip;
1393 uint8_t last_cause;
1394 pfcp_rule_ids_t last_rule_ids;
1395} pfcp_session_args_t;
1396
1397typedef struct _pfcp_hdr {
1398 uint8_t message; /* Message type */
1399 uint16_t length; /* Length of header */
1400 uint64_t seid; /* Session End-point ID */
1401} pfcp_hdr_t;
1402
1403/* Relation between frame -> session */
1404GHashTable* pfcp_session_table;
1405/* Relation between <seid,ip> -> frame */
1406wmem_map_t* pfcp_frame_map;
1407
1408
1409typedef struct pfcp_info {
1410 uint64_t seid;
1411 address addr;
1412} pfcp_info_t;
1413
1414typedef struct _pfcp_sub_dis_t {
1415 uint8_t message_type;
1416 pfcp_session_args_t *args;
1417} pfcp_sub_dis_t;
1418
1419static dissector_table_t pfcp_enterprise_ies_dissector_table;
1420
1421static void
1422dissect_pfcp_ies_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int offset, uint16_t length, uint8_t message_type, pfcp_session_args_t *args);
1423
1424static const true_false_string pfcp_id_predef_dynamic_tfs = {
1425 "Predefined by UP",
1426 "Dynamic by CP",
1427};
1428
1429#define PFCP_MSG_RESERVED_00 0
1430
1431#define PFCP_MSG_HEARTBEAT_REQUEST1 1
1432#define PFCP_MSG_HEARTBEAT_RESPONSE2 2
1433#define PFCP_MSG_PFD_MANAGEMENT_REQUEST3 3
1434#define PFCP_MSG_PFD_MANAGEMENT_RESPONSE4 4
1435#define PFCP_MSG_ASSOCIATION_SETUP_REQUEST5 5
1436#define PFCP_MSG_ASSOCIATION_SETUP_RESPONSE6 6
1437#define PFCP_MSG_ASSOCIATION_UPDATE_REQUEST7 7
1438#define PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE8 8
1439#define PFCP_MSG_ASSOCIATION_RELEASE_REQUEST9 9
1440#define PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE10 10
1441#define PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE11 11
1442#define PFCP_MSG_NODE_REPORT_REQEUST12 12
1443#define PFCP_MSG_NODE_REPORT_RERESPONSE13 13
1444#define PFCP_MSG_SESSION_SET_DELETION_REQUEST14 14
1445#define PFCP_MSG_SESSION_SET_DELETION_RESPONSE15 15
1446#define PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST16 16
1447#define PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE17 17
1448#define PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST50 50
1449#define PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE51 51
1450#define PFCP_MSG_SESSION_MODIFICATION_REQUEST52 52
1451#define PFCP_MSG_SESSION_MODIFICATION_RESPONSE53 53
1452#define PFCP_MSG_SESSION_DELETION_REQUEST54 54
1453#define PFCP_MSG_SESSION_DELETION_RESPONSE55 55
1454#define PFCP_MSG_SESSION_REPORT_REQUEST56 56
1455#define PFCP_MSG_SESSION_REPORT_RESPONSE57 57
1456
1457static const value_string pfcp_message_type[] = {
1458 {PFCP_MSG_RESERVED_00, "Reserved"},
1459 /* PFCP Node related messages */
1460
1461 { PFCP_MSG_HEARTBEAT_REQUEST1, "PFCP Heartbeat Request"},
1462 { PFCP_MSG_HEARTBEAT_RESPONSE2, "PFCP Heartbeat Response"},
1463 { PFCP_MSG_PFD_MANAGEMENT_REQUEST3, "PFCP PFD Management Request"},
1464 { PFCP_MSG_PFD_MANAGEMENT_RESPONSE4, "PFCP PFD Management Response"},
1465 { PFCP_MSG_ASSOCIATION_SETUP_REQUEST5, "PFCP Association Setup Request"},
1466 { PFCP_MSG_ASSOCIATION_SETUP_RESPONSE6, "PFCP Association Setup Response"},
1467 { PFCP_MSG_ASSOCIATION_UPDATE_REQUEST7, "PFCP Association Update Request"},
1468 { PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE8, "PFCP Association Update Response"},
1469 { PFCP_MSG_ASSOCIATION_RELEASE_REQUEST9, "PFCP Association Release Request"},
1470 { PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE10, "PFCP Association Release Response"},
1471 { PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE11, "PFCP Version Not Supported Response"},
1472 { PFCP_MSG_NODE_REPORT_REQEUST12, "PFCP Node Report Request"},
1473 { PFCP_MSG_NODE_REPORT_RERESPONSE13, "PFCP Node Report Response"},
1474 { PFCP_MSG_SESSION_SET_DELETION_REQUEST14, "PFCP Session Set Deletion Request"},
1475 { PFCP_MSG_SESSION_SET_DELETION_RESPONSE15, "PFCP Session Set Deletion Response"},
1476 { PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST16, "PFCP Session Set Modification Request"},
1477 { PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE17, "PFCP Session Set Modification Response"},
1478 //18 to 49 For future use
1479 //PFCP Session related messages
1480 { PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST50, "PFCP Session Establishment Request"},
1481 { PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE51, "PFCP Session Establishment Response"},
1482 { PFCP_MSG_SESSION_MODIFICATION_REQUEST52, "PFCP Session Modification Request"},
1483 { PFCP_MSG_SESSION_MODIFICATION_RESPONSE53, "PFCP Session Modification Response"},
1484 { PFCP_MSG_SESSION_DELETION_REQUEST54, "PFCP Session Deletion Request"},
1485 { PFCP_MSG_SESSION_DELETION_RESPONSE55, "PFCP Session Deletion Response"},
1486 { PFCP_MSG_SESSION_REPORT_REQUEST56, "PFCP Session Report Request"},
1487 { PFCP_MSG_SESSION_REPORT_RESPONSE57, "PFCP Session Report Response"},
1488 //58 to 99 For future use
1489 //Other messages
1490 //100 to 255 For future use
1491 {0, NULL((void*)0)}
1492};
1493static value_string_ext pfcp_message_type_ext = VALUE_STRING_EXT_INIT(pfcp_message_type){ _try_val_to_str_ext_init, 0, (sizeof (pfcp_message_type) / sizeof
((pfcp_message_type)[0]))-1, pfcp_message_type, "pfcp_message_type"
}
;
1494
1495/* 8.1.2 Information Element Types */
1496#define PFCP_IE_ID_CREATE_PDR1 1
1497#define PFCP_IE_ID_PDI2 2
1498#define PFCP_IE_CREATE_FAR3 3
1499#define PFCP_IE_FORWARDING_PARAMETERS4 4
1500#define PFCP_IE_DUPLICATING_PARAMETERS5 5
1501#define PFCP_IE_CREATE_URR6 6
1502#define PFCP_IE_CREATE_QER7 7
1503#define PFCP_IE_CREATED_PDR8 8
1504#define PFCP_IE_UPDATE_PDR9 9
1505#define PFCP_IE_UPDATE_FAR10 10
1506#define PFCP_IE_UPD_FORWARDING_PARAM11 11
1507#define PFCP_IE_UPDATE_BAR12 12
1508#define PFCP_IE_UPDATE_URR13 13
1509#define PFCP_IE_UPDATE_QER14 14
1510#define PFCP_IE_REMOVE_PDR15 15
1511#define PFCP_IE_REMOVE_FAR16 16
1512#define PFCP_IE_REMOVE_URR17 17
1513#define PFCP_IE_REMOVE_QER18 18
1514
1515#define PFCP_IE_LOAD_CONTROL_INFORMATION51 51
1516#define PFCP_IE_OVERLOAD_CONTROL_INFORMATION54 54
1517#define PFCP_IE_APPLICATION_IDS_PFDS58 58
1518#define PFCP_IE_PFD_CONTEXT59 59
1519#define PFCP_IE_APPLICATION_DETECTION_INF68 68
1520#define PFCP_IE_QUERY_URR77 77
1521#define PFCP_IE_USAGE_REPORT_SMR78 78
1522#define PFCP_IE_USAGE_REPORT_SDR79 79
1523#define PFCP_IE_USAGE_REPORT_SRR80 80
1524#define PFCP_IE_DOWNLINK_DATA_REPORT83 83
1525#define PFCP_IE_CREATE_BAR85 85
1526#define PFCP_IE_UPDATE_BAR_SMR86 86
1527#define PFCP_IE_REMOVE_BAR87 87
1528#define PFCP_IE_ERROR_INDICATION_REPORT99 99
1529#define PFCP_IE_USER_PLANE_PATH_FAILURE_REPORT102 102
1530#define PFCP_IE_UPDATE_DUPLICATING_PARAMETERS105 105
1531#define PFCP_IE_AGGREGATED_URRS118 118
1532#define PFCP_IE_CREATE_TRAFFIC_ENDPOINT127 127
1533#define PFCP_IE_CREATED_TRAFFIC_ENDPOINT128 128
1534#define PFCP_IE_UPDATE_TRAFFIC_ENDPOINT129 129
1535#define PFCP_IE_REMOVE_TRAFFIC_ENDPOINT130 130
1536#define PFCP_IE_ETHERNET_PACKET_FILTER132 132
1537#define PFCP_IE_ETHERNET_TRAFFIC_INFORMATION143 143
1538#define PFCP_IE_ADDITIONAL_MONITORING_TIME147 147
1539#define PFCP_IE_EVENT_INFORMATION148 148
1540#define PFCP_IE_EVENT_REPORTING149 149
1541#define PFCP_IE_CREATE_MAR165 165
1542#define PFCP_IE_ACCESS_FORWARDING_ACTION_INORMATION_1166 166
1543#define PFCP_IE_ACCESS_FORWARDING_ACTION_INORMATION_2167 167
1544#define PFCP_IE_REMOVE_MAR168 168
1545#define PFCP_IE_UPDATE_MAR169 169
1546#define PFCP_IE_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_1175 175
1547#define PFCP_IE_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_2176 176
1548#define PFCP_IE_PFCP_SESSION_RETENTION_INFORMATION_WITHIN_ASSOCIATION_SETUP_REQUEST183 183
1549#define PFCP_IE_USER_PLANE_PATH_RECOVERY_REPORT187 187
1550#define PFCP_IE_IP_MULTICAST_ADDRESSING_INFO189 189
1551#define PFCP_IE_JOIN_IP_MULTICAST_INFORMATION189 189
1552#define PFCP_IE_LEAVE_IP_MULTICAST_INFORMATION190 190
1553#define PFCP_IE_CREATED_BRIDGE_INFO_FOR_TSC195 195
1554#define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_MODIFICATION_REQUEST199 199
1555#define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_MODIFICATION_RESPONSE200 200
1556#define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_REPORT_REQUEST201 201
1557#define PFCP_IE_CLOCK_DRIFT_CONTROL_INFORMATION203 203
1558#define PFCP_IE_CLOCK_DRIFT_REPORT205 205
1559#define PFCP_IE_REMOVE_SRR211 211
1560#define PFCP_IE_CREATE_SRR212 212
1561#define PFCP_IE_UPDATE_SRR213 213
1562#define PFCP_IE_SESSION_REPORT214 214
1563#define PFCP_IE_ACCESS_AVAILABILITY_CONTROL_INFORMATION216 216
1564#define PFCP_IE_ACCESS_AVAILABILITY_REPORT218 218
1565#define PFCP_IE_PROVICE_ATSSS_CONTROL_INFORMATION220 220
1566#define PFCP_IE_ATSSS_CONTROl_PARAMETERS221 221
1567#define PFCP_IE_MPTCP_PARAMETERS225 225
1568#define PFCP_IE_ATSSS_LL_PARAMETERS226 226
1569#define PFCP_IE_PMF_PARAMETERS227 227
1570#define PFCP_IE_UE_IP_ADDRESS_POOL_INFORMATION233 233
1571#define PFCP_IE_GTP_U_PATH_QOS_CONTROL_INFORMATION238 238
1572#define PFCP_IE_GTP_U_PATH_QOS_REPORT239 239
1573#define PFCP_IE_QOS_INFORMATION_IN_GTP_U_PATH_QOS_REPORT240 240
1574#define PFCP_IE_QOS_MONITORING_PER_QOS_FLOW_CONTROL_INFORMATION242 242
1575#define PFCP_IE_QOS_MONITORING_REPORT247 247
1576#define PFCP_IE_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PFCP_SESSION_DELETION_RESPONSE252 252
1577#define PCFP_IE_ETHERNET_CONTEXT_INFORMATION_WITHIN_PFCP_SESSION_MODIFICATION_REQUEST254 254
1578#define PFCP_IE_REDUNDANT_TRANSMISSION_DETECTION_PARAMETERS_IE_IN_PDI255 255
1579#define PFCP_IE_UPDATED_PDR_IE_WITHIN_PFCP_SESSION_MODIFICATION_RESPONSE256 256
1580#define PFCP_IE_PROVIDE_RDS_CONFIGURATION_INFORMATION_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST261 261
1581#define PFCP_IE_QUERY_PACKET_RATE_STATUS_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST263 263
1582#define PFCP_IE_QUERY_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_RESPONSE264 264
1583#define PFCP_IE_UE_IP_ADDRESS_USAGE_INFORMATION_IE_WITHIN_PFCP_ASSOCIATION_UPDATE_REQUEST267 267
1584#define PFCP_IE_REDUNDANT_TRANSMISSION_FORWARD_PARAMETERS_IE_IN_FAR270 270
1585#define PFCP_IE_TRANSPORT_DELAY_REPORTING271 271
1586#define PFCP_IE_PARTIAL_FAILURE_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE272 272
1587#define PFCP_IE_PARTIAL_FAILURE_INFORMATION_WITHIN_PFCP_SESSION_MODIFICATION_RESPONSE273 273
1588#define PFCP_IE_L2TP_TUNNEL_INFORMATION276 276
1589#define PFCP_IE_L2TP_SESSION_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_REQUEST277 277
1590#define PFCP_IE_L2TP_SESSION_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE279 279
1591#define PFCP_IE_PFCP_SESSION_CHANGE_INFO290 290
1592#define PFCP_IE_DIRECT_REPORTING_INFORMATION295 295
1593#define PFCP_IE_MBS_SESSION_N4MB_CONTROL_INFORMATION300 300
1594#define PFCP_IE_MBS_MULTICAST_PARAMETERS301 301
1595#define PFCP_IE_ADD_MBS_UNICAST_PARAMETERS_IE_IN_CREATE_FAR302 302
1596#define PFCP_IE_MBS_SESSION_N4MB_INFORMATION300 300
1597#define PFCP_IE_REMOVE_MBS_UNICAST_PARAMETERS_IE_IN_UPDATE_FAR304 304
1598#define PFCP_IE_MBS_SESSION_N4_CONTROl_INFORMATION_IE_WITHIN_PFCP_SESSION_ESTABLISHMENT_REQUEST310 310
1599#define PFCP_IE_MBS_SESSION_N4_CONTROl_INFORMATION_IE_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE311 311
1600#define PFCP_IE_PEER_UP_REPORT_IE_WITING_PFCP_NODE_REPORT_REQUEST315 315
1601#define PFCP_IE_DSCP_TO_PPI_CONTROL_INFORMATION_IE_WITIN_PCFP_SESSION_ESTABLISHMENT_REQUEST316 316
1602
1603static const value_string pfcp_ie_type[] = {
1604
1605 { 0, "Reserved"},
1606 { 1, "Create PDR"}, /* Extendable / Table 7.5.2.2-1 */
1607 { 2, "PDI"}, /* Extendable / Table 7.5.2.2-2 */
1608 { 3, "Create FAR"}, /* Extendable / Table 7.5.2.3-1 */
1609 { 4, "Forwarding Parameters"}, /* Extendable / Table 7.5.2.3-2 */
1610 { 5, "Duplicating Parameters"}, /* Extendable / Table 7.5.2.3-3 */
1611 { 6, "Create URR"}, /* Extendable / Table 7.5.2.4-1 */
1612 { 7, "Create QER"}, /* Extendable / Table 7.5.2.5-1 */
1613 { 8, "Created PDR"}, /* Extendable / Table 7.5.3.2-1 */
1614 { 9, "Update PDR" }, /* Extendable / Table 7.5.4.2-1 */
1615 { 10, "Update FAR" }, /* Extendable / Table 7.5.4.3-1 */
1616 { 11, "Update Forwarding Parameters" }, /* Extendable / Table 7.5.4.3-2 */
1617 { 12, "Update BAR (PFCP Session Report Response)" }, /* Extendable / Table 7.5.9.2-1 */
1618 { 13, "Update URR" }, /* Extendable / Table 7.5.4.4 */
1619 { 14, "Update QER" }, /* Extendable / Table 7.5.4.5 */
1620 { 15, "Remove PDR" }, /* Extendable / Table 7.5.4.6 */
1621 { 16, "Remove FAR" }, /* Extendable / Table 7.5.4.7 */
1622 { 17, "Remove URR" }, /* Extendable / Table 7.5.4.8 */
1623 { 18, "Remove QER" }, /* Extendable / Table 7.5.4.9 */
1624 { 19, "Cause" }, /* Fixed / Subclause 8.2.1 */
1625 { 20, "Source Interface" }, /* Extendable / Subclause 8.2.2 */
1626 { 21, "F-TEID" }, /* Extendable / Subclause 8.2.3 */
1627 { 22, "Network Instance" }, /* Variable Length / Subclause 8.2.4 */
1628 { 23, "SDF Filter" }, /* Extendable / Subclause 8.2.5 */
1629 { 24, "Application ID" }, /* Variable Length / Subclause 8.2.6 */
1630 { 25, "Gate Status" }, /* Extendable / Subclause 8.2.7 */
1631 { 26, "MBR" }, /* Extendable / Subclause 8.2.8 */
1632 { 27, "GBR" }, /* Extendable / Subclause 8.2.9 */
1633 { 28, "QER Correlation ID" }, /* Extendable / Subclause 8.2.10 */
1634 { 29, "Precedence" }, /* Extendable / Subclause 8.2.11 */
1635 { 30, "Transport Level Marking" }, /* Extendable / Subclause 8.2.12 */
1636 { 31, "Volume Threshold" }, /* Extendable /Subclause 8.2.13 */
1637 { 32, "Time Threshold" }, /* Extendable /Subclause 8.2.14 */
1638 { 33, "Monitoring Time" }, /* Extendable /Subclause 8.2.15 */
1639 { 34, "Subsequent Volume Threshold" }, /* Extendable /Subclause 8.2.16 */
1640 { 35, "Subsequent Time Threshold" }, /* Extendable /Subclause 8.2.17 */
1641 { 36, "Inactivity Detection Time" }, /* Extendable /Subclause 8.2.18 */
1642 { 37, "Reporting Triggers" }, /* Extendable /Subclause 8.2.19 */
1643 { 38, "Redirect Information" }, /* Extendable /Subclause 8.2.20 */
1644 { 39, "Report Type" }, /* Extendable / Subclause 8.2.21 */
1645 { 40, "Offending IE" }, /* Fixed / Subclause 8.2.22 */
1646 { 41, "Forwarding Policy" }, /* Extendable / Subclause 8.2.23 */
1647 { 42, "Destination Interface" }, /* Extendable / Subclause 8.2.24 */
1648 { 43, "UP Function Features" }, /* Extendable / Subclause 8.2.25 */
1649 { 44, "Apply Action" }, /* Extendable / Subclause 8.2.26 */
1650 { 45, "Downlink Data Service Information" }, /* Extendable / Subclause 8.2.27 */
1651 { 46, "Downlink Data Notification Delay" }, /* Extendable / Subclause 8.2.28 */
1652 { 47, "DL Buffering Duration" }, /* Extendable / Subclause 8.2.29 */
1653 { 48, "DL Buffering Suggested Packet Count" }, /* Variable / Subclause 8.2.30 */
1654 { 49, "PFCPSMReq-Flags" }, /* Extendable / Subclause 8.2.31 */
1655 { 50, "PFCPSRRsp-Flags" }, /* Extendable / Subclause 8.2.32 */
1656 { 51, "Load Control Information" }, /* Extendable / Table 7.5.3.3-1 */
1657 { 52, "Sequence Number" }, /* Fixed Length / Subclause 8.2.33 */
1658 { 53, "Metric" }, /* Fixed Length / Subclause 8.2.34 */
1659 { 54, "Overload Control Information" }, /* Extendable / Table 7.5.3.4-1 */
1660 { 55, "Timer" }, /* Extendable / Subclause 8.2 35 */
1661 { 56, "PDR ID" }, /* Extendable / Subclause 8.2 36 */
1662 { 57, "F-SEID" }, /* Extendable / Subclause 8.2 37 */
1663 { 58, "Application ID's PFDs" }, /* Extendable / Table 7.4.3.1-2 */
1664 { 59, "PFD context" }, /* Extendable / Table 7.4.3.1-3 */
1665 { 60, "Node ID" }, /* Extendable / Subclause 8.2.38 */
1666 { 61, "PFD contents" }, /* Extendable / Subclause 8.2.39 */
1667 { 62, "Measurement Method" }, /* Extendable / Subclause 8.2.40 */
1668 { 63, "Usage Report Trigger" }, /* Extendable / Subclause 8.2.41 */
1669 { 64, "Measurement Period" }, /* Extendable / Subclause 8.2.42 */
1670 { 65, "FQ-CSID" }, /* Extendable / Subclause 8.2.43 */
1671 { 66, "Volume Measurement" }, /* Extendable / Subclause 8.2.44 */
1672 { 67, "Duration Measurement" }, /* Extendable / Subclause 8.2.45 */
1673 { 68, "Application Detection Information" }, /* Extendable / Table 7.5.8.3-2 */
1674 { 69, "Time of First Packet" }, /* Extendable / Subclause 8.2.46 */
1675 { 70, "Time of Last Packet" }, /* Extendable / Subclause 8.2.47 */
1676 { 71, "Quota Holding Time" }, /* Extendable / Subclause 8.2.48 */
1677 { 72, "Dropped DL Traffic Threshold" }, /* Extendable / Subclause 8.2.49 */
1678 { 73, "Volume Quota" }, /* Extendable / Subclause 8.2.50 */
1679 { 74, "Time Quota" }, /* Extendable / Subclause 8.2.51 */
1680 { 75, "Start Time" }, /* Extendable / Subclause 8.2.52 */
1681 { 76, "End Time" }, /* Extendable / Subclause 8.2.53 */
1682 { 77, "Query URR" }, /* Extendable / Table 7.5.4.10-1 */
1683 { 78, "Usage Report (Session Modification Response)" }, /* Extendable / Table 7.5.5.2-1 */
1684 { 79, "Usage Report (Session Deletion Response)" }, /* Extendable / Table 7.5.7.2-1 */
1685 { 80, "Usage Report (Session Report Request)" }, /* Extendable / Table 7.5.8.3-1 */
1686 { 81, "URR ID" }, /* Extendable / Subclause 8.2.54 */
1687 { 82, "Linked URR ID" }, /* Extendable / Subclause 8.2.55 */
1688 { 83, "Downlink Data Report" }, /* Extendable / Table 7.5.8.2-1 */
1689 { 84, "Outer Header Creation" }, /* Extendable / Subclause 8.2.56 */
1690 { 85, "Create BAR" }, /* Extendable / Table 7.5.2.6-1 */
1691 { 86, "Update BAR (Session Modification Request)" }, /* Extendable / Table 7.5.4.11-1 */
1692 { 87, "Remove BAR" }, /* Extendable / Table 7.5.4.12-1 */
1693 { 88, "BAR ID" }, /* Extendable / Subclause 8.2.57 */
1694 { 89, "CP Function Features" }, /* Extendable / Subclause 8.2.58 */
1695 { 90, "Usage Information" }, /* Extendable / Subclause 8.2.59 */
1696 { 91, "Application Instance ID" }, /* Variable Length / Subclause 8.2.60 */
1697 { 92, "Flow Information" }, /* Extendable / Subclause 8.2.61 */
1698 { 93, "UE IP Address" }, /* Extendable / Subclause 8.2.62 */
1699 { 94, "Packet Rate" }, /* Extendable / Subclause 8.2.63 */
1700 { 95, "Outer Header Removal" }, /* Extendable / Subclause 8.2.64 */
1701 { 96, "Recovery Time Stamp" }, /* Extendable / Subclause 8.2.65 */
1702 { 97, "DL Flow Level Marking" }, /* Extendable / Subclause 8.2.66 */
1703 { 98, "Header Enrichment" }, /* Extendable / Subclause 8.2.67 */
1704 { 99, "Error Indication Report" }, /* Extendable / Table 7.5.8.4-1 */
1705 { 100, "Measurement Information" }, /* Extendable / Subclause 8.2.68 */
1706 { 101, "Node Report Type" }, /* Extendable / Subclause 8.2.69 */
1707 { 102, "User Plane Path Failure Report" }, /* Extendable / Table 7.4.5.1.2-1 */
1708 { 103, "Remote GTP-U Peer" }, /* Extendable / Subclause 8.2.70 */
1709 { 104, "UR-SEQN" }, /* Fixed Length / Subclause 8.2.71 */
1710 { 105, "Update Duplicating Parameters" }, /* Extendable / Table 7.5.4.3-3 */
1711 { 106, "Activate Predefined Rules" }, /* Variable Length / Subclause 8.2.72 */
1712 { 107, "Deactivate Predefined Rules" }, /* Variable Length / Subclause 8.2.73 */
1713 { 108, "FAR ID" }, /* Extendable / Subclause 8.2.74 */
1714 { 109, "QER ID" }, /* Extendable / Subclause 8.2.75 */
1715 { 110, "OCI Flags" }, /* Extendable / Subclause 8.2.76 */
1716 { 111, "PFCP Association Release Request" }, /* Extendable / Subclause 8.2.77 */
1717 { 112, "Graceful Release Period" }, /* Extendable / Subclause 8.2.78 */
1718 { 113, "PDN Type" }, /* Fixed Length / Subclause 8.2.79 */
1719 { 114, "Failed Rule ID" }, /* Extendable / Subclause 8.2.80 */
1720 { 115, "Time Quota Mechanism" }, /* Extendable / Subclause 8.2.81 */
1721 { 116, "User Plane IP Resource Information (removed in Rel 16.3)" }, /* Extendable / Subclause 8.2.82 */
1722 { 117, "User Plane Inactivity Timer" }, /* Extendable / Subclause 8.2.83 */
1723 { 118, "Aggregated URRs" }, /* Extendable / Table 7.5.2.4-2 */
1724 { 119, "Multiplier" }, /* Fixed Length / Subclause 8.2.84 */
1725 { 120, "Aggregated URR ID IE" }, /* Fixed Length / Subclause 8.2.85 */
1726 { 121, "Subsequent Volume Quota" }, /* Extendable / Subclause 8.2.86 */
1727 { 122, "Subsequent Time Quota" }, /* Extendable / Subclause 8.2.87 */
1728 { 123, "RQI" }, /* Extendable / Subclause 8.2.88 */
1729 { 124, "QFI" }, /* Extendable / Subclause 8.2.89 */
1730 { 125, "Query URR Reference" }, /* Extendable / Subclause 8.2.90 */
1731 { 126, "Additional Usage Reports Information" }, /* Extendable / Subclause 8.2.91 */
1732 { 127, "Create Traffic Endpoint" }, /* Extendable / Table 7.5.2.7 */
1733 { 128, "Created Traffic Endpoint" }, /* Extendable / Table 7.5.3.5 */
1734 { 129, "Update Traffic Endpoint" }, /* Extendable / Table 7.5.4.13 */
1735 { 130, "Remove Traffic Endpoint" }, /* Extendable / Table 7.5.4.14 */
1736 { 131, "Traffic Endpoint ID" }, /* Extendable / Subclause 8.2.92*/
1737 { 132, "Ethernet Packet Filter"}, /* Extendable / Table 7.5.2.2-3 */
1738 { 133, "MAC address"}, /* Extendable / Subclause 8.2.93 */
1739 { 134, "C-TAG"}, /* Extendable / Subclause 8.2.94 */
1740 { 135, "S-TAG"}, /* Extendable / Subclause 8.2.95 */
1741 { 136, "Ethertype"}, /* Extendable / Subclause 8.2.96 */
1742 { 137, "Proxying"}, /* Extendable / Subclause 8.2.97 */
1743 { 138, "Ethernet Filter ID"}, /* Extendable / Subclause 8.2.98 */
1744 { 139, "Ethernet Filter Properties"}, /* Extendable / Subclause 8.2.99 */
1745 { 140, "Suggested Buffering Packets Count"}, /* Extendable / Subclause 8.2.100 */
1746 { 141, "User ID"}, /* Extendable / Subclause 8.2.101 */
1747 { 142, "Ethernet PDU Session Information"}, /* Extendable / Subclause 8.2.102 */
1748 { 143, "Ethernet Traffic Information"}, /* Extendable / Table 7.5.8.3-3 */
1749 { 144, "MAC Addresses Detected"}, /* Extendable / Subclause 8.2.103 */
1750 { 145, "MAC Addresses Removed"}, /* Extendable / Subclause 8.2.104 */
1751 { 146, "Ethernet Inactivity Timer"}, /* Extendable / Subclause 8.2.105 */
1752 { 147, "Additional Monitoring Time"}, /* Extendable / Table 7.5.2.4-3 */
1753 { 148, "Event Quota"}, /* Extendable / Subclause 8.2.112 */
1754 { 149, "Event Threshold"}, /* Extendable / Subclause 8.2.113 */
1755 { 150, "Subsequent Event Quota"}, /* Extendable / Subclause 8.2.106 */
1756 { 151, "Subsequent Event Threshold"}, /* Extendable / Subclause 8.2.107 */
1757 { 152, "Trace Information"}, /* Extendable / Subclause 8.2.108 */
1758 { 153, "Framed-Route"}, /* Variable Length / Subclause 8.2.109 */
1759 { 154, "Framed-Routing"}, /* Fixed Length / Subclause 8.2.110 */
1760 { 155, "Framed-IPv6-Route"}, /* Variable Length / Subclause 8.2.111 */
1761 { 156, "Time Stamp"}, /* Extendable / Subclause 8.2.114 */
1762 { 157, "Averaging Window"}, /* Extendable / Subclause 8.2.115 */
1763 { 158, "Paging Policy Indicator"}, /* Extendable / Subclause 8.2.116 */
1764 { 159, "APN/DNN"}, /* Variable Length / Subclause 8.2.117 */
1765 { 160, "3GPP Interface Type"}, /* Extendable / Subclause 8.2.118 */
1766 { 161, "PFCPSRReq-Flags"}, /* ExtendableClause 8.2.119 */
1767 { 162, "PFCPAUReq-Flags"}, /* ExtendableClause 8.2.120 */
1768 { 163, "Activation Time"}, /* Extendable Clause 8.2.121 */
1769 { 164, "Deactivation Time"}, /* Extendable Clause 8.2.122 */
1770 { 165, "Create MAR"}, /* Extendable / Table 7.5.2.8-1 */
1771 { 166, "Access Forwarding Action Information 1"}, /* Extendable / Table 7.5.2.8-2 */
1772 { 167, "Access Forwarding Action Information 2"}, /* Extendable / Table 7.5.2.8-3 */
1773 { 168, "Remove MAR"}, /* Extendable / Table 7.5.2.15-1 */
1774 { 169, "Update MAR"}, /* Extendable / Table 7.5.2.16-1 */
1775 { 175, "Update Access Forwarding Action Information 1"}, /* Fixed / Clause 8.2.126 */
1776 { 176, "Update Access Forwarding Action Information 2"}, /* Extendable / Clause 8.2.127 */
1777 { 177, "UE IP address Pool Identity"}, /* Variable Length / Clause 8.2.128 */
1778 { 178, "Alternative SMF IP Address"}, /* Extendable / Clause 8.2.129 */
1779 { 179, "Packet Replication and Detection Carry-On Information"},/* Extendable / Clause 8.2.130 */
1780 { 180, "SMF Set ID"}, /* Extendable / Clause 8.2.131 */
1781 { 181, "Quota Validity Time"}, /* Extendable / Clause 8.2.132 */
1782 { 182, "Number of Reports"}, /* Fixed / Clause 8.2.133 */
1783 { 183, "PFCP Session Retention Information (within PFCP Association Setup Request)"}, /* Extendable / Table 7.4.4.1-2 */
1784 { 184, "PFCPASRsp-Flags"}, /* Extendable / Clause 8.2.134 */
1785 { 185, "CP PFCP Entity IP Address"}, /* Extendable / Clause 8.2.135 */
1786 { 186, "PFCPSEReq-Flags"}, /* Extendable / Clause 8.2.136 */
1787 { 187, "User Plane Path Recovery Report"}, /* Extendable / Table 7.4.5.1.3-1 */
1788 { 188, "IP Multicast Addressing Info within PFCP Session Establishment Request"}, /* Extendable / Clause 7.5.2.2-4 */
1789 { 189, "Join IP Multicast Information IE within Usage Report"}, /* Extendable / Table 7.5.8.3-4 */
1790 { 190, "Leave IP Multicast Information IE within Usage Report"},/* Extendable / Table 7.5.8.3-5 */
1791 { 191, "IP Multicast Address"}, /* Extendable / Clause 8.2.137 */
1792 { 192, "Source IP Address"}, /* Extendable / Clause 8.2.138 */
1793 { 193, "Packet Rate Status"}, /* Extendable / Clause 8.2.139 */
1794 { 194, "Create Bridge/Router Info"}, /* Extendable / Clause 8.2.140 */
1795 { 195, "Created Bridge/Router Info"}, /* Extendable / Table 7.5.3.6-1 */
1796 { 196, "Port Number"}, /* Fixed Length / Clause 8.2.141 */
1797 { 197, "NW-TT Port Number"}, /* Fixed Length / Clause 8.2.142 */
1798 { 198, "5GS User Plane Node"}, /* Extendable / Clause 8.2.143 */
1799 { 199, "TSC Management Information IE within PFCP Session Modification Request"}, /* Extendable / Table 7.5.4.18-1 */
1800 { 200, "Port Management Information for TSC IE within PFCP Session Modification Response"}, /* Extendable / Table 7.5.5.3-1 */
1801 { 201, "Port Management Information for TSC IE within PFCP Session Report Request"}, /* Extendable / Table 7.5.8.5-1 */
1802 { 202, "Port Management Information Container"}, /* Variable Length / Clause 8.2.144 */
1803 { 203, "Clock Drift Control Information"}, /* Extendable / Table 7.4.4.1.2-1 */
1804 { 204, "Requested Clock Drift Information"}, /* Extendable / Clause 8.2.145 */
1805 { 205, "Clock Drift Report"}, /* Extendable / Table 7.4.5.1.4-1 */
1806 { 206, "Time Domain Number"}, /* Extendable / Clause 8.2.146 */
1807 { 207, "Time Offset Threshold"}, /* Extendable / Clause 8.2.147 */
1808 { 208, "Cumulative rateRatio Threshold"}, /* Extendable / Clause 8.2.148 */
1809 { 209, "Time Offset Measurement"}, /* Extendable / Clause 8.2.149 */
1810 { 210, "Cumulative rateRatio Measurement"}, /* Extendable / Clause 8.2.150 */
1811 { 211, "Remove SRR"}, /* Extendable/ Table 7.5.4.19-1 */
1812 { 212, "Create SRR"}, /* Extendable/ Table 7.5.2.9-1 */
1813 { 213, "Update SRR"}, /* Extendable/ Table 7.5.4.21-1 */
1814 { 214, "Session Report"}, /* Extendable / Table 7.5.8.7-1 */
1815 { 215, "SRR ID"}, /* Extendable / Clause 8.2.151 */
1816 { 216, "Access Availability Control Information"}, /* Extendable / Table 7.5.2.9-2 */
1817 { 217, "Requested Access Availability Information"}, /* Extendable / Clause 8.2.152 */
1818 { 218, "Access Availability Report"}, /* Extendable / Table 7.5.8.6-2 */
1819 { 219, "Access Availability Information"}, /* Extendable / Clause 8.2.153 */
1820 { 220, "Provide ATSSS Control Information"}, /* Extendable / Table 7.5.2.10-1 */
1821 { 221, "ATSSS Control Parameters"}, /* Extendable / Table 7.5.3.7-1 */
1822 { 222, "MPTCP Control Information"}, /* Extendable / Clause 8.2.154 */
1823 { 223, "ATSSS-LL Control Information"}, /* Extendable / Clause 8.2.155 */
1824 { 224, "PMF Control Information"}, /* Extendable / Clause 8.2.156 */
1825 { 225, "MPTCP Parameters"}, /* Extendable / Table 7.5.3.7-2 */
1826 { 226, "ATSSS-LL Parameters"}, /* Extendable / Table 7.5.3.7-3 */
1827 { 227, "PMF Parameters"}, /* Extendable / Table 7.5.3.7-4 */
1828 { 228, "MPTCP Address Information"}, /* Extendable / Clause 8.2.157 */
1829 { 229, "Link-Specific Multipath IP Address"}, /* Extendable / Clause 8.2.158 */
1830 { 230, "PMF Address Information"}, /* Extendable / Clause 8.2.159 */
1831 { 231, "ATSSS-LL Information"}, /* Extendable / Clause 8.2.160 */
1832 { 232, "Data Network Access Identifier"}, /* Variable Length / Clause 8.2.161 */
1833 { 233, "UE IP address Pool Information"}, /* Extendable / Table 7.4.4.1-3 */
1834 { 234, "Average Packet Delay"}, /* Extendable / Clause 8.2.162 */
1835 { 235, "Minimum Packet Delay"}, /* Extendable / Clause 8.2.163 */
1836 { 236, "Maximum Packet Delay"}, /* Extendable / Clause 8.2.164 */
1837 { 237, "QoS Report Trigger"}, /* Extendable / Clause 8.2.165 */
1838 { 238, "GTP-U Path QoS Control Information"}, /* Extendable / Table 7.4.4.1.3-1 */
1839 { 239, "GTP-U Path QoS Report (PFCP Node Report Request)"}, /* Extendable / Table 7.4.5.1.5-1 */
1840 { 240, "QoS Information in GTP-U Path QoS Report"}, /* Extendable / Table 7.4.5.1.6-1 */
1841 { 241, "GTP-U Path Interface Type"}, /* Extendable / Clause 8.2.166 */
1842 { 242, "QoS Monitoring per QoS flow Control Information"}, /* Extendable / Table 7.5.2.9-3 */
1843 { 243, "Requested QoS Monitoring"}, /* Extendable / Clause 8.2.167 */
1844 { 244, "Reporting Frequency"}, /* Extendable / Clause 8.2.168 */
1845 { 245, "Packet Delay Thresholds"}, /* Extendable / Clause 8.2.169 */
1846 { 246, "Minimum Wait Time"}, /* Extendable / Clause 8.2.170 */
1847 { 247, "QoS Monitoring Report"}, /* Extendable / Table 7.5.8.6-3 */
1848 { 248, "QoS Monitoring Measurement"}, /* Extendable / Clause 8.2.171 */
1849 { 249, "MT-EDT Control Information"}, /* Extendable / Clause 8.2.172 */
1850 { 250, "DL Data Packets Size"}, /* Extendable / Clause 8.2.173 */
1851 { 251, "QER Control Indications"}, /* Extendable / Clause 8.2.174 */
1852 { 252, "Packet Rate Status Report IE within PFCP Session Deletion Response"}, /* Extendable / Table 7.5.7.1-2 */
1853 { 253, "NF Instance ID"}, /* Extendable / Clause 8.2.175 */
1854 { 255, "Redundant Transmission Detection Parameters IE in PDI"}, /* Extendable / Table 7.5.2.2-5 */
1855 { 256, "Updated PDR"}, /* Extendable / Table 7.5.9.3-1 */
1856 { 257, "S-NSSAI"}, /* Fixed Length / Clause 8.2.176 */
1857 { 258, "IP version"}, /* Extendable / Clause 8.2.177 */
1858 { 259, "PFCPASReq-Flags"}, /* Extendable / Clause 8.2.178 */
1859 { 260, "Data Status"}, /* Extendable / Clause 8.2.179 */
1860 { 261, "Provide RDS Configuration Information IE within PFCP Session Establishment Request"}, /* Extendable / Table 7.5.2.11-1 */
1861 { 262, "RDS Configuration Information"}, /* Extendable / Clause 8.2.180 */
1862 { 263, "Query Packet Rate Status IE within PFCP Session Modification Request"}, /* Extendable / Table 7.5.4.22-1 */
1863 { 264, "Query Packet Rate Status Report IE within PFCP Session Modification Response"}, /* Extendable / Table 7.5.5.4-1 */
1864 { 265, "Multipath Applicable Indication"}, /* Extendable / Clause 8.2.181 */
1865 { 266, "User Plane Node Management Information Container"}, /* Variable Length / Clause 8.2.182 */
1866 { 267, "UE IP Address Usage Information"}, /* Extendable / Table 7.4.4.3.1-1 */
1867 { 268, "Number of UE IP Addresses"}, /* Extendable / Clause 8.2.183 */
1868 { 269, "Validity Timer"}, /* Extendable / Clause 8.2.184 */
1869 { 270, "Redundant Transmission Forwarding Parameters"}, /* Extendable / Table 7.5.2.3-4 */
1870 { 271, "Transport Delay Reporting"}, /* Extendable / Table 7.5.2.2-6 */
1871 { 272, "Partial Failure Information"}, /* Extendable / Table 7.5.3.1-2 */
1872 { 273, "Partial Failure Information within PFCP Session Modification Response (Removed in Rel 17.2.0)"}, /* Extendable / Table 7.5.5.1-2 */
1873 { 274, "Offending IE Information"}, /* Extendable / Clause 8.2.185 */
1874 { 275, "RAT Type"}, /* Extendable / Clause 8.2.186 */
1875 { 276, "L2TP Tunnel Information"}, /* Extendable / Table 7.5.2.1-2 */
1876 { 277, "L2TP Session Information within PFCP Session Establishment Request"}, /* Extendable / Table 7.5.2.1-3 */
1877 { 278, "L2TP User Authentication"}, /* Variable Length / Clause 8.2.187 */
1878 { 279, "L2TP Session Information within PFCP Session Establishment Response"}, /* Extendable / Table 7.5.3.1-3 */
1879 { 280, "LNS Address"}, /* Variable Length / Clause 8.2.188 */
1880 { 281, "Tunnel Preference"}, /* Fixed / Clause 8.2.189 */
1881 { 282, "Calling Number"}, /* Variable Length / Clause 8.2.190 */
1882 { 283, "Called Number"}, /* Variable Length / Clause 8.2.191 */
1883 { 284, "L2TP Session Indications"}, /* Extendable / Clause 8.2.192 */
1884 { 285, "DNS Server Address"}, /* Extendable / Clause 8.2.193 */
1885 { 286, "NBNS Server Address"}, /* Fixed / Clause 8.2.194 */
1886 { 287, "Maximum Receive Unit"}, /* Variable Length / Clause 8.2.195 */
1887 { 288, "Thresholds"}, /* Variable Length / Clause 8.2.196 */
1888 { 289, "Steering Mode Indicator"}, /* Extendable / Clause 8.2.197 */
1889 { 290, "PFCP Session Change Info"}, /* Extendable / Table 7.4.7.1-2 */
1890 { 291, "Group ID"}, /* Fixed / Clause 8.2.198 */
1891 { 292, "CP IP Address"}, /* Extendable / Clause 8.2.199 */
1892 { 293, "IP Address and Port Number Replacement"}, /* Variable Length / Clause 8.2.200 */
1893 { 294, "DNS Query/Response Filter"}, /* Variable Length / Clause 8.2.201 */
1894 { 295, "Direct Reporting Information"}, /* Extendable / Table 7.5.2.9-4 */
1895 { 296, "Event Notification URI"}, /* Variable Length / Clause 8.2.202 */
1896 { 297, "Notification Correlation ID"}, /* Variable Length / Clause 8.2.203 */
1897 { 298, "Reporting Flags"}, /* Extendable / Clause 8.2.204 */
1898 { 299, "Predefined Rules Name"}, /* Variable Length / Clause 8.2.205 */
1899 { 300, "MBS Session N4mb Control Information"}, /* Extendable / Table 7.5.2.1-5 */
1900 { 301, "MBS Multicast Parameters"}, /* Extendable / Table 7.5.2.3-5 */
1901 { 302, "Add MBS Unicast Parameters IE in Create FAR"}, /* Extendable / Table 7.5.2.3-6 */
1902 { 303, "MBS Session N4mb Information"}, /* Extendable / Table 7.5.3.1-4 */
1903 { 304, "Remove MBS Unicast Parameters IE in Update FAR"}, /* Extendable / Table 7.5.4.3-4 */
1904 { 305, "MBS Session Identifier"}, /* Extendable Length / Clause 8.2.206 */
1905 { 306, "Multicast Transport Information"}, /* Extendable Length / Clause 8.2.207 */
1906 { 307, "MBSN4mbReq Flags"}, /* Extendable Length / Clause 8.2.208 */
1907 { 308, "Local Ingress Tunnel"}, /* Extendable Length / Clause 8.2.209 */
1908 { 309, "MBS Unicast Parameters ID"}, /* Extendable Length / Clause 8.2.210 */
1909 { 310, "MBS Session N4 Control Information IE within PFCP Session Establishment Request"}, /* Extendable / Table 7.5.2.1-6 */
1910 { 311, "MBS Session N4 Control Information IE within PFCP Session Establishment Response"}, /* Extendable / Table 7.5.3.1-5 */
1911 { 312, "MBSN4Resp-Flags"}, /* Extendable / Clause 8.2.211 */
1912 { 313, "Tunnel Password"}, /* Variable Length / Clause 8.2.212 */
1913 { 314, "Area Session ID"}, /* Fixed / Clause 8.2.213 */
1914 { 315, "Peer UP Restart Report IE within PFCP Node Report Request"}, /* Extendable / Table 7.4.5.1-7 */
1915 { 316, "DSCP to PPI Control Information IE within PFCP Session Establishment Request"}, /* Extendable / Table 7.5.2.1-6 */
1916 { 317, "DSCP to PPI Mapping Information"}, /* Extendable / Clause 8.2.214 */
1917 { 318, "PFCPSDRsp-Flags"}, /* Extendable / Clause 8.2.215 */
1918 { 319, "QER Indications"}, /* Extendable / Clause 8.2.216 */
1919 { 320, "Vendor-Specific Node Report Type"}, /* Extendable / Clause 8.2.217 */
1920 { 321, "Configured Time Domain"}, /* Extendable / Clause 8.2.218 */
1921 { 322, "Metadata"}, /* Variable Length / Clause 8.2.219 */
1922 { 323, "Traffic Parameter Measurement Control Information"}, /* Extendable / Table 7.5.2.9-5 */
1923 { 324, "Traffic Parameter Measurement Report"}, /* Extendable / Table 7.5.8.6-4 */
1924 { 325, "Traffic Parameter Threshold"}, /* Extendable / Clause 8.2.220 */
1925 { 326, "DL Periodicity"}, /* Extendable / Clause 8.2.221 */
1926 { 327, "N6 Jitter Measurement"}, /* Extendable / Clause 8.2.222 */
1927 { 328, "Traffic Parameter Measurement Indication"}, /* Extendable / Clause 8.2.223 */
1928 { 329, "UL Periodicity"}, /* Extendable / Clause 8.2.224 */
1929 { 330, "MPQUIC Control Information"}, /* Extendable / Clause 8.2.225 */
1930 { 331, "MPQUIC Parameters"}, /* Extendable / Table 7.5.3.7-5 */
1931 { 332, "MPQUIC Address Information"}, /* Extendable / Clause 8.2.226 */
1932 { 333, "Transport Mode"}, /* Extendable / Clause 8.2.227 */
1933 { 334, "Protocol Description"}, /* Extendable / Table 7.5.2.2-7 */
1934 { 335, "Reporting Suggestion Info"}, /* Extendable / Clause 8.2.289 */
1935 { 336, "TL-Container"}, /* Variable Length / Clause 8.2.230 */
1936 { 337, "Measurement Indication"}, /* Extendable / Clause 8.2.231 */
1937 { 338, "HPLMN S-NSSAI"}, /* Fixed Length / Clause 8.2.232 */
1938 { 339, "Media Transport Protocol"}, /* Extendable / Clause 8.2.233 */
1939 { 340, "RTP Header Extension Information"}, /* Extendable / Table 7.5.2.2-8 */
1940 { 341, "RTP Payload Information"}, /* Extendable / Table 7.5.2.2-9 */
1941 { 342, "RTP Header Extension Type"}, /* Fixed Length / Clause 8.2.234 */
1942 { 343, "RTP Header Extension ID"}, /* Fixed Length / Clause 8.2.235 */
1943 { 344, "RTP Payload Type"}, /* Fixed Length / Clause 8.2.236 */
1944 { 345, "RTP Payload Format"}, /* Fixed Length / Clause 8.2.237 */
1945 { 346, "Extended DL Buffering Notification Policy"}, /* Extendable / Clause 8.2.238 */
1946 { 347, "MT-SDT Control Information"}, /* Extendable / Clause 8.2.239 */
1947 { 348, "Reporting Thresholds"}, /* Extendable / Clause 8.2.240 */
1948 { 349, "RTP Header Extension Additional Information"}, /* Extendable / Clause 8.2.241 */
1949 { 350, "Mapped N6 IP Address"}, /* Extendable / Clause 8.2.242 */
1950 { 351, "N6 Routing Information"}, /* Extendable / Clause 8.2.243 */
1951 //352 to 32767 Spare. For future use.
1952 //32768 to 65535 Vendor-specific IEs.
1953 {0, NULL((void*)0)}
1954};
1955
1956static value_string_ext pfcp_ie_type_ext = VALUE_STRING_EXT_INIT(pfcp_ie_type){ _try_val_to_str_ext_init, 0, (sizeof (pfcp_ie_type) / sizeof
((pfcp_ie_type)[0]))-1, pfcp_ie_type, "pfcp_ie_type" }
;
1957
1958/* PFCP Session funcs*/
1959static unsigned
1960pfcp_info_hash(gconstpointer key)
1961{
1962 const pfcp_info_t *k = (const pfcp_info_t *)key;
1963
1964 /* The SEID is likely unique, so just use it. */
1965 return g_int_hash(&k->seid);
1966}
1967
1968static gboolean
1969pfcp_info_equal(gconstpointer key1, gconstpointer key2)
1970{
1971 const pfcp_info_t *a = (const pfcp_info_t *)key1;
1972 const pfcp_info_t *b = (const pfcp_info_t *)key2;
1973
1974 return (a->seid == b->seid && (cmp_address(&a->addr, &b->addr) == 0));
1975}
1976
1977static uint32_t
1978pfcp_get_frame(address ip, uint64_t seid, uint32_t *frame) {
1979 pfcp_info_t info;
1980 uint32_t *value;
1981
1982 info.seid = seid;
1983 copy_address_shallow(&info.addr, &ip);
1984 value = wmem_map_lookup(pfcp_frame_map, &info);
1985 if (value != NULL((void*)0)) {
1986 *frame = GPOINTER_TO_UINT(value)((guint) (gulong) (value));
1987 return 1;
1988 }
1989 return 0;
1990}
1991
1992static gboolean
1993pfcp_frame_equal(void *key _U___attribute__((unused)), void *value, void *data){
1994 uint32_t frame = GPOINTER_TO_UINT(data)((guint) (gulong) (data));
1995
1996 return (GPOINTER_TO_UINT(value)((guint) (gulong) (value)) == frame);
1997}
1998
1999static void
2000pfcp_remove_frame_info(uint32_t f) {
2001 /* XXX: This iterates through the entire map and it is slow if done
2002 * often. For large files with lots of removals, there are better
2003 * alternatives, e.g. marking sessions as expired and then periodically
2004 * removing all expired sessions from the map, or using a bijective
2005 * map to coordinate removals.
2006 */
2007 wmem_map_foreach_remove(pfcp_frame_map, pfcp_frame_equal, GUINT_TO_POINTER(f)((gpointer) (gulong) (f)));
2008}
2009
2010
2011static void
2012pfcp_add_session(uint32_t frame, uint32_t session) {
2013 g_hash_table_insert(pfcp_session_table, GUINT_TO_POINTER(frame)((gpointer) (gulong) (frame)), GUINT_TO_POINTER(session)((gpointer) (gulong) (session)));
2014
2015}
2016
2017static bool_Bool
2018pfcp_seid_exists(uint64_t seid, wmem_list_t *seid_list) {
2019 wmem_list_frame_t *elem;
2020 uint32_t *info;
2021 bool_Bool found;
2022 found = false0;
2023 elem = wmem_list_head(seid_list);
2024 while (!found && elem) {
2025 info = (uint32_t*)wmem_list_frame_data(elem);
2026 found = *info == seid;
2027 elem = wmem_list_frame_next(elem);
2028 }
2029 return found;
2030}
2031
2032static bool_Bool
2033pfcp_ip_exists(address ip, wmem_list_t *ip_list) {
2034 wmem_list_frame_t *elem;
2035 address *info;
2036 bool_Bool found;
2037 found = false0;
2038 elem = wmem_list_head(ip_list);
2039 while (!found && elem) {
2040 info = (address*)wmem_list_frame_data(elem);
2041 found = addresses_equal(info, &ip);
2042 elem = wmem_list_frame_next(elem);
2043 }
2044 return found;
2045}
2046
2047static void
2048pfcp_fill_map(wmem_list_t *seid_list, wmem_list_t *ip_list, uint32_t frame) {
2049 wmem_list_frame_t *elem_ip, *elem_seid;
2050 pfcp_info_t *pfcp_info;
2051 gpointer session_p, fr_p;
2052 GHashTableIter iter;
2053 uint64_t seid;
2054 uint32_t session;
2055 address *ip;
2056
2057 elem_ip = wmem_list_head(ip_list);
2058 while (elem_ip) {
2059 ip = (address*)wmem_list_frame_data(elem_ip);
2060 /* We loop over the seid list */
2061 elem_seid = wmem_list_head(seid_list);
2062 while (elem_seid) {
2063 seid = *(uint64_t*)wmem_list_frame_data(elem_seid);
2064 pfcp_info = wmem_new0(wmem_file_scope(), pfcp_info_t)((pfcp_info_t*)wmem_alloc0((wmem_file_scope()), sizeof(pfcp_info_t
)))
;
2065 pfcp_info->seid = seid;
2066 copy_address_wmem(wmem_file_scope(), &pfcp_info->addr, ip);
2067 if (wmem_map_lookup(pfcp_frame_map, pfcp_info)) {
2068 /* If the seid and ip already maps to a session, that means
2069 * that we need to remove old info about that session */
2070 /* We look for its session ID */
2071 session = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_session_table, GUINT_TO_POINTER(frame)))((guint) (gulong) (g_hash_table_lookup(pfcp_session_table, ((
gpointer) (gulong) (frame)))))
;
2072 if (session) {
2073 g_hash_table_iter_init(&iter, pfcp_session_table);
2074 while (g_hash_table_iter_next(&iter, &fr_p, &session_p)) {
2075 /* If the msg has the same session ID and it's not the upd req we have to remove its info */
2076 if (GPOINTER_TO_UINT(session_p)((guint) (gulong) (session_p)) == session) {
2077 /* If it's the session we are looking for, we remove all the frame information */
2078 pfcp_remove_frame_info(GPOINTER_TO_UINT(fr_p)((guint) (gulong) (fr_p)));
2079 }
2080 }
2081 }
2082 }
2083 wmem_map_insert(pfcp_frame_map, pfcp_info, GUINT_TO_POINTER(frame)((gpointer) (gulong) (frame)));
2084 elem_seid = wmem_list_frame_next(elem_seid);
2085 }
2086 elem_ip = wmem_list_frame_next(elem_ip);
2087 }
2088}
2089
2090static bool_Bool
2091pfcp_is_cause_accepted(uint8_t cause) {
2092 return cause == 1;
2093}
2094
2095/* Data structure attached to a conversation,
2096* to keep track of request/response-pairs
2097*/
2098typedef struct pfcp_conv_info_t {
2099 wmem_map_t *unmatched;
2100 wmem_map_t *matched;
2101} pfcp_conv_info_t;
2102
2103/* structure used to track responses to requests using sequence number */
2104typedef struct pfcp_msg_hash_entry {
2105 bool_Bool is_request; /* true/false */
2106 uint32_t req_frame; /* frame with request */
2107 nstime_t req_time; /* req time */
2108 uint32_t rep_frame; /* frame with reply */
2109 int seq_nr; /* sequence number */
2110 unsigned msgtype; /* messagetype */
2111} pfcp_msg_hash_t;
2112
2113static unsigned
2114pfcp_sn_hash(gconstpointer k)
2115{
2116 const pfcp_msg_hash_t *key = (const pfcp_msg_hash_t *)k;
2117
2118 return key->seq_nr;
2119}
2120
2121static gboolean
2122pfcp_sn_equal_matched(gconstpointer k1, gconstpointer k2)
2123{
2124 const pfcp_msg_hash_t *key1 = (const pfcp_msg_hash_t *)k1;
2125 const pfcp_msg_hash_t *key2 = (const pfcp_msg_hash_t *)k2;
2126
2127 if (key1->req_frame && key2->req_frame && (key1->req_frame != key2->req_frame)) {
2128 return FALSE(0);
2129 }
2130
2131 if (key1->rep_frame && key2->rep_frame && (key1->rep_frame != key2->rep_frame)) {
2132 return FALSE(0);
2133 }
2134
2135 if (key1->seq_nr == key2->seq_nr) {
2136 if (pref_pair_matching_max_interval_ms) {
2137 nstime_t delta;
2138 nstime_delta(&delta, &key1->req_time, &key2->req_time);
2139 double diff = fabs(nstime_to_msec(&delta));
2140 return diff < pref_pair_matching_max_interval_ms;
2141 }
2142
2143 return TRUE(!(0));
2144 }
2145 return FALSE(0);
2146}
2147
2148static gboolean
2149pfcp_sn_equal_unmatched(gconstpointer k1, gconstpointer k2)
2150{
2151 const pfcp_msg_hash_t *key1 = (const pfcp_msg_hash_t *)k1;
2152 const pfcp_msg_hash_t *key2 = (const pfcp_msg_hash_t *)k2;
2153
2154 if (key1->seq_nr == key2->seq_nr) {
2155 if (pref_pair_matching_max_interval_ms) {
2156 nstime_t delta;
2157 nstime_delta(&delta, &key1->req_time, &key2->req_time);
2158 double diff = fabs(nstime_to_msec(&delta));
2159 return diff < pref_pair_matching_max_interval_ms;
2160 }
2161
2162 return TRUE(!(0));
2163 }
2164 return FALSE(0);
2165}
2166
2167static GHashTable *pfcp_stat_msg_idx_hash;
2168
2169static void
2170pfcp_stat_init(struct register_srt* srt _U___attribute__((unused)), GArray*srt_array)
2171{
2172 if (pfcp_stat_msg_idx_hash != NULL((void*)0)) {
2173 g_hash_table_destroy(pfcp_stat_msg_idx_hash);
2174 }
2175 pfcp_stat_msg_idx_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
2176
2177 init_srt_table("PFCP Requests", NULL((void*)0), srt_array, 0, NULL((void*)0), NULL((void*)0), NULL((void*)0));
2178}
2179
2180static tap_packet_status
2181pfcp_stat_packet(void *pss, packet_info *pinfo, epan_dissect_t *edt _U___attribute__((unused)), const void *prv, tap_flags_t flags _U___attribute__((unused)))
2182{
2183 unsigned i = 0;
2184 srt_stat_table *pfcp_srt_table;
2185 srt_data_t *srt_data = (srt_data_t*)pss;
2186 const pfcp_msg_hash_t *pcrp = (const pfcp_msg_hash_t *)prv;
2187 int idx = 0;
2188
2189 /* We are only interested in matched reply packets. */
2190 if (pcrp->is_request) {
2191 return TAP_PACKET_DONT_REDRAW;
2192 }
2193 if (!pcrp->req_frame) {
2194 return TAP_PACKET_DONT_REDRAW;
2195 }
2196
2197 pfcp_srt_table = g_array_index(srt_data->srt_array, srt_stat_table*, i)(((srt_stat_table**) (void *) (srt_data->srt_array)->data
) [(i)])
;
2198
2199 /* XXX: It would be nice if srt_table handled hashing so that the
2200 * real procedure number could be displayed in the table without
2201 * having to add empty rows for unused message types and responses
2202 * (requests and responses have different message types, and we
2203 * only use the request value.)
2204 */
2205 idx = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_stat_msg_idx_hash, GUINT_TO_POINTER(pcrp->msgtype)))((guint) (gulong) (g_hash_table_lookup(pfcp_stat_msg_idx_hash
, ((gpointer) (gulong) (pcrp->msgtype)))))
;
2206
2207 /* Store the row value incremented by 1 to distinguish 0 from NULL */
2208 if (idx == 0) {
2209 idx = g_hash_table_size(pfcp_stat_msg_idx_hash);
2210 g_hash_table_insert(pfcp_stat_msg_idx_hash, GUINT_TO_POINTER(pcrp->msgtype)((gpointer) (gulong) (pcrp->msgtype)), GUINT_TO_POINTER(idx + 1)((gpointer) (gulong) (idx + 1)));
2211 init_srt_table_row(pfcp_srt_table, idx, val_to_str_ext_const(pcrp->msgtype, &pfcp_message_type_ext, "Unknown"));
2212 } else {
2213 idx -= 1;
2214 }
2215
2216 add_srt_table_data(pfcp_srt_table, idx, &pcrp->req_time, pinfo);
2217
2218 return TAP_PACKET_REDRAW;
2219}
2220
2221static void
2222pfcp_track_session(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, pfcp_hdr_t * pfcp_hdr, wmem_list_t *seid_list, wmem_list_t *ip_list, uint64_t last_seid _U___attribute__((unused)), address last_ip _U___attribute__((unused)))
2223{
2224 uint32_t session, frame_seid_cp;
2225 proto_item *it;
2226
2227 /* PFCP session */
2228 if (tree) {
2229 session = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_session_table, GUINT_TO_POINTER(pinfo->num)))((guint) (gulong) (g_hash_table_lookup(pfcp_session_table, ((
gpointer) (gulong) (pinfo->num)))))
;
2230 if (session) {
2231 it = proto_tree_add_uint(tree, hf_pfcp_session, tvb, 0, 0, session);
2232 proto_item_set_generated(it);
2233 }
2234 }
2235
2236 if (!PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
2237 /* If the message does not have any session ID */
2238 session = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_session_table, GUINT_TO_POINTER(pinfo->num)))((guint) (gulong) (g_hash_table_lookup(pfcp_session_table, ((
gpointer) (gulong) (pinfo->num)))))
;
2239 if (!session) {
2240 /* If the message is not a SEREQ, SERES, SMREQ, SERES, SDREQ, SDRES, SRREQ or SRRES
2241 * then we remove its information from seid and ip lists
2242 * XXX: Wouldn't it be better not to insert this information
2243 * in the first place for other message types, instead of
2244 * inserting it and then immediately removing it?
2245 * At the very least, it would be faster to iterate through the
2246 * seid_list and ip_list and remove via keys rather than doing
2247 * removal through a reverse lookup.
2248 */
2249 if ((pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST50 && pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE51 &&
2250 pfcp_hdr->message != PFCP_MSG_SESSION_MODIFICATION_REQUEST52 && pfcp_hdr->message != PFCP_MSG_SESSION_MODIFICATION_RESPONSE53 &&
2251 pfcp_hdr->message != PFCP_MSG_SESSION_DELETION_REQUEST54 && pfcp_hdr->message != PFCP_MSG_SESSION_DELETION_RESPONSE55 &&
2252 pfcp_hdr->message != PFCP_MSG_SESSION_REPORT_REQUEST56 && pfcp_hdr->message != PFCP_MSG_SESSION_REPORT_RESPONSE57)) {
2253 /* If the lists are not empty*/
2254 if (wmem_list_count(seid_list) && wmem_list_count(ip_list)) {
2255 pfcp_remove_frame_info(pinfo->num);
2256 }
2257 }
2258 if (pfcp_hdr->message == PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST50){
2259 /* If SEREQ and not already in the list then we create a new session*/
2260 pfcp_add_session(pinfo->num, pfcp_session_count++);
2261 }
2262 else if (pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE51) {
2263 /* We have to check if its seid == seid_cp and ip.dst == gsn_ipv4 from the lists, if that is the case then we have to assign
2264 the corresponding session ID */
2265 if ((pfcp_get_frame(pinfo->dst, pfcp_hdr->seid, &frame_seid_cp) == 1)) {
2266 /* Then we have to set its session ID */
2267 session = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_session_table, GUINT_TO_POINTER(frame_seid_cp)))((guint) (gulong) (g_hash_table_lookup(pfcp_session_table, ((
gpointer) (gulong) (frame_seid_cp)))))
;
2268 if (session) {
2269 /* We add the corresponding session to the list so that when a response came we can associate its session ID*/
2270 pfcp_add_session(pinfo->num, session);
2271 }
2272 }
2273 }
2274 }
2275 }
2276}
2277
2278static void
2279dissect_pfcp_reserved(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2280{
2281 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_reserved, tvb, 0, length);
2282}
2283
2284static int dissect_pfcp_string_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int hf)
2285{
2286 char* string_value = NULL((void*)0);
2287 proto_tree_add_item_ret_display_string(tree, hf, tvb, 0, -1, ENC_ASCII0x00000000, pinfo->pool, &string_value);
2288 proto_item_append_text(proto_tree_get_parent(tree), " : %s", string_value);
2289
2290 return tvb_reported_length(tvb);
2291}
2292
2293/* Functions for C-Tag and S-TAG
2294 * See 8.2.94 and 8.2.95
2295 */
2296
2297/* From Tables G-2,3 of IEEE standard 802.1Q-2005 (and I-2,3,7 of 2011 and 2015 revisions) */
2298static const value_string pfcp_vlan_tag_pcp_vals[] = {
2299 { 0, "Best Effort (default), Drop Eligible" },
2300 { 1, "Best Effort (default)" },
2301 { 2, "Critical Applications, Drop Eligible" },
2302 { 3, "Critical Applications" },
2303 { 4, "Voice, < 10ms latency and jitter, Drop Eligible" },
2304 { 5, "Voice, < 10ms latency and jitter" },
2305 { 6, "Internetwork Control" },
2306 { 7, "Network Control" },
2307 { 0, NULL((void*)0) }
2308};
2309
2310static const true_false_string tfs_eligible_ineligible = {
2311 "Eligible",
2312 "Ineligible"
2313};
2314
2315static int decode_pfcp_c_tag(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), int offset)
2316{
2317 static const crumb_spec_t pfcp_c_tag_cvid_crumbs[] = {
2318 { 0, 4 },
2319 { 8, 8 },
2320 { 0, 0 }
2321 };
2322
2323 static int * const pfcp_c_tag_flags[] = {
2324 &hf_pfcp_spare_b7_b3,
2325 &hf_pfcp_c_tag_flags_b2_vid,
2326 &hf_pfcp_c_tag_flags_b1_dei,
2327 &hf_pfcp_c_tag_flags_b0_pcp,
2328 NULL((void*)0)
2329 };
2330 /* Octet 5 Spare VID DEI PCP */
2331 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_c_tag_flags, ENC_BIG_ENDIAN0x00000000);
2332 offset += 1;
2333
2334 // Octet 8 7 6 5 4 3 2 1
2335 // 6 | C-VID value |DEI| PCP value |
2336 // 7 | C-VID value |
2337 proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_c_tag_cvid, tvb, offset << 3, pfcp_c_tag_cvid_crumbs, NULL((void*)0));
2338 proto_tree_add_item(tree, hf_pfcp_c_tag_dei_flag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2339 proto_tree_add_item(tree, hf_pfcp_c_tag_pcp_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2340 offset += 2;
2341
2342 return offset;
2343}
2344
2345static int decode_pfcp_s_tag(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), unsigned offset)
2346{
2347 static const crumb_spec_t pfcp_s_tag_svid_crumbs[] = {
2348 { 0, 4 },
2349 { 8, 8 },
2350 { 0, 0 }
2351 };
2352
2353 static int * const pfcp_s_tag_flags[] = {
2354 &hf_pfcp_spare_b7_b3,
2355 &hf_pfcp_s_tag_flags_b2_vid,
2356 &hf_pfcp_s_tag_flags_b1_dei,
2357 &hf_pfcp_s_tag_flags_b0_pcp,
2358 NULL((void*)0)
2359 };
2360 /* Octet 5 Spare VID DEI PCP */
2361 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_s_tag_flags, ENC_BIG_ENDIAN0x00000000);
2362 offset += 1;
2363
2364 // Octet 8 7 6 5 4 3 2 1
2365 // 6 | S-VID value |DEI| PCP value |
2366 // 7 | S-VID value |
2367 proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_s_tag_svid, tvb, offset << 3, pfcp_s_tag_svid_crumbs, NULL((void*)0));
2368 proto_tree_add_item(tree, hf_pfcp_s_tag_dei_flag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2369 proto_tree_add_item(tree, hf_pfcp_s_tag_pcp_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2370 offset += 2;
2371
2372 return offset;
2373}
2374
2375/*
2376 * 8.2.1 Cause
2377 */
2378static const value_string pfcp_cause_vals[] = {
2379
2380 { 0, "Reserved" },
2381 { 1, "Request accepted(success)" },
2382 { 2, "More Usage Report to send" },
2383 { 3, "Request partially accepted" },
2384 /* 4 - 63 Spare. */
2385 { 64, "Request rejected(reason not specified)" },
2386 { 65, "Session context not found" },
2387 { 66, "Mandatory IE missing" },
2388 { 67, "Conditional IE missing" },
2389 { 68, "Invalid length" },
2390 { 69, "Mandatory IE incorrect" },
2391 { 70, "Invalid Forwarding Policy" },
2392 { 71, "Invalid F-TEID allocation option" },
2393 { 72, "No established PFCP Association" },
2394 { 73, "Rule creation / modification Failure" },
2395 { 74, "PFCP entity in congestion" },
2396 { 75, "No resources available" },
2397 { 76, "Service not supported" },
2398 { 77, "System failure" },
2399 { 78, "Redirection Requested" },
2400 { 79, "All dynamic addresses are occupied" },
2401 { 80, "Unknown Pre-defined Rule" },
2402 { 81, "Unknown Application ID" },
2403 { 82, "L2TP tunnel Establishment failure" },
2404 { 83, "L2TP session Establishment failure" },
2405 { 84, "L2TP tunnel release" },
2406 { 85, "L2TP session release" },
2407 { 86, "PFCP session restoration failure" },
2408 { 87, "L2TP tunnel Establishment failure - Tunnel Auth Failure"},
2409 { 88, "L2TP Session Establishment failure - Session Auth Failure"},
2410 { 89, "L2TP tunnel Establishment failure - LNS not reachable"},
2411 /* 90 to 255 Spare for future use in a response message. */
2412 {0, NULL((void*)0)}
2413};
2414
2415static void
2416dissect_pfcp_cause(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
2417{
2418 uint32_t value;
2419 /* Octet 5 Cause value */
2420 proto_tree_add_item_ret_uint(tree, hf_pfcp2_cause, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
2421 if (g_pfcp_session) {
2422 args->last_cause = (uint8_t)value;
2423 }
2424 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_cause_vals, "Unknown"));
2425}
2426
2427/*
2428 * 8.2.2 Source Interface
2429 */
2430static const value_string pfcp_source_interface_vals[] = {
2431
2432 { 0, "Access" },
2433 { 1, "Core" },
2434 { 2, "SGi-LAN/N6-LAN" },
2435 { 3, "CP-function" },
2436 { 4, "5G VN Internal" },
2437 { 0, NULL((void*)0) }
2438};
2439static int
2440decode_pfcp_source_interface(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, int offset)
2441{
2442 uint32_t value;
2443 /* Octet 5 Spare Interface value */
2444 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2445 proto_tree_add_item_ret_uint(tree, hf_pfcp_source_interface, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
2446 offset += 1;
2447
2448 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_source_interface_vals, "Unknown"));
2449
2450 return offset;
2451
2452}
2453static void
2454dissect_pfcp_source_interface(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2455{
2456 int offset = 0;
2457
2458 offset = decode_pfcp_source_interface(tvb, pinfo, tree, item, offset);
2459
2460 if (offset < length) {
2461 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2462 }
2463
2464}
2465
2466/*
2467 * 8.2.3 F-TEID
2468 */
2469static void
2470dissect_pfcp_f_teid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2471{
2472 int offset = 0;
2473 uint64_t fteid_flags_val;
2474
2475 static int * const pfcp_fteid_flags[] = {
2476 &hf_pfcp_fteid_flg_spare,
2477 &hf_pfcp_fteid_flg_b3_ch_id,
2478 &hf_pfcp_fteid_flg_b2_ch,
2479 &hf_pfcp_fteid_flg_b1_v6,
2480 &hf_pfcp_fteid_flg_b0_v4,
2481 NULL((void*)0)
2482 };
2483 /* Octet 5 Spare Spare Spare Spare CHID CH V6 V4*/
2484 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_fteid_flags, ENC_BIG_ENDIAN0x00000000, &fteid_flags_val);
2485 offset += 1;
2486 /* The following flags are coded within Octet 5:
2487 * Bit 1 - V4: If this bit is set to "1" and the CH bit is not set, then the IPv4 address field shall be present,
2488 * otherwise the IPv4 address field shall not be present.
2489 * Bit 2 - V6: If this bit is set to "1" and the CH bit is not set, then the IPv6 address field shall be present,
2490 * otherwise the IPv6 address field shall not be present.
2491 * Bit 3 - CH (CHOOSE): If this bit is set to "1", then the TEID, IPv4 address and IPv6 address fields shall not be
2492 * present and the UP function shall assign an F-TEID with an IP4 or an IPv6 address if the V4 or V6 bit is set respectively.
2493 * This bit shall only be set by the CP function.
2494 * Bit 4 - CHID (CHOOSE_ID):If this bit is set to "1", then the UP function shall assign the same F-TEID to the
2495 * PDRs requested to be created in a PFCP Session Establishment Request or PFCP Session Modification Request with
2496 * the same CHOOSE ID value.
2497 * This bit may only be set to "1" if the CH bit is set to "1".
2498 * This bit shall only be set by the CP function.
2499 */
2500
2501 if ((fteid_flags_val & 0x4) == 4) {
2502 if ((fteid_flags_val & 0x8) == 8) {
2503 proto_tree_add_item(tree, hf_pfcp_f_teid_ch_id, tvb, offset, 1, ENC_NA0x00000000);
2504 offset += 1;
2505 }
2506 } else {
2507
2508 /* Octet 6 to 9 TEID */
2509 proto_tree_add_item(tree, hf_pfcp_f_teid_teid, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2510 proto_item_append_text(item, "TEID: 0x%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 4));
2511 offset += 4;
2512
2513 if ((fteid_flags_val & 0x1) == 1) {
2514 /* m to (m+3) IPv4 address */
2515 proto_tree_add_item(tree, hf_pfcp_f_teid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2516 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
2517 offset += 4;
2518 }
2519 if ((fteid_flags_val & 0x2) == 2) {
2520 /* p to (p+15) IPv6 address */
2521 proto_tree_add_item(tree, hf_pfcp_f_teid_ipv6, tvb, offset, 16, ENC_NA0x00000000);
2522 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
2523 offset += 16;
2524 }
2525 /* If the value of CH bit is set to "0", but the value of CHID bit is "1" */
2526 if ((fteid_flags_val & 0x8) == 8) {
2527 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
2528 }
2529 }
2530 if (offset < length) {
2531 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2532 }
2533
2534}
2535/*
2536 * 8.2.4 Network Instance
2537 */
2538static int
2539decode_pfcp_network_instance(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), int offset, int length)
2540{
2541
2542 int name_len;
2543
2544 if (length > 0) {
2545 name_len = tvb_get_uint8(tvb, offset);
2546 if (name_len < 0x41) {
2547 /* APN */
2548 uint8_t *apn = NULL((void*)0);
2549
2550 name_len = tvb_get_uint8(tvb, offset);
2551
2552 if (name_len < 0x20) {
2553 apn = tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_APN_STR0x00000054);
2554 } else {
2555 apn = tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_ASCII0x00000000);
2556 }
2557 proto_tree_add_string(tree, hf_pfcp_network_instance, tvb, offset, length, apn);
2558 proto_item_append_text(item, "%s", apn);
2559
2560 } else {
2561 /* Domain name*/
2562 const uint8_t* string_value;
2563 proto_tree_add_item_ret_string(tree, hf_pfcp_network_instance, tvb, offset, length, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
2564 proto_item_append_text(item, "%s", string_value);
2565 }
2566 }
2567
2568 return offset + length;
2569}
2570static void
2571dissect_pfcp_network_instance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item , uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2572{
2573 int offset = 0;
2574
2575 /* Octet 5 Network Instance
2576 * The Network instance field shall be encoded as an OctetString and shall contain an identifier
2577 * which uniquely identifies a particular Network instance (e.g. PDN instance) in the UP function.
2578 * It may be encoded as a Domain Name or an Access Point Name (APN)
2579 */
2580 /* Test for Printable character or length indicator(APN), assume first character of Domain name >= 0x41 */
2581
2582 decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, length);
2583
2584}
2585
2586/*
2587 * 8.2.5 SDF Filter
2588 */
2589static void
2590dissect_pfcp_sdf_filter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2591{
2592 int offset = 0;
2593 uint64_t flags_val;
2594 uint32_t fd_length;
2595 proto_tree *flow_desc_tree, *tos_tree, *spi_tree, *flow_label_tree, *sdf_filter_id_tree;
2596
2597 static int * const pfcp_sdf_filter_flags[] = {
2598 &hf_pfcp_spare_h1,
2599 &hf_pfcp_sdf_filter_flags_b4_bid,
2600 &hf_pfcp_sdf_filter_flags_b3_fl,
2601 &hf_pfcp_sdf_filter_flags_b2_spi,
2602 &hf_pfcp_sdf_filter_flags_b1_ttc,
2603 &hf_pfcp_sdf_filter_flags_b0_fd,
2604 NULL((void*)0)
2605 };
2606 /* Octet 5 Spare FL SPI TTC FD*/
2607 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_sdf_filter_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
2608 offset += 1;
2609 /* Octet 6 Spare*/
2610 proto_tree_add_item(tree, hf_pfcp_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2611 offset += 1;
2612
2613 if ((flags_val & 0x1) == 1) {
2614 /* FD (Flow Description): If this bit is set to "1",
2615 * then the Length of Flow Description and the Flow Description fields shall be present
2616 */
2617 flow_desc_tree = proto_item_add_subtree(item, ett_pfcp_flow_desc);
2618 /* m to (m+1) Length of Flow Description */
2619 proto_tree_add_item_ret_uint(flow_desc_tree, hf_pfcp_flow_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &fd_length);
2620 offset += 2;
2621 /* Flow Description
2622 * The Flow Description field, when present, shall be encoded as an OctetString
2623 * as specified in subclause 5.4.2 of 3GPP TS 29.212
2624 */
2625 proto_tree_add_item(flow_desc_tree, hf_pfcp_flow_desc, tvb, offset, fd_length, ENC_ASCII0x00000000);
2626 offset += fd_length;
2627 }
2628 if ((flags_val & 0x2) == 2) {
2629 /* TTC (ToS Traffic Class): If this bit is set to "1", then the ToS Traffic Class field shall be present */
2630 /* ToS Traffic Class field, when present, shall be encoded as an OctetString on two octets
2631 * as specified in subclause 5.3.15 of 3GPP TS 29.212
2632 */
2633 tos_tree = proto_item_add_subtree(item, ett_pfcp_tos);
2634 proto_tree_add_item(tos_tree, hf_pfcp_traffic_class, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2635 offset += 1;
2636 proto_tree_add_item(tos_tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
2637 offset += 1;
2638 }
2639
2640 if ((flags_val & 0x4) == 4) {
2641 /* SPI (The Security Parameter Index) field, when present, shall be encoded as an OctetString on four octets and shall
2642 * contain the IPsec security parameter index (which is a 32-bit field),
2643 * as specified in subclause 5.3.51 of 3GPP TS 29.212
2644 */
2645 spi_tree = proto_item_add_subtree(item, ett_pfcp_spi);
2646 proto_tree_add_item(spi_tree, hf_pfcp_spi, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2647 offset += 4;
2648 }
2649 if ((flags_val & 0x8) == 8) {
2650 /* FL (Flow Label), when present, shall be encoded as an OctetString on 3 octets as specified in
2651 * subclause 5.3.52 of 3GPP TS 29.212 and shall contain an IPv6 flow label (which is a 20-bit field).
2652 * The bits 8 to 5 of the octet "v" shall be spare and set to zero, and the remaining 20 bits shall
2653 * contain the IPv6 flow label.*/
2654 flow_label_tree = proto_item_add_subtree(item, ett_pfcp_flow_label);
2655 proto_tree_add_bits_item(flow_label_tree, hf_pfcp_flow_label_spare_bit, tvb, (offset<<3), 4, ENC_BIG_ENDIAN0x00000000);
2656 proto_tree_add_item(flow_label_tree, hf_pfcp_flow_label, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
2657 offset += 3;
2658 }
2659 if ((flags_val & 0x10) == 16) {
2660 /* The SDF Filter ID, when present, shall be encoded as an Unsigned32 binary integer value.
2661 * It shall uniquely identify an SDF Filter among all the SDF Filters provisioned for a given PFCP Session. */
2662 sdf_filter_id_tree = proto_item_add_subtree(item, ett_pfcp_sdf_filter_id);
2663 proto_tree_add_item(sdf_filter_id_tree, hf_pfcp_sdf_filter_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
2664 offset += 4;
2665 }
2666
2667 if (offset < length) {
2668 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2669 }
2670}
2671/*
2672 * 8.2.6 Application ID
2673 */
2674static void
2675dissect_pfcp_application_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2676{
2677 int offset = 0;
2678
2679 /* Octet 5 to (n+4) Application Identifier
2680 * The Application Identifier shall be encoded as an OctetString (see 3GPP TS 29.212)
2681 */
2682 if (tvb_ascii_isprint(tvb, offset, length))
2683 {
2684 const uint8_t* string_value;
2685 proto_tree_add_item_ret_string(tree, hf_pfcp_application_id_str, tvb, offset, length, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
2686 proto_item_append_text(item, "%s", string_value);
2687 }
2688 else
2689 {
2690 proto_tree_add_item(tree, hf_pfcp_application_id, tvb, offset, length, ENC_NA0x00000000);
2691 }
2692}
2693/*
2694 * 8.2.7 Gate Status
2695 */
2696static const value_string pfcp_gate_status_vals[] = {
2697 { 0, "OPEN" },
2698 { 1, "CLOSED" },
2699 { 0, NULL((void*)0) }
2700};
2701
2702
2703static void
2704dissect_pfcp_gate_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2705{
2706 int offset = 0;
2707
2708 static int * const pfcp_gate_status_flags[] = {
2709 &hf_pfcp_gate_status_b3b2_ulgate,
2710 &hf_pfcp_gate_status_b0b1_dlgate,
2711 NULL((void*)0)
2712 };
2713 /* Octet 5 Spare UL Gate DL Gate */
2714 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_gate_status_flags, ENC_BIG_ENDIAN0x00000000);
2715 offset += 1;
2716
2717 if (offset < length) {
2718 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2719 }
2720
2721}
2722
2723
2724/*
2725 * 8.2.8 MBR
2726 */
2727static void
2728dissect_pfcp_mbr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2729{
2730 int offset = 0;
2731 int len1 = (length != 10) ? length/2 : 5;
2732
2733 /* In case length is not in accordance with documentation */
2734 if ( length != 10) {
2735 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
2736 }
2737
2738 /* 5 to 9 UL MBR
2739 * The UL/DL MBR fields shall be encoded as kilobits per second (1 kbps = 1000 bps) in binary value
2740 */
2741 proto_tree_add_item(tree, hf_pfcp_ul_mbr, tvb, offset, len1, ENC_BIG_ENDIAN0x00000000);
2742 offset += len1;
2743
2744 /* 10 to 14 DL MBR */
2745 proto_tree_add_item(tree, hf_pfcp_dl_mbr, tvb, offset, len1, ENC_BIG_ENDIAN0x00000000);
2746 offset += len1;
2747
2748 if (offset < length) {
2749 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2750 }
2751
2752}
2753
2754/*
2755 * 8.2.9 GBR
2756 */
2757static void
2758dissect_pfcp_gbr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2759{
2760 int offset = 0;
2761 int len1 = (length != 10) ? length/2 : 5;
2762
2763 /* In case length is not in accordance with documentation */
2764 if ( length != 10) {
2765 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
2766 }
2767
2768 /* 5 to 9 UL GBR
2769 * The UL/DL MBR fields shall be encoded as kilobits per second (1 kbps = 1000 bps) in binary value
2770 */
2771 proto_tree_add_item(tree, hf_pfcp_ul_gbr, tvb, offset, len1, ENC_BIG_ENDIAN0x00000000);
2772 offset += len1;
2773
2774 /* 10 to 14 DL GBR */
2775 proto_tree_add_item(tree, hf_pfcp_dl_gbr, tvb, offset, len1, ENC_BIG_ENDIAN0x00000000);
2776 offset += len1;
2777
2778 if (offset < length) {
2779 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2780 }
2781
2782}
2783
2784/*
2785 * 8.2.10 QER Correlation ID
2786 */
2787static void
2788dissect_pfcp_qer_correlation_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2789{
2790 int offset = 0;
2791 uint32_t value;
2792 /* 5 to 8 QER Correlation ID value */
2793 proto_tree_add_item_ret_uint(tree, hf_pfcp_qer_correlation_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
2794 offset += 4;
2795
2796 proto_item_append_text(item, "%u", value);
2797
2798 if (offset < length) {
2799 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2800 }
2801
2802}
2803/*
2804 * 8.2.11 Precedence
2805 */
2806static void
2807dissect_pfcp_precedence(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2808{
2809 int offset = 0;
2810 uint32_t value;
2811 /* Octet 5 5 to 8 Precedence value */
2812 proto_tree_add_item_ret_uint(tree, hf_pfcp_precedence, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
2813 offset += 4;
2814
2815 proto_item_append_text(item, "%u", value);
2816
2817 if (offset < length) {
2818 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2819 }
2820
2821}
2822/*
2823 * 8.2.12 Transport Level Marking
2824 */
2825static void
2826dissect_pfcp_transport_level_marking(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2827{
2828 int offset = 0;
2829 proto_item *dscp_it;
2830 const char *dscp_str;
2831 uint32_t tos, mask;
2832
2833 /* Octet 5 to 6 ToS/Traffic Class
2834 * The ToS/Traffic Class shall be encoded on two octets as an OctetString.
2835 * The first octet shall contain the IPv4 Type-of-Service or the IPv6 Traffic-Class field and the second octet shall contain the ToS/Traffic Class mask field
2836 */
2837 proto_tree_add_item_ret_uint(tree, hf_pfcp_traffic_class, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &tos);
2838 offset += 1;
2839 proto_tree_add_item_ret_uint(tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &mask);
2840 offset += 1;
2841
2842 /* display DSCP value */
2843 dscp_str = val_to_str_ext_const(((tos & mask) >> 2), &dscp_vals_ext, "Unknown");
2844 dscp_it = proto_tree_add_string(tree, hf_pfcp_traffic_dscp, tvb, 0, 2, dscp_str);
2845 proto_item_set_generated(dscp_it);
2846
2847 if (offset < length) {
2848 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2849 }
2850
2851}
2852
2853/*
2854 * 8.2.13 Volume Threshold
2855 */
2856static void
2857dissect_pfcp_volume_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2858{
2859 int offset = 0;
2860 uint64_t flags_val;
2861
2862 static int * const pfcp_volume_threshold_flags[] = {
2863 &hf_pfcp_spare_b7_b3,
2864 &hf_pfcp_volume_threshold_b2_dlvol,
2865 &hf_pfcp_volume_threshold_b1_ulvol,
2866 &hf_pfcp_volume_threshold_b0_tovol,
2867 NULL((void*)0)
2868 };
2869 /* Octet 5 Spare DLVOL ULVOL TOVOL*/
2870 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_volume_threshold_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
2871 offset += 1;
2872
2873 /* The Total Volume, Uplink Volume and Downlink Volume fields shall be encoded as an Unsigned64 binary integer value.
2874 * They shall contain the total, uplink or downlink number of octets respectively.
2875 */
2876 if ((flags_val & 0x1) == 1) {
2877 /* m to (m+7) Total Volume
2878 * TOVOL: If this bit is set to "1", then the Total Volume field shall be present
2879 */
2880 proto_tree_add_item(tree, hf_pfcp_volume_threshold_tovol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
2881 offset += 8;
2882 }
2883 if ((flags_val & 0x2) == 2) {
2884 /* p to (p+7) Uplink Volume
2885 * ULVOL: If this bit is set to "1", then the Uplink Volume field shall be present
2886 */
2887 proto_tree_add_item(tree, hf_pfcp_volume_threshold_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
2888 offset += 8;
2889 }
2890 if ((flags_val & 0x4) == 4) {
2891 /* q to (q+7) Downlink Volume
2892 * DLVOL: If this bit is set to "1", then the Downlink Volume field shall be present
2893 */
2894 proto_tree_add_item(tree, hf_pfcp_volume_threshold_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
2895 offset += 8;
2896 }
2897
2898 if (offset < length) {
2899 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2900 }
2901}
2902/*
2903 * 8.2.14 Time Threshold
2904 */
2905static void
2906dissect_pfcp_time_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2907{
2908 int offset = 0;
2909 unsigned value;
2910
2911 /* Octet 5 to 8 Time Threshold
2912 * The Time Threshold field shall be encoded as an Unsigned32 binary integer value.
2913 * It shall contain the duration in seconds.
2914 */
2915 proto_tree_add_item_ret_uint(tree, hf_pfcp_time_threshold, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
2916 offset += 4;
2917
2918 proto_item_append_text(item, "%u s", value);
2919
2920 if (offset < length) {
2921 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2922 }
2923
2924}
2925
2926/*
2927 * 8.2.15 Monitoring Time
2928 */
2929static void
2930dissect_pfcp_monitoring_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2931{
2932 char *time_str;
2933 int offset = 0;
2934
2935 /* The Monitoring Time field shall indicate the monitoring time in UTC time.
2936 * Octets 5 to 8 shall be encoded in the same format as the first four octets
2937 * of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905.
2938 */
2939 proto_tree_add_item_ret_time_string(tree, hf_pfcp_monitoring_time, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
2940 proto_item_append_text(item, "%s", time_str);
2941 offset += 4;
2942
2943 if (offset < length) {
2944 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2945 }
2946
2947}
2948/*
2949 * 8.2.16 Subsequent Volume Threshold
2950 */
2951static void
2952dissect_pfcp_subseq_volume_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
2953{
2954 int offset = 0;
2955 uint64_t flags_val;
2956
2957 static int * const pfcp_subseq_volume_threshold_flags[] = {
2958 &hf_pfcp_spare_b7_b3,
2959 &hf_pfcp_subseq_volume_threshold_b2_dlvol,
2960 &hf_pfcp_subseq_volume_threshold_b1_ulvol,
2961 &hf_pfcp_subseq_volume_threshold_b0_tovol,
2962 NULL((void*)0)
2963 };
2964 /* Octet 5 Spare DLVOL ULVOL TOVOL*/
2965 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_subseq_volume_threshold_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
2966 offset += 1;
2967
2968 /* The Total Volume, Uplink Volume and Downlink Volume fields shall be encoded as an Unsigned64 binary integer value.
2969 * They shall contain the total, uplink or downlink number of octets respectively.
2970 */
2971 if ((flags_val & 0x1) == 1) {
2972 /* m to (m+7) Total Volume
2973 * TOVOL: If this bit is set to "1", then the Total Volume field shall be present
2974 */
2975 proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_tovol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
2976 offset += 8;
2977 }
2978 if ((flags_val & 0x2) == 2) {
2979 /* p to (p+7) Uplink Volume
2980 * ULVOL: If this bit is set to "1", then the Uplink Volume field shall be present
2981 */
2982 proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
2983 offset += 8;
2984 }
2985 if ((flags_val & 0x4) == 4) {
2986 /* q to (q+7) Downlink Volume
2987 * DLVOL: If this bit is set to "1", then the Downlink Volume field shall be present
2988 */
2989 proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
2990 offset += 8;
2991 }
2992
2993 if (offset < length) {
2994 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2995 }
2996}
2997
2998/*
2999 * 8.2.17 Subsequent Time Threshold
3000 */
3001static void
3002dissect_pfcp_subsequent_time_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3003{
3004 int offset = 0;
3005 uint32_t value;
3006 /* 5 to 8 Subsequent Time Threshold */
3007 proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_time_threshold, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
3008 offset += 4;
3009
3010 proto_item_append_text(item, "%u s", value);
3011
3012 if (offset < length) {
3013 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3014 }
3015}
3016/*
3017 * 8.2.18 Inactivity Detection Time
3018 */
3019static void
3020dissect_pfcp_inactivity_detection_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3021{
3022 int offset = 0;
3023 uint32_t value;
3024 /* 5 to 8 Inactivity Detection Time */
3025 proto_tree_add_item_ret_uint(tree, hf_pfcp_inactivity_detection_time, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
3026 offset += 4;
3027
3028 proto_item_append_text(item, "%u s", value);
3029
3030 if (offset < length) {
3031 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3032 }
3033}
3034
3035/*
3036 * 8.2.19 Reporting Triggers
3037 */
3038static void
3039dissect_pfcp_reporting_triggers(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3040{
3041 int offset = 0;
3042
3043 static int * const pfcp_reporting_triggers_o5_flags[] = {
3044 &hf_pfcp_reporting_triggers_o5_b7_liusa,
3045 &hf_pfcp_reporting_triggers_o5_b6_droth,
3046 &hf_pfcp_reporting_triggers_o5_b5_stopt,
3047 &hf_pfcp_reporting_triggers_o5_b4_start,
3048 &hf_pfcp_reporting_triggers_o5_b3_quhti,
3049 &hf_pfcp_reporting_triggers_o5_b2_timth,
3050 &hf_pfcp_reporting_triggers_o5_b1_volth,
3051 &hf_pfcp_reporting_triggers_o5_b0_perio,
3052 NULL((void*)0)
3053 };
3054 /* Octet 5 LIUSA DROTH STOPT START QUHTI TIMTH VOLTH PERIO */
3055 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_triggers_o5_flags, ENC_BIG_ENDIAN0x00000000);
3056 offset++;
3057
3058 if (offset == length) {
3059 return;
3060 }
3061
3062 static int * const pfcp_reporting_triggers_o6_flags[] = {
3063 &hf_pfcp_reporting_triggers_o6_b7_quvti,
3064 &hf_pfcp_reporting_triggers_o6_b6_ipmjl,
3065 &hf_pfcp_reporting_triggers_o6_b5_evequ,
3066 &hf_pfcp_reporting_triggers_o6_b4_eveth,
3067 &hf_pfcp_reporting_triggers_o6_b3_macar,
3068 &hf_pfcp_reporting_triggers_o6_b2_envcl,
3069 &hf_pfcp_reporting_triggers_o6_b1_timqu,
3070 &hf_pfcp_reporting_triggers_o6_b0_volqu,
3071 NULL((void*)0)
3072 };
3073 /* Octet 6 QUVTI IPMJL EVEQU EVETH MACAR ENVCL TIMQU VOLQU */
3074 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_triggers_o6_flags, ENC_BIG_ENDIAN0x00000000);
3075 offset++;
3076
3077 if (offset == length) {
3078 return;
3079 }
3080
3081 static int * const pfcp_reporting_triggers_o7_flags[] = {
3082 &hf_pfcp_spare_b7_b2,
3083 &hf_pfcp_reporting_triggers_o7_b1_upint,
3084 &hf_pfcp_reporting_triggers_o7_b0_reemr,
3085 NULL((void*)0)
3086 };
3087 /* Octet 7 Spare Spare Spare Spare Spare Spare UPINT REEMR */
3088 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_triggers_o7_flags, ENC_BIG_ENDIAN0x00000000);
3089 offset++;
3090
3091 if (offset == length) {
3092 return;
3093 }
3094
3095
3096 if (offset < length) {
3097 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3098 }
3099
3100}
3101
3102/*
3103 * 8.2.20 Redirect Information
3104 */
3105static const value_string pfcp_redirect_address_type_vals[] = {
3106
3107 { 0, "IPv4 address" },
3108 { 1, "IPv6 address" },
3109 { 2, "URL" },
3110 { 3, "SIP URI" },
3111 { 4, "IPv4 and IPv6 addresses" },
3112 { 5, "Port" },
3113 { 6, "IPv4 address and Port" },
3114 { 7, "IPv6 address and Port" },
3115 { 8, "IPv4 and IPv6 addresses and Port" },
3116 { 0, NULL((void*)0) }
3117};
3118
3119static void
3120dissect_pfcp_redirect_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3121{
3122 int offset = 0;
3123 uint32_t redirect_address_type, addr_len, other_addr_len;
3124
3125 /* Octet Spare Redirect Address Type */
3126 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3127 proto_tree_add_item_ret_uint(tree, hf_pfcp_redirect_address_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &redirect_address_type);
3128 offset++;
3129
3130 /* If the Redirect Address Type is set to Port, the Redirect Address Server Address shall not be present */
3131 if(!(redirect_address_type == 5)) {
3132 /* 6-7 Redirect Server Address Length=a */
3133 proto_tree_add_item_ret_uint(tree, hf_pfcp_redirect_server_addr_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &addr_len);
3134 offset+=2;
3135
3136 /* 8-(8+a-1) Redirect Server Address */
3137 proto_tree_add_item(tree, hf_pfcp_redirect_server_address, tvb, offset, addr_len, ENC_UTF_80x00000002 | ENC_NA0x00000000);
3138 offset += addr_len;
3139
3140 /* - If the Redirect Address type is set to "IPv4 and IPv6 address", the Redirect Information IE shall include an IPv4 address
3141 * and an IPv6 address in the Redirect Server Address IE and Other Redirect Server Address.
3142 * - When Redirect Address Type is set to "IPv4 and IPv6 addresses and Port", the Other Redirect Server Address shall also be present.
3143 */
3144 if((redirect_address_type == 4) || (redirect_address_type == 8)) {
3145 /* p-(p+1) Other Redirect Server Address Length=b */
3146 proto_tree_add_item_ret_uint(tree, hf_pfcp_other_redirect_server_addr_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &other_addr_len);
3147 offset+=2;
3148
3149 /* (p+2)-(p+2+b-1) Other Redirect Server Address */
3150 proto_tree_add_item(tree, hf_pfcp_other_redirect_server_address, tvb, offset, other_addr_len, ENC_UTF_80x00000002 | ENC_NA0x00000000);
3151 offset += other_addr_len;
3152 }
3153 }
3154
3155 if((redirect_address_type == 5) || (redirect_address_type == 6) || (redirect_address_type == 7) || (redirect_address_type == 8)) {
3156 /* m to (m+1) Port */
3157 proto_tree_add_item(tree, hf_pfcp_redirect_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
3158 offset+=2;
3159 }
3160
3161 if (offset < length) {
3162 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3163 }
3164}
3165/*
3166 * 8.2.21 Report Type
3167 */
3168static void
3169dissect_pfcp_report_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3170{
3171 int offset = 0;
3172
3173 static int * const pfcp_report_type_flags[] = {
3174 &hf_pfcp_spare_b7,
3175 &hf_pfcp_report_type_b6_uisr,
3176 &hf_pfcp_report_type_b5_sesr,
3177 &hf_pfcp_report_type_b4_tmir,
3178 &hf_pfcp_report_type_b3_upir,
3179 &hf_pfcp_report_type_b2_erir,
3180 &hf_pfcp_report_type_b1_usar,
3181 &hf_pfcp_report_type_b0_dldr,
3182 NULL((void*)0)
3183 };
3184 /* Octet 5 Spare UISR SESR TMIR UPIR ERIR USAR DLDR */
3185 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_report_type_flags, ENC_BIG_ENDIAN0x00000000);
3186 offset += 1;
3187
3188 if (offset < length) {
3189 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3190 }
3191
3192}
3193/*
3194 * 8.2.22 Offending IE
3195 */
3196static void
3197dissect_pfcp_offending_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3198{
3199 uint32_t value;
3200 /* Octet 5 to 6 Type of the offending IE */
3201 proto_tree_add_item_ret_uint(tree, hf_pfcp_offending_ie, tvb, 0, 2, ENC_BIG_ENDIAN0x00000000, &value);
3202
3203 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_ie_type, "Unknown"));
3204
3205}
3206/*
3207 * 8.2.23 Forwarding Policy
3208 */
3209static void
3210dissect_pfcp_forwarding_policy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3211{
3212 int offset = 0;
3213 uint32_t id_len;
3214
3215 /* Octet Forwarding Policy Identifier Length */
3216 proto_tree_add_item_ret_uint(tree, hf_pfcp_forwarding_policy_id_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &id_len);
3217 offset += 1;
3218
3219 proto_tree_add_item(tree, hf_pfcp_forwarding_policy_id, tvb, offset, id_len, ENC_NA0x00000000);
3220 offset += id_len;
3221
3222 if (offset < length) {
3223 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3224 }
3225
3226}
3227/*
3228 * 8.2.24 Destination Interface
3229 */
3230static const value_string pfcp_dst_interface_vals[] = {
3231
3232 { 0, "Access" },
3233 { 1, "Core" },
3234 { 2, "SGi-LAN/N6-LAN" },
3235 { 3, "CP- Function" },
3236 { 4, "LI Function" },
3237 { 5, "5G VN Internal" },
3238 { 0, NULL((void*)0) }
3239};
3240
3241static int
3242decode_pfcp_destination_interface(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), int offset, int length)
3243{
3244 uint32_t value;
3245
3246 /* Octet 5 Spare Interface value*/
3247 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3248 proto_tree_add_item_ret_uint(tree, hf_pfcp_dst_interface, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
3249 offset++;
3250
3251 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_dst_interface_vals, "Unknown"));
3252
3253 if (offset < length) {
3254 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3255 }
3256
3257 return length;
3258}
3259static void
3260dissect_pfcp_destination_interface(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3261{
3262 int offset = 0;
3263
3264 decode_pfcp_destination_interface(tvb, pinfo, tree, item, offset, length);
3265
3266}
3267/*
3268 * 8.2.25 UP Function Features
3269 */
3270static void
3271dissect_pfcp_up_function_features(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3272{
3273 int offset = 0;
3274
3275 static int * const pfcp_up_function_features_o5_flags[] = {
3276 &hf_pfcp_up_function_features_o5_b7_treu,
3277 &hf_pfcp_up_function_features_o5_b6_heeu,
3278 &hf_pfcp_up_function_features_o5_b5_pfdm,
3279 &hf_pfcp_up_function_features_o5_b4_ftup,
3280 &hf_pfcp_up_function_features_o5_b3_trst,
3281 &hf_pfcp_up_function_features_o5_b2_dlbd,
3282 &hf_pfcp_up_function_features_o5_b1_ddnd,
3283 &hf_pfcp_up_function_features_o5_b0_bucp,
3284 NULL((void*)0)
3285 };
3286 /* Octet 5 TREU HEEU PFDM FTUP TRST DLBD DDND BUCP */
3287 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o5_flags, ENC_BIG_ENDIAN0x00000000);
3288 offset++;
3289
3290 if (offset == length) {
3291 return;
3292 }
3293
3294 static int * const pfcp_up_function_features_o6_flags[] = {
3295 &hf_pfcp_up_function_features_o6_b7_epfar,
3296 &hf_pfcp_up_function_features_o6_b6_pfde,
3297 &hf_pfcp_up_function_features_o6_b5_frrt,
3298 &hf_pfcp_up_function_features_o6_b4_trace,
3299 &hf_pfcp_up_function_features_o6_b3_quoac,
3300 &hf_pfcp_up_function_features_o6_b2_udbc,
3301 &hf_pfcp_up_function_features_o6_b1_pdiu,
3302 &hf_pfcp_up_function_features_o6_b0_empu,
3303 NULL((void*)0)
3304 };
3305 /* Octet 6 EPFAR PFDE FRRT TRACE QUOAC UDBC PDIU EMPU */
3306 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o6_flags, ENC_BIG_ENDIAN0x00000000);
3307 offset++;
3308
3309 if (offset == length) {
3310 return;
3311 }
3312
3313 static int * const pfcp_up_function_features_o7_flags[] = {
3314 &hf_pfcp_up_function_features_o7_b7_gcom,
3315 &hf_pfcp_up_function_features_o7_b6_bundl,
3316 &hf_pfcp_up_function_features_o7_b5_mte_n4,
3317 &hf_pfcp_up_function_features_o7_b4_mnop,
3318 &hf_pfcp_up_function_features_o7_b3_sset,
3319 &hf_pfcp_up_function_features_o7_b2_ueip,
3320 &hf_pfcp_up_function_features_o7_b1_adpdp,
3321 &hf_pfcp_up_function_features_o7_b0_dpdra,
3322 NULL((void*)0)
3323 };
3324 /* Octet 7 GCOM BUNDL MTE N4 MNOP SSET UEIP ADPDP DPDRA */
3325 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o7_flags, ENC_BIG_ENDIAN0x00000000);
3326 offset++;
3327
3328 if (offset == length) {
3329 return;
3330 }
3331
3332 static int * const pfcp_up_function_features_o8_flags[] = {
3333 &hf_pfcp_up_function_features_o8_b7_mptcp,
3334 &hf_pfcp_up_function_features_o8_b6_tsn,
3335 &hf_pfcp_up_function_features_o8_b5_ip6pl,
3336 &hf_pfcp_up_function_features_o8_b4_iptv,
3337 &hf_pfcp_up_function_features_o8_b3_norp,
3338 &hf_pfcp_up_function_features_o8_b2_vtime,
3339 &hf_pfcp_up_function_features_o8_b1_rttl,
3340 &hf_pfcp_up_function_features_o8_b0_mpas,
3341 NULL((void*)0)
3342 };
3343 /* Octet 8 MPTCP TSN IP6PL IPTV NORP VTIME RTTL MPAS */
3344 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o8_flags, ENC_BIG_ENDIAN0x00000000);
3345 offset += 1;
3346
3347 if (offset == length) {
3348 return;
3349 }
3350
3351 static int * const pfcp_up_function_features_o9_flags[] = {
3352 &hf_pfcp_up_function_features_o9_b7_rds,
3353 &hf_pfcp_up_function_features_o9_b6_ddds,
3354 &hf_pfcp_up_function_features_o9_b5_ethar,
3355 &hf_pfcp_up_function_features_o9_b4_ciot,
3356 &hf_pfcp_up_function_features_o9_b3_mt_edt,
3357 &hf_pfcp_up_function_features_o9_b2_gpqm,
3358 &hf_pfcp_up_function_features_o9_b1_qfqm,
3359 &hf_pfcp_up_function_features_o9_b0_atsss_ll,
3360 NULL((void*)0)
3361 };
3362 /* Octet 9 RDS DDDS ETHAR CIOT MT-EDT GPQM QFQM ATSSS-LL */
3363 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o9_flags, ENC_BIG_ENDIAN0x00000000);
3364 offset += 1;
3365
3366 if (offset == length) {
3367 return;
3368 }
3369
3370 static int * const pfcp_up_function_features_o10_flags[] = {
3371 &hf_pfcp_up_function_features_o10_b7_dnsts,
3372 &hf_pfcp_up_function_features_o10_b6_iprep,
3373 &hf_pfcp_up_function_features_o10_b5_resps,
3374 &hf_pfcp_up_function_features_o10_b4_upber,
3375 &hf_pfcp_up_function_features_o10_b3_l2tp,
3376 &hf_pfcp_up_function_features_o10_b2_nspoc,
3377 &hf_pfcp_up_function_features_o10_b1_quasf,
3378 &hf_pfcp_up_function_features_o10_b0_rttwp,
3379 NULL((void*)0)
3380 };
3381 /* Octet 10 DNSTS IPREP RESPS UPBER L2TP NSPOC QUOSF RTTWP */
3382 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o10_flags, ENC_BIG_ENDIAN0x00000000);
3383 offset += 1;
3384
3385 if (offset == length) {
3386 return;
3387 }
3388
3389 static int * const pfcp_up_function_features_o11_flags[] = {
3390 &hf_pfcp_up_function_features_o11_b7_mpquic,
3391 &hf_pfcp_up_function_features_o11_b6_afsfc,
3392 &hf_pfcp_up_function_features_o11_b5_upidp,
3393 &hf_pfcp_up_function_features_o11_b4_ratp,
3394 &hf_pfcp_up_function_features_o11_b3_eppi,
3395 &hf_pfcp_up_function_features_o11_b2_psuprm,
3396 &hf_pfcp_up_function_features_o11_b1_mbsn4,
3397 &hf_pfcp_up_function_features_o11_b0_drqos,
3398 NULL((void*)0)
3399 };
3400 /* Octet 11 MPQUIC AFSFC UPIDP RATP EPPI PSUPRM MBSN4 DRQOS */
3401 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o11_flags, ENC_BIG_ENDIAN0x00000000);
3402 offset += 1;
3403
3404 if (offset == length) {
3405 return;
3406 }
3407
3408 static int * const pfcp_up_function_features_o12_flags[] = {
3409 &hf_pfcp_up_function_features_o12_b7_eml4s,
3410 &hf_pfcp_up_function_features_o12_b6_detnet,
3411 &hf_pfcp_up_function_features_o12_b5_qmcon,
3412 &hf_pfcp_up_function_features_o12_b4_n6jedb,
3413 &hf_pfcp_up_function_features_o12_b3_drtsc,
3414 &hf_pfcp_up_function_features_o12_b2_tscts,
3415 &hf_pfcp_up_function_features_o12_b1_dbdm,
3416 &hf_pfcp_up_function_features_o12_b0_redsm,
3417 NULL((void*)0)
3418 };
3419 /* Octet 12 EML4S DETNET QMCON N6JEDB DRTSC TSCTS DBDM REDSM */
3420 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o12_flags, ENC_BIG_ENDIAN0x00000000);
3421 offset += 1;
3422
3423 if (offset == length) {
3424 return;
3425 }
3426
3427 static int * const pfcp_up_function_features_o13_flags[] = {
3428 &hf_pfcp_up_function_features_o13_b7_un6tu,
3429 &hf_pfcp_up_function_features_o13_b6_umn6ip,
3430 &hf_pfcp_up_function_features_o13_b5_upsbies,
3431 &hf_pfcp_up_function_features_o13_b4_mtsdt,
3432 &hf_pfcp_up_function_features_o13_b3_edbnc,
3433 &hf_pfcp_up_function_features_o13_b2_qmdrm,
3434 &hf_pfcp_up_function_features_o13_b1_cntl,
3435 &hf_pfcp_up_function_features_o13_b0_pdusm,
3436 NULL((void*)0)
3437 };
3438 /* Octet 13 UN6TU UMN6IP UPSBIES MT-SDT EDBNC QMDRM CN-TL PDUSM */
3439 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o13_flags, ENC_BIG_ENDIAN0x00000000);
3440 offset += 1;
3441
3442 if (offset == length) {
3443 return;
3444 }
3445
3446 static int * const pfcp_up_function_features_o14_flags[] = {
3447 &hf_pfcp_spare_b7_b6,
3448 &hf_pfcp_up_function_features_o14_b0_mbsch,
3449 NULL((void*)0)
3450 };
3451 /* Octet 13 Spare MBSCH */
3452 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o14_flags, ENC_BIG_ENDIAN0x00000000);
3453 offset += 1;
3454
3455 if (offset == length) {
3456 return;
3457 }
3458 if (offset < length) {
3459 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3460 }
3461
3462}
3463/*
3464 * 8.2.26 Apply Action
3465 */
3466static void
3467dissect_pfcp_apply_action(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3468{
3469 int offset = 0;
3470
3471 static int * const pfcp_apply_action_o5_flags[] = {
3472 &hf_pfcp_apply_action_flags_o5_b7_dfrt,
3473 &hf_pfcp_apply_action_flags_o5_b6_ipmd,
3474 &hf_pfcp_apply_action_flags_o5_b5_ipma,
3475 &hf_pfcp_apply_action_flags_o5_b4_dupl,
3476 &hf_pfcp_apply_action_flags_o5_b3_nocp,
3477 &hf_pfcp_apply_action_flags_o5_b2_buff,
3478 &hf_pfcp_apply_action_flags_o5_b1_forw,
3479 &hf_pfcp_apply_action_flags_o5_b0_drop,
3480 NULL((void*)0)
3481 };
3482 /* Octet 5 DFRT IPMD IPMA DUPL NOCP BUFF FORW DROP */
3483 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_apply_action_o5_flags, ENC_BIG_ENDIAN0x00000000);
3484 offset += 1;
3485
3486 if (offset == length) {
3487 return;
3488 }
3489
3490 static int * const pfcp_apply_action_o6_flags[] = {
3491 &hf_pfcp_spare_b7_b5,
3492 &hf_pfcp_apply_action_flags_o6_b4_mbsu,
3493 &hf_pfcp_apply_action_flags_o6_b3_fssm,
3494 &hf_pfcp_apply_action_flags_o6_b2_ddpn,
3495 &hf_pfcp_apply_action_flags_o6_b1_bdpn,
3496 &hf_pfcp_apply_action_flags_o6_b0_edrt,
3497 NULL((void*)0)
3498 };
3499 /* Octet 6 Spare MBSU FSSM DDPN BDPN EDRT */
3500 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_apply_action_o6_flags, ENC_BIG_ENDIAN0x00000000);
3501 offset += 1;
3502
3503 if (offset < length) {
3504 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3505 }
3506
3507}
3508/*
3509 * 8.2.27 Downlink Data Service Information
3510 */
3511static void
3512dissect_pfcp_dl_data_service_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3513{
3514 int offset = 0;
3515 uint64_t flags;
3516
3517 static int * const pfcp_dl_data_service_inf_flags[] = {
3518 &hf_pfcp_spare_b7_b3,
3519 &hf_pfcp_dl_data_service_inf_b2_dlpsi,
3520 &hf_pfcp_dl_data_service_inf_b1_qfii,
3521 &hf_pfcp_dl_data_service_inf_b0_ppi,
3522 NULL((void*)0)
3523 };
3524 /* Octet 5 Spare DLPSI QFII PPI */
3525 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_dl_data_service_inf_flags, ENC_BIG_ENDIAN0x00000000, &flags);
3526 offset += 1;
3527
3528 /* The PPI flag in octet 5 indicates whether the Paging Policy Indication value in octet 'm' shall be present */
3529 if ((flags & 0x1) == 1) {
3530 /* m Spare Paging Policy Indication value
3531 * encoded as the DSCP in TOS (IPv4) or TC (IPv6) information received in the IP payload of the GTP-U packet
3532 * from the PGW (see IETF RFC 2474
3533 */
3534 proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3535 proto_tree_add_item(tree, hf_pfcp_paging_policy_indication, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3536 offset++;
3537 }
3538
3539 /* The QFII flag in octet 5 indicates whether the QFI value in octet 'p' shall be present */
3540 if ((flags & 0x2) == 2) {
3541 /* m Spare QFI value
3542 * encoded as the octet 5 of the QFI IE in subclause 8.2.89.
3543 */
3544 proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3545 proto_tree_add_item(tree, hf_pfcp_qfi, tvb, offset, 1, ENC_NA0x00000000);
3546 offset++;
3547 }
3548
3549 /* The DLPSI flag in octet 5 indicates whether the DL Data Packet Size value in octet 'q' to 'q+1' shall be present */
3550 if ((flags & 0x4) == 4) {
3551 /*
3552 * DL Data Packet Size
3553 */
3554 proto_tree_add_item(tree, hf_pfcp_dldatapacketsize, tvb, offset, 2, ENC_NA0x00000000);
3555 offset += 2;
3556 }
3557
3558 if (offset < length) {
3559 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3560 }
3561
3562}
3563/*
3564 * 8.2.28 Downlink Data Notification Delay
3565 */
3566static void
3567dissect_pfcp_dl_data_notification_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3568{
3569 int offset = 0;
3570 uint32_t value;
3571 /* Octet 5 Delay Value in integer multiples of 50 millisecs, or zero */
3572 proto_tree_add_item_ret_uint(tree, hf_pfcp_dl_data_notification_delay, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
3573 offset += 1;
3574
3575 proto_item_append_text(item, "%u ms", value * 50);
3576
3577 if (offset < length) {
3578 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3579 }
3580}
3581
3582/*
3583 * 8.2.29 DL Buffering Duration
3584 */
3585static const value_string pfcp_timer_unit_vals[] = {
3586 { 0, "value is incremented in multiples of 2 seconds" },
3587 { 1, "value is incremented in multiples of 1 minute" },
3588 { 2, "value is incremented in multiples of 10 minutes" },
3589 { 3, "value is incremented in multiples of 1 hour" },
3590 { 4, "value is incremented in multiples of 10 hour" },
3591 { 5, "values shall be interpreted as multiples of 1 minute(version 14.0.0)" },
3592 { 6, "values shall be interpreted as multiples of 1 minute(version 14.0.0)" },
3593 { 7, "value indicates that the timer is infinite" },
3594 { 0, NULL((void*)0) }
3595};
3596
3597static void
3598dissect_pfcp_dl_buffering_dur(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3599{
3600 int offset = 0;
3601 uint32_t unit, value;
3602
3603 /* Octet 5 Timer unit Timer value */
3604 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &unit);
3605 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
3606 offset++;
3607
3608 if ((unit == 0) && (value == 0)) {
3609 proto_item_append_text(item, " Stopped");
3610 } else {
3611 switch (unit) {
3612 case 0:
3613 proto_item_append_text(item, "%u s", value * 2);
3614 break;
3615 case 1:
3616 proto_item_append_text(item, "%u min", value);
3617 break;
3618 case 2:
3619 proto_item_append_text(item, "%u min", value * 10);
3620 break;
3621 case 3:
3622 proto_item_append_text(item, "%u hours", value);
3623 break;
3624 case 4:
3625 proto_item_append_text(item, "%u hours", value * 10);
3626 break;
3627 case 7:
3628 proto_item_append_text(item, "Infinite (%u)", value);
3629 break;
3630 /* Value 5 and 6 */
3631 default:
3632 proto_item_append_text(item, "%u min", value);
3633 break;
3634 }
3635 }
3636
3637 if (offset < length) {
3638 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3639 }
3640
3641}
3642
3643/*
3644 * 8.2.30 DL Buffering Suggested Packet Count
3645 */
3646static void
3647dissect_pfcp_dl_buffering_suggested_packet_count(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3648{
3649 uint32_t value;
3650 /* Octet 5 to n+4 Packet Count Value
3651 * The length shall be set to 1 or 2 octets.
3652 */
3653 proto_tree_add_item_ret_uint(tree, hf_pfcp_packet_count, tvb, 0, length, ENC_BIG_ENDIAN0x00000000, &value);
3654
3655 proto_item_append_text(item, "%u", value);
3656}
3657/*
3658 * 8.2.31 PFCPSMReq-Flags
3659 */
3660static void
3661dissect_pfcp_pfcpsmreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3662{
3663 int offset = 0;
3664
3665 static int * const pfcp_pfcpsmreq_flags[] = {
3666 &hf_pfcp_spare_b7,
3667 &hf_pfcp_pfcpsmreq_flags_b6_hrsbom,
3668 &hf_pfcp_pfcpsmreq_flags_b5_deteid,
3669 &hf_pfcp_pfcpsmreq_flags_b4_rumuc,
3670 &hf_pfcp_pfcpsmreq_flags_b3_sumpc,
3671 &hf_pfcp_pfcpsmreq_flags_b2_qaurr,
3672 &hf_pfcp_pfcpsmreq_flags_b1_sndem,
3673 &hf_pfcp_pfcpsmreq_flags_b0_drobu,
3674 NULL((void*)0)
3675 };
3676 /* Octet 5 Spare HRBOM DETEID RUMUC SUMPC QAURR SNDEM DROBU */
3677 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsmreq_flags, ENC_BIG_ENDIAN0x00000000);
3678 offset += 1;
3679
3680 if (offset < length) {
3681 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3682 }
3683
3684}
3685/*
3686 * 8.2.32 PFCPSRRsp-Flags
3687 */
3688static void
3689dissect_pfcp_pfcpsrrsp_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3690{
3691 int offset = 0;
3692
3693 static int * const pfcp_pfcpsrrsp_flags[] = {
3694 &hf_pfcp_spare_b7_b1,
3695 &hf_pfcp_pfcpsrrsp_flags_b0_drobu,
3696 NULL((void*)0)
3697 };
3698 /* Octet 5 Spare Spare Spare Spare Spare Spare Spare DROBU */
3699 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsrrsp_flags, ENC_BIG_ENDIAN0x00000000);
3700 offset += 1;
3701
3702 if (offset < length) {
3703 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3704 }
3705
3706}
3707
3708/*
3709 * 8.2.33 Sequence Number
3710 */
3711static void
3712dissect_pfcp_sequence_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3713{
3714 uint32_t value;
3715 /* Octet 5 to 8 Sequence Number */
3716 proto_tree_add_item_ret_uint(tree, hf_pfcp_sequence_number, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000, &value);
3717
3718 proto_item_append_text(item, "%u", value);
3719
3720}
3721
3722/*
3723 * 8.2.34 Metric
3724 */
3725static void
3726dissect_pfcp_metric(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3727{
3728 uint32_t value;
3729 /* Octet 5 Metric */
3730 proto_tree_add_item_ret_uint(tree, hf_pfcp_metric, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
3731
3732 proto_item_append_text(item, "%u", value);
3733
3734}
3735
3736/*
3737 * 8.2.35 Timer
3738 */
3739static void
3740dissect_pfcp_timer(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3741{
3742 int offset = 0;
3743 uint32_t unit, value;
3744
3745 /* Octet 5 Timer unit Timer value */
3746 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &unit);
3747 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
3748 offset++;
3749
3750 if ((unit == 0) && (value == 0)) {
3751 proto_item_append_text(item, " Stopped");
3752 } else {
3753 switch (unit) {
3754 case 0:
3755 proto_item_append_text(item, "%u s", value * 2);
3756 break;
3757 case 1:
3758 proto_item_append_text(item, "%u min", value);
3759 break;
3760 case 2:
3761 proto_item_append_text(item, "%u min", value * 10);
3762 break;
3763 case 3:
3764 proto_item_append_text(item, "%u hours", value);
3765 break;
3766 case 4:
3767 proto_item_append_text(item, "%u hours", value * 10);
3768 break;
3769 case 7:
3770 proto_item_append_text(item, "%u Infinite", value);
3771 break;
3772 /* Value 5 and 6 */
3773 default:
3774 proto_item_append_text(item, "%u min", value * 1);
3775 break;
3776 }
3777 }
3778
3779 if (offset < length) {
3780 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3781 }
3782
3783}
3784
3785/*
3786 * 8.2.36 PDR ID
3787 */
3788static int
3789decode_pfcp_pdr_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, int offset, pfcp_session_args_t *args)
3790{
3791 uint32_t rule_id;
3792 /* Octet 5 to 6 Rule ID*/
3793 proto_tree_add_item_ret_uint(tree, hf_pfcp_pdr_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &rule_id);
3794 offset += 2;
3795
3796 proto_item_append_text(item, "%u", rule_id);
3797
3798 if (args) {
3799 args->last_rule_ids.pdr = rule_id;
3800 }
3801
3802 return offset;
3803}
3804
3805static void
3806dissect_pfcp_pdr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
3807{
3808 int offset = 0;
3809
3810 offset = decode_pfcp_pdr_id(tvb, pinfo, tree, item, offset, args);
3811
3812 if (offset < length) {
3813 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3814 }
3815}
3816/*
3817 * 8.2.37 F-SEID
3818 */
3819static void
3820dissect_pfcp_f_seid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
3821{
3822 int offset = 0;
3823 uint64_t f_seid_flags;
3824 address *ipv4 = NULL((void*)0), *ipv6 = NULL((void*)0);
3825 uint64_t seid_cp, *seid;
3826 uint32_t *session;
3827
3828 static int * const pfcp_f_seid_flags[] = {
3829 &hf_pfcp_spare_b7,
3830 &hf_pfcp_spare_b6,
3831 &hf_pfcp_spare_b5,
3832 &hf_pfcp_spare_b4,
3833 &hf_pfcp_spare_b3,
3834 &hf_pfcp_spare_b2,
3835 &hf_pfcp_b1_v4,
3836 &hf_pfcp_b0_v6,
3837 NULL((void*)0)
3838 };
3839 /* Octet 5 Spare Spare Spare Spare Spare Spare V4 V6*/
3840 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_f_seid_flags, ENC_BIG_ENDIAN0x00000000, &f_seid_flags);
3841 offset += 1;
3842
3843 if ((f_seid_flags & 0x3) == 0) {
3844 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
3845 return;
3846 }
3847 /* Octet 6 to 13 SEID */
3848 proto_tree_add_item_ret_uint64(tree, hf_pfcp_seid, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000, &seid_cp);
3849 proto_item_append_text(item, "SEID: 0x%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 8));
3850 offset += 8;
3851 /* IPv4 address (if present)*/
3852 if ((f_seid_flags & 0x2) == 2) {
3853 ipv4 = wmem_new0(pinfo->pool, address)((address*)wmem_alloc0((pinfo->pool), sizeof(address)));
3854 proto_tree_add_item(tree, hf_pfcp_f_seid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3855 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
3856 set_address_tvb(ipv4, AT_IPv4, 4, tvb, offset);
3857 offset += 4;
3858 }
3859 /* IPv6 address (if present)*/
3860 if ((f_seid_flags & 0x1) == 1) {
3861 ipv6 = wmem_new0(pinfo->pool, address)((address*)wmem_alloc0((pinfo->pool), sizeof(address)));
3862 proto_tree_add_item(tree, hf_pfcp_f_seid_ipv6, tvb, offset, 16, ENC_NA0x00000000);
3863 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
3864 set_address_tvb(ipv6, AT_IPv6, 16, tvb, offset);
3865 offset += 16;
3866 }
3867
3868 if (g_pfcp_session) {
3869 session = (uint32_t *)g_hash_table_lookup(pfcp_session_table, &pinfo->num);
3870 if (!session) {
3871 /* We save the seid so that we could assignate its corresponding session ID later */
3872 args->last_seid = seid_cp;
3873 if (!pfcp_seid_exists(seid_cp, args->seid_list)) {
3874 seid = wmem_new(pinfo->pool, uint64_t)((uint64_t*)wmem_alloc((pinfo->pool), sizeof(uint64_t)));
3875 *seid = seid_cp;
3876 wmem_list_prepend(args->seid_list, seid);
3877 }
3878 if (ipv4 != NULL((void*)0) && !pfcp_ip_exists(*ipv4, args->ip_list)) {
3879 copy_address_wmem(pinfo->pool, &args->last_ip, ipv4);
3880 wmem_list_prepend(args->ip_list, ipv4);
3881 }
3882 if (ipv6 != NULL((void*)0) && !pfcp_ip_exists(*ipv6, args->ip_list)) {
3883 copy_address_wmem(pinfo->pool, &args->last_ip, ipv6);
3884 wmem_list_prepend(args->ip_list, ipv6);
3885 }
3886 }
3887 }
3888
3889 if (offset < length) {
3890 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3891 }
3892}
3893
3894/*
3895 * 8.2.38 Node ID
3896 */
3897
3898static const value_string pfcp_node_id_type_vals[] = {
3899
3900 { 0, "IPv4 address" },
3901 { 1, "IPv6 address" },
3902 { 2, "FQDN" },
3903 { 0, NULL((void*)0) }
3904};
3905
3906static int
3907decode_pfcp_fqdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, int offset, uint16_t length)
3908{
3909 int name_len;
3910 uint8_t *fqdn = NULL((void*)0);
3911
3912 /* FQDN, the Node ID value encoding shall be identical to the encoding of a FQDN
3913 * within a DNS message of section 3.1 of IETF RFC 1035 [27] but excluding the trailing zero byte.
3914 */
3915 if (length > 0)
3916 {
3917 name_len = tvb_get_uint8(tvb, offset);
3918 /* NOTE 1: The FQDN field in the IE is not encoded as a dotted string as commonly used in DNS master zone files. */
3919 if (name_len < 0x40) {
3920 fqdn = tvb_get_string_enc(pinfo->pool, tvb, offset, length - 1, ENC_APN_STR0x00000054);
3921 }
3922 /* In case the FQDN field is incorrectly in dotted string form.*/
3923 else {
3924 fqdn = tvb_get_string_enc(pinfo->pool, tvb, offset, length - 1, ENC_ASCII0x00000000);
3925 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, length - 1);
3926 }
3927 proto_tree_add_string(tree, hf_pfcp_node_id_fqdn, tvb, offset, length - 1, fqdn);
3928 proto_item_append_text(item, "%s", fqdn);
3929 offset += length - 1;
3930 }
3931 return offset;
3932}
3933
3934static int
3935decode_pfcp_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, int offset, uint16_t length)
3936{
3937 uint32_t node_id_type;
3938
3939 /* Octet 5 Spare Node ID Type*/
3940 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
3941 proto_tree_add_item_ret_uint(tree, hf_pfcp_node_id_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &node_id_type);
3942 proto_item_append_text(item, "%s: ", val_to_str_const(node_id_type, pfcp_node_id_type_vals, "Unknown"));
3943 offset++;
3944
3945 switch (node_id_type) {
3946 case 0:
3947 /* IPv4 address */
3948 proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
3949 proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
3950 offset += 4;
3951 break;
3952 case 1:
3953 /* IPv6 address */
3954 proto_tree_add_item(tree, hf_pfcp_node_id_ipv6, tvb, offset, 16, ENC_NA0x00000000);
3955 proto_item_append_text(item, "%s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
3956 offset += 16;
3957 break;
3958 case 2:
3959 /* FQDN */
3960 offset = decode_pfcp_fqdn(tvb, pinfo, tree, item, offset, length);
3961 break;
3962 default:
3963 break;
3964 }
3965 return offset;
3966}
3967static void
3968dissect_pfcp_node_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3969{
3970 int offset = 0;
3971
3972 offset = decode_pfcp_address(tvb, pinfo, tree, item, offset, length);
3973
3974 if (offset < length) {
3975 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3976 }
3977
3978}
3979/*
3980 * 8.2.39 PFD Contents
3981 */
3982static void
3983dissect_pfcp_pfd_contents(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
3984{
3985 int offset = 0;
3986 int dissected_len = 0;
3987 uint64_t flags;
3988 uint32_t len;
3989 proto_tree *afd_tree, *aurl_tree, *adnp_tree;
3990
3991 static int * const pfcp_pfd_contents_flags[] = {
3992 &hf_pfcp_pfd_contents_flags_b7_adnp,
3993 &hf_pfcp_pfd_contents_flags_b6_aurl,
3994 &hf_pfcp_pfd_contents_flags_b5_afd,
3995 &hf_pfcp_pfd_contents_flags_b4_dnp,
3996 &hf_pfcp_pfd_contents_flags_b3_cp,
3997 &hf_pfcp_pfd_contents_flags_b2_dn,
3998 &hf_pfcp_pfd_contents_flags_b1_url,
3999 &hf_pfcp_pfd_contents_flags_b0_fd,
4000 NULL((void*)0)
4001 };
4002 /* Octet 5 ADNP AURL AFD DNP CP DN URL FD */
4003 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_pfd_contents_flags, ENC_BIG_ENDIAN0x00000000, &flags);
4004 offset += 1;
4005
4006 // Octet 6 Spare Octet
4007 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4008 offset += 1;
4009
4010 /* Bit 1 - FD (Flow Description): If this bit is set to "1", then the Length of Flow Description
4011 * and the Flow Description fields shall be present
4012 */
4013 if (flags & 0x1) {
4014 /* The Flow Description field, when present, shall be encoded as an OctetString
4015 * as specified in subclause 6.4.3.7 of 3GPP TS 29.251
4016 */
4017 /* m to (m+1) Length of Flow Description */
4018 proto_tree_add_item_ret_uint(tree, hf_pfcp_flow_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4019 offset += 2;
4020
4021 /* (m+2) to p Flow Description */
4022 proto_tree_add_item(tree, hf_pfcp_flow_desc, tvb, offset, len, ENC_ASCII0x00000000);
4023 offset += len;
4024 }
4025
4026 /* Bit 2 - URL (URL): The URL field, when present,
4027 * shall be encoded as an OctetString as specified in subclause 6.4.3.8 of 3GPP TS 29.251 [21].
4028 */
4029 if (flags & 0x2) {
4030 /* q to (q+1) Length of URL */
4031 proto_tree_add_item_ret_uint(tree, hf_pfcp_url_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4032 offset += 2;
4033
4034 /* (q+2) to r URL */
4035 proto_tree_add_item(tree, hf_pfcp_url, tvb, offset, len, ENC_ASCII0x00000000);
4036 offset += len;
4037
4038 }
4039
4040 /* Bit 3 - DN (Domain Name): The Domain Name field, when present,
4041 * shall be encoded as an OctetString as specified in subclause 6.4.3.9 of 3GPP TS 29.251 [21].
4042 */
4043 if (flags & 0x4) {
4044 /* s to (s+1) Length of Domain Name */
4045 proto_tree_add_item_ret_uint(tree, hf_pfcp_dn_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4046 offset += 2;
4047
4048 /* (s+2) to t Domain Name */
4049 proto_tree_add_item(tree, hf_pfcp_dn, tvb, offset, len, ENC_ASCII0x00000000);
4050 offset += len;
4051 }
4052
4053 /* Bit 4 - CP (Custom PFD Content): If this bit is set to "1", then the Length of Custom PFD Content and
4054 * the Custom PFD Content fields shall be present
4055 */
4056 if (flags & 0x8) {
4057 /* u to (u+1) Length of Custom PFD Content */
4058 proto_tree_add_item_ret_uint(tree, hf_pfcp_cp_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4059 offset += 2;
4060
4061 /* (u+2) to v Custom PFD Content */
4062 proto_tree_add_item(tree, hf_pfcp_cp, tvb, offset, len, ENC_NA0x00000000);
4063 offset += len;
4064 }
4065
4066 /* Bit 5 - DNP (Domain Name Protocol): If this bit is set to "1", then the Length of Domain Name Protocol and
4067 * the Domain Name Protocol shall be present, otherwise they shall not be present; and if this bit is set to "1",
4068 * the Length of Domain Name and the Domain Name fields shall also be present.
4069 */
4070 if (flags & 0x10) {
4071 /* The Domain Name Protocol field, when present, shall be encoded as an OctetString
4072 * as specified in subclause 6.4.3.x of 3GPP TS 29.251 [21].
4073 */
4074 /* w to (w+1) Length of Domain Name Protocol */
4075 proto_tree_add_item_ret_uint(tree, hf_pfcp_dnp_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4076 offset += 2;
4077
4078 /* (w+2) to x Domain Name Protocol */
4079 proto_tree_add_item(tree, hf_pfcp_dnp, tvb, offset, len, ENC_ASCII0x00000000);
4080 offset += len;
4081 }
4082
4083
4084 /* Bit 6 - AFD (Additional Flow Description): If this bit is set to "1",
4085 * the Length of Additional Flow Description and the Additional Flow Description field shall be present,
4086 * otherwise they shall not be present.
4087 */
4088 if (flags & 0x20) {
4089 /* y to (y+1) Length of Additional Flow Description */
4090 proto_tree_add_item_ret_uint(tree, hf_pfcp_afd_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4091 offset += 2;
4092
4093 /* (y+2) to z Additional Flow Description */
4094 dissected_len = 0;
4095 afd_tree = proto_item_add_subtree(item, ett_pfcp_adf);
4096 while (dissected_len < (int)len) {
4097 uint32_t flow_desc_len;
4098 /* (y+2) to (y+3) Length of Flow Description */
4099 proto_tree_add_item_ret_uint(afd_tree, hf_pfcp_flow_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &flow_desc_len);
4100 offset += 2;
4101 dissected_len += 2;
4102
4103 /* (y+4) to i Flow Description */
4104 proto_tree_add_item(afd_tree, hf_pfcp_flow_desc, tvb, offset, flow_desc_len, ENC_ASCII0x00000000);
4105 offset += flow_desc_len;
4106 dissected_len += flow_desc_len;
4107 }
4108 }
4109
4110 /* Bit 7 - AURL (Additional URL): If this bit is set to "1",
4111 * the Length of Additional URL and the Additional URL field shall be present,
4112 * otherwise they shall not be present.
4113 */
4114 if (flags & 0x40) {
4115 /* a to (a+1) Length of Additional URL */
4116 proto_tree_add_item_ret_uint(tree, hf_pfcp_aurl_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4117 offset += 2;
4118
4119 /* (a+2) to b Additional URL */
4120 dissected_len = 0;
4121 aurl_tree = proto_item_add_subtree(item, ett_pfcp_aurl);
4122 while (dissected_len < (int)len) {
4123 uint32_t url_len;
4124 /* (a+2) to (a+3) Length of URL */
4125 proto_tree_add_item_ret_uint(aurl_tree, hf_pfcp_url_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &url_len);
4126 dissected_len += 2;
4127 offset += 2;
4128
4129 /* (a+4) to o URL */
4130 proto_tree_add_item(aurl_tree, hf_pfcp_url, tvb, offset, url_len, ENC_ASCII0x00000000);
4131 dissected_len += url_len;
4132 offset += url_len;
4133 }
4134 }
4135
4136 /* Bit 8 - ADNP (Additional Domain Name and Domain Name Protocol): If this bit is set to "1",
4137 * the Length of Additional Domain Name and Domain Name Protocol, and the Additional Domain Name and
4138 * Domain Name Protocol field shall be present, otherwise they shall not be present.
4139 */
4140 if (flags & 0x80) {
4141 /* c to (c+1) Length of Additional Domain Name and Domain Name Protocol */
4142 proto_tree_add_item_ret_uint(tree, hf_pfcp_adnp_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4143 offset += 2;
4144
4145 /* (c+2) to d Additional Domain Name and Domain Name Protocol */
4146 dissected_len = 0;
4147 adnp_tree = proto_item_add_subtree(item, ett_pfcp_adnp);
4148 while (dissected_len < (int)len) {
4149 uint32_t domain_name_len, domain_name_prot_len;
4150 /* (c+2) to (c+3) Length of Domain Name */
4151 proto_tree_add_item_ret_uint(adnp_tree, hf_pfcp_dn_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &domain_name_len);
4152 dissected_len += 2;
4153 offset += 2;
4154
4155 /* (c+4) to pd Domain Name */
4156 proto_tree_add_item(adnp_tree, hf_pfcp_dn, tvb, offset, domain_name_len, ENC_ASCII0x00000000);
4157 dissected_len += domain_name_len;
4158 offset += domain_name_len;
4159
4160 /* (pe) to (pe+1) Length of Domain Name Protocol */
4161 proto_tree_add_item_ret_uint(adnp_tree, hf_pfcp_dnp_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &domain_name_prot_len);
4162 dissected_len += 2;
4163 offset += 2;
4164
4165 /* (pe+2) to ph Domain Name Protocol */
4166 proto_tree_add_item(adnp_tree, hf_pfcp_dnp, tvb, offset, domain_name_prot_len, ENC_ASCII0x00000000);
4167 dissected_len += domain_name_prot_len;
4168 offset += domain_name_prot_len;
4169 }
4170 }
4171
4172 if (offset < length) {
4173 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4174 }
4175
4176}
4177/*
4178 * 8.2.40 Measurement Method
4179 */
4180static void
4181dissect_pfcp_measurement_method(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4182{
4183 int offset = 0;
4184
4185 static int * const pfcp_measurement_method_flags[] = {
4186 &hf_pfcp_spare_b7_b3,
4187 &hf_pfcp_measurement_method_flags_b2_event,
4188 &hf_pfcp_measurement_method_flags_b1_volume,
4189 &hf_pfcp_measurement_method_flags_b0_durat,
4190 NULL((void*)0)
4191 };
4192 /* Octet 5 Spare Spare Spare Spare Spare EVENT VOLUM DURAT */
4193 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_measurement_method_flags, ENC_BIG_ENDIAN0x00000000);
4194 offset += 1;
4195
4196 if (offset < length) {
4197 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4198 }
4199
4200}
4201
4202/*
4203 * 8.2.41 Usage Report Trigger
4204 */
4205static void
4206dissect_pfcp_usage_report_trigger(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4207{
4208 int offset = 0;
4209
4210 static int * const pfcp_usage_report_trigger_o5_flags[] = {
4211 &hf_pfcp_usage_report_trigger_o5_b7_immer,
4212 &hf_pfcp_usage_report_trigger_o5_b6_droth,
4213 &hf_pfcp_usage_report_trigger_o5_b5_stopt,
4214 &hf_pfcp_usage_report_trigger_o5_b4_start,
4215 &hf_pfcp_usage_report_trigger_o5_b3_quhti,
4216 &hf_pfcp_usage_report_trigger_o5_b2_timth,
4217 &hf_pfcp_usage_report_trigger_o5_b1_volth,
4218 &hf_pfcp_usage_report_trigger_o5_b0_perio,
4219 NULL((void*)0)
4220 };
4221 /* Octet 5 IMMER DROTH STOPT START QUHTI TIMTH VOLTH PERIO */
4222 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_report_trigger_o5_flags, ENC_BIG_ENDIAN0x00000000);
4223 offset++;
4224
4225 if (offset == length) {
4226 return;
4227 }
4228
4229 static int * const pfcp_usage_report_trigger_o6_flags[] = {
4230 &hf_pfcp_usage_report_trigger_o6_b7_eveth,
4231 &hf_pfcp_usage_report_trigger_o6_b6_macar,
4232 &hf_pfcp_usage_report_trigger_o6_b5_envcl,
4233 &hf_pfcp_usage_report_trigger_o6_b4_monit,
4234 &hf_pfcp_usage_report_trigger_o6_b3_termr,
4235 &hf_pfcp_usage_report_trigger_o6_b2_liusa,
4236 &hf_pfcp_usage_report_trigger_o6_b1_timqu,
4237 &hf_pfcp_usage_report_trigger_o6_b0_volqu,
4238 NULL((void*)0)
4239 };
4240 /* Octet 6 EVETH MACAR ENVCL MONIT TERMR LIUSA TIMQU VOLQU */
4241 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_report_trigger_o6_flags, ENC_BIG_ENDIAN0x00000000);
4242 offset++;
4243
4244 if (offset == length) {
4245 return;
4246 }
4247
4248 static int * const pfcp_usage_report_trigger_o7_flags[] = {
4249 &hf_pfcp_spare_b7_b6,
4250 &hf_pfcp_usage_report_trigger_o7_b5_upint,
4251 &hf_pfcp_usage_report_trigger_o7_b4_emrre,
4252 &hf_pfcp_usage_report_trigger_o7_b3_quvti,
4253 &hf_pfcp_usage_report_trigger_o7_b2_ipmjl,
4254 &hf_pfcp_usage_report_trigger_o7_b1_tebur,
4255 &hf_pfcp_usage_report_trigger_o7_b0_evequ,
4256 NULL((void*)0)
4257 };
4258 /* Octet 7 Spare Spare UPINT EMRRE QUVTI IPMJL TEBUR EVEQU */
4259 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_report_trigger_o7_flags, ENC_BIG_ENDIAN0x00000000);
4260 offset++;
4261
4262 if (offset == length) {
4263 return;
4264 }
4265
4266 if (offset < length) {
4267 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4268 }
4269
4270}
4271
4272/*
4273 * 8.2.42 Measurement Period
4274 */
4275static void
4276dissect_pfcp_measurement_period(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4277{
4278 int offset = 0;
4279 uint32_t value;
4280 /* 5 to 8 Measurement Period*/
4281 proto_tree_add_item_ret_uint(tree, hf_pfcp_measurement_period, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
4282 offset += 4;
4283
4284 proto_item_append_text(item, "%u", value);
4285
4286 if (offset < length) {
4287 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4288 }
4289}
4290
4291/*
4292 * 8.2.43 Fully qualified PDN Connection Set Identifier (FQ-CSID)
4293 */
4294static const value_string pfcp_fq_csid_node_id_type_vals[] = {
4295
4296 { 0, "Node-Address is a global unicast IPv4 address" },
4297 { 1, "Node-Address is a global unicast IPv6 address" },
4298 { 2, "Node-Address is a 4 octets long field" },
4299 { 0, NULL((void*)0) }
4300};
4301
4302static const value_string pfcp_fq_csid_node_type_vals[] = {
4303
4304 { 0, "MME" },
4305 { 1, "SGW-C" },
4306 { 2, "PGW-C/SMF" },
4307 { 3, "ePDG" },
4308 { 4, "TWAN" },
4309 { 5, "PGW-U/SGW-U/UPF" },
4310 { 0, NULL((void*)0) }
4311};
4312
4313static void
4314dissect_pfcp_fq_csid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4315{
4316 int offset = 0;
4317 uint32_t node_id_type, num_csid;
4318
4319 /* Octet 5 FQ-CSID Node-ID Type Number of CSIDs= m*/
4320 proto_tree_add_item_ret_uint(tree, hf_pfcp_fq_csid_node_id_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &node_id_type);
4321 proto_tree_add_item_ret_uint(tree, hf_pfcp_num_csid, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &num_csid);
4322 offset++;
4323
4324 /* 6 to p Node-Address */
4325 switch (node_id_type) {
4326 case 0:
4327 /* 0 indicates that Node-Address is a global unicast IPv4 address and p = 9 */
4328 proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4329 offset += 4;
4330 break;
4331 case 1:
4332 /* 1 indicates that Node-Address is a global unicast IPv6 address and p = 21 */
4333 proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_ipv6, tvb, offset, 16, ENC_NA0x00000000);
4334 offset += 16;
4335 break;
4336 case 2:
4337 /* 2 indicates that Node-Address is a 4 octets long field with a 32 bit value stored in network order, and p= 9
4338 * Most significant 20 bits are the binary encoded value of (MCC * 1000 + MNC).
4339 * Least significant 12 bits is a 12 bit integer assigned by an operator to an MME, SGW-C, SGW-U, PGW-C or PGW-U
4340 */
4341 proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_mcc_mnc, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4342 proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_int, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4343 offset += 4;
4344 break;
4345 default:
4346 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4347 break;
4348 }
4349
4350 while (num_csid > 0) {
4351 proto_tree_add_item(tree, hf_pfcp_fq_csid, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4352 offset += 2;
4353 num_csid--;
4354 }
4355
4356 if (offset < length) {
4357 proto_tree_add_item(tree, hf_pfcp_spare_b7_b4, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4358 proto_tree_add_item(tree, hf_pfcp_fq_csid_node_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4359 offset++;
4360 }
4361
4362 if (offset < length) {
4363 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4364 }
4365
4366}
4367/*
4368 * 8.2.44 Volume Measurement
4369 */
4370static void
4371dissect_pfcp_volume_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4372{
4373 int offset = 0;
4374 uint64_t flags;
4375
4376 static int * const pfcp_volume_measurement_flags[] = {
4377 &hf_pfcp_spare_b7_b6,
4378 &hf_pfcp_volume_measurement_b5_dlnop,
4379 &hf_pfcp_volume_measurement_b4_ulnop,
4380 &hf_pfcp_volume_measurement_b3_tonop,
4381 &hf_pfcp_volume_measurement_b2_dlvol,
4382 &hf_pfcp_volume_measurement_b1_ulvol,
4383 &hf_pfcp_volume_measurement_b0_tovol,
4384 NULL((void*)0)
4385 };
4386 /* Octet 5 Spare DLNOP ULNOP TONOP DLVOL ULVOL TOVOL*/
4387 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_volume_measurement_flags, ENC_BIG_ENDIAN0x00000000, &flags);
4388 offset += 1;
4389
4390 /* Bit 1 - TOVOL: If this bit is set to "1", then the Total Volume field shall be present*/
4391 if ((flags & 0x1)) {
4392 /* m to (m+7) Total Volume */
4393 proto_tree_add_item(tree, hf_pfcp_vol_meas_tovol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4394 offset += 8;
4395 }
4396 /* Bit 2 - ULVOL: If this bit is set to "1", then the Total Volume field shall be present*/
4397 if ((flags & 0x2)) {
4398 /* p to (p+7) Uplink Volume */
4399 proto_tree_add_item(tree, hf_pfcp_vol_meas_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4400 offset += 8;
4401 }
4402 /* Bit 3 - DLVOL: If this bit is set to "1", then the Total Volume field shall be present*/
4403 if ((flags & 0x4)) {
4404 /*q to (q+7) Downlink Volume */
4405 proto_tree_add_item(tree, hf_pfcp_vol_meas_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4406 offset += 8;
4407 }
4408 /* Bit 4 - TONOP: If this bit is set to "1", then the Total Number of Packets field shall be present*/
4409 if ((flags & 0x8)) {
4410 /* r to (r+7) Total Number of Packets */
4411 proto_tree_add_item(tree, hf_pfcp_vol_meas_tonop, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4412 offset += 8;
4413 }
4414 /* Bit 5 - ULNOP: If this bit is set to "1", then the Total Number of Packets field shall be present*/
4415 if ((flags & 0x10)) {
4416 /* s to (s+7) Uplink Number of Packets */
4417 proto_tree_add_item(tree, hf_pfcp_vol_meas_ulnop, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4418 offset += 8;
4419 }
4420 /* Bit 6 - DLNOP: If this bit is set to "1", then the Total Number of Packets field shall be present*/
4421 if ((flags & 0x20)) {
4422 /*t to (t+7) Downlink Number of Packets */
4423 proto_tree_add_item(tree, hf_pfcp_vol_meas_dlnop, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4424 offset += 8;
4425 }
4426
4427 if (offset < length) {
4428 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4429 }
4430
4431}
4432/*
4433 * 8.2.45 Duration Measurement
4434 */
4435static void
4436dissect_pfcp_duration_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4437{
4438 int offset = 0;
4439 uint32_t value;
4440 /* 5 to 8 Duration value*/
4441 proto_tree_add_item_ret_uint(tree, hf_pfcp_duration_measurement, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
4442 offset += 4;
4443
4444 proto_item_append_text(item, "%u s", value);
4445
4446 if (offset < length) {
4447 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4448 }
4449}
4450/*
4451 * 8.2.46 Time of First Packet
4452 */
4453static void
4454dissect_pfcp_time_of_first_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4455{
4456 int offset = 0;
4457 char *time_str;
4458
4459 /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
4460 * format as defined in section 6 of IETF RFC 5905
4461 */
4462
4463 proto_tree_add_item_ret_time_string(tree, hf_pfcp_time_of_first_packet, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
4464 proto_item_append_text(item, "%s", time_str);
4465 offset += 4;
4466
4467 if (offset < length) {
4468 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4469 }
4470}
4471/*
4472 * 8.2.47 Time of Last Packet
4473 */
4474static void
4475dissect_pfcp_time_of_last_packet(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4476{
4477 int offset = 0;
4478 char *time_str;
4479
4480 /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
4481 * format as defined in section 6 of IETF RFC 5905
4482 */
4483
4484 proto_tree_add_item_ret_time_string(tree, hf_pfcp_time_of_last_packet, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
4485 proto_item_append_text(item, "%s", time_str);
4486 offset += 4;
4487
4488 if (offset < length) {
4489 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4490 }
4491}
4492/*
4493 * 8.2.48 Quota Holding Time
4494 */
4495static void
4496dissect_pfcp_quota_holding_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4497{
4498 int offset = 0;
4499 uint32_t value;
4500 /* Octet 5 to 8 Time Quota value
4501 * TThe Time Quota value shall be encoded as an Unsigned32 binary integer value. It contains a duration in seconds
4502 */
4503 proto_tree_add_item_ret_uint(tree, hf_pfcp_quota_holding_time, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
4504 offset += 4;
4505
4506 proto_item_append_text(item, "%u s", value);
4507
4508 if (offset < length) {
4509 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4510 }
4511
4512}
4513
4514/*
4515 * 8.2.49 Dropped DL Traffic Threshold
4516 */
4517static void
4518dissect_pfcp_dropped_dl_traffic_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4519{
4520 int offset = 0;
4521 uint64_t flags_val;
4522
4523 static int * const pfcp_dropped_dl_traffic_threshold_flags[] = {
4524 &hf_pfcp_dropped_dl_traffic_threshold_b1_dlby,
4525 &hf_pfcp_dropped_dl_traffic_threshold_b0_dlpa,
4526 NULL((void*)0)
4527 };
4528 /* Octet 5 Spare DLBY DLPA*/
4529 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_dropped_dl_traffic_threshold_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
4530 offset += 1;
4531
4532 if ((flags_val & 0x1) == 1) {
4533 /* m to (m+7) Downlink Packets
4534 * DLPA: If this bit is set to "1", then the Downlink Packets field shall be present
4535 */
4536 proto_tree_add_item(tree, hf_pfcp_downlink_packets, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4537 offset += 8;
4538 }
4539
4540 if ((flags_val & 0x2) == 2) {
4541 /* o to (o+7) Number of Bytes of Downlink Data
4542 * DLBY: If this bit is set to "1", then the Number of Bytes of Downlink Data field shall be present
4543 */
4544 proto_tree_add_item(tree, hf_pfcp_bytes_downlink_data, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4545 offset += 8;
4546 }
4547
4548 if (offset < length) {
4549 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4550 }
4551}
4552/*
4553 * 8.2.50 Volume Quota
4554 */
4555static void
4556dissect_pfcp_volume_quota(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4557{
4558 int offset = 0;
4559 uint64_t flags_val;
4560
4561 static int * const pfcp_volume_quota_flags[] = {
4562 &hf_pfcp_spare_b7_b3,
4563 &hf_pfcp_volume_quota_b2_dlvol,
4564 &hf_pfcp_volume_quota_b1_ulvol,
4565 &hf_pfcp_volume_quota_b0_tovol,
4566 NULL((void*)0)
4567 };
4568 /* Octet 5 Spare DLVOL ULVOL TOVOL*/
4569 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_volume_quota_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
4570 offset += 1;
4571
4572 /* The Total Volume, Uplink Volume and Downlink Volume fields shall be encoded as an Unsigned64 binary integer value.
4573 * They shall contain the total, uplink or downlink number of octets respectively.
4574 */
4575 if ((flags_val & 0x1) == 1) {
4576 /* m to (m+7) Total Volume
4577 * TOVOL: If this bit is set to "1", then the Total Volume field shall be present
4578 */
4579 proto_tree_add_item(tree, hf_pfcp_volume_quota_tovol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4580 offset += 8;
4581 }
4582 if ((flags_val & 0x2) == 2) {
4583 /* p to (p+7) Uplink Volume
4584 * ULVOL: If this bit is set to "1", then the Uplink Volume field shall be present
4585 */
4586 proto_tree_add_item(tree, hf_pfcp_volume_quota_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4587 offset += 8;
4588 }
4589 if ((flags_val & 0x4) == 4) {
4590 /* q to (q+7) Downlink Volume
4591 * DLVOL: If this bit is set to "1", then the Downlink Volume field shall be present
4592 */
4593 proto_tree_add_item(tree, hf_pfcp_volume_quota_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
4594 offset += 8;
4595 }
4596
4597 if (offset < length) {
4598 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4599 }
4600}
4601/*
4602 * 8.2.51 Time Quota
4603 */
4604static void
4605dissect_pfcp_time_quota(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4606{
4607 int offset = 0;
4608 uint32_t value;
4609 /* Octet 5 to 8 Time Quota value
4610 * TThe Time Quota value shall be encoded as an Unsigned32 binary integer value. It contains a duration in seconds
4611 */
4612 proto_tree_add_item_ret_uint(tree, hf_pfcp_time_quota, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
4613 offset += 4;
4614
4615 proto_item_append_text(item, "%u s", value);
4616
4617 if (offset < length) {
4618 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4619 }
4620
4621}
4622/*
4623 * 8.2.52 Start Time
4624 */
4625static void
4626dissect_pfcp_start_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4627{
4628 char *time_str;
4629 int offset = 0;
4630
4631 /* The Start Time field shall contain a UTC time. Octets 5 to 8 are encoded in the same format as
4632 * the first four octets of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905 [26].
4633 */
4634 proto_tree_add_item_ret_time_string(tree, hf_pfcp_start_time, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
4635 proto_item_append_text(item, "%s", time_str);
4636 offset += 4;
4637
4638 if (offset < length) {
4639 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4640 }
4641
4642}
4643/*
4644 * 8.2.53 End Time
4645 */
4646static void
4647dissect_pfcp_end_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4648{
4649 char *time_str;
4650 int offset = 0;
4651
4652 /* The End Time field shall contain a UTC time. Octets 5 to 8 are encoded in the same format as
4653 * the first four octets of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905 [26].
4654 */
4655 proto_tree_add_item_ret_time_string(tree, hf_pfcp_end_time, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
4656 proto_item_append_text(item, "%s", time_str);
4657 offset += 4;
4658
4659 if (offset < length) {
4660 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4661 }
4662
4663}
4664
4665/*
4666 * 8.2.54 URR ID
4667 */
4668static int
4669decode_pfcp_urr_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), unsigned offset, pfcp_session_args_t *args)
4670{
4671 uint32_t urr_id;
4672 /* Octet 5 to 8 URR ID value
4673 * The bit 8 of octet 5 is used to indicate if the Rule ID is dynamically allocated by the CP function
4674 * or predefined in the UP function. If set to 0, it indicates that the Rule is dynamically provisioned
4675 * by the CP Function. If set to 1, it indicates that the Rule is predefined in the UP Function
4676 */
4677 urr_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN0x00000000);
4678
4679 proto_tree_add_item(tree, hf_pfcp_urr_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4680 proto_tree_add_item(tree, hf_pfcp_urr_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4681 offset += 4;
4682
4683 proto_item_append_text(item, "%s %u",
4684 tfs_get_string((urr_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
4685 (urr_id & 0x7fffffff));
4686
4687 if (args) {
4688 args->last_rule_ids.urr = urr_id;
4689 }
4690
4691 return offset;
4692}
4693
4694static void
4695dissect_pfcp_urr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
4696{
4697 int offset = 0;
4698
4699 offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, args);
4700
4701 if (offset < length) {
4702 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4703 }
4704
4705}
4706/*
4707 * 8.2.55 Linked URR ID IE
4708 */
4709static void
4710dissect_pfcp_linked_urr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4711{
4712 int offset = 0;
4713
4714 /* Octet 5 to 8 Linked URR ID value
4715 * The Linked URR ID value shall be encoded as an Unsigned32 binary integer value
4716 */
4717 offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, NULL((void*)0));
4718
4719 if (offset < length) {
4720 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4721 }
4722
4723}
4724/*
4725 * 8.2.56 Outer Header Creation
4726 */
4727static void
4728dissect_pfcp_outer_header_creation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4729{
4730 int offset = 0;
4731 uint64_t value;
4732
4733 static int * const outer_hdr_desc[] = {
4734 &hf_pfcp_outer_hdr_desc_o5_b7_stag,
4735 &hf_pfcp_outer_hdr_desc_o5_b6_ctag,
4736 &hf_pfcp_outer_hdr_desc_o5_b5_ipv6,
4737 &hf_pfcp_outer_hdr_desc_o5_b4_ipv4,
4738 &hf_pfcp_outer_hdr_desc_o5_b3_udp_ipv6,
4739 &hf_pfcp_outer_hdr_desc_o5_b2_udp_ipv4,
4740 &hf_pfcp_outer_hdr_desc_o5_b1_gtp_udp_ipv6,
4741 &hf_pfcp_outer_hdr_desc_o5_b0_gtp_udp_ipv4,
4742 &hf_pfcp_outer_hdr_desc_o6_spare,
4743 &hf_pfcp_outer_hdr_desc_o6_b2_ssm_cteid,
4744 &hf_pfcp_outer_hdr_desc_o6_b1_n6,
4745 &hf_pfcp_outer_hdr_desc_o6_b0_n19,
4746 NULL((void*)0)
4747 };
4748
4749 /* Octet 5-6 Outer Header Creation Description */
4750 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 2, outer_hdr_desc, ENC_BIG_ENDIAN0x00000000, &value);
4751 offset += 2;
4752
4753
4754 /* m to (m+3) TEID
4755 * The TEID field shall be present if the Outer Header Creation Description requests the creation of a GTP-U header.
4756 * Otherwise it shall not be present
4757 */
4758 if ((value & 0x0100) || (value & 0x0200)) {
4759 proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_teid, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4760 offset += 4;
4761 }
4762
4763 /*
4764 * p to (p+3) IPv4
4765 * The IPv4 Address field shall be present if the Outer Header Creation Description requests the creation of a IPv4 header
4766 */
4767 if ((value & 0x0100) || (value & 0x0400) || (value & 0x1000)) {
4768 proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
4769 offset += 4;
4770 }
4771
4772 /*
4773 * q to (q+15) IPv6
4774 * The IPv6 Address field shall be present if the Outer Header Creation Description requests the creation of a IPv6 header
4775 */
4776 if ((value & 0x0200) || (value & 0x0800) || (value & 0x2000)) {
4777 proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_ipv6, tvb, offset, 16, ENC_NA0x00000000);
4778 offset += 16;
4779 }
4780
4781 /*
4782 * r to (r+1) Port Number
4783 * The Port Number field shall be present if the Outer Header Creation Description requests the creation of a UDP/IP header
4784 */
4785 if ((value & 0x0400) || (value & 0x0800)) {
4786 proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
4787 offset += 2;
4788 }
4789
4790 /*
4791 * t to (t+2) C-TAG
4792 * The C-TAG field shall be present if the Outer Header Creation Description requests the setting of the C-Tag in Ethernet packet
4793 */
4794 if (value & 0x4000) {
4795 offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
4796 }
4797
4798 /*
4799 * u to (u+2) S-TAG
4800 * The S-TAG field shall be present if the Outer Header Creation Description requests the setting of the S-Tag in Ethernet packet
4801 */
4802 if (value & 0x8000) {
4803 offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
4804 }
4805
4806 if (offset < length) {
4807 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4808 }
4809
4810}
4811/*
4812 * 8.2.57 BAR ID
4813 */
4814static int
4815decode_pfcp_bar_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t offset, pfcp_session_args_t *args)
4816{
4817 uint32_t value;
4818 /* Octet 5 BAR ID value
4819 * The BAR ID value shall be encoded as a binary integer value
4820 */
4821 proto_tree_add_item_ret_uint(tree, hf_pfcp_bar_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
4822 offset++;
4823 proto_item_append_text(item, "%u", value);
4824
4825 if (args) {
4826 args->last_rule_ids.bar = value;
4827 }
4828
4829 return offset;
4830}
4831static void
4832dissect_pfcp_bar_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
4833{
4834 int offset = 0;
4835
4836 offset = decode_pfcp_bar_id(tvb, pinfo, tree, item, offset, args);
4837
4838 if (offset < length) {
4839 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4840 }
4841
4842}
4843
4844/*
4845 * 8.2.58 CP Function Features
4846 */
4847static void
4848dissect_pfcp_cp_function_features(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4849{
4850 int offset = 0;
4851
4852 static int * const pfcp_cp_function_features_o5_flags[] = {
4853 &hf_pfcp_cp_function_features_o5_b7_uiaur,
4854 &hf_pfcp_cp_function_features_o5_b6_ardr,
4855 &hf_pfcp_cp_function_features_o5_b5_mpas,
4856 &hf_pfcp_cp_function_features_o5_b4_bundl,
4857 &hf_pfcp_cp_function_features_o5_b3_sset,
4858 &hf_pfcp_cp_function_features_o5_b2_epfar,
4859 &hf_pfcp_cp_function_features_o5_b1_ovrl,
4860 &hf_pfcp_cp_function_features_o5_b0_load,
4861 NULL((void*)0)
4862 };
4863 /* Octet 5 UIAUR ARDR MPAS BUNDL SSET EPFAR OVRL LOAD */
4864 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_cp_function_features_o5_flags, ENC_BIG_ENDIAN0x00000000);
4865 offset++;
4866
4867 if (offset == length) {
4868 return;
4869 }
4870
4871 static int * const pfcp_cp_function_features_o6_flags[] = {
4872 &hf_pfcp_spare_b7_b2,
4873 &hf_pfcp_cp_function_features_o6_b1_rpgur,
4874 &hf_pfcp_cp_function_features_o6_b0_psucc,
4875 NULL((void*)0)
4876 };
4877 /* Octet 6 Spare Spare Spare Spare Spare Spare RPGUR PSUCC */
4878 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_cp_function_features_o6_flags, ENC_BIG_ENDIAN0x00000000);
4879 offset++;
4880
4881 if (offset < length) {
4882 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4883 }
4884
4885}
4886
4887/*
4888 * 8.2.59 Usage Information
4889 */
4890static void
4891dissect_pfcp_usage_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4892{
4893 int offset = 0;
4894
4895 static int * const pfcp_usage_information_flags[] = {
4896 &hf_pfcp_spare_h1,
4897 &hf_pfcp_usage_information_b3_ube,
4898 &hf_pfcp_usage_information_b2_uae,
4899 &hf_pfcp_usage_information_b1_aft,
4900 &hf_pfcp_usage_information_b0_bef,
4901 NULL((void*)0)
4902 };
4903 /* Octet 5 Spare UBE UAE AFT BEF */
4904 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_information_flags, ENC_BIG_ENDIAN0x00000000);
4905 offset += 1;
4906
4907 if (offset < length) {
4908 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4909 }
4910
4911}
4912
4913/*
4914 * 8.2.60 Application Instance ID
4915 */
4916static void
4917dissect_pfcp_application_instance_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4918{
4919 int offset = 0;
4920
4921 /* Octet 5 5 to (n+4) Application Instance Identifier
4922 * The Application Instance Identifier shall be encoded as an OctetString (see 3GPP TS 29.212)
4923 */
4924 if (tvb_ascii_isprint(tvb, offset, length))
4925 {
4926 const uint8_t* string_value;
4927 proto_tree_add_item_ret_string(tree, hf_pfcp_application_instance_id_str, tvb, offset, length, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
4928 proto_item_append_text(item, "%s", string_value);
4929 }
4930 else
4931 {
4932 proto_tree_add_item(tree, hf_pfcp_application_instance_id, tvb, offset, length, ENC_NA0x00000000);
4933 }
4934}
4935
4936/*
4937 * 8.2.61 Flow Information
4938 */
4939static const value_string pfcp_flow_dir_vals[] = {
4940 { 0, "Unspecified" },
4941 { 1, "Downlink (traffic to the UE)" },
4942 { 2, "Uplink (traffic from the UE)" },
4943 { 3, "Bidirectional" },
4944 { 0, NULL((void*)0) }
4945};
4946
4947static void
4948dissect_pfcp_flow_inf(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4949{
4950 int offset = 0;
4951 uint32_t len;
4952 /* Octet 5 Spare Flow Direction */
4953 proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4954 proto_tree_add_item(tree, hf_pfcp_flow_dir, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
4955 offset++;
4956
4957 /* 6 to 7 Length of Flow Description */
4958 proto_tree_add_item_ret_uint(tree, hf_pfcp_flow_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &len);
4959 offset += 2;
4960 /* Flow Description
4961 * The Flow Description field, when present, shall be encoded as an OctetString
4962 * as specified in subclause 5.4.2 of 3GPP TS 29.212
4963 */
4964 proto_tree_add_item(tree, hf_pfcp_flow_desc, tvb, offset, len, ENC_ASCII0x00000000);
4965 offset += len;
4966
4967 if (offset < length) {
4968 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4969 }
4970
4971}
4972
4973/*
4974 * 8.2.62 UE IP Address
4975 */
4976static const true_false_string pfcp_ue_ip_add_sd_flag_vals = {
4977 "Destination IP address",
4978 "Source IP address",
4979};
4980
4981static void
4982dissect_pfcp_ue_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
4983{
4984 int offset = 0;
4985 uint64_t ue_ip_address_flags;
4986
4987 static int * const pfcp_ue_ip_address_flags[] = {
4988 &hf_pfcp_spare_b7,
4989 &hf_pfcp_ue_ip_address_flag_b6_v6pl,
4990 &hf_pfcp_ue_ip_address_flag_b5_chv6,
4991 &hf_pfcp_ue_ip_address_flag_b4_chv4,
4992 &hf_pfcp_ue_ip_address_flag_b3_v6d,
4993 &hf_pfcp_ue_ip_address_flag_b2_sd,
4994 &hf_pfcp_ue_ip_address_flag_b1_v4,
4995 &hf_pfcp_ue_ip_address_flag_b0_v6,
4996 NULL((void*)0)
4997 };
4998 /* Octet 5 Spare IPV6PL CHV6 CHV4 IPv6D S/D V4 V6*/
4999 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_ue_ip_address_flags, ENC_BIG_ENDIAN0x00000000, &ue_ip_address_flags);
5000 offset += 1;
5001
5002 /* IPv4 address (if present)*/
5003 if ((ue_ip_address_flags & 0x2)) {
5004 proto_tree_add_item(tree, hf_pfcp_ue_ip_addr_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5005 offset += 4;
5006 }
5007 /* IPv6 address (if present)*/
5008 if ((ue_ip_address_flags & 0x1)) {
5009 proto_tree_add_item(tree, hf_pfcp_ue_ip_add_ipv6, tvb, offset, 16, ENC_NA0x00000000);
5010 offset += 16;
5011 }
5012 /* IPv6 Prefix Delegation Bits (if present)*/
5013 if ((ue_ip_address_flags & 0x8)) {
5014 proto_tree_add_item(tree, hf_pfcp_ue_ip_add_ipv6_prefix_delegation_bits, tvb, offset, 1, ENC_NA0x00000000);
5015 offset += 1;
5016 }
5017 /* IPv6 Prefix Lengths (if present)*/
5018 if ((ue_ip_address_flags & 0x40)) {
5019 proto_tree_add_item(tree, hf_pfcp_ue_ip_add_ipv6_prefix_length, tvb, offset, 1, ENC_NA0x00000000);
5020 offset += 1;
5021 }
5022
5023 if (offset < length) {
5024 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5025 }
5026
5027}
5028/*
5029 * 8.2.63 Packet Rate
5030 */
5031static const value_string pfcp_pr_time_unit_vals[] = {
5032 { 0, "Minute" },
5033 { 1, "6 minutes" },
5034 { 2, "Hour" },
5035 { 3, "Day" },
5036 { 4, "Week" },
5037 { 0, NULL((void*)0) }
5038};
5039
5040static void
5041dissect_pfcp_packet_rate(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5042{
5043 int offset = 0;
5044 uint64_t flags;
5045
5046 static int * const pfcp_packet_rate_flags[] = {
5047 &hf_pfcp_spare_b7_b4,
5048 &hf_pfcp_packet_rate_b2_aprc,
5049 &hf_pfcp_packet_rate_b1_dlpr,
5050 &hf_pfcp_packet_rate_b0_ulpr,
5051 NULL((void*)0)
5052 };
5053 /* Octet 5 Spare DLPR ULPR */
5054 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_packet_rate_flags, ENC_BIG_ENDIAN0x00000000, &flags);
5055 offset += 1;
5056
5057 /* Bit 1 - ULPR (Uplink Packet Rate): If this bit is set to "1", then octets m to (m+2) shall be present */
5058 if ((flags & 0x1)) {
5059 /* m */
5060 proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5061 proto_tree_add_item(tree, hf_pfcp_ul_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5062 offset += 1;
5063 /* (m+1) to (m+2) Maximum Uplink Packet Rate */
5064 proto_tree_add_item(tree, hf_pfcp_max_ul_pr, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5065 offset += 2;
5066 }
5067 /* Bit 2 - DLPR (Downlink Packet Rate): If this bit is set to "1", then octets p to (p+2) shall be present*/
5068 if ((flags & 0x2)) {
5069 /* p */
5070 proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5071 proto_tree_add_item(tree, hf_pfcp_dl_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5072 offset += 1;
5073 /* (p+1) to (p+2) Maximum Uplink Packet Rate */
5074 proto_tree_add_item(tree, hf_pfcp_max_dl_pr, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5075 offset += 2;
5076 }
5077 /* Bit 4 - APRC (Additional Packet Rate Control) */
5078 if ((flags & 0x8)) {
5079 /* If bit 1 (ULPR) is set to "1", then octets q to (q+2), the Additional Maximum Uplink Packet Rate shall be present. */
5080 if ((flags & 0x1)) {
5081 /* q */
5082 proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5083 proto_tree_add_item(tree, hf_pfcp_a_ul_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5084 offset += 1;
5085 /* (q+1) to (q+2) Additional Maximum Uplink Packet Rate */
5086 proto_tree_add_item(tree, hf_pfcp_a_max_ul_pr, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5087 offset += 2;
5088 }
5089 /* If bit 2 (DLPR) is set to "1", then octets r to (r+2), the Additional Maximum Downlink Packet Rate shall be present. */
5090 if ((flags & 0x2)) {
5091 /* r */
5092 proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5093 proto_tree_add_item(tree, hf_pfcp_a_dl_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5094 offset += 1;
5095 /* (r+1) to (r+2) Additional Maximum Uplink Packet Rate */
5096 proto_tree_add_item(tree, hf_pfcp_a_max_dl_pr, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5097 offset += 2;
5098 }
5099 }
5100
5101 if (offset < length) {
5102 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5103 }
5104
5105}
5106
5107/*
5108 * 8.2.64 Outer Header Removal
5109 */
5110static const value_string pfcp_out_hdr_desc_vals[] = {
5111 { 0, "GTP-U/UDP/IPv4" },
5112 { 1, "GTP-U/UDP/IPv6" },
5113 { 2, "UDP/IPv4" },
5114 { 3, "UDP/IPv6 " },
5115 { 4, "IPv4" },
5116 { 5, "IPv6 " },
5117 { 6, "GTP-U/UDP/IP" },
5118 { 7, "VLAN TAG POP" },
5119 { 8, "VLAN TAGs POP-POP" },
5120 { 0, NULL((void*)0) }
5121};
5122
5123static void
5124dissect_pfcp_outer_hdr_rem(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5125{
5126 int offset = 0;
5127 uint32_t value;
5128
5129 static int * const pfcp_gtpu_ext_hdr_del_flags[] = {
5130 &hf_pfcp_gtpu_ext_hdr_del_b0_pdu_sess_cont,
5131 NULL((void*)0)
5132 };
5133
5134 proto_tree_add_item_ret_uint(tree, hf_pfcp_out_hdr_desc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
5135 offset++;
5136 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_out_hdr_desc_vals, "Unknown"));
5137
5138 /* Octet 6 GTP-U Extension Header Deletion */
5139 if (offset < length) {
5140 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_gtpu_ext_hdr_del_flags, ENC_BIG_ENDIAN0x00000000);
5141 offset++;
5142 }
5143
5144 if (offset < length) {
5145 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5146 }
5147}
5148 /*
5149 * 8.2.65 Recovery Time Stamp
5150 */
5151
5152static void
5153dissect_pfcp_recovery_time_stamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5154{
5155 char *time_str;
5156 int offset = 0;
5157
5158 /* indicates the UTC time when the node started. Octets 5 to 8 are encoded in the same format as
5159 * the first four octets of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905 [26].
5160 */
5161 proto_tree_add_item_ret_time_string(tree, hf_pfcp_recovery_time_stamp, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
5162 proto_item_append_text(item, "%s", time_str);
5163 offset += 4;
5164
5165 if (offset < length) {
5166 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5167 }
5168
5169}
5170/*
5171 * 8.2.66 DL Flow Level Marking
5172 */
5173static void
5174dissect_pfcp_dl_flow_level_marking(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5175{
5176 int offset = 0;
5177 uint64_t flags_val;
5178
5179 static int * const pfcp_dl_flow_level_marking_flags[] = {
5180 &hf_pfcp_spare_b7_b2,
5181 &hf_pfcp_dl_flow_level_marking_b1_sci,
5182 &hf_pfcp_dl_flow_level_marking_b0_ttc,
5183 NULL((void*)0)
5184 };
5185 /* Octet 5 Spare SCI TTC*/
5186 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_dl_flow_level_marking_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
5187 offset += 1;
5188
5189 /* Bit 1 - TTC (ToS/Traffic Class): If this bit is set to "1",
5190 * then the ToS/Traffic Class field shall be present
5191 */
5192 if ((flags_val & 0x1) == 1) {
5193 /* m to (m+1) ToS/Traffic Class
5194 * The ToS/Traffic Class shall be encoded on two octets as an OctetString.
5195 * The first octet shall contain the IPv4 Type-of-Service or the IPv6 Traffic-Class field and
5196 * the second octet shall contain the ToS/Traffic Class mask field
5197 */
5198 proto_tree_add_item(tree, hf_pfcp_traffic_class, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5199 offset += 1;
5200 proto_tree_add_item(tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5201 offset += 1;
5202 }
5203 /* SCI (Service Class Indicator): If this bit is set to "1",
5204 * then the Service Class Indicator field shall be present
5205 */
5206 if ((flags_val & 0x2) == 2) {
5207 /* Octets p and (p+1) of the Service Class Indicator field, when present,
5208 * shall be encoded respectively as octets 2 and 3 of the Service Class Indicator Extension Header
5209 * specified in Figure 5.2.2.3-1 of 3GPP TS 29.281
5210 */
5211 proto_tree_add_item(tree, hf_pfcp_sci, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
5212 offset += 2;
5213 }
5214
5215 if (offset < length) {
5216 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5217 }
5218
5219}
5220
5221/*
5222 * 8.2.67 Header Enrichment
5223 */
5224static const value_string pfcp_header_type_vals[] = {
5225 { 0, "HTTP" },
5226 { 0, NULL((void*)0) }
5227};
5228
5229static void
5230dissect_pfcp_header_enrichment(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5231{
5232 int offset = 0;
5233 uint32_t len;
5234
5235 /* Octet 5 Spare Header Type
5236 */
5237 proto_tree_add_item(tree, hf_pfcp_spare_b7_b5, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5238 proto_tree_add_item(tree, hf_pfcp_header_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5239 offset++;
5240
5241 /* 6 Length of Header Field Name */
5242 proto_tree_add_item_ret_uint(tree, hf_pfcp_hf_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &len);
5243 offset++;
5244
5245 /* 7 to m Header Field Name
5246 * Header Field Name shall be encoded as an OctetString
5247 */
5248 proto_tree_add_item(tree, hf_pfcp_hf_name, tvb, offset, len, ENC_NA0x00000000);
5249 offset+= len;
5250
5251 /* p Length of Header Field Value*/
5252 proto_tree_add_item_ret_uint(tree, hf_pfcp_hf_val_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &len);
5253 offset++;
5254
5255 /* (p+1) to q Header Field Value */
5256 proto_tree_add_item(tree, hf_pfcp_hf_val, tvb, offset, len, ENC_NA0x00000000);
5257 offset += len;
5258
5259 if (offset < length) {
5260 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5261 }
5262}
5263
5264/*
5265 * 8.2.68 Measurement Information
5266 */
5267static void
5268dissect_pfcp_measurement_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5269{
5270 int offset = 0;
5271
5272 static int * const pfcp_measurement_info_flags[] = {
5273 &hf_pfcp_measurement_info_b7_ciam,
5274 &hf_pfcp_measurement_info_b6_aspoc,
5275 &hf_pfcp_measurement_info_b5_sspoc,
5276 &hf_pfcp_measurement_info_b4_mnop,
5277 &hf_pfcp_measurement_info_b3_istm,
5278 &hf_pfcp_measurement_info_b2_radi,
5279 &hf_pfcp_measurement_info_b1_inam,
5280 &hf_pfcp_measurement_info_b0_mbqe,
5281 NULL((void*)0)
5282 };
5283 /* Octet 5 CIAM ASPOC SSPOC MNOP ISTM INAM MBQE */
5284 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_measurement_info_flags, ENC_BIG_ENDIAN0x00000000);
5285 offset += 1;
5286
5287 if (offset < length) {
5288 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5289 }
5290
5291}
5292/*
5293 * 8.2.69 Node Report Type
5294 */
5295static void
5296dissect_pfcp_node_report_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5297{
5298 int offset = 0;
5299
5300 static int * const pfcp_node_report_type_flags[] = {
5301 &hf_pfcp_spare_b7_b6,
5302 &hf_pfcp_node_report_type_b5_vsr,
5303 &hf_pfcp_node_report_type_b4_purr,
5304 &hf_pfcp_node_report_type_b3_gpqr,
5305 &hf_pfcp_node_report_type_b2_ckdr,
5306 &hf_pfcp_node_report_type_b1_uprr,
5307 &hf_pfcp_node_report_type_b0_upfr,
5308 NULL((void*)0)
5309 };
5310 /* Octet 5 Spare VSR PURR GPQR CKDR UPRR MBQE */
5311 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_node_report_type_flags, ENC_BIG_ENDIAN0x00000000);
5312 offset += 1;
5313
5314 if (offset < length) {
5315 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5316 }
5317
5318}
5319/*
5320 * 8.2.70 Remote GTP-U Peer
5321 */
5322static void
5323dissect_pfcp_remote_gtp_u_peer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5324{
5325 int offset = 0;
5326 uint64_t flags;
5327 uint32_t length_di, length_ni;
5328
5329 static int * const pfcp_remote_gtp_u_peer_flags[] = {
5330 &hf_pfcp_spare_b7_b5,
5331 &hf_pfcp_remote_gtp_u_peer_flags_b4_rts,
5332 &hf_pfcp_remote_gtp_u_peer_flags_b3_ni,
5333 &hf_pfcp_remote_gtp_u_peer_flags_b2_di,
5334 &hf_pfcp_remote_gtp_u_peer_flags_b1_v4,
5335 &hf_pfcp_remote_gtp_u_peer_flags_b0_v6,
5336 NULL((void*)0)
5337 };
5338 /* Octet 5 Spare RTS NI DI V4 V6*/
5339 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_remote_gtp_u_peer_flags, ENC_BIG_ENDIAN0x00000000, &flags);
5340 offset += 1;
5341
5342 /* IPv4 address (if present)*/
5343 if (flags & 0x2) {
5344 proto_tree_add_item(tree, hf_pfcp_remote_gtp_u_peer_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5345 proto_item_append_text(item, "IPv4 %s ", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
5346 offset += 4;
5347 }
5348 /* IPv6 address (if present)*/
5349 if (flags & 0x1) {
5350 proto_tree_add_item(tree, hf_pfcp_remote_gtp_u_peer_ipv6, tvb, offset, 16, ENC_NA0x00000000);
5351 proto_item_append_text(item, "IPv6 %s ", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
5352 offset += 16;
5353 }
5354 /* DI (if present)*/
5355 if (flags & 0x4) {
5356 /* Length of Destination Interface field */
5357 proto_tree_add_item_ret_uint(tree, hf_pfcp_remote_gtp_u_peer_length_di, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &length_di);
5358 offset += 2;
5359
5360 /* Destination Interface */
5361 offset += decode_pfcp_destination_interface(tvb, pinfo, tree, item, offset, length_di);
5362 }
5363 /* NI (if present)*/
5364 if (flags & 0x8) {
5365 /* Length of Network Instance field */
5366 proto_tree_add_item_ret_uint(tree, hf_pfcp_remote_gtp_u_peer_length_ni, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &length_ni);
5367 offset += 2;
5368
5369 /* Network Instance */
5370 offset += decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, length_ni);
5371 }
5372 /* RTS (if present)*/
5373 if (flags & 0x8) {
5374 proto_tree_add_item(tree, hf_pfcp_remote_gtp_u_peer_time_stamp, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000);
5375 offset += 4;
5376 }
5377
5378 if (offset < length) {
5379 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5380 }
5381
5382}
5383
5384/*
5385 * 8.2.71 UR-SEQN
5386 */
5387static void
5388dissect_pfcp_ur_seqn(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5389{
5390 unsigned value;
5391
5392 /* 5 to 8 UR-SEQN
5393 * The UR-SEQN value shall be encoded as an Unsigned32 binary integer value
5394 */
5395 proto_tree_add_item_ret_uint(tree, hf_pfcp_ur_seqn, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000, &value);
5396
5397 proto_item_append_text(item, "%u", value);
5398
5399
5400}
5401
5402/*
5403 * 8.2.72 Activate Predefined Rules
5404 */
5405static void
5406dissect_pfcp_act_predef_rules(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5407{
5408 int offset = 0;
5409 /* Octet 5 to (n+4) Predefined Rules Name
5410 * The Predefined Rules Name field shall be encoded as an OctetString
5411 */
5412 proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA0x00000000);
5413}
5414/*
5415 * 8.2.73 Deactivate Predefined Rules
5416 */
5417static void
5418dissect_pfcp_deact_predef_rules(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5419{
5420 int offset = 0;
5421 /* Octet 5 to (n+4) Predefined Rules Name
5422 * The Predefined Rules Name field shall be encoded as an OctetString
5423 */
5424 proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA0x00000000);
5425}
5426/*
5427 * 8.2.74 FAR ID
5428 */
5429static int
5430decode_pfcp_far_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), int offset, pfcp_session_args_t *args)
5431{
5432 uint32_t far_id;
5433 /* Octet 5 to 8 FAR ID value
5434 * The bit 8 of octet 5 is used to indicate if the Rule ID is dynamically allocated
5435 * by the CP function or predefined in the UP function. If set to 0, it indicates that
5436 * the Rule is dynamically provisioned by the CP Function. If set to 1, it indicates that
5437 * the Rule is predefined in the UP Function.
5438 */
5439 far_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN0x00000000);
5440
5441 proto_tree_add_item(tree, hf_pfcp_far_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5442 proto_tree_add_item(tree, hf_pfcp_far_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5443 offset += 4;
5444
5445 proto_item_append_text(item, "%s %u",
5446 tfs_get_string((far_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
5447 (far_id & 0x7fffffff));
5448
5449 if (args) {
5450 args->last_rule_ids.far = far_id;
5451 }
5452
5453 return offset;
5454}
5455
5456static void
5457dissect_pfcp_far_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
5458{
5459 int offset = 0;
5460
5461 offset = decode_pfcp_far_id(tvb, pinfo, tree, item, offset, args);
5462
5463 if (offset < length) {
5464 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5465 }
5466
5467}
5468/*
5469 * 8.2.75 QER ID
5470 */
5471static int
5472decode_pfcp_qer_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), unsigned offset, pfcp_session_args_t *args)
5473{
5474 uint32_t qer_id;
5475 /* Octet 5 to 8 QER ID value
5476 * The bit 8 of octet 5 is used to indicate if the Rule ID is dynamically allocated by the CP function
5477 * or predefined in the UP function. If set to 0, it indicates that the Rule is dynamically provisioned
5478 * by the CP Function. If set to 1, it indicates that the Rule is predefined in the UP Function
5479 */
5480 qer_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN0x00000000);
5481
5482 proto_tree_add_item(tree, hf_pfcp_qer_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5483 proto_tree_add_item(tree, hf_pfcp_qer_id, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5484 offset += 4;
5485
5486 proto_item_append_text(item, "%s %u",
5487 tfs_get_string((qer_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
5488 (qer_id & 0x7fffffff));
5489
5490 if (args) {
5491 args->last_rule_ids.qer = qer_id;
5492 }
5493
5494 return offset;
5495}
5496static void
5497dissect_pfcp_qer_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
5498{
5499 int offset = 0;
5500
5501 offset = decode_pfcp_qer_id(tvb, pinfo, tree, item, offset, args);
5502
5503 if (offset < length) {
5504 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5505 }
5506
5507}
5508/*
5509 * 8.2.76 OCI Flags
5510 */
5511static void
5512dissect_pfcp_oci_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5513{
5514 int offset = 0;
5515
5516 static int * const pfcp_oci_flags_flags[] = {
5517 &hf_pfcp_spare_b7_b1,
5518 &hf_pfcp_oci_flags_b0_aoci,
5519 NULL((void*)0)
5520 };
5521 /* Octet 5 Spare AOCI */
5522 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_oci_flags_flags, ENC_BIG_ENDIAN0x00000000);
5523 offset += 1;
5524
5525 if (offset < length) {
5526 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5527 }
5528
5529}
5530
5531/*
5532 * 8.2.77 PFCP Association Release Request
5533 */
5534static void
5535dissect_pfcp_pfcp_assoc_rel_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5536{
5537 int offset = 0;
5538
5539 static int * const pfcp_pfcp_assoc_rel_req_flags[] = {
5540 &hf_pfcp_spare_b7_b2,
5541 &hf_pfcp_pfcp_assoc_rel_req_b1_urss,
5542 &hf_pfcp_pfcp_assoc_rel_req_b0_sarr,
5543 NULL((void*)0)
5544 };
5545 /* Octet 5 Spare URSS SARR */
5546 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcp_assoc_rel_req_flags, ENC_BIG_ENDIAN0x00000000);
5547 offset += 1;
5548
5549 if (offset < length) {
5550 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5551 }
5552
5553}
5554
5555/*
5556 * 8.2.78 Graceful Release Period
5557 */
5558static void
5559dissect_pfcp_graceful_release_period(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5560{
5561 int offset = 0;
5562 uint32_t unit, value;
5563
5564 /* Octet 5 Timer unit Timer value */
5565 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &unit);
5566 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
5567 offset++;
5568
5569 if ((unit == 0) && (value == 0)) {
5570 proto_item_append_text(item, " Stopped");
5571 } else {
5572 switch (unit) {
5573 case 0:
5574 proto_item_append_text(item, "%u s", value * 2);
5575 break;
5576 case 1:
5577 proto_item_append_text(item, "%u min", value);
5578 break;
5579 case 2:
5580 proto_item_append_text(item, "%u min", value * 10);
5581 break;
5582 case 3:
5583 proto_item_append_text(item, "%u hours", value);
5584 break;
5585 case 4:
5586 proto_item_append_text(item, "%u hours", value * 10);
5587 break;
5588 case 7:
5589 proto_item_append_text(item, "%u Infinite", value);
5590 break;
5591 /* Value 5 and 6 */
5592 default:
5593 proto_item_append_text(item, "%u min", value * 1);
5594 break;
5595 }
5596 }
5597
5598 if (offset < length) {
5599 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5600 }
5601
5602}
5603/*
5604 * 8.2.79 PDN Type
5605 */
5606static const value_string pfcp_pdn_type_vals[] = {
5607 { 0, "Reserved" },
5608 { 1, "IPv4" },
5609 { 2, "IPv6" },
5610 { 3, "IPv4V6" },
5611 { 4, "Non-IP" },
5612 { 5, "Ethernet" },
5613 { 0, NULL((void*)0) }
5614};
5615
5616static void
5617dissect_pfcp_pdn_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5618{
5619 int offset = 0;
5620 uint32_t value;
5621 /* Octet 5 Application Identifier
5622 * The Application Identifier shall be encoded as an OctetString (see 3GPP TS 29.212)
5623 */
5624 proto_tree_add_item_ret_uint(tree, hf_pfcp_pdn_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
5625 offset++;
5626
5627 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_pdn_type_vals, "Unknown"));
5628
5629 if (offset < length) {
5630 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5631 }
5632}
5633/*
5634 * 8.2.80 Failed Rule ID
5635 */
5636static const value_string pfcp_failed_rule_id_type_vals[] = {
5637 { 0, "PDR" },
5638 { 1, "FAR" },
5639 { 2, "QER" },
5640 { 3, "URR" },
5641 { 4, "BAR" },
5642 { 5, "MAR" },
5643 { 6, "SRR" },
5644 { 0, NULL((void*)0) }
5645};
5646
5647/*
5648 * 8.2.123 MAR ID
5649 */
5650static int
5651decode_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, int offset, pfcp_session_args_t *args)
5652{
5653 uint32_t mar_id;
5654 /* Octet 5 to 6 MAR ID*/
5655 proto_tree_add_item_ret_uint(tree, hf_pfcp_mar_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &mar_id);
5656 offset += 2;
5657
5658 proto_item_append_text(item, "%u", mar_id);
5659
5660 if (args) {
5661 args->last_rule_ids.mar = mar_id;
5662 }
5663
5664 return offset;
5665}
5666/*
5667 * 8.2.151 SRR ID
5668 */
5669static int
5670decode_pfcp_srr_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, int offset, pfcp_session_args_t *args)
5671{
5672 uint32_t srr_id;
5673 /* Oct 5 The SRR ID value shall be encoded as a binary integer value. */
5674 proto_tree_add_item_ret_uint(tree, hf_pfcp_srr_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &srr_id);
5675 offset += 1;
5676
5677 proto_item_append_text(item, "%u", srr_id);
5678
5679 if (args) {
5680 args->last_rule_ids.srr = srr_id;
5681 }
5682
5683 return offset;
5684}
5685
5686static void
5687dissect_pfcp_failed_rule_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5688{
5689 int offset = 0;
5690 uint32_t rule_type;
5691
5692 /* Octet 5 Rule ID Type */
5693 proto_tree_add_item_ret_uint(tree, hf_pfcp_failed_rule_id_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &rule_type);
5694 offset++;
5695
5696 proto_item_append_text(item, "%s: ", val_to_str_const(rule_type, pfcp_failed_rule_id_type_vals, "Unknown"));
5697
5698 /* 6 to p Rule ID value
5699 * The length and the value of the Rule ID value field shall be set as specified for the
5700 * PDR ID, FAR ID, QER ID, URR ID, BAR ID, MAR ID and SRR ID IE types respectively.
5701 */
5702 switch (rule_type) {
5703 case 0:
5704 /* PDR ID */
5705 offset = decode_pfcp_pdr_id(tvb, pinfo, tree, item, offset, NULL((void*)0));
5706 break;
5707 case 1:
5708 /* FAR ID */
5709 offset = decode_pfcp_far_id(tvb, pinfo, tree, item, offset, NULL((void*)0));
5710 break;
5711 case 2:
5712 /* QER ID */
5713 offset = decode_pfcp_qer_id(tvb, pinfo, tree, item, offset, NULL((void*)0));
5714 break;
5715 case 3:
5716 /* URR ID */
5717 offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, NULL((void*)0));
5718 break;
5719 case 4:
5720 /* BAR ID */
5721 offset = decode_pfcp_bar_id(tvb, pinfo, tree, item, offset, NULL((void*)0));
5722 break;
5723 case 5:
5724 /* MAR ID */
5725 offset = decode_pfcp_mar_id(tvb, pinfo, tree, item, offset, NULL((void*)0));
5726 break;
5727 case 6:
5728 /* SRR ID */
5729 offset = decode_pfcp_srr_id(tvb, pinfo, tree, item, offset, NULL((void*)0));
5730 break;
5731 default:
5732 break;
5733 }
5734
5735 if (offset < length) {
5736 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5737 }
5738}
5739/*
5740 * 8.2.81 Time Quota Mechanism
5741 */
5742static const value_string pfcp_time_quota_mechanism_bti_type_vals[] = {
5743 { 0, "CTP" },
5744 { 1, "DTP" },
5745 { 0, NULL((void*)0) }
5746};
5747
5748static void
5749dissect_pfcp_time_quota_mechanism(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5750{
5751 int offset = 0;
5752 uint32_t bti_type;
5753
5754 /* Octet 5 BIT Type */
5755 proto_tree_add_item_ret_uint(tree, hf_pfcp_time_quota_mechanism_bti_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &bti_type);
5756 offset++;
5757
5758 proto_item_append_text(item, "%s", val_to_str_const(bti_type, pfcp_time_quota_mechanism_bti_type_vals, "Unknown"));
5759
5760 /* Base Time Interval
5761 * The Base Time Interval, shall be encoded as an Unsigned32
5762 * as specified in subclause 7.2.29 of 3GPP TS 32.299
5763 */
5764 proto_tree_add_item(tree, hf_pfcp_time_quota_mechanism_bti, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5765 offset += 4;
5766
5767 if (offset < length) {
5768 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5769 }
5770}
5771/*
5772 * 8.2.82 User Plane IP Resource Information (removed in Rel 16.3)
5773 */
5774static void
5775dissect_pfcp_user_plane_ip_resource_infomation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5776{
5777 int offset = 0;
5778 uint64_t upiri_flags_val;
5779 uint32_t upiri_teid_range;
5780
5781 static int * const pfcp_upiri_flags[] = {
5782 &hf_pfcp_spare_b7_b6,
5783 &hf_pfcp_upiri_flg_b6_assosi,
5784 &hf_pfcp_upiri_flg_b5_assoni,
5785 &hf_pfcp_upiri_flg_b2b4_teidri,
5786 &hf_pfcp_upiri_flags_b1_v6,
5787 &hf_pfcp_upiri_flags_b0_v4,
5788 NULL((void*)0)
5789 };
5790 /* Octet 5 Spare ASSOSI ASSONI TEIDRI TEIDRI TEIDRI V6 V4*/
5791 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_upiri_flags, ENC_BIG_ENDIAN0x00000000, &upiri_flags_val);
5792
5793 /* The following flags are coded within Octet 5:
5794 * Bit 1 - V4: If this bit is set to "1" and the CH bit is not set, then the IPv4 address field shall be present,
5795 * otherwise the IPv4 address field shall not be present.
5796 * Bit 2 - V6: If this bit is set to "1" and the CH bit is not set, then the IPv6 address field shall be present,
5797 * otherwise the IPv6 address field shall not be present.
5798 * Bit 3-5 - TEIDRI (TEID Range Indication): the value of this field indicates the number of bits in the most significant
5799 * octet of a TEID that are used to partition the TEID range, e.g. if this field is set to "4", then the first
5800 * 4 bits in the TEID are used to partition the TEID range.
5801 * Bit 6 - ASSONI (Associated Network Instance): if this bit is set to "1", then the Network Instance field shall be present,
5802 * otherwise the Network Instance field shall not be present,
5803 * i.e. User Plane IP Resource Information provided can be used by CP function for any Network Instance of
5804 * GTP-U user plane in the UP function.
5805 * Bit 7 - ASSOSI (Associated Source Interface): if this bit is set to "1", then the Source Interface field shall be present,
5806 * otherwise the Source Interface field shall not be present.
5807 */
5808
5809 /* Octet 5, bit 3-5, TEID Range Indication */
5810 proto_tree_add_item_ret_uint(tree, hf_pfcp_upiri_teidri, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &upiri_teid_range);
5811 offset += 1;
5812
5813 if (upiri_teid_range > 0)
5814 {
5815 /* Octet t TEID Range */
5816 proto_tree_add_item(tree, hf_pfcp_upiri_teid_range, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5817 offset++;
5818 }
5819
5820 if ((upiri_flags_val & 0x1) == 1) {
5821 /* m to (m+3) IPv4 address */
5822 proto_tree_add_item(tree, hf_pfcp_upiri_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
5823 offset += 4;
5824 }
5825 if ((upiri_flags_val & 0x2) == 2) {
5826 /* p to (p+15) IPv6 address */
5827 proto_tree_add_item(tree, hf_pfcp_upiri_ipv6, tvb, offset, 16, ENC_NA0x00000000);
5828 offset += 16;
5829 }
5830 if ((upiri_flags_val & 0x20) == 0x20) {
5831 /* k to (l) Network Instance */
5832 uint16_t ni_len = length - offset;
5833 if ((upiri_flags_val & 0x40) == 0x40) {
5834 ni_len--;
5835 }
5836 offset = decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, ni_len);
5837 }
5838 if ((upiri_flags_val & 0x40) == 0x40) {
5839 /* r Source Interface */
5840 offset = decode_pfcp_source_interface(tvb, pinfo, tree, item, offset);
5841 }
5842 if (offset < length) {
5843 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5844 }
5845
5846}
5847
5848/*
5849 * 8.2.83 User Plane Inactivity Timer
5850 */
5851static void
5852dissect_pfcp_user_plane_inactivity_timer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5853{
5854 int offset = 0;
5855 uint32_t value;
5856 /*
5857 * The User Plane Inactivity Timer field shall be encoded as an Unsigned32 binary integer value.
5858 * The timer value "0" shall be interpreted as an indication that
5859 * user plane inactivity detection and reporting is stopped.
5860 */
5861
5862 /* 5 to 8 Inactivity Timer */
5863 proto_tree_add_item_ret_uint(tree, hf_pfcp_user_plane_inactivity_timer, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
5864 offset += 4;
5865
5866 if(value == 0)
5867 proto_item_append_text(item, " (Stopped)");
5868
5869 if (offset < length) {
5870 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5871 }
5872
5873}
5874
5875/*
5876 * 8.2.84 Multiplier
5877 */
5878static void
5879dissect_pfcp_multiplier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5880{
5881
5882 /* 5 to 12 Value-Digits */
5883 proto_tree_add_item(tree, hf_pfcp_multiplier_value_digits, tvb, 0, 8, ENC_BIG_ENDIAN0x00000000);
5884
5885 /* 12 to 15 Exponent */
5886 proto_tree_add_item(tree, hf_pfcp_multiplier_exponent, tvb, 8, 4, ENC_BIG_ENDIAN0x00000000);
5887
5888}
5889
5890/*
5891 * 8.2.85 Aggregated URR ID IE
5892 */
5893static void
5894dissect_pfcp_aggregated_urr_id_ie(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5895{
5896 /* 5 to 8 URR ID */
5897 decode_pfcp_urr_id(tvb, pinfo, tree, item, 0, NULL((void*)0));
5898}
5899
5900/*
5901 * 8.2.86 Subsequent Volume Quota
5902 */
5903static void
5904dissect_pfcp_subsequent_volume_quota(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5905{
5906 int offset = 0;
5907 uint64_t flags_val;
5908
5909 static int * const pfcp_subsequent_volume_quota_flags[] = {
5910 &hf_pfcp_spare_b7_b3,
5911 &hf_pfcp_subsequent_volume_quota_b2_dlvol,
5912 &hf_pfcp_subsequent_volume_quota_b1_ulvol,
5913 &hf_pfcp_subsequent_volume_quota_b0_tovol,
5914 NULL((void*)0)
5915 };
5916 /* Octet 5 Spare DLVOL ULVOL TOVOL*/
5917 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_subsequent_volume_quota_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
5918 offset += 1;
5919
5920 /* The Total Volume, Uplink Volume and Downlink Volume fields shall be encoded as an Unsigned64 binary integer value.
5921 * They shall contain the total, uplink or downlink number of octets respectively.
5922 */
5923 if ((flags_val & 0x1) == 1) {
5924 /* m to (m+7) Total Volume
5925 * TOVOL: If this bit is set to "1", then the Total Volume field shall be present
5926 */
5927 proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_tovol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
5928 offset += 8;
5929 }
5930 if ((flags_val & 0x2) == 2) {
5931 /* p to (p+7) Uplink Volume
5932 * ULVOL: If this bit is set to "1", then the Uplink Volume field shall be present
5933 */
5934 proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
5935 offset += 8;
5936 }
5937 if ((flags_val & 0x4) == 4) {
5938 /* q to (q+7) Downlink Volume
5939 * DLVOL: If this bit is set to "1", then the Downlink Volume field shall be present
5940 */
5941 proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
5942 offset += 8;
5943 }
5944
5945 if (offset < length) {
5946 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5947 }
5948}
5949
5950/*
5951 * 8.2.87 Subsequent Time Quota
5952 */
5953static void
5954dissect_pfcp_subsequent_time_quota(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5955{
5956 int offset = 0;
5957 unsigned value;
5958
5959 /* Octet 5 to 8 Time Quota
5960 * The Time Quota field shall be encoded as an Unsigned32 binary integer value.
5961 * It shall contain the duration in seconds.
5962 */
5963 proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_time_quota, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
5964 offset += 4;
5965
5966 proto_item_append_text(item, "%u s", value);
5967
5968 if (offset < length) {
5969 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5970 }
5971
5972}
5973
5974/*
5975 * 8.2.88 RQI
5976 */
5977static void
5978dissect_pfcp_rqi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
5979{
5980 int offset = 0;
5981
5982 proto_tree_add_item(tree, hf_pfcp_spare_b7_b1, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5983 proto_tree_add_item(tree, hf_pfcp_rqi_flag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
5984 offset += 1;
5985
5986 if (offset < length) {
5987 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5988 }
5989 return;
5990}
5991
5992/*
5993 * 8.2.89 QFI
5994 */
5995static int
5996decode_pfcp_qfi(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), int offset)
5997{
5998 /* Octets 5 SPARE QFI
5999 * The Application Identifier shall be encoded as an OctetString
6000 */
6001 proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6002 proto_tree_add_item(tree, hf_pfcp_qfi, tvb, offset, 1, ENC_NA0x00000000);
6003 offset += 1;
6004
6005 return offset;
6006}
6007static void
6008dissect_pfcp_qfi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6009{
6010 int offset = 0;
6011
6012 offset = decode_pfcp_qfi(tvb, pinfo, tree, item, offset);
6013
6014 if (offset < length) {
6015 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6016 }
6017 return;
6018}
6019
6020/*
6021 * 8.2.90 Querry URR Reference
6022 */
6023static void
6024dissect_pfcp_query_urr_reference(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6025{
6026 int offset = 0;
6027
6028 /* Octets 5 to 8 Query URR Reference value
6029 * The Query URR Reference value shall be encoded as an Unsigned32 binary integer value.
6030 * It shall contain the reference of a query request for URR(s).
6031 */
6032 proto_tree_add_item(tree, hf_pfcp_query_urr_reference, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
6033 offset += 4;
6034
6035 if (offset < length) {
6036 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6037 }
6038
6039}
6040
6041/*
6042 * 8.2.91 Additional Usage Reports Information
6043 */
6044static void
6045dissect_pfcp_additional_usage_reports_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6046{
6047 int offset = 0;
6048 /*
6049 * Octet 8 7 6 5 4 3 2 1
6050 * 5 | AURI | Number of Additional Usage Reports value |
6051 * 6 | Number of Additional Usage Reports value |
6052 *
6053 * The Number of Additional Usage Reports value shall be encoded as
6054 * an unsigned binary integer value on 15 bits.
6055 * Bit 7 of Octet 5 is the most significant bit and bit 1 of Octet 6 is the least significant bit.
6056 * The bit 8 of octet 5 shall encode the AURI (Additional Usage Reports Indication) flag{...}.
6057 */
6058 static int * const pfcp_additional_usage_reports_information_flags[] = {
6059 &hf_pfcp_additional_usage_reports_information_b15_auri,
6060 &hf_pfcp_additional_usage_reports_information_b14_b0_number_value,
6061 NULL((void*)0)
6062 };
6063 proto_tree_add_bitmask_list(tree, tvb, offset, 2, pfcp_additional_usage_reports_information_flags, ENC_BIG_ENDIAN0x00000000);
6064 offset += 2;
6065
6066 if (offset < length) {
6067 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6068 }
6069}
6070
6071/*
6072 * 8.2.92 Traffic Endpoint ID
6073 */
6074static void dissect_pfcp_traffic_endpoint_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6075{
6076 int offset = 0;
6077
6078 proto_tree_add_item(tree, hf_pfcp_traffic_endpoint_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6079 offset += 1;
6080
6081 if (offset < length) {
6082 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6083 }
6084 return;
6085}
6086
6087/*
6088 * 8.2.93 MAC Address
6089 */
6090static void dissect_pfcp_mac_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6091{
6092 int offset = 0;
6093 uint64_t flags_val;
6094
6095 static int * const pfcp_mac_address_flags[] = {
6096 &hf_pfcp_spare_b7_b4,
6097 &hf_pfcp_mac_address_flags_b3_udes,
6098 &hf_pfcp_mac_address_flags_b2_usou,
6099 &hf_pfcp_mac_address_flags_b1_dest,
6100 &hf_pfcp_mac_address_flags_b0_sour,
6101 NULL((void*)0)
6102 };
6103 /* Octet 5 Spare EDES USOU DEST SOUR */
6104 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mac_address_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
6105 offset += 1;
6106
6107 // Octets "m to (m+5)" or "n to (n+5)" and "o to (o+5)" or "p to (p+5)", if present,
6108 // shall contain a MAC address value (12-digit hexadecimal numbers).
6109 if ((flags_val & 0x1) == 1) {
6110 /* m to (m+5) Source MAC Address
6111 * SOUR: If this bit is set to "1", then the Source MAC Address field shall be present
6112 */
6113 proto_tree_add_item(tree, hf_pfcp_mac_address_source_mac_address, tvb, offset, 6, ENC_NA0x00000000);
6114 offset += 6;
6115 }
6116
6117 if ((flags_val & 0x2) == 2) {
6118 /* n to (n+5) Destination MAC Address
6119 * DEST: If this bit is set to "1", then the Destination MAC Address field shall be present
6120 */
6121 proto_tree_add_item(tree, hf_pfcp_mac_address_dest_mac_address, tvb, offset, 6, ENC_NA0x00000000);
6122 offset += 6;
6123 }
6124
6125 if ((flags_val & 0x4) == 4) {
6126 /* o to (o+5) Upper Source MAC Address
6127 * USOU: If this bit is set to "1", then the Upper Source MAC Address field shall be present
6128 */
6129 proto_tree_add_item(tree, hf_pfcp_mac_address_upper_source_mac_address, tvb, offset, 6, ENC_NA0x00000000);
6130 offset += 6;
6131 }
6132
6133 if ((flags_val & 0x8) == 8) {
6134 /* p to (p+5) Upper Destination MAC Address
6135 * UDES: If this bit is set to "1", then the Upper Destination MAC Address field shall be present
6136 */
6137 proto_tree_add_item(tree, hf_pfcp_mac_address_upper_dest_mac_address, tvb, offset, 6, ENC_NA0x00000000);
6138 offset += 6;
6139 }
6140
6141 if (offset < length) {
6142 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6143 }
6144 return;
6145}
6146
6147/*
6148 * 8.2.94 C-TAG (Customer-VLAN tag)
6149 */
6150static void dissect_pfcp_c_tag(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6151{
6152 int offset = 0;
6153
6154 offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
6155
6156 if (offset < length) {
6157 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6158 }
6159 return;
6160}
6161
6162/*
6163 * 8.2.95 S-TAG (Service-VLAN tag)
6164 */
6165static void dissect_pfcp_s_tag(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6166{
6167 int offset = 0;
6168
6169 offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6170
6171 if (offset < length) {
6172 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6173 }
6174 return;
6175}
6176
6177/*
6178 * 8.2.96 Ethertype
6179 */
6180static void dissect_pfcp_ethertype(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6181{
6182 int offset = 0;
6183
6184 proto_tree_add_item(tree, hf_pfcp_ethertype, tvb, offset, 2, ENC_NA0x00000000);
6185 offset += 2;
6186
6187 if (offset < length) {
6188 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6189 }
6190 return;
6191}
6192
6193/*
6194 * 8.2.97 Proxying
6195 */
6196static void dissect_pfcp_proxying(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6197{
6198 int offset = 0;
6199 uint64_t flags_val;
6200
6201 static int * const pfcp_proxying_flags[] = {
6202 &hf_pfcp_spare_b7_b2,
6203 &hf_pfcp_proxying_flags_b1_ins,
6204 &hf_pfcp_proxying_flags_b0_arp,
6205 NULL((void*)0)
6206 };
6207 /* Octet 5 Spare INS ARP */
6208 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_proxying_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
6209 offset += 1;
6210
6211 if (offset < length) {
6212 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6213 }
6214 return;
6215}
6216
6217/*
6218 * 8.2.98 Ethertype Filter ID
6219 */
6220static void dissect_pfcp_ethertype_filter_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6221{
6222 int offset = 0;
6223
6224 proto_tree_add_item(tree, hf_pfcp_ethertype_filter_id, tvb, offset, 4, ENC_NA0x00000000);
6225 offset += 4;
6226
6227 if (offset < length) {
6228 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6229 }
6230 return;
6231}
6232
6233/*
6234 * 8.2.99 Ethernet Filter Properties
6235 */
6236static void dissect_pfcp_ethernet_filter_properties(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6237{
6238 int offset = 0;
6239 uint64_t flags_val;
6240
6241 static int * const pfcp_ethernet_filter_properties_flags[] = {
6242 &hf_pfcp_spare_b7_b1,
6243 &hf_pfcp_ethertype_filter_properties_flags_b0_bide,
6244 NULL((void*)0)
6245 };
6246 /* Octet 5 Spare BIDE */
6247 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_ethernet_filter_properties_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
6248 offset += 1;
6249
6250 if (offset < length) {
6251 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6252 }
6253 return;
6254}
6255
6256/*
6257 * 8.2.100 Suggested Buffering Packets Count
6258 */
6259static void
6260dissect_pfcp_suggested_buffering_packets_count(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6261{
6262 int offset = 0;
6263 uint32_t value;
6264 /* 5 Packet count value */
6265 proto_tree_add_item_ret_uint(tree, hf_pfcp_suggested_buffering_packets_count_packet_count, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
6266 offset += 1;
6267
6268 proto_item_append_text(item, "%u packets", value);
6269
6270 if (offset < length) {
6271 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6272 }
6273}
6274
6275/*
6276 * 8.2.101 User ID
6277 */
6278static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6279{
6280 int offset = 0;
6281 uint64_t flags_val;
6282 uint32_t length_imsi, length_imei, length_msisdn, length_nai, length_supi, length_gpsi, length_pei;
6283
6284 static int * const pfcp_user_id_flags[] = {
6285 &hf_pfcp_spare_b7,
6286 &hf_pfcp_user_id_flags_b6_peif,
6287 &hf_pfcp_user_id_flags_b5_gpsif,
6288 &hf_pfcp_user_id_flags_b4_supif,
6289 &hf_pfcp_user_id_flags_b3_naif,
6290 &hf_pfcp_user_id_flags_b2_msisdnf,
6291 &hf_pfcp_user_id_flags_b1_imeif,
6292 &hf_pfcp_user_id_flags_b0_imsif,
6293 NULL((void*)0)
6294 };
6295 /* Octet 5 Spare IMEIF IMSIF */
6296 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_user_id_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
6297 offset += 1;
6298
6299 /* Bit 1 - IMSIF: If this bit is set to "1", then the Length of IMSI and IMSI fields shall be present */
6300 if ((flags_val & 0x1)) {
6301 /* 6 Length of IMSI */
6302 proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_imsi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_imsi);
6303 offset += 1;
6304 /* 7 to (a) IMSI */
6305 dissect_e212_imsi(tvb, pinfo, tree, offset, length_imsi, false0);
6306 offset += length_imsi;
6307 }
6308
6309 /* Bit 2 - IMEIF: If this bit is set to "1", then the Length of IMEI and IMEI fields shall be present */
6310 if ((flags_val & 0x2)) {
6311 /* b Length of IMEI */
6312 proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_imei, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_imei);
6313 offset += 1;
6314
6315 /* (b+1) to c IMEI */
6316 /* Fetch the BCD encoded digits from tvb low half byte, formating the digits according to
6317 * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
6318 * allocated string will be returned.
6319 */
6320 proto_tree_add_item(tree, hf_pfcp_user_id_imei, tvb, offset, length_imei, ENC_BCD_DIGITS_0_90x00000044|ENC_LITTLE_ENDIAN0x80000000);
6321 offset += length_imei;
6322 }
6323
6324 /* Bit 3 - MSIDNF: If this bit is set to "1", then the Length of MSISDN and MSISDN fields shall be present */
6325 if ((flags_val & 0x4)) {
6326 /* d Length of MSISDN */
6327 proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_msisdn, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_msisdn);
6328 offset += 1;
6329 /* (d+1) to e MSISDN */
6330 dissect_e164_msisdn(tvb, tree, offset, length_msisdn, E164_ENC_BCD);
6331 offset += length_msisdn;
6332 }
6333
6334 /* Bit 4 - NAIF: If this bit is set to "1", then the Length of NAI and NAI fields shall be present */
6335 if ((flags_val & 0x8)) {
6336 /* f Length of NAI */
6337 proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_nai, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_nai);
6338 offset += 1;
6339 /* (f+1) to g NAI */
6340 proto_tree_add_item(tree, hf_pfcp_user_id_nai, tvb, offset, length_nai, ENC_ASCII0x00000000);
6341 offset += length_nai;
6342 }
6343
6344 /* Bit 5 - SUPIF: If this bit is set to "1", then the Length of SUPI and SUPI fields shall be present */
6345 if ((flags_val & 0x10)) {
6346 /* f Length of SUPI */
6347 proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_supi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_supi);
6348 offset += 1;
6349 /* (f+1) to g SUPI */
6350 proto_tree_add_item(tree, hf_pfcp_user_id_supi, tvb, offset, length_supi, ENC_ASCII0x00000000);
6351 offset += length_supi;
6352 }
6353
6354 /* Bit 6 - GPSIF: If this bit is set to "1", then the Length of GPSI and GPSI fields shall be present */
6355 if ((flags_val & 0x20)) {
6356 /* f Length of GPSI */
6357 proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_gpsi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_gpsi);
6358 offset += 1;
6359 /* (f+1) to g GPSI */
6360 proto_tree_add_item(tree, hf_pfcp_user_id_gpsi, tvb, offset, length_gpsi, ENC_ASCII0x00000000);
6361 offset += length_gpsi;
6362 }
6363
6364 /* Bit 7 - PEIF: If this bit is set to "1", then the Length of PEI and PEI fields shall be present */
6365 if ((flags_val & 0x40)) {
6366 /* f Length of PEI */
6367 proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_pei, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_pei);
6368 offset += 1;
6369 /* (f+1) to g PEI */
6370 proto_tree_add_item(tree, hf_pfcp_user_id_pei, tvb, offset, length_pei, ENC_ASCII0x00000000);
6371 offset += length_pei;
6372 }
6373
6374 if (offset < length) {
6375 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6376 }
6377 return;
6378}
6379
6380/*
6381 * 8.2.102 Ethernet PDU Session Information
6382 */
6383static void dissect_pfcp_ethernet_pdu_session_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6384{
6385 int offset = 0;
6386
6387 static int * const pfcp_ethernet_pdu_session_information_flags[] = {
6388 &hf_pfcp_spare_b7_b1,
6389 &hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi,
6390 NULL((void*)0)
6391 };
6392 /* Octet 5 Spare ETHI */
6393 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_ethernet_pdu_session_information_flags, ENC_BIG_ENDIAN0x00000000);
6394 offset += 1;
6395
6396 if (offset < length) {
6397 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6398 }
6399 return;
6400}
6401
6402/*
6403 * 8.2.103 MAC Addresses Detected
6404 */
6405static void
6406dissect_pfcp_mac_addresses_detected(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6407{
6408 int offset = 0;
6409 uint32_t value, i, length_ctag, length_stag;
6410
6411 /* 5 Number of MAC addresses */
6412 proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_detected_number_of_mac_addresses, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
6413 offset += 1;
6414
6415 /* o to (o+6) MAC Address */
6416 for (i = 0; i < value; i++)
6417 {
6418 proto_tree_add_item(tree, hf_pfcp_mac_addresses_detected_mac_address, tvb, offset, 6, ENC_NA0x00000000);
6419 offset += 6;
6420 }
6421
6422 if (offset == length) {
6423 return;
6424 }
6425
6426 /* s Length of C-TAG */
6427 proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_detected_length_of_ctag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_ctag);
6428 offset += 1;
6429 /* (s+1) to t C-TAG */
6430 if (length_ctag > 0)
6431 {
6432 offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
6433 }
6434
6435 /* u Length of S-TAG */
6436 proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_detected_length_of_stag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_stag);
6437 offset += 1;
6438 /* (u+1) to v S-TAG */
6439 if (length_stag > 0)
6440 {
6441 offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6442 }
6443
6444 if (offset < length) {
6445 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6446 }
6447}
6448
6449/*
6450 * 8.2.104 MAC Addresses Removed
6451 */
6452static void
6453dissect_pfcp_mac_addresses_removed(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6454{
6455 int offset = 0;
6456 uint32_t value, i, length_ctag, length_stag;
6457
6458 /* 5 Number of MAC addresses */
6459 proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_removed_number_of_mac_addresses, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
6460 offset += 1;
6461
6462 /* o to (o+6) MAC Address */
6463 for (i = 0; i < value; i++)
6464 {
6465 proto_tree_add_item(tree, hf_pfcp_mac_addresses_removed_mac_address, tvb, offset, 6, ENC_NA0x00000000);
6466 offset += 6;
6467 }
6468
6469 if (offset == length) {
6470 return;
6471 }
6472
6473 /* s Length of C-TAG */
6474 proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_removed_length_of_ctag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_ctag);
6475 offset += 1;
6476 /* (s+1) to t C-TAG */
6477 if (length_ctag > 0)
6478 {
6479 offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
6480 }
6481
6482 /* u Length of S-TAG */
6483 proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_removed_length_of_stag, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_stag);
6484 offset += 1;
6485 /* (u+1) to v S-TAG */
6486 if (length_stag > 0)
6487 {
6488 offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6489 }
6490
6491 if (offset < length) {
6492 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6493 }
6494}
6495
6496/*
6497 * 8.2.105 Ethernet Inactivity Timer
6498 */
6499static void
6500dissect_pfcp_ethernet_inactivity_timer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6501{
6502 int offset = 0;
6503 uint32_t value;
6504 /*
6505 * The Ethernet Inactivity Timer field shall be encoded as an Unsigned32 binary integer value.
6506 */
6507
6508 /* 5 to 8 Inactivity Timer */
6509 proto_tree_add_item_ret_uint(tree, hf_pfcp_ethernet_inactivity_timer, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
6510 offset += 4;
6511
6512 if (offset < length) {
6513 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6514 }
6515
6516}
6517
6518/*
6519 * 8.2.106 Subsequent Event Quota
6520 */
6521static void
6522dissect_pfcp_subsequent_event_quota(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6523{
6524 int offset = 0;
6525 uint32_t value;
6526 /*
6527 * The Subsequent Event Quota field shall be encoded as an Unsigned32 binary integer value.
6528 */
6529
6530 /* 5 to 8 Subsequent Event Quota */
6531 proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_event_quota, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
6532 offset += 4;
6533
6534 proto_item_append_text(item, "%u", value);
6535
6536 if (offset < length) {
6537 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6538 }
6539}
6540
6541/*
6542 * 8.2.107 Subsequent Event Threshold
6543 */
6544static void
6545dissect_pfcp_subsequent_event_threshold(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6546{
6547 int offset = 0;
6548 uint32_t value;
6549 /*
6550 * The Subsequent Event Threshold field shall be encoded as an Unsigned32 binary integer value.
6551 */
6552
6553 /* 5 to 8 Subsequent Event Threshold */
6554 proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_event_threshold, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
6555 offset += 4;
6556
6557 proto_item_append_text(item, "%u", value);
6558
6559 if (offset < length) {
6560 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6561 }
6562}
6563
6564/*
6565 * 8.2.108 Trace Information
6566 */
6567static void
6568dissect_pfcp_trace_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6569{
6570 int offset = 0;
6571 uint32_t length_trigger_events, length_list_interfaces, length_ipaddress;
6572
6573 /* 5 to 7 MCC MNC */
6574 offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, true1);
6575
6576 /* 8 to 10 Trace ID */
6577 proto_tree_add_item(tree, hf_pfcp_trace_information_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000);
6578 offset += 3;
6579
6580 /* 11 Length of Trigger Events */
6581 proto_tree_add_item_ret_uint(tree, hf_pfcp_trace_information_length_trigger_events, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_trigger_events);
6582 offset += 1;
6583
6584 /* 12 to m Trigger Events */
6585 proto_tree_add_item(tree, hf_pfcp_trace_information_trigger_events, tvb, offset, length_trigger_events, ENC_NA0x00000000);
6586 offset += length_trigger_events;
6587
6588 /* m+1 Session Trace Depth */
6589 proto_tree_add_item(tree, hf_pfcp_trace_information_session_trace_depth, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6590 offset += 1;
6591
6592 /* m+2 Length of List of Interfaces */
6593 proto_tree_add_item_ret_uint(tree, hf_pfcp_trace_information_length_list_interfaces, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_list_interfaces);
6594 offset += 1;
6595
6596 /* (m+3) to p List of Interfaces */
6597 proto_tree_add_item(tree, hf_pfcp_trace_information_list_interfaces, tvb, offset, length_list_interfaces, ENC_NA0x00000000);
6598 offset += length_list_interfaces;
6599
6600 /* p+1 Length of IP address of Trace Collection Entity */
6601 proto_tree_add_item_ret_uint(tree, hf_pfcp_trace_information_length_ipaddress, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &length_ipaddress);
6602 offset += 1;
6603
6604 /* (p+2) to q IP Address of Trace Collection Entity */
6605 if (length_ipaddress == 4) {
6606 proto_tree_add_item(tree, hf_pfcp_trace_information_ipv4, tvb, offset, length_ipaddress, ENC_NA0x00000000);
6607 } else if (length_ipaddress == 16) {
6608 proto_tree_add_item(tree, hf_pfcp_trace_information_ipv6, tvb, offset, length_ipaddress, ENC_NA0x00000000);
6609 }
6610 offset += length_ipaddress;
6611
6612 if (offset < length) {
6613 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6614 }
6615}
6616
6617/*
6618 * 8.2.109 Framed-Route
6619 */
6620static void
6621dissect_pfcp_framed_route(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6622{
6623 /* Octet 5 to (n+4) Framed-Route
6624 * The Framed-Route field shall be encoded as an Octet String as the value part of the Framed-Route AVP specified in IETF RFC 2865
6625 * RFC 2865:
6626 * The Text field is one or more octets, and its contents are
6627 * implementation dependent. It is intended to be human readable and
6628 * MUST NOT affect operation of the protocol. It is recommended that
6629 * the message contain UTF-8 encoded 10646 [7] characters.
6630 */
6631 proto_tree_add_item(tree, hf_pfcp_framed_route, tvb, 0, length, ENC_UTF_80x00000002);
6632}
6633
6634/*
6635 * 8.2.110 Framed-Routing
6636 */
6637static void
6638dissect_pfcp_framed_routing(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6639{
6640 /* Octet 5 to (n+4) Framed-Routing
6641 * The Framed-Routing field shall be encoded as an Octet String as the value part of the Framed-Routing AVP specified in IETF RFC 2865
6642 */
6643 proto_tree_add_item(tree, hf_pfcp_framed_routing, tvb, 0, length, ENC_NA0x00000000);
6644}
6645
6646/*
6647 * 8.2.111 Framed-IPv6-Route
6648 */
6649static void
6650dissect_pfcp_framed_ipv6_route(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6651{
6652 /* Octet 5 to (n+4) Framed-IPv6-Route
6653 * The Framed-IPv6-Route field shall be encoded as an Octet String as the value part of the Framed-IPv6-Route AVP specified in RFC 3162
6654 * RFC 3162
6655 * "...It is intended to be human readable..."
6656 */
6657 proto_tree_add_item(tree, hf_pfcp_framed_ipv6_route, tvb, 0, length, ENC_UTF_80x00000002);
6658}
6659
6660/*
6661 * 8.2.112 Event Quota
6662 */
6663static void
6664dissect_pfcp_event_quota(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6665{
6666 int offset = 0;
6667 uint32_t value;
6668
6669 /* 5 to 8 Event Quota
6670 * The Event Quota field shall be encoded as an Unsigned32 binary integer value.
6671 */
6672 proto_tree_add_item_ret_uint(tree, hf_pfcp_event_quota, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
6673 offset += 4;
6674
6675 proto_item_append_text(item, "%u", value);
6676
6677 if (offset < length) {
6678 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6679 }
6680}
6681
6682/*
6683 * 8.2.113 Event Threshold
6684 */
6685static void
6686dissect_pfcp_event_threshold(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6687{
6688 int offset = 0;
6689 uint32_t value;
6690
6691 /* 5 to 8 Event Threshold
6692 * The Event Threshold field shall be encoded as an Unsigned32 binary integer value.
6693 */
6694 proto_tree_add_item_ret_uint(tree, hf_pfcp_event_threshold, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
6695 offset += 4;
6696
6697 proto_item_append_text(item, "%u", value);
6698
6699 if (offset < length) {
6700 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6701 }
6702}
6703
6704/*
6705 * 8.2.114 Time Stamp
6706 */
6707static void
6708dissect_pfcp_time_stamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6709{
6710 char *time_str;
6711 int offset = 0;
6712
6713 /* The Time Stamp field shall contain a UTC time.
6714 * Octets 5 to 8 shall be encoded in the same format as the first four octets
6715 * of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905.
6716 */
6717 proto_tree_add_item_ret_time_string(tree, hf_pfcp_time_stamp, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
6718 proto_item_append_text(item, "%s", time_str);
6719 offset += 4;
6720
6721 if (offset < length) {
6722 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6723 }
6724}
6725
6726/*
6727 * 8.2.115 Averaging Window
6728 */
6729static void
6730dissect_pfcp_averaging_window(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6731{
6732 int offset = 0;
6733 uint32_t value;
6734
6735 /* 5 to 8 Averaging Window
6736 * The Averaging Window field shall be encoded as an Unsigned32 binary integer value.
6737 */
6738 proto_tree_add_item_ret_uint(tree, hf_pfcp_averaging_window, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
6739 offset += 4;
6740
6741 proto_item_append_text(item, "%u", value);
6742
6743 if (offset < length) {
6744 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6745 }
6746}
6747
6748/*
6749 * 8.2.116 Paging Policy Indicator (PPI)
6750 */
6751static void
6752dissect_pfcp_paging_policy_indicator(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6753{
6754 int offset = 0;
6755 uint32_t value;
6756
6757 /* Octet 5 Paging Policy Indicator (PPI)
6758 * The PPI shall be encoded as a value between 0 and 7, as specified in clause 5.5.3.7 of 3GPP TS 38.415
6759 */
6760 proto_tree_add_item_ret_uint(tree, hf_pfcp_paging_policy_indicator, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
6761 offset++;
6762
6763 proto_item_append_text(item, "%u", value);
6764
6765 if (offset < length) {
6766 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6767 }
6768}
6769
6770/*
6771 * 8.2.117 APN/DNN
6772 */
6773static void
6774dissect_pfcp_apn_dnn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item , uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6775{
6776 int offset = 0;
6777
6778 /* Octet 5 APN/DNN
6779 * The encoding the APN/DNN field follows 3GPP TS 23.003 [2] clause 9.1.
6780 * The content of the APN/DNN field shall be the full APN/DNN with both the
6781 * APN/DNN Network Identifier and APN/DNN Operator Identifier
6782 */
6783 /* NOTE: The APN/DNN field is not encoded as a dotted string as commonly used in documentation. */
6784
6785 const uint8_t* string_value;
6786 proto_tree_add_item_ret_string(tree, hf_pfcp_apn_dnn, tvb, offset, length, ENC_APN_STR0x00000054 | ENC_NA0x00000000, pinfo->pool, &string_value);
6787 proto_item_append_text(item, "%s", string_value);
6788
6789}
6790
6791/*
6792 * 8.2.118 3GPP Interface Type
6793 */
6794
6795static const value_string pfcp_tgpp_interface_type_vals[] = {
6796
6797 { 0, "S1-U" },
6798 { 1, "S5/S8-U" },
6799 { 2, "S4-U" },
6800 { 3, "S11-U" },
6801 { 4, "S12" },
6802 { 5, "Gn/Gp-U" },
6803 { 6, "S2a-U" },
6804 { 7, "S2b-U" },
6805 { 8, "eNodeB GTP-U interface for DL data forwarding" },
6806 { 9, "eNodeB GTP-U interface for UL data forwarding" },
6807 { 10, "SGW/UPF GTP-U interface for DL data forwarding" },
6808 { 11, "N3 3GPP Access" },
6809 { 12, "N3 Trusted Non-3GPP Access" },
6810 { 13, "N3 Untrusted Non-3GPP Access" },
6811 { 14, "N3 for data forwarding" },
6812 { 15, "N9 (or N9 for non-roaming)" },
6813 { 16, "SGi" },
6814 { 17, "N6" },
6815 { 18, "N19" },
6816 { 19, "S8-U" },
6817 { 20, "Gp-U" },
6818 { 21, "N9 for roaming" },
6819 { 22, "Iu-U" },
6820 { 23, "N9 for data forwarding" },
6821 { 24, "Sxa-U" },
6822 { 25, "Sxb-U" },
6823 { 26, "Sxc-U" },
6824 { 27, "N4-U" },
6825 { 28, "SGW/UPF GTP-U interface for UL data forwarding" },
6826 { 29, "N6mb/Nmb9" },
6827 { 30, "N3mb" },
6828 { 31, "N19mb" },
6829 { 0, NULL((void*)0) }
6830};
6831
6832static void
6833dissect_pfcp_tgpp_interface_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6834{
6835 int offset = 0;
6836 uint32_t tgpp_interface_type;
6837
6838 /* Octet 5 Spare Node ID Type*/
6839 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
6840 proto_tree_add_item_ret_uint(tree, hf_pfcp_tgpp_interface_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &tgpp_interface_type);
6841 proto_item_append_text(item, "%s: ", val_to_str_const(tgpp_interface_type, pfcp_tgpp_interface_type_vals, "Unknown"));
6842 offset++;
6843
6844 if (offset < length) {
6845 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6846 }
6847
6848}
6849
6850/*
6851 * 8.2.119 PFCPSRReq-Flags
6852 */
6853static void
6854dissect_pfcp_pfcpsrreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6855{
6856 int offset = 0;
6857
6858 static int * const pfcp_pfcpsrreq_flags[] = {
6859 &hf_pfcp_spare_b7_b1,
6860 &hf_pfcp_pfcpsrreq_flags_b0_psdbu,
6861 NULL((void*)0)
6862 };
6863 /* Octet 5 Spare Spare Spare Spare Spare Spare Spare PSDBU */
6864 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsrreq_flags, ENC_BIG_ENDIAN0x00000000);
6865 offset += 1;
6866
6867 if (offset < length) {
6868 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6869 }
6870
6871}
6872
6873/*
6874 * 8.2.120 PFCPAUReq-Flags
6875 */
6876static void
6877dissect_pfcp_pfcpaureq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6878{
6879 int offset = 0;
6880
6881 static int * const pfcp_pfcpaureq_flags[] = {
6882 &hf_pfcp_spare_b7_b1,
6883 &hf_pfcp_pfcpaureq_flags_b0_parps,
6884 NULL((void*)0)
6885 };
6886 /* Octet 5 Spare Spare Spare Spare Spare Spare Spare PSDBU */
6887 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpaureq_flags, ENC_BIG_ENDIAN0x00000000);
6888 offset += 1;
6889
6890 if (offset < length) {
6891 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6892 }
6893
6894}
6895
6896/*
6897 * 8.2.121 Activation Time
6898 */
6899static void
6900dissect_pfcp_activation_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6901{
6902 int offset = 0;
6903 char *time_str;
6904
6905 /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
6906 * format as defined in section 6 of IETF RFC 5905
6907 */
6908
6909 proto_tree_add_item_ret_time_string(tree, hf_pfcp_activation_time, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
6910 proto_item_append_text(item, "%s", time_str);
6911 offset += 4;
6912
6913 if (offset < length) {
6914 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6915 }
6916}
6917
6918/*
6919 * 8.2.122 Deactivation Time
6920 */
6921static void
6922dissect_pfcp_deactivation_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6923{
6924 int offset = 0;
6925 char *time_str;
6926
6927 /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
6928 * format as defined in section 6 of IETF RFC 5905
6929 */
6930
6931 proto_tree_add_item_ret_time_string(tree, hf_pfcp_deactivation_time, tvb, offset, 4, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
6932 proto_item_append_text(item, "%s", time_str);
6933 offset += 4;
6934
6935 if (offset < length) {
6936 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6937 }
6938}
6939
6940/*
6941 * 8.2.123 MAR ID
6942 */
6943
6944static void
6945dissect_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
6946{
6947 int offset = 0;
6948
6949 offset = decode_pfcp_mar_id(tvb, pinfo, tree, item, offset, args);
6950
6951 if (offset < length) {
6952 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6953 }
6954}
6955
6956/*
6957 * 8.2.124 Steering Functionality
6958 */
6959static const value_string pfcp_steering_functionality_vals[] = {
6960 { 0, "ATSSS-LL" },
6961 { 1, "MPTCP" },
6962 { 0, NULL((void*)0) }
6963};
6964
6965static void
6966dissect_pfcp_steering_functionality(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6967{
6968 int offset = 0;
6969 uint32_t value;
6970 /* Octet 5 Steering Functionality Value
6971 * The Steering Functionality shall be encoded as a 4 bits binary
6972 */
6973 proto_tree_add_item_ret_uint(tree, hf_pfcp_steering_functionality, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
6974 offset++;
6975
6976 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_steering_functionality_vals, "Unknown"));
6977
6978 if (offset < length) {
6979 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6980 }
6981}
6982
6983/*
6984 * 8.2.125 Steering Mode
6985 */
6986static const value_string pfcp_steering_mode_vals[] = {
6987 { 0, "Active-Standby" },
6988 { 1, "Smallest Delay" },
6989 { 2, "Load Balancing" },
6990 { 3, "Priority-based" },
6991 { 4, "Redundant" },
6992 { 0, NULL((void*)0) }
6993};
6994
6995static void
6996dissect_pfcp_steering_mode(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
6997{
6998 int offset = 0;
6999 uint32_t value;
7000 /* Octet 5 Steering Mode Value
7001 * The Steering Mode shall be encoded as a 4 bits binary
7002 */
7003 proto_tree_add_item_ret_uint(tree, hf_pfcp_steering_mode, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
7004 offset++;
7005
7006 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_steering_mode_vals, "Unknown"));
7007
7008 if (offset < length) {
7009 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7010 }
7011}
7012
7013/*
7014 * 8.2.126 Weight
7015 */
7016static void
7017dissect_pfcp_weight(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7018{
7019 uint32_t value;
7020 /* Octet 5 Weight */
7021 proto_tree_add_item_ret_uint(tree, hf_pfcp_weight, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
7022
7023 proto_item_append_text(item, "%u", value);
7024
7025}
7026
7027/*
7028 * 8.2.127 Priority
7029 */
7030static const value_string pfcp_priority_vals[] = {
7031 { 0, "Active" },
7032 { 1, "Standby" },
7033 { 2, "No Standby" },
7034 { 3, "High" },
7035 { 4, "Low" },
7036 { 5, "Primary" },
7037 { 6, "Secondary" },
7038 { 0, NULL((void*)0) }
7039};
7040
7041static void
7042dissect_pfcp_priority(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7043{
7044 int offset = 0;
7045 uint32_t value;
7046 /* Octet 5 Priority Value
7047 * The Priority shall be encoded as a 4 bits binary.
7048 */
7049 proto_tree_add_item_ret_uint(tree, hf_pfcp_priority, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
7050 offset++;
7051
7052 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_priority_vals, "Unknown"));
7053
7054 if (offset < length) {
7055 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7056 }
7057}
7058
7059/*
7060 * 8.2.128 UE IP address Pool Identity
7061 */
7062static void
7063dissect_pfcp_ue_ip_address_pool_identity(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7064{
7065 int offset = 0;
7066 uint32_t pool_length;
7067
7068 /* Octet 7 to "k" UE IP address Pool Identity
7069 * The UE IP address Pool Identity field shall be encoded as an OctetString
7070 * (see the Framed-Ipv6-Pool and Framed-Pool in clause 12.6.3 of 3GPP TS 29.561).
7071 */
7072 proto_tree_add_item_ret_uint(tree, hf_pfcp_ue_ip_address_pool_length, tvb, 0, 2, ENC_BIG_ENDIAN0x00000000, &pool_length);
7073 offset += 2;
7074
7075 proto_tree_add_item(tree, hf_pfcp_ue_ip_address_pool_identity, tvb, offset, pool_length, ENC_NA0x00000000);
7076 offset += pool_length;
7077
7078 if (offset < length) {
7079 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7080 }
7081}
7082
7083/*
7084 * 8.2.129 Alternative SMF IP Address
7085 */
7086static void
7087dissect_pfcp_alternative_smf_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7088{
7089 int offset = 0;
7090 uint64_t alternative_smf_ip_address_flags;
7091
7092 static int * const pfcp_alternative_smf_ip_address_flags[] = {
7093 &hf_pfcp_spare_b7_b2,
7094 &hf_pfcp_alternative_smf_ip_address_flags_ppe,
7095 &hf_pfcp_b1_v4,
7096 &hf_pfcp_b0_v6,
7097 NULL((void*)0)
7098 };
7099 /* Octet 5 Spare PPE V4 V6 */
7100 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_alternative_smf_ip_address_flags, ENC_BIG_ENDIAN0x00000000, &alternative_smf_ip_address_flags);
7101 offset += 1;
7102
7103 /* IPv4 address (if present) */
7104 if (alternative_smf_ip_address_flags & 0x2) {
7105 proto_tree_add_item(tree, hf_pfcp_alternative_smf_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7106 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
7107 offset += 4;
7108 }
7109 /* IPv6 address (if present) */
7110 if (alternative_smf_ip_address_flags & 0x1) {
7111 proto_tree_add_item(tree, hf_pfcp_alternative_smf_ip_address_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7112 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
7113 offset += 16;
7114 }
7115
7116 if (offset < length) {
7117 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7118 }
7119}
7120
7121/*
7122 * 8.2.130 Packet Replication and Detection Carry-On Information
7123 */
7124static void
7125dissect_pfcp_packet_replication_and_detection_carry_on_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7126{
7127 int offset = 0;
7128
7129 static int * const pfcp_packet_replication_and_detection_carry_on_information_flags[] = {
7130 &hf_pfcp_spare_b7_b4,
7131 &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b3_dcaroni,
7132 &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b2_prin6i,
7133 &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b1_prin19i,
7134 &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b0_priueai,
7135 NULL((void*)0)
7136 };
7137 /* Octet 5 Spare Spare Spare Spare DCARONI PRIN6I PRIN19I PRIUEAI */
7138 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_packet_replication_and_detection_carry_on_information_flags, ENC_BIG_ENDIAN0x00000000);
7139 offset += 1;
7140
7141 if (offset < length) {
7142 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7143 }
7144}
7145
7146/*
7147 * 8.2.131 SMF Set ID
7148 */
7149static void
7150dissect_pfcp_smf_set_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7151{
7152 int offset = 0;
7153
7154 /* Octet 5 Spare */
7155 proto_tree_add_item(tree, hf_pfcp_spare, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7156 offset++;
7157
7158 /* 6 to m FQDN */
7159 offset = decode_pfcp_fqdn(tvb, pinfo, tree, item, offset, length);
7160
7161 if (offset < length) {
7162 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7163 }
7164}
7165
7166/*
7167 * 8.2.132 Quota Validity Time
7168 */
7169static void
7170dissect_pfcp_quota_validity_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7171{
7172 int offset = 0;
7173 unsigned value;
7174 nstime_t quvti;
7175 proto_item *pi;
7176
7177 /* The Quota Validity Time value shall be encoded as an Unsigned32 binary integer value. */
7178 proto_tree_add_item_ret_uint(tree, hf_pfcp_validity_time_value, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &value);
7179 offset += 4;
7180
7181 proto_item_append_text(item, "%u", value);
7182
7183 nstime_copy(&quvti, &(pinfo->abs_ts));
7184 quvti.secs += value;
7185 pi = proto_tree_add_time(tree, hf_pfcp_validity_time_str, tvb, 0, 0, &quvti);
7186 proto_item_set_generated(pi);
7187
7188 if (offset < length) {
7189 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7190 }
7191}
7192
7193/*
7194 * 8.2.133 Number of Reports
7195 */
7196static void
7197dissect_pfcp_number_of_reports(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7198{
7199 unsigned value;
7200
7201 /* Number of Reports, an Unsigned16 binary integer value excluding the first value "0". */
7202 proto_tree_add_item_ret_uint(tree, hf_pfcp_number_of_reports, tvb, 0, length, ENC_BIG_ENDIAN0x00000000, &value);
7203 proto_item_append_text(item, "%u", value);
7204}
7205
7206/*
7207 * 8.2.134 PFCPASRsp-Flags
7208 */
7209static void
7210dissect_pfcp_pfcpasrsp_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7211{
7212 int offset = 0;
7213
7214 static int * const pfcp_pfcpasrsp_flags_flags[] = {
7215 &hf_pfcp_spare_b7_b2,
7216 &hf_pfcp_pfcpasrsp_flags_flags_b1_uupsi,
7217 &hf_pfcp_pfcpasrsp_flags_flags_b0_psrei,
7218 NULL((void*)0)
7219 };
7220 /* Octet 5 Spare UUPSI PSREI */
7221 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpasrsp_flags_flags, ENC_BIG_ENDIAN0x00000000);
7222 offset += 1;
7223
7224 if (offset < length) {
7225 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7226 }
7227}
7228
7229/*
7230 * 8.2.135 CP PFCP Entity IP Address
7231 */
7232static void
7233dissect_pfcp_cp_pfcp_entity_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7234{
7235 int offset = 0;
7236 uint64_t cp_pfcp_entity_ip_address_flags;
7237
7238 static int * const pfcp_cp_pfcp_entity_ip_address_flags[] = {
7239 &hf_pfcp_spare_b7_b2,
7240 &hf_pfcp_b1_v4,
7241 &hf_pfcp_b0_v6,
7242 NULL((void*)0)
7243 };
7244 /* Octet 5 Spare V4 V6 */
7245 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_cp_pfcp_entity_ip_address_flags, ENC_BIG_ENDIAN0x00000000, &cp_pfcp_entity_ip_address_flags);
7246 offset += 1;
7247
7248 /* IPv4 address (if present) */
7249 if ((cp_pfcp_entity_ip_address_flags & 0x2)) {
7250 proto_tree_add_item(tree, hf_pfcp_cp_pfcp_entity_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7251 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
7252 offset += 4;
7253 }
7254 /* IPv6 address (if present) */
7255 if ((cp_pfcp_entity_ip_address_flags & 0x1)) {
7256 proto_tree_add_item(tree, hf_pfcp_cp_pfcp_entity_ip_address_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7257 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
7258 offset += 16;
7259 }
7260
7261 if (offset < length) {
7262 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7263 }
7264}
7265
7266/*
7267 * 8.2.136 PFCPSEReq-Flags
7268 */
7269static void
7270dissect_pfcp_pfcpsereq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7271{
7272 int offset = 0;
7273
7274 static int * const pfcp_pfcpsereq_flags_flags[] = {
7275 &hf_pfcp_spare_b7_b3,
7276 &hf_pfcp_pfcpsereq_flags_flags_b2_hrsbom,
7277 &hf_pfcp_pfcpsereq_flags_flags_b1_sumpc,
7278 &hf_pfcp_pfcpsereq_flags_flags_b0_resti,
7279 NULL((void*)0)
7280 };
7281 /* Octet 5 Spare HRSBOM SUMPC RESTI */
7282 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsereq_flags_flags, ENC_BIG_ENDIAN0x00000000);
7283 offset += 1;
7284
7285 if (offset < length) {
7286 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7287 }
7288}
7289
7290/*
7291 * 8.2.137 IP Multicast Address
7292 */
7293static void
7294dissect_pfcp_ip_multicast_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7295{
7296 int offset = 0;
7297 uint64_t ip_multicast_address_flags;
7298
7299 static int * const pfcp_ip_multicast_address_flags[] = {
7300 &hf_pfcp_spare_b7_b4,
7301 &hf_pfcp_ip_multicast_address_flags_b3_any,
7302 &hf_pfcp_ip_multicast_address_flags_b2_range,
7303 &hf_pfcp_b1_v4,
7304 &hf_pfcp_b0_v6,
7305 NULL((void*)0)
7306 };
7307 /* Octet 5 Spare A(Any) R(Range) V4 V6 */
7308 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_ip_multicast_address_flags, ENC_BIG_ENDIAN0x00000000, &ip_multicast_address_flags);
7309 offset += 1;
7310
7311 /* Any: If this bit is set to "1", this indicates any IP multicast address; in this case, no IP address field shall be included. */
7312 if (!(ip_multicast_address_flags & 0x8)) {
7313 /* IPv4 address (if present) */
7314 if ((ip_multicast_address_flags & 0x2)) {
7315 proto_tree_add_item(tree, hf_pfcp_ip_multicast_address_start_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7316 offset += 4;
7317 }
7318 /* IPv6 address (if present) */
7319 if ((ip_multicast_address_flags & 0x1)) {
7320 proto_tree_add_item(tree, hf_pfcp_ip_multicast_address_start_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7321 offset += 16;
7322 }
7323 /* Range */
7324 if ((ip_multicast_address_flags & 0x4)) {
7325 /* IPv4 address (if present) */
7326 if ((ip_multicast_address_flags & 0x2)) {
7327 proto_tree_add_item(tree, hf_pfcp_ip_multicast_address_end_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7328 offset += 4;
7329 }
7330 /* IPv6 address (if present) */
7331 if ((ip_multicast_address_flags & 0x1)) {
7332 proto_tree_add_item(tree, hf_pfcp_ip_multicast_address_end_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7333 offset += 16;
7334 }
7335 }
7336 }
7337
7338 if (offset < length) {
7339 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7340 }
7341}
7342
7343/*
7344 * 8.2.138 Source IP Address
7345 */
7346static void
7347dissect_pfcp_source_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7348{
7349 int offset = 0;
7350 uint64_t source_ip_address_flags;
7351
7352 static int * const pfcp_source_ip_address_flags[] = {
7353 &hf_pfcp_spare_b7_b3,
7354 &hf_pfcp_source_ip_address_flags_b2_mpl,
7355 &hf_pfcp_b1_v4,
7356 &hf_pfcp_b0_v6,
7357 NULL((void*)0)
7358 };
7359 /* Octet 5 Spare V4 V6 */
7360 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_source_ip_address_flags, ENC_BIG_ENDIAN0x00000000, &source_ip_address_flags);
7361 offset += 1;
7362
7363 /* IPv4 address (if present) */
7364 if ((source_ip_address_flags & 0x2)) {
7365 proto_tree_add_item(tree, hf_pfcp_source_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7366 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
7367 offset += 4;
7368 }
7369 /* IPv6 address (if present) */
7370 if ((source_ip_address_flags & 0x1)) {
7371 proto_tree_add_item(tree, hf_pfcp_source_ip_address_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7372 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
7373 offset += 16;
7374 }
7375 /* Mask/Prefix Length (if present) */
7376 if ((source_ip_address_flags & 0x4)) {
7377 proto_tree_add_item(tree, hf_pfcp_source_ip_address_mask_prefix_lengt, tvb, offset, 1, ENC_NA0x00000000);
7378 proto_item_append_text(item, ", Mask/Prefix length %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
7379 offset += 1;
7380 }
7381
7382
7383 if (offset < length) {
7384 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7385 }
7386}
7387
7388/*
7389 * 8.2.139 Packet Rate Status
7390 */
7391static void
7392dissect_pfcp_packet_rate_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7393{
7394 int offset = 0;
7395 uint64_t flags_val;
7396
7397 static int * const pfcp_packet_rate_status_flags[] = {
7398 &hf_pfcp_spare_b7_b3,
7399 &hf_pfcp_packet_rate_status_flags_b2_apr,
7400 &hf_pfcp_packet_rate_status_flags_b1_dl,
7401 &hf_pfcp_packet_rate_status_flags_b0_ul,
7402 NULL((void*)0)
7403 };
7404 /* Octet 5 Spare APR DL UL*/
7405 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_packet_rate_status_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
7406 offset += 1;
7407
7408
7409 /* Number of Remaining Uplink Packets Allowed */
7410 if ((flags_val & 0x1)) {
7411 proto_tree_add_item(tree, hf_pfcp_packet_rate_status_ul, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7412 offset += 2;
7413
7414 if ((flags_val & 0x4)) {
7415 proto_tree_add_item(tree, hf_pfcp_packet_rate_status_apr_ul, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7416 offset += 2;
7417 }
7418 }
7419 /* Number of Remaining Downlink Packets Allowed */
7420 if ((flags_val & 0x2)) {
7421 proto_tree_add_item(tree, hf_pfcp_packet_rate_status_dl, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7422 offset += 2;
7423
7424 /* Additional number of Remaining Downlink Packets Allowed */
7425 if ((flags_val & 0x4)) {
7426 proto_tree_add_item(tree, hf_pfcp_packet_rate_status_apr_dl, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7427 offset += 2;
7428 }
7429 }
7430 /* Rate Control Status Validity Time */
7431 if (offset < length) {
7432 proto_tree_add_item(tree, hf_pfcp_packet_rate_status_validity_time, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
7433 offset += 8;
7434 }
7435
7436 if (offset < length) {
7437 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7438 }
7439}
7440
7441/*
7442 * 8.2.140 Create Bridge/Router Info
7443 */
7444static void
7445dissect_pfcp_create_bridge_router_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7446{
7447 int offset = 0;
7448
7449 static int * const pfcp_create_bridge_router_info_flags[] = {
7450 &hf_pfcp_spare_b7_b2,
7451 &hf_pfcp_create_bridge_router_info_flags_b1_rii,
7452 &hf_pfcp_create_bridge_router_info_flags_b0_bii,
7453 NULL((void*)0)
7454 };
7455 /* Octet 5 Spare RII BII */
7456 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_create_bridge_router_info_flags, ENC_BIG_ENDIAN0x00000000);
7457 offset += 1;
7458
7459 if (offset < length) {
7460 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7461 }
7462}
7463
7464/*
7465 * 8.2.141 Port Number
7466 */
7467static void
7468dissect_pfcp_port_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7469{
7470 unsigned value;
7471
7472 /* The Port Number shall contain one Port Number value */
7473 proto_tree_add_item_ret_uint(tree, hf_pfcp_port_number, tvb, 0, length, ENC_BIG_ENDIAN0x00000000, &value);
7474 proto_item_append_text(item, "%u", value);
7475}
7476
7477/*
7478 * 8.2.142 NW-TT Port Number
7479 */
7480static void
7481dissect_pfcp_nw_tt_port_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7482{
7483 unsigned value;
7484
7485 /* The NW-TT Port Number shall contain one Port Number value */
7486 proto_tree_add_item_ret_uint(tree, hf_pfcp_nw_tt_port_number, tvb, 0, length, ENC_BIG_ENDIAN0x00000000, &value);
7487 proto_item_append_text(item, "%u", value);
7488}
7489
7490/*
7491 * 8.2.143 5GS User Plane Node ID
7492 */
7493static void
7494dissect_pfcp_5gs_user_plane_node_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7495{
7496 int offset = 0;
7497 uint64_t flags_val;
7498
7499 static int * const pfcp_5gs_user_plane_node_id_flags[] = {
7500 &hf_pfcp_spare_b7_b4,
7501 &hf_pfcp_5gs_user_plane_node_id_flags_b0_bid,
7502 NULL((void*)0)
7503 };
7504 /* Octet 5 Spare BID */
7505 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_5gs_user_plane_node_id_flags, ENC_BIG_ENDIAN0x00000000, &flags_val);
7506 offset += 1;
7507
7508 // Bit 1 – BID: If this bit is set to "1", then the Use Plane value field shall be present,
7509 // The Bridge ID value is defined in IEEE.802.1Q clause 14.2.5 and value shall be encoded as an Unisigned64 binary integer.
7510 if ((flags_val & 0x1)) {
7511 proto_tree_add_item(tree, hf_pfcp_5gs_user_plane_node_id_value, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
7512 offset += 8;
7513 }
7514
7515 if (offset < length) {
7516 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7517 }
7518}
7519
7520/*
7521 * 8.2.144 Port Management Information Container
7522 */
7523static void
7524dissect_pfcp_port_management_information_container(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7525{
7526 /* Oct 5 The Port Management Information field shall be encoded as an Octet String. */
7527 proto_tree_add_item(tree, hf_pfcp_port_management_information, tvb, 0, length, ENC_NA0x00000000);
7528}
7529
7530/*
7531 * 8.2.145 Requested Clock Drift Information
7532 */
7533static void
7534dissect_pfcp_requested_clock_drift_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7535{
7536 int offset = 0;
7537
7538 static int * const pfcp_requested_clock_drift_control_information_flags[] = {
7539 &hf_pfcp_spare_b7_b2,
7540 &hf_pfcp_requested_clock_drift_control_information_flags_b1_rrcr,
7541 &hf_pfcp_requested_clock_drift_control_information_flags_b0_rrto,
7542 NULL((void*)0)
7543 };
7544 /* Octet 5 Spare BII */
7545 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_requested_clock_drift_control_information_flags, ENC_BIG_ENDIAN0x00000000);
7546 offset += 1;
7547
7548 if (offset < length) {
7549 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7550 }
7551}
7552
7553/*
7554 * 8.2.146 Time Domain Number
7555 */
7556static void
7557dissect_pfcp_time_domain_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7558{
7559 int offset = 0;
7560 unsigned value;
7561
7562 /* Oct 5 The TSN Time Domain Number value field shall be encoded as a binary integer value. */
7563 proto_tree_add_item_ret_uint(tree, hf_pfcp_time_domain_number_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
7564 offset++;
7565
7566 proto_item_append_text(item, "%u", value);
7567
7568 if (offset < length) {
7569 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7570 }
7571}
7572
7573/*
7574 * 8.2.147 Time Offset Threshold
7575 */
7576static void
7577dissect_pfcp_time_offset_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7578{
7579 int offset = 0;
7580
7581 /* Oct 5 to 12 The Time Offset Threshold field shall be encoded as a signed64 binary integer value. It shall contain the Time Offset Threshold in nanoseconds. */
7582 proto_tree_add_item(tree, hf_pfcp_time_offset_threshold, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
7583 offset += 8;
7584
7585 if (offset < length) {
7586 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7587 }
7588}
7589
7590/*
7591 * 8.2.148 Cumulative rateRatio Threshold
7592 */
7593static void
7594dissect_pfcp_cumulative_rate_ratio_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7595{
7596 int offset = 0;
7597
7598 /* Oct 5 The Cumulative rateRatio Threshold field shall be encoded as the cumulativeRateRatio (Integer32) specified in clauses 14.4.2 and 15.6 of IEEE Std 802.1AS-Rev/D7.3 [58], i.e. the quantity "(rateRatio- 1.0)(2^41)". */
7599 proto_tree_add_item(tree, hf_pfcp_cumulative_rate_ratio_threshold, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7600 offset += 4;
7601
7602 if (offset < length) {
7603 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7604 }
7605}
7606
7607/*
7608 * 8.2.149 Time Offset Measurement
7609 */
7610static void
7611dissect_pfcp_time_offset_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7612{
7613 int offset = 0;
7614
7615 /* Oct 5 The Time Offset Measurement field shall be encoded as a signed64 binary integer value. It shall contain the Time Offset Measurement in nanoseconds. */
7616 proto_tree_add_item(tree, hf_pfcp_time_offset_measurement, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
7617 offset += 8;
7618
7619 if (offset < length) {
7620 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7621 }
7622}
7623
7624/*
7625 * 8.2.150 Cumulative rateRatio Measurement
7626 */
7627static void
7628dissect_pfcp_cumulative_rate_ratio_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7629{
7630 int offset = 0;
7631
7632 /* Oct 5 The Cumulative rateRatio Measurement field shall be encoded as the cumulativeRateRatio (Integer32) specified in clauses 14.4.2 and 15.6 of IEEE Std 802.1AS-Rev/D7.3 [58], i.e. the quantity "(rateRatio- 1.0)(2^41)". */
7633 proto_tree_add_item(tree, hf_pfcp_cumulative_rate_ratio_measurement, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7634 offset += 4;
7635
7636 if (offset < length) {
7637 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7638 }
7639}
7640
7641/*
7642 * 8.2.151 SRR ID
7643 */
7644
7645static void
7646dissect_pfcp_srr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args)
7647{
7648 int offset = 0;
7649
7650 offset = decode_pfcp_srr_id(tvb, pinfo, tree, item, offset, args);
7651
7652 if (offset < length) {
7653 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7654 }
7655}
7656
7657/*
7658 * 8.2.152 Requested Access Availability Information
7659 */
7660static void
7661dissect_pfcp_requested_access_availability_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7662{
7663 int offset = 0;
7664
7665 static int * const pfcp_requested_access_availability_control_information_flags[] = {
7666 &hf_pfcp_spare_b7_b1,
7667 &hf_pfcp_requested_access_availability_control_information_flags_b0_rrca,
7668 NULL((void*)0)
7669 };
7670 /* Octet 5 Spare RRCA */
7671 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_requested_access_availability_control_information_flags, ENC_BIG_ENDIAN0x00000000);
7672 offset += 1;
7673
7674 if (offset < length) {
7675 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7676 }
7677}
7678
7679/*
7680 * 8.2.153 Access Availability Information
7681 */
7682static const value_string pfcp_availability_status_vals[] = {
7683 { 0, "Access has become unavailable" },
7684 { 1, "Access has become available" },
7685 { 0, NULL((void*)0) }
7686};
7687static const value_string pfcp_availability_type_vals[] = {
7688 { 0, "3GPP access type" },
7689 { 1, "Non-3GPP access type" },
7690 { 0, NULL((void*)0) }
7691};
7692
7693static void
7694dissect_pfcp_access_availability_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7695{
7696 int offset = 0;
7697
7698 /* Octet 5 */
7699 /* Availability Status */
7700 proto_tree_add_item(tree, hf_pfcp_availability_status, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7701
7702 /* Access Type */
7703 proto_tree_add_item(tree, hf_pfcp_availability_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
7704 offset++;
7705
7706 if (offset < length) {
7707 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7708 }
7709}
7710
7711/*
7712 * 8.2.154 MPTCP Control Information
7713 */
7714static void
7715dissect_pfcp_mptcp_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7716{
7717 int offset = 0;
7718
7719 static int * const pfcp_mptcp_control_information_flags[] = {
7720 &hf_pfcp_spare_b7_b1,
7721 &hf_pfcp_mptcp_control_information_flags_b0_tci,
7722 NULL((void*)0)
7723 };
7724 /* Octet 5 Spare RRCA */
7725 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mptcp_control_information_flags, ENC_BIG_ENDIAN0x00000000);
7726 offset += 1;
7727
7728 if (offset < length) {
7729 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7730 }
7731}
7732
7733/*
7734 * 8.2.155 ATSSS-LL Control Information
7735 */
7736static void
7737dissect_pfcp_atsss_ll_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7738{
7739 int offset = 0;
7740
7741 static int * const pfcp_atsss_ll_control_information_flags[] = {
7742 &hf_pfcp_spare_b7_b1,
7743 &hf_pfcp_atsss_ll_control_information_flags_b0_lli,
7744 NULL((void*)0)
7745 };
7746 /* Octet 5 Spare RRCA */
7747 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_atsss_ll_control_information_flags, ENC_BIG_ENDIAN0x00000000);
7748 offset += 1;
7749
7750
7751 if (offset < length) {
7752 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7753 }
7754}
7755
7756/*
7757 * 8.2.156 PMF Control Information
7758 */
7759static void
7760dissect_pfcp_pmf_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7761{
7762 int offset = 0;
7763 uint64_t flags;
7764 uint32_t value, i;
7765
7766 static int * const pfcp_pmf_control_information_flags[] = {
7767 &hf_pfcp_spare_b7_b3,
7768 &hf_pfcp_pmf_control_information_flags_b2_pqpm,
7769 &hf_pfcp_pmf_control_information_flags_b1_drtti,
7770 &hf_pfcp_pmf_control_information_flags_b0_pmfi,
7771 NULL((void*)0)
7772 };
7773 /* Octet 5 Spare PQPM DRTTI RRCA */
7774 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_pmf_control_information_flags, ENC_BIG_ENDIAN0x00000000, &flags);
7775 offset += 1;
7776
7777 /* QFI */
7778 if ((flags & 0x4)) {
7779 /* 6 Number of QFI */
7780 proto_tree_add_item_ret_uint(tree, hf_pfcp_pmf_control_information_number_of_qfi, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
7781 offset += 1;
7782
7783 /* 7 to (7+p+1) QFI */
7784 for (i = 0; i < value; i++)
7785 {
7786 offset = decode_pfcp_qfi(tvb, pinfo, tree, item, offset);
7787 }
7788 }
7789
7790 if (offset < length) {
7791 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7792 }
7793}
7794
7795/*
7796 * 8.2.157 MPTCP Address Information
7797 */
7798static void
7799dissect_pfcp_mptcp_address_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7800{
7801 int offset = 0;
7802 uint64_t mptcp_address_flags;
7803
7804 static int * const pfcp_mptcp_ip_address_information_flags[] = {
7805 &hf_pfcp_spare_b7_b2,
7806 &hf_pfcp_mptcp_address_information_flags_b1_v6,
7807 &hf_pfcp_mptcp_address_information_flags_b0_v4,
7808 NULL((void*)0)
7809 };
7810 /* Octet 5 Spare V6 V4 */
7811 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mptcp_ip_address_information_flags, ENC_BIG_ENDIAN0x00000000, &mptcp_address_flags);
7812 offset += 1;
7813
7814 /* Octet 6 MPTCP Proxy Type */
7815 proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_type, tvb, offset, 1, ENC_NA0x00000000);
7816 offset++;
7817
7818 /* Octet 7 to 8 MPTCP Proxy Port */
7819 proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7820 offset += 2;
7821
7822 /* MPTCP Proxy IPv4 address (if present) */
7823 if ((mptcp_address_flags & 0x1)) {
7824 proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7825 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
7826 offset += 4;
7827 }
7828 /* MPTCP Proxy IPv6 address (if present) */
7829 if ((mptcp_address_flags & 0x2)) {
7830 proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_ip_address_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7831 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
7832 offset += 16;
7833 }
7834
7835 if (offset < length) {
7836 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7837 }
7838}
7839
7840/*
7841 * 8.2.158 Link-Specific Multipath IP Address
7842 */
7843static void
7844dissect_pfcp_link_specific_multipath_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7845{
7846 int offset = 0;
7847 uint64_t link_specific_multipath_ip_address_flags;
7848
7849 static int * const pfcp_link_specific_multipath_ip_address_flags[] = {
7850 &hf_pfcp_spare_b7_b4,
7851 &hf_pfcp_link_specific_multipath_ip_address_flags_b3_nv6,
7852 &hf_pfcp_link_specific_multipath_ip_address_flags_b2_nv4,
7853 &hf_pfcp_link_specific_multipath_ip_address_flags_b1_v6,
7854 &hf_pfcp_link_specific_multipath_ip_address_flags_b0_v4,
7855 NULL((void*)0)
7856 };
7857 /* Octet 5 Spare NV6 NV4 V6 V4 */
7858 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_link_specific_multipath_ip_address_flags, ENC_BIG_ENDIAN0x00000000, &link_specific_multipath_ip_address_flags);
7859 offset += 1;
7860
7861 /* Link-Specific Multipath IPv4 Address for 3GPP Access (if present) */
7862 if ((link_specific_multipath_ip_address_flags & 0x1)) {
7863 proto_tree_add_item(tree, hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7864 offset += 4;
7865 }
7866 /* Link-Specific Multipath IPv6 Address for 3GPP Access (if present) */
7867 if ((link_specific_multipath_ip_address_flags & 0x2)) {
7868 proto_tree_add_item(tree, hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7869 offset += 16;
7870 }
7871
7872 /* Link-Specific Multipath IPv4 Address for Non-3GPP Access (if present) */
7873 if ((link_specific_multipath_ip_address_flags & 0x1)) {
7874 proto_tree_add_item(tree, hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7875 offset += 4;
7876 }
7877 /* Link-Specific Multipath IPv6 Address for Non-3GPP Access (if present) */
7878 if ((link_specific_multipath_ip_address_flags & 0x2)) {
7879 proto_tree_add_item(tree, hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7880 offset += 16;
7881 }
7882 if (offset < length) {
7883 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7884 }
7885}
7886
7887/*
7888 * 8.2.159 PMF Address Information
7889 */
7890static void
7891dissect_pfcp_pmf_address_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7892{
7893 int offset = 0;
7894 uint64_t pmf_address_information_flags;
7895
7896 static int * const pfcp_pmf_address_information_flags[] = {
7897 &hf_pfcp_spare_b7_b3,
7898 &hf_pfcp_pmf_address_information_flags_b2_mac,
7899 &hf_pfcp_pmf_address_information_flags_b1_v6,
7900 &hf_pfcp_pmf_address_information_flags_b0_v4,
7901 NULL((void*)0)
7902 };
7903 /* Octet 5 Spare MAC V6 V4 */
7904 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_pmf_address_information_flags, ENC_BIG_ENDIAN0x00000000, &pmf_address_information_flags);
7905 offset += 1;
7906
7907 /* p to (p+3) PMF IPv4 address (if present) */
7908 if ((pmf_address_information_flags & 0x1)) {
7909 proto_tree_add_item(tree, hf_pfcp_pmf_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7910 offset += 4;
7911 }
7912 /* q to (q+15) PMF IPv6 address (if present) */
7913 if ((pmf_address_information_flags & 0x2)) {
7914 proto_tree_add_item(tree, hf_pfcp_pmf_address_ipv6, tvb, offset, 16, ENC_NA0x00000000);
7915 offset += 16;
7916 }
7917 /* r to (r+1) PMF Port for 3GPP */
7918 proto_tree_add_item(tree, hf_pfcp_pmf_port_3gpp, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7919 offset += 2;
7920
7921 /* s to (s+1) PMF Port for Non-3GPP */
7922 proto_tree_add_item(tree, hf_pfcp_pmf_port_non3gpp, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
7923 offset += 2;
7924
7925 /* t to (t+5) PMF MAC address for 3GPP access (if present)*/
7926 if ((pmf_address_information_flags & 0x4)) {
7927 proto_tree_add_item(tree, hf_pfcp_pmf_mac_address_3gpp, tvb, offset, 6, ENC_NA0x00000000);
7928 offset += 6;
7929 }
7930
7931 /* u to (u+5) PMF MAC address for Non-3GPP access (if present)*/
7932 if ((pmf_address_information_flags & 0x4)) {
7933 proto_tree_add_item(tree, hf_pfcp_pmf_mac_address_non3gpp, tvb, offset, 6, ENC_NA0x00000000);
7934 offset += 6;
7935 }
7936
7937 if (offset < length) {
7938 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7939 }
7940}
7941
7942/*
7943 * 8.2.160 ATSSS-LL Information
7944 */
7945static void
7946dissect_pfcp_atsss_ll_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7947{
7948 int offset = 0;
7949
7950 static int * const pfcp_atsss_ll_information_flags[] = {
7951 &hf_pfcp_spare_b7_b1,
7952 &hf_pfcp_atsss_ll_information_flags_b0_lli,
7953 NULL((void*)0)
7954 };
7955 /* Octet 5 Spare LLI */
7956 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_atsss_ll_information_flags, ENC_BIG_ENDIAN0x00000000);
7957 offset += 1;
7958
7959 if (offset < length) {
7960 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7961 }
7962}
7963
7964/*
7965 * 8.2.161 Data Network Access Identifier
7966 */
7967static void
7968dissect_pfcp_data_network_access_identifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7969{
7970 int offset = 0;
7971
7972 /* Octet 5 to (n+4) Data Network Access Identifier
7973 * The Data Network Access Identifier field shall be encoded as an OctetString
7974 */
7975 proto_tree_add_item(tree, hf_pfcp_data_network_access_identifier, tvb, offset, length, ENC_NA0x00000000);
7976}
7977
7978/*
7979 * 8.2.162 Average Packet Delay
7980 */
7981static void
7982dissect_pfcp_average_packet_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
7983{
7984 int offset = 0;
7985
7986 /* Octet 5 to 8 Delay Value in milliseconds */
7987 proto_tree_add_item(tree, hf_pfcp_packet_delay_milliseconds, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
7988 offset += 4;
7989
7990 if (offset < length) {
7991 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7992 }
7993}
7994
7995/*
7996 * 8.2.163 Minimum Packet Delay
7997 */
7998static void
7999dissect_pfcp_minimum_packet_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8000{
8001 int offset = 0;
8002
8003 /* Octet 5 to 8 Delay Value in milliseconds */
8004 proto_tree_add_item(tree, hf_pfcp_packet_delay_milliseconds, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8005 offset += 4;
8006
8007 if (offset < length) {
8008 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8009 }
8010}
8011
8012/*
8013 * 8.2.164 Maximum Packet Delay
8014 */
8015static void
8016dissect_pfcp_maximum_packet_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8017{
8018 int offset = 0;
8019
8020 /* Octet 5 to 8 Delay Value in milliseconds */
8021 proto_tree_add_item(tree, hf_pfcp_packet_delay_milliseconds, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8022 offset += 4;
8023
8024 if (offset < length) {
8025 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8026 }
8027}
8028
8029/*
8030 * 8.2.165 QoS Report Trigger
8031 */
8032static void
8033dissect_pfcp_qos_report_trigger(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8034{
8035 int offset = 0;
8036
8037 static int * const pfcp_qos_report_trigger_flags[] = {
8038 &hf_pfcp_spare_b7_b3,
8039 &hf_pfcp_qos_report_trigger_flags_b2_ire,
8040 &hf_pfcp_qos_report_trigger_flags_b1_thr,
8041 &hf_pfcp_qos_report_trigger_flags_b0_per,
8042 NULL((void*)0)
8043 };
8044 /* Octet 5 Spare IRE THR PER */
8045 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qos_report_trigger_flags, ENC_BIG_ENDIAN0x00000000);
8046 offset += 1;
8047
8048 if (offset < length) {
8049 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8050 }
8051}
8052
8053/*
8054 * 8.2.166 GTP-U Path Interface Type
8055 */
8056static void
8057dissect_pfcp_gtp_u_path_interface_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8058{
8059 int offset = 0;
8060
8061 static int * const pfcp_gtp_u_path_interface_type_flags[] = {
8062 &hf_pfcp_spare_b7_b2,
8063 &hf_pfcp_gtp_u_path_interface_type_flags_b1_n3,
8064 &hf_pfcp_gtp_u_path_interface_type_flags_b0_n9,
8065 NULL((void*)0)
8066 };
8067 /* Octet 5 Spare N3 N9 */
8068 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_gtp_u_path_interface_type_flags, ENC_BIG_ENDIAN0x00000000);
8069 offset += 1;
8070
8071 if (offset < length) {
8072 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8073 }
8074}
8075
8076/*
8077 * 8.2.167 Requested QoS Monitoring
8078 */
8079static void
8080dissect_pfcp_requested_qos_monitoring(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8081{
8082 int offset = 0;
8083
8084 static int * const pfcp_requested_qos_monitoring_flags[] = {
8085 &hf_pfcp_requested_qos_monitoring_flags_b7_ulpr,
8086 &hf_pfcp_requested_qos_monitoring_flags_b6_dlpr,
8087 &hf_pfcp_requested_qos_monitoring_flags_b5_ulci,
8088 &hf_pfcp_requested_qos_monitoring_flags_b4_dlci,
8089 &hf_pfcp_requested_qos_monitoring_flags_b3_gtpupm,
8090 &hf_pfcp_requested_qos_monitoring_flags_b2_rppd,
8091 &hf_pfcp_requested_qos_monitoring_flags_b1_ulpd,
8092 &hf_pfcp_requested_qos_monitoring_flags_b0_dlpd,
8093 NULL((void*)0)
8094 };
8095 /* Octet 5 ULPR DLPR ULCI DLCI GTPUPM RPPD UlPD DLPD */
8096 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_requested_qos_monitoring_flags, ENC_BIG_ENDIAN0x00000000);
8097 offset += 1;
8098
8099 if (offset < length) {
8100 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8101 }
8102}
8103
8104/*
8105 * 8.2.168 Reporting Frequency
8106 */
8107static void
8108dissect_pfcp_reporting_frequency(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8109{
8110 int offset = 0;
8111
8112 static int * const pfcp_reporting_frequency_flags[] = {
8113 &hf_pfcp_spare_b7_b3,
8114 &hf_pfcp_reporting_frequency_flags_b2_sesrl,
8115 &hf_pfcp_reporting_frequency_flags_b1_perio,
8116 &hf_pfcp_reporting_frequency_flags_b0_evett,
8117 NULL((void*)0)
8118 };
8119 /* Octet 5 Spare RP Ul DL */
8120 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_frequency_flags, ENC_BIG_ENDIAN0x00000000);
8121 offset += 1;
8122
8123 if (offset < length) {
8124 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8125 }
8126}
8127
8128/*
8129 * 8.2.169 Packet Delay Thresholds
8130 */
8131static void
8132dissect_pfcp_packet_delay_thresholds(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8133{
8134 int offset = 0;
8135 uint64_t packet_delay_thresholds_flags;
8136
8137 static int * const pfcp_packet_delay_thresholds_flags[] = {
8138 &hf_pfcp_spare_b7_b3,
8139 &hf_pfcp_packet_delay_thresholds_flags_b2_rp,
8140 &hf_pfcp_packet_delay_thresholds_flags_b1_ul,
8141 &hf_pfcp_packet_delay_thresholds_flags_b0_dl,
8142 NULL((void*)0)
8143 };
8144 /* Octet 5 Spare RP Ul DL */
8145 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_packet_delay_thresholds_flags, ENC_BIG_ENDIAN0x00000000, &packet_delay_thresholds_flags);
8146 offset += 1;
8147
8148 /* m to (m+3) Downlink packet delay threshold */
8149 if ((packet_delay_thresholds_flags & 0x1)) {
8150 proto_tree_add_item(tree, hf_pfcp_packet_delay_thresholds_downlink, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8151 offset += 4;
8152 }
8153
8154 /* p to (p+3) Uplink packet delay threshold */
8155 if ((packet_delay_thresholds_flags & 0x2)) {
8156 proto_tree_add_item(tree, hf_pfcp_packet_delay_thresholds_uplink, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8157 offset += 4;
8158 }
8159
8160 /* q to (q+3) Round trip packet delay threshold */
8161 if ((packet_delay_thresholds_flags & 0x4)) {
8162 proto_tree_add_item(tree, hf_pfcp_packet_delay_thresholds_roundtrip, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8163 offset += 4;
8164 }
8165
8166 if (offset < length) {
8167 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8168 }
8169}
8170
8171/*
8172 * 8.2.170 Minimum Wait Time
8173 */
8174static void
8175dissect_pfcp_minimum_wait_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8176{
8177 int offset = 0;
8178
8179 /* Octet 5 to 8 Minimum Wait Time */
8180 proto_tree_add_item(tree, hf_pfcp_minimum_wait_time_seconds, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8181 offset += 4;
8182
8183 if (offset < length) {
8184 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8185 }
8186}
8187
8188/*
8189 * 8.2.171 QoS Monitoring Measurement
8190 */
8191static void
8192dissect_pfcp_qos_monitoring_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8193{
8194 int offset = 0;
8195 uint64_t qos_monitoring_measurement_flags;
8196
8197 static int * const pfcp_qos_monitoring_measurement_flags[] = {
8198 &hf_pfcp_spare_b7_b5,
8199 &hf_pfcp_qos_monitoring_measurement_flags_b5_ulci,
8200 &hf_pfcp_qos_monitoring_measurement_flags_b4_dlci,
8201 &hf_pfcp_qos_monitoring_measurement_flags_b3_plmf,
8202 &hf_pfcp_qos_monitoring_measurement_flags_b2_rppd,
8203 &hf_pfcp_qos_monitoring_measurement_flags_b1_ulpd,
8204 &hf_pfcp_qos_monitoring_measurement_flags_b0_dlpd,
8205 NULL((void*)0)
8206 };
8207 /* Octet 5 Spare CI PLMF RP Ul DL */
8208 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_qos_monitoring_measurement_flags, ENC_BIG_ENDIAN0x00000000, &qos_monitoring_measurement_flags);
8209 offset += 1;
8210
8211 /* m to (m+3) Downlink packet delay threshold */
8212 if ((qos_monitoring_measurement_flags & 0x1)) {
8213 proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_downlink_packet_delay, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8214 offset += 4;
8215 }
8216
8217 /* p to (p+3) Uplink packet delay threshold */
8218 if ((qos_monitoring_measurement_flags & 0x2)) {
8219 proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_uplink_packet_delay, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8220 offset += 4;
8221 }
8222
8223 /* q to (q+3) Round trip packet delay threshold */
8224 if ((qos_monitoring_measurement_flags & 0x4)) {
8225 proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_roundtrip, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8226 offset += 4;
8227 }
8228
8229 /* r Downlink Congestion information */
8230 if ((qos_monitoring_measurement_flags & 0x10)) {
8231 proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_downlink_congestion_information, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8232 offset += 1;
8233 }
8234
8235 /* r Uplink Congestion information */
8236 if ((qos_monitoring_measurement_flags & 0x20)) {
8237 proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_uplink_congestion_information, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8238 offset += 1;
8239 }
8240
8241 /* m to (m+3) Downlink packet rate */
8242 if ((qos_monitoring_measurement_flags & 0x40)) {
8243 proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_downlink_packet_rate, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8244 offset += 4;
8245 }
8246
8247 /* p to (p+3) Uplink packet rate */
8248 if ((qos_monitoring_measurement_flags & 0x80)) {
8249 proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_uplink_packet_rate, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8250 offset += 4;
8251 }
8252 if (offset < length) {
8253 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8254 }
8255}
8256
8257/*
8258 * 8.2.172 MT-EDT Control Information
8259 */
8260static void
8261dissect_pfcp_mt_edt_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8262{
8263 int offset = 0;
8264
8265 static int * const pfcp_mt_edt_control_information_flags[] = {
8266 &hf_pfcp_spare_b7_b1,
8267 &hf_pfcp_mt_edt_control_information_flags_b0_rdsi,
8268 NULL((void*)0)
8269 };
8270 /* Octet 5 Spare RDSI */
8271 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mt_edt_control_information_flags, ENC_BIG_ENDIAN0x00000000);
8272 offset += 1;
8273
8274 if (offset < length) {
8275 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8276 }
8277}
8278
8279/*
8280 * 8.2.173 DL Data Packets Size
8281 */
8282static void
8283dissect_pfcp_dl_data_packets_size(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8284{
8285 int offset = 0;
8286
8287 /* Oct 5 to 6 DL Data Packets Size */
8288 proto_tree_add_item(tree, hf_pfcp_dl_data_packets_size, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8289 offset += 2;
8290
8291 if (offset < length) {
8292 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8293 }
8294}
8295
8296/*
8297 * 8.2.174 QER Control Indications
8298 */
8299static void
8300dissect_pfcp_qer_control_indications(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8301{
8302 int offset = 0;
8303
8304 static int * const pfcp_qer_control_indications_o5_flags[] = {
8305 &hf_pfcp_spare_b7_b1,
8306 &hf_pfcp_qer_control_indications_o5_b0_rcsr,
8307 NULL((void*)0)
8308 };
8309 /* Octet 5 Spare RCSR */
8310 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qer_control_indications_o5_flags, ENC_BIG_ENDIAN0x00000000);
8311 offset++;
8312
8313 if (offset < length) {
8314 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8315 }
8316
8317}
8318
8319/*
8320 * 8.2.175 NF Instance ID
8321 */
8322static void
8323dissect_pfcp_nf_instance_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8324{
8325 int offset = 0;
8326
8327 /* Octet 5 to 20 NF Instance ID */
8328 proto_tree_add_item(tree, hf_pfcp_nf_instance_id, tvb, offset, length, ENC_NA0x00000000);
8329}
8330
8331/*
8332 * 8.2.176 S-NSSAI
8333 */
8334static void
8335dissect_pfcp_s_nssai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8336{
8337 int offset = 0;
8338
8339 /* Octet 5 SST */
8340 proto_tree_add_item(tree, hf_pfcp_s_nssai_sst, tvb, offset, 1, ENC_NA0x00000000);
8341 offset++;
8342
8343 /* Octet 6 to 8 SD */
8344 proto_tree_add_item(tree, hf_pfcp_s_nssai_sd, tvb, offset, 3, ENC_NA0x00000000);
8345 offset += 3;
8346
8347 if (offset < length) {
8348 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8349 }
8350}
8351
8352/*
8353 * 8.2.177 IP version
8354 */
8355static void
8356dissect_pfcp_ip_version(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8357{
8358 int offset = 0;
8359
8360 static int * const pfcp_ip_version_flags[] = {
8361 &hf_pfcp_spare_b7_b2,
8362 &hf_pfcp_ip_version_flags_b1_v6,
8363 &hf_pfcp_ip_version_flags_b0_v4,
8364 NULL((void*)0)
8365 };
8366 /* Octet 5 Spare V6 V4 */
8367 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_ip_version_flags, ENC_BIG_ENDIAN0x00000000);
8368 offset += 1;
8369
8370 if (offset < length) {
8371 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8372 }
8373}
8374
8375/*
8376 * 8.2.178 PFCPASReq-Flags
8377 */
8378static void
8379dissect_pfcp_pfcpasreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8380{
8381 int offset = 0;
8382
8383 static int * const pfcp_pfcpasreq_flags_flags[] = {
8384 &hf_pfcp_spare_b7_b1,
8385 &hf_pfcp_pfcpasreq_flags_flags_b0_uupsi,
8386 NULL((void*)0)
8387 };
8388 /* Octet 5 Spare UUPSI */
8389 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpasreq_flags_flags, ENC_BIG_ENDIAN0x00000000);
8390 offset += 1;
8391
8392 if (offset < length) {
8393 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8394 }
8395}
8396
8397/*
8398 * 8.2.179 Data Status
8399 */
8400static void
8401dissect_pfcp_data_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8402{
8403 int offset = 0;
8404
8405 static int * const pfcp_data_status_flags[] = {
8406 &hf_pfcp_spare_b7_b2,
8407 &hf_pfcp_data_status_flags_b1_buff,
8408 &hf_pfcp_data_status_flags_b0_drop,
8409 NULL((void*)0)
8410 };
8411 /* Octet 5 Spare BUFF DROP */
8412 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_data_status_flags, ENC_BIG_ENDIAN0x00000000);
8413 offset += 1;
8414
8415 if (offset < length) {
8416 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8417 }
8418}
8419
8420/*
8421 * 8.2.180 RDS Configuration Information
8422 */
8423static void
8424dissect_pfcp_rds_configuration_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8425{
8426 int offset = 0;
8427
8428 static int * const pfcp_rds_configuration_information_flags[] = {
8429 &hf_pfcp_spare_b7_b1,
8430 &hf_pfcp_rds_configuration_information_flags_b0_rds,
8431 NULL((void*)0)
8432 };
8433 /* Octet 5 Spare RDS */
8434 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_rds_configuration_information_flags, ENC_BIG_ENDIAN0x00000000);
8435 offset += 1;
8436
8437 if (offset < length) {
8438 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8439 }
8440}
8441
8442/*
8443 * 8.2.181 Multipath Application Indication
8444 */
8445static void
8446dissect_pfcp_multipath_application_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8447{
8448 int offset = 0;
8449
8450 static int * const pfcp_multipath_application_indication_flags[] = {
8451 &hf_pfcp_spare_b7_b2,
8452 &hf_pfcp_multipath_application_indication_flags_b1_mqai,
8453 &hf_pfcp_multipath_application_indication_flags_b0_mtai,
8454 NULL((void*)0)
8455 };
8456 /* Octet 5 Spare MQAI MTAI */
8457 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_multipath_application_indication_flags, ENC_BIG_ENDIAN0x00000000);
8458 offset += 1;
8459
8460 if (offset < length) {
8461 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8462 }
8463}
8464
8465/*
8466 * 8.2.182 User Plane Node Management Information Container
8467 */
8468static void
8469dissect_pfcp_user_plane_node_management_information_container(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8470{
8471 int offset = 0;
8472 /* Octet 5 to (n+4) User Plane Node Management Information Container
8473 * The User Plane Node Management Information Container field shall be encoded as an OctetString.
8474 */
8475 proto_tree_add_item(tree, hf_pfcp_user_plane_node_management_information_container, tvb, offset, length, ENC_NA0x00000000);
8476}
8477
8478/*
8479 * 8.2.183 Number of UE IP Addresses
8480 */
8481static void
8482dissect_pfcp_number_of_ue_ip_addresses(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8483{
8484 int offset = 0;
8485 uint64_t number_of_ue_ip_addresses_flags;
8486
8487 static int * const pfcp_number_of_ue_ip_addresses_flags[] = {
8488 &hf_pfcp_spare_b7_b2,
8489 &hf_pfcp_number_of_ue_ip_addresses_b1_ipv6,
8490 &hf_pfcp_number_of_ue_ip_addresses_b0_ipv4,
8491 NULL((void*)0)
8492 };
8493 /* Octet 5 Spare Spare Spare Spare Spare Spare IPv6 IPv4*/
8494 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_number_of_ue_ip_addresses_flags, ENC_BIG_ENDIAN0x00000000, &number_of_ue_ip_addresses_flags);
8495 offset += 1;
8496
8497 /* a to (a+3) Number of UE IPv4 Addresses */
8498 if ((number_of_ue_ip_addresses_flags & 0x1) == 1) {
8499 proto_tree_add_item(tree, hf_pfcp_number_of_ue_ip_addresses_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8500 offset += 4;
8501 }
8502 /* b to (b+3) Number of UE IPv6 Addresses */
8503 if ((number_of_ue_ip_addresses_flags & 0x2) == 2) {
8504 proto_tree_add_item(tree, hf_pfcp_number_of_ue_ip_addresses_ipv6, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8505 offset += 4;
8506 }
8507
8508 if (offset < length) {
8509 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8510 }
8511}
8512
8513/*
8514 * 8.2.184 Validity Timer
8515 */
8516static void
8517dissect_pfcp_validity_timer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8518{
8519 int offset = 0;
8520 uint32_t value;
8521 /* Octet 5 to 6 Validity Timer
8522 * The Validity Timer value shall be encoded as an Unsigned16 binary integer value. It contains a duration in seconds
8523 */
8524 proto_tree_add_item_ret_uint(tree, hf_pfcp_validity_timer, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &value);
8525 offset += 2;
8526
8527 proto_item_append_text(item, "%u s", value);
8528
8529 if (offset < length) {
8530 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8531 }
8532
8533}
8534
8535/*
8536 * 8.2.185 Offending IE Information
8537 */
8538static void
8539dissect_pfcp_offending_ie_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8540{
8541 int offset = 0;
8542 uint32_t value;
8543
8544 /* Octet 5 to 6 Type of the offending IE */
8545 proto_tree_add_item_ret_uint(tree, hf_pfcp_offending_ie, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &value);
8546 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_ie_type, "Unknown"));
8547 offset += 2;
8548
8549 /* Octets 7 to (n+4) shall contain the value of the offending IE that caused the failure */
8550 proto_tree_add_item(tree, hf_pfcp_offending_ie_value, tvb, offset, length - offset, ENC_NA0x00000000);
8551}
8552
8553/*
8554 * 8.2.186 RAT Type
8555 */
8556static const value_string pfcp_rattype_vals[] = {
8557 { 0, "Reserved" },
8558 { 1, "UTRAN" },
8559 { 2, "GERAN" },
8560 { 3, "WLAN" },
8561 { 4, "GAN" },
8562 { 5, "HSPA Evolution" },
8563 { 6, "EUTRAN (WB-E-UTRAN)" },
8564 { 7, "Virtual" },
8565 { 8, "EUTRAN-NB-IoT" },
8566 { 9, "LTE-M" },
8567 { 10, "NR" },
8568 { 11, "WB-E-UTRAN (LEO)" },
8569 { 12, "WB-E-UTRAN (MEO)" },
8570 { 13, "WB-E-UTRAN (GEO)" },
8571 { 14, "WB-E-UTRAN (OTHERSAT)" },
8572 { 15, "EUTRAN-NB-IoT (LEO)" },
8573 { 16, "EUTRAN-NB-IoT (MEO)" },
8574 { 17, "EUTRAN-NB-IoT (GEO)" },
8575 { 18, "EUTRAN-NB-IoT (OTHERSAT)" },
8576 { 19, "LTE-M (LEO)" },
8577 { 20, "LTE-M (MEO)" },
8578 { 21, "LTE-M (GEO)" },
8579 { 22, "LTE-M (OTHERSAT)" },
8580 { 23, "NR (LEO)" },
8581 { 24, "NR (MEO)" },
8582 { 25, "NR (GEO)" },
8583 { 26, "NR (OTHERSAT)" },
8584 { 27, "NR-REDCAP" },
8585 { 28, "NR-EREDCAP" },
8586 { 0, NULL((void*)0) }
8587};
8588
8589static void
8590dissect_pfcp_rattype(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8591{
8592 int offset = 0;
8593 uint32_t value;
8594 /* Octet 5 RAT Type */
8595 proto_tree_add_item_ret_uint(tree, hf_pfcp_rattype, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
8596 offset++;
8597
8598 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_rattype_vals, "Unknown"));
8599
8600 if (offset < length) {
8601 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8602 }
8603}
8604
8605/*
8606 * 8.2.187 L2TP User Authentication
8607 */
8608static void
8609dissect_pfcp_l2tp_user_authentication(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8610{
8611 int offset = 0;
8612 uint64_t l2tp_user_authentication_flags;
8613 uint32_t l2tp_length;
8614
8615 static int * const pfcp_l2tp_user_authentication_flags[] = {
8616 &hf_pfcp_spare_b7_b4,
8617 &hf_pfcp_l2tp_user_authentication_b3_pai,
8618 &hf_pfcp_l2tp_user_authentication_b2_par,
8619 &hf_pfcp_l2tp_user_authentication_b1_pac,
8620 &hf_pfcp_l2tp_user_authentication_b0_pan,
8621 NULL((void*)0)
8622 };
8623
8624 /* Octet 5-6 Proxy Authen Type Value */
8625 proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_type_value, tvb, offset, 2, ENC_ASCII0x00000000 | ENC_NA0x00000000);
8626 offset += 2;
8627
8628 /* Octet 7 Spare PAI PAR PAC PAN */
8629 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_l2tp_user_authentication_flags, ENC_BIG_ENDIAN0x00000000, &l2tp_user_authentication_flags);
8630 offset += 1;
8631
8632 /* Proxy Authen Name */
8633 if ((l2tp_user_authentication_flags & 0x1)) {
8634 proto_tree_add_item_ret_uint(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_name_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &l2tp_length);
8635 offset += 1;
8636 proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_name, tvb, offset, l2tp_length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
8637 offset += l2tp_length;
8638 }
8639
8640 /* Proxy Authen Challenge */
8641 if ((l2tp_user_authentication_flags & 0x2)) {
8642 proto_tree_add_item_ret_uint(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_challenge_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &l2tp_length);
8643 offset += 1;
8644 proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_challenge, tvb, offset, l2tp_length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
8645 offset += l2tp_length;
8646 }
8647
8648 /* Proxy Authen Response */
8649 if ((l2tp_user_authentication_flags & 0x4)) {
8650 proto_tree_add_item_ret_uint(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_response_len, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &l2tp_length);
8651 offset += 1;
8652 proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_response, tvb, offset, l2tp_length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
8653 offset += l2tp_length;
8654 }
8655
8656 /* Proxy Authen ID */
8657 if ((l2tp_user_authentication_flags & 0x8)) {
8658 proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_id, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8659 offset++;
8660 }
8661
8662 if (offset < length) {
8663 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8664 }
8665}
8666
8667/*
8668 * 8.2.188 LNS Address
8669 */
8670static void
8671dissect_pfcp_lns_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8672{
8673 int offset = 0;
8674
8675 /* IPv4 address */
8676 if (length == 4) {
8677 proto_tree_add_item(tree, hf_pfcp_lns_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8678 offset += 4;
8679 }
8680 /* IPv6 address */
8681 else if (length == 16) {
8682 proto_tree_add_item(tree, hf_pfcp_lns_address_ipv6, tvb, offset, 16, ENC_NA0x00000000);
8683 offset += 16;
8684 }
8685
8686 if (offset < length) {
8687 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8688 }
8689
8690}
8691
8692/*
8693 * 8.2.189 Tunnel Preference
8694 */
8695static void
8696dissect_pfcp_tunnel_preference(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8697{
8698 proto_tree_add_item(tree, hf_pfcp_tunnel_preference_value, tvb, 0, length, ENC_BIG_ENDIAN0x00000000);
8699}
8700
8701/*
8702 * 8.2.190 Calling Number
8703 */
8704static void
8705dissect_pfcp_calling_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8706{
8707 proto_tree_add_item(tree, hf_pfcp_calling_number_value, tvb, 0, length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
8708}
8709
8710/*
8711 * 8.2.191 Called Number
8712 */
8713static void
8714dissect_pfcp_called_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8715{
8716 proto_tree_add_item(tree, hf_pfcp_called_number_value, tvb, 0, length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
8717}
8718
8719/*
8720 * 8.2.192 L2TP Session Indications
8721 */
8722static void
8723dissect_pfcp_l2tp_session_indications(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8724{
8725 int offset = 0;
8726
8727 static int * const pfcp_l2tp_session_indications_o5_flags[] = {
8728 &hf_pfcp_spare_b7_b3,
8729 &hf_pfcp_l2tp_session_indications_o5_b2_rensa,
8730 &hf_pfcp_l2tp_session_indications_o5_b1_redsa,
8731 &hf_pfcp_l2tp_session_indications_o5_b0_reuia,
8732 NULL((void*)0)
8733 };
8734 /* Octet 5 Spare spare Spare Spare Spare RENSA REDSA REUIA */
8735 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_l2tp_session_indications_o5_flags, ENC_BIG_ENDIAN0x00000000);
8736 offset++;
8737
8738 if (offset < length) {
8739 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8740 }
8741
8742}
8743
8744/*
8745 * 8.2.193 DNS Server Address
8746 */
8747static void
8748dissect_pfcp_dns_sever_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8749{
8750 int offset = 0;
8751
8752 /* IPv4 address */
8753 proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8754 proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
8755 offset += 4;
8756
8757 if (offset < length) {
8758 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8759 }
8760
8761}
8762
8763/*
8764 * 8.2.194 NBNS Server Address
8765 */
8766static void
8767dissect_pfcp_nbns_sever_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8768{
8769 int offset = 0;
8770
8771 /* IPv4 address */
8772 proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8773 proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
8774 offset += 4;
8775
8776 if (offset < length) {
8777 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8778 }
8779
8780}
8781
8782/*
8783 * 8.2.195 Maximum Receive Unit
8784 */
8785static void
8786dissect_pfcp_maximum_receive_unit(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8787{
8788 /* Oct 5 to 6 Maximum Receive Unit */
8789 proto_tree_add_item(tree, hf_pfcp_maximum_receive_unit, tvb, 0, length, ENC_BIG_ENDIAN0x00000000);
8790}
8791
8792/*
8793 * 8.2.196 Thresholds
8794 */
8795static void
8796dissect_pfcp_thresholds(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8797{
8798 int offset = 0;
8799 uint64_t flags;
8800
8801 static int * const pfcp_thresholds_flags[] = {
8802 &hf_pfcp_spare_b7_b2,
8803 &hf_pfcp_thresholds_flags_b1_plr,
8804 &hf_pfcp_thresholds_flags_b0_rtt,
8805 NULL((void*)0)
8806 };
8807 /* Octet 5 Spare PLR RTT */
8808 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_thresholds_flags, ENC_BIG_ENDIAN0x00000000, &flags);
8809 offset += 1;
8810
8811 /* RTT */
8812 if ((flags & 0x1)) {
8813 /* m to (m+1) RTT */
8814 proto_tree_add_item(tree, hf_pfcp_thresholds_rtt, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
8815 offset += 2;
8816 }
8817
8818 /* PLR */
8819 if ((flags & 0x2)) {
8820 /* m to (m+1) RTT */
8821 proto_tree_add_item(tree, hf_pfcp_thresholds_plr, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
8822 offset++;
8823 }
8824
8825 if (offset < length) {
8826 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8827 }
8828}
8829
8830/*
8831 * 8.2.197 Steering Mode Indicator
8832 */
8833static void
8834dissect_pfcp_steering_mode_indications(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8835{
8836 int offset = 0;
8837
8838 static int * const pfcp_l2tp_steering_mode_indications_o5_flags[] = {
8839 &hf_pfcp_spare_b7_b2,
8840 &hf_pfcp_l2tp_steering_mode_indications_o5_b1_ueai,
8841 &hf_pfcp_l2tp_steering_mode_indications_o5_b0_albi,
8842 NULL((void*)0)
8843 };
8844 /* Octet 5 Spare spare Spare Spare Spare Spare UEAI ALBI */
8845 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_l2tp_steering_mode_indications_o5_flags, ENC_BIG_ENDIAN0x00000000);
8846 offset++;
8847
8848 if (offset < length) {
8849 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8850 }
8851
8852}
8853
8854/*
8855 * 8.2.198 Group ID
8856 */
8857static void
8858dissect_pfcp_group_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8859{
8860 /* Octet 5 to (n+4) Group ID */
8861 proto_tree_add_item(tree, hf_pfcp_group_id, tvb, 0, length, ENC_UTF_80x00000002);
8862}
8863
8864/*
8865 * 8.2.199 CP IP Address
8866 */
8867static void
8868dissect_pfcp_cp_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8869{
8870 int offset = 0;
8871 uint64_t cp_ip_address_flags;
8872
8873 static int * const pfcp_cp_ip_address_flags[] = {
8874 &hf_pfcp_spare_b7_b2,
8875 &hf_pfcp_b1_v4,
8876 &hf_pfcp_b0_v6,
8877 NULL((void*)0)
8878 };
8879 /* Octet 5 Spare V4 V6 */
8880 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_cp_ip_address_flags, ENC_BIG_ENDIAN0x00000000, &cp_ip_address_flags);
8881 offset += 1;
8882
8883 /* IPv4 address (if present) */
8884 if (cp_ip_address_flags & 0x2) {
8885 proto_tree_add_item(tree, hf_pfcp_cp_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8886 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
8887 offset += 4;
8888 }
8889 /* IPv6 address (if present) */
8890 if (cp_ip_address_flags & 0x1) {
8891 proto_tree_add_item(tree, hf_pfcp_cp_ip_address_ipv6, tvb, offset, 16, ENC_NA0x00000000);
8892 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
8893 offset += 16;
8894 }
8895
8896 if (offset < length) {
8897 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8898 }
8899}
8900
8901/*
8902 * 8.2.200 IP Address and Port Number Replacement
8903 */
8904static void
8905dissect_pfcp_ip_address_and_port_number_replacement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8906{
8907 int offset = 0;
8908 uint64_t ip_address_and_port_number_replacement_flags;
8909
8910 static int * const pfcp_ip_address_and_port_number_replacement_flags[] = {
8911 &hf_pfcp_spare_b7,
8912 &hf_pfcp_ip_address_and_port_number_replacement_flag_b6_umn6rs,
8913 &hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn,
8914 &hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6,
8915 &hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4,
8916 &hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn,
8917 &hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6,
8918 &hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4,
8919 NULL((void*)0)
8920 };
8921 /* Octet 5 Spare UMN6RS SPN SIPV6 SIPV4 DPN V6 V4*/
8922 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_ip_address_and_port_number_replacement_flags, ENC_BIG_ENDIAN0x00000000, &ip_address_and_port_number_replacement_flags);
8923 offset += 1;
8924
8925 /* Destination IPv4 address (if present)*/
8926 if ((ip_address_and_port_number_replacement_flags & 0x1)) {
8927 proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8928 offset += 4;
8929 }
8930 /* Destination IPv6 address (if present)*/
8931 if ((ip_address_and_port_number_replacement_flags & 0x2)) {
8932 proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6, tvb, offset, 16, ENC_NA0x00000000);
8933 offset += 16;
8934 }
8935 /* Destination Port Number (if present)*/
8936 if ((ip_address_and_port_number_replacement_flags & 0x4)) {
8937 proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_port, tvb, offset, 2, ENC_NA0x00000000);
8938 offset += 2;
8939 }
8940 /* Source IPv4 address (if present)*/
8941 if ((ip_address_and_port_number_replacement_flags & 0x8)) {
8942 proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
8943 offset += 4;
8944 }
8945 /* Source IPv6 address (if present)*/
8946 if ((ip_address_and_port_number_replacement_flags & 0x10)) {
8947 proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_ipv6, tvb, offset, 16, ENC_NA0x00000000);
8948 offset += 16;
8949 }
8950 /* Source Port Number (if present)*/
8951 if ((ip_address_and_port_number_replacement_flags & 0x20)) {
8952 proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_port, tvb, offset, 2, ENC_NA0x00000000);
8953 offset += 2;
8954 }
8955
8956 if (offset < length) {
8957 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8958 }
8959}
8960
8961/*
8962 * 8.2.201 DNS Query/Response Filter
8963 */
8964static void
8965dissect_pfcp_dns_query_response_filter(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8966{
8967 int offset = 0;
8968 uint32_t dns_query_length;
8969
8970 proto_tree_add_item_ret_uint(tree, hf_pfcp_dns_query_filter_pattern_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &dns_query_length);
8971 offset += 2;
8972 proto_tree_add_item(tree, hf_pfcp_dns_query_filter_pattern, tvb, offset, dns_query_length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
8973 offset += dns_query_length;
8974
8975 if (offset < length) {
8976 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8977 }
8978}
8979
8980/*
8981 * 8.2.202 Event Notification URI
8982 */
8983static void
8984dissect_pfcp_event_notification_uri(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8985{
8986 proto_tree_add_item(tree, hf_pfcp_event_notification_uri, tvb, 0, length, ENC_ASCII0x00000000 | ENC_NA0x00000000);
8987}
8988
8989
8990/*
8991 * 8.2.203 Notification Correlation ID
8992 */
8993static void
8994dissect_pfcp_notification_correlation_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
8995{
8996 uint32_t value;
8997 /* 5 to n+4 Notification Correlation ID value */
8998 proto_tree_add_item_ret_uint(tree, hf_pfcp_notification_correlation_id, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000, &value);
8999 proto_item_append_text(item, "%u", value);
9000}
9001
9002/*
9003 * 8.2.204 Reporting Flags
9004 */
9005static void
9006dissect_pfcp_reporting_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9007{
9008 int offset = 0;
9009
9010 static int * const pfcp_reporting_flags_o5_flags[] = {
9011 &hf_pfcp_spare_b7_b1,
9012 &hf_pfcp_reporting_flags_o5_b0_dupl,
9013 NULL((void*)0)
9014 };
9015 /* Octet 5 Spare DUPL */
9016 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_flags_o5_flags, ENC_BIG_ENDIAN0x00000000);
9017 offset++;
9018
9019 if (offset == length) {
9020 return;
9021 }
9022
9023 if (offset < length) {
9024 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9025 }
9026}
9027
9028/*
9029 * 8.2.205 Predefined Rules Name
9030 */
9031static void
9032dissect_pfcp_predefined_rules_name(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9033{
9034 int offset = 0;
9035 /* Octet 5 to (n+4) Predefined Rules Name
9036 * The Predefined Rules Name field shall be encoded as an OctetString
9037 */
9038 proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA0x00000000);
9039}
9040
9041/*
9042 * 8.2.206 MBS Session Identifier
9043 */
9044static void
9045dissect_pfcp_mbs_session_identifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9046{
9047 int offset = 0;
9048 uint64_t mbs_session_identifier_flags;
9049
9050 static int * const pfcp_mbs_session_identifier_flags[] = {
9051 &hf_pfcp_spare_b7_b3,
9052 &hf_pfcp_mbs_session_identifier_flag_b2_nidi,
9053 &hf_pfcp_mbs_session_identifier_flag_b1_ssmi,
9054 &hf_pfcp_mbs_session_identifier_flag_b0_tmgi,
9055 NULL((void*)0)
9056 };
9057 /* Octet 5 Spare NIDI SMI TMGI */
9058 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mbs_session_identifier_flags, ENC_BIG_ENDIAN0x00000000, &mbs_session_identifier_flags);
9059 offset += 1;
9060
9061 /* TMGI (if present)*/
9062 if ((mbs_session_identifier_flags & 0x1)) {
9063 proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_tmgi, tvb, offset, 6, ENC_NA0x00000000);
9064 offset += 6;
9065 }
9066 /* SSMI (if present)*/
9067 if ((mbs_session_identifier_flags & 0x2)) {
9068 uint32_t source_address_type;
9069 uint32_t source_address_length;
9070
9071 /* Source Address Type && Length */
9072 proto_tree_add_item_ret_uint(tree, hf_pfcp_mbs_session_identifier_source_address_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &source_address_type);
9073 proto_tree_add_item_ret_uint(tree, hf_pfcp_mbs_session_identifier_source_address_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &source_address_length);
9074 offset++;
9075
9076 /* Source IPv4 address (if present) */
9077 if (source_address_type == 0) {
9078 proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_source_address_ipv4, tvb, offset, source_address_length, ENC_BIG_ENDIAN0x00000000);
9079 offset += source_address_length;
9080 }
9081 /* Source IPv6 address (if present) */
9082 if (source_address_type == 1) {
9083 proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_source_address_ipv6, tvb, offset, source_address_length, ENC_NA0x00000000);
9084 offset += source_address_length;
9085 }
9086 }
9087 /* NIDI (if present)*/
9088 if ((mbs_session_identifier_flags & 0x4)) {
9089 proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_nidi, tvb, offset, 5, ENC_NA0x00000000);
9090 return;
9091 }
9092
9093 if (offset < length) {
9094 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9095 }
9096}
9097
9098/*
9099 * 8.2.207 Multicast Transport Information
9100 */
9101static void
9102dissect_pfcp_multicast_transport_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9103{
9104 int offset = 0;
9105 uint32_t distribution_address_type;
9106 uint32_t distribution_address_length;
9107 uint32_t source_address_type;
9108 uint32_t source_address_length;
9109
9110 /* Oct 5 Spare */
9111 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9112 offset++;
9113
9114 /* Oct 6 to 9 Common Tunnel Endpoint Identifier */
9115 proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_endpoint_identifier, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9116 offset+=4;
9117
9118 /* Oct 10 Distribution Address Type && Length */
9119 proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_distribution_address_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &distribution_address_type);
9120 proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_distribution_address_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &distribution_address_length);
9121 offset++;
9122
9123 /* Distribution IPv4 address (if present) */
9124 if (distribution_address_type == 0) {
9125 proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_distribution_address_ipv4, tvb, offset, distribution_address_length, ENC_BIG_ENDIAN0x00000000);
9126 offset += distribution_address_length;
9127 }
9128 /* Distribution IPv6 address (if present) */
9129 if (distribution_address_type == 1) {
9130 proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_distribution_address_ipv6, tvb, offset, distribution_address_length, ENC_NA0x00000000);
9131 offset += distribution_address_length;
9132 }
9133
9134 /* Source Address Type && Length */
9135 proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_source_address_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &source_address_type);
9136 proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_source_address_length, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &source_address_length);
9137 offset++;
9138
9139 /* Source IPv4 address (if present) */
9140 if (source_address_type == 0) {
9141 proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_source_address_ipv4, tvb, offset, source_address_length, ENC_BIG_ENDIAN0x00000000);
9142 offset += source_address_length;
9143 }
9144 /* Source IPv6 address (if present) */
9145 if (source_address_type == 1) {
9146 proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_source_address_ipv6, tvb, offset, source_address_length, ENC_NA0x00000000);
9147 offset += source_address_length;
9148 }
9149
9150 if (offset < length) {
9151 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9152 }
9153}
9154
9155/*
9156 * 8.2.208 MBSN4mbReq-Flags
9157 */
9158static void
9159dissect_pfcp_mbsn4mbreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9160{
9161 int offset = 0;
9162
9163 static int * const pfcp_mbsn4mbreq_flags_o5_flags[] = {
9164 &hf_pfcp_spare_b7_b2,
9165 &hf_pfcp_mbsn4mbreq_flags_o5_b2_mbs_resti,
9166 &hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm,
9167 &hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm,
9168 NULL((void*)0)
9169 };
9170 /* Octet 5 Spare MBS RESTI JMBSSM PLLSSM */
9171 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mbsn4mbreq_flags_o5_flags, ENC_BIG_ENDIAN0x00000000);
9172 offset++;
9173
9174 if (offset == length) {
9175 return;
9176 }
9177
9178 if (offset < length) {
9179 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9180 }
9181}
9182
9183/*
9184 * 8.2.209 Local Ingress Tunnel
9185 */
9186static void
9187dissect_pfcp_local_ingress_tunnel(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9188{
9189 int offset = 0;
9190 uint64_t local_ingress_tunnel_flags_val;
9191
9192 static int * const pfcp_local_ingress_tunnel_flags[] = {
9193 &hf_pfcp_spare_b7_b3,
9194 &hf_pfcp_local_ingress_tunnel_flags_b2_ch,
9195 &hf_pfcp_local_ingress_tunnel_flags_b1_v6,
9196 &hf_pfcp_local_ingress_tunnel_flags_b0_v4,
9197 NULL((void*)0)
9198 };
9199 /* Octet 5 Spare CH V6 V4*/
9200 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_local_ingress_tunnel_flags, ENC_BIG_ENDIAN0x00000000, &local_ingress_tunnel_flags_val);
9201 offset += 1;
9202
9203 /* Bit 3 – CH (CHOOSE): If this bit is set to "1", then the UDP Port, IPv4 address and IPv6 address fields shall not be present */
9204 if ((local_ingress_tunnel_flags_val & 0x4) != 4) {
9205 /* UDP PPort */
9206 proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_udp_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
9207 offset += 2;
9208
9209 if ((local_ingress_tunnel_flags_val & 0x1) == 1) {
9210 /* IPv4 address */
9211 proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9212 offset += 4;
9213 }
9214 if ((local_ingress_tunnel_flags_val & 0x2) == 2) {
9215 /* IPv6 address */
9216 proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_ipv6, tvb, offset, 16, ENC_NA0x00000000);
9217 offset += 16;
9218 }
9219 }
9220 if (offset < length) {
9221 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9222 }
9223
9224}
9225
9226/*
9227 * 8.2.210 MBS Unicast Parameters ID
9228 */
9229static void
9230dissect_pfcp_mbs_unicast_parameters_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9231{
9232 uint32_t value;
9233 /* Octet 5 to 6 MBS Unicast Parameters ID */
9234 proto_tree_add_item_ret_uint(tree, hf_pfcp_mbs_unicast_parameters_id, tvb, 0, 2, ENC_BIG_ENDIAN0x00000000, &value);
9235 proto_item_append_text(item, "%u", value);
9236}
9237
9238/*
9239 * 8.2.211 MBSN4Resp-Flags
9240 */
9241static void
9242dissect_pfcp_mbsn4resp_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9243{
9244 int offset = 0;
9245
9246 static int * const pfcp_mbsn4resp_flags_o5_flags[] = {
9247 &hf_pfcp_spare_b7_b3,
9248 &hf_pfcp_mbsn4resp_flags_o5_b2_n19dtr,
9249 &hf_pfcp_mbsn4resp_flags_o5_b1_jmti,
9250 &hf_pfcp_mbsn4resp_flags_o5_b0_nn19dt,
9251 NULL((void*)0)
9252 };
9253 /* Octet 5 Spare spare Spare Spare Spare N19DTR JMTI NN19DT */
9254 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mbsn4resp_flags_o5_flags, ENC_BIG_ENDIAN0x00000000);
9255 offset++;
9256
9257 if (offset < length) {
9258 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9259 }
9260
9261}
9262
9263/*
9264 * 8.2.212 Tunnel Password
9265 */
9266static void
9267dissect_pfcp_tunnel_password(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9268{;
9269 /* Octet 5 to (n+4) Tunnel Password value */
9270 proto_tree_add_item(tree, hf_pfcp_tunnel_password_value, tvb, 0, -1, ENC_UTF_80x00000002 | ENC_NA0x00000000);
9271}
9272
9273/*
9274 * 8.2.213 Area Session ID
9275 */
9276static void
9277dissect_pfcp_area_session_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item, uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9278{;
9279 uint32_t value;
9280 /* Octet 5 to (n+4) Tunnel Password value */
9281 proto_tree_add_item_ret_uint(tree, hf_pfcp_area_session_id_value, tvb, 0, 2, ENC_UTF_80x00000002 | ENC_NA0x00000000, &value);
9282 proto_item_append_text(item, "%u", value);
9283}
9284
9285/*
9286 * 8.2.214 DSCP to PPI Mapping Information
9287 */
9288static void
9289dissect_pfcp_dscp_to_ppi_mapping_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9290{
9291 int offset = 0;
9292 int dscp_values = 0;
9293
9294 /* Octet 5 Paging Policy Indicator (PPI)
9295 * The PPI shall be encoded as a value between 0 and 7, as specified in clause 5.5.3.7 of 3GPP TS 38.415
9296 */
9297 proto_tree_add_item(tree, hf_pfcp_dscp_to_ppi_mapping_info_ppi_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9298 offset++;
9299
9300 while (offset < length) {
9301 proto_tree_add_item(tree, hf_pfcp_dscp_to_ppi_mapping_info_dscp_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9302 offset++;
9303 dscp_values++;
9304
9305 /* no more than 63 DSCP values */
9306 if(dscp_values >= 63) {
9307 break;
9308 }
9309 }
9310
9311 if (offset < length) {
9312 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9313 }
9314}
9315
9316/*
9317 * 8.2.215 PFCPSDRsp-Flags
9318 */
9319static void
9320dissect_pfcp_pfcpsdrsp_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9321{
9322 int offset = 0;
9323
9324 static int * const pfcp_pfcpsdrsp_flags[] = {
9325 &hf_pfcp_spare_b7_b1,
9326 &hf_pfcp_pfcpsdrsp_flags_b0_puru,
9327 NULL((void*)0)
9328 };
9329 /* Octet 5 Spare PURU */
9330 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsdrsp_flags, ENC_BIG_ENDIAN0x00000000);
9331 offset += 1;
9332
9333 if (offset < length) {
9334 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9335 }
9336}
9337
9338/*
9339 * 8.2.216 QER Indications
9340 */
9341static void
9342dissect_pfcp_qer_indications(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9343{
9344 int offset = 0;
9345
9346 static int * const pfcp_qer_indications_flags[] = {
9347 &hf_pfcp_spare_b7_b4,
9348 &hf_pfcp_qer_indications_flags_b3_pdusm,
9349 &hf_pfcp_qer_indications_flags_b2_eml4s,
9350 &hf_pfcp_qer_indications_flags_b1_edbmi,
9351 &hf_pfcp_qer_indications_flags_b0_iqfis,
9352 NULL((void*)0)
9353 };
9354 /* Octet 5 Spare PDUSM EML4s EDBMI PURU */
9355 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qer_indications_flags, ENC_BIG_ENDIAN0x00000000);
9356 offset += 1;
9357
9358 if (offset < length) {
9359 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9360 }
9361}
9362
9363/*
9364 * 8.2.217 Vendor-Specific Node Report Type
9365 */
9366static void
9367dissect_pfcp_vendor_specific_node_report_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9368{
9369 int offset = 0;
9370
9371 /* Octet 5 to 6 Enterprise ID */
9372 proto_tree_add_item(tree, hf_pfcp_enterprise_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
9373 offset += 2;
9374
9375 static int * const pfcp_vendor_specific_node_report_type_flags[] = {
9376 &hf_pfcp_spare_b7,
9377 &hf_pfcp_spare_b6,
9378 &hf_pfcp_spare_b5,
9379 &hf_pfcp_spare_b4,
9380 &hf_pfcp_spare_b3,
9381 &hf_pfcp_spare_b2,
9382 &hf_pfcp_spare_b1,
9383 &hf_pfcp_spare_b0,
9384 NULL((void*)0)
9385 };
9386 /* Octet 5 Spare */
9387 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_vendor_specific_node_report_type_flags, ENC_BIG_ENDIAN0x00000000);
9388 offset += 1;
9389
9390 if (offset < length) {
9391 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9392 }
9393}
9394
9395/*
9396 * 8.2.218 Configured Time Domain
9397 */
9398static void
9399dissect_pfcp_configured_time_domain(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9400{
9401 int offset = 0;
9402
9403 static int * const pfcp_configured_time_domain_flags[] = {
9404 &hf_pfcp_spare_b7_b1,
9405 &hf_pfcp_configured_time_domain_flags_b0_ctdi,
9406 NULL((void*)0)
9407 };
9408 /* Octet 5 Spare CTDI */
9409 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_configured_time_domain_flags, ENC_BIG_ENDIAN0x00000000);
9410 offset += 1;
9411
9412 if (offset < length) {
9413 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9414 }
9415}
9416
9417/*
9418 * 8.2.219 Metadata
9419 */
9420static void
9421dissect_pfcp_metadata(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9422{
9423 int offset = 0;
9424
9425 /* Octet 5 to (n+4) Metadata
9426 * The Metadata field shall contain an octet string set to base64-encoded characters as specified in clause 5.5.2 of 3GPP TS 29.571
9427 */
9428 proto_tree_add_item(tree, hf_pfcp_metadata, tvb, offset, length, ENC_NA0x00000000);
9429
9430 tvbuff_t* bin_tvb = base64_tvb_to_new_tvb(tvb, offset, length);
9431 int bin_tvb_length = tvb_reported_length(bin_tvb);
9432 add_new_data_source(pinfo, bin_tvb, "Base64 decoded");
9433 proto_tree_add_item(tree, hf_pfcp_metadata_binary_metadata, bin_tvb, 0, bin_tvb_length, ENC_NA0x00000000);
9434}
9435
9436/*
9437 * 8.2.220 Traffic Parameter Threshold
9438 */
9439static void
9440dissect_pfcp_traffic_parameter_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9441{
9442 int offset = 0;
9443 uint64_t traffic_parameter_threshold_flags;
9444
9445 static int * const pfcp_traffic_parameter_threshold_flags[] = {
9446 &hf_pfcp_spare_b7_b1,
9447 &hf_pfcp_traffic_parameter_threshold_flags_b0_dl,
9448 NULL((void*)0)
9449 };
9450 /* Octet 5 Spare DL */
9451 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_traffic_parameter_threshold_flags, ENC_BIG_ENDIAN0x00000000, &traffic_parameter_threshold_flags);
9452 offset += 1;
9453
9454 /* Octet 6 to 9 Downlink N6 Jitter threshold (if present)*/
9455 if ((traffic_parameter_threshold_flags & 0x1)) {
9456 proto_tree_add_item(tree, hf_pfcp_traffic_parameter_threshold_downlink_n6_jitter_threshold, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9457 offset += 4;
9458 }
9459
9460 if (offset < length) {
9461 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9462 }
9463}
9464
9465/*
9466 * 8.2.221 DL Periodicity
9467 */
9468static void
9469dissect_pfcp_dl_periodicity(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9470{
9471 int offset = 0;
9472
9473 // Octet 5 Spare Octet
9474 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9475 offset += 1;
9476
9477 /* Octet 6 to 9 DL Periodicity */
9478 proto_tree_add_item(tree, hf_pfcp_dl_periodicity_value, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9479 offset += 4;
9480
9481 if (offset < length) {
9482 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9483 }
9484}
9485
9486/*
9487 * 8.2.222 N6 Jitter Measurement
9488 */
9489static void
9490dissect_pfcp_n6_jitter_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9491{
9492 int offset = 0;
9493 uint64_t n6_jitter_measurement_flags;
9494
9495 static int * const pfcp_n6_jitter_measurement_flags[] = {
9496 &hf_pfcp_spare_b7_b1,
9497 &hf_pfcp_n6_jitter_measurement_flags_b0_dl,
9498 NULL((void*)0)
9499 };
9500 /* Octet 5 Spare DL */
9501 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_n6_jitter_measurement_flags, ENC_BIG_ENDIAN0x00000000, &n6_jitter_measurement_flags);
9502 offset += 1;
9503
9504 if ((n6_jitter_measurement_flags & 0x1)) {
9505 /* Octet 6 to 9 DL Periodicity */
9506 proto_tree_add_item(tree, hf_pfcp_n6_jitter_measurement_dl_periodicity, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9507 offset += 4;
9508
9509 /* Octet 10 to 13 Lower DL Jitter Measurement */
9510 proto_tree_add_item(tree, hf_pfcp_n6_jitter_measurement_lower_dl_jitter_measurement, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9511 offset += 4;
9512
9513 /* Octet 14 to 17 Higher DL Jitter Measurement */
9514 proto_tree_add_item(tree, hf_pfcp_n6_jitter_measurement_higher_dl_jitter_measurement, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9515 offset += 4;
9516 }
9517
9518 if (offset < length) {
9519 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9520 }
9521}
9522
9523/*
9524 * 8.2.223 Traffic Parameter Measurement Indication
9525 */
9526static void
9527dissect_pfcp_traffic_parameter_measurement_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9528{
9529 int offset = 0;
9530
9531 static int * const pfcp_traffic_parameter_measurement_indication_flags[] = {
9532 &hf_pfcp_spare_b7_b3,
9533 &hf_pfcp_traffic_parameter_measurement_indication_flags_b2_n6jmi,
9534 &hf_pfcp_traffic_parameter_measurement_indication_flags_b1_dlpmi,
9535 &hf_pfcp_traffic_parameter_measurement_indication_flags_b0_ulpmi,
9536 NULL((void*)0)
9537 };
9538 /* Octet 5 Spare N6JMI DLPMI ULPMI */
9539 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_traffic_parameter_measurement_indication_flags, ENC_BIG_ENDIAN0x00000000);
9540 offset += 1;
9541
9542 if (offset < length) {
9543 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9544 }
9545}
9546
9547/*
9548 * 8.2.224 UL Periodicity
9549 */
9550static void
9551dissect_pfcp_ul_periodicity(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9552{
9553 int offset = 0;
9554
9555 // Octet 5 Spare Octet
9556 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9557 offset += 1;
9558
9559 /* Octet 6 to 9 DL Periodicity */
9560 proto_tree_add_item(tree, hf_pfcp_ul_periodicity_value, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9561 offset += 4;
9562
9563 if (offset < length) {
9564 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9565 }
9566}
9567
9568/*
9569 * 8.2.225 MPQUIC Control Information
9570 */
9571static void
9572dissect_pfcp_mpquic_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9573{
9574 int offset = 0;
9575
9576 static int * const pfcp_mpquic_control_information_flags[] = {
9577 &hf_pfcp_spare_b7_b1,
9578 &hf_pfcp_mpquic_control_information_flags_b0_cupd,
9579 NULL((void*)0)
9580 };
9581 /* Octet 5 Spare CUDP */
9582 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mpquic_control_information_flags, ENC_BIG_ENDIAN0x00000000);
9583 offset += 1;
9584
9585 if (offset < length) {
9586 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9587 }
9588}
9589
9590/*
9591 * 8.2.226 MPQUIC Address Information
9592 */
9593static const value_string pfcp_mpquic_address_information_type_vals[] = {
9594 { 1, "Transport converter, used only if the proxy type is MPTCP" },
9595 { 2, "Connect-UDP, used only if the proxy type is MPQUIC" },
9596 { 0, NULL((void*)0) }
9597};
9598
9599static void
9600dissect_pfcp_mpquic_address_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9601{
9602 int offset = 0;
9603 uint64_t mpquic_address_information_flags;
9604
9605 static int * const pfcp_mpquic_address_information_flags[] = {
9606 &hf_pfcp_spare_b7_b1,
9607 &hf_pfcp_mpquic_address_information_flags_b1_v6,
9608 &hf_pfcp_mpquic_address_information_flags_b0_v4,
9609 NULL((void*)0)
9610 };
9611 /* Octet 5 Spare V6 V4 */
9612 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mpquic_address_information_flags, ENC_BIG_ENDIAN0x00000000, &mpquic_address_information_flags);
9613 offset += 1;
9614
9615 /* 6 MPQUIC Proxy Type */
9616 proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_type, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9617 offset += 1;
9618
9619 /* 7 MPQUIC Proxy Port */
9620 proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
9621 offset += 2;
9622
9623 /* p to (p+3) MPQUIC Proxy IPv4 address (if present) */
9624 if ((mpquic_address_information_flags & 0x1)) {
9625 proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9626 offset += 4;
9627 }
9628 /* q to (q+15) MPQUIC Proxy IPv6 address (if present) */
9629 if ((mpquic_address_information_flags & 0x2)) {
9630 proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_address_ipv6, tvb, offset, 16, ENC_NA0x00000000);
9631 offset += 16;
9632 }
9633
9634 if (offset < length) {
9635 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9636 }
9637}
9638
9639/*
9640 * 8.2.227 Transport Mode
9641 */
9642static const value_string pfcp_transport_mode_type_vals[] = {
9643 { 0, "Datagram mode 1" },
9644 { 1, "Datagram mode 2" },
9645 { 2, "Stream mode" },
9646 { 0, NULL((void*)0) }
9647};
9648
9649static void
9650dissect_pfcp_transport_mode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9651{
9652 int offset = 0;
9653
9654 /* 5 Transport Mode Value */
9655 proto_tree_add_item(tree, hf_pfcp_transport_mode_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9656 offset += 1;
9657
9658 if (offset < length) {
9659 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9660 }
9661}
9662
9663/*
9664 * 8.2.228 Protocol Description
9665 */
9666static void
9667dissect_pfcp_protocol_description(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9668{
9669 int offset = 0;
9670
9671 static int * const pfcp_protocol_description_flags[] = {
9672 &hf_pfcp_spare_b7_b3,
9673 &hf_pfcp_protocol_description_flags_b2_srtp,
9674 &hf_pfcp_protocol_description_flags_b1_rtp,
9675 &hf_pfcp_protocol_description_flags_b0_h264,
9676 NULL((void*)0)
9677 };
9678 /* Octet 5 Spare SRTP RTP H264 */
9679 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_protocol_description_flags, ENC_BIG_ENDIAN0x00000000);
9680 offset += 1;
9681
9682 if (offset < length) {
9683 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9684 }
9685}
9686
9687/*
9688 * 8.2.229 Reporting Suggestion Info
9689 */
9690static const value_string pfcp_reporting_urgency_type_vals[] = {
9691 { 0, "Delay tolerant" },
9692 { 1, "Non delay tolerant" },
9693 { 0, NULL((void*)0) }
9694};
9695
9696static void
9697dissect_pfcp_reporting_suggestion_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9698{
9699 int offset = 0;
9700 uint32_t value;
9701
9702 /* 5 Reporting Urgency value */
9703 proto_tree_add_item_ret_uint(tree, hf_pfcp_reporting_suggestion_info_reporting_urgency_value, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
9704 offset += 1;
9705
9706 /* 6-9 Reporting Time Info */
9707 if (value == 0) {
9708 proto_tree_add_item(tree, hf_pfcp_reporting_suggestion_info_reporting_time_info, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9709 offset += 4;
9710 }
9711
9712 if (offset < length) {
9713 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9714 }
9715}
9716
9717/*
9718 * 8.2.230 TL-Container
9719 */
9720static void
9721dissect_pfcp_tl_container(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9722{
9723 int offset = 0;
9724 /* Octet 5 to (n+4) TL-Container
9725 * The TL-Container Information field shall be encoded as an Octet String.
9726 * It shall encode a Get or Set Request or Response message defined in 3GPP TS 29.585.
9727 */
9728 proto_tree_add_item(tree, hf_pfcp_tl_container, tvb, offset, length, ENC_NA0x00000000);
9729}
9730
9731/*
9732 * 8.2.231 Measurement Indication
9733 */
9734static void
9735dissect_pfcp_measurement_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9736{
9737 int offset = 0;
9738
9739 static int * const pfcp_measurement_indication_flags[] = {
9740 &hf_pfcp_spare_b7_b1,
9741 &hf_pfcp_measurement_indication_flags_b0_dqfi,
9742 NULL((void*)0)
9743 };
9744 /* Octet 5 Spare DQFI */
9745 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_measurement_indication_flags, ENC_BIG_ENDIAN0x00000000);
9746 offset += 1;
9747
9748 if (offset < length) {
9749 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9750 }
9751}
9752
9753/*
9754 * 8.2.232 HPLMN S-NSSAI
9755 */
9756static void
9757dissect_pfcp_hplmn_s_nssai(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length _U___attribute__((unused)), uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9758{
9759 int offset = 0;
9760
9761 /* The SST (Slice/Service Type) and SD (Slice Differentiator) fields shall be encoded as defined in clause 28.4.2 of 3GPP TS 23.003. */
9762 /* Octet 5 SST */
9763 proto_tree_add_item(tree, hf_pfcp_hplmn_s_nssai_sst, tvb, offset, 1, ENC_NA0x00000000);
9764 offset += 1;
9765
9766 /* Octet 6-8 SD */
9767 proto_tree_add_item(tree, hf_pfcp_hplmn_s_nssai_sd, tvb, offset, 3, ENC_NA0x00000000);
9768}
9769
9770/*
9771 * 8.2.233 Media Transport Protocol
9772 */
9773static const value_string pfcp_media_transport_protocol_vals[] = {
9774 { 0, "Unspecified" },
9775 { 1, "RTP (Real-time Transport Protocol)" },
9776 { 2, "SRTP (Secure Real-Time Protocol)" },
9777 { 0, NULL((void*)0) }
9778};
9779
9780static void
9781dissect_pfcp_media_transport_protocol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9782{
9783 int offset = 0;
9784
9785 /* 5 Media Transport Protocol */
9786 proto_tree_add_item(tree, hf_pfcp_media_transport_protocol, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9787 offset += 1;
9788
9789 if (offset < length) {
9790 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9791 }
9792}
9793
9794/*
9795 * 8.2.234 RTP Header Extension Type
9796 */
9797static const value_string pfcp_rtp_header_extension_type_vals[] = {
9798 { 1, "RTP Header Extension for PDU Set Marking" },
9799 { 0, NULL((void*)0) }
9800};
9801
9802static void
9803dissect_pfcp_rtp_header_extension_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9804{
9805 /* Octet 5 RTP Header Extension Type */
9806 proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_type, tvb, 0, length, ENC_NA0x00000000);
9807}
9808
9809/*
9810 * 8.2.235 RTP Header Extension ID
9811 */
9812static void
9813dissect_pfcp_rtp_header_extension_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9814{
9815 /* Octet 5 RTP Header Extension ID */
9816 proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_id, tvb, 0, length, ENC_NA0x00000000);
9817}
9818
9819/*
9820 * 8.2.236 RTP Payload Type
9821 */
9822static void
9823dissect_pfcp_rtp_payload_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9824{
9825 /* Octet 5 RTP Payload Type */
9826 proto_tree_add_item(tree, hf_pfcp_rtp_payload_type, tvb, 0, length, ENC_NA0x00000000);
9827}
9828
9829/*
9830 * 8.2.237 RTP Payload Format
9831 */
9832static const value_string pfcp_rtp_payload_format_vals[] = {
9833 { 1, "RTP Header Extension for PDU Set Marking" },
9834 { 0, NULL((void*)0) }
9835};
9836
9837static void
9838dissect_pfcp_rtp_payload_format(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9839{
9840 /* Octet 5 RTP Payload Format */
9841 proto_tree_add_item(tree, hf_pfcp_rtp_payload_format, tvb, 0, length, ENC_NA0x00000000);
9842}
9843
9844/*
9845 * 8.2.238 Extended DL Buffering Notification Policy
9846 */
9847static void
9848dissect_pfcp_extended_dl_buffering_notification_policy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9849{
9850 int offset = 0;
9851
9852 static int * const pfcp_extended_dl_buffering_notification_policy_flags[] = {
9853 &hf_pfcp_spare_b7_b1,
9854 &hf_pfcp_extended_dl_buffering_notification_policy_flags_b0_edbn,
9855 NULL((void*)0)
9856 };
9857 /* Octet 5 Spare EDBN */
9858 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_extended_dl_buffering_notification_policy_flags, ENC_BIG_ENDIAN0x00000000);
9859 offset += 1;
9860
9861 if (offset < length) {
9862 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9863 }
9864}
9865
9866/*
9867 * 8.2.239 MT-SDT Control Information
9868 */
9869static void
9870dissect_pfcp_mt_sdt_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9871{
9872 int offset = 0;
9873
9874 static int * const pfcp_mt_sdt_control_information_flags[] = {
9875 &hf_pfcp_spare_b7_b1,
9876 &hf_pfcp_mt_sdt_control_information_flags_b0_rdsi,
9877 NULL((void*)0)
9878 };
9879 /* Octet 5 Spare RDSI */
9880 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mt_sdt_control_information_flags, ENC_BIG_ENDIAN0x00000000);
9881 offset += 1;
9882
9883 if (offset < length) {
9884 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9885 }
9886}
9887
9888/*
9889 * 8.2.240 Reporting Thresholds
9890 */
9891static void
9892dissect_pfcp_reporting_thresholds(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9893{
9894 int offset = 0;
9895 uint64_t reporting_thresholds_flags;
9896
9897 static int * const pfcp_reporting_thresholds_flags[] = {
9898 &hf_pfcp_spare_b7_b4,
9899 &hf_pfcp_reporting_thresholds_flags_b3_uldr,
9900 &hf_pfcp_reporting_thresholds_flags_b2_dldr,
9901 &hf_pfcp_reporting_thresholds_flags_b1_ulci,
9902 &hf_pfcp_reporting_thresholds_flags_b0_dlci,
9903 NULL((void*)0)
9904 };
9905 /* Octet 5 Spare RP Ul DL */
9906 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_reporting_thresholds_flags, ENC_BIG_ENDIAN0x00000000, &reporting_thresholds_flags);
9907 offset += 1;
9908
9909 /* m to (m+1) DL Congestion information threshold */
9910 if ((reporting_thresholds_flags & 0x1)) {
9911 proto_tree_add_item(tree, hf_pfcp_reporting_thresholds_dl_congestion_information_threshold, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9912 offset += 1;
9913 }
9914
9915 /* p to (p+1) UL Congestion information threshold */
9916 if ((reporting_thresholds_flags & 0x2)) {
9917 proto_tree_add_item(tree, hf_pfcp_reporting_thresholds_ul_congestion_information_threshold, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9918 offset += 1;
9919 }
9920
9921 /* q to (q+4) DL Data Rate threshold */
9922 if ((reporting_thresholds_flags & 0x4)) {
9923 proto_tree_add_item(tree, hf_pfcp_reporting_thresholds_dl_data_rate_threshold, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9924 offset += 4;
9925 }
9926
9927 /* r to (r+4) UL Data Rate threshold */
9928 if ((reporting_thresholds_flags & 0x4)) {
9929 proto_tree_add_item(tree, hf_pfcp_reporting_thresholds_ul_data_rate_threshold, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
9930 offset += 4;
9931 }
9932
9933 if (offset < length) {
9934 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
9935 }
9936}
9937
9938/*
9939 * 8.2.241 RTP Header Extension Additional Information
9940 */
9941static const value_string pfcp_rtp_header_extension_additional_information_type_vals[] = {
9942 { 1, "1-byte (short) format in used" },
9943 { 2, "2-byte (long) format in used" },
9944 { 0, NULL((void*)0) }
9945};
9946
9947static void
9948dissect_pfcp_rtp_header_extension_additional_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9949{
9950 int offset = 0;
9951 uint64_t rtp_header_extension_additional_information_flags;
9952
9953 static int * const pfcp_rtp_header_extension_additional_information_flags[] = {
9954 &hf_pfcp_spare_b7_b2,
9955 &hf_pfcp_rtp_header_extension_additional_information_flags_b1_pssai,
9956 &hf_pfcp_rtp_header_extension_additional_information_flags_b0_fi,
9957 NULL((void*)0)
9958 };
9959 /* Octet 5 Spare PSSAI FI */
9960 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_rtp_header_extension_additional_information_flags, ENC_BIG_ENDIAN0x00000000, &rtp_header_extension_additional_information_flags);
9961 offset += 1;
9962
9963 /* Octet 6 */
9964 /* PSSA */
9965 if ((rtp_header_extension_additional_information_flags & 0x2)) {
9966 proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_additional_information_pssa, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9967 }
9968 /* Format */
9969 if ((rtp_header_extension_additional_information_flags & 0x1)) {
9970 proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_additional_information_format, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
9971 }
9972 offset += 1;
9973
9974 if (offset < length) {
9975 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9976 }
9977}
9978
9979/*
9980 * 8.2.242 Mapped N6 IP Address
9981 */
9982static void
9983dissect_pfcp_mapped_n6_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
9984{
9985 int offset = 0;
9986 uint64_t mapped_n6_ip_address_flags;
9987
9988 static int * const pfcp_mapped_n6_ip_address_flags[] = {
9989 &hf_pfcp_spare_b7_b2,
9990 &hf_pfcp_mapped_n6_ip_address_b0_chv4,
9991 &hf_pfcp_mapped_n6_ip_address_b1_v4,
9992 NULL((void*)0)
9993 };
9994 /* Octet 5 Spare V4 */
9995 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mapped_n6_ip_address_flags, ENC_BIG_ENDIAN0x00000000, &mapped_n6_ip_address_flags);
9996 offset += 1;
9997
9998 /* IPv4 address (if present) */
9999 if ((mapped_n6_ip_address_flags & 0x2)) {
10000 proto_tree_add_item(tree, hf_pfcp_mapped_n6_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
10001 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
10002 offset += 4;
10003 }
10004
10005 if (offset < length) {
10006 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
10007 }
10008}
10009
10010/*
10011 * 8.2.243 N6 Routing Information
10012 */
10013static void
10014dissect_pfcp_n6_routing_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U___attribute__((unused)), uint16_t length, uint8_t message_type _U___attribute__((unused)), pfcp_session_args_t *args _U___attribute__((unused)))
10015{
10016 int offset = 0;
10017 uint64_t n6_routing_information_flags;
10018
10019 static int * const pfcp_n6_routing_information_flags[] = {
10020 &hf_pfcp_spare_b7_b6,
10021 &hf_pfcp_n6_routing_information_flag_b5_dpo,
10022 &hf_pfcp_n6_routing_information_flag_b4_dipv6,
10023 &hf_pfcp_n6_routing_information_flag_b3_dipv4,
10024 &hf_pfcp_n6_routing_information_flag_b2_spo,
10025 &hf_pfcp_n6_routing_information_flag_b1_sipv6,
10026 &hf_pfcp_n6_routing_information_flag_b0_sipv4,
10027 NULL((void*)0)
10028 };
10029 /* Octet 5 Spare DPO DIPV6 DIPV4 SPO SIPV6 SIPV4*/
10030 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_n6_routing_information_flags, ENC_BIG_ENDIAN0x00000000, &n6_routing_information_flags);
10031 offset += 1;
10032
10033 /* Source IPv4 address (if present)*/
10034 if ((n6_routing_information_flags & 0x1)) {
10035 proto_tree_add_item(tree, hf_pfcp_n6_routing_information_source_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
10036 offset += 4;
10037 }
10038 /* Source IPv6 address (if present)*/
10039 if ((n6_routing_information_flags & 0x2)) {
10040 proto_tree_add_item(tree, hf_pfcp_n6_routing_information_source_ipv6, tvb, offset, 16, ENC_NA0x00000000);
10041 offset += 16;
10042 }
10043 /* Source Port Number (if present)*/
10044 if ((n6_routing_information_flags & 0x4)) {
10045 proto_tree_add_item(tree, hf_pfcp_n6_routing_information_source_port, tvb, offset, 2, ENC_NA0x00000000);
10046 offset += 2;
10047 }
10048 /* Destination IPv4 address (if present)*/
10049 if ((n6_routing_information_flags & 0x8)) {
10050 proto_tree_add_item(tree, hf_pfcp_n6_routing_information_destination_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
10051 offset += 4;
10052 }
10053 /* Destination IPv6 address (if present)*/
10054 if ((n6_routing_information_flags & 0x10)) {
10055 proto_tree_add_item(tree, hf_pfcp_n6_routing_information_destination_ipv6, tvb, offset, 16, ENC_NA0x00000000);
10056 offset += 16;
10057 }
10058 /* Destination Port Number (if present)*/
10059 if ((n6_routing_information_flags & 0x20)) {
10060 proto_tree_add_item(tree, hf_pfcp_n6_routing_information_destination_port, tvb, offset, 2, ENC_NA0x00000000);
10061 offset += 2;
10062 }
10063
10064 if (offset < length) {
10065 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
10066 }
10067}
10068
10069static pfcp_msg_hash_t *
10070pfcp_match_response(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int seq_nr, unsigned msgtype, pfcp_conv_info_t *pfcp_info, uint8_t last_cause)
10071{
10072 pfcp_msg_hash_t pcr, *pcrp = NULL((void*)0);
10073 uint32_t session;
10074
10075 pcr.seq_nr = seq_nr;
10076 pcr.req_time = pinfo->abs_ts;
10077
10078 switch (msgtype) {
10079 case PFCP_MSG_HEARTBEAT_REQUEST1:
10080 case PFCP_MSG_PFD_MANAGEMENT_REQUEST3:
10081 case PFCP_MSG_ASSOCIATION_SETUP_REQUEST5:
10082 case PFCP_MSG_ASSOCIATION_UPDATE_REQUEST7:
10083 case PFCP_MSG_ASSOCIATION_RELEASE_REQUEST9:
10084 case PFCP_MSG_NODE_REPORT_REQEUST12:
10085 case PFCP_MSG_SESSION_SET_DELETION_REQUEST14:
10086 case PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST16:
10087 case PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST50:
10088 case PFCP_MSG_SESSION_MODIFICATION_REQUEST52:
10089 case PFCP_MSG_SESSION_DELETION_REQUEST54:
10090 case PFCP_MSG_SESSION_REPORT_REQUEST56:
10091 pcr.is_request = true1;
10092 pcr.req_frame = pinfo->num;
10093 pcr.rep_frame = 0;
10094 break;
10095 case PFCP_MSG_HEARTBEAT_RESPONSE2:
10096 case PFCP_MSG_PFD_MANAGEMENT_RESPONSE4:
10097 case PFCP_MSG_ASSOCIATION_SETUP_RESPONSE6:
10098 case PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE8:
10099 case PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE10:
10100 case PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE11:
10101 case PFCP_MSG_NODE_REPORT_RERESPONSE13:
10102 case PFCP_MSG_SESSION_SET_DELETION_RESPONSE15:
10103 case PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE17:
10104 case PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE51:
10105 case PFCP_MSG_SESSION_MODIFICATION_RESPONSE53:
10106 case PFCP_MSG_SESSION_DELETION_RESPONSE55:
10107 case PFCP_MSG_SESSION_REPORT_RESPONSE57:
10108
10109 pcr.is_request = false0;
10110 pcr.req_frame = 0;
10111 pcr.rep_frame = pinfo->num;
10112 break;
10113 default:
10114 pcr.is_request = false0;
10115 pcr.req_frame = 0;
10116 pcr.rep_frame = 0;
10117 break;
10118 }
10119
10120 pcrp = (pfcp_msg_hash_t *)wmem_map_lookup(pfcp_info->matched, &pcr);
10121
10122 if (pcrp) {
10123 pcrp->is_request = pcr.is_request;
10124 } else {
10125 /* no match, let's try to make one */
10126 switch (msgtype) {
10127 case PFCP_MSG_HEARTBEAT_REQUEST1:
10128 case PFCP_MSG_PFD_MANAGEMENT_REQUEST3:
10129 case PFCP_MSG_ASSOCIATION_SETUP_REQUEST5:
10130 case PFCP_MSG_ASSOCIATION_UPDATE_REQUEST7:
10131 case PFCP_MSG_ASSOCIATION_RELEASE_REQUEST9:
10132 case PFCP_MSG_NODE_REPORT_REQEUST12:
10133 case PFCP_MSG_SESSION_SET_DELETION_REQUEST14:
10134 case PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST16:
10135 case PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST50:
10136 case PFCP_MSG_SESSION_MODIFICATION_REQUEST52:
10137 case PFCP_MSG_SESSION_DELETION_REQUEST54:
10138 case PFCP_MSG_SESSION_REPORT_REQUEST56:
10139
10140 pcr.seq_nr = seq_nr;
10141
10142 pcrp = (pfcp_msg_hash_t *)wmem_map_remove(pfcp_info->unmatched, &pcr);
10143
10144 /* if we can't reuse the old one, grab a new chunk */
10145 if (!pcrp) {
10146 pcrp = wmem_new(wmem_file_scope(), pfcp_msg_hash_t)((pfcp_msg_hash_t*)wmem_alloc((wmem_file_scope()), sizeof(pfcp_msg_hash_t
)))
;
10147 }
10148 pcrp->seq_nr = seq_nr;
10149 pcrp->req_frame = pinfo->num;
10150 pcrp->req_time = pinfo->abs_ts;
10151 pcrp->rep_frame = 0;
10152 pcrp->msgtype = msgtype;
10153 pcrp->is_request = true1;
10154 wmem_map_insert(pfcp_info->unmatched, pcrp, pcrp);
10155 return NULL((void*)0);
10156 case PFCP_MSG_HEARTBEAT_RESPONSE2:
10157 case PFCP_MSG_PFD_MANAGEMENT_RESPONSE4:
10158 case PFCP_MSG_ASSOCIATION_SETUP_RESPONSE6:
10159 case PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE8:
10160 case PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE10:
10161 case PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE11:
10162 case PFCP_MSG_NODE_REPORT_RERESPONSE13:
10163 case PFCP_MSG_SESSION_SET_DELETION_RESPONSE15:
10164 case PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE17:
10165 case PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE51:
10166 case PFCP_MSG_SESSION_MODIFICATION_RESPONSE53:
10167 case PFCP_MSG_SESSION_DELETION_RESPONSE55:
10168 case PFCP_MSG_SESSION_REPORT_RESPONSE57:
10169
10170 pcr.seq_nr = seq_nr;
10171 pcrp = (pfcp_msg_hash_t *)wmem_map_lookup(pfcp_info->unmatched, &pcr);
10172
10173 if (pcrp) {
10174 if (!pcrp->rep_frame) {
10175 wmem_map_remove(pfcp_info->unmatched, pcrp);
10176 pcrp->rep_frame = pinfo->num;
10177 pcrp->is_request = false0;
10178 wmem_map_insert(pfcp_info->matched, pcrp, pcrp);
10179 }
10180 }
10181 break;
10182 default:
10183 break;
10184 }
10185 }
10186
10187 /* we have found a match */
10188 if (pcrp) {
10189 proto_item *it;
10190
10191 if (pcrp->is_request) {
10192 it = proto_tree_add_uint(tree, hf_pfcp_response_in, tvb, 0, 0, pcrp->rep_frame);
10193 proto_item_set_generated(it);
10194 } else {
10195 nstime_t ns;
10196
10197 it = proto_tree_add_uint(tree, hf_pfcp_response_to, tvb, 0, 0, pcrp->req_frame);
10198 proto_item_set_generated(it);
10199 nstime_delta(&ns, &pinfo->abs_ts, &pcrp->req_time);
10200 it = proto_tree_add_time(tree, hf_pfcp_response_time, tvb, 0, 0, &ns);
10201 proto_item_set_generated(it);
10202 if (g_pfcp_session && !PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
10203 /* PFCP session */
10204 /* If it's not already in the list */
10205 session = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_session_table, GUINT_TO_POINTER(pinfo->num)))((guint) (gulong) (g_hash_table_lookup(pfcp_session_table, ((
gpointer) (gulong) (pinfo->num)))))
;
10206 if (!session) {
10207 session = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_session_table, GUINT_TO_POINTER(pcrp->req_frame)))((guint) (gulong) (g_hash_table_lookup(pfcp_session_table, ((
gpointer) (gulong) (pcrp->req_frame)))))
;
10208 if (session) {
10209 pfcp_add_session(pinfo->num, session);
10210 }
10211 }
10212
10213 if (!pfcp_is_cause_accepted(last_cause)){
10214 /* If the cause is not accepted then we have to remove all the session information about its corresponding request */
10215 pfcp_remove_frame_info(pcrp->req_frame);
10216 }
10217 }
10218 }
10219 }
10220 return pcrp;
10221}
10222
10223/* 7.2.3.3 Grouped Information Elements */
10224
10225static void
10226dissect_pfcp_grouped_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10227{
10228 proto_item_append_text(item, "[Grouped IE]");
10229 dissect_pfcp_ies_common(tvb, pinfo, tree, 0, length, message_type, args);
10230}
10231
10232// wrapper around dissect_pfcp_grouped_ie with the dissector_t prototype
10233static int
10234dissect_pfcp_grouped_ie_wrapper(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
10235{
10236 pfcp_sub_dis_t *pfcp_sub_dis_info = (pfcp_sub_dis_t *)data;
10237
10238 dissect_pfcp_grouped_ie(tvb, pinfo, tree, proto_tree_get_parent(tree), tvb_reported_length(tvb), pfcp_sub_dis_info->message_type, pfcp_sub_dis_info->args);
10239
10240 return tvb_reported_length(tvb);
10241}
10242
10243static void
10244dissect_pfcp_create_pdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10245{
10246 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10247 proto_item_append_text(item, ": PDR ID: %u", args->last_rule_ids.pdr);
10248}
10249
10250static void
10251dissect_pfcp_create_far(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10252{
10253 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10254 proto_item_append_text(item, ": FAR ID: %s %u",
10255 tfs_get_string((args->last_rule_ids.far & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10256 (args->last_rule_ids.far & 0x7fffffff));
10257}
10258
10259static void
10260dissect_pfcp_create_urr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10261{
10262 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10263 proto_item_append_text(item, ": URR ID: %s %u",
10264 tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10265 (args->last_rule_ids.urr & 0x7fffffff));
10266}
10267
10268static void
10269dissect_pfcp_create_qer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10270{
10271 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10272 proto_item_append_text(item, ": QER ID: %s %u",
10273 tfs_get_string((args->last_rule_ids.qer & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10274 (args->last_rule_ids.qer & 0x7fffffff));
10275}
10276
10277static void
10278dissect_pfcp_created_pdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10279{
10280 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10281 proto_item_append_text(item, ": PDR ID: %u", args->last_rule_ids.pdr);
10282}
10283
10284static void
10285dissect_pfcp_update_pdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10286{
10287 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10288 proto_item_append_text(item, ": PDR ID: %u", args->last_rule_ids.pdr);
10289}
10290
10291static void
10292dissect_pfcp_update_far(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10293{
10294 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10295 proto_item_append_text(item, ": FAR ID: %s %u",
10296 tfs_get_string((args->last_rule_ids.far & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10297 (args->last_rule_ids.far & 0x7fffffff));
10298}
10299
10300static void
10301dissect_pfcp_update_bar(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10302{
10303 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10304 proto_item_append_text(item, ": BAR ID: %u", args->last_rule_ids.bar);
10305}
10306
10307static void
10308dissect_pfcp_update_urr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10309{
10310 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10311 proto_item_append_text(item, ": URR ID: %s %u",
10312 tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10313 (args->last_rule_ids.urr & 0x7fffffff));
10314}
10315
10316static void
10317dissect_pfcp_update_qer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10318{
10319 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10320 proto_item_append_text(item, ": QER ID: %s %u",
10321 tfs_get_string((args->last_rule_ids.qer & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10322 (args->last_rule_ids.qer & 0x7fffffff));
10323}
10324
10325static void
10326dissect_pfcp_remove_pdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10327{
10328 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10329 proto_item_append_text(item, ": PDR ID: %u", args->last_rule_ids.pdr);
10330}
10331
10332static void
10333dissect_pfcp_remove_far(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10334{
10335 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10336 proto_item_append_text(item, ": FAR ID: %s %u",
10337 tfs_get_string((args->last_rule_ids.far & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10338 (args->last_rule_ids.far & 0x7fffffff));
10339}
10340
10341static void
10342dissect_pfcp_remove_urr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10343{
10344 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10345 proto_item_append_text(item, ": URR ID: %s %u",
10346 tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10347 (args->last_rule_ids.urr & 0x7fffffff));
10348}
10349
10350static void
10351dissect_pfcp_remove_qer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10352{
10353 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10354 proto_item_append_text(item, ": QER ID: %s %u",
10355 tfs_get_string((args->last_rule_ids.qer & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10356 (args->last_rule_ids.qer & 0x7fffffff));
10357}
10358
10359static void
10360dissect_pfcp_usage_report_smr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10361{
10362 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10363 proto_item_append_text(item, ": URR ID: %s %u",
10364 tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10365 (args->last_rule_ids.urr & 0x7fffffff));
10366}
10367
10368static void
10369dissect_pfcp_usage_report_sdr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10370{
10371 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10372 proto_item_append_text(item, ": URR ID: %s %u",
10373 tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10374 (args->last_rule_ids.urr & 0x7fffffff));
10375}
10376
10377static void
10378dissect_pfcp_usage_report_srr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10379{
10380 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10381 proto_item_append_text(item, ": URR ID: %s %u",
10382 tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
10383 (args->last_rule_ids.urr & 0x7fffffff));
10384}
10385
10386static void
10387dissect_pfcp_create_bar(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10388{
10389 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10390 proto_item_append_text(item, ": BAR ID: %u", args->last_rule_ids.bar);
10391}
10392
10393static void
10394dissect_pfcp_update_bar_smr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10395{
10396 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10397 proto_item_append_text(item, ": BAR ID: %u", args->last_rule_ids.bar);
10398}
10399
10400static void
10401dissect_pfcp_remove_bar(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10402{
10403 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10404 proto_item_append_text(item, ": BAR ID: %u", args->last_rule_ids.bar);
10405}
10406
10407static void
10408dissect_pfcp_create_mar(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10409{
10410 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10411 proto_item_append_text(item, ": MAR ID: %u", args->last_rule_ids.mar);
10412}
10413
10414static void
10415dissect_pfcp_update_mar(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10416{
10417 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10418 proto_item_append_text(item, ": MAR ID: %u", args->last_rule_ids.mar);
10419}
10420
10421static void
10422dissect_pfcp_remove_mar(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10423{
10424 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10425 proto_item_append_text(item, ": MAR ID: %u", args->last_rule_ids.mar);
10426}
10427
10428static void
10429dissect_pfcp_remove_srr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10430{
10431 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10432 proto_item_append_text(item, ": SRR ID: %u", args->last_rule_ids.srr);
10433}
10434
10435static void
10436dissect_pfcp_create_srr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10437{
10438 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10439 proto_item_append_text(item, ": SRR ID: %u", args->last_rule_ids.srr);
10440}
10441
10442static void
10443dissect_pfcp_update_srr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10444{
10445 dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
10446 proto_item_append_text(item, ": SRR ID: %u", args->last_rule_ids.srr);
10447}
10448
10449/* Array of functions to dissect IEs
10450* (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10451*/
10452typedef struct _pfcp_ie {
10453 void(*decode) (tvbuff_t *, packet_info *, proto_tree *, proto_item *, uint16_t, uint8_t, pfcp_session_args_t *);
10454} pfcp_ie_t;
10455
10456static const pfcp_ie_t pfcp_ies[] = {
10457/* 0 */ { dissect_pfcp_reserved },
10458/* 1 */ { dissect_pfcp_create_pdr }, /* Create PDR Extendable / Table 7.5.2.2-1 */
10459/* 2 */ { dissect_pfcp_grouped_ie }, /* PDI Extendable / Table 7.5.2.2-2 */
10460/* 3 */ { dissect_pfcp_create_far }, /* Create FAR Extendable / Table 7.5.2.3-1 */
10461/* 4 */ { dissect_pfcp_grouped_ie }, /* Forwarding Parameters Extendable / Table 7.5.2.3-2 */
10462/* 5 */ { dissect_pfcp_grouped_ie }, /* Duplicating Parameters Extendable / Table 7.5.2.3-3 */
10463/* 6 */ { dissect_pfcp_create_urr }, /* Create URR Extendable / Table 7.5.2.4-1 */
10464/* 7 */ { dissect_pfcp_create_qer }, /* Create QER Extendable / Table 7.5.2.5-1 */
10465/* 8 */ { dissect_pfcp_created_pdr }, /* Created PDR Extendable / Table 7.5.3.2-1 */
10466/* 9 */ { dissect_pfcp_update_pdr }, /* Update PDR Extendable / Table 7.5.4.2-1 */
10467/* 10 */ { dissect_pfcp_update_far }, /* Update FAR Extendable / Table 7.5.4.3-1 */
10468/* 11 */ { dissect_pfcp_grouped_ie }, /* Update Forwarding Parameters Extendable / Table 7.5.4.3-2 */
10469/* 12 */ { dissect_pfcp_update_bar }, /* Update BAR (PFCP Session Report Response) Extendable / Table 7.5.9.2-1 */
10470/* 13 */ { dissect_pfcp_update_urr }, /* Update URR Extendable / Table 7.5.4.4 */
10471/* 14 */ { dissect_pfcp_update_qer }, /* Update QER Extendable / Table 7.5.4.5 */
10472/* 15 */ { dissect_pfcp_remove_pdr }, /* Remove PDR Extendable / Table 7.5.4.6 */
10473/* 16 */ { dissect_pfcp_remove_far }, /* Remove FAR Extendable / Table 7.5.4.7 */
10474/* 17 */ { dissect_pfcp_remove_urr }, /* Remove URR Extendable / Table 7.5.4.8 */
10475/* 18 */ { dissect_pfcp_remove_qer }, /* Remove QER Extendable / Table 7.5.4.9 */
10476/* 19 */ { dissect_pfcp_cause }, /* Cause Fixed / Subclause 8.2.1 */
10477/* 20 */ { dissect_pfcp_source_interface }, /* Source Interface Extendable / Subclause 8.2.2 */
10478/* 21 */ { dissect_pfcp_f_teid }, /* F-TEID Extendable / Subclause 8.2.3 */
10479/* 22 */ { dissect_pfcp_network_instance }, /* Network Instance Variable Length / Subclause 8.2.4 */
10480/* 23 */ { dissect_pfcp_sdf_filter }, /* SDF Filter Extendable / Subclause 8.2.5 */
10481/* 24 */ { dissect_pfcp_application_id }, /* Application ID Variable Length / Subclause 8.2.6 */
10482/* 25 */ { dissect_pfcp_gate_status }, /* Gate Status Extendable / Subclause 8.2.7 */
10483/* 26 */ { dissect_pfcp_mbr }, /* MBR Extendable / Subclause 8.2.8 */
10484/* 27 */ { dissect_pfcp_gbr }, /* GBR Extendable / Subclause 8.2.9 */
10485/* 28 */ { dissect_pfcp_qer_correlation_id }, /* QER Correlation ID Extendable / Subclause 8.2.10 */
10486/* 29 */ { dissect_pfcp_precedence }, /* Precedence Extendable / Subclause 8.2.11 */
10487/* 30 */ { dissect_pfcp_transport_level_marking }, /* Transport Level Marking Extendable / Subclause 8.2.12 */
10488/* 31 */ { dissect_pfcp_volume_threshold }, /* Volume Threshold Extendable /Subclause 8.2.13 */
10489/* 32 */ { dissect_pfcp_time_threshold }, /* Time Threshold Extendable /Subclause 8.2.14 */
10490/* 33 */ { dissect_pfcp_monitoring_time }, /* Monitoring Time Extendable /Subclause 8.2.15 */
10491/* 34 */ { dissect_pfcp_subseq_volume_threshold }, /* Subsequent Volume Threshold Extendable /Subclause 8.2.16 */
10492/* 35 */ { dissect_pfcp_subsequent_time_threshold }, /* Subsequent Time Threshold Extendable /Subclause 8.2.17 */
10493/* 36 */ { dissect_pfcp_inactivity_detection_time }, /* Inactivity Detection Time Extendable /Subclause 8.2.18 */
10494/* 37 */ { dissect_pfcp_reporting_triggers }, /* Reporting Triggers Extendable /Subclause 8.2.19 */
10495/* 38 */ { dissect_pfcp_redirect_information }, /* Redirect Information Extendable /Subclause 8.2.20 */
10496/* 39 */ { dissect_pfcp_report_type }, /* Report Type Extendable / Subclause 8.2.21 */
10497/* 40 */ { dissect_pfcp_offending_ie }, /* Offending IE Fixed / Subclause 8.2.22 */
10498/* 41 */ { dissect_pfcp_forwarding_policy }, /* Forwarding Policy Extendable / Subclause 8.2.23 */
10499/* 42 */ { dissect_pfcp_destination_interface }, /* Destination Interface Extendable / Subclause 8.2.24 */
10500/* 43 */ { dissect_pfcp_up_function_features }, /* UP Function Features Extendable / Subclause 8.2.25 */
10501/* 44 */ { dissect_pfcp_apply_action }, /* Apply Action Extendable / Subclause 8.2.26 */
10502/* 45 */ { dissect_pfcp_dl_data_service_inf }, /* Downlink Data Service Information Extendable / Subclause 8.2.27 */
10503/* 46 */ { dissect_pfcp_dl_data_notification_delay }, /* Downlink Data Notification Delay Extendable / Subclause 8.2.28 */
10504/* 47 */ { dissect_pfcp_dl_buffering_dur }, /* DL Buffering Duration Extendable / Subclause 8.2.29 */
10505/* 48 */ { dissect_pfcp_dl_buffering_suggested_packet_count }, /* DL Buffering Suggested Packet Count Variable / Subclause 8.2.30 */
10506/* 49 */ { dissect_pfcp_pfcpsmreq_flags }, /* PFCPSMReq-Flags Extendable / Subclause 8.2.31 */
10507/* 50 */ { dissect_pfcp_pfcpsrrsp_flags }, /* PFCPSRRsp-Flags Extendable / Subclause 8.2.32 */
10508/* 51 */ { dissect_pfcp_grouped_ie }, /* Load Control Information Extendable / Table 7.5.3.3-1 */
10509/* 52 */ { dissect_pfcp_sequence_number }, /* Sequence Number Fixed Length / Subclause 8.2.33 */
10510/* 53 */ { dissect_pfcp_metric }, /* Metric Fixed Length / Subclause 8.2.34 */
10511/* 54 */ { dissect_pfcp_grouped_ie }, /* Overload Control Information Extendable / Table 7.5.3.4-1 */
10512/* 55 */ { dissect_pfcp_timer }, /* Timer Extendable / Subclause 8.2 35 */
10513/* 56 */ { dissect_pfcp_pdr_id }, /* PDR ID Extendable / Subclause 8.2 36 */
10514/* 57 */ { dissect_pfcp_f_seid }, /* F-SEID Extendable / Subclause 8.2 37 */
10515/* 58 */ { dissect_pfcp_grouped_ie }, /* Application ID's PFDs Extendable / Table 7.4.3.1-2 */
10516/* 59 */ { dissect_pfcp_grouped_ie }, /* PFD context Extendable / Table 7.4.3.1-3 */
10517/* 60 */ { dissect_pfcp_node_id }, /* Node ID Extendable / Subclause 8.2.38 */
10518/* 61 */ { dissect_pfcp_pfd_contents }, /* PFD contents Extendable / Subclause 8.2.39 */
10519/* 62 */ { dissect_pfcp_measurement_method }, /* Measurement Method Extendable / Subclause 8.2.40 */
10520/* 63 */ { dissect_pfcp_usage_report_trigger }, /* Usage Report Trigger Extendable / Subclause 8.2.41 */
10521/* 64 */ { dissect_pfcp_measurement_period }, /* Measurement Period Extendable / Subclause 8.2.42 */
10522/* 65 */ { dissect_pfcp_fq_csid }, /* FQ-CSID Extendable / Subclause 8.2.43 */
10523/* 66 */ { dissect_pfcp_volume_measurement }, /* Volume Measurement Extendable / Subclause 8.2.44 */
10524/* 67 */ { dissect_pfcp_duration_measurement }, /* Duration Measurement Extendable / Subclause 8.2.45 */
10525/* 68 */ { dissect_pfcp_grouped_ie }, /* Application Detection Information Extendable / Table 7.5.8.3-2 */
10526/* 69 */ { dissect_pfcp_time_of_first_packet }, /* Time of First Packet Extendable / Subclause 8.2.46 */
10527/* 70 */ { dissect_pfcp_time_of_last_packet }, /* Time of Last Packet Extendable / Subclause 8.2.47 */
10528/* 71 */ { dissect_pfcp_quota_holding_time }, /* Quota Holding Time Extendable / Subclause 8.2.48 */
10529/* 72 */ { dissect_pfcp_dropped_dl_traffic_threshold }, /* Dropped DL Traffic Threshold Extendable / Subclause 8.2.49 */
10530/* 73 */ { dissect_pfcp_volume_quota }, /* Volume Quota Extendable / Subclause 8.2.50 */
10531/* 74 */ { dissect_pfcp_time_quota }, /* Time Quota Extendable / Subclause 8.2.51 */
10532/* 75 */ { dissect_pfcp_start_time }, /* Start Time Extendable / Subclause 8.2.52 */
10533/* 76 */ { dissect_pfcp_end_time }, /* End Time Extendable / Subclause 8.2.53 */
10534/* 77 */ { dissect_pfcp_grouped_ie }, /* Query URR Extendable / Table 7.5.4.10-1 */
10535/* 78 */ { dissect_pfcp_usage_report_smr }, /* Usage Report (Session Modification Response) Extendable / Table 7.5.5.2-1 */
10536/* 79 */ { dissect_pfcp_usage_report_sdr }, /* Usage Report (Session Deletion Response) Extendable / Table 7.5.7.2-1 */
10537/* 80 */ { dissect_pfcp_usage_report_srr }, /* Usage Report (Session Report Request) Extendable / Table 7.5.8.3-1 */
10538/* 81 */ { dissect_pfcp_urr_id }, /* URR ID Extendable / Subclause 8.2.54 */
10539/* 82 */ { dissect_pfcp_linked_urr_id }, /* Linked URR ID Extendable / Subclause 8.2.55 */
10540/* 83 */ { dissect_pfcp_grouped_ie }, /* Downlink Data Report Extendable / Table 7.5.8.2-1 */
10541/* 84 */ { dissect_pfcp_outer_header_creation }, /* Outer Header Creation Extendable / Subclause 8.2.56 */
10542/* 85 */ { dissect_pfcp_create_bar }, /* Create BAR Extendable / Table 7.5.2.6-1 */
10543/* 86 */ { dissect_pfcp_update_bar_smr }, /* Update BAR (Session Modification Request) Extendable / Table 7.5.4.11-1 */
10544/* 87 */ { dissect_pfcp_remove_bar }, /* Remove BAR Extendable / Table 7.5.4.12-1 */
10545/* 88 */ { dissect_pfcp_bar_id }, /* BAR ID Extendable / Subclause 8.2.57 */
10546/* 89 */ { dissect_pfcp_cp_function_features }, /* CP Function Features Extendable / Subclause 8.2.58 */
10547/* 90 */ { dissect_pfcp_usage_information }, /* Usage Information Extendable / Subclause 8.2.59 */
10548/* 91 */ { dissect_pfcp_application_instance_id }, /* Application Instance ID Variable Length / Subclause 8.2.60 */
10549/* 92 */ { dissect_pfcp_flow_inf }, /* Flow Information Extendable / Subclause 8.2.61 */
10550/* 93 */ { dissect_pfcp_ue_ip_address }, /* UE IP Address Extendable / Subclause 8.2.62 */
10551/* 94 */ { dissect_pfcp_packet_rate }, /* Packet Rate Extendable / Subclause 8.2.63 */
10552/* 95 */ { dissect_pfcp_outer_hdr_rem }, /* Outer Header Removal Extendable / Subclause 8.2.64 */
10553/* 96 */ { dissect_pfcp_recovery_time_stamp }, /* Recovery Time Stamp Extendable / Subclause 8.2.65 */
10554/* 97 */ { dissect_pfcp_dl_flow_level_marking }, /* DL Flow Level Marking Extendable / Subclause 8.2.66 */
10555/* 98 */ { dissect_pfcp_header_enrichment }, /* Header Enrichment Extendable / Subclause 8.2.67 */
10556/* 99 */ { dissect_pfcp_grouped_ie }, /* Error Indication Report Extendable / Table 7.5.8.4-1 */
10557/* 100 */ { dissect_pfcp_measurement_info }, /* Measurement Information Extendable / Subclause 8.2.68 */
10558/* 101 */ { dissect_pfcp_node_report_type }, /* Node Report Type Extendable / Subclause 8.2.69 */
10559/* 102 */ { dissect_pfcp_grouped_ie }, /* User Plane Path Failure Report Extendable / Table 7.4.5.1.2-1 */
10560/* 103 */ { dissect_pfcp_remote_gtp_u_peer }, /* Remote GTP-U Peer Extendable / Subclause 8.2.70 */
10561/* 104 */ { dissect_pfcp_ur_seqn }, /* UR-SEQN Fixed Length / Subclause 8.2.71 */
10562/* 105 */ { dissect_pfcp_grouped_ie }, /* Update Duplicating Parameters Extendable / Table 7.5.4.3-3 */
10563/* 106 */ { dissect_pfcp_act_predef_rules }, /* Activate Predefined Rules Variable Length / Subclause 8.2.72 */
10564/* 107 */ { dissect_pfcp_deact_predef_rules }, /* Deactivate Predefined Rules Variable Length / Subclause 8.2.73 */
10565/* 108 */ { dissect_pfcp_far_id }, /* FAR ID Extendable / Subclause 8.2.74 */
10566/* 109 */ { dissect_pfcp_qer_id }, /* QER ID Extendable / Subclause 8.2.75 */
10567/* 110 */ { dissect_pfcp_oci_flags }, /* OCI Flags Extendable / Subclause 8.2.76 */
10568/* 111 */ { dissect_pfcp_pfcp_assoc_rel_req }, /* PFCP Association Release Request Extendable / Subclause 8.2.77 */
10569/* 112 */ { dissect_pfcp_graceful_release_period }, /* Graceful Release Period Extendable / Subclause 8.2.78 */
10570/* 113 */ { dissect_pfcp_pdn_type }, /* PDN Type Fixed Length / Subclause 8.2.79 */
10571/* 114 */ { dissect_pfcp_failed_rule_id }, /* Failed Rule ID Extendable / Subclause 8.2.80 */
10572/* 115 */ { dissect_pfcp_time_quota_mechanism }, /* Time Quota Mechanism Extendable / Subclause 8.2.81 */
10573/* 116 */ { dissect_pfcp_user_plane_ip_resource_infomation }, /* User Plane IP Resource Information Extendable / Subclause 8.2.82 */
10574/* 117 */ { dissect_pfcp_user_plane_inactivity_timer }, /* User Plane Inactivity Timer Extendable / Subclause 8.2.83 */
10575/* 118 */ { dissect_pfcp_grouped_ie }, /* Aggregated URRs Extendable / Table 7.5.2.4-2 */
10576/* 119 */ { dissect_pfcp_multiplier }, /* Multiplier Fixed Length / Subclause 8.2.84 */
10577/* 120 */ { dissect_pfcp_aggregated_urr_id_ie }, /* Aggregated URR ID IE Fixed Length / Subclause 8.2.85 */
10578/* 121 */ { dissect_pfcp_subsequent_volume_quota }, /* Subsequent Volume Quota Extendable / Subclause 8.2.86 */
10579/* 122 */ { dissect_pfcp_subsequent_time_quota }, /* Subsequent Time Quota Extendable / Subclause 8.2.87 */
10580/* 123 */ { dissect_pfcp_rqi }, /* RQI Extendable / Subclause 8.2.88 */
10581/* 124 */ { dissect_pfcp_qfi }, /* QFI Extendable / Subclause 8.2.89 */
10582/* 125 */ { dissect_pfcp_query_urr_reference }, /* Query URR Reference Extendable / Subclause 8.2.90 */
10583/* 126 */ { dissect_pfcp_additional_usage_reports_information }, /* Additional Usage Reports Information Extendable / Subclause 8.2.91 */
10584/* 127 */ { dissect_pfcp_grouped_ie }, /* Create Traffic Endpoint Extendable / Table 7.5.2.7 */
10585/* 128 */ { dissect_pfcp_grouped_ie }, /* Created Traffic Endpoint Extendable / Table 7.5.3.5 */
10586/* 129 */ { dissect_pfcp_grouped_ie }, /* Update Traffic Endpoint Extendable / Table 7.5.4.13 */
10587/* 130 */ { dissect_pfcp_grouped_ie }, /* Remove Traffic Endpoint Extendable / Table 7.5.4.14 */
10588/* 131 */ { dissect_pfcp_traffic_endpoint_id }, /* Traffic Endpoint ID Extendable / Subclause 8.2.92 */
10589/* 132 */ { dissect_pfcp_grouped_ie }, /* Ethernet Packet Filter IE Extendable / Table 7.5.2.2-3 */
10590/* 133 */ { dissect_pfcp_mac_address }, /* MAC address Extendable / Subclause 8.2.93 */
10591/* 134 */ { dissect_pfcp_c_tag }, /* C-TAG Extendable / Subclause 8.2.94 */
10592/* 135 */ { dissect_pfcp_s_tag }, /* S-TAG Extendable / Subclause 8.2.95 */
10593/* 136 */ { dissect_pfcp_ethertype }, /* Ethertype Extendable / Subclause 8.2.96 */
10594/* 137 */ { dissect_pfcp_proxying }, /* Proxying Extendable / Subclause 8.2.97 */
10595/* 138 */ { dissect_pfcp_ethertype_filter_id }, /* Ethernet Filter ID Extendable / Subclause 8.2.98 */
10596/* 139 */ { dissect_pfcp_ethernet_filter_properties }, /* Ethernet Filter Properties Extendable / Subclause 8.2.99 */
10597/* 140 */ { dissect_pfcp_suggested_buffering_packets_count }, /* Suggested Buffering Packets Count Extendable / Subclause 8.2.100 */
10598/* 141 */ { dissect_pfcp_user_id }, /* User ID Extendable / Subclause 8.2.101 */
10599/* 142 */ { dissect_pfcp_ethernet_pdu_session_information }, /* Ethernet PDU Session Information Extendable / Subclause 8.2.102 */
10600/* 143 */ { dissect_pfcp_grouped_ie }, /* Ethernet Traffic Information Extendable / Table 7.5.8.3-3 */
10601/* 144 */ { dissect_pfcp_mac_addresses_detected }, /* MAC Addresses Detected Extendable / Subclause 8.2.103 */
10602/* 145 */ { dissect_pfcp_mac_addresses_removed }, /* MAC Addresses Removed Extendable / Subclause 8.2.104 */
10603/* 146 */ { dissect_pfcp_ethernet_inactivity_timer }, /* Ethernet Inactivity Timer Extendable / Subclause 8.2.105 */
10604/* 147 */ { dissect_pfcp_grouped_ie }, /* Additional Monitoring Time Extendable / Table 7.5.2.4-3 */
10605/* 148 */ { dissect_pfcp_event_quota }, /* Event Quota Extendable / Subclause 8.2.112 */
10606/* 149 */ { dissect_pfcp_event_threshold }, /* Event Threshold Extendable / Subclause 8.2.113 */
10607/* 150 */ { dissect_pfcp_subsequent_event_quota }, /* Subsequent Event Quota Extendable / Subclause 8.2.106 */
10608/* 151 */ { dissect_pfcp_subsequent_event_threshold }, /* Subsequent Event Threshold Extendable / Subclause 8.2.107 */
10609/* 152 */ { dissect_pfcp_trace_information }, /* Trace Information Extendable / Subclause 8.2.108 */
10610/* 153 */ { dissect_pfcp_framed_route }, /* Framed-Route Variable Length / Subclause 8.2.109 */
10611/* 154 */ { dissect_pfcp_framed_routing }, /* Framed-Routing Fixed Length / Subclause 8.2.110 */
10612/* 155 */ { dissect_pfcp_framed_ipv6_route }, /* Framed-IPv6-Route Variable Length / Subclause 8.2.111 */
10613/* 156 */ { dissect_pfcp_time_stamp }, /* Time Stamp Extendable / Subclause 8.2.114 */
10614/* 157 */ { dissect_pfcp_averaging_window }, /* Averaging Window Extendable / Subclause 8.2.115 */
10615/* 158 */ { dissect_pfcp_paging_policy_indicator }, /* Paging Policy Indicator Extendable / Subclause 8.2.116 */
10616/* 159 */ { dissect_pfcp_apn_dnn }, /* APN/DNN Variable Length / Subclause 8.2.117 */
10617/* 160 */ { dissect_pfcp_tgpp_interface_type }, /* 3GPP Interface Type Extendable / Subclause 8.2.118 */
10618/* 161 */ { dissect_pfcp_pfcpsrreq_flags }, /* PFCPSRReq-Flags Extendable / Subclause 8.2.119 */
10619/* 162 */ { dissect_pfcp_pfcpaureq_flags }, /* PFCPAUReq-Flags Extendable / Subclause 8.2.120 */
10620/* 163 */ { dissect_pfcp_activation_time }, /* Activation Time Extendable / Subclause 8.2.121 */
10621/* 164 */ { dissect_pfcp_deactivation_time }, /* Deactivation Time Extendable / Subclause 8.2.122 */
10622/* 165 */ { dissect_pfcp_create_mar }, /* Create MAR Extendable / Table 7.5.2.8-1 */
10623/* 166 */ { dissect_pfcp_grouped_ie }, /* Access Forwarding Action Information 1 Extendable / Table 7.5.2.8-2 */
10624/* 167 */ { dissect_pfcp_grouped_ie }, /* Access Forwarding Action Information 2 Extendable / Table 7.5.2.8-3 */
10625/* 168 */ { dissect_pfcp_remove_mar }, /* Remove MAR Extendable / Table 7.5.4.15-1*/
10626/* 169 */ { dissect_pfcp_update_mar }, /* Update MAR Extendable / Table 7.5.4.16-1 */
10627/* 170 */ { dissect_pfcp_mar_id }, /* MAR ID Extendable / Subclause 8.2.123 */
10628/* 171 */ { dissect_pfcp_steering_functionality }, /* Steering Functionality Extendable / Subclause 8.2.124 */
10629/* 172 */ { dissect_pfcp_steering_mode }, /* Steering Mode Extendable / Subclause 8.2.125 */
10630/* 173 */ { dissect_pfcp_weight }, /* Weight Fixed / Clause 8.2.126 */
10631/* 174 */ { dissect_pfcp_priority }, /* Priority Extendable / Subclause 8.2.127 */
10632/* 175 */ { dissect_pfcp_grouped_ie }, /* Update Access Forwarding Action Information 1 Extendable / Table 7.5.4.16-2 */
10633/* 176 */ { dissect_pfcp_grouped_ie }, /* Update Access Forwarding Action Information 2 Extendable / Table 7.5.4.16-3 */
10634/* 177 */ { dissect_pfcp_ue_ip_address_pool_identity }, /* UE IP address Pool Identity Variable Length / Clause 8.2.128 */
10635/* 178 */ { dissect_pfcp_alternative_smf_ip_address }, /* Alternative SMF IP Address Extendable / Clause 8.2.129 */
10636/* 179 */ { dissect_pfcp_packet_replication_and_detection_carry_on_information }, /* Packet Replication and Detection Carry-On Information Extendable / Clause 8.2.130 */
10637/* 180 */ { dissect_pfcp_smf_set_id }, /* SMF Set ID Extendable / Clause 8.2.131 */
10638/* 181 */ { dissect_pfcp_quota_validity_time }, /* Quota Validity Time Extendable / Clause 8.2.132 */
10639/* 182 */ { dissect_pfcp_number_of_reports }, /* Number of Reports Fixed / Clause 8.2.133 */
10640/* 183 */ { dissect_pfcp_grouped_ie }, /* PFCP Session Retention Information (within PFCP Association Setup Request) Extendable / Table 7.4.4.1-2 */
10641/* 184 */ { dissect_pfcp_pfcpasrsp_flags }, /* PFCPASRsp-Flags Extendable / Clause 8.2.134 */
10642/* 185 */ { dissect_pfcp_cp_pfcp_entity_ip_address }, /* CP PFCP Entity IP Address Extendable / Clause 8.2.135 */
10643/* 186 */ { dissect_pfcp_pfcpsereq_flags }, /* PFCPSEReq-Flags Extendable / Clause 8.2.136 */
10644/* 187 */ { dissect_pfcp_grouped_ie }, /* User Plane Path Recovery Report Extendable / Table 7.4.5.1.3-1 */
10645/* 188 */ { dissect_pfcp_grouped_ie }, /* IP Multicast Addressing Info within PFCP Session Establishment Request Extendable / Clause 7.5.2.2-4 */
10646/* 189 */ { dissect_pfcp_grouped_ie }, /* Join IP Multicast Information IE within Usage Report Extendable / Table 7.5.8.3-4 */
10647/* 190 */ { dissect_pfcp_grouped_ie }, /* Leave IP Multicast Information IE within Usage Report Extendable / Table 7.5.8.3-5 */
10648/* 191 */ { dissect_pfcp_ip_multicast_address }, /* IP Multicast Address Extendable / Clause 8.2.137 */
10649/* 192 */ { dissect_pfcp_source_ip_address }, /* Source IP Address Extendable / Clause 8.2.138 */
10650/* 193 */ { dissect_pfcp_packet_rate_status }, /* Packet Rate Status Extendable / Clause 8.2.139 */
10651/* 194 */ { dissect_pfcp_create_bridge_router_info }, /* Create Bridge/Router Info Extendable / Clause 8.2.140 */
10652/* 195 */ { dissect_pfcp_grouped_ie }, /* Created Bridge/Router Info Extendable / Table 7.5.3.6-1 */
10653/* 196 */ { dissect_pfcp_port_number }, /* Port Number Fixed Length / Clause 8.2.141 */
10654/* 197 */ { dissect_pfcp_nw_tt_port_number }, /* NW-TT Port Number Fixed Length / Clause 8.2.142 */
10655/* 198 */ { dissect_pfcp_5gs_user_plane_node_id }, /* 5GS User Plane Node ID Extendable / Clause 8.2.143 */
10656/* 199 */ { dissect_pfcp_grouped_ie }, /* TSC Management Information IE within PFCP Session Modification Request Extendable / Table 7.5.4.18-1 */
10657/* 200 */ { dissect_pfcp_grouped_ie }, /* TSC Management Information IE within PFCP Session Modification Response Extendable / Table 7.5.5.3-1 */
10658/* 201 */ { dissect_pfcp_grouped_ie }, /* TSC Management Information IE within PFCP Session Report Request Extendable / Table 7.5.8.5-1 */
10659/* 202 */ { dissect_pfcp_port_management_information_container }, /* Port Management Information Container Variable Length / Clause 8.2.144 */
10660/* 203 */ { dissect_pfcp_grouped_ie }, /* Clock Drift Control Information Extendable / Table 7.4.4.1.2-1 */
10661/* 204 */ { dissect_pfcp_requested_clock_drift_control_information }, /* Requested Clock Drift Information Extendable / Clause 8.2.145 */
10662/* 205 */ { dissect_pfcp_grouped_ie }, /* Clock Drift Report Extendable / Table 7.4.5.1.4-1 */
10663/* 206 */ { dissect_pfcp_time_domain_number }, /* Time Domain Number Extendable / Clause 8.2.146 */
10664/* 207 */ { dissect_pfcp_time_offset_threshold }, /* Time Offset Threshold Extendable / Clause 8.2.147 */
10665/* 208 */ { dissect_pfcp_cumulative_rate_ratio_threshold }, /* Cumulative rateRatio Threshold Extendable / Clause 8.2.148 */
10666/* 209 */ { dissect_pfcp_time_offset_measurement }, /* Time Offset Measurement Extendable / Clause 8.2.149 */
10667/* 210 */ { dissect_pfcp_cumulative_rate_ratio_measurement }, /* Cumulative rateRatio Measurement Extendable / Clause 8.2.150 */
10668/* 211 */ { dissect_pfcp_remove_srr }, /* Remove SRR Extendable/ Table 7.5.4.19-1 */
10669/* 212 */ { dissect_pfcp_create_srr }, /* Create SRR Extendable/ Table 7.5.2.9-1 */
10670/* 213 */ { dissect_pfcp_update_srr }, /* Update SRR Extendable/ Table 7.5.4.21-1 */
10671/* 214 */ { dissect_pfcp_grouped_ie }, /* Session Report Extendable / Table 7.5.8.7-1 */
10672/* 215 */ { dissect_pfcp_srr_id }, /* SRR ID Extendable / Clause 8.2.151 */
10673/* 216 */ { dissect_pfcp_grouped_ie }, /* Access Availability Control Information Extendable / Table 7.5.2.9-2 */
10674/* 217 */ { dissect_pfcp_requested_access_availability_control_information }, /* Requested Access Availability Information Extendable / Clause 8.2.152 */
10675/* 218 */ { dissect_pfcp_grouped_ie }, /* Access Availability Report Extendable / Table 7.5.8.6-2 */
10676/* 219 */ { dissect_pfcp_access_availability_information }, /* Access Availability Information Extendable / Clause 8.2.153 */
10677/* 220 */ { dissect_pfcp_grouped_ie }, /* Provide ATSSS Control Information Extendable / Table 7.5.2.10-1 */
10678/* 221 */ { dissect_pfcp_grouped_ie }, /* ATSSS Control Parameters Extendable / Table 7.5.3.7-1 */
10679/* 222 */ { dissect_pfcp_mptcp_control_information }, /* MPTCP Control Information Extendable / Clause 8.2.154 */
10680/* 223 */ { dissect_pfcp_atsss_ll_control_information }, /* ATSSS-LL Control Information Extendable / Clause 8.2.155 */
10681/* 224 */ { dissect_pfcp_pmf_control_information }, /* PMF Control Information Extendable / Clause 8.2.156 */
10682/* 225 */ { dissect_pfcp_grouped_ie }, /* MPTCP Parameters Extendable / Table 7.5.3.7-2 */
10683/* 226 */ { dissect_pfcp_grouped_ie }, /* ATSSS-LL Parameters Extendable / Table 7.5.3.7-3 */
10684/* 227 */ { dissect_pfcp_grouped_ie }, /* PMF Parameters Extendable / Table 7.5.3.7-4 */
10685/* 228 */ { dissect_pfcp_mptcp_address_information }, /* MPTCP Address Information Extendable / Clause 8.2.157 */
10686/* 229 */ { dissect_pfcp_link_specific_multipath_ip_address }, /* Link-Specific Multipath IP Address Extendable / Clause 8.2.158 */
10687/* 230 */ { dissect_pfcp_pmf_address_information }, /* PMF Address Information Extendable / Clause 8.2.159 */
10688/* 231 */ { dissect_pfcp_atsss_ll_information }, /* ATSSS-LL Information Extendable / Clause 8.2.160 */
10689/* 232 */ { dissect_pfcp_data_network_access_identifier }, /* Data Network Access Identifier Variable Length / Clause 8.2.161 */
10690/* 233 */ { dissect_pfcp_grouped_ie }, /* UE IP address Pool Information Extendable / Table 7.4.4.1-3 */
10691/* 234 */ { dissect_pfcp_average_packet_delay }, /* Average Packet Delay Extendable / Clause 8.2.162 */
10692/* 235 */ { dissect_pfcp_minimum_packet_delay }, /* Minimum Packet Delay Extendable / Clause 8.2.163 */
10693/* 236 */ { dissect_pfcp_maximum_packet_delay }, /* Maximum Packet Delay Extendable / Clause 8.2.164 */
10694/* 237 */ { dissect_pfcp_qos_report_trigger }, /* QoS Report Trigger Extendable / Clause 8.2.165 */
10695/* 238 */ { dissect_pfcp_grouped_ie }, /* GTP-U Path QoS Control Information Extendable / Table 7.4.4.1.3-1 */
10696/* 239 */ { dissect_pfcp_grouped_ie }, /* GTP-U Path QoS Report (PFCP Node Report Request) Extendable / Table 7.4.5.1.5-1 */
10697/* 240 */ { dissect_pfcp_grouped_ie }, /* QoS Information in GTP-U Path QoS Report Extendable / Table 7.4.5.1.6-1 */
10698/* 241 */ { dissect_pfcp_gtp_u_path_interface_type }, /* GTP-U Path Interface Type Extendable / Clause 8.2.166 */
10699/* 242 */ { dissect_pfcp_grouped_ie }, /* QoS Monitoring per QoS flow Control Information Extendable / Table 7.5.2.9-3 */
10700/* 243 */ { dissect_pfcp_requested_qos_monitoring }, /* Requested QoS Monitoring Extendable / Clause 8.2.167 */
10701/* 244 */ { dissect_pfcp_reporting_frequency }, /* Reporting Frequency Extendable / Clause 8.2.168 */
10702/* 245 */ { dissect_pfcp_packet_delay_thresholds }, /* Packet Delay Thresholds Extendable / Clause 8.2.169 */
10703/* 246 */ { dissect_pfcp_minimum_wait_time }, /* Minimum Wait Time Extendable / Clause 8.2.170 */
10704/* 247 */ { dissect_pfcp_grouped_ie }, /* QoS Monitoring Report Extendable / Table 7.5.8.6-3 */
10705/* 248 */ { dissect_pfcp_qos_monitoring_measurement }, /* QoS Monitoring Measurement Extendable / Clause 8.2.171 */
10706/* 249 */ { dissect_pfcp_mt_edt_control_information }, /* MT-EDT Control Information Extendable / Clause 8.2.172 */
10707/* 250 */ { dissect_pfcp_dl_data_packets_size }, /* DL Data Packets Size Extendable / Clause 8.2.173 */
10708/* 251 */ { dissect_pfcp_qer_control_indications }, /* QER Control Indications Extendable / Clause 8.2.174 */
10709/* 252 */ { dissect_pfcp_grouped_ie }, /* Packet Rate Status Report IE within PFCP Session Deletion Response Extendable / Table 7.5.7.1-2 */
10710/* 253 */ { dissect_pfcp_nf_instance_id }, /* NF Instance ID Extendable / Clause 8.2.175 */
10711/* 254 */ { dissect_pfcp_grouped_ie }, /* Ethernet Context Information within PFCP Session Modification Request Extendable / Table 7.5.4.21-1 */
10712/* 255 */ { dissect_pfcp_grouped_ie }, /* Redundant Transmission Detection Parameters Extendable / Table 7.5.2.2-5 */
10713/* 256 */ { dissect_pfcp_grouped_ie }, /* Updated PDR IE within PFCP Session Modification Response Extendable / Table 7.5.5.5-1 */
10714/* 257 */ { dissect_pfcp_s_nssai }, /* S-NSSAI Fixed Length / Clause 8.2.176 */
10715/* 258 */ { dissect_pfcp_ip_version }, /* IP version Extendable / Clause 8.2.177 */
10716/* 259 */ { dissect_pfcp_pfcpasreq_flags }, /* PFCPASReq-Flags Extendable / Clause 8.2.178 */
10717/* 260 */ { dissect_pfcp_data_status }, /* Data Status Extendable / Clause 8.2.179 */
10718/* 261 */ { dissect_pfcp_grouped_ie }, /* Provide RDS Configuration Information IE within PFCP Session Establishment Request Extendable / Table 7.5.2.11-1 */
10719/* 262 */ { dissect_pfcp_rds_configuration_information }, /* RDS Configuration Information Extendable / Clause 8.2.180 */
10720/* 263 */ { dissect_pfcp_grouped_ie }, /* Query Packet Rate Status IE within PFCP Session Modification Request Extendable / Table 7.5.4.22-1 */
10721/* 264 */ { dissect_pfcp_grouped_ie }, /* Query Packet Rate Status Report IE within PFCP Session Modification Response Extendable / Table 7.5.5.4-1 */
10722/* 265 */ { dissect_pfcp_multipath_application_indication }, /* Multipath Applicable Indication Extendable / Clause 8.2.181 */
10723/* 266 */ { dissect_pfcp_user_plane_node_management_information_container }, /* User Plane Node Management Information Container Variable Length / Clause 8.2.182 */
10724/* 267 */ { dissect_pfcp_grouped_ie }, /* UE IP Address Usage Information IE within PFCP Association Update Request Extendable / Table 7.4.4.3.1-1 */
10725/* 268 */ { dissect_pfcp_number_of_ue_ip_addresses }, /* Number of UE IP Addresses Variable Length / Clause 8.2.183 */
10726/* 269 */ { dissect_pfcp_validity_timer }, /* Validity Timer Variable Length / Clause 8.2.183 */
10727/* 270 */ { dissect_pfcp_grouped_ie }, /* Redundant Transmission Forward Parameters Variable Length / Clause 8.2.184 */
10728/* 271 */ { dissect_pfcp_grouped_ie }, /* Transport Delay Reporting IE in Create PDR IE Extendable / Table 7.5.2.2-6 */
10729/* 272 */ { dissect_pfcp_grouped_ie }, /* Partial Failure Information within PFCP Session Establishment Response Extendable / Table 7.5.3.1-2 */
10730/* 273 */ { dissect_pfcp_grouped_ie }, /* Partial Failure Information within PFCP Session Modification Response Extendable / Table 7.5.5.1-2 */
10731/* 274 */ { dissect_pfcp_offending_ie_information }, /* Offending IE Information Variable Length / Clause 8.2.185 */
10732/* 275 */ { dissect_pfcp_rattype }, /* RAT Type Variable Length / Clause 8.2.186 */
10733/* 276 */ { dissect_pfcp_grouped_ie }, /* L2TP Tunnel Information Extendable / Table 7.5.2.1-2 */
10734/* 277 */ { dissect_pfcp_grouped_ie }, /* L2TP Session Information within PFCP Session Establishment Request Extendable / Table 7.5.2.1-3 */
10735/* 278 */ { dissect_pfcp_l2tp_user_authentication }, /* L2TP User Authentication Variable Length / Clause 8.2.187 */
10736/* 279 */ { dissect_pfcp_grouped_ie }, /* L2TP Session Information within PFCP Session Establishment Response Extendable / Table 7.5.3.1-3 */
10737/* 280 */ { dissect_pfcp_lns_address }, /* LNS Address Variable Length / Clause 8.2.188 */
10738/* 281 */ { dissect_pfcp_tunnel_preference }, /* Tunnel Preference Fixed / Clause 8.2.189 */
10739/* 282 */ { dissect_pfcp_calling_number }, /* Calling Number Variable Length / Clause 8.2.190 */
10740/* 283 */ { dissect_pfcp_called_number }, /* Called Number Variable Length / Clause 8.2.191 */
10741/* 284 */ { dissect_pfcp_l2tp_session_indications }, /* L2TP Session Indications Extendable / Clause 8.2.192 */
10742/* 285 */ { dissect_pfcp_dns_sever_address }, /* DNS Server Address Variable Length / Clause 8.2.193 */
10743/* 286 */ { dissect_pfcp_nbns_sever_address }, /* NBNS Server Address Variable Length / Clause 8.2.194 */
10744/* 287 */ { dissect_pfcp_maximum_receive_unit }, /* Maximum Receive Unit Fixed / Clause 8.2.195 */
10745/* 288 */ { dissect_pfcp_thresholds }, /* Thresholds Variable Length / Clause 8.2.196 */
10746/* 289 */ { dissect_pfcp_steering_mode_indications }, /* Steering Mode Indicator Extendable / Clause 8.2.197 */
10747/* 290 */ { dissect_pfcp_grouped_ie }, /* PFCP Session Change Info Extendable / Table 7.4.7.1-2 */
10748/* 291 */ { dissect_pfcp_group_id }, /* Group ID Fixed / Clause 8.2.198 */
10749/* 292 */ { dissect_pfcp_cp_ip_address }, /* CP IP Address Variable Length / Clause 8.2.199 */
10750/* 293 */ { dissect_pfcp_ip_address_and_port_number_replacement }, /* IP Address and Port Number Replacement Variable Length / Clause 8.2.200 */
10751/* 294 */ { dissect_pfcp_dns_query_response_filter }, /* DNS Query/Response Filter Variable Length / Clause 8.2.201 */
10752/* 295 */ { dissect_pfcp_grouped_ie }, /* Direct Reporting Information Extendable / Table 7.5.2.9-4 */
10753/* 296 */ { dissect_pfcp_event_notification_uri }, /* Event Notification URI Variable Length / Clause 8.2.202 */
10754/* 297 */ { dissect_pfcp_notification_correlation_id }, /* Notification Correlation ID Fixed / Clause 8.2.203 */
10755/* 298 */ { dissect_pfcp_reporting_flags }, /* Reporting Flags Extendable / Clause 8.2.204 */
10756/* 299 */ { dissect_pfcp_predefined_rules_name }, /* Predefined Rules Name Variable Length / Clause 8.2.205 */
10757/* 300 */ { dissect_pfcp_grouped_ie }, /* MBS Session N4mb Control Information Extendable / Table 7.5.2.1-5 */
10758/* 301 */ { dissect_pfcp_grouped_ie }, /* MBS Multicast Parameters Extendable / Table 7.5.2.3-5 */
10759/* 302 */ { dissect_pfcp_grouped_ie }, /* Addd MBS Unicast Parameters IE in Create FAR Extendable / Table 7.5.2.3-6 */
10760/* 303 */ { dissect_pfcp_grouped_ie }, /* MBS Session N4mb Information Extendable / Table 7.5.3.1-4 */
10761/* 304 */ { dissect_pfcp_grouped_ie }, /* Remove MBS Unicast Parameters IE in Update FAR Extendable / Table 7.5.4.3-4 */
10762/* 305 */ { dissect_pfcp_mbs_session_identifier }, /* MBS Session Identifier Variable Length / Clause 8.2.206 */
10763/* 306 */ { dissect_pfcp_multicast_transport_information }, /* Multicast Transport Information Variable Length / Clause 8.2.207 */
10764/* 307 */ { dissect_pfcp_mbsn4mbreq_flags }, /* MBSN4mbReq Flags Extendable / Clause 8.2.208 */
10765/* 308 */ { dissect_pfcp_local_ingress_tunnel }, /* Local Ingress Tunnel Extendable / Clause 8.2.209 */
10766/* 309 */ { dissect_pfcp_mbs_unicast_parameters_id }, /* MBS Unicast Parameters ID Extendable / Clause 8.2.210 */
10767/* 310 */ { dissect_pfcp_grouped_ie }, /* MBS Session N4 Control Information IE within PFCP Session Establishment Request Extendable / Table 7.5.2.1-6 */
10768/* 311 */ { dissect_pfcp_grouped_ie }, /* MBS Session N4 Control Information IE within PFCP Session Establishment Response Extendable / Table 7.5.3.1-5 */
10769/* 312 */ { dissect_pfcp_mbsn4resp_flags }, /* MBSN4Resp-Flags Extendable / Clause 8.2.211 */
10770/* 313 */ { dissect_pfcp_tunnel_password }, /* Tunnel Password Variable Length / Clause 8.2.212 */
10771/* 314 */ { dissect_pfcp_area_session_id }, /* Area Session ID Fixed / Clause 8.2.213 */
10772/* 315 */ { dissect_pfcp_grouped_ie }, /* Peer UP Restart Report IE within PFCP Node Report Request Extendable / Table 7.4.5.1-7 */
10773/* 316 */ { dissect_pfcp_grouped_ie }, /* DSCP to PPI Control Information IE within PFCP Session Establishment Request Extendable / Table 7.5.2.1-6 */
10774/* 317 */ { dissect_pfcp_dscp_to_ppi_mapping_information }, /* DSCP to PPI Mapping Information Extendable / Clause 8.2.214 */
10775/* 318 */ { dissect_pfcp_pfcpsdrsp_flags }, /* PFCPSDRsp-Flags Extendable / Clause 8.2.215 */
10776/* 319 */ { dissect_pfcp_qer_indications }, /* QER Indications Extendable / Clause 8.2.216 */
10777/* 320 */ { dissect_pfcp_vendor_specific_node_report_type }, /* Vendor-Specific Node Report Type Extendable / Clause 8.2.217 */
10778/* 321 */ { dissect_pfcp_configured_time_domain }, /* Configured Time Domain Extendable / Clause 8.2.218 */
10779/* 322 */ { dissect_pfcp_metadata }, /* Metadata Variable Length / Clause 8.2.219 */
10780/* 323 */ { dissect_pfcp_grouped_ie }, /* Traffic Parameter Measurement Control Information Extendable / Table 7.5.2.9-5 */
10781/* 324 */ { dissect_pfcp_grouped_ie }, /* Traffic Parameter Measurement Report Extendable / Table 7.5.8.6-4 */
10782/* 325 */ { dissect_pfcp_traffic_parameter_threshold }, /* Traffic Parameter Threshold Extendable / Clause 8.2.220 */
10783/* 326 */ { dissect_pfcp_dl_periodicity }, /* DL Periodicity Extendable / Clause 8.2.221 */
10784/* 327 */ { dissect_pfcp_n6_jitter_measurement }, /* N6 Jitter Measurement Extendable / Clause 8.2.222 */
10785/* 328 */ { dissect_pfcp_traffic_parameter_measurement_indication }, /* Traffic Parameter Measurement Indication Extendable / Clause 8.2.223 */
10786/* 329 */ { dissect_pfcp_ul_periodicity }, /* UL Periodicity Extendable / Clause 8.2.224 */
10787/* 330 */ { dissect_pfcp_mpquic_control_information }, /* MPQUIC Control Information Extendable / Clause 8.2.225 */
10788/* 331 */ { dissect_pfcp_grouped_ie }, /* MPQUIC Parameters Extendable / Table 7.5.3.7-5 */
10789/* 332 */ { dissect_pfcp_mpquic_address_information }, /* MPQUIC Address Information Extendable / Clause 8.2.226 */
10790/* 333 */ { dissect_pfcp_transport_mode }, /* Transport Mode Extendable / Clause 8.2.227 */
10791/* 334 */ { dissect_pfcp_protocol_description }, /* Protocol Description Extendable / Table 7.5.2.2-7 */
10792/* 335 */ { dissect_pfcp_reporting_suggestion_info }, /* Reporting Suggestion Info Extendable / Clause 8.2.229 */
10793/* 336 */ { dissect_pfcp_tl_container }, /* TL-Container Variable Length / Clause 8.2.230 */
10794/* 337 */ { dissect_pfcp_measurement_indication }, /* Measurement Indication Extendable / Clause 8.2.231 */
10795/* 338 */ { dissect_pfcp_hplmn_s_nssai }, /* HPLMN S-NSSAI Fixed Length / Clause 8.2.232 */
10796/* 339 */ { dissect_pfcp_media_transport_protocol }, /* Media Transport Protocol Extendable / Clause 8.2.233 */
10797/* 340 */ { dissect_pfcp_grouped_ie }, /* RTP Header Extension Information Extendable / Table 7.5.2.2-8 */
10798/* 341 */ { dissect_pfcp_grouped_ie }, /* RTP Payload Information Extendable / Table 7.5.2.2-9 */
10799/* 342 */ { dissect_pfcp_rtp_header_extension_type }, /* RTP Header Extension Type Fixed Length / Clause 8.2.234 */
10800/* 343 */ { dissect_pfcp_rtp_header_extension_id }, /* RTP Header Extension ID Fixed Length / Clause 8.2.235 */
10801/* 344 */ { dissect_pfcp_rtp_payload_type }, /* RTP Payload Type Fixed Length / Clause 8.2.236 */
10802/* 345 */ { dissect_pfcp_rtp_payload_format }, /* RTP Payload Format Fixed Length / Clause 8.2.237 */
10803/* 346 */ { dissect_pfcp_extended_dl_buffering_notification_policy }, /* Extended DL Buffering Notification Policy Extendable / Clause 8.2.238 */
10804/* 347 */ { dissect_pfcp_mt_sdt_control_information }, /* MT-SDT Control Information Extendable / Clause 8.2.239 */
10805/* 348 */ { dissect_pfcp_reporting_thresholds }, /* Reporting Thresholds Extendable / Clause 8.2.240 */
10806/* 349 */ { dissect_pfcp_rtp_header_extension_additional_information }, /* RTP Header Extension Additional Information Extendable / Clause 8.2.241 */
10807/* 350 */ { dissect_pfcp_mapped_n6_ip_address }, /* Mapped N6 IP Address Extendable / Clause 8.2.242 */
10808/* 351 */ { dissect_pfcp_n6_routing_information }, /* N6 Routing Information Extendable / Clause 8.2.243 */
10809//352 to 32767 Spare. For future use.
10810//32768 to 65535 Vendor-specific IEs.
10811 { NULL((void*)0) }, /* End of List */
10812};
10813
10814#define NUM_PFCP_IES(sizeof (pfcp_ies) / sizeof (pfcp_ies)[0]) array_length(pfcp_ies)(sizeof (pfcp_ies) / sizeof (pfcp_ies)[0])
10815/* Set up the array to hold "etts" for each IE*/
10816int ett_pfcp_elem[NUM_PFCP_IES(sizeof (pfcp_ies) / sizeof (pfcp_ies)[0])-1];
10817
10818typedef struct pfcp_generic_ie {
10819 uint16_t enterprise_id; // 0 for non-vendor-IE
10820 uint16_t ie_type;
10821 const char* name;
10822 dissector_t dissector;
10823 int ett;
10824} pfcp_generic_ie_t;
10825
10826static int
10827dissect_pfcp_unknown_enterprise_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
10828{
10829 proto_tree_add_item(tree, hf_pfcp_enterprise_data, tvb, 0, -1, ENC_NA0x00000000);
10830 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_not_decoded_null, tvb, 0, -1);
10831
10832 return tvb_reported_length(tvb);
10833}
10834
10835// Generic-IE dissector which wraps the actual data-dissector and which overwrites the
10836// default tree-type and tree-text.
10837static int
10838dissect_pfcp_generic_ie_cb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data, void *cb)
10839{
10840 const pfcp_generic_ie_t* ie_info = cb;
10841 proto_item* item = proto_tree_get_parent(tree);
10842
10843 // Overwrite the generic-IE subtree with our per-IE subtree
10844 if (ie_info->ett != -1) {
10845 tree = proto_item_add_subtree(item, ie_info->ett);
10846 }
10847
10848 // Overwrite generic text with per-IE text
10849 if (ie_info->name != NULL((void*)0)) {
10850 if (ie_info->enterprise_id == 0) {
10851 proto_item_set_text(item, "%s", ie_info->name);
10852 } else {
10853 const char* enterprise_name = try_enterprises_lookup(ie_info->enterprise_id);
10854 if (enterprise_name != NULL((void*)0)) {
10855 proto_item_set_text(item, "%s (%s)", ie_info->name, enterprise_name);
10856 } else {
10857 proto_item_set_text(item, "%s (Unknown enterprise %u)", ie_info->name, ie_info->enterprise_id);
10858 }
10859 }
10860 }
10861
10862 // Run dissector
10863 return ie_info->dissector(tvb, pinfo, tree, data);
10864}
10865
10866static int
10867dissect_pfcp_generic_enterprise_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data, void *cb)
10868{
10869 // Add a subtree, using the generic IE ett.
10870 // A per-IE subdissector can later overwrite this ett to have an ett per IE.
10871 proto_item* item;
10872 tree = proto_tree_add_subtree(tree, tvb, 0, -1, ett_pfcp_unknown_enterprise_ie, &item, NULL((void*)0));
10873
10874 // Add the generic header.
10875 uint32_t ie_type, ie_len, enterprise_id;
10876 proto_tree_add_item_ret_uint(tree, hf_pfcp2_enterprise_ie, tvb, 0, 2, ENC_BIG_ENDIAN0x00000000, &ie_type);
10877 proto_tree_add_item_ret_uint(tree, hf_pfcp2_ie_len, tvb, 2, 2, ENC_BIG_ENDIAN0x00000000, &ie_len);
10878 proto_tree_add_item_ret_uint(tree, hf_pfcp_enterprise_id, tvb, 4, 2, ENC_BIG_ENDIAN0x00000000, &enterprise_id);
10879
10880 // Item text
10881 const char* enterprise_name = try_enterprises_lookup(enterprise_id);
10882 if (enterprise_name != NULL((void*)0)) {
10883 proto_item_set_text(item, "Unknown IE %u (%s)", ie_type, enterprise_name);
10884 } else {
10885 proto_item_set_text(item, "Unknown IE %u (Unknown enterprise %u)", ie_type, enterprise_id);
10886 }
10887
10888 // Length field is already checked to be big enough by accessing tvb[4:6].
10889 // This tvb was created with length derived from the length-field.
10890 DISSECTOR_ASSERT(ie_len >= 2)((void) ((ie_len >= 2) ? (void)0 : (proto_report_dissector_bug
("%s:%u: failed assertion \"%s\"", "epan/dissectors/packet-pfcp.c"
, 10890, "ie_len >= 2"))))
;
10891 const unsigned data_len = ie_len - 2;
10892 if (data_len == 0)
10893 {
10894 /*
10895 * 5.6.3 Modifying the Rules of an Existing PFCP Session
10896 *
10897 * Updating the Rule including the IEs to be removed with a null length,
10898 * e.g. by including the Update URR IE in the PFCP Session Modification Request
10899 * with the IE(s) to be removed with a null length.
10900 */
10901 proto_item_append_text(item, " [IE to be removed]");
10902 } else {
10903 // Run the specific IE-dissector only on the "body" of the IE.
10904 tvbuff_t* data_tvb = tvb_new_subset_length(tvb, 6, data_len);
10905
10906 dissector_table_t ie_table = cb;
10907 int offset = 0;
10908 if (ie_table == NULL((void*)0))
10909 {
10910 // No IE-table is given so no specific decoding can be performed
10911 offset = dissect_pfcp_unknown_enterprise_ie(data_tvb, pinfo, tree, data);
10912 } else {
10913 // A dissector-table is provided from which an IE-specific dissector can be looked up
10914 offset = dissector_try_uint_with_data(ie_table, ie_type, data_tvb, pinfo, tree, false0, data);
10915
10916 // Fallback to unknown-ie dissector
10917 if (offset == 0) {
10918 offset = dissect_pfcp_unknown_enterprise_ie(data_tvb, pinfo, tree, data);
10919 }
10920 }
10921
10922 // If not all data from the IE is decoded (possible when IE has been extended since last update of dissector),
10923 // add an expert-info warning about the undecoded data.
10924 if (offset < 0 || (unsigned) offset < data_len)
10925 {
10926 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, data_tvb, offset, -1);
10927 }
10928 }
10929
10930 return tvb_reported_length(tvb);
10931}
10932
10933static void pfcp_register_generic_ie_dissector(uint16_t enterprise_id, const char* dissector_name, const char* table_name, const char* ui_name, pfcp_generic_ie_t* ies, unsigned num_ies)
10934{
10935 // Register a tree-type for each IE and store it in the ie-struct
10936 int** ie_refs = (int** )wmem_alloc(wmem_epan_scope(), (sizeof(int*) * num_ies));
10937 for (unsigned i = 0; i < num_ies; i++) {
10938 ies[i].ett = -1;
10939 ie_refs[i] = &ies[i].ett;
10940 }
10941 proto_register_subtree_array(ie_refs, num_ies);
10942
10943 // Create a table that will contain all IEs for this vendor
10944 dissector_table_t table = register_dissector_table(table_name, ui_name, proto_pfcp, FT_UINT16, BASE_DEC);
10945
10946 // Register a dissector per IE-type
10947 for (unsigned i = 0; i < num_ies; i++) {
10948 dissector_add_uint(table_name, ies[i].ie_type, create_dissector_handle_with_data(dissect_pfcp_generic_ie_cb, -1, &ies[i]));
10949 }
10950
10951 // Register a dissector using the generic enterprise-dissector
10952 dissector_handle_t handle = register_dissector_with_data(dissector_name, dissect_pfcp_generic_enterprise_ie, proto_pfcp, table);
10953 dissector_add_uint("pfcp.enterprise_ies", enterprise_id, handle);
10954}
10955
10956static void
10957dissect_pfcp_ies_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, int offset, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
10958{
10959 proto_tree *ie_tree;
10960 proto_item *ti;
10961 tvbuff_t *ie_tvb;
10962 uint16_t type, length_ie;
10963 uint16_t enterprise_id;
10964 pfcp_sub_dis_t *pfcp_sub_dis_inf = wmem_new0(pinfo->pool, pfcp_sub_dis_t)((pfcp_sub_dis_t*)wmem_alloc0((pinfo->pool), sizeof(pfcp_sub_dis_t
)))
;
10965
10966 pfcp_sub_dis_inf->message_type = message_type;
10967 pfcp_sub_dis_inf->args = args;
10968
10969 /* 8.1.1 Information Element Format */
10970 /*
10971 Octets 8 7 6 5 4 3 2 1
10972 1 to 2 Type = xxx (decimal)
10973 3 to 4 Length = n
10974 p to (p+1) Enterprise ID
10975 k to (n+4) IE specific data or content of a grouped IE
10976
10977 If the Bit 8 of Octet 1 is not set, this indicates that the IE is defined by 3GPP and the Enterprise ID is absent.
10978 If Bit 8 of Octet 1 is set, this indicates that the IE is defined by a vendor and the Enterprise ID is present
10979 identified by the Enterprise ID
10980 */
10981
10982 /*Enterprise ID : if the IE type value is within the range of 32768 to 65535,
10983 * this field shall contain the IANA - assigned "SMI Network Management Private Enterprise Codes"
10984 * value of the vendor defining the IE.
10985 */
10986 /* Length: this field contains the length of the IE excluding the first four octets, which are common for all IEs */
10987
10988 /* Process the IEs*/
10989 while (offset < length) {
10990 /* Octet 1 -2 */
10991 type = tvb_get_ntohs(tvb, offset);
10992 length_ie = tvb_get_ntohs(tvb, offset + 2);
10993
10994 if ((type & 0x8000) == 0x8000 ) {
10995 enterprise_id = tvb_get_ntohs(tvb, offset + 4);
10996 ie_tvb = tvb_new_subset_length(tvb, offset, length_ie + 4);
10997
10998 // Find a per-vendor dissector or fallback to the generic-enterprise-dissector without IE-table.
10999 if (!dissector_try_uint_with_data(pfcp_enterprise_ies_dissector_table, enterprise_id, ie_tvb, pinfo, tree, false0, pfcp_sub_dis_inf)) {
11000 dissect_pfcp_generic_enterprise_ie(ie_tvb, pinfo, tree, pfcp_sub_dis_inf, NULL((void*)0));
11001 }
11002 offset += (4 + length_ie);
11003 } else {
11004 int tmp_ett;
11005 if (type < (NUM_PFCP_IES(sizeof (pfcp_ies) / sizeof (pfcp_ies)[0]) - 1)) {
11006 tmp_ett = ett_pfcp_elem[type];
11007 } else {
11008 tmp_ett = ett_pfcp_ie;
11009 }
11010 ie_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 + length_ie, tmp_ett, &ti, "%s : ",
11011 val_to_str_ext_const(type, &pfcp_ie_type_ext, "Unknown"));
11012
11013 proto_tree_add_item(ie_tree, hf_pfcp2_ie, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11014 offset += 2;
11015 proto_tree_add_item(ie_tree, hf_pfcp2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11016 offset += 2;
11017
11018 /*
11019 * 5.6.3 Modifying the Rules of an Existing PFCP Session
11020 *
11021 * Updating the Rule including the IEs to be removed with a null length,
11022 * e.g. by including the Update URR IE in the PFCP Session Modification Request
11023 * with the IE(s) to be removed with a null length.
11024 */
11025 if( length_ie == 0 ) {
11026 proto_item_append_text(ti, "[IE to be removed]");
11027 } else {
11028 if (type < (NUM_PFCP_IES(sizeof (pfcp_ies) / sizeof (pfcp_ies)[0]) -1)) {
11029 ie_tvb = tvb_new_subset_length(tvb, offset, length_ie);
11030 if(pfcp_ies[type].decode){
11031 (*pfcp_ies[type].decode) (ie_tvb, pinfo, ie_tree, ti, length_ie, message_type, args);
11032 } else {
11033 /* NULL function pointer, we have no decoding function*/
11034 proto_tree_add_expert(ie_tree, pinfo, &ei_pfcp_ie_not_decoded_null, tvb, offset, length_ie);
11035 }
11036 } else {
11037 /* IE id outside of array, We have no decoding function for it */
11038 proto_tree_add_expert(ie_tree, pinfo, &ei_pfcp_ie_not_decoded_too_large, tvb, offset, length_ie);
11039 }
11040 }
11041 offset += length_ie;
11042 }
11043 }
11044}
11045
11046static int
11047dissect_pfcp_message(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
11048{
11049 proto_item *item;
11050 proto_tree *sub_tree;
11051 int offset = 0;
11052 uint64_t pfcp_flags;
11053 uint8_t message_type, cause_aux;
11054 uint32_t length;
11055 uint32_t length_total;
11056 int seq_no = 0;
11057 conversation_t *conversation;
11058 pfcp_conv_info_t *pfcp_info;
11059 pfcp_session_args_t *args = NULL((void*)0);
11060 pfcp_msg_hash_t *pcrp = NULL((void*)0);
11061 pfcp_hdr_t *pfcp_hdr = NULL((void*)0);
11062
11063 static int * const pfcp_hdr_flags[] = {
11064 &hf_pfcp_version,
11065 &hf_pfcp_spare_b4,
11066 &hf_pfcp_spare_b3,
11067 &hf_pfcp_fo_flag,
11068 &hf_pfcp_mp_flag,
11069 &hf_pfcp_s_flag,
11070 NULL((void*)0)
11071 };
11072
11073 pfcp_hdr = wmem_new0(pinfo->pool, pfcp_hdr_t)((pfcp_hdr_t*)wmem_alloc0((pinfo->pool), sizeof(pfcp_hdr_t
)))
;
11074
11075 /* Setting the SEID to -1 to say that the SEID is not valid for this packet */
11076 pfcp_hdr->seid = -1;
11077
11078 col_set_str(pinfo->cinfo, COL_PROTOCOL, "PFCP");
11079 col_clear(pinfo->cinfo, COL_INFO);
11080
11081 message_type = tvb_get_uint8(tvb, 1);
11082 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_ext_const(message_type, &pfcp_message_type_ext, "Unknown"));
11083
11084 args = wmem_new0(pinfo->pool, pfcp_session_args_t)((pfcp_session_args_t*)wmem_alloc0((pinfo->pool), sizeof(pfcp_session_args_t
)))
;
11085 args->last_cause = 1; /* It stores the last cause decoded. Cause accepted by default */
11086 if (g_pfcp_session) {
11087 /* We create the auxiliary lists */
11088 args->seid_list = wmem_list_new(pinfo->pool);
11089 args->ip_list = wmem_list_new(pinfo->pool);
11090 }
11091
11092 /* Do we have a conversation for this connection? */
11093 conversation = find_or_create_conversation(pinfo);
11094
11095 /* Do we already know this conversation? */
11096 pfcp_info = (pfcp_conv_info_t *)conversation_get_proto_data(conversation, proto_pfcp);
11097 if (pfcp_info == NULL((void*)0)) {
11098 /* No. Attach that information to the conversation,
11099 * and add it to the list of information structures.
11100 */
11101 pfcp_info = wmem_new(wmem_file_scope(), pfcp_conv_info_t)((pfcp_conv_info_t*)wmem_alloc((wmem_file_scope()), sizeof(pfcp_conv_info_t
)))
;
11102 /* Request/response matching tables */
11103 pfcp_info->matched = wmem_map_new(wmem_file_scope(), pfcp_sn_hash, pfcp_sn_equal_matched);
11104 pfcp_info->unmatched = wmem_map_new(wmem_file_scope(), pfcp_sn_hash, pfcp_sn_equal_unmatched);
11105
11106 conversation_add_proto_data(conversation, proto_pfcp, pfcp_info);
11107 }
11108
11109 item = proto_tree_add_item(tree, proto_pfcp, tvb, 0, -1, ENC_NA0x00000000);
11110 sub_tree = proto_item_add_subtree(item, ett_pfcp);
11111
11112 /* 7.2.2 Message Header */
11113 /*
11114 Octet 8 7 6 5 4 3 2 1
11115 1 | Version |Spare|Spare| FO | MP | S |
11116 2 | Message Type |
11117 3 | Message Length (1st Octet) |
11118 4 | Message Length (2nd Octet) |
11119 m to | If S flag is set to 1, then SEID shall be |
11120 k(m+7) | placed into octets 5-12. Otherwise, SEID field |
11121 | is not present at all. |
11122 n to | Sequence Number |
11123 (n+2) | |
11124 (n+3) | Spare |
11125
11126 */
11127 /* Octet 1 */
11128 proto_tree_add_bitmask_with_flags_ret_uint64(sub_tree, tvb, offset, hf_pfcp_hdr_flags,
11129 ett_pfcp_flags, pfcp_hdr_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02, &pfcp_flags);
11130 offset += 1;
11131
11132 /* Octet 2 Message Type */
11133 pfcp_hdr->message = tvb_get_uint8(tvb, offset);
11134 proto_tree_add_uint(sub_tree, hf_pfcp_msg_type, tvb, offset, 1, pfcp_hdr->message);
11135 offset += 1;
11136
11137 /* Octet 3 - 4 Message Length */
11138 proto_tree_add_item_ret_uint(sub_tree, hf_pfcp_msg_length, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &length);
11139 offset += 2;
11140
11141 /* length of the message in octets plus the excluded mandatory part of the PFCP header (the first 4 octets) */
11142 length_total = (length + 4);
11143
11144 if ((pfcp_flags & 0x1) == 1) {
11145 /* If S flag is set to 1, then SEID shall be placed into octets 5-12*/
11146 /* Session Endpoint Identifier 8 Octets */
11147 pfcp_hdr->seid = tvb_get_ntohi64(tvb, offset);
11148 proto_tree_add_uint64(sub_tree, hf_pfcp_seid, tvb, offset, 8, pfcp_hdr->seid);
11149 offset += 8;
11150 }
11151 /* 7.2.2.2 PFCP Header for Node Related Messages */
11152 /*
11153 Octet 8 7 6 5 4 3 2 1
11154 1 | Version |Spare|Spare| FO=0 | MP=0 | S=0 |
11155 2 | Message Type |
11156 3 | Message Length (1st Octet) |
11157 4 | Message Length (2nd Octet) |
11158 5 | Sequence Number (1st Octet) |
11159 6 | Sequence Number (2st Octet) |
11160 7 | Sequence Number (3st Octet) |
11161 8 | Spare |
11162 */
11163 proto_tree_add_item_ret_uint(sub_tree, hf_pfcp_seqno, tvb, offset, 3, ENC_BIG_ENDIAN0x00000000, &seq_no);
11164 offset += 3;
11165
11166 if ((pfcp_flags & 0x2) == 0x2) {
11167 /* If the "MP" flag is set to "1", then bits 8 to 5 of octet 16 shall indicate the message priority.*/
11168 proto_tree_add_item(sub_tree, hf_pfcp_mp, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
11169 proto_tree_add_item(sub_tree, hf_pfcp_spare_h0, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
11170 } else {
11171 proto_tree_add_item(sub_tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
11172 }
11173 offset++;
11174
11175 /* Dissect the IEs in the message */
11176 dissect_pfcp_ies_common(tvb, pinfo, sub_tree, offset, length_total, message_type, args);
11177
11178 /* Use sequence number to track Req/Resp pairs */
11179 cause_aux = 16; /* Cause accepted by default. Only used when no session tracking enabled */
11180 if (g_pfcp_session && !PINFO_FD_VISITED(pinfo)((pinfo)->fd->visited)) {
11181 /* We insert the lists inside the table*/
11182 pfcp_fill_map(args->seid_list, args->ip_list, pinfo->num);
11183 cause_aux = args->last_cause;
11184 }
11185 pcrp = pfcp_match_response(tvb, pinfo, sub_tree, seq_no, message_type, pfcp_info, cause_aux);
11186 if (pcrp) {
11187 tap_queue_packet(pfcp_tap, pinfo, pcrp);
11188 }
11189 if (g_pfcp_session) {
11190 pfcp_track_session(tvb, pinfo, sub_tree, pfcp_hdr, args->seid_list, args->ip_list, args->last_seid, args->last_ip);
11191 }
11192
11193 return length_total;
11194}
11195
11196static int
11197dissect_pfcp(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void *data _U___attribute__((unused)))
11198{
11199 int offset = 0;
11200 unsigned length = tvb_reported_length(tvb);
11201
11202 /* 7.2.1A PFCP messages bundled in one UDP/IP packet */
11203 /* Each bundled PFCP message shall contain its PFCP message header and may */
11204 /* contain subsequent information element(s) dependent on the type of message. */
11205 do
11206 {
11207 /* The first octet of header, Bit 3 represents the "FO" (Follow On) flag. */
11208 /* If the "FO" flag is set to "1", then another PFCP message follows in the UDP/IP packet */
11209 bool_Bool follow_on = (tvb_get_uint8(tvb, offset) & 0x04);
11210
11211 /* length of the message in octets plus the excluded mandatory part of the PFCP header (the first 4 octets) */
11212 uint16_t message_length = (tvb_get_uint16(tvb, (offset + 2), 0) + 4);
11213
11214 tvbuff_t *message_tvb = tvb_new_subset_length(tvb, offset, message_length);
11215 offset += dissect_pfcp_message(message_tvb, pinfo, tree);
11216
11217 /* Lets warn of faulty FO flag */
11218 if (follow_on) {
11219 if ((length - offset) == 0) {
11220 proto_tree_add_expert_format(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, -1, "Follow ON flag set but no data left for following message");
11221 }
11222 } else {
11223 if ((length - offset) > 0) {
11224 proto_tree_add_expert_format(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, -1, "Data left for following message but Follow ON flag is not set");
11225 }
11226 }
11227 } while (length > (unsigned)offset);
11228
11229 return length;
11230}
11231
11232/* Enterprise IE decoding Broadband Forum
11233 *
11234 * TR-459: Control and User Plane Separation for a disaggregated BNG
11235 */
11236
11237/*
11238 * TR-459: 6.6.1 BBF UP Function Features
11239 * TR-459.2: 6.5.1 BBF UP Function Features
11240 * TR-459.3: Table 1: BBF UP Function Features for Multicast
11241 */
11242static int
11243dissect_pfcp_enterprise_bbf_up_function_features(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11244{
11245 int offset = 0;
11246
11247 static int * const pfcp_bbf_up_function_features_o7_flags[] = {
11248 &hf_pfcp_bbf_up_function_features_o7_b7_nat_up,
11249 &hf_pfcp_bbf_up_function_features_o7_b6_nat_cp,
11250 &hf_pfcp_bbf_up_function_features_o7_b5_iptv,
11251 &hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload,
11252 &hf_pfcp_bbf_up_function_features_o7_b3_lns,
11253 &hf_pfcp_bbf_up_function_features_o7_b2_lac,
11254 &hf_pfcp_bbf_up_function_features_o7_b1_ipoe,
11255 &hf_pfcp_bbf_up_function_features_o7_b0_pppoe,
11256 NULL((void*)0)
11257 };
11258
11259 // Octet 8 Spare Octet
11260 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
11261 offset += 1;
11262
11263 // Octet 9 Spare Octet
11264 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
11265 offset += 1;
11266
11267 // Octet 10 Spare Octet
11268 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
11269 offset += 1;
11270
11271 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_up_function_features_o7_flags, ENC_BIG_ENDIAN0x00000000);
11272 offset += 1;
11273
11274 return offset;
11275}
11276
11277/*
11278 * TR-459: 6.6.2 Logical Port
11279 */
11280static int
11281dissect_pfcp_enterprise_bbf_logical_port(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
11282{
11283 /* Octet 7 to (n+4) logical-port-id */
11284 if (tvb_ascii_isprint(tvb, 0, -1))
11285 {
11286 const uint8_t* string_value;
11287 proto_tree_add_item_ret_string(tree, hf_pfcp_bbf_logical_port_id_str, tvb, 0, -1, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
11288 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
11289 }
11290 else
11291 {
11292 proto_tree_add_item(tree, hf_pfcp_bbf_logical_port_id, tvb, 0, -1, ENC_NA0x00000000);
11293 }
11294
11295 return tvb_reported_length(tvb);
11296}
11297
11298/*
11299 * TR-459i2: 6.9.3 BBF Outer Header Creation
11300 */
11301static int
11302dissect_pfcp_enterprise_bbf_outer_header_creation(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11303{
11304 int offset = 0;
11305 uint64_t value;
11306
11307 static int * const outer_hdr_desc[] = {
11308 &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b4_ppp,
11309 &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b3_l2tp,
11310 &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b2_traffic_endpoint,
11311 &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b1_crp_nsh,
11312 &hf_pfcp_bbf_outer_hdr_creation_desc_spare,
11313 NULL((void*)0)
11314 };
11315
11316 /* Octet 7-8 Outer Header Creation Description */
11317 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 2, outer_hdr_desc, ENC_BIG_ENDIAN0x00000000, &value);
11318 offset += 2;
11319
11320 if ((value & 0x0400) != 0) {
11321 /* Octet 9 to 10 Tunnel ID */
11322 proto_tree_add_item(tree, hf_pfcp_bbf_outer_hdr_creation_tunnel_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11323 offset += 2;
11324
11325 /* Octet 10 to 11 Session ID */
11326 proto_tree_add_item(tree, hf_pfcp_bbf_outer_hdr_creation_session_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11327 offset += 2;
11328 }
11329
11330 return offset;
11331}
11332
11333/*
11334 * TR-459: 6.6.4 BBF Outer Header Removal
11335 */
11336
11337static const value_string pfcp_bbf_out_hdr_desc_vals[] = {
11338 { 1, "Ethernet " },
11339 { 2, "PPPoE/Ethernet " },
11340 { 3, "PPP/PPPoE/Ethernet " },
11341 { 4, "L2TP " },
11342 { 5, "PPP/L2TP " },
11343 { 0, NULL((void*)0) }
11344};
11345
11346static int
11347dissect_pfcp_enterprise_bbf_outer_header_removal(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11348{
11349 int offset = 0;
11350 uint32_t value;
11351
11352 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_out_hdr_desc, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
11353 offset++;
11354 proto_item_append_text(proto_tree_get_parent(tree), "%s", val_to_str_const(value, pfcp_bbf_out_hdr_desc_vals, "Unknown"));
11355
11356 return offset;
11357}
11358
11359/*
11360 * TR-459: 6.6.5 PPPoE Session ID
11361 */
11362static int
11363dissect_pfcp_enterprise_bbf_pppoe_session_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11364{
11365 int offset = 0;
11366 uint32_t value;
11367
11368 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_pppoe_session_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &value);
11369 offset += 2;
11370 proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
11371
11372 return offset;
11373}
11374
11375/*
11376 * TR-459: 6.6.6 PPP Protocol
11377 */
11378static int
11379dissect_pfcp_enterprise_bbf_ppp_protocol(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11380{
11381 int offset = 0;
11382 uint64_t bbf_ppp_flags_val;
11383
11384 static int * const pfcp_bbf_ppp_protocol_flags[] = {
11385 &hf_pfcp_spare_b7_b3,
11386 &hf_pfcp_bbf_ppp_protocol_b2_control,
11387 &hf_pfcp_bbf_ppp_protocol_b1_data,
11388 &hf_pfcp_bbf_ppp_protocol_b0_specific,
11389 NULL((void*)0)
11390 };
11391 /* Octet 5 control data specific D */
11392 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_bbf_ppp_protocol_flags,
11393 ett_pfcp_bbf_ppp_protocol_flags, pfcp_bbf_ppp_protocol_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02 | BMT_NO_TFS0x08, &bbf_ppp_flags_val);
11394 offset += 1;
11395
11396 if ((bbf_ppp_flags_val & 0x01) == 1)
11397 {
11398 /* Octet 8 and 9 protocol */
11399 proto_tree_add_item(tree, hf_pfcp_bbf_ppp_protocol, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11400 offset += 2;
11401 }
11402
11403 return offset;
11404}
11405
11406/*
11407 * TR-459: 6.6.7 Verification Timers
11408 */
11409static int
11410dissect_pfcp_enterprise_bbf_verification_timers(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11411{
11412 int offset = 0;
11413
11414 proto_tree_add_item(tree, hf_pfcp_bbf_verification_timer_interval, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11415 offset += 2;
11416
11417 proto_tree_add_item(tree, hf_pfcp_bbf_verification_timer_count, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
11418 offset += 1;
11419
11420 return offset;
11421}
11422
11423/*
11424 * TR-459: 6.6.8 LCP Magic Number
11425 */
11426static int
11427dissect_pfcp_enterprise_bbf_ppp_lcp_magic_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11428{
11429 int offset = 0;
11430
11431 proto_tree_add_item(tree, hf_pfcp_bbf_ppp_lcp_magic_number_tx, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
11432 offset += 4;
11433
11434 proto_tree_add_item(tree, hf_pfcp_bbf_ppp_lcp_magic_number_rx, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
11435 offset += 4;
11436
11437 return offset;
11438}
11439
11440/*
11441 * TR-459: 6.6.9 MTU
11442 */
11443static int
11444dissect_pfcp_enterprise_bbf_mtu(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11445{
11446 int offset = 0;
11447 uint32_t value;
11448
11449 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_mtu, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &value);
11450 offset += 2;
11451 proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
11452
11453 return offset;
11454}
11455
11456/*
11457 * TR-459: 6.6.10 L2TP Tunnel Endpoint
11458 */
11459static int
11460dissect_pfcp_enterprise_bbf_l2tp_tunnel_endpoint(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11461{
11462 int offset = 0;
11463 uint64_t bbf_l2tp_endp_flags_val;
11464
11465 static int * const pfcp_bbf_l2tp_endp_flags[] = {
11466 &hf_pfcp_spare_b7_b3,
11467 &hf_pfcp_bbf_l2tp_endp_flags_b2_ch,
11468 &hf_pfcp_bbf_l2tp_endp_flags_b1_v6,
11469 &hf_pfcp_bbf_l2tp_endp_flags_b0_v4,
11470 NULL((void*)0)
11471 };
11472 /* Octet 5 CH v4 v6 */
11473 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_bbf_l2tp_endp_flags,
11474 ett_pfcp_bbf_l2tp_endp_flags, pfcp_bbf_l2tp_endp_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02 | BMT_NO_TFS0x08, &bbf_l2tp_endp_flags_val);
11475 offset += 1;
11476
11477 proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_tunnel_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11478 offset += 2;
11479
11480 proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
11481 offset += 4;
11482
11483 proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_ipv6, tvb, offset, 16, ENC_NA0x00000000);
11484 offset += 16;
11485
11486 return offset;
11487}
11488
11489/*
11490 * TR-459: 6.6.11 L2TP Session ID
11491 */
11492static int
11493dissect_pfcp_enterprise_bbf_l2tp_session_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11494{
11495 int offset = 0;
11496 uint32_t value;
11497
11498 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_l2tp_session_id, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &value);
11499 offset += 2;
11500 proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
11501
11502 return offset;
11503}
11504
11505
11506/*
11507 * TR-459: 6.6.12 L2TP Type
11508 */
11509
11510static const true_false_string pfcp_bbf_l2tp_type_b0_t_tfs = {
11511 "control",
11512 "data"
11513};
11514
11515static int
11516dissect_pfcp_enterprise_bbf_l2tp_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11517{
11518 int offset = 0;
11519
11520 static int * const pfcp_bbf_l2tp_type_flags[] = {
11521 &hf_pfcp_spare_b7_b1,
11522 &hf_pfcp_bbf_l2tp_type_flags_b0_t,
11523 NULL((void*)0)
11524 };
11525 /* Octet 7 T */
11526 proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_pfcp_bbf_l2tp_type_flags,
11527 ett_pfcp_bbf_l2tp_type_flags, pfcp_bbf_l2tp_type_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02 | BMT_NO_TFS0x08);
11528 offset += 1;
11529
11530 return offset;
11531}
11532
11533/*
11534 * TR-459.3: Figure 6: BBF Multicast Flags Information Element
11535 */
11536static int
11537dissect_pfcp_enterprise_bbf_multicast_flags(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11538{
11539 int offset = 0;
11540
11541 static int * const pfcp_bbf_multicast_flags[] = {
11542 &hf_pfcp_spare_b7_b2,
11543 &hf_pfcp_bbf_multicast_flags_o7_b1_routeralertoff,
11544 &hf_pfcp_bbf_multicast_flags_o7_b0_fastleave,
11545 NULL((void*)0)
11546 };
11547
11548 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_multicast_flags, ENC_BIG_ENDIAN0x00000000);
11549 offset += 1;
11550
11551 return offset;
11552}
11553
11554/*
11555 * TR-459.3: Figure 7: BBF Multicast Query Parameters Information Element
11556 */
11557static int
11558dissect_pfcp_enterprise_bbf_multicast_query_parameters(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11559{
11560 int offset = 0;
11561
11562 proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_robustness, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000);
11563 offset += 1;
11564
11565 proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_query_interval, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11566 offset += 2;
11567
11568 proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_query_response_interval, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11569 offset += 2;
11570
11571 proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_group_query_interval, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000);
11572 offset += 2;
11573
11574 return offset;
11575}
11576
11577/*
11578 * TR-459.3: Figure 8: BBF Multicast Group Limit Information Element
11579 */
11580static int
11581dissect_pfcp_enterprise_bbf_multicast_group_limit(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11582{
11583 int offset = 0;
11584 uint32_t value;
11585
11586 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_multicast_group_limit_max_joins, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &value);
11587 offset += 2;
11588 proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
11589
11590 return offset;
11591}
11592
11593/*
11594 * TR-459.2: 6.5.5 BBF Apply Action IE
11595 */
11596static int
11597dissect_pfcp_enterprise_bbf_apply_action(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11598{
11599 int offset = 0;
11600
11601 static int * const pfcp_bbf_apply_action_flags[] = {
11602 &hf_pfcp_spare_b7_b1,
11603 &hf_pfcp_bbf_apply_action_flags_b0_nat,
11604 NULL((void*)0)
11605 };
11606
11607 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_apply_action_flags, ENC_BIG_ENDIAN0x00000000);
11608 offset += 1;
11609
11610 return offset;
11611}
11612
11613/*
11614 * TR-459.2: 6.5.6 BBF NAT External Port Range
11615 */
11616static int
11617dissect_pfcp_enterprise_bbf_nat_external_port_range(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11618{
11619 int offset = 0;
11620 uint32_t start, end;
11621
11622 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_nat_external_port_range_start, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &start);
11623 offset += 2;
11624
11625 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_nat_external_port_range_end, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &end);
11626 offset += 2;
11627
11628 proto_item_append_text(proto_tree_get_parent(tree), ": %u:%u", start, end);
11629
11630 return offset;
11631}
11632
11633/*
11634 * TR-459.2: 6.5.7 BBF NAT port forward
11635 */
11636static int
11637dissect_pfcp_enterprise_bbf_nat_port_forward(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
11638{
11639 int offset = 0;
11640 unsigned length = tvb_reported_length(tvb);
11641
11642 while ((unsigned)offset < length) {
11643 uint32_t in, out, protocol;
11644 proto_item *li;
11645 proto_tree *lt;
11646
11647 li = proto_tree_add_item(tree, hf_pfcp_bbf_nat_port_forward, tvb, offset, 9, ENC_NA0x00000000);
11648 lt = proto_item_add_subtree(li, ett_pfcp_bbf_nat_port_forward_list);
11649
11650 proto_tree_add_item(lt, hf_pfcp_bbf_nat_port_forward_inside_ip, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000);
11651 offset += 4;
11652
11653 proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_inside_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &in);
11654 offset += 2;
11655
11656 proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_outside_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &out);
11657 offset += 2;
11658
11659 proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_protocol, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &protocol);
11660 offset += 1;
11661
11662 proto_item_append_text(li, ": proto=%s: %s:%u -> %u", val_to_str_ext_const(protocol, &ipproto_val_ext, "Unknown"),
11663 tvb_ip_to_str(pinfo->pool, tvb, 0)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, 0), in, out);
11664 }
11665
11666 return offset;
11667}
11668
11669/*
11670 * TR 459.2: 6.5.3 BBF Report Trigger
11671 */
11672static const value_string pfcp_bbf_reporting_trigger_vals[] = {
11673
11674 { 0, "reserved" },
11675 { 1, "DBNG-UP allocated NAT blocks" },
11676 { 0, NULL((void*)0) }
11677};
11678
11679static int
11680dissect_pfcp_enterprise_bbf_reporting_trigger(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11681{
11682 int offset = 0;
11683 uint32_t value;
11684
11685 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_reporting_trigger, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
11686 offset += 1;
11687 proto_item_append_text(proto_tree_get_parent(tree), "%s", val_to_str_const(value, pfcp_bbf_reporting_trigger_vals, "Unknown"));
11688
11689 return offset;
11690}
11691
11692/*
11693 * TR 459.2: 6.5.8 BBF Dynamic NAT Block Port Range
11694 */
11695static int
11696dissect_pfcp_enterprise_bbf_dynamic_nat_block_port_range(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11697{
11698 int offset = 0;
11699 uint32_t start, end;
11700
11701 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_dynamic_nat_block_port_range_start_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &start);
11702 offset += 2;
11703
11704 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_dynamic_nat_block_port_range_end_port, tvb, offset, 2, ENC_BIG_ENDIAN0x00000000, &end);
11705 offset += 2;
11706
11707 proto_item_append_text(proto_tree_get_parent(tree), "%u:%u", start, end);
11708
11709 return offset;
11710}
11711
11712/*
11713 * TR 459.2: 6.5.9 BBF Event Time Stamp
11714 */
11715static int
11716dissect_pfcp_enterprise_bbf_event_time_stamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U___attribute__((unused)))
11717{
11718 int offset = 0;
11719 char *time_str;
11720
11721 proto_tree_add_item_ret_time_string(tree, hf_pfcp_bbf_event_time_stamp, tvb, 0, 8, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
11722 offset += 8;
11723 proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
11724
11725 return offset;
11726}
11727
11728static const value_string pfcp_bbf_direction_vals[] = {
11729 {0, "Input/Ingress/Upstream" },
11730 {1, "Output/Egress/Downstream" },
11731 {0, NULL((void*)0)}
11732};
11733
11734/*
11735 * TR 459i2: 6.9.13 BBF Direction IE
11736 */
11737static int
11738dissect_pfcp_enterprise_bbf_direction(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11739{
11740 uint32_t value;
11741
11742 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_direction, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
11743 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_direction_vals, "Unknown"));
11744
11745 return 1;
11746}
11747
11748static const value_string pfcp_bbf_family_vals[] = {
11749 {0, "IPv4" },
11750 {1, "IPv6" },
11751 {2, "IPv46" },
11752 {3, "L2eth" },
11753 {0, NULL((void*)0)}
11754};
11755
11756/*
11757 * TR 459i2: 6.9.14 BBF Family IE
11758 */
11759static int
11760dissect_pfcp_enterprise_bbf_family(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11761{
11762 uint32_t value;
11763
11764 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_family, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
11765 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_family_vals, "Unknown"));
11766
11767 return 1;
11768}
11769
11770/*
11771 * TR 459i2: 6.9.15 BBF SGRP Identifier
11772 */
11773static int
11774dissect_pfcp_enterprise_bbf_sgrp_identifier(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11775{
11776 uint32_t value;
11777
11778 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_sgrp_identifier, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000, &value);
11779 proto_item_append_text(proto_tree_get_parent(tree), " : %d", value);
11780
11781 return 4;
11782}
11783
11784static const value_string pfcp_bbf_sgrp_state_vals[] = {
11785 {0, "(reserved)" },
11786 {1, "Active" },
11787 {2, "Backup" },
11788 {3, "Track Logical Port" },
11789 {0, NULL((void*)0)}
11790};
11791
11792/*
11793 * TR 459i2: 6.9.16 BBF SGRP State
11794 */
11795static int
11796dissect_pfcp_enterprise_bbf_sgrp_state(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11797{
11798 uint32_t value;
11799
11800 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_sgrp_state, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
11801 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_sgrp_state_vals, "Unknown"));
11802
11803 return 1;
11804}
11805
11806/*
11807 * TR 459i2: 6.9.17 BBF SGRP Flags
11808 */
11809static int
11810dissect_pfcp_enterprise_bbf_sgrp_flags(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11811{
11812 static int * const flags[] = {
11813 &hf_pfcp_spare_b7_b2,
11814 &hf_pfcp_bbf_sgrp_flags_b1_psa,
11815 &hf_pfcp_bbf_sgrp_flags_b0_ras,
11816 NULL((void*)0)
11817 };
11818
11819 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_bbf_sgrp_flags, ett_pfcp_bbf_sgrp_flags, flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
11820
11821 return 1;
11822}
11823
11824static const value_string pfcp_bbf_operational_condition_vals[] = {
11825 {0, "Up" },
11826 {1, "Down" },
11827 {2, "Not ready" },
11828 {0, NULL((void*)0)}
11829};
11830
11831/*
11832 * TR 459i2: 6.9.18 BBF Operational Condition IE
11833 */
11834static int
11835dissect_pfcp_enterprise_bbf_operational_condition(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11836{
11837 uint32_t value;
11838
11839 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_operational_condition, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
11840 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_operational_condition_vals, "Unknown"));
11841
11842 return 1;
11843}
11844
11845/*
11846 * TR 459i2: 6.9.19 BBF IPv4 Prefix
11847 */
11848static int
11849dissect_pfcp_enterprise_bbf_ipv4_prefix(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11850{
11851 uint32_t prefix_len;
11852
11853 proto_tree_add_item(tree, hf_pfcp_bbf_ipv4_prefix, tvb, 0, 4, ENC_NA0x00000000);
11854 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_ipv4_prefix_length, tvb, 4, 1, ENC_BIG_ENDIAN0x00000000, &prefix_len);
11855 proto_item_append_text(proto_tree_get_parent(tree), " : %s/%d", tvb_ip_to_str(pinfo->pool, tvb, 0)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, 0), prefix_len);
11856
11857 return 5;
11858}
11859
11860/*
11861 * TR 459i2: 6.9.20 BBF IPv6 Prefix
11862 */
11863static int
11864dissect_pfcp_enterprise_bbf_ipv6_prefix(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11865{
11866 uint32_t prefix_len;
11867
11868 proto_tree_add_item(tree, hf_pfcp_bbf_ipv6_prefix, tvb, 0, 16, ENC_NA0x00000000);
11869 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_ipv6_prefix_length, tvb, 16, 1, ENC_BIG_ENDIAN0x00000000, &prefix_len);
11870 proto_item_append_text(proto_tree_get_parent(tree), " : %s/%d", tvb_ip6_to_str(pinfo->pool, tvb, 0)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, 0), prefix_len);
11871
11872 return 17;
11873}
11874
11875static const value_string pfcp_bbf_prefix_tag_usage_vals[] = {
11876 {0, "(reserved)" },
11877 {1, "Active SGRP" },
11878 {2, "Standby SGRP" },
11879 {0, NULL((void*)0)}
11880};
11881
11882/*
11883 * TR 459i2: 6.9.21 BBF Prefix Tag
11884 */
11885static int
11886dissect_pfcp_enterprise_bbf_prefix_tag(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11887{
11888 uint32_t value;
11889 int offset = 0;
11890
11891 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_prefix_tag_usage, tvb, offset, 1, ENC_BIG_ENDIAN0x00000000, &value);
11892 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_prefix_tag_usage_vals, "Unknown"));
11893 offset += 1;
11894
11895 if (tvb_reported_length(tvb) > 1)
11896 {
11897 uint32_t tag;
11898
11899 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_prefix_tag, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &tag);
11900 proto_item_append_text(proto_tree_get_parent(tree), " : %d", tag);
11901 offset += 4;
11902 }
11903
11904 return offset;
11905}
11906
11907static const value_string pfcp_bbf_error_code_vals[] = {
11908 {0x0000, "Reserved"},
11909 {0x0001, "SGRP programming error because of resource exhaustion"},
11910 {0x0002, "SGRP programming error because of configuration mismatch or incomplete"},
11911 {0x0003, "SGRP programming error related to vMAC"},
11912 {0x0004, "SGRP Partial state is not supported on DBNG-UP"},
11913 {0x0005, "SGRP Track logical port is not supported by DBNG-UP"},
11914 {0x0006, "ACL name not found"},
11915 {0x0007, "Prefix programming error because of resource exhaustion"},
11916 {0x0008, "Prefix programming error because of configuration mismatch or incomplete"},
11917 {0x0009, "Prefix's Network Instance not found"},
11918 {0x000a, "Prefix Active Tag matching not found"},
11919 {0x000b, "Prefix Backup Tag matching not found"},
11920 {0x000c, "Prefix's SGRP ID not found"},
11921 {0x000d, "Prefix not found (on prefix modify or prefix delete)"},
11922 {0x000e, "Prefix in use (when SGRP delete is performed before prefix delete)"},
11923 {0xffff, "Other error"},
11924 {0, NULL((void*)0)}
11925};
11926
11927/*
11928 * TR 459i2: 6.9.22 BBF Error Code
11929 */
11930static int
11931dissect_pfcp_enterprise_bbf_error_code(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11932{
11933 uint32_t value;
11934
11935 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_error_code, tvb, 0, 2, ENC_BIG_ENDIAN0x00000000, &value);
11936 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_error_code_vals, "Unknown"));
11937
11938 return 2;
11939}
11940
11941/*
11942 * TR 459i2: 6.9.23 BBF Error Message
11943 */
11944static int
11945dissect_pfcp_enterprise_bbf_error_message(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11946{
11947 proto_tree_add_item(tree, hf_pfcp_bbf_error_message, tvb, 0, tvb_reported_length(tvb), ENC_ASCII0x00000000);
11948
11949 return tvb_reported_length(tvb);
11950}
11951
11952/*
11953 * TR 459i2: 6.9.24 BBF Maximum ACL Chain Length
11954 */
11955static int
11956dissect_pfcp_enterprise_bbf_maximum_acl_chain_length(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11957{
11958 uint32_t value;
11959
11960 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_maximum_acl_chain_length, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
11961 proto_item_append_text(proto_tree_get_parent(tree), " : %d", value);
11962
11963 return 1;
11964}
11965
11966/*
11967 * TR 459i2: 6.9.25 BBF Forwarding Capability
11968 */
11969static int
11970dissect_pfcp_enterprise_bbf_forwarding_capability(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11971{
11972 uint32_t value;
11973
11974 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_forwarding_capability, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
11975 proto_item_append_text(proto_tree_get_parent(tree), " : %d%%", value);
11976
11977 return 1;
11978}
11979
11980static const value_string pfcp_bbf_connectivity_status_vals[] = {
11981 {0, "(reserved)" },
11982 {1, "Connected" },
11983 {2, "Isolated" },
11984 {0, NULL((void*)0)}
11985};
11986
11987/*
11988 * TR 459i2: 6.9.26 BBF Connectivity Status
11989 */
11990static int
11991dissect_pfcp_enterprise_bbf_connectivity_status(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
11992{
11993 uint32_t value;
11994
11995 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_connectivity_status, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &value);
11996 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_connectivity_status_vals, "Unknown"));
11997
11998 return 1;
11999}
12000
12001/*
12002 * TR 459i2: 6.9.27 Vendor-Specific Node Report Type
12003 */
12004static int
12005dissect_pfcp_enterprise_bbf_vendor_specific_node_report_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
12006{
12007 static int * const flags[] = {
12008 &hf_pfcp_spare_b7_b3,
12009 &hf_pfcp_bbf_vendor_specific_node_report_type_b2_nir,
12010 &hf_pfcp_bbf_vendor_specific_node_report_type_b1_sgr,
12011 &hf_pfcp_bbf_vendor_specific_node_report_type_b0_lpr,
12012 NULL((void*)0)
12013 };
12014
12015 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_bbf_vendor_specific_node_report_type, ett_pfcp_bbf_vendor_specific_node_report_type, flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
12016
12017 return 1;
12018}
12019
12020/*
12021 * TR 459i2: 6.9.28 BBF C-Tag Range
12022 */
12023static int
12024dissect_pfcp_enterprise_bbf_ctag_range(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
12025{
12026 static const crumb_spec_t start_crumbs[] = {
12027 { 0, 8 },
12028 { 12, 4 },
12029 { 0, 0 },
12030 };
12031 static const crumb_spec_t end_crumbs[] = {
12032 { 0, 4 },
12033 { 8, 8 },
12034 { 0, 0 },
12035 };
12036
12037 uint64_t start, end;
12038
12039 proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_bbf_ctag_range_start, tvb, 0, start_crumbs, &start);
12040 proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_bbf_ctag_range_end, tvb, 8, end_crumbs, &end);
12041 proto_item_append_text(proto_tree_get_parent(tree), " : %" PRIu64"l" "u" "-%" PRIu64"l" "u", start, end);
12042
12043 return 3;
12044}
12045
12046/*
12047 * TR 459i2: 6.9.29 BBF S-Tag Range
12048 */
12049static int
12050dissect_pfcp_enterprise_bbf_stag_range(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void* data _U___attribute__((unused)))
12051{
12052 static const crumb_spec_t start_crumbs[] = {
12053 { 0, 8 },
12054 { 12, 4 },
12055 { 0, 0 },
12056 };
12057 static const crumb_spec_t end_crumbs[] = {
12058 { 0, 4 },
12059 { 8, 8 },
12060 { 0, 0 },
12061 };
12062
12063 uint64_t start, end;
12064
12065 proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_bbf_stag_range_start, tvb, 0, start_crumbs, &start);
12066 proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_bbf_stag_range_end, tvb, 8, end_crumbs, &end);
12067 proto_item_append_text(proto_tree_get_parent(tree), " : %" PRIu64"l" "u" "-%" PRIu64"l" "u", start, end);
12068
12069 return 3;
12070}
12071
12072static pfcp_generic_ie_t pfcp_bbf_ies[] = {
12073 /* TR-459 */
12074 { VENDOR_BROADBAND_FORUM3561, 32768 , "UP Function Features" , dissect_pfcp_enterprise_bbf_up_function_features , -1} ,
12075 { VENDOR_BROADBAND_FORUM3561, 32769 , "Logical Port" , dissect_pfcp_enterprise_bbf_logical_port , -1} ,
12076 { VENDOR_BROADBAND_FORUM3561, 32770 , "Outer Header Creation" , dissect_pfcp_enterprise_bbf_outer_header_creation , -1} ,
12077 { VENDOR_BROADBAND_FORUM3561, 32771 , "Outer Header Removal" , dissect_pfcp_enterprise_bbf_outer_header_removal , -1} ,
12078 { VENDOR_BROADBAND_FORUM3561, 32772 , "PPPoE Session ID" , dissect_pfcp_enterprise_bbf_pppoe_session_id , -1} ,
12079 { VENDOR_BROADBAND_FORUM3561, 32773 , "PPP protocol" , dissect_pfcp_enterprise_bbf_ppp_protocol , -1} ,
12080 { VENDOR_BROADBAND_FORUM3561, 32774 , "Verification Timers" , dissect_pfcp_enterprise_bbf_verification_timers , -1} ,
12081 { VENDOR_BROADBAND_FORUM3561, 32775 , "PPP LCP Magic Number" , dissect_pfcp_enterprise_bbf_ppp_lcp_magic_number , -1} ,
12082 { VENDOR_BROADBAND_FORUM3561, 32776 , "MTU" , dissect_pfcp_enterprise_bbf_mtu , -1} ,
12083 { VENDOR_BROADBAND_FORUM3561, 32777 , "L2TP Tunnel Endpoint" , dissect_pfcp_enterprise_bbf_l2tp_tunnel_endpoint , -1} ,
12084 { VENDOR_BROADBAND_FORUM3561, 32778 , "L2TP Session ID" , dissect_pfcp_enterprise_bbf_l2tp_session_id , -1} ,
12085 { VENDOR_BROADBAND_FORUM3561, 32779 , "L2TP Type" , dissect_pfcp_enterprise_bbf_l2tp_type , -1} ,
12086 { VENDOR_BROADBAND_FORUM3561, 32780 , "PPP LCP Connectivity" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12087 { VENDOR_BROADBAND_FORUM3561, 32781 , "L2TP Tunnel" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12088 /* TR-459.3 */
12089 { VENDOR_BROADBAND_FORUM3561, 32782 , "BBF Multicast Flags" , dissect_pfcp_enterprise_bbf_multicast_flags , -1} ,
12090 { VENDOR_BROADBAND_FORUM3561, 32783 , "BBF Multicast Query Parameters" , dissect_pfcp_enterprise_bbf_multicast_query_parameters , -1} ,
12091 { VENDOR_BROADBAND_FORUM3561, 32784 , "BBF Multicast Group Limit" , dissect_pfcp_enterprise_bbf_multicast_group_limit , -1} ,
12092 { VENDOR_BROADBAND_FORUM3561, 32785 , "BBF Multicast Protocol Control" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12093 /* TR-459.2 */
12094 { VENDOR_BROADBAND_FORUM3561, 32787 , "BBF Apply Action" , dissect_pfcp_enterprise_bbf_apply_action , -1} ,
12095 { VENDOR_BROADBAND_FORUM3561, 32788 , "BBF NAT External Port Range" , dissect_pfcp_enterprise_bbf_nat_external_port_range , -1} ,
12096 { VENDOR_BROADBAND_FORUM3561, 32789 , "BBF NAT Port Forward" , dissect_pfcp_enterprise_bbf_nat_port_forward , -1} ,
12097 { VENDOR_BROADBAND_FORUM3561, 32790 , "BBF Report Trigger" , dissect_pfcp_enterprise_bbf_reporting_trigger , -1} ,
12098 { VENDOR_BROADBAND_FORUM3561, 32791 , "BBF Dynamic NAT Block Port Range" , dissect_pfcp_enterprise_bbf_dynamic_nat_block_port_range , -1} ,
12099 { VENDOR_BROADBAND_FORUM3561, 32792 , "BBF Event Time Stamp" , dissect_pfcp_enterprise_bbf_event_time_stamp , -1} ,
12100 /* TR-459i2 */
12101 { VENDOR_BROADBAND_FORUM3561, 32793 , "Node Info Create" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12102 { VENDOR_BROADBAND_FORUM3561, 32794 , "Node Info Modify" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12103 { VENDOR_BROADBAND_FORUM3561, 32795 , "Node Info Delete" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12104 { VENDOR_BROADBAND_FORUM3561, 32796 , "Logical Port Report" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12105 { VENDOR_BROADBAND_FORUM3561, 32797 , "SGRP Notification Report" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12106 { VENDOR_BROADBAND_FORUM3561, 32798 , "Network Instance Report" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12107 { VENDOR_BROADBAND_FORUM3561, 32799 , "SGRP Error" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12108 { VENDOR_BROADBAND_FORUM3561, 32800 , "SGRP" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12109 { VENDOR_BROADBAND_FORUM3561, 32801 , "UP Subscriber Prefix" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12110 { VENDOR_BROADBAND_FORUM3561, 32802 , "ACL" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12111 { VENDOR_BROADBAND_FORUM3561, 32803 , "Direction" , dissect_pfcp_enterprise_bbf_direction , -1} ,
12112 { VENDOR_BROADBAND_FORUM3561, 32804 , "Family" , dissect_pfcp_enterprise_bbf_family , -1} ,
12113 { VENDOR_BROADBAND_FORUM3561, 32806 , "SGRP Identifier" , dissect_pfcp_enterprise_bbf_sgrp_identifier , -1} ,
12114 { VENDOR_BROADBAND_FORUM3561, 32807 , "SGRP State" , dissect_pfcp_enterprise_bbf_sgrp_state , -1} ,
12115 { VENDOR_BROADBAND_FORUM3561, 32808 , "SGRP Flags" , dissect_pfcp_enterprise_bbf_sgrp_flags , -1} ,
12116 { VENDOR_BROADBAND_FORUM3561, 32809 , "Operational Condition" , dissect_pfcp_enterprise_bbf_operational_condition , -1} ,
12117 { VENDOR_BROADBAND_FORUM3561, 32810 , "IPv4 Prefix" , dissect_pfcp_enterprise_bbf_ipv4_prefix, -1} ,
12118 { VENDOR_BROADBAND_FORUM3561, 32811 , "IPv6 Prefix" , dissect_pfcp_enterprise_bbf_ipv6_prefix, -1} ,
12119 { VENDOR_BROADBAND_FORUM3561, 32812 , "Prefix Tag" , dissect_pfcp_enterprise_bbf_prefix_tag, -1} ,
12120 { VENDOR_BROADBAND_FORUM3561, 32813 , "Error Code" , dissect_pfcp_enterprise_bbf_error_code , -1} ,
12121 { VENDOR_BROADBAND_FORUM3561, 32814 , "Error Message" , dissect_pfcp_enterprise_bbf_error_message , -1} ,
12122 { VENDOR_BROADBAND_FORUM3561, 32815 , "Maximum ACL Chain Length" , dissect_pfcp_enterprise_bbf_maximum_acl_chain_length , -1} ,
12123 { VENDOR_BROADBAND_FORUM3561, 32816 , "Forwarding Capability" , dissect_pfcp_enterprise_bbf_forwarding_capability , -1} ,
12124 { VENDOR_BROADBAND_FORUM3561, 32817 , "Connectivity Status" , dissect_pfcp_enterprise_bbf_connectivity_status , -1} ,
12125 { VENDOR_BROADBAND_FORUM3561, 32818 , "Vendor-Specific Node Report Type" , dissect_pfcp_enterprise_bbf_vendor_specific_node_report_type , -1} ,
12126 { VENDOR_BROADBAND_FORUM3561, 32819 , "Prefix Error" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12127 { VENDOR_BROADBAND_FORUM3561, 32820 , "C-Tag Range" , dissect_pfcp_enterprise_bbf_ctag_range , -1} ,
12128 { VENDOR_BROADBAND_FORUM3561, 32821 , "S-Tag Range" , dissect_pfcp_enterprise_bbf_stag_range , -1} ,
12129};
12130
12131/* Enterprise IE decoding Travelping */
12132
12133static int
12134dissect_pfcp_enterprise_travelping_packet_measurement(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12135{
12136 int offset = 0;
12137 uint64_t flags;
12138
12139 static int * const pfcp_enterprise_travelping_packet_measurement_flags[] = {
12140 &hf_pfcp_spare_b7_b3,
12141 &hf_pfcp_enterprise_travelping_packet_measurement_b2_dlnop,
12142 &hf_pfcp_enterprise_travelping_packet_measurement_b1_ulnop,
12143 &hf_pfcp_enterprise_travelping_packet_measurement_b0_tonop,
12144 NULL((void*)0)
12145 };
12146
12147 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_enterprise_travelping_packet_measurement,
12148 ett_pfcp_enterprise_travelping_packet_measurement, pfcp_enterprise_travelping_packet_measurement_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02, &flags);
12149 offset += 1;
12150
12151 if ((flags & 0x1)) {
12152 proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_tonop, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
12153 offset += 8;
12154 }
12155 if ((flags & 0x2)) {
12156 proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_ulnop, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
12157 offset += 8;
12158 }
12159 if ((flags & 0x4)) {
12160 proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_dlnop, tvb, offset, 8, ENC_BIG_ENDIAN0x00000000);
12161 offset += 8;
12162 }
12163
12164 return offset;
12165}
12166
12167static int
12168dissect_pfcp_enterprise_travelping_build_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12169{
12170 /* Octet 7 to (n+4) Travelping Build Id */
12171 if (tvb_ascii_isprint(tvb, 0, -1))
12172 {
12173 const uint8_t* string_value;
12174 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_build_id_str, tvb, 0, -1, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
12175 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12176 }
12177 else
12178 {
12179 proto_tree_add_item(tree, hf_pfcp_travelping_build_id, tvb, 0, -1, ENC_NA0x00000000);
12180 }
12181
12182 return tvb_reported_length(tvb);
12183}
12184
12185static int
12186dissect_pfcp_enterprise_travelping_now(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12187{
12188 int offset = 0;
12189 char *time_str;
12190
12191 proto_tree_add_item_ret_time_string(tree, hf_pfcp_travelping_now, tvb, 0, 8, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
12192 offset += 8;
12193
12194 proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
12195
12196 return offset;
12197}
12198
12199static int
12200dissect_pfcp_enterprise_travelping_start(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12201{
12202 int offset = 0;
12203 char *time_str;
12204
12205 proto_tree_add_item_ret_time_string(tree, hf_pfcp_travelping_now, tvb, 0, 8, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
12206 offset += 8;
12207
12208 proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
12209
12210 return offset;
12211}
12212
12213static int
12214dissect_pfcp_enterprise_travelping_stop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12215{
12216 int offset = 0;
12217 char *time_str;
12218
12219 proto_tree_add_item_ret_time_string(tree, hf_pfcp_travelping_now, tvb, offset, 8, ENC_TIME_NTP0x00000002 | ENC_BIG_ENDIAN0x00000000, pinfo->pool, &time_str);
12220 offset += 8;
12221
12222 proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
12223
12224 return offset;
12225}
12226
12227static int
12228dissect_pfcp_enterprise_travelping_error_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12229{
12230 /* Octet 7 to (n+4) Travelping Error Message */
12231 if (tvb_ascii_isprint(tvb, 0, -1))
12232 {
12233 const uint8_t* string_value;
12234 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_error_message_str, tvb, 0, -1, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
12235 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12236 }
12237 else
12238 {
12239 proto_tree_add_item(tree, hf_pfcp_travelping_error_message, tvb, 0, -1, ENC_NA0x00000000);
12240 }
12241
12242 return tvb_reported_length(tvb);
12243}
12244
12245static int
12246dissect_pfcp_enterprise_travelping_file_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12247{
12248 /* Octet 7 to (n+4) Travelping Error Message */
12249 if (tvb_ascii_isprint(tvb, 0, -1))
12250 {
12251 const uint8_t* string_value;
12252 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_file_name_str, tvb, 0, -1, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
12253 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12254 }
12255 else
12256 {
12257 proto_tree_add_item(tree, hf_pfcp_travelping_file_name, tvb, 0, -1, ENC_NA0x00000000);
12258 }
12259
12260 return tvb_reported_length(tvb);
12261}
12262
12263static int
12264dissect_pfcp_enterprise_travelping_line_number(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12265{
12266 int offset = 0;
12267 uint32_t line_number;
12268
12269 /* Octet 7 to 10 Travelping Line Number */
12270 proto_tree_add_item_ret_uint(tree, hf_pfcp_travelping_line_number, tvb, offset, 4, ENC_BIG_ENDIAN0x00000000, &line_number);
12271 offset += 4;
12272
12273 proto_item_append_text(proto_tree_get_parent(tree), " : %u", line_number);
12274
12275 return offset;
12276}
12277
12278static int
12279dissect_pfcp_enterprise_travelping_ipfix_policy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12280{
12281 /* Octet 7 to (n+4) Travelping IPFIX Policy */
12282 if (tvb_ascii_isprint(tvb, 0, -1))
12283 {
12284 const uint8_t* string_value;
12285 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_ipfix_policy_str, tvb, 0, -1, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
12286 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12287 }
12288 else
12289 {
12290 proto_tree_add_item(tree, hf_pfcp_travelping_ipfix_policy, tvb, 0, -1, ENC_NA0x00000000);
12291 }
12292
12293 return tvb_reported_length(tvb);
12294}
12295
12296static int
12297dissect_pfcp_enterprise_travelping_trace_parent(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12298{
12299 /* Octet 7 to (n+4) Travelping Trace Parent */
12300 if (tvb_ascii_isprint(tvb, 0, -1))
12301 {
12302 const uint8_t* string_value;
12303 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_trace_parent_str, tvb, 0, -1, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
12304 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12305 }
12306 else
12307 {
12308 proto_tree_add_item(tree, hf_pfcp_travelping_trace_parent, tvb, 0, -1, ENC_NA0x00000000);
12309 }
12310
12311 return tvb_reported_length(tvb);
12312}
12313
12314static int
12315dissect_pfcp_enterprise_travelping_trace_state(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12316{
12317 /* Octet 7 to (n+4) Travelping Trace State */
12318 if (tvb_ascii_isprint(tvb, 0, -1))
12319 {
12320 const uint8_t* string_value;
12321 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_trace_state_str, tvb, 0, -1, ENC_ASCII0x00000000 | ENC_NA0x00000000, pinfo->pool, &string_value);
12322 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12323 }
12324 else
12325 {
12326 proto_tree_add_item(tree, hf_pfcp_travelping_trace_state, tvb, 0, -1, ENC_NA0x00000000);
12327 }
12328
12329 return tvb_reported_length(tvb);
12330}
12331
12332
12333static pfcp_generic_ie_t pfcp_travelping_ies[] = {
12334 { VENDOR_TRAVELPING18681, 32769 , "Packet Measurement" , dissect_pfcp_enterprise_travelping_packet_measurement , -1} ,
12335 { VENDOR_TRAVELPING18681, 32770 , "Build Id" , dissect_pfcp_enterprise_travelping_build_id , -1} ,
12336 { VENDOR_TRAVELPING18681, 32771 , "Now" , dissect_pfcp_enterprise_travelping_now , -1} ,
12337 { VENDOR_TRAVELPING18681, 32772 , "Start" , dissect_pfcp_enterprise_travelping_start , -1} ,
12338 { VENDOR_TRAVELPING18681, 32773 , "Stop" , dissect_pfcp_enterprise_travelping_stop , -1} ,
12339 { VENDOR_TRAVELPING18681, 32774 , "Error Report" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12340 { VENDOR_TRAVELPING18681, 32775 , "Error Message" , dissect_pfcp_enterprise_travelping_error_message , -1} ,
12341 { VENDOR_TRAVELPING18681, 32776 , "File Name" , dissect_pfcp_enterprise_travelping_file_name , -1} ,
12342 { VENDOR_TRAVELPING18681, 32777 , "Line Number" , dissect_pfcp_enterprise_travelping_line_number , -1} ,
12343 { VENDOR_TRAVELPING18681, 32778 , "Created NAT Binding" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12344 { VENDOR_TRAVELPING18681, 32779 , "IPFIX Policy" , dissect_pfcp_enterprise_travelping_ipfix_policy , -1} ,
12345 { VENDOR_TRAVELPING18681, 32780 , "Trace Information" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12346 { VENDOR_TRAVELPING18681, 32781 , "Trace Parent" , dissect_pfcp_enterprise_travelping_trace_parent , -1} ,
12347 { VENDOR_TRAVELPING18681, 32782 , "Trace State" , dissect_pfcp_enterprise_travelping_trace_state , -1} ,
12348};
12349
12350/************************************ Nokia ***********************************/
12351
12352static int dissect_pfcp_nokia_sap_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12353{
12354 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_sap_template);
12355}
12356
12357static int dissect_pfcp_nokia_group_if_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12358{
12359 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_group_iface_template);
12360}
12361
12362static int dissect_pfcp_nokia_session_state_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12363{
12364 uint64_t value;
12365
12366 proto_tree_add_item_ret_uint64(tree, hf_pfcp_nokia_session_state_id, tvb, 0, 8, ENC_BIG_ENDIAN0x00000000, &value);
12367 proto_item_append_text(proto_tree_get_parent(tree), " : %" PRIu64"l" "u", value);
12368
12369 return 8;
12370}
12371
12372static const true_false_string tfs_nokia_detailed_stats_ie = { "Egress", "Ingress" };
12373static const true_false_string tfs_nokia_detailed_stats_qp = { "Policer", "Queue" };
12374static const val64_string nokia_detailed_stats_length_values[] = {
12375 {0, "Not present"},
12376 {1, "4 bytes"},
12377 {2, "8 bytes"},
12378 {3, "Invalid"},
12379 {0, NULL((void*)0)}
12380};
12381
12382static int dissect_pfcp_nokia_detailed_statistics(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12383{
12384 static const value_string ingress_queue_names[] = {
12385 { 1, "HighPktsOffered"},
12386 { 2, "HighPktsDropped"},
12387 { 3, "LowPktsOffered"},
12388 { 4, "LowPktsDropped"},
12389 { 5, "HighOctetsOffered"},
12390 { 6, "HighOctetsDropped"},
12391 { 7, "LowOctetsOffered"},
12392 { 8, "LowOctetsDropped"},
12393 { 9, "UncolouredPktsOffered"},
12394 {10, "UncolouredOctetsOffered"},
12395 {11, "McastManagedPktsOffered"},
12396 {12, "McastManagedOctetsOffered"},
12397 {13, "InProfilePktsForwarded"},
12398 {14, "OutOfProfilePktsForwarded"},
12399 {15, "InProfileOctetsForwarded"},
12400 {16, "OutOfProfileOctetsForwarded"},
12401 { 0, NULL((void*)0)},
12402 };
12403 static const value_string egress_queue_names[] = {
12404 { 1, "InProfilePktsForwarded"},
12405 { 2, "InProfilePktsDropped"},
12406 { 3, "OutOfProfilePktsForwarded"},
12407 { 4, "OutOfProfilePktsDropped"},
12408 { 5, "InProfileOctetsForwarded"},
12409 { 6, "InProfileOctetsDropped"},
12410 { 7, "OutOfProfileOctetsForwarded"},
12411 { 8, "OutOfProfileOctetsDropped"},
12412 { 9, "ExceedProfilePktsForwarded"},
12413 {10, "ExceedProfilePktsDropped"},
12414 {11, "ExceedProfileOctetsForwarded"},
12415 {12, "ExceedProfileOctetsDropped"},
12416 { 0, NULL((void*)0)},
12417 };
12418 static const value_string policer_names[] = {
12419 { 1, "HighPktsOffered"},
12420 { 2, "HighPktsDropped"},
12421 { 3, "LowPktsOffered"},
12422 { 4, "LowPktsDropped"},
12423 { 5, "HighOctetsOffered"},
12424 { 6, "HighOctetsDropped"},
12425 { 7, "LowOctetsOffered"},
12426 { 8, "LowOctetsDropped"},
12427 { 9, "UncolouredPktsOffered"},
12428 {10, "UncolouredOctetsOffered"},
12429 {11, "InProfilePktsForwarded"},
12430 {12, "OutOfProfilePktsForwarded"},
12431 {13, "InProfileOctetsForwarded"},
12432 {14, "OutOfProfileOctetsForwarded"},
12433 {15, "ExceedProfilePktsOffered"},
12434 {16, "ExceedProfilePktsDropped"},
12435 {17, "ExceedProfilePktsForwarded"},
12436 {18, "ExceedProfileOctetsOffered"},
12437 {19, "ExceedProfileOctetsDropped"},
12438 {20, "ExceedProfileOctetsForwarded"},
12439 {21, "InPlusProfilePktsOffered"},
12440 {22, "InPlusProfilePktsDropped"},
12441 {23, "InPlusProfilePktsForwarded"},
12442 {24, "InPlusProfileOctetsOffered"},
12443 {25, "InPlusProfileOctetsDropped"},
12444 {26, "InPlusProfileOctetsForwarded"},
12445 { 0, NULL((void*)0)},
12446 };
12447
12448 int offset = 0;
12449 static int * const key[] = {
12450 &hf_pfcp_nokia_detailed_stats_key_direction,
12451 &hf_pfcp_nokia_detailed_stats_key_type,
12452 &hf_pfcp_nokia_detailed_stats_key_object_id,
12453 &hf_pfcp_nokia_detailed_stats_key_stat_mode,
12454 NULL((void*)0)
12455 };
12456
12457 uint64_t flags;
12458 proto_tree_add_bitmask_with_flags_ret_uint64(
12459 tree, tvb, offset, hf_pfcp_nokia_detailed_stats_key,
12460 ett_pfcp_nokia_detailed_stats_key, key,
12461 ENC_BIG_ENDIAN0x00000000, 0, &flags
12462 );
12463 const bool_Bool flags_egress = !!(flags & 0x80000000);
12464 const bool_Bool flags_policer = !!(flags & 0x40000000);
12465 offset += 4;
12466
12467 proto_item* bitmap_item;
12468 proto_tree* bitmap_tree = proto_tree_add_subtree_format(tree, tvb, offset, 8, ett_pfcp_nokia_detailed_stats_bitmap, &bitmap_item, "Counter info");
12469 uint64_t bitmap = tvb_get_ntoh64(tvb, offset);
12470 const int bitmap_offset = offset;
12471 offset += 8;
12472
12473 int num = 0;
12474 for (int i = 0; bitmap != 0; bitmap <<= 8, i += 4)
12475 {
12476 uint8_t mappedbyte = (bitmap >> 56) & 0xff;
12477 if (mappedbyte == 0) continue;
12478
12479 for (int j = 1; mappedbyte != 0; mappedbyte >>= 2, j++)
12480 {
12481 const uint8_t bits = mappedbyte & 0x03;
12482 int counter_index = i + j;
12483 if (bits == 0) continue;
12484
12485 const value_string* names = flags_policer ? policer_names : flags_egress ? egress_queue_names : ingress_queue_names;
12486 const char* counter_name = val_to_str(counter_index, names, "Counter %u");
12487
12488 const int bit_offset = 8 * (bitmap_offset + i/4 + 1) - 2 * j;
12489 proto_item* it = proto_tree_add_bits_item(bitmap_tree, hf_pfcp_nokia_detailed_stats_bitmap_item, tvb, bit_offset, 2, ENC_BIG_ENDIAN0x00000000);
12490 proto_item_append_text(it, " - %s (%u) ", counter_name, counter_index);
12491 if (bits == 3)
12492 {
12493 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, bitmap_offset, 8);
12494 break;
12495 }
12496
12497 const int len = bits == 1 ? 4 : 8;
12498
12499 if (offset > 0 && (unsigned) offset + len > tvb_reported_length(tvb))
12500 {
12501 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, tvb_reported_length(tvb) - offset);
12502 break;
12503 }
12504
12505 uint64_t octets;
12506 it = proto_tree_add_item_ret_uint64(tree, hf_pfcp_nokia_detailed_stats_octets, tvb, offset, len, ENC_BIG_ENDIAN0x00000000, &octets);
12507 proto_item_set_text(it, "%s: %" PRIu64"l" "u", counter_name, octets);
12508
12509 num++;
12510 offset += len;
12511 }
12512 }
12513
12514 if (num == 0)
12515 {
12516 proto_item_append_text(bitmap_item, " (empty)");
12517 }
12518
12519 proto_item_append_text(proto_tree_get_parent(tree), " : %u %s %s counter%s (object %u mode %u)",
12520 num, flags_egress ? "egress" : "ingress", flags_policer ? "policer" : "queue", num == 1 ? "" : "s",
12521 (int) (flags >> 16) & 0x3f, (int) flags & 0x1f);
12522
12523 return offset;
12524}
12525
12526static int dissect_pfcp_nokia_detailed_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12527{
12528 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_detailed_error);
12529}
12530
12531static int dissect_pfcp_nokia_qos_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12532{
12533 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_qos_override);
12534}
12535
12536static int dissect_pfcp_nokia_measurement_information(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12537{
12538 static int * const flags[] = {
12539 &hf_pfcp_spare_b7_b1,
12540 &hf_pfcp_nokia_measurement_info_b0_det,
12541 NULL((void*)0)
12542 };
12543
12544 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_nokia_measurement_info, ett_pfcp_nokia_measurement_info, flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
12545
12546 return 1;
12547}
12548
12549static int dissect_pfcp_nokia_pfpsmreq_flags(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12550{
12551 static int * const flags[] = {
12552 &hf_pfcp_spare_b7_b2,
12553 &hf_pfcp_nokia_pfcpsmreq_flags_b1_audit,
12554 &hf_pfcp_nokia_pfcpsmreq_flags_b0_abs,
12555 NULL((void*)0)
12556 };
12557
12558 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_nokia_pfcpsmreq_flags, ett_pfcp_nokia_pfcpsmreq_flags, flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
12559
12560 return 1;
12561}
12562
12563static int dissect_pfcp_nokia_up_function_features(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12564{
12565 static int * const pfcp_nokia_up_function_features_flags[] = {
12566 &hf_pfcp_nokia_up_function_features_sssg,
12567 &hf_pfcp_nokia_up_function_features_bulk_audit,
12568 NULL((void*)0),
12569 };
12570
12571 proto_tree_add_bitmask_list(tree, tvb, 0, 1, pfcp_nokia_up_function_features_flags, ENC_BIG_ENDIAN0x00000000);
12572
12573 return 1;
12574}
12575
12576static const value_string nokia_filter_override_type_vals[] = {
12577 {0, "Ingress IPv4"},
12578 {1, "Egress IPv4"},
12579 {2, "Ingress IPv6"},
12580 {3, "Egress IPv6"},
12581 {0, NULL((void*)0)}
12582};
12583
12584static int dissect_pfcp_nokia_filter_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12585{
12586 uint32_t type;
12587 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_filter_override_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &type);
12588
12589 if (tvb_reported_length(tvb) == 1)
12590 {
12591 proto_item_append_text(proto_tree_get_parent(tree), " : %s: <disable>", val_to_str_const(type, nokia_filter_override_type_vals, "Unknown"));
12592 }
12593 else
12594 {
12595 proto_tree_add_item(tree, hf_pfcp_nokia_filter_override_name, tvb, 1, tvb_reported_length(tvb) - 1, ENC_ASCII0x00000000);
12596
12597 proto_item_append_text(proto_tree_get_parent(tree), " : %s: %s",
12598 val_to_str_const(type, nokia_filter_override_type_vals, "Unknown"),
12599 tvb_get_string_enc(pinfo->pool, tvb, 1, tvb_reported_length(tvb) - 1, ENC_ASCII0x00000000));
12600 }
12601
12602 return tvb_reported_length(tvb);
12603}
12604
12605static int dissect_pfcp_nokia_intermediate_destination(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12606{
12607 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_intermediate_destination);
12608}
12609
12610static int dissect_pfcp_nokia_nat_isa_members(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12611{
12612 uint32_t num_members;
12613
12614 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_nat_isa_members, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &num_members);
12615 proto_item_append_text(proto_tree_get_parent(tree), " : %u", num_members);
12616
12617 return 1;
12618}
12619
12620static int dissect_pfcp_nokia_pfcphb_flags(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12621{
12622 static int * const flags[] = {
12623 &hf_pfcp_spare_b7_b3,
12624 &hf_pfcp_nokia_pfcphb_flags_b2_aud_e,
12625 &hf_pfcp_nokia_pfcphb_flags_b1_aud_s,
12626 &hf_pfcp_nokia_pfcphb_flags_b0_aud_r,
12627 NULL((void*)0)
12628 };
12629
12630 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_nokia_pfcphb_flags, ett_pfcp_nokia_pfcphb_flags, flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02);
12631
12632 return 1;
12633}
12634
12635static int dissect_pfcp_nokia_l2tp_lcp_options(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12636{
12637 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_lcp_request, tvb, 0, -1, ENC_NA0x00000000);
12638
12639 return tvb_reported_length(tvb);
12640}
12641
12642static const value_string nokia_l2tp_auth_type_vals[] = {
12643 {0, "CHAP"},
12644 {1, "PAP"},
12645 {0, NULL((void*)0)}
12646};
12647
12648static int dissect_pfcp_nokia_l2tp_auth_type(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12649{
12650 uint32_t type;
12651 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_auth_type, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &type);
12652 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(type, nokia_l2tp_auth_type_vals, "<Unknown>"));
12653
12654 return 1;
12655}
12656
12657static int dissect_pfcp_nokia_l2tp_auth_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12658{
12659 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_auth_name);
12660}
12661
12662static int dissect_pfcp_nokia_l2tp_auth_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12663{
12664 uint32_t id;
12665 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_auth_id, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &id);
12666 proto_item_append_text(proto_tree_get_parent(tree), " : %u", id);
12667
12668 return 1;
12669}
12670
12671static int dissect_pfcp_nokia_l2tp_auth_challenge(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12672{
12673 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_auth_challenge, tvb, 0, -1, ENC_NA0x00000000);
12674
12675 return tvb_reported_length(tvb);
12676}
12677
12678static int dissect_pfcp_nokia_l2tp_auth_response(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12679{
12680 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_auth_response, tvb, 0, -1, ENC_NA0x00000000);
12681
12682 return tvb_reported_length(tvb);
12683}
12684
12685static int dissect_pfcp_nokia_l2tp_endpoint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12686{
12687 if (tvb_reported_length(tvb) == 4)
12688 {
12689 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000);
12690 proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip_to_str(pinfo->pool, tvb, 0)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, 0));
12691 }
12692 else if (tvb_reported_length(tvb) == 16)
12693 {
12694 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address, tvb, 0, 16, ENC_NA0x00000000);
12695 proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip6_to_str(pinfo->pool, tvb, 0)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, 0));
12696 }
12697 else
12698 {
12699 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, -1);
12700 }
12701
12702 return tvb_reported_length(tvb);
12703}
12704
12705static int dissect_pfcp_nokia_l2tp_client_auth_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12706{
12707 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_client_auth_id);
12708}
12709
12710static int dissect_pfcp_nokia_l2tp_server_auth_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12711{
12712 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_server_auth_id);
12713}
12714
12715static int dissect_pfcp_nokia_l2tp_password(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12716{
12717 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_password);
12718}
12719
12720static int dissect_pfcp_nokia_l2tp_assignment_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12721{
12722 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_assignment_id);
12723}
12724
12725static int dissect_pfcp_nokia_l2tp_private_group_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12726{
12727 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_private_group_id);
12728}
12729
12730static int dissect_pfcp_flags_and_fields(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned length, int * const * flags, int * const * fields, int flags_hf, int flags_ett)
12731{
12732 unsigned offset = 0;
12733
12734 uint64_t flags_present;
12735 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, flags_hf, flags_ett, flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02, &flags_present);
12736 offset += 4;
12737
12738 for (int i = 0; flags[i] != NULL((void*)0); i++)
12739 {
12740 // is there a corresponding field?
12741 if (fields[i] == NULL((void*)0)) continue;
12742
12743 // is the flag enabled?
12744 header_field_info* hf = proto_registrar_get_nth(*flags[i]);
12745 if ((flags_present & hf->bitmask) == 0) continue;
12746
12747 // is the field actually there?
12748 if (offset >= length)
12749 {
12750 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, length);
12751 return tvb_reported_length(tvb);
12752 }
12753
12754 // all is well, add the field
12755 hf = proto_registrar_get_nth(*fields[i]);
12756 int len = hf->type == FT_UINT8 ? 1 :
12757 hf->type == FT_UINT24 ? 3 :
12758 hf->type == FT_UINT32 ? 4 : 0;
12759 proto_tree_add_item(tree, *fields[i], tvb, offset, len, ENC_NA0x00000000);
12760 offset += len;
12761 }
12762
12763 return offset;
12764}
12765
12766static const value_string nokia_l2tp_params_algorithm_vals[] = {
12767 {0, "Weighted Access"},
12768 {1, "Weighted Random"},
12769 {2, "Existing First"},
12770 {0, NULL((void*)0)}
12771};
12772
12773static const value_string nokia_l2tp_params_avp_hiding_vals[] = {
12774 {0, "Nothing"},
12775 {1, "Sensitive Only"},
12776 {2, "All"},
12777 {0, NULL((void*)0)}
12778};
12779
12780static const value_string nokia_l2tp_params_never_always[] = {
12781 {0, "Never"},
12782 {1, "Always"},
12783 {0, NULL((void*)0)}
12784};
12785
12786static const value_string nokia_l2tp_params_infinite[] = {
12787 {0xffffff, "Infinite"},
12788 {0, NULL((void*)0)}
12789};
12790
12791static int dissect_pfcp_nokia_l2tp_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12792{
12793 static int * const flags[] = {
12794 &hf_pfcp_nokia_l2tp_params_flags_b24_algorithm,
12795 &hf_pfcp_nokia_l2tp_params_flags_b25_avp_hiding,
12796 &hf_pfcp_nokia_l2tp_params_flags_b26_challenge,
12797 &hf_pfcp_nokia_l2tp_params_flags_b27_df_bit,
12798 &hf_pfcp_nokia_l2tp_params_flags_b28_preference,
12799 &hf_pfcp_nokia_l2tp_params_flags_b29_session_limit,
12800 &hf_pfcp_nokia_l2tp_params_flags_b30_idle_timeout,
12801 &hf_pfcp_nokia_l2tp_params_flags_b31_hello_interval,
12802 &hf_pfcp_nokia_l2tp_params_flags_b16_destruct_timeout,
12803 &hf_pfcp_nokia_l2tp_params_flags_b17_max_retries_estab,
12804 &hf_pfcp_nokia_l2tp_params_flags_b18_max_retries_not_estab,
12805 &hf_pfcp_nokia_l2tp_params_flags_b19_rx_window_size,
12806 NULL((void*)0)
12807 };
12808 static int * const fields[] = {
12809 &hf_pfcp_nokia_l2tp_params_algorithm,
12810 &hf_pfcp_nokia_l2tp_params_avp_hiding,
12811 &hf_pfcp_nokia_l2tp_params_challenge,
12812 &hf_pfcp_nokia_l2tp_params_df_bit,
12813 &hf_pfcp_nokia_l2tp_params_preference,
12814 &hf_pfcp_nokia_l2tp_params_session_limit,
12815 &hf_pfcp_nokia_l2tp_params_idle_timeout,
12816 &hf_pfcp_nokia_l2tp_params_hello_interval,
12817 &hf_pfcp_nokia_l2tp_params_destruct_timeout,
12818 &hf_pfcp_nokia_l2tp_params_max_retries_estab,
12819 &hf_pfcp_nokia_l2tp_params_max_retries_not_estab,
12820 &hf_pfcp_nokia_l2tp_params_rx_window_size,
12821 NULL((void*)0)
12822 };
12823
12824 return dissect_pfcp_flags_and_fields(tvb, pinfo, tree, tvb_reported_length(tvb), flags, fields, hf_pfcp_nokia_l2tp_tunnel_params_flags, ett_pfcp_nokia_l2tp_tunnel_params_flags);
12825}
12826
12827static int dissect_pfcp_nokia_l2tp_ids(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12828{
12829 uint32_t local_tunnel, remote_tunnel, local_session, remote_session, call_serial_number;
12830
12831 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_local_tunnel_id , tvb, 0, 2, ENC_BIG_ENDIAN0x00000000, &local_tunnel);
12832 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_remote_tunnel_id , tvb, 2, 2, ENC_BIG_ENDIAN0x00000000, &remote_tunnel);
12833 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_local_session_id , tvb, 4, 2, ENC_BIG_ENDIAN0x00000000, &local_session);
12834 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_remote_session_id, tvb, 6, 2, ENC_BIG_ENDIAN0x00000000, &remote_session);
12835 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_call_serial_num , tvb, 8, 4, ENC_BIG_ENDIAN0x00000000, &call_serial_number);
12836
12837 proto_item_append_text(proto_tree_get_parent(tree), " : LTID %u LSID %u RTID %u RSID %u CSN %u", local_tunnel, local_session, remote_tunnel, remote_session, call_serial_number);
12838
12839 return 12;
12840}
12841
12842static int dissect_pfcp_nokia_snat_inside_ip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12843{
12844 proto_tree_add_item(tree, hf_pfcp_nokia_snat_inside_ipv4_address, tvb, 0, 4, ENC_BIG_ENDIAN0x00000000);
12845 proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip_to_str(pinfo->pool, tvb, 0)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, 0));
12846
12847 return 4;
12848}
12849
12850static int dissect_pfcp_nokia_access_line_circuit_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12851{
12852 proto_tree_add_item(tree, hf_pfcp_nokia_access_line_circuit_id, tvb, 0, -1, ENC_NA0x00000000);
12853
12854 return tvb_reported_length(tvb);
12855}
12856
12857static int dissect_pfcp_nokia_access_line_remote_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12858{
12859 proto_tree_add_item(tree, hf_pfcp_nokia_access_line_remote_id, tvb, 0, -1, ENC_NA0x00000000);
12860
12861 return tvb_reported_length(tvb);
12862}
12863
12864static int dissect_pfcp_nokia_access_line_params(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12865{
12866 static int * const flags[] = {
12867 &hf_pfcp_nokia_access_line_params_flags_b24_act_up,
12868 &hf_pfcp_nokia_access_line_params_flags_b25_act_down,
12869 &hf_pfcp_nokia_access_line_params_flags_b26_min_up,
12870 &hf_pfcp_nokia_access_line_params_flags_b27_min_down,
12871 &hf_pfcp_nokia_access_line_params_flags_b28_att_up,
12872 &hf_pfcp_nokia_access_line_params_flags_b29_att_down,
12873 &hf_pfcp_nokia_access_line_params_flags_b30_max_up,
12874 &hf_pfcp_nokia_access_line_params_flags_b31_max_down,
12875 &hf_pfcp_nokia_access_line_params_flags_b16_min_up_lp,
12876 &hf_pfcp_nokia_access_line_params_flags_b17_min_down_lp,
12877 &hf_pfcp_nokia_access_line_params_flags_b18_max_inter_delay_up,
12878 &hf_pfcp_nokia_access_line_params_flags_b19_act_inter_delay_up,
12879 &hf_pfcp_nokia_access_line_params_flags_b20_max_inter_delay_down,
12880 &hf_pfcp_nokia_access_line_params_flags_b21_act_inter_delay_down,
12881 &hf_pfcp_nokia_access_line_params_flags_b22_access_loop_encap,
12882 &hf_pfcp_nokia_access_line_params_flags_b23_iw_session,
12883 NULL((void*)0)
12884 };
12885 static int * const fields[] = {
12886 &hf_pfcp_nokia_access_line_params_act_up,
12887 &hf_pfcp_nokia_access_line_params_act_down,
12888 &hf_pfcp_nokia_access_line_params_min_up,
12889 &hf_pfcp_nokia_access_line_params_min_down,
12890 &hf_pfcp_nokia_access_line_params_att_up,
12891 &hf_pfcp_nokia_access_line_params_att_down,
12892 &hf_pfcp_nokia_access_line_params_max_up,
12893 &hf_pfcp_nokia_access_line_params_max_down,
12894 &hf_pfcp_nokia_access_line_params_min_up_lp,
12895 &hf_pfcp_nokia_access_line_params_min_down_lp,
12896 &hf_pfcp_nokia_access_line_params_max_inter_delay_up,
12897 &hf_pfcp_nokia_access_line_params_act_inter_delay_up,
12898 &hf_pfcp_nokia_access_line_params_max_inter_delay_down,
12899 &hf_pfcp_nokia_access_line_params_act_inter_delay_down,
12900 &hf_pfcp_nokia_access_line_params_access_loop_encap,
12901 NULL((void*)0)
12902 };
12903
12904 return dissect_pfcp_flags_and_fields(tvb, pinfo, tree, tvb_reported_length(tvb), flags, fields, hf_pfcp_nokia_access_line_params_flags, ett_pfcp_nokia_access_line_params_flags);
12905}
12906
12907static int dissect_pfcp_nokia_acct_session_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12908{
12909 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_acct_session_id);
12910}
12911
12912static int dissect_pfcp_nokia_fsg_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12913{
12914 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_fsg_template_name);
12915}
12916
12917static int dissect_pfcp_nokia_up_profiles(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12918{
12919 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_up_profile);
12920}
12921
12922static int dissect_pfcp_nokia_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12923{
12924 return call_dissector(gtpv2_uli_handle, tvb, pinfo, tree);
12925}
12926
12927static int dissect_pfcp_nokia_default_qos_id(tvbuff_t *tvb, packet_info *pinfo _U___attribute__((unused)), proto_tree *tree, void *data _U___attribute__((unused)))
12928{
12929 uint32_t id;
12930
12931 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_default_qos_id, tvb, 0, 1, ENC_BIG_ENDIAN0x00000000, &id);
12932 proto_item_append_text(proto_tree_get_parent(tree), " : %u", id);
12933
12934 return 1;
12935}
12936
12937static int dissect_pfcp_nokia_serving_node_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12938{
12939 int offset = 0;
12940 uint64_t serving_node_id_flags_val;
12941 bool_Bool firstField = true1;
12942
12943 static int * const pfcp_serving_node_id_flags[] = {
12944 &hf_pfcp_spare_b7_b3,
12945 &hf_pfcp_nokia_serving_node_id_flg_b2_uuid,
12946 &hf_pfcp_nokia_serving_node_id_flg_b1_v6,
12947 &hf_pfcp_nokia_serving_node_id_flg_b0_v4,
12948 NULL((void*)0)
12949 };
12950
12951 /* Octet 7 Spare Spare Spare Spare Spare UUID V6 V4 */
12952 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_nokia_serving_node_id_flags,
12953 ett_pfcp_nokia_serving_node_id_flags, pfcp_serving_node_id_flags, ENC_BIG_ENDIAN0x00000000, BMT_NO_FALSE0x04 | BMT_NO_INT0x02 | BMT_NO_TFS0x08, &serving_node_id_flags_val);
12954 offset++;
12955
12956 /* The following flags are coded within Octet 5:
12957 * Bit 1 - V4: If this bit is set to "1", then the IPv4 address field shall be present,
12958 * otherwise the IPv4 address field shall not be present.
12959 * Bit 2 - V6: If this bit is set to "1", then the IPv6 address field shall be present,
12960 * otherwise the IPv6 address field shall not be present.
12961 * Bit 3 - UUID: If this bit is set to "1", then the UUID field shall be present,
12962 * otherwise the UUID field shall not be present.
12963 */
12964 if (serving_node_id_flags_val & 0x1) {
12965 /* 0 to 3 IPv4 address */
12966 proto_tree_add_item(tree, hf_pfcp_nokia_serving_node_id_ipv4, tvb, offset, 4, ENC_NA0x00000000);
12967 proto_item_append_text(proto_tree_get_parent(tree), "%s IPv4 %s", firstField ? " :" : ",", tvb_ip_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv4, offset));
12968 firstField = false0;
12969 offset += 4;
12970 }
12971 if (serving_node_id_flags_val & 0x2) {
12972 /* m to (m+15) IPv6 address */
12973 proto_tree_add_item(tree, hf_pfcp_nokia_serving_node_id_ipv6, tvb, offset, 16, ENC_NA0x00000000);
12974 proto_item_append_text(proto_tree_get_parent(tree), "%s IPv6 %s", firstField ? " :" : ",", tvb_ip6_to_str(pinfo->pool, tvb, offset)tvb_address_to_str(pinfo->pool, tvb, AT_IPv6, offset));
12975 firstField = false0;
12976 offset += 16;
12977 }
12978 if (serving_node_id_flags_val & 0x4) {
12979 /* p to (p+15) UUID */
12980 e_guid_t guid;
12981
12982 proto_tree_add_item(tree, hf_pfcp_nokia_serving_node_id_uuid, tvb, offset, 16, ENC_NA0x00000000);
12983 tvb_get_guid(tvb, offset, &guid, ENC_BIG_ENDIAN0x00000000);
12984 proto_item_append_text(proto_tree_get_parent(tree), "%s UUID %s", firstField ? " :" : ",", guid_to_str(pinfo->pool, &guid));
12985 firstField = false0;
Value stored to 'firstField' is never read
12986 offset += 16;
12987 }
12988
12989 return offset;
12990}
12991
12992static int dissect_pfcp_nokia_pcc_rule_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12993{
12994 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_pcc_rule_name);
12995}
12996
12997static int dissect_pfcp_nokia_calltrace_profile(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
12998{
12999 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_calltrace_profile);
13000}
13001
13002static int dissect_pfcp_nokia_custom_charging_group(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U___attribute__((unused)))
13003{
13004 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_custom_charging_group);
13005}
13006
13007static pfcp_generic_ie_t pfcp_nokia_ies[] = {
13008 {VENDOR_NOKIA3729, 32774, "UP Aggregate Route", dissect_pfcp_grouped_ie_wrapper, -1},
13009 {VENDOR_NOKIA3729, 32775, "SAP Template", dissect_pfcp_nokia_sap_template, -1},
13010 {VENDOR_NOKIA3729, 32776, "Group Interface Template", dissect_pfcp_nokia_group_if_template, -1},
13011 {VENDOR_NOKIA3729, 32777, "State Id", dissect_pfcp_nokia_session_state_id, -1},
13012 {VENDOR_NOKIA3729, 32778, "Detailed Statistics", dissect_pfcp_nokia_detailed_statistics, -1},
13013 {VENDOR_NOKIA3729, 32779, "Detailed Error", dissect_pfcp_nokia_detailed_error, -1},
13014 {VENDOR_NOKIA3729, 32780, "Qos Override", dissect_pfcp_nokia_qos_override, -1},
13015 {VENDOR_NOKIA3729, 32781, "Measurement Information", dissect_pfcp_nokia_measurement_information, -1},
13016 {VENDOR_NOKIA3729, 32783, "PFCPSMReq-Flags", dissect_pfcp_nokia_pfpsmreq_flags, -1},
13017 {VENDOR_NOKIA3729, 32787, "UP Function Features", dissect_pfcp_nokia_up_function_features, -1},
13018 {VENDOR_NOKIA3729, 32788, "Create Filter Override", dissect_pfcp_nokia_filter_override, -1},
13019 {VENDOR_NOKIA3729, 32789, "Delete Filter Override", dissect_pfcp_nokia_filter_override, -1},
13020 {VENDOR_NOKIA3729, 32790, "Intermediate Destination", dissect_pfcp_nokia_intermediate_destination, -1},
13021 {VENDOR_NOKIA3729, 32791, "NAT ISA Members", dissect_pfcp_nokia_nat_isa_members, -1},
13022 {VENDOR_NOKIA3729, 32797, "PFCPHB-Flags", dissect_pfcp_nokia_pfcphb_flags, -1},
13023 {VENDOR_NOKIA3729, 32800, "L2TP First Rx LCP Conf Request", dissect_pfcp_nokia_l2tp_lcp_options, -1},
13024 {VENDOR_NOKIA3729, 32801, "L2TP Last Tx LCP Conf Request", dissect_pfcp_nokia_l2tp_lcp_options, -1},
13025 {VENDOR_NOKIA3729, 32802, "L2TP Last Rx LCP Conf Request", dissect_pfcp_nokia_l2tp_lcp_options, -1},
13026 {VENDOR_NOKIA3729, 32803, "L2TP Auth Type", dissect_pfcp_nokia_l2tp_auth_type, -1},
13027 {VENDOR_NOKIA3729, 32804, "L2TP Auth Name", dissect_pfcp_nokia_l2tp_auth_name, -1},
13028 {VENDOR_NOKIA3729, 32805, "L2TP Auth Id", dissect_pfcp_nokia_l2tp_auth_id, -1},
13029 {VENDOR_NOKIA3729, 32806, "L2TP Auth Challenge", dissect_pfcp_nokia_l2tp_auth_challenge, -1},
13030 {VENDOR_NOKIA3729, 32807, "L2TP Auth Response", dissect_pfcp_nokia_l2tp_auth_response, -1},
13031 {VENDOR_NOKIA3729, 32808, "L2TP Tunnel", dissect_pfcp_grouped_ie_wrapper, -1},
13032 {VENDOR_NOKIA3729, 32809, "L2TP Client Endpoint", dissect_pfcp_nokia_l2tp_endpoint, -1},
13033 {VENDOR_NOKIA3729, 32810, "L2TP Server Endpoint", dissect_pfcp_nokia_l2tp_endpoint, -1},
13034 {VENDOR_NOKIA3729, 32811, "L2TP Client Auth Id", dissect_pfcp_nokia_l2tp_client_auth_id, -1},
13035 {VENDOR_NOKIA3729, 32812, "L2TP Server Auth Id", dissect_pfcp_nokia_l2tp_server_auth_id, -1},
13036 {VENDOR_NOKIA3729, 32813, "L2TP Password", dissect_pfcp_nokia_l2tp_password, -1},
13037 {VENDOR_NOKIA3729, 32814, "L2TP Assignment Id", dissect_pfcp_nokia_l2tp_assignment_id, -1},
13038 {VENDOR_NOKIA3729, 32815, "L2TP Private Group Id", dissect_pfcp_nokia_l2tp_private_group_id, -1},
13039 {VENDOR_NOKIA3729, 32816, "L2TP Parameters", dissect_pfcp_nokia_l2tp_parameters, -1},
13040 {VENDOR_NOKIA3729, 32817, "L2TP Ids", dissect_pfcp_nokia_l2tp_ids, -1},
13041 {VENDOR_NOKIA3729, 32819, "SNAT Inside IP", dissect_pfcp_nokia_snat_inside_ip, -1},
13042 {VENDOR_NOKIA3729, 32820, "Access Line Circuit Id", dissect_pfcp_nokia_access_line_circuit_id, -1},
13043 {VENDOR_NOKIA3729, 32821, "Access Line Remote Id", dissect_pfcp_nokia_access_line_remote_id, -1},
13044 {VENDOR_NOKIA3729, 32822, "Access Line Params", dissect_pfcp_nokia_access_line_params, -1},
13045 {VENDOR_NOKIA3729, 32823, "Accounting Session Id", dissect_pfcp_nokia_acct_session_id, -1},
13046 {VENDOR_NOKIA3729, 32830, "FSG Template", dissect_pfcp_nokia_fsg_template, -1},
13047 {VENDOR_NOKIA3729, 32832, "UP Profiles", dissect_pfcp_nokia_up_profiles, -1},
13048 {VENDOR_NOKIA3729, 32833, "User Location Information", dissect_pfcp_nokia_uli, -1},
13049 {VENDOR_NOKIA3729, 32834, "Default Qos Id", dissect_pfcp_nokia_default_qos_id, -1},
13050 {VENDOR_NOKIA3729, 32835, "Serving Node Id", dissect_pfcp_nokia_serving_node_id, -1},
13051 {VENDOR_NOKIA3729, 32836, "PCC Rule Name", dissect_pfcp_nokia_pcc_rule_name, -1},
13052 {VENDOR_NOKIA3729, 32837, "Calltrace Profile", dissect_pfcp_nokia_calltrace_profile, -1},
13053 {VENDOR_NOKIA3729, 32838, "Custom Charging Group", dissect_pfcp_nokia_custom_charging_group, -1},
13054};
13055
13056static void
13057pfcp_init(void)
13058{
13059 pfcp_session_count = 1;
13060 pfcp_session_table = g_hash_table_new(g_direct_hash, g_direct_equal);
13061 pfcp_frame_map = wmem_map_new(wmem_file_scope(), pfcp_info_hash, pfcp_info_equal);
13062
13063}
13064
13065static void
13066pfcp_cleanup(void)
13067{
13068 /* Free up state attached to the pfcp session structures */
13069 if (pfcp_session_table != NULL((void*)0)) {
13070 g_hash_table_destroy(pfcp_session_table);
13071 }
13072 pfcp_session_table = NULL((void*)0);
13073}
13074
13075void
13076proto_register_pfcp(void)
13077{
13078
13079 static hf_register_info hf_pfcp[] = {
13080
13081 { &hf_pfcp_msg_type,
13082 { "Message Type", "pfcp.msg_type",
13083 FT_UINT8, BASE_DEC | BASE_EXT_STRING0x00000200, &pfcp_message_type_ext, 0x0,
13084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13085 },
13086 { &hf_pfcp_msg_length,
13087 { "Length", "pfcp.length",
13088 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13090 },
13091 { &hf_pfcp_hdr_flags,
13092 { "Flags", "pfcp.flags",
13093 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
13094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13095 },
13096 { &hf_pfcp_version,
13097 { "Version", "pfcp.version",
13098 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
13099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13100 },
13101 { &hf_pfcp_fo_flag,
13102 { "Follow On (FO)", "pfcp.fo_flag",
13103 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13105 },
13106 { &hf_pfcp_mp_flag,
13107 { "Message Priority (MP)", "pfcp.mp_flag",
13108 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13110 },
13111 { &hf_pfcp_s_flag,
13112 { "SEID (S)", "pfcp.s",
13113 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13115 },
13116 { &hf_pfcp_spare_b0,
13117 { "Spare", "pfcp.spare_b0",
13118 FT_UINT8, BASE_DEC, NULL((void*)0), 0x01,
13119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13120 },
13121 { &hf_pfcp_spare_b1,
13122 { "Spare", "pfcp.spare_b1",
13123 FT_UINT8, BASE_DEC, NULL((void*)0), 0x02,
13124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13125 },
13126 { &hf_pfcp_spare_b2,
13127 { "Spare", "pfcp.spare_b2",
13128 FT_UINT8, BASE_DEC, NULL((void*)0), 0x04,
13129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13130 },
13131 { &hf_pfcp_spare_b3,
13132 { "Spare", "pfcp.spare_b3",
13133 FT_UINT8, BASE_DEC, NULL((void*)0), 0x08,
13134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13135 },
13136 { &hf_pfcp_spare_b4,
13137 { "Spare", "pfcp.spare_b4",
13138 FT_UINT8, BASE_DEC, NULL((void*)0), 0x10,
13139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13140 },
13141 { &hf_pfcp_spare_b5,
13142 { "Spare", "pfcp.spare_b5",
13143 FT_UINT8, BASE_DEC, NULL((void*)0), 0x20,
13144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13145 },
13146 { &hf_pfcp_spare_b6,
13147 { "Spare", "pfcp.spare_b6",
13148 FT_UINT8, BASE_DEC, NULL((void*)0), 0x40,
13149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13150 },
13151 { &hf_pfcp_spare_b7,
13152 { "Spare", "pfcp.spare_b7",
13153 FT_UINT8, BASE_DEC, NULL((void*)0), 0x80,
13154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13155 },
13156 { &hf_pfcp_spare_b7_b6,
13157 { "Spare", "pfcp.spare_b7_b6",
13158 FT_UINT8, BASE_DEC, NULL((void*)0), 0xc0,
13159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13160 },
13161 { &hf_pfcp_spare_b7_b5,
13162 { "Spare", "pfcp.spare_b7_b5",
13163 FT_UINT8, BASE_DEC, NULL((void*)0), 0xe0,
13164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13165 },
13166 { &hf_pfcp_spare_b7_b4,
13167 { "Spare", "pfcp.spare_b7_b4",
13168 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
13169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13170 },
13171 { &hf_pfcp_spare_b7_b3,
13172 { "Spare", "pfcp.spare_b7_b3",
13173 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf8,
13174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13175 },
13176 { &hf_pfcp_spare_b7_b2,
13177 { "Spare", "pfcp.spare_b7_b2",
13178 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfc,
13179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13180 },
13181 { &hf_pfcp_spare_b7_b1,
13182 { "Spare", "pfcp.spare_b7_b1",
13183 FT_UINT8, BASE_DEC, NULL((void*)0), 0xfe,
13184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13185 },
13186 { &hf_pfcp_spare_oct,
13187 { "Spare", "pfcp.spare_oct",
13188 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13190 },
13191 { &hf_pfcp_spare_h0,
13192 { "Spare", "pfcp.spare_h0",
13193 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
13194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13195 },
13196 { &hf_pfcp_spare_h1,
13197 { "Spare", "pfcp.spare_h1",
13198 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
13199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13200 },
13201 { &hf_pfcp_spare,
13202 { "Spare", "pfcp.spare",
13203 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13205 },
13206 { &hf_pfcp_seid,
13207 { "SEID", "pfcp.seid",
13208 FT_UINT64, BASE_HEX, NULL((void*)0), 0x0,
13209 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13210 },
13211 { &hf_pfcp_seqno,
13212 { "Sequence Number", "pfcp.seqno",
13213 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
13214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13215 },
13216 { &hf_pfcp_response_in,
13217 { "Response In", "pfcp.response_in",
13218 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE)((gpointer) (glong) (FT_FRAMENUM_RESPONSE)), 0x0,
13219 "The response to this PFCP request is in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13220 },
13221 { &hf_pfcp_response_to,
13222 { "Response To", "pfcp.response_to",
13223 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE)((gpointer) (glong) (FT_FRAMENUM_RESPONSE)), 0x0,
13224 "This is a response to the PFCP request in this frame", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13225 },
13226 { &hf_pfcp_response_time,
13227 { "Response Time", "pfcp.response_time",
13228 FT_RELATIVE_TIME, BASE_NONE, NULL((void*)0), 0x0,
13229 "The time between the Request and the Response", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13230 },
13231 { &hf_pfcp_session,
13232 { "Session", "pfcp.session",
13233 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
13234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13235 },
13236 { &hf_pfcp_mp,
13237 { "Message Priority", "pfcp.mp",
13238 FT_UINT24, BASE_DEC, NULL((void*)0), 0xf0,
13239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13240 },
13241 { &hf_pfcp_enterprise_id,
13242 { "Enterprise ID", "pfcp.enterprise_id",
13243 FT_UINT16, BASE_ENTERPRISESBASE_CUSTOM, STRINGS_ENTERPRISES((const void *) (size_t) (enterprises_base_custom)),
13244 0x0, NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) } },
13245 { &hf_pfcp_enterprise_data,
13246 { "Enterprise IE Data", "pfcp.enterprise_ie_data",
13247 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
13248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13249 },
13250 { &hf_pfcp2_ie,
13251 { "IE Type", "pfcp.ie_type",
13252 FT_UINT16, BASE_DEC | BASE_EXT_STRING0x00000200, &pfcp_ie_type_ext, 0x0,
13253 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13254 },
13255 { &hf_pfcp2_enterprise_ie,
13256 { "Enterprise specific IE Type", "pfcp.enterprise_ie",
13257 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13258 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13259 },
13260 { &hf_pfcp2_ie_len,
13261 { "IE Length", "pfcp.ie_len",
13262 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13263 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13264 },
13265 { &hf_pfcp_recovery_time_stamp,
13266 { "Recovery Time Stamp", "pfcp.recovery_time_stamp",
13267 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
13268 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13269 },
13270 { &hf_pfcp2_cause,
13271 { "Cause", "pfcp.cause",
13272 FT_UINT8, BASE_DEC, VALS(pfcp_cause_vals)((0 ? (const struct _value_string*)0 : ((pfcp_cause_vals)))), 0x0,
13273 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13274 },
13275 { &hf_pfcp_node_id_type,
13276 { "Address Type", "pfcp.node_id_type",
13277 FT_UINT8, BASE_DEC, VALS(pfcp_node_id_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_node_id_type_vals
))))
, 0x0f,
13278 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13279 },
13280 { &hf_pfcp_node_id_ipv4,
13281 { "IPv4", "pfcp.node_id_ipv4",
13282 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
13283 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13284 },
13285 { &hf_pfcp_node_id_ipv6,
13286 { "IPv6", "pfcp.node_id_ipv6",
13287 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
13288 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13289 },
13290 { &hf_pfcp_node_id_fqdn,
13291 { "FQDN", "pfcp.node_id_fqdn",
13292 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13293 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13294 },
13295 { &hf_pfcp_b0_v6,
13296 { "V6 (IPv6)", "pfcp.f_seid_flags.v6",
13297 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
13298 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13299 },
13300 { &hf_pfcp_b1_v4,
13301 { "V4 (IPv4)", "pfcp.f_seid_flags.v4",
13302 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
13303 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13304 },
13305 { &hf_pfcp_f_seid_ipv4,
13306 { "IPv4 address", "pfcp.f_seid.ipv4",
13307 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
13308 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13309 },
13310 { &hf_pfcp_f_seid_ipv6,
13311 { "IPv6 address", "pfcp.f_seid.ipv6",
13312 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
13313 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13314 },
13315 { &hf_pfcp_pdr_id,
13316 { "Rule ID", "pfcp.pdr_id",
13317 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13319 },
13320 { &hf_pfcp_precedence,
13321 { "Precedence", "pfcp.precedence",
13322 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13323 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13324 },
13325 { &hf_pfcp_source_interface,
13326 { "Source Interface", "pfcp.source_interface",
13327 FT_UINT8, BASE_DEC, VALS(pfcp_source_interface_vals)((0 ? (const struct _value_string*)0 : ((pfcp_source_interface_vals
))))
, 0x0f,
13328 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13329 },
13330 { &hf_pfcp_fteid_flg_spare,
13331 { "Spare", "pfcp.fteid_flg.spare",
13332 FT_UINT8, BASE_DEC, NULL((void*)0), 0xf0,
13333 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13334 },
13335 { &hf_pfcp_fteid_flg_b3_ch_id,
13336 { "CHID (CHOOSE_ID)", "pfcp.f_teid_flags.ch_id",
13337 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
13338 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13339 },
13340 { &hf_pfcp_fteid_flg_b2_ch,
13341 { "CH (CHOOSE)", "pfcp.f_teid_flags.ch",
13342 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13343 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13344 },
13345 { &hf_pfcp_fteid_flg_b1_v6,
13346 { "V6 (IPv6)", "pfcp.f_teid_flags.v6",
13347 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
13348 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13349 },
13350 { &hf_pfcp_fteid_flg_b0_v4,
13351 { "V4 (IPv4)", "pfcp.f_teid_flags.v4",
13352 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
13353 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13354 },
13355 { &hf_pfcp_f_teid_ch_id,
13356 { "Choose Id", "pfcp.f_teid.choose_id",
13357 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
13358 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13359 },
13360 { &hf_pfcp_f_teid_teid,
13361 { "TEID", "pfcp.f_teid.teid",
13362 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
13363 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13364 },
13365 { &hf_pfcp_f_teid_ipv4,
13366 { "IPv4 address", "pfcp.f_teid.ipv4_addr",
13367 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
13368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13369 },
13370 { &hf_pfcp_f_teid_ipv6,
13371 { "IPv6 address", "pfcp.f_teid.ipv6_addr",
13372 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
13373 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13374 },
13375 { &hf_pfcp_network_instance,
13376 { "Network Instance", "pfcp.network_instance",
13377 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13378 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13379 },
13380 { &hf_pfcp_pdn_type,
13381 { "PDN Type", "pfcp.pdn_type",
13382 FT_UINT8, BASE_DEC, VALS(pfcp_pdn_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_pdn_type_vals))
))
, 0x7,
13383 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13384 },
13385 { &hf_pfcp_multiplier_value_digits,
13386 { "Value Digits", "pfcp.multiplier.value_digits",
13387 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
13388 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13389 },
13390 { &hf_pfcp_multiplier_exponent,
13391 { "Exponent", "pfcp.multiplier.exponent",
13392 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13393 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13394 },
13395 { &hf_pfcp_failed_rule_id_type,
13396 { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
13397 FT_UINT8, BASE_DEC, VALS(pfcp_failed_rule_id_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_failed_rule_id_type_vals
))))
, 0x7,
13398 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13399 },
13400 { &hf_pfcp_time_quota_mechanism_bti_type,
13401 { "Base Time Interval Type", "pfcp.time_quota_mechanism_bti_type",
13402 FT_UINT8, BASE_DEC, VALS(pfcp_time_quota_mechanism_bti_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_time_quota_mechanism_bti_type_vals
))))
, 0x3,
13403 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13404 },
13405 { &hf_pfcp_time_quota_mechanism_bti,
13406 { "Base Time Interval", "pfcp.time_quota_mechanism_bti",
13407 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13408 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13409 },
13410 { &hf_pfcp_ue_ip_address_flag_b0_v6,
13411 { "V6 (IPv6)", "pfcp.ue_ip_address_flag.v6",
13412 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
13413 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13414 },
13415 { &hf_pfcp_ue_ip_address_flag_b1_v4,
13416 { "V4 (IPv4)", "pfcp.ue_ip_address_flag.v4",
13417 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
13418 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13419 },
13420 { &hf_pfcp_ue_ip_address_flag_b2_sd,
13421 { "S/D", "pfcp.ue_ip_address_flag.sd",
13422 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals)((0 ? (const struct true_false_string*)0 : ((&pfcp_ue_ip_add_sd_flag_vals
))))
, 0x04,
13423 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13424 },
13425 { &hf_pfcp_ue_ip_address_flag_b3_v6d,
13426 { "IPv6D", "pfcp.ue_ip_address_flag.v6d",
13427 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals)((0 ? (const struct true_false_string*)0 : ((&pfcp_ue_ip_add_sd_flag_vals
))))
, 0x08,
13428 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13429 },
13430 { &hf_pfcp_ue_ip_address_flag_b4_chv4,
13431 { "CHV4", "pfcp.ue_ip_address_flag.chv4",
13432 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals)((0 ? (const struct true_false_string*)0 : ((&pfcp_ue_ip_add_sd_flag_vals
))))
, 0x10,
13433 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13434 },
13435 { &hf_pfcp_ue_ip_address_flag_b5_chv6,
13436 { "CHV6", "pfcp.ue_ip_address_flag.chv6",
13437 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals)((0 ? (const struct true_false_string*)0 : ((&pfcp_ue_ip_add_sd_flag_vals
))))
, 0x20,
13438 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13439 },
13440 { &hf_pfcp_ue_ip_address_flag_b6_v6pl,
13441 { "IPV6PL", "pfcp.ue_ip_address_flag.v6pl",
13442 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals)((0 ? (const struct true_false_string*)0 : ((&pfcp_ue_ip_add_sd_flag_vals
))))
, 0x40,
13443 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13444 },
13445 { &hf_pfcp_ue_ip_addr_ipv4,
13446 { "IPv4 address", "pfcp.ue_ip_addr_ipv4",
13447 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
13448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13449 },
13450 { &hf_pfcp_ue_ip_add_ipv6,
13451 { "IPv6 address", "pfcp.ue_ip_addr_ipv6",
13452 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
13453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13454 },
13455 { &hf_pfcp_ue_ip_add_ipv6_prefix_delegation_bits,
13456 { "IPv6 Prefix Delegation Bits", "pfcp.ue_ip_addr_ipv6_prefix",
13457 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13458 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13459 },
13460 { &hf_pfcp_ue_ip_add_ipv6_prefix_length,
13461 { "IPv6 Prefix Length", "pfcp.ue_ip_addr_ipv6_prefix_length",
13462 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13463 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13464 },
13465 { &hf_pfcp_application_id,
13466 { "Application Identifier", "pfcp.application_id",
13467 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
13468 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13469 },
13470 { &hf_pfcp_application_id_str,
13471 { "Application Identifier", "pfcp.application_id_str",
13472 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13474 },
13475 { &hf_pfcp_sdf_filter_flags_b0_fd,
13476 { "FD (Flow Description)", "pfcp.sdf_filter.fd",
13477 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13478 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13479 },
13480 { &hf_pfcp_sdf_filter_flags_b1_ttc,
13481 { "TTC (ToS Traffic Class)", "pfcp.sdf_filter.ttc",
13482 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13483 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13484 },
13485 { &hf_pfcp_sdf_filter_flags_b2_spi,
13486 { "SPI (Security Parameter Index)", "pfcp.sdf_filter.spi",
13487 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13488 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13489 },
13490 { &hf_pfcp_sdf_filter_flags_b3_fl,
13491 { "FL (Flow Label)", "pfcp.sdf_filter.fl",
13492 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
13493 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13494 },
13495 { &hf_pfcp_sdf_filter_flags_b4_bid,
13496 { "BID (Bidirectional SDF Filter)", "pfcp.sdf_filter.bid",
13497 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
13498 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13499 },
13500 { &hf_pfcp_flow_desc_len,
13501 { "Length of Flow Description", "pfcp.flow_desc_len",
13502 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13503 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13504 },
13505 { &hf_pfcp_flow_desc,
13506 { "Flow Description", "pfcp.flow_desc",
13507 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13508 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13509 },
13510 { &hf_pfcp_traffic_class,
13511 { "ToS Traffic Class", "pfcp.traffic_class",
13512 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
13513 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13514 },
13515 { &hf_pfcp_traffic_mask,
13516 { "Mask field", "pfcp.traffic_mask",
13517 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
13518 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13519 },
13520 { &hf_pfcp_traffic_dscp,
13521 {"DSCP", "pfcp.traffic_dscp",
13522 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13523 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
13524 },
13525 { &hf_pfcp_spi,
13526 { "Security Parameter Index", "pfcp.spi",
13527 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
13528 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13529 },
13530 { &hf_pfcp_flow_label_spare_bit,
13531 { "Spare bit", "pfcp.flow_label_spare_bit",
13532 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13533 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13534 },
13535 { &hf_pfcp_flow_label,
13536 { "Flow Label", "pfcp.flow_label",
13537 FT_UINT24, BASE_HEX, NULL((void*)0), 0x0FFFFF,
13538 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13539 },
13540 { &hf_pfcp_sdf_filter_id,
13541 { "SDF Filter ID", "pfcp.sdf_filter_id",
13542 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13543 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13544 },
13545
13546 { &hf_pfcp_out_hdr_desc,
13547 { "Outer Header Removal Description", "pfcp.out_hdr_desc",
13548 FT_UINT8, BASE_DEC, VALS(pfcp_out_hdr_desc_vals)((0 ? (const struct _value_string*)0 : ((pfcp_out_hdr_desc_vals
))))
, 0x0,
13549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13550 },
13551 { &hf_pfcp_gtpu_ext_hdr_del_b0_pdu_sess_cont,
13552 { "PDU Session Container to be deleted", "pfcp.gtpu_ext_hdr_del.pdu_sess_cont",
13553 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13555 },
13556 { &hf_pfcp_far_id_flg,
13557 { "Allocation type", "pfcp.far_id_flg",
13558 FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs)((0 ? (const struct true_false_string*)0 : ((&pfcp_id_predef_dynamic_tfs
))))
, 0x80000000,
13559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13560 },
13561 { &hf_pfcp_far_id,
13562 { "FAR ID", "pfcp.far_id",
13563 FT_UINT32, BASE_DEC, NULL((void*)0), 0x7fffffff,
13564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13565 },
13566 { &hf_pfcp_urr_id_flg,
13567 { "Allocation type", "pfcp.urr_id_flg",
13568 FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs)((0 ? (const struct true_false_string*)0 : ((&pfcp_id_predef_dynamic_tfs
))))
, 0x80000000,
13569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13570 },
13571 { &hf_pfcp_urr_id,
13572 { "URR ID", "pfcp.urr_id",
13573 FT_UINT32, BASE_DEC, NULL((void*)0), 0x7fffffff,
13574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13575 },
13576 { &hf_pfcp_qer_id_flg,
13577 { "Allocation type", "pfcp.qer_id_flg",
13578 FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs)((0 ? (const struct true_false_string*)0 : ((&pfcp_id_predef_dynamic_tfs
))))
, 0x80000000,
13579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13580 },
13581 { &hf_pfcp_qer_id,
13582 { "QER ID", "pfcp.qer_id",
13583 FT_UINT32, BASE_DEC, NULL((void*)0), 0x7fffffff,
13584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13585 },
13586 { &hf_pfcp_predef_rules_name,
13587 { "Predefined Rules Name", "pfcp.predef_rules_name",
13588 FT_BYTES, BASE_SHOW_ASCII_PRINTABLE0x00010000, NULL((void*)0), 0x0,
13589 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13590 },
13591 { &hf_pfcp_apply_action_flags_o5_b0_drop,
13592 { "DROP (Drop)", "pfcp.apply_action.drop",
13593 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13594 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13595 },
13596 { &hf_pfcp_apply_action_flags_o5_b1_forw,
13597 { "FORW (Forward)", "pfcp.apply_action.forw",
13598 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13599 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13600 },
13601 { &hf_pfcp_apply_action_flags_o5_b2_buff,
13602 { "BUFF (Buffer)", "pfcp.apply_action.buff",
13603 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13604 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13605 },
13606 { &hf_pfcp_apply_action_flags_o5_b3_nocp,
13607 { "NOCP (Notify the CP function)", "pfcp.apply_action.nocp",
13608 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
13609 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13610 },
13611 { &hf_pfcp_apply_action_flags_o5_b4_dupl,
13612 { "DUPL (Duplicate)", "pfcp.apply_action.dupl",
13613 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
13614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13615 },
13616 { &hf_pfcp_apply_action_flags_o5_b5_ipma,
13617 { "IPMA (IP Multicast Accept)", "pfcp.apply_action.ipma",
13618 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
13619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13620 },
13621 { &hf_pfcp_apply_action_flags_o5_b6_ipmd,
13622 { "IPMD (IP Multicast Deny)", "pfcp.apply_action.ipmd",
13623 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
13624 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13625 },
13626 { &hf_pfcp_apply_action_flags_o5_b7_dfrt,
13627 { "DFRT (Duplicate for Redundant Transmission)", "pfcp.apply_action.dfrt",
13628 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
13629 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13630 },
13631 { &hf_pfcp_apply_action_flags_o6_b0_edrt,
13632 { "EDRT (Eliminate Duplicate Packets for Redundant Transmission)", "pfcp.apply_action.edrt",
13633 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13634 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13635 },
13636 { &hf_pfcp_apply_action_flags_o6_b1_bdpn,
13637 { "BDPN (Buffered Downlink Packet Notification)", "pfcp.apply_action.bdpn",
13638 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13639 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13640 },
13641 { &hf_pfcp_apply_action_flags_o6_b2_ddpn,
13642 { "DDPN (Discared Downlink Packet Notification)", "pfcp.apply_action.ddpn",
13643 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13645 },
13646 { &hf_pfcp_apply_action_flags_o6_b3_fssm,
13647 { "FSSM (Forward packets to lower layer SSM)", "pfcp.apply_action.fssm",
13648 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
13649 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13650 },
13651 { &hf_pfcp_apply_action_flags_o6_b4_mbsu,
13652 { "MBSU (Forward and replicate MBS data using Unicast transport)", "pfcp.apply_action.mbsu",
13653 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
13654 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13655 },
13656
13657 { &hf_pfcp_bar_id,
13658 { "BAR ID", "pfcp.bar_id",
13659 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13660 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13661 },
13662 { &hf_pfcp_fq_csid_node_id_type,
13663 { "FQ-CSID Node-ID Type", "pfcp.fq_csid_node_id_type",
13664 FT_UINT8, BASE_DEC, VALS(pfcp_fq_csid_node_id_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_fq_csid_node_id_type_vals
))))
, 0xf0,
13665 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13666 },
13667 { &hf_pfcp_num_csid,
13668 { "Number of CSID", "pfcp.num_csid",
13669 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0f,
13670 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13671 },
13672 { &hf_pfcp_fq_csid_node_id_ipv4,
13673 { "Node-Address", "pfcp.q_csid_node_id.ipv4",
13674 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
13675 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13676 },
13677 { &hf_pfcp_fq_csid_node_id_ipv6,
13678 { "Node-Address", "pfcp.q_csid_node_id.ipv6",
13679 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
13680 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13681 },
13682 { &hf_pfcp_fq_csid_node_id_mcc_mnc,
13683 { "Node-Address MCC MNC", "pfcp.q_csid_node_id.mcc_mnc",
13684 FT_UINT32, BASE_DEC, NULL((void*)0), 0xfffff000,
13685 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13686 },
13687 { &hf_pfcp_fq_csid_node_id_int,
13688 { "Node-Address Number", "pfcp.q_csid_node_id.int",
13689 FT_UINT32, BASE_DEC, NULL((void*)0), 0x00000fff,
13690 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13691 },
13692 { &hf_pfcp_fq_csid,
13693 { "PDN Connection Set Identifier (CSID)", "pfcp.csid",
13694 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13695 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13696 },
13697 { &hf_pfcp_fq_csid_node_type,
13698 { "Node Type", "pfcp.fq_csid_node_type",
13699 FT_UINT8, BASE_DEC, VALS(pfcp_fq_csid_node_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_fq_csid_node_type_vals
))))
, 0x0f,
13700 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13701 },
13702 { &hf_pfcp_measurement_period,
13703 { "Measurement Period", "pfcp.measurement_period",
13704 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13705 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13706 },
13707 { &hf_pfcp_duration_measurement,
13708 { "Duration", "pfcp.duration_measurement",
13709 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13710 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13711 },
13712 { &hf_pfcp_time_of_first_packet,
13713 { "Time of First Packet", "pfcp.time_of_first_packet",
13714 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
13715 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13716 },
13717 { &hf_pfcp_time_of_last_packet,
13718 { "Time of Last Packet", "pfcp.time_of_last_packet",
13719 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
13720 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13721 },
13722 { &hf_pfcp_dst_interface,
13723 { "Interface", "pfcp.dst_interface",
13724 FT_UINT8, BASE_DEC, VALS(pfcp_dst_interface_vals)((0 ? (const struct _value_string*)0 : ((pfcp_dst_interface_vals
))))
, 0x0f,
13725 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13726 },
13727 { &hf_pfcp_redirect_address_type,
13728 { "Redirect Address Type", "pfcp.redirect_address_type",
13729 FT_UINT8, BASE_DEC, VALS(pfcp_redirect_address_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_redirect_address_type_vals
))))
, 0x0f,
13730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13731 },
13732 { &hf_pfcp_redirect_server_addr_len,
13733 { "Redirect Server Address Length", "pfcp.redirect_server_addr_len",
13734 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13736 },
13737 { &hf_pfcp_redirect_server_address,
13738 { "Redirect Server Address", "pfcp.redirect_server_address",
13739 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13741 },
13742 { &hf_pfcp_other_redirect_server_addr_len,
13743 { "Other Redirect Server Address Length", "pfcp.other_redirect_server_addr_len",
13744 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13745 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13746 },
13747 { &hf_pfcp_other_redirect_server_address,
13748 { "Other Redirect Server Address", "pfcp.other_redirect_server_address",
13749 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
13750 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13751 },
13752 { &hf_pfcp_redirect_port,
13753 { "Redirect Port", "pfcp.redirect_port",
13754 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13755 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13756 },
13757 { &hf_pfcp_outer_hdr_desc_o5_b0_gtp_udp_ipv4,
13758 { "GTP-U/UDP/IPv4", "pfcp.pfcp_outer_hdr_desc.gtpu_udp_ipv4",
13759 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
13760 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13761 },
13762 { &hf_pfcp_outer_hdr_desc_o5_b1_gtp_udp_ipv6,
13763 { "GTP-U/UDP/IPv6", "pfcp.pfcp_outer_hdr_desc.gtpu_udp_ipv6",
13764 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
13765 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13766 },
13767 { &hf_pfcp_outer_hdr_desc_o5_b2_udp_ipv4,
13768 { "UDP/IPv4", "pfcp.pfcp_outer_hdr_desc.udp_ipv4",
13769 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
13770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13771 },
13772 { &hf_pfcp_outer_hdr_desc_o5_b3_udp_ipv6,
13773 { "UDP/IPv6", "pfcp.pfcp_outer_hdr_desc.udp_ipv6",
13774 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
13775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13776 },
13777 { &hf_pfcp_outer_hdr_desc_o5_b4_ipv4,
13778 { "IPv4", "pfcp.pfcp_outer_hdr_desc.ipv4",
13779 FT_BOOLEAN, 16, NULL((void*)0), 0x1000,
13780 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13781 },
13782 { &hf_pfcp_outer_hdr_desc_o5_b5_ipv6,
13783 { "IPv6", "pfcp.pfcp_outer_hdr_desc.ipv6",
13784 FT_BOOLEAN, 16, NULL((void*)0), 0x2000,
13785 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13786 },
13787 { &hf_pfcp_outer_hdr_desc_o5_b6_ctag,
13788 { "C-TAG", "pfcp.pfcp_outer_hdr_desc.ctag",
13789 FT_BOOLEAN, 16, NULL((void*)0), 0x4000,
13790 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13791 },
13792 { &hf_pfcp_outer_hdr_desc_o5_b7_stag,
13793 { "S-TAG", "pfcp.pfcp_outer_hdr_desc.stag",
13794 FT_BOOLEAN, 16, NULL((void*)0), 0x8000,
13795 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13796 },
13797 { &hf_pfcp_outer_hdr_desc_o6_b0_n19,
13798 { "N19 Indication", "pfcp.pfcp_outer_hdr_desc.n19",
13799 FT_BOOLEAN, 16, NULL((void*)0), 0x0001,
13800 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13801 },
13802 { &hf_pfcp_outer_hdr_desc_o6_b1_n6,
13803 { "N6 Indication", "pfcp.pfcp_outer_hdr_desc.n6",
13804 FT_BOOLEAN, 16, NULL((void*)0), 0x0002,
13805 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13806 },
13807 { &hf_pfcp_outer_hdr_desc_o6_b2_ssm_cteid,
13808 { "Low Layer SSM and C-TEID", "pfcp.pfcp_outer_hdr_desc.ssm_cteid",
13809 FT_BOOLEAN, 16, NULL((void*)0), 0x0004,
13810 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13811 },
13812 { &hf_pfcp_outer_hdr_desc_o6_spare,
13813 { "Spare", "pfcp.pfcp_outer_hdr_desc.spare",
13814 FT_UINT16, BASE_DEC, NULL((void*)0), 0x00f8,
13815 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13816 },
13817 { &hf_pfcp_outer_hdr_creation_teid,
13818 { "TEID", "pfcp.outer_hdr_creation.teid",
13819 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
13820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13821 },
13822 { &hf_pfcp_outer_hdr_creation_ipv4,
13823 { "IPv4 Address", "pfcp.outer_hdr_creation.ipv4",
13824 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
13825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13826 },
13827 { &hf_pfcp_outer_hdr_creation_ipv6,
13828 { "IPv6 Address", "pfcp.outer_hdr_creation.ipv6",
13829 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
13830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13831 },
13832 { &hf_pfcp_outer_hdr_creation_port,
13833 { "Port Number", "pfcp.outer_hdr_creation.port",
13834 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
13835 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13836 },
13837 { &hf_pfcp_time_threshold,
13838 { "Time Threshold", "pfcp.time_threshold",
13839 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13840 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13841 },
13842 { &hf_pfcp_forwarding_policy_id_len,
13843 { "Forwarding Policy Identifier Length", "pfcp.forwarding_policy_id_len",
13844 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
13845 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13846 },
13847 { &hf_pfcp_forwarding_policy_id,
13848 { "Forwarding Policy Identifier", "pfcp.forwarding_policy_id",
13849 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
13850 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13851 },
13852 { &hf_pfcp_measurement_method_flags_b0_durat,
13853 { "DURAT (Duration)", "pfcp.measurement_method_flags.durat",
13854 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13855 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13856 },
13857 { &hf_pfcp_measurement_method_flags_b1_volume,
13858 { "VOLUM (Volume)", "pfcp.measurement_method_flags.volume",
13859 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13860 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13861 },
13862 { &hf_pfcp_measurement_method_flags_b2_event,
13863 { "EVENT (Event)", "pfcp.measurement_method_flags.event",
13864 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13865 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13866 },
13867 { &hf_pfcp_subsequent_time_threshold,
13868 { "Subsequent Time Threshold", "pfcp.subsequent_time_threshold",
13869 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13870 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13871 },
13872 { &hf_pfcp_inactivity_detection_time,
13873 { "Inactivity Detection Time", "pfcp.inactivity_detection_time",
13874 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
13875 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13876 },
13877 { &hf_pfcp_monitoring_time,
13878 { "Monitoring Time", "pfcp.monitoring_time",
13879 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
13880 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13881 },
13882 { &hf_pfcp_reporting_triggers_o5_b0_perio,
13883 { "PERIO (Periodic Reporting)", "pfcp.reporting_triggers_flags.perio",
13884 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13886 },
13887 { &hf_pfcp_reporting_triggers_o5_b1_volth,
13888 { "VOLTH (Volume Threshold)", "pfcp.reporting_triggers_flags.volth",
13889 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13891 },
13892 { &hf_pfcp_reporting_triggers_o5_b2_timth,
13893 { "TIMTH (Time Threshold)", "pfcp.reporting_triggers_flags.timth",
13894 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13895 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13896 },
13897 { &hf_pfcp_reporting_triggers_o5_b3_quhti,
13898 { "QUHTI (Quota Holding Time)", "pfcp.reporting_triggers_flags.quhti",
13899 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
13900 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13901 },
13902 { &hf_pfcp_reporting_triggers_o5_b4_start,
13903 { "START (Start of Traffic)", "pfcp.reporting_triggers_flags.start",
13904 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
13905 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13906 },
13907 { &hf_pfcp_reporting_triggers_o5_b5_stopt,
13908 { "STOPT (Stop of Traffic)", "pfcp.reporting_triggers_flags.stopt",
13909 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
13910 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13911 },
13912 { &hf_pfcp_reporting_triggers_o5_b6_droth,
13913 { "DROTH (Dropped DL Traffic Threshold)", "pfcp.reporting_triggers_flags.droth",
13914 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
13915 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13916 },
13917 { &hf_pfcp_reporting_triggers_o5_b7_liusa,
13918 { "LIUSA (Linked Usage Reporting)", "pfcp.reporting_triggers_flags.liusa",
13919 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
13920 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13921 },
13922 { &hf_pfcp_reporting_triggers_o6_b0_volqu,
13923 { "VOLQU (Volume Quota)", "pfcp.reporting_triggers_flags.volqu",
13924 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13925 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13926 },
13927 { &hf_pfcp_reporting_triggers_o6_b1_timqu,
13928 { "TIMQU (Time Quota)", "pfcp.reporting_triggers_flags.timqu",
13929 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13930 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13931 },
13932 { &hf_pfcp_reporting_triggers_o6_b2_envcl,
13933 { "ENVCL (Envelope Closure)", "pfcp.reporting_triggers_flags.envcl",
13934 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13935 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13936 },
13937 { &hf_pfcp_reporting_triggers_o6_b3_macar,
13938 { "MACAR (MAC Addresses Reporting)", "pfcp.reporting_triggers_flags.macar",
13939 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
13940 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13941 },
13942 { &hf_pfcp_reporting_triggers_o6_b4_eveth,
13943 { "EVETH (Event Threshold)", "pfcp.reporting_triggers_flags.eveth",
13944 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
13945 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13946 },
13947 { &hf_pfcp_reporting_triggers_o6_b5_evequ,
13948 { "EVEQU (Event Quota)", "pfcp.reporting_triggers_flags.evequ",
13949 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
13950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13951 },
13952 { &hf_pfcp_reporting_triggers_o6_b6_ipmjl,
13953 { "IPMJL (IP Multicast Join/Leave)", "pfcp.reporting_triggers_flags.ipmjl",
13954 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
13955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13956 },
13957 { &hf_pfcp_reporting_triggers_o6_b7_quvti,
13958 { "QUVTI (Quota Validity Time)", "pfcp.reporting_triggers_flags.quvti",
13959 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
13960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13961 },
13962 { &hf_pfcp_reporting_triggers_o7_b0_reemr,
13963 { "REEMR (REport the End Marker Reception)", "pfcp.reporting_triggers_flags.reemr",
13964 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13966 },
13967 { &hf_pfcp_reporting_triggers_o7_b1_upint,
13968 { "UPINT (User Plane Inactivity Timer)", "pfcp.reporting_triggers_flags.upint",
13969 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13971 },
13972 { &hf_pfcp_usage_report_trigger_o7_b0_evequ,
13973 { "EVEQU (Event Quota)", "pfcp.usage_report_trigger_flags.evequ",
13974 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
13975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13976 },
13977 { &hf_pfcp_usage_report_trigger_o7_b1_tebur,
13978 { "TEBUR (Termination By UP function Report)", "pfcp.usage_report_trigger_flags.tebur",
13979 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
13980 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13981 },
13982 { &hf_pfcp_usage_report_trigger_o7_b2_ipmjl,
13983 { "IPMJL (IP Multicast Join/Leave)", "pfcp.usage_report_trigger_flags.ipmjl",
13984 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
13985 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13986 },
13987 { &hf_pfcp_usage_report_trigger_o7_b3_quvti,
13988 { "QUVTI (Quota Validity Time)", "pfcp.usage_report_trigger_flags.quvti",
13989 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
13990 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13991 },
13992 { &hf_pfcp_usage_report_trigger_o7_b4_emrre,
13993 { "EMRRE (End Marker Reception REport)", "pfcp.usage_report_trigger_flags.emrre",
13994 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
13995 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
13996 },
13997 { &hf_pfcp_usage_report_trigger_o7_b5_upint,
13998 { "UPINT (User Plane Inactivity Timer)", "pfcp.usage_report_trigger_flags.upint",
13999 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
14000 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14001 },
14002 { &hf_pfcp_usage_report_trigger_o6_b0_volqu,
14003 { "VOLQU (Volume Quota)", "pfcp.usage_report_trigger_flags.volqu",
14004 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14006 },
14007 { &hf_pfcp_usage_report_trigger_o6_b1_timqu,
14008 { "TIMQU (Time Quota)", "pfcp.usage_report_trigger_flags.timqu",
14009 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14011 },
14012 { &hf_pfcp_usage_report_trigger_o6_b2_liusa,
14013 { "LIUSA (Linked Usage Reporting)", "pfcp.usage_report_trigger_flags.liusa",
14014 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14016 },
14017 { &hf_pfcp_usage_report_trigger_o6_b3_termr,
14018 { "TERMR (Termination Report)", "pfcp.usage_report_trigger.term",
14019 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
14020 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14021 },
14022 { &hf_pfcp_usage_report_trigger_o6_b4_monit,
14023 { "MONIT (Monitoring Time)", "pfcp.usage_report_trigger.monit",
14024 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
14025 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14026 },
14027 { &hf_pfcp_usage_report_trigger_o6_b5_envcl,
14028 { "ENVCL (Envelope Closure)", "pfcp.usage_report_trigger_flags.envcl",
14029 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
14030 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14031 },
14032 { &hf_pfcp_usage_report_trigger_o6_b7_eveth,
14033 { "EVETH (Event Threshold)", "pfcp.usage_report_trigger_flags.eveth",
14034 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
14035 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14036 },
14037 { &hf_pfcp_usage_report_trigger_o6_b6_macar,
14038 { "MACAR (MAC Addresses Reporting)", "pfcp.usage_report_trigger_flags.macar",
14039 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
14040 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14041 },
14042 { &hf_pfcp_usage_report_trigger_o5_b0_perio,
14043 { "PERIO (Periodic Reporting)", "pfcp.usage_report_trigger_flags.perio",
14044 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14046 },
14047 { &hf_pfcp_usage_report_trigger_o5_b1_volth,
14048 { "VOLTH (Volume Threshold)", "pfcp.usage_report_trigger_flags.volth",
14049 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14051 },
14052 { &hf_pfcp_usage_report_trigger_o5_b2_timth,
14053 { "TIMTH (Time Threshold)", "pfcp.usage_report_trigger_flags.timth",
14054 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14055 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14056 },
14057 { &hf_pfcp_usage_report_trigger_o5_b3_quhti,
14058 { "QUHTI (Quota Holding Time)", "pfcp.usage_report_trigger_flags.quhti",
14059 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
14060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14061 },
14062 { &hf_pfcp_usage_report_trigger_o5_b4_start,
14063 { "START (Start of Traffic)", "pfcp.usage_report_trigger_flags.start",
14064 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
14065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14066 },
14067 { &hf_pfcp_usage_report_trigger_o5_b5_stopt,
14068 { "STOPT (Stop of Traffic)", "pfcp.usage_report_trigger_flags.stopt",
14069 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
14070 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14071 },
14072 { &hf_pfcp_usage_report_trigger_o5_b6_droth,
14073 { "DROTH (Dropped DL Traffic Threshold)", "pfcp.usage_report_trigger_flags.droth",
14074 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
14075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14076 },
14077 { &hf_pfcp_usage_report_trigger_o5_b7_immer,
14078 { "IMMER (Immediate Report)", "pfcp.usage_report_trigger.immer",
14079 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
14080 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14081 },
14082
14083 { &hf_pfcp_volume_threshold_b0_tovol,
14084 { "TOVOL", "pfcp.volume_threshold_flags.tovol",
14085 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14086 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14087 },
14088 { &hf_pfcp_volume_threshold_b1_ulvol,
14089 { "ULVOL", "pfcp.volume_threshold_flags.ulvol",
14090 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14091 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14092 },
14093 { &hf_pfcp_volume_threshold_b2_dlvol,
14094 { "DLVOL", "pfcp.volume_threshold_flags.dlvol",
14095 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14096 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14097 },
14098 { &hf_pfcp_volume_threshold_tovol,
14099 { "Total Volume", "pfcp.volume_threshold.tovol",
14100 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14101 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14102 },
14103 { &hf_pfcp_volume_threshold_ulvol,
14104 { "Uplink Volume", "pfcp.volume_threshold.ulvol",
14105 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14106 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14107 },
14108 { &hf_pfcp_volume_threshold_dlvol,
14109 { "Downlink Volume", "pfcp.volume_threshold.dlvol",
14110 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14111 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14112 },
14113 { &hf_pfcp_volume_quota_b0_tovol,
14114 { "TOVOL", "pfcp.volume_quota_flags.tovol",
14115 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14117 },
14118 { &hf_pfcp_volume_quota_b1_ulvol,
14119 { "ULVOL", "pfcp.volume_quota_flags.ulvol",
14120 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14121 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14122 },
14123 { &hf_pfcp_volume_quota_b2_dlvol,
14124 { "DLVOL", "pfcp.volume_quota_flags.dlvol",
14125 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14126 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14127 },
14128 { &hf_pfcp_volume_quota_tovol,
14129 { "Total Volume", "pfcp.volume_quota.tovol",
14130 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14131 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14132 },
14133 { &hf_pfcp_volume_quota_ulvol,
14134 { "Uplink Volume", "pfcp.volume_quota.ulvol",
14135 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14136 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14137 },
14138 { &hf_pfcp_volume_quota_dlvol,
14139 { "Downlink Volume", "pfcp.volume_quota.dlvol",
14140 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14141 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14142 },
14143 { &hf_pfcp_subseq_volume_threshold_b0_tovol,
14144 { "TOVOL", "pfcp.subseq_volume_threshold.tovol_flg",
14145 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14146 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14147 },
14148 { &hf_pfcp_subseq_volume_threshold_b1_ulvol,
14149 { "ULVOL", "pfcp.subseq_volume_threshold.ulvol_flg",
14150 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14151 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14152 },
14153 { &hf_pfcp_subseq_volume_threshold_b2_dlvol,
14154 { "DLVOL", "pfcp.subseq_volume_threshold.dlvol_flg",
14155 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14156 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14157 },
14158 { &hf_pfcp_subseq_volume_threshold_tovol,
14159 { "Total Volume", "pfcp.subseq_volume_threshold.tovol",
14160 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14161 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14162 },
14163 { &hf_pfcp_subseq_volume_threshold_ulvol,
14164 { "Uplink Volume", "pfcp.subseq_volume_threshold.ulvol",
14165 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14167 },
14168 { &hf_pfcp_subseq_volume_threshold_dlvol,
14169 { "Downlink Volume", "pfcp.subseq_volume_threshold.dlvol",
14170 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14172 },
14173 { &hf_pfcp_time_quota,
14174 { "Time Quota", "pfcp.time_quota",
14175 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
14176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14177 },
14178 { &hf_pfcp_start_time,
14179 { "Start Time", "pfcp.start_time",
14180 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
14181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14182 },
14183 { &hf_pfcp_end_time,
14184 { "End Time", "pfcp.end_time",
14185 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
14186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14187 },
14188 { &hf_pfcp_quota_holding_time,
14189 { "Quota Holding Time", "pfcp.quota_holding_time",
14190 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
14191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14192 },
14193 { &hf_pfcp_dropped_dl_traffic_threshold_b0_dlpa,
14194 { "DLPA", "pfcp.dropped_dl_traffic_threshold.dlpa_flg",
14195 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14197 },
14198 { &hf_pfcp_dropped_dl_traffic_threshold_b1_dlby,
14199 { "DLBY", "pfcp.dropped_dl_traffic_threshold.dlby_flg",
14200 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14202 },
14203 { &hf_pfcp_downlink_packets,
14204 { "Downlink Packets", "pfcp.downlink_packets",
14205 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14207 },
14208 { &hf_pfcp_bytes_downlink_data,
14209 { "Bytes of Downlink Data", "pfcp.bytes_downlink_data",
14210 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14212 },
14213 { &hf_pfcp_qer_correlation_id,
14214 { "QER Correlation ID", "pfcp.qer_correlation_id",
14215 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
14216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14217 },
14218 { &hf_pfcp_gate_status_b0b1_dlgate,
14219 { "DL Gate", "pfcp.gate_status.dlgate",
14220 FT_UINT8, BASE_DEC, VALS(pfcp_gate_status_vals)((0 ? (const struct _value_string*)0 : ((pfcp_gate_status_vals
))))
, 0x03,
14221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14222 },
14223 { &hf_pfcp_gate_status_b3b2_ulgate,
14224 { "UL Gate", "pfcp.gate_status.ulgate",
14225 FT_UINT8, BASE_DEC, VALS(pfcp_gate_status_vals)((0 ? (const struct _value_string*)0 : ((pfcp_gate_status_vals
))))
, 0x0c,
14226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14227 },
14228 { &hf_pfcp_ul_mbr,
14229 { "UL MBR", "pfcp.ul_mbr",
14230 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0,
14231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14232 },
14233 { &hf_pfcp_dl_mbr,
14234 { "DL MBR", "pfcp.dl_mbr",
14235 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0,
14236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14237 },
14238 { &hf_pfcp_ul_gbr,
14239 { "UL GBR", "pfcp.ul_gbr",
14240 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0,
14241 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14242 },
14243 { &hf_pfcp_dl_gbr,
14244 { "DL GBR", "pfcp.dl_gbr",
14245 FT_UINT40, BASE_DEC, NULL((void*)0), 0x0,
14246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14247 },
14248 { &hf_pfcp_report_type_b6_uisr,
14249 { "UISR (UP Initiated Session Request)", "pfcp.report_type.uisr",
14250 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
14251 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14252 },
14253 { &hf_pfcp_report_type_b5_sesr,
14254 { "SESR (Session Report)", "pfcp.report_type.sesr",
14255 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
14256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14257 },
14258 { &hf_pfcp_report_type_b4_tmir,
14259 { "TMIR (TSC Management Information Report)", "pfcp.report_type.tmir",
14260 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
14261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14262 },
14263 { &hf_pfcp_report_type_b3_upir,
14264 { "UPIR (User Plane Inactivity Report)", "pfcp.report_type.upir",
14265 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
14266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14267 },
14268 { &hf_pfcp_report_type_b2_erir,
14269 { "ERIR (Error Indication Report)", "pfcp.report_type.erir",
14270 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14272 },
14273 { &hf_pfcp_report_type_b1_usar,
14274 { "USAR (Usage Report)", "pfcp.report_type.usar",
14275 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14277 },
14278 { &hf_pfcp_report_type_b0_dldr,
14279 { "DLDR (Downlink Data Report)", "pfcp.report_type.dldr",
14280 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14282 },
14283 { &hf_pfcp_offending_ie,
14284 { "Type of the offending IE", "pfcp.offending_ie",
14285 FT_UINT16, BASE_DEC | BASE_EXT_STRING0x00000200, &pfcp_ie_type_ext, 0x0,
14286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14287 },
14288 { &hf_pfcp_offending_ie_value,
14289 { "Value of the offending IE", "pfcp.offending_ie_value",
14290 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
14291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14292 },
14293
14294 { &hf_pfcp_up_function_features_o5_b0_bucp,
14295 { "BUCP", "pfcp.up_function_features.bucp",
14296 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14297 "Downlink Data Buffering in CP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14298 },
14299 { &hf_pfcp_up_function_features_o5_b1_ddnd,
14300 { "DDND", "pfcp.up_function_features.ddnd",
14301 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14302 "Buffering parameter 'Downlink Data Notification Delay", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14303 },
14304 { &hf_pfcp_up_function_features_o5_b2_dlbd,
14305 { "DLBD", "pfcp.up_function_features.dlbd",
14306 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14308 },
14309 { &hf_pfcp_up_function_features_o5_b3_trst,
14310 { "TRST", "pfcp.up_function_features.trst",
14311 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14312 "Traffic Steering", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14313 },
14314 { &hf_pfcp_up_function_features_o5_b4_ftup,
14315 { "FTUP", "pfcp.up_function_features.ftup",
14316 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14317 "F-TEID allocation / release in the UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14318 },
14319 { &hf_pfcp_up_function_features_o5_b5_pfdm,
14320 { "PFDM", "pfcp.up_function_features.pfdm",
14321 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14322 "PFD Management procedure", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14323 },
14324 { &hf_pfcp_up_function_features_o5_b6_heeu,
14325 { "HEEU", "pfcp.up_function_features.heeu",
14326 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14327 "Header Enrichment of Uplink traffic", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14328 },
14329 { &hf_pfcp_up_function_features_o5_b7_treu,
14330 { "TREU", "pfcp.up_function_features.treu",
14331 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14332 "Traffic Redirection Enforcement in the UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14333 },
14334 { &hf_pfcp_up_function_features_o6_b0_empu,
14335 { "EMPU", "pfcp.up_function_features.empu",
14336 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14337 "Sending of End Marker packets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14338 },
14339 { &hf_pfcp_up_function_features_o6_b1_pdiu,
14340 { "PDIU", "pfcp.up_function_features.pdiu",
14341 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14342 "Support of PDI optimised signalling", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14343 },
14344 { &hf_pfcp_up_function_features_o6_b2_udbc,
14345 { "UDBC", "pfcp.up_function_features.udbc",
14346 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14347 "Support of UL/DL Buffering Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14348 },
14349 { &hf_pfcp_up_function_features_o6_b3_quoac,
14350 { "QUOAC", "pfcp.up_function_features.quoac",
14351 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14352 "The UP function supports being provisioned with the Quota Action to apply when reaching quotas", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14353 },
14354 { &hf_pfcp_up_function_features_o6_b4_trace,
14355 { "TRACE", "pfcp.up_function_features.trace",
14356 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14357 "The UP function supports Trace", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14358 },
14359 { &hf_pfcp_up_function_features_o6_b5_frrt,
14360 { "FRRT", "pfcp.up_function_features.frrt",
14361 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14362 "The UP function supports Framed Routing", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14363 },
14364 { &hf_pfcp_up_function_features_o6_b6_pfde,
14365 { "PFDE", "pfcp.up_function_features.pfde",
14366 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14367 "The UP function supports a PFD Contents including a property with multiple values", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14368 },
14369 { &hf_pfcp_up_function_features_o6_b7_epfar,
14370 { "EPFAR", "pfcp.up_function_features.epfar",
14371 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14372 "The UP function supports the Enhanced PFCP Association Release feature", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14373 },
14374 { &hf_pfcp_up_function_features_o7_b0_dpdra,
14375 { "DPDRA", "pfcp.up_function_features.dpdra",
14376 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14377 "The UP function supports Deferred PDR Activation or Deactivation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14378 },
14379 { &hf_pfcp_up_function_features_o7_b1_adpdp,
14380 { "ADPDP", "pfcp.up_function_features.adpdp",
14381 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14382 "The UP function supports the Activation and Deactivation of Pre-defined PDRs", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14383 },
14384 { &hf_pfcp_up_function_features_o7_b2_ueip,
14385 { "UEIP", "pfcp.up_function_features.ueip",
14386 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14387 "The UP function supports allocating UE IP addresses or prefixes", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14388 },
14389 { &hf_pfcp_up_function_features_o7_b3_sset,
14390 { "SSET", "pfcp.up_function_features.sset",
14391 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14392 "UP function support of PFCP sessions successively controlled by different SMFs of a same SMF", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14393 },
14394 { &hf_pfcp_up_function_features_o7_b4_mnop,
14395 { "MNOP", "pfcp.up_function_features.mnop",
14396 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14397 "UPF supports measurement of number of packets which is instructed with the flag 'Measurement of Number of Packets' in a URR", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14398 },
14399 { &hf_pfcp_up_function_features_o7_b5_mte_n4,
14400 { "MTE N4", "pfcp.up_function_features.mte_n4",
14401 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14402 "UPF supports multiple instances of Traffic Endpoint IDs in a PDI", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14403 },
14404 { &hf_pfcp_up_function_features_o7_b6_bundl,
14405 { "BUNDL", "pfcp.up_function_features.bundl",
14406 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14407 "PFCP messages bundling", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14408 },
14409 { &hf_pfcp_up_function_features_o7_b7_gcom,
14410 { "GCOM", "pfcp.up_function_features.gcom",
14411 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14412 "UPF support of 5G VN Group Communication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14413 },
14414 { &hf_pfcp_up_function_features_o8_b0_mpas,
14415 { "MPAS", "pfcp.up_function_features.mpas",
14416 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14417 "UPF support for multiple PFCP associations to the SMFs in an SMF set", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14418 },
14419 { &hf_pfcp_up_function_features_o8_b1_rttl,
14420 { "RTTL", "pfcp.up_function_features.rttl",
14421 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14422 "The UP function supports redundant transmission at transport layer", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14423 },
14424 { &hf_pfcp_up_function_features_o8_b2_vtime,
14425 { "VTIME", "pfcp.up_function_features.vtime",
14426 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14427 "UPF support of quota validity time feature", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14428 },
14429 { &hf_pfcp_up_function_features_o8_b3_norp,
14430 { "NORP", "pfcp.up_function_features.norp",
14431 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14432 "UP function support of Number of Reports", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14433 },
14434 { &hf_pfcp_up_function_features_o8_b4_iptv,
14435 { "IPTV", "pfcp.up_function_features.iptv",
14436 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14437 "UPF support of IPTV service", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14438 },
14439 { &hf_pfcp_up_function_features_o8_b5_ip6pl,
14440 { "IP6PL", "pfcp.up_function_features.ip6pl",
14441 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14442 "UPF supports UE IPv6 address(es) allocation with IPv6 prefix length other than default /64", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14443 },
14444 { &hf_pfcp_up_function_features_o8_b6_tsn,
14445 { "TSN", "pfcp.up_function_features.tsn",
14446 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14447 "Integration of 5GS into a TSN data network is supported by the UPF", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14448 },
14449 { &hf_pfcp_up_function_features_o8_b7_mptcp,
14450 { "MPTCP", "pfcp.up_function_features.mptcp",
14451 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14452 "UPF support of MPTCP Proxy functionality", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14453 },
14454 { &hf_pfcp_up_function_features_o9_b0_atsss_ll,
14455 { "ATSSS-LL", "pfcp.up_function_features.atsss_ll",
14456 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14457 "UPF support of ATSSS-LLL steering functionality", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14458 },
14459 { &hf_pfcp_up_function_features_o9_b1_qfqm,
14460 { "QFQM", "pfcp.up_function_features.qfqm",
14461 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14462 "UPF support of per QoS flow per UE QoS monitoring for packet delay", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14463 },
14464 { &hf_pfcp_up_function_features_o9_b2_gpqm,
14465 { "GPQM", "pfcp.up_function_features.gpqm",
14466 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14467 "UPF support of per GTP-U Path QoS monitoring", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14468 },
14469 { &hf_pfcp_up_function_features_o9_b3_mt_edt,
14470 { "MT-EDT", "pfcp.up_function_features.mtedt",
14471 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14472 "SGW-U support of reporting the size of DL Data Packets", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14473 },
14474 { &hf_pfcp_up_function_features_o9_b4_ciot,
14475 { "CIOT", "pfcp.up_function_features.ciot",
14476 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14477 "UPF support of CIoT feature", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14478 },
14479 { &hf_pfcp_up_function_features_o9_b5_ethar,
14480 { "ETHAR", "pfcp.up_function_features.ethar",
14481 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14482 "UPF support of Ethernet PDU Session Anchor Relocation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14483 },
14484 { &hf_pfcp_up_function_features_o9_b6_ddds,
14485 { "DDDS", "pfcp.up_function_features.ddds",
14486 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14487 "UPF support of reporting of the first buffered / discarded data for downlink", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14488 },
14489 { &hf_pfcp_up_function_features_o9_b7_rds,
14490 { "RDS", "pfcp.up_function_features.rds",
14491 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14492 "UP function support of Reliable Data Service", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14493 },
14494 { &hf_pfcp_up_function_features_o10_b0_rttwp,
14495 { "RTTWP", "pfcp.up_function_features.rttwp",
14496 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14497 "UPF support of RTT measurement towards the UE without PMF", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14498 },
14499 { &hf_pfcp_up_function_features_o10_b1_quasf,
14500 { "QUASF", "pfcp.up_function_features.quasf",
14501 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14502 "The UP function supports being provisioned in a URR with an Exempted Application ID for Quota Action or an Exempted SDF Filter for Quota Action which is to be used when the quota is exhausted", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14503 },
14504 { &hf_pfcp_up_function_features_o10_b2_nspoc,
14505 { "NSPOC", "pfcp.up_function_features.nspoc",
14506 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14507 "UP function supports notifying start of Pause of Charging via user plane", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14508 },
14509 { &hf_pfcp_up_function_features_o10_b3_l2tp,
14510 { "L2TP", "pfcp.up_function_features.l2tp",
14511 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14512 "UP function supports L2TP", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14513 },
14514 { &hf_pfcp_up_function_features_o10_b4_upber,
14515 { "UPBER", "pfcp.up_function_features.upber",
14516 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14517 "UP function supports the uplink packet buffering during EAS relocation", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14518 },
14519 { &hf_pfcp_up_function_features_o10_b5_resps,
14520 { "RESPS", "pfcp.up_function_features.resps",
14521 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14522 "UP function supports Restoration of PFCP Session association", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14523 },
14524 { &hf_pfcp_up_function_features_o10_b6_iprep,
14525 { "IPREP", "pfcp.up_function_features.iprep",
14526 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14527 "UP function supports IP Address and Port number replacement", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14528 },
14529 { &hf_pfcp_up_function_features_o10_b7_dnsts,
14530 { "DNSTS", "pfcp.up_function_features.dnsts",
14531 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14532 "UP function support DNS Traffic Steering based on FQDN in the DNS Query message", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14533 },
14534 { &hf_pfcp_up_function_features_o11_b0_drqos,
14535 { "DRQOS", "pfcp.up_function_features.drqos",
14536 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14537 "UP function supports Direct Reporting of QoS monitoring events to Local NEF or AF", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14538 },
14539 { &hf_pfcp_up_function_features_o11_b1_mbsn4,
14540 { "MBSN4", "pfcp.up_function_features.mbsn4",
14541 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14542 "UPF supports sending MBS multicast session data to associated PDU sessions using 5GC individual delivery", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14543 },
14544 { &hf_pfcp_up_function_features_o11_b2_psuprm,
14545 { "MBSN4", "pfcp.up_function_features.mbsn4",
14546 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14547 "UP function supports Per Slice UP Resource Management", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14548 },
14549 { &hf_pfcp_up_function_features_o11_b3_eppi,
14550 { "EPPI", "pfcp.up_function_features.eppi",
14551 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14552 "UP function supports Enhanced Provisioning of Paging Policy Indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14553 },
14554 { &hf_pfcp_up_function_features_o11_b4_ratp,
14555 { "RATP", "pfcp.up_function_features.ratp",
14556 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14557 "UP function supports Redirection Address Types set to Port, IPv4 address and Port, IPv6 address and Port, or IPv4 and IPv6 addresses and Port", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14558 },
14559 { &hf_pfcp_up_function_features_o11_b5_upidp,
14560 { "UPIDP", "pfcp.up_function_features.upidp",
14561 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14562 "UP function supports User Plane Inactivity Detection and reporting per PDR", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14563 },
14564 { &hf_pfcp_up_function_features_o11_b6_afsfc,
14565 { "AFSFC", "pfcp.up_function_features.afsfc",
14566 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14567 "UP function supports inserting metadata when Application Function influence on Service Function Chaining", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14568 },
14569 { &hf_pfcp_up_function_features_o11_b7_mpquic,
14570 { "MPQUIC", "pfcp.up_function_features.mpquic",
14571 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14572 "UPF support of MPQUIC Proxy functionality", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14573 },
14574 { &hf_pfcp_up_function_features_o12_b0_redsm,
14575 { "REDSM", "pfcp.up_function_features.redsm",
14576 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14577 "UP function supports the Redundant Steering Mode", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14578 },
14579 { &hf_pfcp_up_function_features_o12_b1_dbdm,
14580 { "DBDM", "pfcp.up_function_features.dbdm",
14581 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14582 "The buffering parameters 'DL Buffering Duration' and 'DL Buffering Suggested Packet Count' in PFCP Session Modification Request are supported by the UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14583 },
14584 { &hf_pfcp_up_function_features_o12_b2_tscts,
14585 { "TSCTS", "pfcp.up_function_features.tscts",
14586 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14587 "AF requested support of Time Synchronization and/or Time Sensitive Communication is supported by the UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14588 },
14589 { &hf_pfcp_up_function_features_o12_b3_drtsc,
14590 { "DRTSC", "pfcp.up_function_features.drtsc",
14591 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14592 "UP function supports Direct Reporting of TSC management information events to TSN AF or TSCTSF", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14593 },
14594 { &hf_pfcp_up_function_features_o12_b4_n6jedb,
14595 { "N6JEDB", "pfcp.up_function_features.n6jedb",
14596 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14597 "UPF support of N6 Jitter, DL Periodicity and UL Periodicity Measurement and Reporting, and End of Data Burst marking", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14598 },
14599 { &hf_pfcp_up_function_features_o12_b5_qmcon,
14600 { "QMCON", "pfcp.up_function_features.qmcon",
14601 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14602 "UPF support of QoS monitoring of Congestion information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14603 },
14604 { &hf_pfcp_up_function_features_o12_b6_detnet,
14605 { "DETNET", "pfcp.up_function_features.detnet",
14606 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14607 "Deterministic Networking is supported by the UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14608 },
14609 { &hf_pfcp_up_function_features_o12_b7_eml4s,
14610 { "EML4S", "pfcp.up_function_features.eml4s",
14611 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14612 "UP function supports ECN Marking for L4S", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14613 },
14614 { &hf_pfcp_up_function_features_o13_b0_pdusm,
14615 { "PDUSM", "pfcp.up_function_features.pdusm",
14616 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14617 "UP function supports PDU Set Marking", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14618 },
14619 { &hf_pfcp_up_function_features_o13_b1_cntl,
14620 { "CN-TL", "pfcp.up_function_features.cntl",
14621 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14622 "UPF support of the TSN Talker and Listener (TL) functionality", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14623 },
14624 { &hf_pfcp_up_function_features_o13_b2_qmdrm,
14625 { "QMDRM", "pfcp.up_function_features.qmdrm",
14626 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14627 "UPF support of QoS monitoring of Data Rate Measurement", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14628 },
14629 { &hf_pfcp_up_function_features_o13_b3_edbnc,
14630 { "EDBNC", "pfcp.up_function_features.edbnc",
14631 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14632 "UP function supports Extended DL Buffering Notification Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14633 },
14634 { &hf_pfcp_up_function_features_o13_b4_mtsdt,
14635 { "MT-SDT", "pfcp.up_function_features.mtsdt",
14636 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14637 "UPF support of reporting the size of DL Data Packets per QoS flow", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14638 },
14639 { &hf_pfcp_up_function_features_o13_b5_upsbies,
14640 { "UPSBIES", "pfcp.up_function_features.upsbies",
14641 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14642 "UPF support of event subscription via Service Based Interface", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14643 },
14644 { &hf_pfcp_up_function_features_o13_b7_un6tu,
14645 { "UN6TU", "pfcp.up_function_features.un6tu",
14646 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14647 "UPF supports to allocate a mapped N6 IP address and perform IP replacement", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14648 },
14649 { &hf_pfcp_up_function_features_o13_b6_umn6ip,
14650 { "UMN6IP", "pfcp.up_function_features.umn6ip",
14651 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14652 "UPF supports N6 tunnelling using N6 routing information", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14653 },
14654 { &hf_pfcp_up_function_features_o14_b0_mbsch,
14655 { "MBSCH", "pfcp.up_function_features.mbsch",
14656 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14657 "MB-UPF support of MBS charging", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14658 },
14659
14660 { &hf_pfcp_sequence_number,
14661 { "Sequence Number", "pfcp.sequence_number",
14662 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
14663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14664 },
14665 { &hf_pfcp_metric,
14666 { "Metric", "pfcp.metric",
14667 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
14668 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14669 },
14670 { &hf_pfcp_timer_unit,
14671 { "Timer unit", "pfcp.timer_unit",
14672 FT_UINT8, BASE_DEC, VALS(pfcp_timer_unit_vals)((0 ? (const struct _value_string*)0 : ((pfcp_timer_unit_vals
))))
, 0xe0,
14673 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14674 },
14675 { &hf_pfcp_timer_value,
14676 { "Timer value", "pfcp.timer_value",
14677 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1f,
14678 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14679 },
14680 { &hf_pfcp_volume_measurement_b0_tovol,
14681 { "TOVOL", "pfcp.volume_measurement_flags.tovol",
14682 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14683 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14684 },
14685 { &hf_pfcp_volume_measurement_b1_ulvol,
14686 { "ULVOL", "pfcp.volume_measurement_flags.ulvol",
14687 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14688 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14689 },
14690 { &hf_pfcp_volume_measurement_b2_dlvol,
14691 { "DLVOL", "pfcp.volume_measurement_flags.dlvol",
14692 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14693 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14694 },
14695 { &hf_pfcp_volume_measurement_b3_tonop,
14696 { "TONOP", "pfcp.volume_measurement_flags.tonop",
14697 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
14698 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14699 },
14700 { &hf_pfcp_volume_measurement_b4_ulnop,
14701 { "ULNOP", "pfcp.volume_measurement_flags.ulnop",
14702 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
14703 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14704 },
14705 { &hf_pfcp_volume_measurement_b5_dlnop,
14706 { "DLNOP", "pfcp.volume_measurement_flags.dlnops",
14707 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
14708 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14709 },
14710 { &hf_pfcp_vol_meas_tovol,
14711 { "Total Volume", "pfcp.volume_measurement.tovol",
14712 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14714 },
14715 { &hf_pfcp_vol_meas_ulvol,
14716 { "Uplink Volume", "pfcp.volume_measurement.ulvol",
14717 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14719 },
14720 { &hf_pfcp_vol_meas_dlvol,
14721 { "Downlink Volume", "pfcp.volume_measurement.dlvol",
14722 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14723 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14724 },
14725 { &hf_pfcp_vol_meas_tonop,
14726 { "Total Number of Packets", "pfcp.volume_measurement.tonop",
14727 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14728 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14729 },
14730 { &hf_pfcp_vol_meas_ulnop,
14731 { "Uplink Number of Packets", "pfcp.volume_measurement.ulnop",
14732 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14733 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14734 },
14735 { &hf_pfcp_vol_meas_dlnop,
14736 { "Downlink Number of Packets", "pfcp.volume_measurement.dlnop",
14737 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
14738 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14739 },
14740 { &hf_pfcp_cp_function_features_o5_b0_load,
14741 { "LOAD", "pfcp.cp_function_features.load",
14742 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14743 "Load Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14744 },
14745 { &hf_pfcp_cp_function_features_o5_b1_ovrl,
14746 { "OVRL", "pfcp.cp_function_features.ovrl",
14747 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14748 "Overload Control", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14749 },
14750 { &hf_pfcp_cp_function_features_o5_b2_epfar,
14751 { "EPFAR", "pfcp.cp_function_features.epfar",
14752 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
14753 "The CP function supports the Enhanced PFCP Association Release feature", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14754 },
14755 { &hf_pfcp_cp_function_features_o5_b3_sset,
14756 { "SSET", "pfcp.cp_function_features.sset",
14757 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
14758 "SMF support of PFCP sessions successively controlled by different SMFs of a same SMF Set", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14759 },
14760 { &hf_pfcp_cp_function_features_o5_b4_bundl,
14761 { "BUNDL", "pfcp.cp_function_features.bundl",
14762 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
14763 "PFCP messages bundling", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14764 },
14765 { &hf_pfcp_cp_function_features_o5_b5_mpas,
14766 { "MPAS", "pfcp.cp_function_features.mpas",
14767 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
14768 "SMF support for multiple PFCP associations from an SMF set to a single UPF", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14769 },
14770 { &hf_pfcp_cp_function_features_o5_b6_ardr,
14771 { "ARDR", "pfcp.cp_function_features.ardr",
14772 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
14773 "CP function supports Additional Usage Reports in the PFCP Session Deletion Response", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14774 },
14775 { &hf_pfcp_cp_function_features_o5_b7_uiaur,
14776 { "UIAUR", "pfcp.cp_function_features.uiaur",
14777 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
14778 "CP function supports the UE IP Address Usage Reporting feature", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14779 },
14780 { &hf_pfcp_cp_function_features_o6_b0_psucc,
14781 { "PSUCC", "pfcp.cp_function_features.psucc",
14782 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
14783 "CP function supports PFCP session establishment or modification with Partial Success", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14784 },
14785 { &hf_pfcp_cp_function_features_o6_b1_rpgur,
14786 { "RPGUR", "pfcp.cp_function_features.rpgur",
14787 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
14788 "CP function supports the Peer GTP-U Entity Restart Reporting", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14789 },
14790
14791 { &hf_pfcp_usage_information_b0_bef,
14792 { "BEF (Before)", "pfcp.usage_information.bef",
14793 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14795 },
14796 { &hf_pfcp_usage_information_b1_aft,
14797 { "AFT (After)", "pfcp.usage_information.aft",
14798 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14800 },
14801 { &hf_pfcp_usage_information_b2_uae,
14802 { "UAE (Usage After Enforcement)", "pfcp.usage_information.uae",
14803 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14805 },
14806 { &hf_pfcp_usage_information_b3_ube,
14807 { "UBE (Usage Before Enforcement)", "pfcp.usage_information.ube",
14808 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
14809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14810 },
14811 { &hf_pfcp_application_instance_id,
14812 { "Application Instance Identifier", "pfcp.application_instance_id",
14813 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
14814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14815 },
14816 { &hf_pfcp_application_instance_id_str,
14817 { "Application Instance Identifier", "pfcp.application_instance_id_str",
14818 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
14819 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14820 },
14821 { &hf_pfcp_flow_dir,
14822 { "Flow Direction", "pfcp.flow_dir",
14823 FT_UINT8, BASE_DEC, VALS(pfcp_flow_dir_vals)((0 ? (const struct _value_string*)0 : ((pfcp_flow_dir_vals))
))
, 0x07,
14824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14825 },
14826 { &hf_pfcp_packet_rate_b0_ulpr,
14827 { "ULPR (Uplink Packet Rate)", "pfcp.packet_rate.ulpr",
14828 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
14829 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14830 },
14831 { &hf_pfcp_packet_rate_b1_dlpr,
14832 { "DLPR (Downlink Packet Rate)", "pfcp.packet_rate.dlpr",
14833 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
14834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14835 },
14836 { &hf_pfcp_packet_rate_b2_aprc,
14837 { "APRC (Additional Packet Rate Control)", "pfcp.packet_rate.aprc",
14838 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
14839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14840 },
14841 { &hf_pfcp_ul_time_unit,
14842 { "Uplink Time Unit", "pfcp.ul_time_unit",
14843 FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals)((0 ? (const struct _value_string*)0 : ((pfcp_pr_time_unit_vals
))))
, 0x07,
14844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14845 },
14846 { &hf_pfcp_max_ul_pr,
14847 { "Maximum Uplink Packet Rate", "pfcp.max_ul_pr",
14848 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
14849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14850 },
14851 { &hf_pfcp_dl_time_unit,
14852 { "Downlink Time Unit", "pfcp.dl_time_unit",
14853 FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals)((0 ? (const struct _value_string*)0 : ((pfcp_pr_time_unit_vals
))))
, 0x07,
14854 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14855 },
14856 { &hf_pfcp_max_dl_pr,
14857 { "Maximum Downlink Packet Rate", "pfcp.max_dl_pr",
14858 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
14859 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14860 },
14861 { &hf_pfcp_a_ul_time_unit,
14862 { "Additional Uplink Time Unit", "pfcp.a_ul_time_unit",
14863 FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals)((0 ? (const struct _value_string*)0 : ((pfcp_pr_time_unit_vals
))))
, 0x07,
14864 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14865 },
14866 { &hf_pfcp_a_max_ul_pr,
14867 { "Additional Maximum Uplink Packet Rate", "pfcp.a_max_ul_pr",
14868 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
14869 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14870 },
14871 { &hf_pfcp_a_dl_time_unit,
14872 { "Additional Downlink Time Unit", "pfcp.a_dl_time_unit",
14873 FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals)((0 ? (const struct _value_string*)0 : ((pfcp_pr_time_unit_vals
))))
, 0x07,
14874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14875 },
14876 { &hf_pfcp_a_max_dl_pr,
14877 { "Additional Maximum Downlink Packet Rate", "pfcp.a_max_dl_pr",
14878 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
14879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14880 },
14881 { &hf_pfcp_dl_flow_level_marking_b0_ttc,
14882 { "TTC (ToS/Traffic Class)", "pfcp.dl_flow_level_marking.ttc",
14883 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
14884 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14885 },
14886 { &hf_pfcp_dl_flow_level_marking_b1_sci,
14887 { "SCI(Service Class Indicator)", "pfcp.dl_flow_level_marking.sci",
14888 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
14889 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14890 },
14891 { &hf_pfcp_sci,
14892 { "Service Class Indicator", "pfcp.sci",
14893 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
14894 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14895 },
14896 { &hf_pfcp_dl_data_notification_delay,
14897 { "Delay Value", "pfcp.dl_data_notification_delay",
14898 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
14899 "Delay Value in integer multiples of 50 millisecs, or zero", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14900 },
14901 { &hf_pfcp_packet_count,
14902 { "Packet Count", "pfcp.packet_count",
14903 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
14904 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14905 },
14906 { &hf_pfcp_dl_data_service_inf_b0_ppi,
14907 { "PPI(Paging Policy Indication)", "pfcp.dl_data_service_inf.ppi",
14908 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
14909 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14910 },
14911 { &hf_pfcp_dl_data_service_inf_b1_qfii,
14912 { "QFII(QoS Flow Identifier)", "pfcp.dl_data_service_inf.qfii",
14913 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
14914 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14915 },
14916 { &hf_pfcp_dl_data_service_inf_b2_dlpsi,
14917 { "DLPSI(DL Packet Size Indication)", "pfcp.dl_data_service_inf.dlpsi",
14918 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
14919 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14920 },
14921 { &hf_pfcp_paging_policy_indication,
14922 { "Paging Policy Indication", "pfcp.dl_data_service_inf.paging_policy_indication",
14923 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7f,
14924 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14925 },
14926 { &hf_pfcp_dldatapacketsize,
14927 { "DL Data Packet Size", "pfcp.dl_data_service_inf.dlpacketsize",
14928 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
14929 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14930 },
14931 { &hf_pfcp_pfcpsmreq_flags_b0_drobu,
14932 { "DROBU (Drop Buffered Packets)", "pfcp.smreq_flags.drobu",
14933 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14935 },
14936 { &hf_pfcp_pfcpsmreq_flags_b1_sndem,
14937 { "SNDEM (Send End Marker Packets)", "pfcp.smreq_flags.sndem",
14938 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14940 },
14941 { &hf_pfcp_pfcpsmreq_flags_b2_qaurr,
14942 { "QAURR (Query All URRs)", "pfcp.smreq_flags.qaurr",
14943 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14945 },
14946 { &hf_pfcp_pfcpsmreq_flags_b3_sumpc,
14947 { "SUMPC (Stop of Usage Measurement to Pause Charging)", "pfcp.smreq_flags.sumpc",
14948 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
14949 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14950 },
14951 { &hf_pfcp_pfcpsmreq_flags_b4_rumuc,
14952 { "RUMUC (Resume of Usage Measurement to Un-pause of Charging)", "pfcp.smreq_flags.rumuc",
14953 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
14954 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14955 },
14956 { &hf_pfcp_pfcpsmreq_flags_b5_deteid,
14957 { "DETEID (Delete All DL N3mb and/or N19mb F-TEIDs)", "pfcp.smreq_flags.deteid",
14958 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
14959 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14960 },
14961 { &hf_pfcp_pfcpsmreq_flags_b6_hrsbom,
14962 { "HRSBOM (HR-SBO Mode)", "pfcp.smreq_flags.hrsbom",
14963 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
14964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14965 },
14966 { &hf_pfcp_pfcpsrrsp_flags_b0_drobu,
14967 { "DROBU (Drop Buffered Packets)", "pfcp.srrsp_flags.drobu",
14968 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14970 },
14971 { &hf_pfcp_pfd_contents_flags_b0_fd,
14972 { "FD (Flow Description)", "pfcp.pfd_contents_flags.fd",
14973 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
14974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14975 },
14976 { &hf_pfcp_pfd_contents_flags_b1_url,
14977 { "URL (URL)", "pfcp.pfd_contents_flags.url",
14978 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
14979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14980 },
14981 { &hf_pfcp_pfd_contents_flags_b2_dn,
14982 { "DN (Domain Name)", "pfcp.pfd_contents_flags.dn",
14983 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
14984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14985 },
14986 { &hf_pfcp_pfd_contents_flags_b3_cp,
14987 { "CP (Custom PFD Content)", "pfcp.pfd_contents_flags.cp",
14988 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
14989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14990 },
14991 { &hf_pfcp_pfd_contents_flags_b4_dnp,
14992 { "DNP (Domain Name Protocol)", "pfcp.pfd_contents_flags.dnp",
14993 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
14994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
14995 },
14996 { &hf_pfcp_pfd_contents_flags_b5_afd,
14997 { "AFD (Additional Flow Description)", "pfcp.pfd_contents_flags.afd",
14998 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
14999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15000 },
15001 { &hf_pfcp_pfd_contents_flags_b6_aurl,
15002 { "AURL (Additional URL)", "pfcp.pfd_contents_flags.aurl",
15003 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
15004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15005 },
15006 { &hf_pfcp_pfd_contents_flags_b7_adnp,
15007 { "ADNP (Additional Domain Name and Domain Name Protocol)", "pfcp.pfd_contents_flags.adnp",
15008 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
15009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15010 },
15011 { &hf_pfcp_url_len,
15012 { "Length of URL", "pfcp.url_len",
15013 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15015 },
15016 { &hf_pfcp_url,
15017 { "URL", "pfcp.url",
15018 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15020 },
15021 { &hf_pfcp_dn_len,
15022 { "Length of Domain Name", "pfcp.dn_len",
15023 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15025 },
15026 { &hf_pfcp_dn,
15027 { "Domain Name", "pfcp.dn",
15028 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15030 },
15031 { &hf_pfcp_cp_len,
15032 { "Length of Custom PFD Content", "pfcp.cp_len",
15033 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15035 },
15036 { &hf_pfcp_cp,
15037 { "Custom PFD Content", "pfcp.cp",
15038 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15040 },
15041 { &hf_pfcp_dnp_len,
15042 { "Length of Domain Name Protocol", "pfcp.dnp_len",
15043 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15045 },
15046 { &hf_pfcp_dnp,
15047 { "Domain Name Protocol", "pfcp.dnp",
15048 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15050 },
15051 { &hf_pfcp_afd_len,
15052 { "Length of Additional Flow Description", "pfcp.adf_len",
15053 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15055 },
15056 { &hf_pfcp_aurl_len,
15057 { "Length of Additional URL", "pfcp.aurl_len",
15058 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15060 },
15061 { &hf_pfcp_adnp_len,
15062 { "Length of Additional Domain Name and Domain Name Protocol", "pfcp.adnp_len",
15063 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15065 },
15066 { &hf_pfcp_header_type,
15067 { "Header Type", "pfcp.header_type",
15068 FT_UINT8, BASE_DEC, VALS(pfcp_header_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_header_type_vals
))))
, 0x1f,
15069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15070 },
15071 { &hf_pfcp_hf_len,
15072 { "Length of Header Field Name", "pfcp.hf_len",
15073 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15075 },
15076 { &hf_pfcp_hf_name,
15077 { "Header Field Name", "pfcp.hf_name",
15078 FT_BYTES, BASE_SHOW_ASCII_PRINTABLE0x00010000, NULL((void*)0), 0x0,
15079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15080 },
15081 { &hf_pfcp_hf_val_len,
15082 { "Length of Header Field Value", "pfcp.hf_val_len",
15083 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15085 },
15086 { &hf_pfcp_hf_val,
15087 { "Header Field Value", "pfcp.hf_val",
15088 FT_BYTES, BASE_SHOW_ASCII_PRINTABLE0x00010000, NULL((void*)0), 0x0,
15089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15090 },
15091
15092 { &hf_pfcp_measurement_info_b0_mbqe,
15093 { "MBQE (Measurement Before QoS Enforcement)", "pfcp.measurement_info.fd",
15094 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15095 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15096 },
15097 { &hf_pfcp_measurement_info_b1_inam,
15098 { "INAM (Inactive Measurement)", "pfcp.measurement_info.inam",
15099 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
15100 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15101 },
15102 { &hf_pfcp_measurement_info_b2_radi,
15103 { "RADI (Reduced Application Detection Information)", "pfcp.measurement_info.radi",
15104 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
15105 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15106 },
15107 { &hf_pfcp_measurement_info_b3_istm,
15108 { "ISTM (Immediate Start Time Metering)", "pfcp.measurement_info.istm",
15109 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
15110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15111 },
15112 { &hf_pfcp_measurement_info_b4_mnop,
15113 { "MNOP (Measurement of Number of Packets)", "pfcp.measurement_info.mnop",
15114 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
15115 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15116 },
15117 { &hf_pfcp_measurement_info_b5_sspoc,
15118 { "SSPOC (Send Start Pause of Charging)", "pfcp.measurement_info.sspoc",
15119 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
15120 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15121 },
15122 { &hf_pfcp_measurement_info_b6_aspoc,
15123 { "ASPOC (Applicable for Start Pause of Charging)", "pfcp.measurement_info.aspoc",
15124 FT_BOOLEAN, 8, NULL((void*)0), 0x40,
15125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15126 },
15127 { &hf_pfcp_measurement_info_b7_ciam,
15128 { "CIAM (Control of Inactive Measurement)", "pfcp.measurement_info.ciam",
15129 FT_BOOLEAN, 8, NULL((void*)0), 0x80,
15130 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15131 },
15132 { &hf_pfcp_node_report_type_b0_upfr,
15133 { "UPFR (User Plane Path Failure Report)", "pfcp.node_report_type.upfr",
15134 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15135 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15136 },
15137 { &hf_pfcp_node_report_type_b1_uprr,
15138 { "UPRR (User Plane Path Recovery Report)", "pfcp.node_report_type.uprr",
15139 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
15140 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15141 },
15142 { &hf_pfcp_node_report_type_b2_ckdr,
15143 { "CKDR (Clock Drift Report)", "pfcp.node_report_type.ckdr",
15144 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
15145 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15146 },
15147 { &hf_pfcp_node_report_type_b3_gpqr,
15148 { "GPQR (GTP-U Path QoS Report)", "pfcp.node_report_type.gpqr",
15149 FT_BOOLEAN, 8, NULL((void*)0), 0x08,
15150 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15151 },
15152 { &hf_pfcp_node_report_type_b4_purr,
15153 { "PURR (peer GTP-U entity Restart Report)", "pfcp.node_report_type.purr",
15154 FT_BOOLEAN, 8, NULL((void*)0), 0x10,
15155 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15156 },
15157 { &hf_pfcp_node_report_type_b5_vsr,
15158 { "VSR (Vendor-Specific Report)", "pfcp.node_report_type.pvsrurr",
15159 FT_BOOLEAN, 8, NULL((void*)0), 0x20,
15160 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15161 },
15162
15163 { &hf_pfcp_remote_gtp_u_peer_flags_b0_v6,
15164 { "V6 (IPv6)", "pfcp.remote_gtp_u_peer.flags.v6",
15165 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
15166 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15167 },
15168 { &hf_pfcp_remote_gtp_u_peer_flags_b1_v4,
15169 { "V4 (IPv4)", "pfcp.remote_gtp_u_peer.flags.v4",
15170 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
15171 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15172 },
15173 { &hf_pfcp_remote_gtp_u_peer_flags_b2_di,
15174 { "DI (Destination Interface)", "pfcp.remote_gtp_u_peer.flags.di",
15175 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
15176 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15177 },
15178 { &hf_pfcp_remote_gtp_u_peer_flags_b3_ni,
15179 { "NI (Network Instance)", "pfcp.remote_gtp_u_peer.flags.ni",
15180 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
15181 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15182 },
15183 { &hf_pfcp_remote_gtp_u_peer_flags_b4_rts,
15184 { "RTS (Recovery Timestamp)", "pfcp.remote_gtp_u_peer.flags.rts",
15185 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10,
15186 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15187 },
15188 { &hf_pfcp_remote_gtp_u_peer_ipv4,
15189 { "IPv4 address", "pfcp.remote_gtp_u_peer.ipv4",
15190 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
15191 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15192 },
15193 { &hf_pfcp_remote_gtp_u_peer_ipv6,
15194 { "IPv6 address", "pfcp.remote_gtp_u_peer.ipv6",
15195 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
15196 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15197 },
15198 { &hf_pfcp_remote_gtp_u_peer_length_di,
15199 { "Length of Destination Interface field", "pfcp.remote_gtp_u_peer.length_di",
15200 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
15201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15202 },
15203 { &hf_pfcp_remote_gtp_u_peer_length_ni,
15204 { "Length of Network Instance field", "pfcp.remote_gtp_u_peer.length_ni",
15205 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
15206 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15207 },
15208 { &hf_pfcp_remote_gtp_u_peer_time_stamp,
15209 { "Time Stamp", "pfcp.remote_gtp_u_peer.time_stamp",
15210 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
15211 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15212 },
15213 { &hf_pfcp_ur_seqn,
15214 { "UR-SEQN", "pfcp.ur_seqn",
15215 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
15216 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15217 },
15218 { &hf_pfcp_oci_flags_b0_aoci,
15219 { "AOCI: Associate OCI with Node ID", "pfcp.oci_flags.aoci",
15220 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15221 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15222 },
15223 { &hf_pfcp_pfcp_assoc_rel_req_b0_sarr,
15224 { "SARR (PFCP Association Release Request)", "pfcp.assoc_rel_req.sarr",
15225 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15226 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15227 },
15228 { &hf_pfcp_pfcp_assoc_rel_req_b1_urss,
15229 { "URSS (non-zero Usage Reports for the affected PFCP Sessions Sent)", "pfcp.assoc_rel_req.urss",
15230 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
15231 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15232 },
15233 { &hf_pfcp_upiri_flg_b6_assosi,
15234 { "ASSOSI (Associated Source Instance)", "pfcp.upiri_flags.assosi",
15235 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x40,
15236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15237 },
15238 { &hf_pfcp_upiri_flg_b5_assoni,
15239 { "ASSONI (Associated Network Instance)", "pfcp.upiri_flags.assoni",
15240 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
15241 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15242 },
15243 { &hf_pfcp_upiri_flg_b2b4_teidri,
15244 { "TEIDRI (TEID Range Indication)", "pfcp.upiri_flags.teidri",
15245 FT_UINT8, BASE_HEX, NULL((void*)0), 0x1c,
15246 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15247 },
15248 { &hf_pfcp_upiri_flags_b1_v6,
15249 { "V6 (IPv6)", "pfcp.upiri_flags.v6",
15250 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
15251 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15252 },
15253 { &hf_pfcp_upiri_flags_b0_v4,
15254 { "V4 (IPv4)", "pfcp.upiri_flags.v4",
15255 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
15256 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15257 },
15258 { &hf_pfcp_upiri_teidri,
15259 { "TEID Range Indication", "pfcp.upiri.teidri",
15260 FT_UINT8, BASE_DEC, NULL((void*)0), 0x1C,
15261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15262 },
15263 { &hf_pfcp_upiri_teid_range,
15264 { "TEID", "pfcp.upiri.teid_range",
15265 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
15266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15267 },
15268 { &hf_pfcp_upiri_ipv4,
15269 { "IPv4 address", "pfcp.upiri.ipv4_addr",
15270 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
15271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15272 },
15273 { &hf_pfcp_upiri_ipv6,
15274 { "IPv6 address", "pfcp.upiri.ipv6_addr",
15275 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
15276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15277 },
15278 { &hf_pfcp_user_plane_inactivity_timer,
15279 { "User Plane Inactivity Timer", "pfcp.user_plane_inactivity_time",
15280 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0,
15281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15282 },
15283
15284 { &hf_pfcp_subsequent_volume_quota_b0_tovol,
15285 { "TOVOL", "pfcp.subsequent_volume_quota_flags.tovol",
15286 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15287 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15288 },
15289 { &hf_pfcp_subsequent_volume_quota_b1_ulvol,
15290 { "ULVOL", "pfcp.subsequent_volume_quota_flags.ulvol",
15291 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
15292 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15293 },
15294 { &hf_pfcp_subsequent_volume_quota_b2_dlvol,
15295 { "DLVOL", "pfcp.subsequent_volume_quota_flags.dlvol",
15296 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
15297 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15298 },
15299 { &hf_pfcp_subsequent_volume_quota_tovol,
15300 { "Total Volume", "pfcp.subsequent_volume_quota.tovol",
15301 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
15302 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15303 },
15304 { &hf_pfcp_subsequent_volume_quota_ulvol,
15305 { "Uplink Volume", "pfcp.subsequent_volume_quota.ulvol",
15306 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
15307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15308 },
15309 { &hf_pfcp_subsequent_volume_quota_dlvol,
15310 { "Downlink Volume", "pfcp.subsequent_volume_quota.dlvol",
15311 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
15312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15313 },
15314
15315 { &hf_pfcp_subsequent_time_quota,
15316 { "Subsequent Time Quota", "pfcp.subsequent_time_quota",
15317 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
15318 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15319 },
15320 { &hf_pfcp_rqi_flag,
15321 { "RQI", "pfcp.rqi_flag",
15322 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15323 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15324 },
15325 { &hf_pfcp_qfi,
15326 { "QFI", "pfcp.qfi_value",
15327 FT_UINT8, BASE_HEX, NULL((void*)0), 0x3f,
15328 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15329 },
15330 { &hf_pfcp_query_urr_reference,
15331 { "Query URR Reference", "pfcp.query_urr_reference",
15332 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
15333 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15334 },
15335
15336 { &hf_pfcp_additional_usage_reports_information_b15_auri,
15337 { "AURI (Additional Usage Reports Indication)", "pfcp.additional_usage_reports_information_auri",
15338 FT_BOOLEAN, 16, NULL((void*)0), 0x8000,
15339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15340 },
15341 { &hf_pfcp_additional_usage_reports_information_b14_b0_number_value,
15342 { "Number of Additional Usage Reports value", "pfcp.additional_usage_reports_information_value",
15343 FT_UINT16, BASE_DEC, NULL((void*)0), 0x7FFF,
15344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15345 },
15346 { &hf_pfcp_traffic_endpoint_id,
15347 { "Traffic Endpoint ID", "pfcp.traffic_endpoint_id",
15348 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15350 },
15351
15352 { &hf_pfcp_mac_address_flags_b0_sour,
15353 { "SOUR", "pfcp.mac_address.flags.sour",
15354 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
15355 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15356 },
15357 { &hf_pfcp_mac_address_flags_b1_dest,
15358 { "DEST", "pfcp.mac_address.flags.dest",
15359 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
15360 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15361 },
15362 { &hf_pfcp_mac_address_flags_b2_usou,
15363 { "USUO", "pfcp.mac_address.flags.usuo",
15364 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
15365 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15366 },
15367 { &hf_pfcp_mac_address_flags_b3_udes,
15368 { "UDES", "pfcp.mac_address.flags.udes",
15369 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
15370 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15371 },
15372 { &hf_pfcp_mac_address_source_mac_address,
15373 { "Source MAC Address", "pfcp.mac_address.sour",
15374 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15375 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15376 },
15377 { &hf_pfcp_mac_address_dest_mac_address,
15378 { "Destination MAC Address", "pfcp.mac_address.dest",
15379 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15380 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15381 },
15382 { &hf_pfcp_mac_address_upper_source_mac_address,
15383 { "Upper Source MAC Address", "pfcp.mac_address.usou",
15384 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15385 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15386 },
15387 { &hf_pfcp_mac_address_upper_dest_mac_address,
15388 { "Upper Destination MAC Address", "pfcp.mac_address.udes",
15389 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15390 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15391 },
15392
15393 { &hf_pfcp_c_tag_flags_b0_pcp,
15394 { "PCP", "pfcp.c_tag.flags.pcp",
15395 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15396 "Priority code point", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15397 },
15398 { &hf_pfcp_c_tag_flags_b1_dei,
15399 { "DEI", "pfcp.c_tag.flags.dei",
15400 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
15401 "Drop eligible indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15402 },
15403 { &hf_pfcp_c_tag_flags_b2_vid,
15404 { "VID", "pfcp.c_tag.flags.vid",
15405 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
15406 "VLAN identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15407 },
15408 { &hf_pfcp_c_tag_cvid,
15409 { "C-VID", "pfcp.c_tag.cvid",
15410 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
15411 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15412 },
15413 { &hf_pfcp_c_tag_dei_flag,
15414 { "Drop eligible indicator (DEI)", "pfcp.c_tag.dei_flag",
15415 FT_BOOLEAN, 8, TFS(&tfs_eligible_ineligible)((0 ? (const struct true_false_string*)0 : ((&tfs_eligible_ineligible
))))
, 0x08,
15416 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15417 },
15418 { &hf_pfcp_c_tag_pcp_value,
15419 { "Priority code point (PCP)", "pfcp.c_tag.pcp",
15420 FT_UINT8, BASE_DEC, VALS(pfcp_vlan_tag_pcp_vals)((0 ? (const struct _value_string*)0 : ((pfcp_vlan_tag_pcp_vals
))))
, 0x07,
15421 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15422 },
15423
15424 { &hf_pfcp_s_tag_flags_b0_pcp,
15425 { "PCP", "pfcp.s_tag.flags.pcp",
15426 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15427 "Priority code point", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15428 },
15429 { &hf_pfcp_s_tag_flags_b1_dei,
15430 { "DEI", "pfcp.s_tag.flags.dei",
15431 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
15432 "Drop eligible indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15433 },
15434 { &hf_pfcp_s_tag_flags_b2_vid,
15435 { "VID", "pfcp.s_tag.flags.vid",
15436 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
15437 "VLAN identifier", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15438 },
15439 { &hf_pfcp_s_tag_svid,
15440 { "S-VID", "pfcp.s_tag.svid",
15441 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
15442 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15443 },
15444 { &hf_pfcp_s_tag_dei_flag,
15445 { "Drop eligible indicator (DEI)", "pfcp.s_tag.dei_flag",
15446 FT_BOOLEAN, 8, TFS(&tfs_eligible_ineligible)((0 ? (const struct true_false_string*)0 : ((&tfs_eligible_ineligible
))))
, 0x08,
15447 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15448 },
15449 { &hf_pfcp_s_tag_pcp_value,
15450 { "Priority code point (PCP)", "pfcp.s_tag.pcp",
15451 FT_UINT8, BASE_DEC, VALS(pfcp_vlan_tag_pcp_vals)((0 ? (const struct _value_string*)0 : ((pfcp_vlan_tag_pcp_vals
))))
, 0x07,
15452 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15453 },
15454
15455 { &hf_pfcp_ethertype,
15456 { "Ethertype", "pfcp.ethertype",
15457 FT_UINT16, BASE_HEX, VALS(etype_vals)((0 ? (const struct _value_string*)0 : ((etype_vals)))), 0x0,
15458 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15459 },
15460
15461 { &hf_pfcp_proxying_flags_b0_arp,
15462 { "ARP", "pfcp.proxying.flags.arp",
15463 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15465 },
15466 { &hf_pfcp_proxying_flags_b1_ins,
15467 { "INS", "pfcp.proxying.flags.ins",
15468 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
15469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15470 },
15471
15472 { &hf_pfcp_ethertype_filter_id,
15473 { "Ethertype Filter ID", "pfcp.ethertype_filter_id",
15474 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
15475 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15476 },
15477
15478 { &hf_pfcp_ethertype_filter_properties_flags_b0_bide,
15479 { "BIDE", "pfcp.ethertype_filter_properties.flags.bide",
15480 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15481 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15482 },
15483
15484 { &hf_pfcp_suggested_buffering_packets_count_packet_count,
15485 { "Packet count", "pfcp.suggested_buffering_packets_count.packet_count",
15486 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15487 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15488 },
15489
15490 { &hf_pfcp_user_id_flags_b0_imsif,
15491 { "IMSIF", "pfcp.user_id.flags.imsif",
15492 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
15493 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15494 },
15495 { &hf_pfcp_user_id_flags_b1_imeif,
15496 { "IMEIF", "pfcp.user_id.flags.imeif",
15497 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
15498 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15499 },
15500 { &hf_pfcp_user_id_flags_b2_msisdnf,
15501 { "MSISDNF", "pfcp.user_id.flags.msisdnf",
15502 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
15503 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15504 },
15505 { &hf_pfcp_user_id_flags_b3_naif,
15506 { "NAIF", "pfcp.user_id.flags.naif",
15507 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
15508 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15509 },
15510 { &hf_pfcp_user_id_flags_b4_supif,
15511 { "SUPIF", "pfcp.user_id.flags.supif",
15512 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10,
15513 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15514 },
15515 { &hf_pfcp_user_id_flags_b5_gpsif,
15516 { "GPSIF", "pfcp.user_id.flags.gpsif",
15517 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
15518 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15519 },
15520 { &hf_pfcp_user_id_flags_b6_peif,
15521 { "PEIF", "pfcp.user_id.flags.peif",
15522 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x40,
15523 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15524 },
15525
15526 { &hf_pfcp_user_id_length_of_imsi,
15527 { "Length of IMSI", "pfcp.user_id.length_of_imsi",
15528 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15530 },
15531 { &hf_pfcp_user_id_length_of_imei,
15532 { "Length of IMEI", "pfcp.user_id.length_of_imei",
15533 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15535 },
15536 { &hf_pfcp_user_id_imei,
15537 { "IMEI", "pfcp.user_id.imei",
15538 FT_STRING, BASE_NONE, NULL((void*)0), 0,
15539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15540 },
15541 { &hf_pfcp_user_id_length_of_msisdn,
15542 { "Length of MSISDN", "pfcp.user_id.length_of_msisdn",
15543 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15545 },
15546 { &hf_pfcp_user_id_length_of_nai,
15547 { "Length of NAI", "pfcp.user_id.length_of_nai",
15548 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15550 },
15551 { &hf_pfcp_user_id_nai,
15552 { "NAI", "pfcp.user_id.nai",
15553 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15555 },
15556 { &hf_pfcp_user_id_length_of_supi,
15557 { "Length of SUPI", "pfcp.user_id.length_of_supi",
15558 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15559 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15560 },
15561 { &hf_pfcp_user_id_supi,
15562 { "SUPI", "pfcp.user_id.supi",
15563 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15564 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15565 },
15566 { &hf_pfcp_user_id_length_of_gpsi,
15567 { "Length of GPSI", "pfcp.user_id.length_of_gpsi",
15568 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15569 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15570 },
15571 { &hf_pfcp_user_id_gpsi,
15572 { "GPSI", "pfcp.user_id.gpsi",
15573 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15575 },
15576 { &hf_pfcp_user_id_length_of_pei,
15577 { "Length of PEI", "pfcp.user_id.length_of_pei",
15578 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15579 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15580 },
15581 { &hf_pfcp_user_id_pei,
15582 { "PEI", "pfcp.user_id.pei",
15583 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15584 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15585 },
15586
15587 { &hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi,
15588 { "IMSIF", "pfcp.ethernet_pdu_session_information.flags.ethi",
15589 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
15590 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15591 },
15592
15593 { &hf_pfcp_mac_addresses_detected_number_of_mac_addresses,
15594 { "Number of MAC addresses", "pfcp.mac_addresses_detected.number_of_mac_addresses",
15595 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15597 },
15598 { &hf_pfcp_mac_addresses_detected_mac_address,
15599 { "MAC Address", "pfcp.mac_addresses_detected.mac_address",
15600 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15602 },
15603 { &hf_pfcp_mac_addresses_detected_length_of_ctag,
15604 { "Length of C-TAG", "pfcp.mac_addresses_detected.length_of_ctag",
15605 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15607 },
15608 { &hf_pfcp_mac_addresses_detected_length_of_stag,
15609 { "Length of S-TAG", "pfcp.mac_addresses_detected.length_of_stag",
15610 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15612 },
15613
15614 { &hf_pfcp_mac_addresses_removed_number_of_mac_addresses,
15615 { "Number of MAC addresses", "pfcp.mac_addresses_removed.number_of_mac_address",
15616 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15617 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15618 },
15619 { &hf_pfcp_mac_addresses_removed_mac_address,
15620 { "MAC Address", "pfcp.mac_addresses_removed.mac_addresses",
15621 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15622 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15623 },
15624 { &hf_pfcp_mac_addresses_removed_length_of_ctag,
15625 { "Length of C-TAG", "pfcp.mac_addresses_removed.length_of_ctag",
15626 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15627 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15628 },
15629 { &hf_pfcp_mac_addresses_removed_length_of_stag,
15630 { "Length of S-TAG", "pfcp.mac_addresses_removed.length_of_stag",
15631 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15632 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15633 },
15634
15635 { &hf_pfcp_ethernet_inactivity_timer,
15636 { "Ethernet Inactivity Timer", "pfcp.ethernet",
15637 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0,
15638 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15639 },
15640
15641 { &hf_pfcp_subsequent_event_quota,
15642 { "Subsequent Event Quota", "pfcp.subsequent_event_quota",
15643 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
15644 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15645 },
15646
15647 { &hf_pfcp_subsequent_event_threshold,
15648 { "Subsequent Event Threshold", "pfcp.subsequent_event_threshold",
15649 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
15650 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15651 },
15652
15653 { &hf_pfcp_trace_information_trace_id,
15654 { "Trace ID", "pfcp.trace_information.traceid",
15655 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
15656 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15657 },
15658 { &hf_pfcp_trace_information_length_trigger_events,
15659 { "Length of Trigger Events", "pfcp.trace_information.length_trigger_events",
15660 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
15661 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15662 },
15663 { &hf_pfcp_trace_information_trigger_events,
15664 { "Trigger Events", "pfcp.trace_information.trigger_events",
15665 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15666 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15667 },
15668 { &hf_pfcp_trace_information_session_trace_depth,
15669 { "Session Trace Depth", "pfcp.trace_information.session_trace_depth",
15670 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
15671 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15672 },
15673 { &hf_pfcp_trace_information_length_list_interfaces,
15674 { "Length of List of Interfaces", "pfcp.trace_information.length_list_interfaces",
15675 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
15676 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15677 },
15678 { &hf_pfcp_trace_information_list_interfaces,
15679 { "List of Interfaces", "pfcp.trace_information.list_interfaces",
15680 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15681 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15682 },
15683 { &hf_pfcp_trace_information_length_ipaddress,
15684 { "Length of IP Address", "pfcp.trace_information.length_ipaddress",
15685 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
15686 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15687 },
15688 { &hf_pfcp_trace_information_ipv4,
15689 { "IP Address of Trace Collection Entity", "pfcp.trace_information.ipv4",
15690 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
15691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15692 },
15693 { &hf_pfcp_trace_information_ipv6,
15694 { "IP Address of Trace Collection Entity", "pfcp.trace_information.ipv6",
15695 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
15696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15697 },
15698
15699 { &hf_pfcp_framed_route,
15700 { "Framed-Route", "pfcp.framed_route",
15701 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15703 },
15704 { &hf_pfcp_framed_routing,
15705 { "Framed-Routing", "pfcp.framed_routing",
15706 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
15707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15708 },
15709 { &hf_pfcp_framed_ipv6_route,
15710 { "Framed-IPv6-Route", "pfcp.framed_ipv6_route",
15711 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15713 },
15714
15715 { &hf_pfcp_event_quota,
15716 { "Event Quota", "pfcp.event_quota",
15717 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
15718 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15719 },
15720
15721 { &hf_pfcp_event_threshold,
15722 { "Event Threshold", "pfcp.event_threshold",
15723 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
15724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15725 },
15726
15727 { &hf_pfcp_time_stamp,
15728 { "Time Stamp", "pfcp.time_stamp",
15729 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
15730 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15731 },
15732
15733 { &hf_pfcp_averaging_window,
15734 { "Averaging Window", "pfcp.averaging_window",
15735 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
15736 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15737 },
15738
15739 { &hf_pfcp_paging_policy_indicator,
15740 { "Paging Policy Indicator (PPI)", "pfcp.ppi",
15741 FT_UINT8, BASE_DEC, NULL((void*)0), 0x7,
15742 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15743 },
15744 { &hf_pfcp_apn_dnn,
15745 { "APN/DNN", "pfcp.apn_dnn",
15746 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
15747 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15748 },
15749 { &hf_pfcp_tgpp_interface_type,
15750 { "3GPP Interface Type", "pfcp.tgpp_interface_type",
15751 FT_UINT8, BASE_DEC, VALS(pfcp_tgpp_interface_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_tgpp_interface_type_vals
))))
, 0x3f,
15752 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15753 },
15754
15755 { &hf_pfcp_pfcpsrreq_flags_b0_psdbu,
15756 { "PSDBU (PFCP Session Deleted By the UP function)", "pfcp.srreq_flags.psdbu",
15757 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15758 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15759 },
15760
15761 { &hf_pfcp_pfcpaureq_flags_b0_parps,
15762 { "PARPBS (PFCP Association Release Preparation Start)", "pfcp.aureq_flags.parps",
15763 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15765 },
15766
15767 { &hf_pfcp_activation_time,
15768 { "Activation Time", "pfcp.activation_time",
15769 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
15770 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15771 },
15772 { &hf_pfcp_deactivation_time,
15773 { "Deactivation Time", "pfcp.deactivation_time",
15774 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0,
15775 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15776 },
15777
15778 { &hf_pfcp_mar_id,
15779 { "MAR ID", "pfcp.mar_id",
15780 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15781 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15782 },
15783
15784 { &hf_pfcp_steering_functionality,
15785 { "Steering Functionality", "pfcp.steering_functionality",
15786 FT_UINT8, BASE_DEC, VALS(pfcp_steering_functionality_vals)((0 ? (const struct _value_string*)0 : ((pfcp_steering_functionality_vals
))))
, 0xF,
15787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15788 },
15789 { &hf_pfcp_steering_mode,
15790 { "Steering Mode", "pfcp.steering_mode",
15791 FT_UINT8, BASE_DEC, VALS(pfcp_steering_mode_vals)((0 ? (const struct _value_string*)0 : ((pfcp_steering_mode_vals
))))
, 0xF,
15792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15793 },
15794
15795 { &hf_pfcp_weight,
15796 { "Weight", "pfcp.weight",
15797 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15798 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15799 },
15800 { &hf_pfcp_priority,
15801 { "Priority", "pfcp.priority",
15802 FT_UINT8, BASE_DEC, VALS(pfcp_priority_vals)((0 ? (const struct _value_string*)0 : ((pfcp_priority_vals))
))
, 0xF,
15803 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15804 },
15805
15806 { &hf_pfcp_ue_ip_address_pool_length,
15807 { "UE IP address Pool Identity Length", "pfcp.ue_ip_address_pool_length",
15808 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15810 },
15811 { &hf_pfcp_ue_ip_address_pool_identity,
15812 { "UE IP address Pool Identity", "pfcp.ue_ip_address_pool_identity",
15813 FT_BYTES, BASE_SHOW_ASCII_PRINTABLE0x00010000, NULL((void*)0), 0x0,
15814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15815 },
15816
15817 { &hf_pfcp_alternative_smf_ip_address_flags_ppe,
15818 { "PPE (Preferred PFCP Entity)", "pfcp.alternative_smf_ip_address_flags.ppe",
15819 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
15820 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15821 },
15822 { &hf_pfcp_alternative_smf_ip_address_ipv4,
15823 { "IPv4 address", "pfcp.alternative_smf_ip_address.ipv4",
15824 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
15825 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15826 },
15827 { &hf_pfcp_alternative_smf_ip_address_ipv6,
15828 { "IPv6 address", "pfcp.alternative_smf_ip_address.ipv6",
15829 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
15830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15831 },
15832
15833 { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b0_priueai,
15834 { "PRIUEAI (Packet Replication Information – UE/PDU Session Address Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.priueai",
15835 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
15836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15837 },
15838 { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b1_prin19i,
15839 { "PRIN19I (Packet Replication Information - N19 Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.prin19i",
15840 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
15841 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15842 },
15843 { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b2_prin6i,
15844 { "PRIN6I (Packet Replication Information - N6 Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.prin6i",
15845 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
15846 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15847 },
15848 { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b3_dcaroni,
15849 { "DCARONI (Detection Carry-On Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.dcaroni",
15850 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
15851 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15852 },
15853
15854 { &hf_pfcp_validity_time_value,
15855 { "Validity Time value", "pfcp.validity_time_value",
15856 FT_UINT32, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_seconds)((0 ? (const struct unit_name_string*)0 : ((&units_seconds
))))
, 0x0,
15857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15858 },
15859 { &hf_pfcp_validity_time_str,
15860 { "Validity Time", "pfcp.validity_time",
15861 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL((void*)0), 0x0,
15862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15863 },
15864
15865 { &hf_pfcp_number_of_reports,
15866 { "Number of Reports", "pfcp.number_of_reports",
15867 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15868 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15869 },
15870
15871 { &hf_pfcp_pfcpasrsp_flags_flags_b0_psrei,
15872 { "PSREI (PFCP Session Retained Indication)", "pfcp.asrsp_flags.flags.psrei",
15873 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
15874 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15875 },
15876 { &hf_pfcp_pfcpasrsp_flags_flags_b1_uupsi,
15877 { "UUPSI (UPF configured for IPUPS indication)", "pfcp.asrsp_flags.flags.uupsi",
15878 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
15879 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15880 },
15881
15882 { &hf_pfcp_cp_pfcp_entity_ip_address_ipv4,
15883 { "IPv4 address", "pfcp.cp_pfcp_entity_ip_address.ipv4",
15884 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
15885 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15886 },
15887 { &hf_pfcp_cp_pfcp_entity_ip_address_ipv6,
15888 { "IPv6 address", "pfcp.cp_pfcp_entity_ip_address.ipv6",
15889 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
15890 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15891 },
15892
15893 { &hf_pfcp_pfcpsereq_flags_flags_b0_resti,
15894 { "RESTI (Restoration Indication)", "pfcp.sereq_flags.flags.resti",
15895 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
15896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15897 },
15898 { &hf_pfcp_pfcpsereq_flags_flags_b1_sumpc,
15899 { "SUMPC (Stop of Measurement of Pause of Charging)", "pfcp.sereq_flags.flags.sumpc",
15900 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
15901 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15902 },
15903 { &hf_pfcp_pfcpsereq_flags_flags_b2_hrsbom,
15904 { "HRSBOM (HR-SBO Mode)", "pfcp.sereq_flags.flags.hrsbom",
15905 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
15906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15907 },
15908
15909 { &hf_pfcp_ip_multicast_address_flags_b2_range,
15910 { "RANGE", "pfcp.ip_multicast_address.flags.range",
15911 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
15912 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15913 },
15914 { &hf_pfcp_ip_multicast_address_flags_b3_any,
15915 { "ANY", "pfcp.ip_multicast_address.flags.any",
15916 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
15917 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15918 },
15919 { &hf_pfcp_ip_multicast_address_start_ipv4,
15920 { "(Start) IPv4 address", "pfcp.ip_multicast_address.start_ipv4",
15921 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
15922 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15923 },
15924 { &hf_pfcp_ip_multicast_address_start_ipv6,
15925 { "(Start) IPv6 address", "pfcp.ip_multicast_address.start_ipv6",
15926 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
15927 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15928 },
15929 { &hf_pfcp_ip_multicast_address_end_ipv4,
15930 { "(End) IPv4 address", "pfcp.ip_multicast_address.end_ipv4",
15931 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
15932 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15933 },
15934 { &hf_pfcp_ip_multicast_address_end_ipv6,
15935 { "(End) IPv6 address", "pfcp.ip_multicast_address.end_ipv6",
15936 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
15937 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15938 },
15939
15940 { &hf_pfcp_source_ip_address_flags_b2_mpl,
15941 { "MPL (Mask/Prefix Length)", "pfcp.source_ip_address.flags.mpl",
15942 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
15943 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15944 },
15945 { &hf_pfcp_source_ip_address_ipv4,
15946 { "IPv4 address", "pfcp.source_ip_address.ipv4",
15947 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
15948 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15949 },
15950 { &hf_pfcp_source_ip_address_ipv6,
15951 { "IPv6 address", "pfcp.source_ip_address.ipv6",
15952 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
15953 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15954 },
15955 { &hf_pfcp_source_ip_address_mask_prefix_lengt,
15956 { "Mask/Prefix Length", "pfcp.source_ip_address.mpl",
15957 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
15958 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15959 },
15960
15961 { &hf_pfcp_packet_rate_status_flags_b0_ul,
15962 { "UL", "pfcp.packet_rate_status.flags.ul",
15963 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
15964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15965 },
15966 { &hf_pfcp_packet_rate_status_flags_b1_dl,
15967 { "DL", "pfcp.packet_rate_status.flags.dl",
15968 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
15969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15970 },
15971 { &hf_pfcp_packet_rate_status_flags_b2_apr,
15972 { "APR", "pfcp.packet_rate_status.flags.apr",
15973 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
15974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15975 },
15976 { &hf_pfcp_packet_rate_status_ul,
15977 { "UL (remaining uplink packet limit)", "pfcp.packet_rate_status.tovol",
15978 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15980 },
15981 { &hf_pfcp_packet_rate_status_dl,
15982 { "DL (remaining downlink packet limit)", "pfcp.packet_rate_status.ulvol",
15983 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15985 },
15986 { &hf_pfcp_packet_rate_status_apr_ul,
15987 { "Additional UL (remaining uplink packet limit)", "pfcp.packet_rate_status.apr_tovol",
15988 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15990 },
15991 { &hf_pfcp_packet_rate_status_apr_dl,
15992 { "Additional DL (remaining downlink packet limit)", "pfcp.packet_rate_status.apr_ulvol",
15993 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
15994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
15995 },
15996 { &hf_pfcp_packet_rate_status_validity_time,
15997 { "Rate Status Validity Time value", "pfcp.packet_rate_status.validity_time",
15998 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
15999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16000 },
16001
16002 { &hf_pfcp_create_bridge_router_info_flags_b0_bii,
16003 { "BII (Bridge Information Indication)", "pfcp.create_bridge_router_info.flags.bii",
16004 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16005 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16006 },
16007 { &hf_pfcp_create_bridge_router_info_flags_b1_rii,
16008 { "RII (Router Information Indication)", "pfcp.create_bridge_router_info.flags.rii",
16009 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16010 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16011 },
16012
16013 { &hf_pfcp_port_number,
16014 { "Port Number value", "pfcp.port_number.value",
16015 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16016 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16017 },
16018
16019 { &hf_pfcp_nw_tt_port_number,
16020 { "NW-TT Port Number value", "pfcp.nw_tt_port_number.value",
16021 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16022 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16023 },
16024
16025 { &hf_pfcp_5gs_user_plane_node_id_flags_b0_bid,
16026 { "BID", "pfcp.5gs_user_plane_node_id.flags.sour",
16027 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16028 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16029 },
16030 { &hf_pfcp_5gs_user_plane_node_id_value,
16031 { "Use Plane Node value", "pfcp.5gs_user_plane_node_id.value",
16032 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
16033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16034 },
16035
16036 { &hf_pfcp_port_management_information,
16037 { "Port Management Information", "pfcp.port_management_information",
16038 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16040 },
16041
16042 { &hf_pfcp_requested_clock_drift_control_information_flags_b0_rrto,
16043 { "RRTO (Request to Report Time Offset)", "pfcp.requested_clock_drift_control_information.flags.rrto",
16044 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16045 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16046 },
16047 { &hf_pfcp_requested_clock_drift_control_information_flags_b1_rrcr,
16048 { "RRCR (Request to Report Cumulative RateRatio)", "pfcp.requested_clock_drift_control_information.flags.rrcr",
16049 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16050 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16051 },
16052
16053 { &hf_pfcp_time_domain_number_value,
16054 { "Time Domain Number value", "pfcp.time_domain_number_value",
16055 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
16056 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16057 },
16058
16059 { &hf_pfcp_time_offset_threshold,
16060 { "Time Offset Threshold", "pfcp.time_offset_threshold",
16061 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
16062 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16063 },
16064
16065 { &hf_pfcp_cumulative_rate_ratio_threshold,
16066 { "Cumulative rateRatio Threshold", "pfcp.cumulative_rate_ratio_threshold",
16067 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16068 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16069 },
16070
16071
16072 { &hf_pfcp_time_offset_measurement,
16073 { "Time Offset Measurement", "pfcp.time_offset_measurement",
16074 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
16075 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16076 },
16077
16078 { &hf_pfcp_cumulative_rate_ratio_measurement,
16079 { "Cumulative rateRatio Measurement", "pfcp.cumulative_rate_ratio_measurement",
16080 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16081 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16082 },
16083
16084 { &hf_pfcp_srr_id,
16085 { "SRR ID value", "pfcp.srr_id_value",
16086 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
16087 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16088 },
16089
16090 { &hf_pfcp_requested_access_availability_control_information_flags_b0_rrca,
16091 { "RRCA (Request to Report Change in Access availability)", "pfcp.requested_access_availability_control_information.flags.rrca",
16092 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16094 },
16095
16096 { &hf_pfcp_availability_type,
16097 { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
16098 FT_UINT8, BASE_DEC, VALS(pfcp_availability_status_vals)((0 ? (const struct _value_string*)0 : ((pfcp_availability_status_vals
))))
, 0xC,
16099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16100 },
16101 { &hf_pfcp_availability_status,
16102 { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
16103 FT_UINT8, BASE_DEC, VALS(pfcp_availability_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_availability_type_vals
))))
, 0x3,
16104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16105 },
16106
16107 { &hf_pfcp_mptcp_control_information_flags_b0_tci,
16108 { "TCI (Transport Converter Indication)", "pfcp.mptcp_control_information.flags.tci",
16109 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16110 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16111 },
16112
16113 { &hf_pfcp_atsss_ll_control_information_flags_b0_lli,
16114 { "LLI: ATSSS-LL steering functionality is required", "pfcp.atsss_ll_control_information.flags.lli",
16115 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16116 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16117 },
16118
16119 { &hf_pfcp_pmf_control_information_flags_b0_pmfi,
16120 { "PMFI (PMF functionality is required)", "pfcp.pmf_control_information.flags.pmfi",
16121 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16122 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16123 },
16124 { &hf_pfcp_pmf_control_information_flags_b1_drtti,
16125 { "DRTTI (Disallow PMF RTT Indication)", "pfcp.pmf_control_information.flags.drtti",
16126 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16127 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16128 },
16129 { &hf_pfcp_pmf_control_information_flags_b2_pqpm,
16130 { "PQPM (Per Qos flow Performance Measurement indication)", "pfcp.pmf_control_information.flags.pqpm",
16131 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16132 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16133 },
16134 { &hf_pfcp_pmf_control_information_number_of_qfi,
16135 { "Number of QFI", "pfcp.pmf_control_information.number_of_qfi",
16136 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
16137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16138 },
16139
16140 { &hf_pfcp_mptcp_address_information_flags_b0_v4,
16141 { "V4", "pfcp.mptcp_ip_address_information.flags.v4",
16142 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16143 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16144 },
16145 { &hf_pfcp_mptcp_address_information_flags_b1_v6,
16146 { "V6", "pfcp.mptcp_ip_address_information.flags.v6",
16147 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16148 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16149 },
16150 { &hf_pfcp_mptcp_proxy_type,
16151 { "MPTCP proxy type", "pfcp.mptcp_proxy.type",
16152 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16153 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16154 },
16155 { &hf_pfcp_mptcp_proxy_port,
16156 { "MPTCP proxy port", "pfcp.mptcp_proxy.port",
16157 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16158 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16159 },
16160 { &hf_pfcp_mptcp_proxy_ip_address_ipv4,
16161 { "MPTCP proxy IPv4 address", "pfcp.mptcp_proxy.ipv4",
16162 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16163 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16164 },
16165 { &hf_pfcp_mptcp_proxy_ip_address_ipv6,
16166 { "MPTCP proxy IPv6 address", "pfcp.mptcp_proxy.ipv6",
16167 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16169 },
16170
16171 { &hf_pfcp_link_specific_multipath_ip_address_flags_b0_v4,
16172 { "V4", "pfcp.link_specific_multipath_ip_address.flags.v4",
16173 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16175 },
16176 { &hf_pfcp_link_specific_multipath_ip_address_flags_b1_v6,
16177 { "V6", "pfcp.link_specific_multipath_ip_address.flags.v6",
16178 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16180 },
16181 { &hf_pfcp_link_specific_multipath_ip_address_flags_b2_nv4,
16182 { "NV4", "pfcp.link_specific_multipath_ip_address.flags.nv4",
16183 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16185 },
16186 { &hf_pfcp_link_specific_multipath_ip_address_flags_b3_nv6,
16187 { "NV6", "pfcp.link_specific_multipath_ip_address.flags.nv6",
16188 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
16189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16190 },
16191 { &hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv4,
16192 { "Link-Specific IPv4 Address for 3GPP Access", "pfcp.link_specific_multipath_ip_address.3gpp.ipv4",
16193 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16195 },
16196 { &hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv6,
16197 { "Link-Specific IPv6 Address for 3GPP Access", "pfcp.link_specific_multipath_ip_address.3gpp.ipv6",
16198 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16200 },
16201 { &hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv4,
16202 { "Link-Specific IPv4 Address for Non-3GPP Access", "pfcp.link_specific_multipath_ip_address.non3gpp.ipv4",
16203 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16205 },
16206 { &hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv6,
16207 { "Link-Specific IPv6 Address for Non-3GPP Access", "pfcp.link_specific_multipath_ip_address.non3gpp.ipv6",
16208 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16209 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16210 },
16211
16212 { &hf_pfcp_pmf_address_information_flags_b0_v4,
16213 { "V4", "pfcp.pmf_address_information.flags.v4",
16214 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16215 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16216 },
16217 { &hf_pfcp_pmf_address_information_flags_b1_v6,
16218 { "V6", "pfcp.pmf_address_information.flags.v6",
16219 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16220 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16221 },
16222 { &hf_pfcp_pmf_address_information_flags_b2_mac,
16223 { "MAC", "pfcp.pmf_address_information.flags.mac",
16224 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16225 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16226 },
16227 { &hf_pfcp_pmf_address_ipv4,
16228 { "PMF IPv4 Address", "pfcp.pmf_address_information.ipv4",
16229 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16231 },
16232 { &hf_pfcp_pmf_address_ipv6,
16233 { "PMF IPv6 Address", "pfcp.pmf_address_information.ipv6",
16234 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16235 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16236 },
16237 { &hf_pfcp_pmf_port_3gpp,
16238 { "PMF port for 3GPP", "pfcp.pmf_address_information.port_3gpp",
16239 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16240 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16241 },
16242 { &hf_pfcp_pmf_port_non3gpp,
16243 { "PMF port for Non-3GPP", "pfcp.pmf_address_information.port_non3gpp",
16244 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16245 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16246 },
16247 { &hf_pfcp_pmf_mac_address_3gpp,
16248 { "MAC Address for 3GPP", "pfcp.pmf_address_information.mac_address_3gpp",
16249 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16250 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16251 },
16252 { &hf_pfcp_pmf_mac_address_non3gpp,
16253 { "MAC Address for Non-3GPP", "pfcp.pmf_address_information.mac_address_non3gpp",
16254 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16255 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16256 },
16257
16258 { &hf_pfcp_atsss_ll_information_flags_b0_lli,
16259 { "LLI: ATSSS-LL steering functionality have been allocated", "pfcp.atsss_ll_information.flags.lli",
16260 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16261 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16262 },
16263
16264 { &hf_pfcp_data_network_access_identifier,
16265 { "Data Network Access Identifier", "pfcp.data_network_access_identifier",
16266 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16267 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16268 },
16269
16270 { &hf_pfcp_packet_delay_milliseconds,
16271 { "Delay Value in milliseconds", "pfcp.average_packet_delay.milliseconds",
16272 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16273 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16274 },
16275
16276 { &hf_pfcp_qos_report_trigger_flags_b0_per,
16277 { "PER (Periodic Reporting)", "pfcp.qos_report_trigger.flags.v4",
16278 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16280 },
16281 { &hf_pfcp_qos_report_trigger_flags_b1_thr,
16282 { "THR (Event triggered based on Threshold)", "pfcp.qos_report_trigger.flags.thr",
16283 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16285 },
16286 { &hf_pfcp_qos_report_trigger_flags_b2_ire,
16287 { "IRE (Immediate Report)", "pfcp.qos_report_trigger.flags.ire",
16288 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16290 },
16291
16292 { &hf_pfcp_gtp_u_path_interface_type_flags_b0_n9,
16293 { "N9", "pfcp.qos_report_trigtp_u_path_interface_typegger.flags.n9",
16294 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16295 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16296 },
16297 { &hf_pfcp_gtp_u_path_interface_type_flags_b1_n3,
16298 { "N3", "pfcp.gtp_u_path_interface_type.flags.n3",
16299 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16300 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16301 },
16302
16303 { &hf_pfcp_requested_qos_monitoring_flags_b0_dlpd,
16304 { "DLPD (Downlink Packet Delay)", "pfcp.requested_qos_monitoring.flags.dlpd",
16305 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16306 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16307 },
16308 { &hf_pfcp_requested_qos_monitoring_flags_b1_ulpd,
16309 { "ULPD (Uplink Packet Delay)", "pfcp.requested_qos_monitoring.flags.ulpd",
16310 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16311 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16312 },
16313 { &hf_pfcp_requested_qos_monitoring_flags_b2_rppd,
16314 { "RPPD (Round Trip Packet Delay)", "pfcp.requested_qos_monitoring.flags.rppd",
16315 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16316 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16317 },
16318 { &hf_pfcp_requested_qos_monitoring_flags_b3_gtpupm,
16319 { "GTPUPM (GTP-U Path Monitoring)", "pfcp.requested_qos_monitoring.flags.gtpupm",
16320 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
16321 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16322 },
16323 { &hf_pfcp_requested_qos_monitoring_flags_b4_dlci,
16324 { "DLCI (Downlink Congestion Information)", "pfcp.requested_qos_monitoring.flags.dlci",
16325 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10,
16326 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16327 },
16328 { &hf_pfcp_requested_qos_monitoring_flags_b5_ulci,
16329 { "ULCI (Uplink Congestion Information)", "pfcp.requested_qos_monitoring.flags.ulci",
16330 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
16331 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16332 },
16333 { &hf_pfcp_requested_qos_monitoring_flags_b6_dlpr,
16334 { "DLPR (Downlink Packet Rate)", "pfcp.requested_qos_monitoring.flags.dlpr",
16335 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x40,
16336 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16337 },
16338 { &hf_pfcp_requested_qos_monitoring_flags_b7_ulpr,
16339 { "ULPR (Uplink Packet Rate)", "pfcp.requested_qos_monitoring.flags.ulpr",
16340 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x80,
16341 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16342 },
16343
16344 { &hf_pfcp_reporting_frequency_flags_b0_evett,
16345 { "EVETT (Event Triggered QoS monitoring reporting)", "pfcp.reporting_frequency.flags.evett",
16346 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16347 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16348 },
16349 { &hf_pfcp_reporting_frequency_flags_b1_perio,
16350 { "PERIO (Periodic QoS monitoring reporting)", "pfcp.reporting_frequency.flags.perio",
16351 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16352 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16353 },
16354 { &hf_pfcp_reporting_frequency_flags_b2_sesrl,
16355 { "SESRL (Session Released QoS monitoring reporting) (Deprecated in R18.1)", "pfcp.reporting_frequency.flags.sesrl",
16356 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16357 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16358 },
16359
16360 { &hf_pfcp_packet_delay_thresholds_flags_b0_dl,
16361 { "DL (Downlink)", "pfcp.packet_delay_thresholds.flags.dl",
16362 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16363 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16364 },
16365 { &hf_pfcp_packet_delay_thresholds_flags_b1_ul,
16366 { "UL (Uplink)", "pfcp.packet_delay_thresholds.flags.ul",
16367 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16369 },
16370 { &hf_pfcp_packet_delay_thresholds_flags_b2_rp,
16371 { "RP (Round Trip)", "pfcp.packet_delay_thresholds.flags.rp",
16372 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16373 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16374 },
16375 { &hf_pfcp_packet_delay_thresholds_downlink,
16376 { "Downlink packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.downlink",
16377 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16378 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16379 },
16380 { &hf_pfcp_packet_delay_thresholds_uplink,
16381 { "Downlink packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.uplink",
16382 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16383 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16384 },
16385 { &hf_pfcp_packet_delay_thresholds_roundtrip,
16386 { "Round trip packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.roundtrip",
16387 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16388 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16389 },
16390
16391 { &hf_pfcp_minimum_wait_time_seconds,
16392 { "The Minimum Wait Time (seconds)", "pfcp.minimum_wait_time.seconds",
16393 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16395 },
16396
16397 { &hf_pfcp_qos_monitoring_measurement_flags_b0_dlpd,
16398 { "DLPD (Downlink Packet Delay)", "pfcp.qos_monitoring_measurement.flags.dlpd",
16399 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16400 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16401 },
16402 { &hf_pfcp_qos_monitoring_measurement_flags_b1_ulpd,
16403 { "ULPD (Uplink Packet Delay)", "pfcp.qos_monitoring_measurement.flags.ulpd",
16404 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16405 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16406 },
16407 { &hf_pfcp_qos_monitoring_measurement_flags_b2_rppd,
16408 { "RPPD (Round Trip Packet Delay)", "pfcp.qos_monitoring_measurement.flags.rppd",
16409 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16410 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16411 },
16412 { &hf_pfcp_qos_monitoring_measurement_flags_b3_plmf,
16413 { "PLMF (Packet Delay Measurement Failure)", "pfcp.qos_monitoring_measurement.flags.plmf",
16414 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
16415 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16416 },
16417 { &hf_pfcp_qos_monitoring_measurement_flags_b4_dlci,
16418 { "DLCI (Downlink Congestion Info)", "pfcp.qos_monitoring_measurement.flags.dlci",
16419 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10,
16420 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16421 },
16422 { &hf_pfcp_qos_monitoring_measurement_flags_b5_ulci,
16423 { "ULCI (Uplink Congestion Info)", "pfcp.qos_monitoring_measurement.flags.ulci",
16424 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
16425 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16426 },
16427
16428 { &hf_pfcp_qos_monitoring_measurement_downlink_packet_delay,
16429 { "Downlink packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.downlink_packet_delay",
16430 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16431 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16432 },
16433 { &hf_pfcp_qos_monitoring_measurement_uplink_packet_delay,
16434 { "Downlink packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.uplink_packet_delay",
16435 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16436 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16437 },
16438 { &hf_pfcp_qos_monitoring_measurement_roundtrip,
16439 { "Round trip packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.roundtrip",
16440 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16441 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16442 },
16443 { &hf_pfcp_qos_monitoring_measurement_downlink_congestion_information,
16444 { "Downlink Congestion information", "pfcp.qos_monitoring_measurement.downlink_congestion_information",
16445 FT_UINT8, BASE_DEC_HEX, NULL((void*)0), 0x0,
16446 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16447 },
16448 { &hf_pfcp_qos_monitoring_measurement_uplink_congestion_information,
16449 { "Uplink Congestion information", "pfcp.qos_monitoring_measurement.uplink_congestion_information",
16450 FT_UINT8, BASE_DEC_HEX, NULL((void*)0), 0x0,
16451 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16452 },
16453 { &hf_pfcp_qos_monitoring_measurement_downlink_packet_rate,
16454 { "Average Downlink packet rate (kilobits per second)", "pfcp.qos_monitoring_measurement.downlink_packet_rate",
16455 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16456 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16457 },
16458 { &hf_pfcp_qos_monitoring_measurement_uplink_packet_rate,
16459 { "Average Uplink packet rate (kilobits per second)", "pfcp.qos_monitoring_measurement.uplink_packet_rate",
16460 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16461 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16462 },
16463
16464 { &hf_pfcp_mt_edt_control_information_flags_b0_rdsi,
16465 { "RDSI (Reporting DL data packets Size Indication)", "pfcp.mt_edt_control_information.flags.rdsi",
16466 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16467 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16468 },
16469
16470 { &hf_pfcp_dl_data_packets_size,
16471 { "DL Data Packets Size", "pfcp.dl_data_packets_size",
16472 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16473 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16474 },
16475
16476 { &hf_pfcp_qer_control_indications_o5_b0_rcsr,
16477 { "RCSR (Rate Control Status Reporting)", "pfcp.qer_control_indications.rcsr",
16478 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
16479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16480 },
16481
16482 { &hf_pfcp_nf_instance_id,
16483 { "NF Instance ID", "pfcp.nf_instance_id",
16484 FT_GUID, BASE_NONE, NULL((void*)0), 0x0,
16485 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16486 },
16487
16488 { &hf_pfcp_s_nssai_sst,
16489 { "SST", "pfcp.s_nssai_sst.sst",
16490 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16491 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16492 },
16493 { &hf_pfcp_s_nssai_sd,
16494 { "SD", "pfcp.s_nssai_sst.sd",
16495 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16496 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16497 },
16498
16499 { &hf_pfcp_ip_version_flags_b1_v6,
16500 { "V6 (IPv6)", "pfcp.ip_version.v6",
16501 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16502 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16503 },
16504 { &hf_pfcp_ip_version_flags_b0_v4,
16505 { "V4 (IPv4)", "pfcp.ip_version.v4",
16506 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16508 },
16509
16510 { &hf_pfcp_pfcpasreq_flags_flags_b0_uupsi,
16511 { "UUPSI (UPF configured for IPUPS indication)", "pfcp.asreq_flags.flags.uupsi",
16512 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16513 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16514 },
16515
16516 { &hf_pfcp_data_status_flags_b0_drop,
16517 { "DROP (First DL packet is discared by UP function)", "pfcp.data_status.flags.drop",
16518 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16520 },
16521 { &hf_pfcp_data_status_flags_b1_buff,
16522 { "BUFF (First DL packet is received and buffered by UP function)", "pfcp.data_status.flags.buff",
16523 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16525 },
16526
16527 { &hf_pfcp_rds_configuration_information_flags_b0_rds,
16528 { "RDS (Reliable Data Service)", "pfcp.rds_configuration_information.flags.rds",
16529 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16530 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16531 },
16532
16533 { &hf_pfcp_multipath_application_indication_flags_b0_mtai,
16534 { "MTAI (MPTCP Applicable Indication)", "pfcp.multipath_application_indication.flags.mtai",
16535 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16536 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16537 },
16538 { &hf_pfcp_multipath_application_indication_flags_b1_mqai,
16539 { "MQAI (MPQUIC Applicable Indication)", "pfcp.multipath_application_indication.flags.mqai",
16540 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16541 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16542 },
16543
16544 { &hf_pfcp_user_plane_node_management_information_container,
16545 { "Predefined Rules Name", "pfcp.user_plane_node_management_information_container",
16546 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16547 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16548 },
16549
16550 { &hf_pfcp_number_of_ue_ip_addresses_b0_ipv4,
16551 { "IPv4", "pfcp.number_of_ue_ip_addresses.v4",
16552 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16553 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16554 },
16555 { &hf_pfcp_number_of_ue_ip_addresses_b1_ipv6,
16556 { "IPv6", "pfcp.number_of_ue_ip_addresses.v6",
16557 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16558 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16559 },
16560 { &hf_pfcp_number_of_ue_ip_addresses_ipv4,
16561 { "Number of UE IPv4 Addresses", "pfcp.number_of_ue_ip_addresses.ipv4addresses",
16562 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16563 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16564 },
16565 { &hf_pfcp_number_of_ue_ip_addresses_ipv6,
16566 { "Number of UE IPv6 Addresses", "pfcp.number_of_ue_ip_addresses.ipv6addresses",
16567 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16568 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16569 },
16570
16571 { &hf_pfcp_validity_timer,
16572 { "Validity Timer", "pfcp.validity_timer",
16573 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16574 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16575 },
16576
16577 { &hf_pfcp_rattype,
16578 { "RAT Type", "pfcp.rattype",
16579 FT_UINT8, BASE_DEC, VALS(pfcp_rattype_vals)((0 ? (const struct _value_string*)0 : ((pfcp_rattype_vals)))
)
, 0x0,
16580 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16581 },
16582
16583 { &hf_pfcp_l2tp_user_authentication_proxy_authen_type_value,
16584 { "Proxy Authen Type Value", "pfcp.l2tp_user_authentication.proxy_authen_type_value",
16585 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16587 },
16588 { &hf_pfcp_l2tp_user_authentication_b0_pan,
16589 { "PAN (Proxy Authen Name)", "pfcp.l2tp_user_authentication.flags.pan",
16590 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16592 },
16593 { &hf_pfcp_l2tp_user_authentication_b1_pac,
16594 { "PAC (Proxy Authen Challenge)", "pfcp.l2tp_user_authentication.flags.pac",
16595 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16596 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16597 },
16598 { &hf_pfcp_l2tp_user_authentication_b2_par,
16599 { "PAR (Proxy Authen Response)", "pfcp.l2tp_user_authentication.flags.par",
16600 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16601 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16602 },
16603 { &hf_pfcp_l2tp_user_authentication_b3_pai,
16604 { "PAI (Proxy Authen UD)", "pfcp.l2tp_user_authentication.flags.pai",
16605 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
16606 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16607 },
16608 { &hf_pfcp_l2tp_user_authentication_proxy_authen_name_len,
16609 { "Proxy Authen Name Length", "pfcp.l2tp_user_authentication.pan_len",
16610 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
16611 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16612 },
16613 { &hf_pfcp_l2tp_user_authentication_proxy_authen_name,
16614 { "Proxy Authen Name", "pfcp.l2tp_user_authentication.pan",
16615 FT_STRING, BASE_NONE, NULL((void*)0), 0,
16616 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16617 },
16618 { &hf_pfcp_l2tp_user_authentication_proxy_authen_challenge_len,
16619 { "Proxy Authen Challenge Length", "pfcp.l2tp_user_authentication.pac_len",
16620 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
16621 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16622 },
16623 { &hf_pfcp_l2tp_user_authentication_proxy_authen_challenge,
16624 { "Proxy Authen Challenge", "pfcp.l2tp_user_authentication.pac",
16625 FT_STRING, BASE_NONE, NULL((void*)0), 0,
16626 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16627 },
16628 { &hf_pfcp_l2tp_user_authentication_proxy_authen_response_len,
16629 { "Proxy Authen Response Length", "pfcp.l2tp_user_authentication.par_len",
16630 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
16631 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16632 },
16633 { &hf_pfcp_l2tp_user_authentication_proxy_authen_response,
16634 { "Proxy Authen Response", "pfcp.l2tp_user_authentication.par",
16635 FT_STRING, BASE_NONE, NULL((void*)0), 0,
16636 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16637 },
16638 { &hf_pfcp_l2tp_user_authentication_proxy_authen_id,
16639 { "Proxy Authen ID", "pfcp.l2tp_user_authentication.pai",
16640 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
16641 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16642 },
16643
16644 { &hf_pfcp_lns_address_ipv4,
16645 { "IPv4 address", "pfcp.lns_address.ipv4",
16646 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16647 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16648 },
16649 { &hf_pfcp_lns_address_ipv6,
16650 { "IPv6 address", "pfcp.lns_address.ipv6",
16651 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16653 },
16654
16655 { &hf_pfcp_tunnel_preference_value,
16656 { "Tunnel Preference Value", "pfcp.tunnel_preference_value",
16657 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
16658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16659 },
16660
16661 { &hf_pfcp_calling_number_value,
16662 { "Calling Number Value", "pfcp.calling_number_value",
16663 FT_STRING, BASE_NONE, NULL((void*)0), 0,
16664 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16665 },
16666 { &hf_pfcp_called_number_value,
16667 { "Called Number Value", "pfcp.called_number_value",
16668 FT_STRING, BASE_NONE, NULL((void*)0), 0,
16669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16670 },
16671
16672 { &hf_pfcp_l2tp_session_indications_o5_b0_reuia,
16673 { "REUIA", "pfcp.l2tp_session_indications.reuia",
16674 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
16675 "Request UE IP Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16676 },
16677 { &hf_pfcp_l2tp_session_indications_o5_b1_redsa,
16678 { "REDSA", "pfcp.l2tp_session_indications.redsa",
16679 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
16680 "Request DNS Server Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16681 },
16682 { &hf_pfcp_l2tp_session_indications_o5_b2_rensa,
16683 { "RENSA", "pfcp.l2tp_session_indications.rensa",
16684 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
16685 "Request NBNS Server Address", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16686 },
16687
16688 { &hf_pfcp_maximum_receive_unit,
16689 { "Maximum Receive Unit", "pfcp.maximum_receive_unit",
16690 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16691 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16692 },
16693
16694 { &hf_pfcp_thresholds_flags_b0_rtt,
16695 { "RTT", "pfcp.thresholds.flags.rtt",
16696 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16697 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16698 },
16699 { &hf_pfcp_thresholds_flags_b1_plr,
16700 { "PLR (Packet Loss Rate)", "pfcp.thresholds.flags.plr",
16701 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16703 },
16704 { &hf_pfcp_thresholds_rtt,
16705 { "RTT (in milliseconds)", "pfcp.thresholds.rtt",
16706 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16708 },
16709 { &hf_pfcp_thresholds_plr,
16710 { "Packet Loss Rate (in percent)", "pfcp.thresholds.plr",
16711 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
16712 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16713 },
16714
16715 { &hf_pfcp_l2tp_steering_mode_indications_o5_b0_albi,
16716 { "ALBI", "pfcp.l2tp_session_indications.reuia",
16717 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
16718 "Autonomous Load Balancing Indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16719 },
16720 { &hf_pfcp_l2tp_steering_mode_indications_o5_b1_ueai,
16721 { "UEAI", "pfcp.l2tp_session_indications.redsa",
16722 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
16723 "UE Assistance Indicator", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16724 },
16725
16726 { &hf_pfcp_group_id,
16727 { "Group ID", "pfcp.group_id",
16728 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
16729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16730 },
16731
16732 { &hf_pfcp_cp_ip_address_ipv4,
16733 { "IPv4 address", "pfcp.cp_ip_address.ipv4",
16734 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16735 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16736 },
16737 { &hf_pfcp_cp_ip_address_ipv6,
16738 { "IPv6 address", "pfcp.cp_ip_address.ipv6",
16739 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16740 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16741 },
16742
16743 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4,
16744 { "DIPV4", "pfcp.ip_address_and_port_number_replacement.flag.dipv4",
16745 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16746 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16747 },
16748 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6,
16749 { "DIPV6", "pfcp.ip_address_and_port_number_replacement.flag.dipv6",
16750 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16751 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16752 },
16753 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn,
16754 { "DPN", "pfcp.ip_address_and_port_number_replacement.flag.dpn",
16755 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
16756 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16757 },
16758 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4,
16759 { "SIPV4", "pfcp.ip_address_and_port_number_replacement.flag.sipv4",
16760 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
16761 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16762 },
16763 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6,
16764 { "SIPV6", "pfcp.ip_address_and_port_number_replacement.flag.sipv6",
16765 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10,
16766 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16767 },
16768 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn,
16769 { "SPN", "pfcp.ip_address_and_port_number_replacement.flag.spn",
16770 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
16771 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16772 },
16773 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b6_umn6rs,
16774 { "UMN6RS", "pfcp.ip_address_and_port_number_replacement.flag.umn6rs",
16775 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
16776 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16777 },
16778
16779 { &hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4,
16780 { "Destination IPv4 address", "pfcp.ip_address_and_port_number_replacement.dipv4",
16781 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16782 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16783 },
16784 { &hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6,
16785 { "Destination IPv6 address", "pfcp.ip_address_and_port_number_replacement.dipv6",
16786 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16787 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16788 },
16789 { &hf_pfcp_ip_address_and_port_number_replacement_destination_port,
16790 { "Destination Port Number", "pfcp.ip_address_and_port_number_replacement.dpn",
16791 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16792 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16793 },
16794 { &hf_pfcp_ip_address_and_port_number_replacement_source_ipv4,
16795 { "Source IPv4 address", "pfcp.ip_address_and_port_number_replacement.sipv4",
16796 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16797 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16798 },
16799 { &hf_pfcp_ip_address_and_port_number_replacement_source_ipv6,
16800 { "Source IPv6 address", "pfcp.ip_address_and_port_number_replacement.sipv6",
16801 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16802 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16803 },
16804 { &hf_pfcp_ip_address_and_port_number_replacement_source_port,
16805 { "Source Port Number", "pfcp.ip_address_and_port_number_replacement.spn",
16806 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16807 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16808 },
16809
16810 { &hf_pfcp_dns_query_filter_pattern_len,
16811 { "DNS Query Filter Pattern Length", "pfcp.dns_query_filter.pattern_len",
16812 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16813 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16814 },
16815 { &hf_pfcp_dns_query_filter_pattern,
16816 { "DNS Query Filter Pattern", "pfcp.dns_query_filter.pattern",
16817 FT_STRING, BASE_NONE, NULL((void*)0), 0,
16818 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16819 },
16820
16821 { &hf_pfcp_event_notification_uri,
16822 { "Event Notification URI", "pfcp.event_notification_uri",
16823 FT_STRING, BASE_NONE, NULL((void*)0), 0,
16824 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16825 },
16826
16827 { &hf_pfcp_notification_correlation_id,
16828 { "QER Correlation ID", "pfcp.qer_correlation_id",
16829 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16830 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16831 },
16832
16833 { &hf_pfcp_reporting_flags_o5_b0_dupl,
16834 { "DUPL (Duplication Notification)", "pfcp.reporting_flags.dupl",
16835 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
16836 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16837 },
16838
16839 { &hf_pfcp_mbs_session_identifier_flag_b0_tmgi,
16840 { "TGMI", "pfcp.session_identifier.flag.tmgi",
16841 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
16842 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16843 },
16844 { &hf_pfcp_mbs_session_identifier_flag_b1_ssmi,
16845 { "SSMI", "pfcp.session_identifier.flag.ssmi",
16846 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
16847 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16848 },
16849 { &hf_pfcp_mbs_session_identifier_flag_b2_nidi,
16850 { "NIDI", "pfcp.session_identifier.flag.nidi",
16851 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
16852 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16853 },
16854 { &hf_pfcp_mbs_session_identifier_tmgi,
16855 {"TMGI", "pfcp.mbs_session_identifier.tmgi",
16856 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16857 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
16858 },
16859 { &hf_pfcp_mbs_session_identifier_source_address_type,
16860 { "Source Address Type", "pfcp.mbs_session_identifier.source_address.type",
16861 FT_UINT8, BASE_DEC, NULL((void*)0), 0xC0,
16862 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16863 },
16864 { &hf_pfcp_mbs_session_identifier_source_address_length,
16865 { "Source Address Length", "pfcp.mbs_session_identifier.source_address.length",
16866 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3F,
16867 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16868 },
16869 { &hf_pfcp_mbs_session_identifier_source_address_ipv4,
16870 { "Source IPv4 address", "pfcp.mbs_session_identifier.source_address.ipv4",
16871 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16872 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16873 },
16874 { &hf_pfcp_mbs_session_identifier_source_address_ipv6,
16875 { "Source IPv6 address", "pfcp.mbs_session_identifier.source_address.ipv6",
16876 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16877 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16878 },
16879 { &hf_pfcp_mbs_session_identifier_nidi,
16880 {"NIDI", "pfcp.mbs_session_identifier.nidi",
16881 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
16882 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)}
16883 },
16884
16885 { &hf_pfcp_multicast_transport_information_endpoint_identifier,
16886 { "Common Tunnel Endpoint Identifier", "pfcp.multicast_transport_information.endpoint_identifier",
16887 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
16888 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16889 },
16890 { &hf_pfcp_multicast_transport_information_distribution_address_type,
16891 { "Distribution Address Type", "pfcp.multicast_transport_information.distribution_address.type",
16892 FT_UINT8, BASE_DEC, NULL((void*)0), 0xC0,
16893 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16894 },
16895 { &hf_pfcp_multicast_transport_information_distribution_address_length,
16896 { "Distribution Address Length", "pfcp.multicast_transport_information.distribution_address.length",
16897 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3F,
16898 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16899 },
16900 { &hf_pfcp_multicast_transport_information_distribution_address_ipv4,
16901 { "Distribution IPv4 address", "pfcp.multicast_transport_information.distribution_address.ipv4",
16902 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16903 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16904 },
16905 { &hf_pfcp_multicast_transport_information_distribution_address_ipv6,
16906 { "Distribution IPv6 address", "pfcp.multicast_transport_information.distribution_address.ipv6",
16907 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16908 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16909 },
16910 { &hf_pfcp_multicast_transport_information_source_address_type,
16911 { "Source Address Type", "pfcp.multicast_transport_information.source_address.type",
16912 FT_UINT8, BASE_DEC, NULL((void*)0), 0xC0,
16913 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16914 },
16915 { &hf_pfcp_multicast_transport_information_source_address_length,
16916 { "Source Address Length", "pfcp.multicast_transport_information.source_address.length",
16917 FT_UINT8, BASE_DEC, NULL((void*)0), 0x3F,
16918 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16919 },
16920 { &hf_pfcp_multicast_transport_information_source_address_ipv4,
16921 { "Source IPv4 address", "pfcp.multicast_transport_information.source_address.ipv4",
16922 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16923 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16924 },
16925 { &hf_pfcp_multicast_transport_information_source_address_ipv6,
16926 { "Source IPv6 address", "pfcp.multicast_transport_information.source_address.ipv6",
16927 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16928 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16929 },
16930
16931 { &hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm,
16932 { "PLLSSM (Provide Lower Layer SSM)", "pfcp.reporting_flags.pllssm",
16933 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
16934 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16935 },
16936 { &hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm,
16937 { "JMBSSM (Join MBS Session SSM)", "pfcp.reporting_flags.jmbssm",
16938 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
16939 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16940 },
16941 { &hf_pfcp_mbsn4mbreq_flags_o5_b2_mbs_resti,
16942 { "MBS RESTI (MBS Restoration Indication)", "pfcp.reporting_flags.mbs_resti",
16943 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
16944 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16945 },
16946
16947 { &hf_pfcp_local_ingress_tunnel_flags_b2_ch,
16948 { "CH (CHOOSE)", "pfcp.local_ingress_tunnel.flags.ch",
16949 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
16950 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16951 },
16952 { &hf_pfcp_local_ingress_tunnel_flags_b1_v6,
16953 { "V6 (IPv6)", "pfcp.local_ingress_tunnel.flags.v6",
16954 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
16955 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16956 },
16957 { &hf_pfcp_local_ingress_tunnel_flags_b0_v4,
16958 { "V4 (IPv4)", "pfcp.local_ingress_tunnel.flags.v4",
16959 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
16960 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16961 },
16962 { &hf_pfcp_local_ingress_tunnel_udp_port,
16963 { "UDP Port", "pfcp.local_ingress_tunnel.udp",
16964 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
16965 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16966 },
16967 { &hf_pfcp_local_ingress_tunnel_ipv4,
16968 { "IPv4 address", "pfcp.local_ingress_tunnel.ipv4",
16969 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
16970 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16971 },
16972 { &hf_pfcp_local_ingress_tunnel_ipv6,
16973 { "IPv6 address", "pfcp.local_ingress_tunnel.ipv6",
16974 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
16975 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16976 },
16977
16978 { &hf_pfcp_mbs_unicast_parameters_id,
16979 { "MBS Unicast Parameters ID value", "pfcp.mbs_unicast_parameters_id",
16980 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
16981 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16982 },
16983
16984 { &hf_pfcp_mbsn4resp_flags_o5_b0_nn19dt,
16985 { "NN19DT", "pfcp.mbsn4resp_flags.nn19dt",
16986 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
16987 "New N19mb Downlink Tunnel", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16988 },
16989 { &hf_pfcp_mbsn4resp_flags_o5_b1_jmti,
16990 { "JMTI", "pfcp.mbsn4resp_flags.jmti",
16991 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
16992 "Joined N19mb Multicast Tree Indication", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16993 },
16994 { &hf_pfcp_mbsn4resp_flags_o5_b2_n19dtr,
16995 { "N19DTR", "pfcp.mbsn4resp_flags.n19dtr",
16996 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
16997 "N19mb Downlink Tunnel Removal", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
16998 },
16999
17000 { &hf_pfcp_tunnel_password_value,
17001 { "Tunnel Password value", "pfcp.tunnel_password_value",
17002 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17003 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17004 },
17005
17006 { &hf_pfcp_area_session_id_value,
17007 { "Area Session ID value", "pfcp.area_session_id_value",
17008 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17010 },
17011
17012 { &hf_pfcp_dscp_to_ppi_mapping_info_ppi_value,
17013 { "PPI value", "pfcp.dscp_to_ppi_mapping_info_ppi_value",
17014 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17015 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17016 },
17017
17018 { &hf_pfcp_dscp_to_ppi_mapping_info_dscp_value,
17019 { "DSCP value", "pfcp.dscp_to_ppi_mapping_info_dscp_value",
17020 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17021 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17022 },
17023
17024 { &hf_pfcp_pfcpsdrsp_flags_b0_puru,
17025 { "PURU (Pending Usage Reports Unacknowledged)", "pfcp.pfcpsdrsp_flags.puru",
17026 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17027 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17028 },
17029
17030 { &hf_pfcp_qer_indications_flags_b0_iqfis,
17031 { "IQFIS (Insert DL MBS QFI SN)", "pfcp.qer_indications_flags.iqfis",
17032 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17033 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17034 },
17035 { &hf_pfcp_qer_indications_flags_b1_edbmi,
17036 { "EDBMI (End Of Data Burst Marking Indication)", "pfcp.qer_indications_flags.edbmi",
17037 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17038 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17039 },
17040 { &hf_pfcp_qer_indications_flags_b2_eml4s,
17041 { "EML4S (ECN Marking for L4S)", "pfcp.qer_indications_flags.eml4s",
17042 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
17043 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17044 },
17045 { &hf_pfcp_qer_indications_flags_b3_pdusm,
17046 { "PDUSM (PDU Set Marking)", "pfcp.qer_indications_flags.pdusm",
17047 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
17048 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17049 },
17050
17051 { &hf_pfcp_configured_time_domain_flags_b0_ctdi,
17052 { "CTDI (Configured Time Domain Indicator)", "pfcp.qer_indications_flags.ctdi",
17053 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17055 },
17056
17057 { &hf_pfcp_metadata,
17058 { "Metadata", "pfcp.metadata.metadata",
17059 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17060 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17061 },
17062 { &hf_pfcp_metadata_binary_metadata,
17063 { "Metadata - Binary data", "pfcp.metadata.binary_metadata",
17064 FT_BYTES, BASE_NONE, NULL((void*)0), 0x00,
17065 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17066 },
17067
17068 { &hf_pfcp_traffic_parameter_threshold_flags_b0_dl,
17069 { "DL", "pfcp.traffic_parameter_threshold_flags.dl",
17070 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17071 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17072 },
17073 { &hf_pfcp_traffic_parameter_threshold_downlink_n6_jitter_threshold,
17074 { "Downlink N6 Jitter Threshold", "pfcp.traffic_parameter_threshold.downlink_n6_jitter_threshold",
17075 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17076 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17077 },
17078
17079 { &hf_pfcp_dl_periodicity_value,
17080 { "Dl Periodicity", "pfcp.dl_periodicity.value",
17081 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17082 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17083 },
17084
17085 { &hf_pfcp_n6_jitter_measurement_flags_b0_dl,
17086 { "DL", "pfcp.dl_periodicity.dl",
17087 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17088 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17089 },
17090 { &hf_pfcp_n6_jitter_measurement_dl_periodicity,
17091 { "DL Periodicity", "pfcp.dl_periodicity.dl_periodicity",
17092 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17093 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17094 },
17095 { &hf_pfcp_n6_jitter_measurement_lower_dl_jitter_measurement,
17096 { "Lower DL Jitter Measurement", "pfcp.dl_periodicity.lower_dl_jitter_measurement",
17097 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17098 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17099 },
17100 { &hf_pfcp_n6_jitter_measurement_higher_dl_jitter_measurement,
17101 { "Higher DL Jitter Measurement", "pfcp.dl_periodicity.higher_dl_jitter_measurement",
17102 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17103 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17104 },
17105
17106 { &hf_pfcp_traffic_parameter_measurement_indication_flags_b0_ulpmi,
17107 { "ULPMI", "pfcp.traffic_parameter_measurement_indication.ulpmi",
17108 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17110 },
17111 { &hf_pfcp_traffic_parameter_measurement_indication_flags_b1_dlpmi,
17112 { "DLPMI", "pfcp.traffic_parameter_measurement_indication.dlpmi",
17113 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17115 },
17116 { &hf_pfcp_traffic_parameter_measurement_indication_flags_b2_n6jmi,
17117 { "N6JMI", "pfcp.traffic_parameter_measurement_indication.n6jmi",
17118 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17120 },
17121
17122 { &hf_pfcp_ul_periodicity_value,
17123 { "Ul Periodicity", "pfcp.ul_periodicity.value",
17124 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17125 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17126 },
17127
17128 { &hf_pfcp_mpquic_control_information_flags_b0_cupd,
17129 { "CUPD", "pfcp.quic_control_information.cupd",
17130 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17131 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17132 },
17133
17134 { &hf_pfcp_mpquic_address_information_flags_b0_v4,
17135 { "V4", "pfcp.mpquic_address_information.flags.v4",
17136 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
17137 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17138 },
17139 { &hf_pfcp_mpquic_address_information_flags_b1_v6,
17140 { "V6", "pfcp.mpquic_address_information.flags.v6",
17141 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
17142 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17143 },
17144 { &hf_pfcp_mpquic_address_information_type,
17145 { "MPQUIC Proxy Type", "pfcp.mpquic_address_information.type",
17146 FT_UINT8, BASE_DEC, VALS(pfcp_mpquic_address_information_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_mpquic_address_information_type_vals
))))
, 0x0,
17147 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17148 },
17149 { &hf_pfcp_mpquic_address_information_port,
17150 { "MPQUIC Proxy Port", "pfcp.mpquic_address_information.port",
17151 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17152 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17153 },
17154 { &hf_pfcp_mpquic_address_information_address_ipv4,
17155 { "MPQUIC Proxy IPv4 Address", "pfcp.mpquic_address_information.ipv4",
17156 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
17157 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17158 },
17159 { &hf_pfcp_mpquic_address_information_address_ipv6,
17160 { "MPQUIC Proxy IPv6 Address", "pfcp.mpquic_address_information.ipv6",
17161 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
17162 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17163 },
17164
17165 { &hf_pfcp_transport_mode_value,
17166 { "Transport Mode Value", "pfcp.transport_mode.value",
17167 FT_UINT8, BASE_DEC, VALS(pfcp_transport_mode_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_transport_mode_type_vals
))))
, 0x0f,
17168 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17169 },
17170
17171 { &hf_pfcp_protocol_description_flags_b0_h264,
17172 { "H264", "pfcp.protocol_description.h264",
17173 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17175 },
17176 { &hf_pfcp_protocol_description_flags_b1_rtp,
17177 { "RTP", "pfcp.protocol_description.rtp",
17178 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17180 },
17181 { &hf_pfcp_protocol_description_flags_b2_srtp,
17182 { "SRTP", "pfcp.protocol_description.srtp",
17183 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17185 },
17186
17187 { &hf_pfcp_reporting_suggestion_info_reporting_urgency_value,
17188 { "Reporting Urgency value", "pfcp.reporting_suggestion_info.reporting_urgency_value",
17189 FT_UINT8, BASE_DEC, VALS(pfcp_reporting_urgency_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_reporting_urgency_type_vals
))))
, 0x0f,
17190 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17191 },
17192 { &hf_pfcp_reporting_suggestion_info_reporting_time_info,
17193 { "Reporting Time Info", "pfcp.reporting_suggestion_info.reporting_time_info",
17194 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17195 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17196 },
17197
17198 { &hf_pfcp_tl_container,
17199 { "TL-Container", "pfcp.tl_container",
17200 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17201 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17202 },
17203
17204 { &hf_pfcp_measurement_indication_flags_b0_dqfi,
17205 { "DQFI", "pfcp.measurement_indication.dqfi",
17206 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17207 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17208 },
17209
17210 { &hf_pfcp_hplmn_s_nssai_sst,
17211 { "SST (Slice/Service Type)", "pfcp.hplmn_s_nssai.sst",
17212 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17213 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17214 },
17215 { &hf_pfcp_hplmn_s_nssai_sd,
17216 { "SD (Slice Differentiator)", "pfcp.hplmn_s_nssai.sd",
17217 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17218 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17219 },
17220
17221 { &hf_pfcp_media_transport_protocol,
17222 { "Media Transport Protocol", "pfcp.media_transport_protocol.media_transport_protocol_value",
17223 FT_UINT8, BASE_DEC, VALS(pfcp_media_transport_protocol_vals)((0 ? (const struct _value_string*)0 : ((pfcp_media_transport_protocol_vals
))))
, 0x0f,
17224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17225 },
17226
17227 { &hf_pfcp_rtp_header_extension_type,
17228 { "RTP Header Extension Type", "pfcp.rtp_header_extension.rtp_header_extension_type",
17229 FT_UINT8, BASE_DEC, VALS(pfcp_rtp_header_extension_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_rtp_header_extension_type_vals
))))
, 0x0,
17230 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17231 },
17232
17233 { &hf_pfcp_rtp_header_extension_id,
17234 { "RTP Header Extension ID", "pfcp.rtp_header_extension_id.rtp_header_extension_id",
17235 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17236 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17237 },
17238
17239 { &hf_pfcp_rtp_payload_type,
17240 { "RTP Payload Type", "pfcp.rtp_payload_type.rtp_payload_type",
17241 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17242 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17243 },
17244
17245 { &hf_pfcp_rtp_payload_format,
17246 { "RTP Payload Format", "pfcp.rtp_payload_format.rtp_payload_format",
17247 FT_UINT8, BASE_DEC, VALS(pfcp_rtp_payload_format_vals)((0 ? (const struct _value_string*)0 : ((pfcp_rtp_payload_format_vals
))))
, 0x0,
17248 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17249 },
17250
17251 { &hf_pfcp_extended_dl_buffering_notification_policy_flags_b0_edbn,
17252 { "EDBN", "pfcp.extended_dl_buffering_notification_policy.edbn",
17253 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17254 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17255 },
17256
17257 { &hf_pfcp_mt_sdt_control_information_flags_b0_rdsi,
17258 { "RDSI", "pfcp.mt_sdt_control_information.rdsi",
17259 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17260 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17261 },
17262
17263 { &hf_pfcp_reporting_thresholds_flags_b0_dlci,
17264 { "DLCI", "pfcp.reporting_thresholds.flags.dlci",
17265 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
17266 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17267 },
17268 { &hf_pfcp_reporting_thresholds_flags_b1_ulci,
17269 { "ULCI", "pfcp.reporting_thresholds.flags.ulci",
17270 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
17271 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17272 },
17273 { &hf_pfcp_reporting_thresholds_flags_b2_dldr,
17274 { "DLRP", "pfcp.reporting_thresholds.flags.dlrp",
17275 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
17276 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17277 },
17278 { &hf_pfcp_reporting_thresholds_flags_b3_uldr,
17279 { "ULRP", "pfcp.reporting_thresholds.flags.ulrp",
17280 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
17281 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17282 },
17283 { &hf_pfcp_reporting_thresholds_dl_congestion_information_threshold,
17284 { "DL Congestion Information Threshold", "pfcp.reporting_thresholds.dl_congestion",
17285 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17286 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17287 },
17288 { &hf_pfcp_reporting_thresholds_ul_congestion_information_threshold,
17289 { "UL Congestion Information Threshold", "pfcp.reporting_thresholds.ul_congestion",
17290 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17291 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17292 },
17293 { &hf_pfcp_reporting_thresholds_dl_data_rate_threshold,
17294 { "DL Data Rate threshold (kilobits)", "pfcp.reporting_thresholds.dl_data_rate",
17295 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17296 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17297 },
17298 { &hf_pfcp_reporting_thresholds_ul_data_rate_threshold,
17299 { "UL Data Rate threshold (kilobits)", "pfcp.reporting_thresholds.ul_data_rate",
17300 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17301 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17302 },
17303
17304 { &hf_pfcp_rtp_header_extension_additional_information_flags_b0_fi,
17305 { "FI (Format Indication)", "pfcp.rtp_header_extension_additional_information.flags.fi",
17306 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
17307 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17308 },
17309 { &hf_pfcp_rtp_header_extension_additional_information_flags_b1_pssai,
17310 { "PSSAI (PDU Set Size Activation Indication)", "pfcp.rtp_header_extension_additional_information.flags.pssai",
17311 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
17312 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17313 },
17314 { &hf_pfcp_rtp_header_extension_additional_information_pssa,
17315 { "PSSA", "pfcp.rtp_header_extension_additional_information.pssa",
17316 FT_UINT8, BASE_DEC, NULL((void*)0), 0x4,
17317 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17318 },
17319 { &hf_pfcp_rtp_header_extension_additional_information_format,
17320 { "Format", "pfcp.rtp_header_extension_additional_information.format",
17321 FT_UINT8, BASE_DEC, VALS(pfcp_rtp_header_extension_additional_information_type_vals)((0 ? (const struct _value_string*)0 : ((pfcp_rtp_header_extension_additional_information_type_vals
))))
, 0x3,
17322 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17323 },
17324 { &hf_pfcp_mapped_n6_ip_address_b0_chv4,
17325 { "CHV4", "pfcp.mapped_n6_ip_address.flags.chv4",
17326 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
17327 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17328 },
17329 { &hf_pfcp_mapped_n6_ip_address_b1_v4,
17330 { "V4", "pfcp.mapped_n6_ip_address.flags.v4",
17331 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
17332 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17333 },
17334 { &hf_pfcp_mapped_n6_ip_address_ipv4,
17335 { "IPv4 address", "pfcp.mapped_n6_ip_address.ipv4",
17336 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
17337 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17338 },
17339
17340 { &hf_pfcp_n6_routing_information_flag_b0_sipv4,
17341 { "SIPV4", "pfcp.n6_routing_information.flag.sipv4",
17342 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
17343 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17344 },
17345 { &hf_pfcp_n6_routing_information_flag_b1_sipv6,
17346 { "SIPV6", "pfcp.n6_routing_information.flag.sipv6",
17347 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
17348 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17349 },
17350 { &hf_pfcp_n6_routing_information_flag_b2_spo,
17351 { "SPO", "pfcp.n6_routing_information.flag.spo",
17352 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
17353 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17354 },
17355 { &hf_pfcp_n6_routing_information_flag_b3_dipv4,
17356 { "DIPV4", "pfcp.n6_routing_information.flag.dipv4",
17357 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x08,
17358 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17359 },
17360 { &hf_pfcp_n6_routing_information_flag_b4_dipv6,
17361 { "DIPV6", "pfcp.n6_routing_information.flag.dipv6",
17362 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x10,
17363 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17364 },
17365 { &hf_pfcp_n6_routing_information_flag_b5_dpo,
17366 { "DPO", "pfcp.n6_routing_information.flag.spn",
17367 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x20,
17368 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17369 },
17370
17371 { &hf_pfcp_n6_routing_information_source_ipv4,
17372 { "Source IPv4 address", "pfcp.n6_routing_information.sipv4",
17373 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
17374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17375 },
17376 { &hf_pfcp_n6_routing_information_source_ipv6,
17377 { "Source IPv6 address", "pfcp.n6_routing_information.sipv6",
17378 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
17379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17380 },
17381 { &hf_pfcp_n6_routing_information_source_port,
17382 { "Source Port Number", "pfcp.n6_routing_information.spn",
17383 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17385 },
17386 { &hf_pfcp_n6_routing_information_destination_ipv4,
17387 { "Destination IPv4 address", "pfcp.n6_routing_information.dipv4",
17388 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
17389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17390 },
17391 { &hf_pfcp_n6_routing_information_destination_ipv6,
17392 { "Destination IPv6 address", "pfcp.n6_routing_information.dipv6",
17393 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
17394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17395 },
17396 { &hf_pfcp_n6_routing_information_destination_port,
17397 { "Destination Port Number", "pfcp.n6_routing_information.dpn",
17398 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17400 },
17401
17402 /* Enterprise IEs */
17403 /* BBF */
17404 { &hf_pfcp_bbf_up_function_features_o7_b0_pppoe,
17405 { "PPPoE", "pfcp.bbf.up_function_features.pppoe",
17406 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
17407 "PPPoE supported in DBNG-UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17408 },
17409 { &hf_pfcp_bbf_up_function_features_o7_b1_ipoe,
17410 { "IPoE", "pfcp.bbf.up_function_features.ipoe",
17411 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x02,
17412 "IPoE supported in DBNG-UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17413 },
17414 { &hf_pfcp_bbf_up_function_features_o7_b2_lac,
17415 { "LAC", "pfcp.bbf.up_function_features.lac",
17416 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x04,
17417 "LAC function supported in DBNG-UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17418 },
17419 { &hf_pfcp_bbf_up_function_features_o7_b3_lns,
17420 { "LNS", "pfcp.bbf.up_function_features.lns",
17421 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
17422 "LNS function supported in DBNG-UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17423 },
17424 { &hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload,
17425 { "LCP keepalive offload", "pfcp.bbf.up_function_features.lcp_keepalive_offload",
17426 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x10,
17427 "PPP LCP echo supported in DBNG-UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17428 },
17429 { &hf_pfcp_bbf_up_function_features_o7_b5_iptv,
17430 { "IPTV", "pfcp.bbf.up_function_features.iptv",
17431 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x20,
17432 "DBNG-UP support of IP Multicast", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17433 },
17434 { &hf_pfcp_bbf_up_function_features_o7_b6_nat_cp,
17435 { "NAT-CP", "pfcp.bbf.up_function_features.nat_cp",
17436 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x40,
17437 "NAT function supported in DBNG-CP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17438 },
17439 { &hf_pfcp_bbf_up_function_features_o7_b7_nat_up,
17440 { "NAT-UP", "pfcp.bbf.up_function_features.nat_up",
17441 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x80,
17442 "NAT function supported in DBNG-UP function", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17443 },
17444
17445 { &hf_pfcp_bbf_logical_port_id,
17446 { "Logical Port", "pfcp.bbf.logical_port_id",
17447 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17448 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17449 },
17450 { &hf_pfcp_bbf_logical_port_id_str,
17451 { "Logical Port", "pfcp.bbf.logical_port_id_str",
17452 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17453 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17454 },
17455
17456 { &hf_pfcp_bbf_outer_hdr_creation_desc_spare,
17457 { "Spare", "pfcp.bbf.outer_hdr_creation.desc.spare",
17458 FT_BOOLEAN, 16, NULL((void*)0), 0xf0ff,
17459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17460 },
17461 { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b4_ppp,
17462 { "PPP", "pfcp.bbf.outer_hdr_creation.desc.ppp",
17463 FT_BOOLEAN, 16, NULL((void*)0), 0x0800,
17464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17465 },
17466 { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b3_l2tp,
17467 { "L2TP", "pfcp.bbf.outer_hdr_creation.desc.l2tp",
17468 FT_BOOLEAN, 16, NULL((void*)0), 0x0400,
17469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17470 },
17471 { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b2_traffic_endpoint,
17472 { "Traffic-Endpoint", "pfcp.bbf.outer_hdr_creation.desc.trfep",
17473 FT_BOOLEAN, 16, NULL((void*)0), 0x0200,
17474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17475 },
17476 { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b1_crp_nsh,
17477 { "CPR-NSH", "pfcp.bbf.outer_hdr_creation.desc.cpr_nsh",
17478 FT_BOOLEAN, 16, NULL((void*)0), 0x0100,
17479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17480 },
17481 { &hf_pfcp_bbf_outer_hdr_creation_tunnel_id,
17482 { "L2TP Tunnel ID", "pfcp.bbf.outer_hdr_creation.tunnel_id",
17483 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
17484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17485 },
17486 { &hf_pfcp_bbf_outer_hdr_creation_session_id,
17487 { "L2TP Session ID", "pfcp.bbf.outer_hdr_creation.session_id",
17488 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
17489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17490 },
17491
17492 { &hf_pfcp_bbf_out_hdr_desc,
17493 { "BBF Outer Header Removal Description", "pfcp.bbf.out_hdr_desc",
17494 FT_UINT8, BASE_DEC, VALS(pfcp_bbf_out_hdr_desc_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_out_hdr_desc_vals
))))
, 0x0,
17495 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17496 },
17497
17498 { &hf_pfcp_bbf_pppoe_session_id,
17499 { "PPPoE Session ID", "pfcp.bbf.pppoe_session_id",
17500 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
17501 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17502 },
17503
17504 { &hf_pfcp_bbf_ppp_protocol_flags,
17505 { "Flags", "pfcp.bbf.protocol_flags",
17506 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
17507 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17508 },
17509 { &hf_pfcp_bbf_ppp_protocol_b2_control,
17510 { "control", "pfcp.bbf.protocol_flags.control",
17511 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
17512 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17513 },
17514 { &hf_pfcp_bbf_ppp_protocol_b1_data,
17515 { "data", "pfcp.bbf.protocol_flags.data",
17516 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17517 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17518 },
17519 { &hf_pfcp_bbf_ppp_protocol_b0_specific,
17520 { "specific", "pfcp.bbf.protocol_flags.specific",
17521 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
17522 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17523 },
17524 { &hf_pfcp_bbf_ppp_protocol,
17525 { "protocol", "pfcp.bbf.protocol_flags.protocol",
17526 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
17527 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17528 },
17529
17530 { &hf_pfcp_bbf_verification_timer_interval,
17531 { "Interval", "pfcp.bbf.verification_timer.interval",
17532 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17533 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17534 },
17535 { &hf_pfcp_bbf_verification_timer_count,
17536 { "Count", "pfcp.bbf.verification_timer.count",
17537 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17538 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17539 },
17540
17541 { &hf_pfcp_bbf_ppp_lcp_magic_number_tx,
17542 { "PPP LCP Magic Number Tx", "pfcp.bbf.lcp_magic_number.tx",
17543 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
17544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17545 },
17546 { &hf_pfcp_bbf_ppp_lcp_magic_number_rx,
17547 { "PPP LCP Magic Number Rx", "pfcp.bbf.lcp_magic_number.rx",
17548 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
17549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17550 },
17551
17552 { &hf_pfcp_bbf_mtu,
17553 { "MTU", "pfcp.bbf.mtu",
17554 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17555 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17556 },
17557
17558 { &hf_pfcp_bbf_l2tp_endp_flags,
17559 { "Flags", "pfcp.bbf.l2tp_endp_flags",
17560 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
17561 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17562 },
17563 { &hf_pfcp_bbf_l2tp_endp_flags_b2_ch,
17564 { "CH (CHOOSE)", "pfcp.bbf.l2tp_endp_flags.ch",
17565 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
17566 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17567 },
17568 { &hf_pfcp_bbf_l2tp_endp_flags_b1_v6,
17569 { "V6 (IPv6)", "pfcp.bbf.l2tp_endp_flags.v6",
17570 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17571 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17572 },
17573 { &hf_pfcp_bbf_l2tp_endp_flags_b0_v4,
17574 { "V4 (IPv4)", "pfcp.bbf.l2tp_endp_flags.v4",
17575 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17576 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17577 },
17578 { &hf_pfcp_bbf_l2tp_endp_id_tunnel_id,
17579 { "Tunnel ID", "pfcp.bbf.l2tp_endp.tunnel_id",
17580 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
17581 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17582 },
17583 { &hf_pfcp_bbf_l2tp_endp_id_ipv4,
17584 { "IPv4 address", "pfcp.bbf.l2tp_endp.ipv4_addr",
17585 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
17586 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17587 },
17588 { &hf_pfcp_bbf_l2tp_endp_id_ipv6,
17589 { "IPv6 address", "pfcp.bbf.l2tp_endp.ipv6_addr",
17590 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
17591 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17592 },
17593
17594 { &hf_pfcp_bbf_l2tp_session_id,
17595 { "L2TP Session ID", "pfcp.bbf.bbf_l2tp_session_id",
17596 FT_UINT16, BASE_HEX, NULL((void*)0), 0x0,
17597 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17598 },
17599
17600 { &hf_pfcp_bbf_l2tp_type_flags,
17601 { "Flags", "pfcp.bbf.l2tp_type_flags",
17602 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
17603 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17604 },
17605 { &hf_pfcp_bbf_l2tp_type_flags_b0_t,
17606 { "T (TYPE)", "pfcp.bbf.l2tp_type_flags.t",
17607 FT_BOOLEAN, 8, TFS(&pfcp_bbf_l2tp_type_b0_t_tfs)((0 ? (const struct true_false_string*)0 : ((&pfcp_bbf_l2tp_type_b0_t_tfs
))))
, 0x01,
17608 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17609 },
17610
17611 { &hf_pfcp_bbf_multicast_flags_o7_b1_routeralertoff,
17612 { "ROUTERALERTOFF", "pfcp.bbf.multicast_flags.routeralertoff",
17613 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17614 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17615 },
17616 { &hf_pfcp_bbf_multicast_flags_o7_b0_fastleave,
17617 { "FASTLEAVE", "pfcp.bbf.multicast_flags.fastleave",
17618 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17619 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17620 },
17621
17622 { &hf_pfcp_bbf_multicast_query_param_robustness,
17623 { "Robustness count", "pfcp.bbf.multicast_query_parameters.robustness_count",
17624 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17625 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17626 },
17627 { &hf_pfcp_bbf_multicast_query_param_query_interval,
17628 { "Query interval", "pfcp.bbf.multicast_query_parameters.query_interval",
17629 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17630 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17631 },
17632 { &hf_pfcp_bbf_multicast_query_param_query_response_interval,
17633 { "Query response interval", "pfcp.bbf.multicast_query_parameters.query_response_interval",
17634 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17635 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17636 },
17637 { &hf_pfcp_bbf_multicast_query_param_group_query_interval,
17638 { "Group-specific query interval", "pfcp.bbf.multicast_query_parameters.group_specific_query_interval",
17639 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17640 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17641 },
17642
17643 { &hf_pfcp_bbf_multicast_group_limit_max_joins,
17644 { "Maximum number of concurrent (S,G) joins allowed", "pfcp.bbf.multicast_group_limit.max_joins",
17645 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17646 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17647 },
17648
17649 { &hf_pfcp_bbf_apply_action_flags_b0_nat,
17650 { "NAT", "pfcp.bbf.apply_action_flags.nat",
17651 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17652 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17653 },
17654
17655 { &hf_pfcp_bbf_nat_external_port_range_start,
17656 { "Start", "pfcp.bbf.nat_external_port_range.start",
17657 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17658 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17659 },
17660 { &hf_pfcp_bbf_nat_external_port_range_end,
17661 { "End", "pfcp.bbf.nat_external_port_range.end",
17662 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17663 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17664 },
17665
17666 { &hf_pfcp_bbf_nat_port_forward,
17667 { "NAT Port Forward", "pfcp.bbf.nat_port_forward",
17668 FT_NONE, BASE_NONE, NULL((void*)0), 0x0,
17669 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17670 },
17671 { &hf_pfcp_bbf_nat_port_forward_inside_ip,
17672 { "Inside Address", "pfcp.bbf.nat_port_forward.inside_address",
17673 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
17674 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17675 },
17676 { &hf_pfcp_bbf_nat_port_forward_inside_port,
17677 { "Inside Port", "pfcp.bbf.nat_port_forward.inside_port",
17678 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17679 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17680 },
17681 { &hf_pfcp_bbf_nat_port_forward_outside_port,
17682 { "Outside Port", "pfcp.bbf.nat_port_forward.outside_port",
17683 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17684 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17685 },
17686 { &hf_pfcp_bbf_nat_port_forward_protocol,
17687 { "Protocol", "pfcp.bbf.nat_port_forward.protocol",
17688 FT_UINT8, BASE_DEC|BASE_EXT_STRING0x00000200, &ipproto_val_ext, 0x0,
17689 NULL((void*)0) , HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0)
17690 }
17691 },
17692
17693 { &hf_pfcp_bbf_reporting_trigger,
17694 { "Reporting Trigger", "pfcp.bbf.reporting_trigger",
17695 FT_UINT8, BASE_DEC, VALS(pfcp_bbf_reporting_trigger_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_reporting_trigger_vals
))))
, 0x0,
17696 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17697 },
17698
17699 { &hf_pfcp_bbf_dynamic_nat_block_port_range_start_port,
17700 { "Start", "pfcp.dynamic_nat_block_port_range.start",
17701 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17702 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17703 },
17704 { &hf_pfcp_bbf_dynamic_nat_block_port_range_end_port,
17705 { "End", "pfcp.dynamic_nat_block_port_range.end",
17706 FT_UINT16, BASE_DEC, NULL((void*)0), 0x0,
17707 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17708 },
17709
17710 { &hf_pfcp_bbf_event_time_stamp,
17711 { "Event Time Stamp", "pfcp.bbf.event_time_stamp",
17712 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0x0,
17713 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17714 },
17715
17716 { &hf_pfcp_bbf_direction,
17717 { "Direction", "pfcp.bbf.direction",
17718 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_direction_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_direction_vals
))))
, 0x0,
17719 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17720 },
17721 { &hf_pfcp_bbf_family,
17722 { "Family", "pfcp.bbf.family",
17723 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_family_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_family_vals
))))
, 0x0,
17724 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17725 },
17726 { &hf_pfcp_bbf_sgrp_identifier,
17727 { "SGRP Identifier", "pfcp.bbf.sgrp_identifier",
17728 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17729 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17730 },
17731 { &hf_pfcp_bbf_sgrp_state,
17732 { "SGRP State", "pfcp.bbf.sgrp_state",
17733 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_sgrp_state_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_sgrp_state_vals
))))
, 0x0,
17734 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17735 },
17736 { &hf_pfcp_bbf_sgrp_flags,
17737 { "Flags", "pfcp.bbf.sgrp_flags",
17738 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
17739 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17740 },
17741 { &hf_pfcp_bbf_sgrp_flags_b0_ras,
17742 { "RAS", "pfcp.bbf.sgrp_flags.ras",
17743 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17744 "Route Advertisement State", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17745 },
17746 { &hf_pfcp_bbf_sgrp_flags_b1_psa,
17747 { "PSA", "pfcp.bbf.sgrp_flags.psa",
17748 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17749 "Partial State Allowed", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17750 },
17751 { &hf_pfcp_bbf_operational_condition,
17752 { "Operational Condition", "pfcp.bbf.operational_condition",
17753 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_operational_condition_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_operational_condition_vals
))))
, 0x0,
17754 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17755 },
17756 { &hf_pfcp_bbf_ipv4_prefix,
17757 { "IPv4 Prefix", "pfcp.bbf.ipv4_prefix",
17758 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
17759 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17760 },
17761 { &hf_pfcp_bbf_ipv4_prefix_length,
17762 { "IPv4 Prefix Length", "pfcp.bbf.ipv4_prefix_length",
17763 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17764 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17765 },
17766 { &hf_pfcp_bbf_ipv6_prefix,
17767 { "IPv6 Prefix", "pfcp.bbf.ipv6_prefix",
17768 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
17769 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17770 },
17771 { &hf_pfcp_bbf_ipv6_prefix_length,
17772 { "IPv6 Prefix Length", "pfcp.bbf.ipv6_prefix_length",
17773 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17774 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17775 },
17776 { &hf_pfcp_bbf_prefix_tag_usage,
17777 { "Prefix Tag Usage", "pfcp.bbf.prefix_tag_usage",
17778 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_prefix_tag_usage_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_prefix_tag_usage_vals
))))
, 0x0,
17779 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17780 },
17781 { &hf_pfcp_bbf_prefix_tag,
17782 { "Prefix Tag", "pfcp.bbf.prefix_tag",
17783 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17784 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17785 },
17786 { &hf_pfcp_bbf_error_code,
17787 { "Error Code", "pfcp.bbf.error_code",
17788 FT_UINT16, BASE_HEX, VALS(pfcp_bbf_error_code_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_error_code_vals
))))
, 0x0,
17789 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17790 },
17791 { &hf_pfcp_bbf_error_message,
17792 { "Error Message", "pfcp.bbf.error_message",
17793 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17794 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17795 },
17796 { &hf_pfcp_bbf_maximum_acl_chain_length,
17797 { "Maximum ACL Chain Length", "pfcp.bbf.maximum_acl_chain_length",
17798 FT_UINT8, BASE_DEC, NULL((void*)0), 0x0,
17799 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17800 },
17801 { &hf_pfcp_bbf_forwarding_capability,
17802 { "Forwarding Capability", "pfcp.bbf.forwarding_capability",
17803 FT_UINT8, BASE_DEC|BASE_UNIT_STRING0x00001000, UNS(&units_percent)((0 ? (const struct unit_name_string*)0 : ((&units_percent
))))
, 0x0,
17804 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17805 },
17806 { &hf_pfcp_bbf_connectivity_status,
17807 { "Connectivity Status", "pfcp.bbf.connectivity_status",
17808 FT_UINT8, BASE_DEC, VALS(pfcp_bbf_connectivity_status_vals)((0 ? (const struct _value_string*)0 : ((pfcp_bbf_connectivity_status_vals
))))
, 0x0,
17809 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17810 },
17811 { &hf_pfcp_bbf_vendor_specific_node_report_type,
17812 { "Flags", "pfcp.bbf.vendor_specific_node_report_type",
17813 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
17814 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17815 },
17816 { &hf_pfcp_bbf_vendor_specific_node_report_type_b0_lpr,
17817 { "LPR", "pfcp.bbf.vendor_specific_node_report_type.lpr",
17818 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17819 "Logical Port Report", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17820 },
17821 { &hf_pfcp_bbf_vendor_specific_node_report_type_b1_sgr,
17822 { "SGR", "pfcp.bbf.vendor_specific_node_report_type.sgr",
17823 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17824 "Subscriber Group Report", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17825 },
17826 { &hf_pfcp_bbf_vendor_specific_node_report_type_b2_nir,
17827 { "NIR", "pfcp.bbf.vendor_specific_node_report_type.nir",
17828 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
17829 "Network Instance Report", HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17830 },
17831 { &hf_pfcp_bbf_ctag_range_start,
17832 { "C-Tag Range Start", "pfcp.bbf.ctag_range_start",
17833 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
17834 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17835 },
17836 { &hf_pfcp_bbf_ctag_range_end,
17837 { "C-Tag Range End", "pfcp.bbf.ctag_range_end",
17838 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
17839 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17840 },
17841 { &hf_pfcp_bbf_stag_range_start,
17842 { "S-Tag Range Start", "pfcp.bbf.stag_range_start",
17843 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
17844 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17845 },
17846 { &hf_pfcp_bbf_stag_range_end,
17847 { "S-Tag Range End", "pfcp.bbf.stag_range_end",
17848 FT_UINT24, BASE_DEC, NULL((void*)0), 0x0,
17849 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17850 },
17851
17852 /* Travelping */
17853 { &hf_pfcp_enterprise_travelping_packet_measurement,
17854 { "Flags", "pfcp.travelping.volume_measurement",
17855 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
17856 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17857 },
17858 { &hf_pfcp_enterprise_travelping_packet_measurement_b0_tonop,
17859 { "TONOP", "pfcp.travelping.volume_measurement_flags.tonop",
17860 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
17861 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17862 },
17863 { &hf_pfcp_enterprise_travelping_packet_measurement_b1_ulnop,
17864 { "ULNOP", "pfcp.travelping.volume_measurement_flags.ulnop",
17865 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
17866 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17867 },
17868 { &hf_pfcp_enterprise_travelping_packet_measurement_b2_dlnop,
17869 { "DLNOP", "pfcp.travelping.volume_measurement_flags.dlnops",
17870 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
17871 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17872 },
17873 { &hf_pfcp_travelping_pkt_meas_tonop,
17874 { "Total Number of Packets", "pfcp.travelping.volume_measurement.tonop",
17875 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
17876 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17877 },
17878 { &hf_pfcp_travelping_pkt_meas_ulnop,
17879 { "Uplink Number of Packets", "pfcp.travelping.volume_measurement.ulnop",
17880 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
17881 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17882 },
17883 { &hf_pfcp_travelping_pkt_meas_dlnop,
17884 { "Downlink Number of Packets", "pfcp.travelping.volume_measurement.dlnop",
17885 FT_UINT64, BASE_DEC, NULL((void*)0), 0x0,
17886 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17887 },
17888 { &hf_pfcp_travelping_build_id,
17889 { "Build Identifier", "pfcp.travelping.build_id",
17890 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17891 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17892 },
17893 { &hf_pfcp_travelping_build_id_str,
17894 { "Build Identifier", "pfcp.travelping.build_id_str",
17895 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17896 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17897 },
17898 { &hf_pfcp_travelping_now,
17899 { "Now", "pfcp.travelping.now",
17900 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL((void*)0), 0x0,
17901 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17902 },
17903 { &hf_pfcp_travelping_error_message,
17904 { "Error Message", "pfcp.travelping.error_message",
17905 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17906 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17907 },
17908 { &hf_pfcp_travelping_error_message_str,
17909 { "Error Message", "pfcp.travelping.error_message_str",
17910 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17911 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17912 },
17913 { &hf_pfcp_travelping_file_name,
17914 { "File Name", "pfcp.travelping.file_name",
17915 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17916 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17917 },
17918 { &hf_pfcp_travelping_file_name_str,
17919 { "File Name", "pfcp.travelping.file_name_str",
17920 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17921 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17922 },
17923 { &hf_pfcp_travelping_line_number,
17924 { "Line Number", "pfcp.travelping.line_number",
17925 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0,
17926 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17927 },
17928 { &hf_pfcp_travelping_ipfix_policy,
17929 { "IPFIX Policy", "pfcp.travelping.ipfix_policy",
17930 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17931 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17932 },
17933 { &hf_pfcp_travelping_ipfix_policy_str,
17934 { "IPFIX Policy", "pfcp.travelping.ipfix_policy_str",
17935 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17936 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17937 },
17938 { &hf_pfcp_travelping_trace_parent,
17939 { "Trace Parent", "pfcp.travelping.trace_parent",
17940 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17941 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17942 },
17943 { &hf_pfcp_travelping_trace_parent_str,
17944 { "Trace Parent", "pfcp.travelping.trace_parent_str",
17945 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17946 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17947 },
17948 { &hf_pfcp_travelping_trace_state,
17949 { "Trace State", "pfcp.travelping.trace_state",
17950 FT_BYTES, BASE_NONE, NULL((void*)0), 0x0,
17951 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17952 },
17953 { &hf_pfcp_travelping_trace_state_str,
17954 { "Trace State", "pfcp.travelping.trace_state_str",
17955 FT_STRING, BASE_NONE, NULL((void*)0), 0x0,
17956 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17957 },
17958
17959 /* Nokia */
17960
17961 { &hf_pfcp_nokia_sap_template,
17962 { "SAP template", "pfcp.nokia.sap_template",
17963 FT_STRING, BASE_NONE, NULL((void*)0), 0,
17964 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17965 },
17966 { &hf_pfcp_nokia_group_iface_template,
17967 { "Group Interface Template", "pfcp.nokia.group_if_template",
17968 FT_STRING, BASE_NONE, NULL((void*)0), 0,
17969 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17970 },
17971 { &hf_pfcp_nokia_session_state_id,
17972 { "Session State Id", "pfcp.nokia.session_state_id",
17973 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
17974 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17975 },
17976 { &hf_pfcp_nokia_detailed_stats_key,
17977 { "Key", "pfcp.nokia.detailed_stats.key",
17978 FT_UINT32, BASE_HEX, NULL((void*)0), 0,
17979 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17980 },
17981 { &hf_pfcp_nokia_detailed_stats_key_direction,
17982 { "Direction", "pfcp.nokia.detailed_stats.direction",
17983 FT_BOOLEAN, 32, TFS(&tfs_nokia_detailed_stats_ie)((0 ? (const struct true_false_string*)0 : ((&tfs_nokia_detailed_stats_ie
))))
, 0x80000000,
17984 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17985 },
17986 { &hf_pfcp_nokia_detailed_stats_key_type,
17987 { "Type", "pfcp.nokia.detailed_stats.type",
17988 FT_BOOLEAN, 32, TFS(&tfs_nokia_detailed_stats_qp)((0 ? (const struct true_false_string*)0 : ((&tfs_nokia_detailed_stats_qp
))))
, 0x40000000,
17989 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17990 },
17991 { &hf_pfcp_nokia_detailed_stats_key_object_id,
17992 { "Object id", "pfcp.nokia.detailed_stats.object_id",
17993 FT_UINT32, BASE_DEC, NULL((void*)0), 0x003f0000,
17994 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
17995 },
17996 { &hf_pfcp_nokia_detailed_stats_key_stat_mode,
17997 { "Stat mode", "pfcp.nokia.detailed_stats.stat_mode",
17998 FT_UINT32, BASE_DEC, NULL((void*)0), 0x0000001f,
17999 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18000 },
18001 { &hf_pfcp_nokia_detailed_stats_bitmap_item,
18002 { "length", "pfcp.nokia.detailed_stats.bitmap.len",
18003 FT_UINT64, BASE_DEC|BASE_VAL64_STRING0x00000400, VALS64(nokia_detailed_stats_length_values)((0 ? (const struct _val64_string*)0 : ((nokia_detailed_stats_length_values
))))
, 0x0,
18004 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18005 },
18006 { &hf_pfcp_nokia_detailed_stats_octets,
18007 { "Packets offered", "pfcp.nokia.detailed_stats.octets",
18008 FT_UINT64, BASE_DEC, NULL((void*)0), 0,
18009 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18010 },
18011 { &hf_pfcp_nokia_detailed_error,
18012 { "Detailed Error", "pfcp.nokia.detailed_error",
18013 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18014 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18015 },
18016 { &hf_pfcp_nokia_qos_override,
18017 { "Qos Override", "pfcp.nokia.qos_override",
18018 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18019 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18020 },
18021 { &hf_pfcp_nokia_measurement_info,
18022 { "Flags", "pfcp.nokia.measurement_info",
18023 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
18024 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18025 },
18026 { &hf_pfcp_nokia_measurement_info_b0_det,
18027 { "DET (Detailed Statistics)", "pfcp.nokia.measurement_info.det",
18028 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
18029 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18030 },
18031 { &hf_pfcp_nokia_pfcpsmreq_flags,
18032 { "Flags", "pfcp.nokia.smreq_flags",
18033 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
18034 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18035 },
18036 { &hf_pfcp_nokia_pfcpsmreq_flags_b0_abs,
18037 { "ABS (Absolute modification request)", "pfcp.nokia.smreq_flags.abs",
18038 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
18039 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18040 },
18041 { &hf_pfcp_nokia_pfcpsmreq_flags_b1_audit,
18042 { "AUD (Auditing modification message)", "pfcp.nokia.smreq_flags.audit",
18043 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
18044 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18045 },
18046 { &hf_pfcp_nokia_up_function_features_bulk_audit,
18047 { "BLK_AUD (Bulk Audit)", "pfcp.nokia.up_function_features.blk_aud",
18048 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x01,
18049 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18050 },
18051 { &hf_pfcp_nokia_up_function_features_sssg,
18052 { "SSSG (Shared Subnet Signaling)", "pfcp.nokia.up_function_features.sssg",
18053 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported)((0 ? (const struct true_false_string*)0 : ((&tfs_supported_not_supported
))))
, 0x08,
18054 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18055 },
18056 { &hf_pfcp_nokia_filter_override_type,
18057 { "Filter Type", "pfcp.nokia.filter_override.type",
18058 FT_UINT8, BASE_HEX, VALS(nokia_filter_override_type_vals)((0 ? (const struct _value_string*)0 : ((nokia_filter_override_type_vals
))))
, 0x0,
18059 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18060 },
18061 { &hf_pfcp_nokia_filter_override_name,
18062 { "Filter Override", "pfcp.nokia.filter_override.name",
18063 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18064 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18065 },
18066 { &hf_pfcp_nokia_intermediate_destination,
18067 { "Intermediate Destination", "pfcp.nokia.intermediate_destination",
18068 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18069 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18070 },
18071 { &hf_pfcp_nokia_nat_isa_members,
18072 { "Number of ISA members", "pfcp.nokia.nat_isa_members",
18073 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
18074 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18075 },
18076 { &hf_pfcp_nokia_pfcphb_flags,
18077 { "Flags", "pfcp.nokia.hb_flags",
18078 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
18079 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18080 },
18081 { &hf_pfcp_nokia_pfcphb_flags_b0_aud_r,
18082 { "AUDR (Mass Audit Request)", "pfcp.nokia.hb_flags.audr",
18083 FT_BOOLEAN, 8, NULL((void*)0), 0x01,
18084 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18085 },
18086 { &hf_pfcp_nokia_pfcphb_flags_b1_aud_s,
18087 { "AUDS (Mass Audit Start)", "pfcp.nokia.hb_flags.auds",
18088 FT_BOOLEAN, 8, NULL((void*)0), 0x02,
18089 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18090 },
18091 { &hf_pfcp_nokia_pfcphb_flags_b2_aud_e,
18092 { "AUDE (Mass Audit End)", "pfcp.nokia.hb_flags.aude",
18093 FT_BOOLEAN, 8, NULL((void*)0), 0x04,
18094 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18095 },
18096 { &hf_pfcp_nokia_l2tp_lcp_request,
18097 { "LCP Request", "pfcp.nokia.l2tp.lcp_request",
18098 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
18099 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18100 },
18101 { &hf_pfcp_nokia_l2tp_auth_type,
18102 { "L2TP Auth Type", "pfcp.nokia.l2tp.auth_type",
18103 FT_UINT8, BASE_HEX, VALS(nokia_l2tp_auth_type_vals)((0 ? (const struct _value_string*)0 : ((nokia_l2tp_auth_type_vals
))))
, 0x0,
18104 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18105 },
18106 { &hf_pfcp_nokia_l2tp_auth_name,
18107 { "L2TP Auth Name", "pfcp.nokia.l2tp.auth_name",
18108 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18109 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18110 },
18111 { &hf_pfcp_nokia_l2tp_auth_id,
18112 { "L2TP Auth Id", "pfcp.nokia.l2tp.auth_id",
18113 FT_UINT8, BASE_HEX, NULL((void*)0), 0,
18114 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18115 },
18116 { &hf_pfcp_nokia_l2tp_auth_challenge,
18117 { "L2TP Auth Challenge", "pfcp.nokia.l2tp.auth_challenge",
18118 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
18119 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18120 },
18121 { &hf_pfcp_nokia_l2tp_auth_response,
18122 { "L2TP Auth Response", "pfcp.nokia.l2tp.auth_response",
18123 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
18124 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18125 },
18126 { &hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address,
18127 { "L2TP IPv4 Endpoint", "pfcp.nokia.l2tp.tunnel_endpoint.ipv4_addr",
18128 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
18129 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18130 },
18131 { &hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address,
18132 { "L2TP IPv6 Endpoint", "pfcp.nokia.l2tp.tunnel_endpoint.ipv6_addr",
18133 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
18134 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18135 },
18136 { &hf_pfcp_nokia_l2tp_client_auth_id,
18137 { "L2TP Client Auth Id", "pfcp.nokia.l2tp.client_auth_id",
18138 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18139 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18140 },
18141 { &hf_pfcp_nokia_l2tp_server_auth_id,
18142 { "L2TP Server Auth Id", "pfcp.nokia.l2tp.server_auth_id",
18143 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18144 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18145 },
18146 { &hf_pfcp_nokia_l2tp_password,
18147 { "L2TP Password", "pfcp.nokia.l2tp.password",
18148 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18149 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18150 },
18151 { &hf_pfcp_nokia_l2tp_assignment_id,
18152 { "L2TP Assignment Id", "pfcp.nokia.l2tp.assignment_id",
18153 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18154 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18155 },
18156 { &hf_pfcp_nokia_l2tp_private_group_id,
18157 { "L2TP Private Group Id", "pfcp.nokia.l2tp.private_group_id",
18158 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18159 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18160 },
18161 { &hf_pfcp_nokia_l2tp_tunnel_params_flags,
18162 { "Flags", "pfcp.nokia.l2tp.tunnel_params.flags",
18163 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
18164 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18165 },
18166 { &hf_pfcp_nokia_l2tp_params_flags_b30_idle_timeout,
18167 {"Idle Timeout", "pfcp.nokia.l2tp.tunnel_params.flags.idle_timeout",
18168 FT_BOOLEAN, 32, NULL((void*)0), 0x40000000,
18169 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18170 },
18171 { &hf_pfcp_nokia_l2tp_params_flags_b31_hello_interval,
18172 {"Hello Interval", "pfcp.nokia.l2tp.tunnel_params.flags.hello_interval",
18173 FT_BOOLEAN, 32, NULL((void*)0), 0x80000000,
18174 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18175 },
18176 { &hf_pfcp_nokia_l2tp_params_flags_b29_session_limit,
18177 {"Session Limit", "pfcp.nokia.l2tp.tunnel_params.flags.session_limit",
18178 FT_BOOLEAN, 32, NULL((void*)0), 0x20000000,
18179 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18180 },
18181 { &hf_pfcp_nokia_l2tp_params_flags_b28_preference,
18182 {"Preference", "pfcp.nokia.l2tp.tunnel_params.flags.preference",
18183 FT_BOOLEAN, 32, NULL((void*)0), 0x10000000,
18184 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18185 },
18186 { &hf_pfcp_nokia_l2tp_params_flags_b27_df_bit,
18187 {"DF Bit", "pfcp.nokia.l2tp.tunnel_params.flags.df_bit",
18188 FT_BOOLEAN, 32, NULL((void*)0), 0x08000000,
18189 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18190 },
18191 { &hf_pfcp_nokia_l2tp_params_flags_b26_challenge,
18192 {"Challenge", "pfcp.nokia.l2tp.tunnel_params.flags.challenge",
18193 FT_BOOLEAN, 32, NULL((void*)0), 0x04000000,
18194 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18195 },
18196 { &hf_pfcp_nokia_l2tp_params_flags_b25_avp_hiding,
18197 {"AVP Hiding", "pfcp.nokia.l2tp.tunnel_params.flags.avp_hiding",
18198 FT_BOOLEAN, 32, NULL((void*)0), 0x02000000,
18199 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18200 },
18201 { &hf_pfcp_nokia_l2tp_params_flags_b24_algorithm,
18202 {"Algorithm", "pfcp.nokia.l2tp.tunnel_params.flags.algorithm",
18203 FT_BOOLEAN, 32, NULL((void*)0), 0x01000000,
18204 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18205 },
18206 { &hf_pfcp_nokia_l2tp_params_flags_b19_rx_window_size,
18207 {"RX Window Size", "pfcp.nokia.l2tp.tunnel_params.flags.rx_window_size",
18208 FT_BOOLEAN, 32, NULL((void*)0), 0x00080000,
18209 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18210 },
18211 { &hf_pfcp_nokia_l2tp_params_flags_b18_max_retries_not_estab,
18212 {"Max Retries Not Established", "pfcp.nokia.l2tp.tunnel_params.flags.max_retries_not_estab",
18213 FT_BOOLEAN, 32, NULL((void*)0), 0x00040000,
18214 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18215 },
18216 { &hf_pfcp_nokia_l2tp_params_flags_b17_max_retries_estab,
18217 {"Max Retries Established", "pfcp.nokia.l2tp.tunnel_params.flags.max_retries_estab",
18218 FT_BOOLEAN, 32, NULL((void*)0), 0x00020000,
18219 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18220 },
18221 { &hf_pfcp_nokia_l2tp_params_flags_b16_destruct_timeout,
18222 {"Destruct Timeout", "pfcp.nokia.l2tp.tunnel_params.flags.destruct_timeout",
18223 FT_BOOLEAN, 32, NULL((void*)0), 0x00010000,
18224 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18225 },
18226 { &hf_pfcp_nokia_l2tp_params_hello_interval,
18227 {"Hello Interval", "pfcp.nokia.l2tp.tunnel_params.hello_interval",
18228 FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS0x00008000, VALS(nokia_l2tp_params_infinite)((0 ? (const struct _value_string*)0 : ((nokia_l2tp_params_infinite
))))
, 0,
18229 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18230 },
18231 { &hf_pfcp_nokia_l2tp_params_idle_timeout,
18232 {"Idle Timeout", "pfcp.nokia.l2tp.tunnel_params.idle_timeout",
18233 FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS0x00008000, VALS(nokia_l2tp_params_infinite)((0 ? (const struct _value_string*)0 : ((nokia_l2tp_params_infinite
))))
, 0,
18234 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18235 },
18236 { &hf_pfcp_nokia_l2tp_params_session_limit,
18237 {"Session Limit", "pfcp.nokia.l2tp.tunnel_params.session_limit",
18238 FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS0x00008000, VALS(nokia_l2tp_params_infinite)((0 ? (const struct _value_string*)0 : ((nokia_l2tp_params_infinite
))))
, 0,
18239 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18240 },
18241 { &hf_pfcp_nokia_l2tp_params_preference,
18242 {"Preference", "pfcp.nokia.l2tp.tunnel_params.preference",
18243 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
18244 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18245 },
18246 { &hf_pfcp_nokia_l2tp_params_df_bit,
18247 {"DF Bit", "pfcp.nokia.l2tp.tunnel_params.df_bit",
18248 FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_never_always)((0 ? (const struct _value_string*)0 : ((nokia_l2tp_params_never_always
))))
, 0,
18249 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18250 },
18251 { &hf_pfcp_nokia_l2tp_params_challenge,
18252 {"Challenge", "pfcp.nokia.l2tp.tunnel_params.challenge",
18253 FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_never_always)((0 ? (const struct _value_string*)0 : ((nokia_l2tp_params_never_always
))))
, 0,
18254 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18255 },
18256 { &hf_pfcp_nokia_l2tp_params_avp_hiding,
18257 {"AVP Hiding", "pfcp.nokia.l2tp.tunnel_params.avp_hiding",
18258 FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_avp_hiding_vals)((0 ? (const struct _value_string*)0 : ((nokia_l2tp_params_avp_hiding_vals
))))
, 0,
18259 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18260 },
18261 { &hf_pfcp_nokia_l2tp_params_algorithm,
18262 {"Algorithm", "pfcp.nokia.l2tp.tunnel_params.algorithm",
18263 FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_algorithm_vals)((0 ? (const struct _value_string*)0 : ((nokia_l2tp_params_algorithm_vals
))))
, 0,
18264 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18265 },
18266 { &hf_pfcp_nokia_l2tp_params_rx_window_size,
18267 {"RX Window Size", "pfcp.nokia.l2tp.tunnel_params.rx_window_size",
18268 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
18269 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18270 },
18271 { &hf_pfcp_nokia_l2tp_params_max_retries_not_estab,
18272 {"Max Retries Not Estab", "pfcp.nokia.l2tp.tunnel_params.max_retries_not_estab",
18273 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
18274 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18275 },
18276 { &hf_pfcp_nokia_l2tp_params_max_retries_estab,
18277 {"Max Retries Estab", "pfcp.nokia.l2tp.tunnel_params.max_retries_estab",
18278 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
18279 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18280 },
18281 { &hf_pfcp_nokia_l2tp_params_destruct_timeout,
18282 {"Destruct Timeout", "pfcp.nokia.l2tp.tunnel_params.destruct_timeout",
18283 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
18284 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18285 },
18286 { &hf_pfcp_nokia_l2tp_local_tunnel_id,
18287 { "Local Tunnel Id", "pfcp.nokia.l2tp.local_tunnel_id",
18288 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
18289 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18290 },
18291 { &hf_pfcp_nokia_l2tp_remote_tunnel_id,
18292 { "Remote Tunnel Id", "pfcp.nokia.l2tp.remote_tunnel_id",
18293 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
18294 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18295 },
18296 { &hf_pfcp_nokia_l2tp_local_session_id,
18297 { "Local Session Id", "pfcp.nokia.l2tp.local_session_id",
18298 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
18299 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18300 },
18301 { &hf_pfcp_nokia_l2tp_remote_session_id,
18302 { "Remote Session Id", "pfcp.nokia.l2tp.remote_session_id",
18303 FT_UINT16, BASE_DEC, NULL((void*)0), 0,
18304 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18305 },
18306 { &hf_pfcp_nokia_l2tp_call_serial_num,
18307 { "Call Serial Number", "pfcp.nokia.l2tp.call_serial_num",
18308 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18309 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18310 },
18311 { &hf_pfcp_nokia_snat_inside_ipv4_address,
18312 { "SNAT Inside IP", "pfcp.nokia.snat_inside_ip",
18313 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
18314 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18315 },
18316 { &hf_pfcp_nokia_access_line_circuit_id,
18317 { "Access Line Circuit Id", "pfcp.nokia.access_line.circuit_id",
18318 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
18319 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18320 },
18321 { &hf_pfcp_nokia_access_line_remote_id,
18322 { "Access Line Remote Id", "pfcp.nokia.access_line.remote_id",
18323 FT_BYTES, BASE_NONE, NULL((void*)0), 0,
18324 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18325 },
18326 { &hf_pfcp_nokia_access_line_params_flags,
18327 { "Flags", "pfcp.nokia.access_line.params.flags",
18328 FT_UINT32, BASE_HEX, NULL((void*)0), 0x0,
18329 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18330 },
18331 { &hf_pfcp_nokia_access_line_params_flags_b24_act_up,
18332 {"Act Up", "pfcp.nokia.access_line.params.flags.act_up",
18333 FT_BOOLEAN, 32, NULL((void*)0), 0x01000000,
18334 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18335 },
18336 { &hf_pfcp_nokia_access_line_params_flags_b25_act_down,
18337 {"Act Down", "pfcp.nokia.access_line.params.flags.act_down",
18338 FT_BOOLEAN, 32, NULL((void*)0), 0x02000000,
18339 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18340 },
18341 { &hf_pfcp_nokia_access_line_params_flags_b26_min_up,
18342 {"Min Up", "pfcp.nokia.access_line.params.flags.min_up",
18343 FT_BOOLEAN, 32, NULL((void*)0), 0x04000000,
18344 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18345 },
18346 { &hf_pfcp_nokia_access_line_params_flags_b27_min_down,
18347 {"Min Down", "pfcp.nokia.access_line.params.flags.min_down",
18348 FT_BOOLEAN, 32, NULL((void*)0), 0x08000000,
18349 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18350 },
18351 { &hf_pfcp_nokia_access_line_params_flags_b28_att_up,
18352 {"Att Up", "pfcp.nokia.access_line.params.flags.att_up",
18353 FT_BOOLEAN, 32, NULL((void*)0), 0x10000000,
18354 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18355 },
18356 { &hf_pfcp_nokia_access_line_params_flags_b29_att_down,
18357 {"Att Down", "pfcp.nokia.access_line.params.flags.att_down",
18358 FT_BOOLEAN, 32, NULL((void*)0), 0x20000000,
18359 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18360 },
18361 { &hf_pfcp_nokia_access_line_params_flags_b30_max_up,
18362 {"Max Up", "pfcp.nokia.access_line.params.flags.max_up",
18363 FT_BOOLEAN, 32, NULL((void*)0), 0x40000000,
18364 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18365 },
18366 { &hf_pfcp_nokia_access_line_params_flags_b31_max_down,
18367 {"Max Down", "pfcp.nokia.access_line.params.flags.max_down",
18368 FT_BOOLEAN, 32, NULL((void*)0), 0x80000000,
18369 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18370 },
18371 { &hf_pfcp_nokia_access_line_params_flags_b16_min_up_lp,
18372 {"Min Up Lp", "pfcp.nokia.access_line.params.flags.min_up_lp",
18373 FT_BOOLEAN, 32, NULL((void*)0), 0x00010000,
18374 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18375 },
18376 { &hf_pfcp_nokia_access_line_params_flags_b17_min_down_lp,
18377 {"Min Down Lp", "pfcp.nokia.access_line.params.flags.min_down_lp",
18378 FT_BOOLEAN, 32, NULL((void*)0), 0x00020000,
18379 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18380 },
18381 { &hf_pfcp_nokia_access_line_params_flags_b18_max_inter_delay_up,
18382 {"Max Inter Delay Up", "pfcp.nokia.access_line.params.flags.max_inter_delay_up",
18383 FT_BOOLEAN, 32, NULL((void*)0), 0x00040000,
18384 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18385 },
18386 { &hf_pfcp_nokia_access_line_params_flags_b19_act_inter_delay_up,
18387 {"Act Inter Delay Up", "pfcp.nokia.access_line.params.flags.act_inter_delay_up",
18388 FT_BOOLEAN, 32, NULL((void*)0), 0x00080000,
18389 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18390 },
18391 { &hf_pfcp_nokia_access_line_params_flags_b20_max_inter_delay_down,
18392 {"Max Inter Delay Down", "pfcp.nokia.access_line.params.flags.max_inter_delay_down",
18393 FT_BOOLEAN, 32, NULL((void*)0), 0x00100000,
18394 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18395 },
18396 { &hf_pfcp_nokia_access_line_params_flags_b21_act_inter_delay_down,
18397 {"Act Inter Delay Down", "pfcp.nokia.access_line.params.flags.act_inter_delay_down",
18398 FT_BOOLEAN, 32, NULL((void*)0), 0x00200000,
18399 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18400 },
18401 { &hf_pfcp_nokia_access_line_params_flags_b22_access_loop_encap,
18402 {"Access Loop Encap", "pfcp.nokia.access_line.params.flags.access_loop_encap",
18403 FT_BOOLEAN, 32, NULL((void*)0), 0x00400000,
18404 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18405 },
18406 { &hf_pfcp_nokia_access_line_params_flags_b23_iw_session,
18407 {"IW Session", "pfcp.nokia.access_line.params.flags.iw_session",
18408 FT_BOOLEAN, 32, NULL((void*)0), 0x00800000,
18409 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18410 },
18411 { &hf_pfcp_nokia_access_line_params_act_up,
18412 { "Act Up", "pfcp.nokia.access_line.params.act_up",
18413 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18414 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18415 },
18416 { &hf_pfcp_nokia_access_line_params_act_down,
18417 { "Act Down", "pfcp.nokia.access_line.params.act_down",
18418 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18419 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18420 },
18421 { &hf_pfcp_nokia_access_line_params_min_up,
18422 { "Min Up", "pfcp.nokia.access_line.params.min_up",
18423 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18424 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18425 },
18426 { &hf_pfcp_nokia_access_line_params_min_down,
18427 { "Min Down", "pfcp.nokia.access_line.params.min_down",
18428 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18429 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18430 },
18431 { &hf_pfcp_nokia_access_line_params_att_up,
18432 { "Att Up", "pfcp.nokia.access_line.params.att_up",
18433 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18434 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18435 },
18436 { &hf_pfcp_nokia_access_line_params_att_down,
18437 { "Act Att Down", "pfcp.nokia.access_line.params.att_down",
18438 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18439 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18440 },
18441 { &hf_pfcp_nokia_access_line_params_max_up,
18442 { "Max Up", "pfcp.nokia.access_line.params.max_up",
18443 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18444 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18445 },
18446 { &hf_pfcp_nokia_access_line_params_max_down,
18447 { "Max Down", "pfcp.nokia.access_line.params.max_down",
18448 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18449 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18450 },
18451 { &hf_pfcp_nokia_access_line_params_min_up_lp,
18452 { "Min Up Lp", "pfcp.nokia.access_line.params.min_up_lp",
18453 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18454 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18455 },
18456 { &hf_pfcp_nokia_access_line_params_min_down_lp,
18457 { "Min Down Lp", "pfcp.nokia.access_line.params.min_down_lp",
18458 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18459 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18460 },
18461 { &hf_pfcp_nokia_access_line_params_max_inter_delay_up,
18462 { "Max Inter Delay Up", "pfcp.nokia.access_line.params.max_inter_delay_up",
18463 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18464 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18465 },
18466 { &hf_pfcp_nokia_access_line_params_act_inter_delay_up,
18467 { "Act Inter Delay Up", "pfcp.nokia.access_line.params.act_inter_delay_up",
18468 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18469 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18470 },
18471 { &hf_pfcp_nokia_access_line_params_max_inter_delay_down,
18472 { "Max Inter Delay Down", "pfcp.nokia.access_line.params.max_inter_delay_down",
18473 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18474 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18475 },
18476 { &hf_pfcp_nokia_access_line_params_act_inter_delay_down,
18477 { "Act Inter Delay Down", "pfcp.nokia.access_line.params.act_inter_delay_down",
18478 FT_UINT32, BASE_DEC, NULL((void*)0), 0,
18479 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18480 },
18481 { &hf_pfcp_nokia_access_line_params_access_loop_encap,
18482 { "Access Loop Encap", "pfcp.nokia.access_line.params.access_loop_encap",
18483 FT_UINT24, BASE_DEC, NULL((void*)0), 0,
18484 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18485 },
18486 { &hf_pfcp_nokia_acct_session_id,
18487 { "Accounting Session Id", "pfcp.nokia.acct_session_id",
18488 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18489 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18490 },
18491 { &hf_pfcp_nokia_fsg_template_name,
18492 { "FSG Template Name", "pfcp.nokia.fsg_template_name",
18493 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18494 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18495 },
18496 { &hf_pfcp_nokia_up_profile,
18497 { "UP Profiles", "pfcp.nokia.up_profiles",
18498 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18499 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18500 },
18501 { &hf_pfcp_nokia_default_qos_id,
18502 { "Default Qos Id", "pfcp.nokia.default_qos_id",
18503 FT_UINT8, BASE_DEC, NULL((void*)0), 0,
18504 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18505 },
18506 { &hf_pfcp_nokia_serving_node_id_flags,
18507 { "Flags", "pfcp.nokia.serving_node_id.flags",
18508 FT_UINT8, BASE_HEX, NULL((void*)0), 0x0,
18509 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18510 },
18511 { &hf_pfcp_nokia_serving_node_id_flg_b2_uuid,
18512 { "UUID", "pfcp.nokia.serving_node_id.flags.uuid",
18513 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x04,
18514 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18515 },
18516 { &hf_pfcp_nokia_serving_node_id_flg_b1_v6,
18517 { "V6 (IPv6)", "pfcp.nokia.serving_node_id.flags.v6",
18518 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x02,
18519 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18520 },
18521 { &hf_pfcp_nokia_serving_node_id_flg_b0_v4,
18522 { "V4 (IPv4)", "pfcp.nokia.serving_node_id.flags.v4",
18523 FT_BOOLEAN, 8, TFS(&tfs_present_not_present)((0 ? (const struct true_false_string*)0 : ((&tfs_present_not_present
))))
, 0x01,
18524 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18525 },
18526 { &hf_pfcp_nokia_serving_node_id_ipv4,
18527 { "IPv4 address", "pfcp.nokia.serving_node_id.ipv4_addr",
18528 FT_IPv4, BASE_NONE, NULL((void*)0), 0x0,
18529 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18530 },
18531 { &hf_pfcp_nokia_serving_node_id_ipv6,
18532 { "IPv6 address", "pfcp.nokia.serving_node_id.ipv6_addr",
18533 FT_IPv6, BASE_NONE, NULL((void*)0), 0x0,
18534 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18535 },
18536 { &hf_pfcp_nokia_serving_node_id_uuid,
18537 { "UUID", "pfcp.nokia.serving_node_id.uuid",
18538 FT_GUID, BASE_NONE, NULL((void*)0), 0x0,
18539 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18540 },
18541 { &hf_pfcp_nokia_pcc_rule_name,
18542 { "PCC Rule Name", "pfcp.nokia.pcc_rule_name",
18543 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18544 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18545 },
18546 { &hf_pfcp_nokia_calltrace_profile,
18547 { "Calltrace Profile", "pfcp.nokia.calltrace_profile",
18548 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18549 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18550 },
18551 { &hf_pfcp_nokia_custom_charging_group,
18552 { "Custom Charging Group", "pfcp.nokia.custom_charging_group",
18553 FT_STRING, BASE_NONE, NULL((void*)0), 0,
18554 NULL((void*)0), HFILL-1, 0, HF_REF_TYPE_NONE, -1, ((void*)0) }
18555 },
18556 };
18557
18558 /* Setup protocol subtree array */
18559 int *ett[] = {
18560 &ett_pfcp,
18561 &ett_pfcp_flags,
18562 &ett_pfcp_ie,
18563 &ett_pfcp_unknown_enterprise_ie,
18564 &ett_pfcp_grouped_ie,
18565 &ett_pfcp_reporting_triggers,
18566 &ett_pfcp_up_function_features,
18567 &ett_pfcp_report_trigger,
18568 &ett_pfcp_flow_desc,
18569 &ett_pfcp_tos,
18570 &ett_pfcp_spi,
18571 &ett_pfcp_flow_label,
18572 &ett_pfcp_sdf_filter_id,
18573 &ett_pfcp_adf,
18574 &ett_pfcp_aurl,
18575 &ett_pfcp_adnp,
18576 /* Travelping */
18577 &ett_pfcp_enterprise_travelping_packet_measurement,
18578 &ett_pfcp_enterprise_travelping_error_report,
18579 &ett_pfcp_enterprise_travelping_created_nat_binding,
18580 &ett_pfcp_enterprise_travelping_trace_info,
18581 /* BBF */
18582 &ett_pfcp_bbf_ppp_protocol_flags,
18583 &ett_pfcp_bbf_l2tp_endp_flags,
18584 &ett_pfcp_bbf_l2tp_type_flags,
18585 &ett_pfcp_bbf_ppp_lcp_connectivity,
18586 &ett_pfcp_bbf_l2tp_tunnel,
18587 &ett_pfcp_bbf_nat_port_forward_list,
18588 &ett_pfcp_bbf_sgrp_flags,
18589 &ett_pfcp_bbf_vendor_specific_node_report_type,
18590 /* Nokia */
18591 &ett_pfcp_nokia_detailed_stats_key,
18592 &ett_pfcp_nokia_detailed_stats_bitmap,
18593 &ett_pfcp_nokia_measurement_info,
18594 &ett_pfcp_nokia_pfcpsmreq_flags,
18595 &ett_pfcp_nokia_pfcphb_flags,
18596 &ett_pfcp_nokia_l2tp_tunnel_params_flags,
18597 &ett_pfcp_nokia_access_line_params_flags,
18598 &ett_pfcp_nokia_serving_node_id_flags,
18599 };
18600
18601 // Each IE gets its own subtree
18602 int* ie_ett[NUM_PFCP_IES(sizeof (pfcp_ies) / sizeof (pfcp_ies)[0]) - 1];
18603 for (unsigned i = 0; i < NUM_PFCP_IES(sizeof (pfcp_ies) / sizeof (pfcp_ies)[0]) - 1; i++) {
18604 ie_ett[i] = &ett_pfcp_elem[i];
18605 }
18606
18607 static ei_register_info ei[] = {
18608 { &ei_pfcp_ie_reserved,{ "pfcp.ie_id_reserved", PI_PROTOCOL0x09000000, PI_ERROR0x00800000, "Reserved IE value used", EXPFILL0, ((void*)0), 0, {0, {((void*)0), ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
} },
18609 { &ei_pfcp_ie_data_not_decoded,{ "pfcp.ie_data_not_decoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000, "IE data not decoded by WS yet", EXPFILL0, ((void*)0), 0, {0, {((void*)0), ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
} },
18610 { &ei_pfcp_ie_not_decoded_null,{ "pfcp.ie_not_decoded_null", PI_UNDECODED0x05000000, PI_NOTE0x00400000, "IE not decoded yet", EXPFILL0, ((void*)0), 0, {0, {((void*)0), ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
} },
18611 { &ei_pfcp_ie_not_decoded_too_large,{ "pfcp.ie_not_decoded", PI_UNDECODED0x05000000, PI_NOTE0x00400000, "IE not decoded yet(WS:IE id too large)", EXPFILL0, ((void*)0), 0, {0, {((void*)0), ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
} },
18612 { &ei_pfcp_ie_encoding_error,{ "pfcp.ie_encoding_error", PI_PROTOCOL0x09000000, PI_ERROR0x00800000, "IE wrongly encoded", EXPFILL0, ((void*)0), 0, {0, {((void*)0), ((void*)0), FT_NONE, BASE_NONE
, ((void*)0), 0, ((void*)0), -1, 0, HF_REF_TYPE_NONE, -1, ((void
*)0)}}
} },
18613 };
18614
18615 module_t *module_pfcp;
18616 expert_module_t* expert_pfcp;
18617
18618 proto_pfcp = proto_register_protocol("Packet Forwarding Control Protocol", "PFCP", "pfcp");
18619 pfcp_handle = register_dissector("pfcp", dissect_pfcp, proto_pfcp);
18620 module_pfcp = prefs_register_protocol(proto_pfcp, NULL((void*)0));
18621
18622 proto_register_field_array(proto_pfcp, hf_pfcp, array_length(hf_pfcp)(sizeof (hf_pfcp) / sizeof (hf_pfcp)[0]));
18623 proto_register_subtree_array(ett, array_length(ett)(sizeof (ett) / sizeof (ett)[0]));
18624 proto_register_subtree_array(ie_ett, array_length(ie_ett)(sizeof (ie_ett) / sizeof (ie_ett)[0]));
18625 expert_pfcp = expert_register_protocol(proto_pfcp);
18626 expert_register_field_array(expert_pfcp, ei, array_length(ei)(sizeof (ei) / sizeof (ei)[0]));
18627
18628 /* Register dissector table for enterprise IE dissectors */
18629 pfcp_enterprise_ies_dissector_table = register_dissector_table("pfcp.enterprise_ies", "PFCP Enterprice IEs",
18630 proto_pfcp, FT_UINT32, BASE_DEC);
18631
18632 pfcp_register_generic_ie_dissector(VENDOR_TRAVELPING18681, "pfcp_travelping_ies", "pfcp.ie.travelping", "Travelping IE Type", pfcp_travelping_ies, G_N_ELEMENTS(pfcp_travelping_ies)(sizeof (pfcp_travelping_ies) / sizeof ((pfcp_travelping_ies)
[0]))
);
18633 pfcp_register_generic_ie_dissector(VENDOR_BROADBAND_FORUM3561, "pfcp_bbf_ies", "pfcp.ie.bbf", "Broadband Forum IE Type", pfcp_bbf_ies, G_N_ELEMENTS(pfcp_bbf_ies)(sizeof (pfcp_bbf_ies) / sizeof ((pfcp_bbf_ies)[0])));
18634 pfcp_register_generic_ie_dissector(VENDOR_NOKIA3729, "pfcp_nokia_ies", "pfcp.ie.nokia", "Nokia IE Type", pfcp_nokia_ies, G_N_ELEMENTS(pfcp_nokia_ies)(sizeof (pfcp_nokia_ies) / sizeof ((pfcp_nokia_ies)[0])));
18635
18636 prefs_register_bool_preference(module_pfcp, "track_pfcp_session", "Track PFCP session", "Track PFCP session", &g_pfcp_session);
18637
18638 prefs_register_uint_preference(module_pfcp, "pair_max_interval", "Max interval allowed in pair matching", "Request/reply pair matches only if their timestamps are closer than that value, in ms (default 0, i.e. don't use timestamps)", 10, &pref_pair_matching_max_interval_ms);
18639
18640 register_init_routine(pfcp_init);
18641 register_cleanup_routine(pfcp_cleanup);
18642
18643 pfcp_tap = register_tap("pfcp");
18644
18645 register_srt_table(proto_pfcp, NULL((void*)0), 1, pfcp_stat_packet, pfcp_stat_init, NULL((void*)0));
18646}
18647
18648void
18649proto_reg_handoff_pfcp(void)
18650{
18651 dissector_add_uint_with_preference("udp.port", UDP_PORT_PFCP8805, pfcp_handle);
18652 dissector_add_string("media_type", "application/vnd.3gpp.pfcp", pfcp_handle);
18653
18654 gtpv2_uli_handle = find_dissector("gtpv2.uli");
18655}
18656
18657/*
18658* Editor modelines - https://www.wireshark.org/tools/modelines.html
18659*
18660* Local variables:
18661* c-basic-offset: 4
18662* tab-width: 8
18663* indent-tabs-mode: nil
18664* End:
18665*
18666* vi: set shiftwidth=4 tabstop=8 expandtab:
18667* :indentSize=4:tabSize=8:noTabs=true:
18668*/