Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-pfcp.c
blob72edcf37a83e67c5e68d847e62ea400ed8d0c2c1
1 /* packet-pfcp.c
3 * Routines for Packet Forwarding Control Protocol (PFCP) dissection
5 * Copyright 2017-2018, Anders Broman <anders.broman@ericsson.com>
7 * Updates and corrections:
8 * Copyright 2017-2024, Joakim Karlsson <oakimk@gmail.com>
10 * Wireshark - Network traffic analyzer
11 * By Gerald Combs <gerald@wireshark.org>
12 * Copyright 1998 Gerald Combs
14 * SPDX-License-Identifier: GPL-2.0-or-later
16 * Ref 3GPP TS 29.244 V18.6.0 (2024-06-26)
18 #include "config.h"
20 #include <math.h>
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"
40 void proto_register_pfcp(void);
41 void proto_reg_handoff_pfcp(void);
43 static dissector_handle_t pfcp_handle;
44 static dissector_handle_t gtpv2_uli_handle;
46 #define UDP_PORT_PFCP 8805 /* IANA-registered */
48 static int proto_pfcp;
50 static int hf_pfcp_msg_type;
51 static int hf_pfcp_msg_length;
52 static int hf_pfcp_hdr_flags;
53 static int hf_pfcp_version;
54 static int hf_pfcp_fo_flag;
55 static int hf_pfcp_mp_flag;
56 static int hf_pfcp_s_flag;
57 static int hf_pfcp_seid;
58 static int hf_pfcp_seqno;
59 static int hf_pfcp_mp;
61 static int hf_pfcp2_ie;
62 static int hf_pfcp2_ie_len;
63 static int hf_pfcp2_enterprise_ie;
64 static int hf_pfcp_enterprise_id;
65 static int hf_pfcp_enterprise_data;
67 static int hf_pfcp_response_in;
68 static int hf_pfcp_response_to;
69 static int hf_pfcp_response_time;
71 static int hf_pfcp_session;
73 static int hf_pfcp_spare_b0;
74 static int hf_pfcp_spare_b1;
75 static int hf_pfcp_spare_b2;
76 static int hf_pfcp_spare_b3;
77 static int hf_pfcp_spare_b4;
78 static int hf_pfcp_spare_b5;
79 static int hf_pfcp_spare_b6;
80 static int hf_pfcp_spare_b7;
81 static int hf_pfcp_spare_b7_b6;
82 static int hf_pfcp_spare_b7_b5;
83 static int hf_pfcp_spare_b7_b4;
84 static int hf_pfcp_spare_b7_b3;
85 static int hf_pfcp_spare_b7_b2;
86 static int hf_pfcp_spare_b7_b1;
87 static int hf_pfcp_spare_h0;
88 static int hf_pfcp_spare_h1;
89 static int hf_pfcp_spare_oct;
90 static int hf_pfcp_spare;
92 static int hf_pfcp2_cause;
93 static int hf_pfcp_node_id_type;
94 static int hf_pfcp_node_id_ipv4;
95 static int hf_pfcp_node_id_ipv6;
96 static int hf_pfcp_node_id_fqdn;
97 static int hf_pfcp_recovery_time_stamp;
98 static int hf_pfcp_b0_v6;
99 static int hf_pfcp_b1_v4;
100 static int hf_pfcp_f_seid_ipv4;
101 static int hf_pfcp_f_seid_ipv6;
102 static int hf_pfcp_pdr_id;
103 static int hf_pfcp_precedence;
104 static int hf_pfcp_source_interface;
105 static int hf_pfcp_fteid_flg_spare;
106 static int hf_pfcp_fteid_flg_b3_ch_id;
107 static int hf_pfcp_fteid_flg_b2_ch;
108 static int hf_pfcp_fteid_flg_b1_v6;
109 static int hf_pfcp_fteid_flg_b0_v4;
110 static int hf_pfcp_f_teid_ch_id;
111 static int hf_pfcp_f_teid_teid;
112 static int hf_pfcp_f_teid_ipv4;
113 static int hf_pfcp_f_teid_ipv6;
114 static int hf_pfcp_network_instance;
115 static int hf_pfcp_pdn_type;
116 static int hf_pfcp_failed_rule_id_type;
117 static int hf_pfcp_time_quota_mechanism_bti_type;
118 static int hf_pfcp_time_quota_mechanism_bti;
119 static int hf_pfcp_multiplier_value_digits;
120 static int hf_pfcp_multiplier_exponent;
122 static int hf_pfcp_ue_ip_address_flag_b0_v6;
123 static int hf_pfcp_ue_ip_address_flag_b1_v4;
124 static int hf_pfcp_ue_ip_address_flag_b2_sd;
125 static int hf_pfcp_ue_ip_address_flag_b3_v6d;
126 static int hf_pfcp_ue_ip_address_flag_b4_chv4;
127 static int hf_pfcp_ue_ip_address_flag_b5_chv6;
128 static int hf_pfcp_ue_ip_address_flag_b6_v6pl;
129 static int hf_pfcp_ue_ip_addr_ipv4;
130 static int hf_pfcp_ue_ip_add_ipv6;
131 static int hf_pfcp_ue_ip_add_ipv6_prefix_delegation_bits;
132 static int hf_pfcp_ue_ip_add_ipv6_prefix_length;
133 static int hf_pfcp_application_id;
134 static int hf_pfcp_application_id_str;
136 static int hf_pfcp_sdf_filter_flags_b0_fd;
137 static int hf_pfcp_sdf_filter_flags_b1_ttc;
138 static int hf_pfcp_sdf_filter_flags_b2_spi;
139 static int hf_pfcp_sdf_filter_flags_b3_fl;
140 static int hf_pfcp_sdf_filter_flags_b4_bid;
142 static int hf_pfcp_flow_desc_len;
143 static int hf_pfcp_flow_desc;
144 static int hf_pfcp_traffic_class;
145 static int hf_pfcp_traffic_mask;
146 static int hf_pfcp_traffic_dscp;
147 static int hf_pfcp_spi;
148 static int hf_pfcp_flow_label_spare_bit;
149 static int hf_pfcp_flow_label;
150 static int hf_pfcp_sdf_filter_id;
152 static int hf_pfcp_out_hdr_desc;
153 static int hf_pfcp_gtpu_ext_hdr_del_b0_pdu_sess_cont;
154 static int hf_pfcp_far_id_flg;
155 static int hf_pfcp_far_id;
156 static int hf_pfcp_urr_id_flg;
157 static int hf_pfcp_urr_id;
158 static int hf_pfcp_qer_id_flg;
159 static int hf_pfcp_qer_id;
160 static int hf_pfcp_predef_rules_name;
164 static int hf_pfcp_apply_action_flags_o6_b4_mbsu;
165 static int hf_pfcp_apply_action_flags_o6_b3_fssm;
166 static int hf_pfcp_apply_action_flags_o6_b2_ddpn;
167 static int hf_pfcp_apply_action_flags_o6_b1_bdpn;
168 static int hf_pfcp_apply_action_flags_o6_b0_edrt;
169 static int hf_pfcp_apply_action_flags_o5_b7_dfrt;
170 static int hf_pfcp_apply_action_flags_o5_b6_ipmd;
171 static int hf_pfcp_apply_action_flags_o5_b5_ipma;
172 static int hf_pfcp_apply_action_flags_o5_b4_dupl;
173 static int hf_pfcp_apply_action_flags_o5_b3_nocp;
174 static int hf_pfcp_apply_action_flags_o5_b2_buff;
175 static int hf_pfcp_apply_action_flags_o5_b1_forw;
176 static int hf_pfcp_apply_action_flags_o5_b0_drop;
178 static int hf_pfcp_bar_id;
179 static int hf_pfcp_fq_csid_node_id_type;
180 static int hf_pfcp_num_csid;
181 static int hf_pfcp_fq_csid_node_id_ipv4;
182 static int hf_pfcp_fq_csid_node_id_ipv6;
183 static int hf_pfcp_fq_csid_node_id_mcc_mnc;
184 static int hf_pfcp_fq_csid_node_id_int;
185 static int hf_pfcp_fq_csid;
186 static int hf_pfcp_fq_csid_node_type;
187 static int hf_pfcp_measurement_period;
188 static int hf_pfcp_duration_measurement;
189 static int hf_pfcp_time_of_first_packet;
190 static int hf_pfcp_time_of_last_packet;
191 static int hf_pfcp_dst_interface;
192 static int hf_pfcp_redirect_address_type;
193 static int hf_pfcp_redirect_server_addr_len;
194 static int hf_pfcp_redirect_server_address;
195 static int hf_pfcp_other_redirect_server_addr_len;
196 static int hf_pfcp_other_redirect_server_address;
197 static int hf_pfcp_redirect_port;
198 static int hf_pfcp_outer_hdr_desc_o5_b0_gtp_udp_ipv4;
199 static int hf_pfcp_outer_hdr_desc_o5_b1_gtp_udp_ipv6;
200 static int hf_pfcp_outer_hdr_desc_o5_b2_udp_ipv4;
201 static int hf_pfcp_outer_hdr_desc_o5_b3_udp_ipv6;
202 static int hf_pfcp_outer_hdr_desc_o5_b4_ipv4;
203 static int hf_pfcp_outer_hdr_desc_o5_b5_ipv6;
204 static int hf_pfcp_outer_hdr_desc_o5_b6_ctag;
205 static int hf_pfcp_outer_hdr_desc_o5_b7_stag;
206 static int hf_pfcp_outer_hdr_desc_o6_b0_n19;
207 static int hf_pfcp_outer_hdr_desc_o6_b1_n6;
208 static int hf_pfcp_outer_hdr_desc_o6_b2_ssm_cteid;
209 static int hf_pfcp_outer_hdr_desc_o6_spare;
210 static int hf_pfcp_outer_hdr_creation_teid;
211 static int hf_pfcp_outer_hdr_creation_ipv4;
212 static int hf_pfcp_outer_hdr_creation_ipv6;
213 static int hf_pfcp_outer_hdr_creation_port;
214 static int hf_pfcp_time_threshold;
215 static int hf_pfcp_forwarding_policy_id_len;
216 static int hf_pfcp_forwarding_policy_id;
218 static int hf_pfcp_measurement_method_flags_b0_durat;
219 static int hf_pfcp_measurement_method_flags_b1_volume;
220 static int hf_pfcp_measurement_method_flags_b2_event;
222 static int hf_pfcp_subsequent_time_threshold;
223 static int hf_pfcp_inactivity_detection_time;
224 static int hf_pfcp_monitoring_time;
226 static int hf_pfcp_reporting_triggers_o5_b7_liusa;
227 static int hf_pfcp_reporting_triggers_o5_b6_droth;
228 static int hf_pfcp_reporting_triggers_o5_b5_stopt;
229 static int hf_pfcp_reporting_triggers_o5_b4_start;
230 static int hf_pfcp_reporting_triggers_o5_b3_quhti;
231 static int hf_pfcp_reporting_triggers_o5_b2_timth;
232 static int hf_pfcp_reporting_triggers_o5_b1_volth;
233 static int hf_pfcp_reporting_triggers_o5_b0_perio;
234 static int hf_pfcp_reporting_triggers_o6_b7_quvti;
235 static int hf_pfcp_reporting_triggers_o6_b6_ipmjl;
236 static int hf_pfcp_reporting_triggers_o6_b5_evequ;
237 static int hf_pfcp_reporting_triggers_o6_b4_eveth;
238 static int hf_pfcp_reporting_triggers_o6_b3_macar;
239 static int hf_pfcp_reporting_triggers_o6_b2_envcl;
240 static int hf_pfcp_reporting_triggers_o6_b1_timqu;
241 static int hf_pfcp_reporting_triggers_o6_b0_volqu;
242 static int hf_pfcp_reporting_triggers_o7_b1_upint;
243 static int hf_pfcp_reporting_triggers_o7_b0_reemr;
245 static int hf_pfcp_volume_threshold_b2_dlvol;
246 static int hf_pfcp_volume_threshold_b1_ulvol;
247 static int hf_pfcp_volume_threshold_b0_tovol;
248 static int hf_pfcp_volume_threshold_tovol;
249 static int hf_pfcp_volume_threshold_ulvol;
250 static int hf_pfcp_volume_threshold_dlvol;
252 static int hf_pfcp_volume_quota_b2_dlvol;
253 static int hf_pfcp_volume_quota_b1_ulvol;
254 static int hf_pfcp_volume_quota_b0_tovol;
255 static int hf_pfcp_volume_quota_tovol;
256 static int hf_pfcp_volume_quota_ulvol;
257 static int hf_pfcp_volume_quota_dlvol;
259 static int hf_pfcp_subseq_volume_threshold_b2_dlvol;
260 static int hf_pfcp_subseq_volume_threshold_b1_ulvol;
261 static int hf_pfcp_subseq_volume_threshold_b0_tovol;
262 static int hf_pfcp_subseq_volume_threshold_tovol;
263 static int hf_pfcp_subseq_volume_threshold_ulvol;
264 static int hf_pfcp_subseq_volume_threshold_dlvol;
266 static int hf_pfcp_time_quota;
267 static int hf_pfcp_start_time;
268 static int hf_pfcp_end_time;
269 static int hf_pfcp_quota_holding_time;
270 static int hf_pfcp_dropped_dl_traffic_threshold_b1_dlby;
271 static int hf_pfcp_dropped_dl_traffic_threshold_b0_dlpa;
272 static int hf_pfcp_downlink_packets;
273 static int hf_pfcp_bytes_downlink_data;
274 static int hf_pfcp_qer_correlation_id;
275 static int hf_pfcp_gate_status_b0b1_dlgate;
276 static int hf_pfcp_gate_status_b3b2_ulgate;
277 static int hf_pfcp_ul_mbr;
278 static int hf_pfcp_dl_mbr;
279 static int hf_pfcp_ul_gbr;
280 static int hf_pfcp_dl_gbr;
282 static int hf_pfcp_report_type_b6_uisr;
283 static int hf_pfcp_report_type_b5_sesr;
284 static int hf_pfcp_report_type_b4_tmir;
285 static int hf_pfcp_report_type_b3_upir;
286 static int hf_pfcp_report_type_b2_erir;
287 static int hf_pfcp_report_type_b1_usar;
288 static int hf_pfcp_report_type_b0_dldr;
290 static int hf_pfcp_offending_ie;
291 static int hf_pfcp_offending_ie_value;
293 static int hf_pfcp_up_function_features_o14_b0_mbsch;
294 static int hf_pfcp_up_function_features_o13_b7_un6tu;
295 static int hf_pfcp_up_function_features_o13_b6_umn6ip;
296 static int hf_pfcp_up_function_features_o13_b5_upsbies;
297 static int hf_pfcp_up_function_features_o13_b4_mtsdt;
298 static int hf_pfcp_up_function_features_o13_b3_edbnc;
299 static int hf_pfcp_up_function_features_o13_b2_qmdrm;
300 static int hf_pfcp_up_function_features_o13_b1_cntl;
301 static int hf_pfcp_up_function_features_o13_b0_pdusm;
302 static int hf_pfcp_up_function_features_o12_b7_eml4s;
303 static int hf_pfcp_up_function_features_o12_b6_detnet;
304 static int hf_pfcp_up_function_features_o12_b5_qmcon;
305 static int hf_pfcp_up_function_features_o12_b4_n6jedb;
306 static int hf_pfcp_up_function_features_o12_b3_drtsc;
307 static int hf_pfcp_up_function_features_o12_b2_tscts;
308 static int hf_pfcp_up_function_features_o12_b1_dbdm;
309 static int hf_pfcp_up_function_features_o12_b0_redsm;
310 static int hf_pfcp_up_function_features_o11_b7_mpquic;
311 static int hf_pfcp_up_function_features_o11_b6_afsfc;
312 static int hf_pfcp_up_function_features_o11_b5_upidp;
313 static int hf_pfcp_up_function_features_o11_b4_ratp;
314 static int hf_pfcp_up_function_features_o11_b3_eppi;
315 static int hf_pfcp_up_function_features_o11_b2_psuprm;
316 static int hf_pfcp_up_function_features_o11_b1_mbsn4;
317 static int hf_pfcp_up_function_features_o11_b0_drqos;
318 static int hf_pfcp_up_function_features_o10_b7_dnsts;
319 static int hf_pfcp_up_function_features_o10_b6_iprep;
320 static int hf_pfcp_up_function_features_o10_b5_resps;
321 static int hf_pfcp_up_function_features_o10_b4_upber;
322 static int hf_pfcp_up_function_features_o10_b3_l2tp;
323 static int hf_pfcp_up_function_features_o10_b2_nspoc;
324 static int hf_pfcp_up_function_features_o10_b1_quasf;
325 static int hf_pfcp_up_function_features_o10_b0_rttwp;
326 static int hf_pfcp_up_function_features_o9_b7_rds;
327 static int hf_pfcp_up_function_features_o9_b6_ddds;
328 static int hf_pfcp_up_function_features_o9_b5_ethar;
329 static int hf_pfcp_up_function_features_o9_b4_ciot;
330 static int hf_pfcp_up_function_features_o9_b3_mt_edt;
331 static int hf_pfcp_up_function_features_o9_b2_gpqm;
332 static int hf_pfcp_up_function_features_o9_b1_qfqm;
333 static int hf_pfcp_up_function_features_o9_b0_atsss_ll;
334 static int hf_pfcp_up_function_features_o8_b7_mptcp;
335 static int hf_pfcp_up_function_features_o8_b6_tsn;
336 static int hf_pfcp_up_function_features_o8_b5_ip6pl;
337 static int hf_pfcp_up_function_features_o8_b4_iptv;
338 static int hf_pfcp_up_function_features_o8_b3_norp;
339 static int hf_pfcp_up_function_features_o8_b2_vtime;
340 static int hf_pfcp_up_function_features_o8_b1_rttl;
341 static int hf_pfcp_up_function_features_o8_b0_mpas;
342 static int hf_pfcp_up_function_features_o7_b7_gcom;
343 static int hf_pfcp_up_function_features_o7_b6_bundl;
344 static int hf_pfcp_up_function_features_o7_b5_mte_n4;
345 static int hf_pfcp_up_function_features_o7_b4_mnop;
346 static int hf_pfcp_up_function_features_o7_b3_sset;
347 static int hf_pfcp_up_function_features_o7_b2_ueip;
348 static int hf_pfcp_up_function_features_o7_b1_adpdp;
349 static int hf_pfcp_up_function_features_o7_b0_dpdra;
350 static int hf_pfcp_up_function_features_o6_b7_epfar;
351 static int hf_pfcp_up_function_features_o6_b6_pfde;
352 static int hf_pfcp_up_function_features_o6_b5_frrt;
353 static int hf_pfcp_up_function_features_o6_b4_trace;
354 static int hf_pfcp_up_function_features_o6_b3_quoac;
355 static int hf_pfcp_up_function_features_o6_b2_udbc;
356 static int hf_pfcp_up_function_features_o6_b1_pdiu;
357 static int hf_pfcp_up_function_features_o6_b0_empu;
358 static int hf_pfcp_up_function_features_o5_b7_treu;
359 static int hf_pfcp_up_function_features_o5_b6_heeu;
360 static int hf_pfcp_up_function_features_o5_b5_pfdm;
361 static int hf_pfcp_up_function_features_o5_b4_ftup;
362 static int hf_pfcp_up_function_features_o5_b3_trst;
363 static int hf_pfcp_up_function_features_o5_b2_dlbd;
364 static int hf_pfcp_up_function_features_o5_b1_ddnd;
365 static int hf_pfcp_up_function_features_o5_b0_bucp;
367 static int hf_pfcp_sequence_number;
368 static int hf_pfcp_metric;
369 static int hf_pfcp_timer_unit;
370 static int hf_pfcp_timer_value;
372 static int hf_pfcp_usage_report_trigger_o5_b7_immer;
373 static int hf_pfcp_usage_report_trigger_o5_b6_droth;
374 static int hf_pfcp_usage_report_trigger_o5_b5_stopt;
375 static int hf_pfcp_usage_report_trigger_o5_b4_start;
376 static int hf_pfcp_usage_report_trigger_o5_b3_quhti;
377 static int hf_pfcp_usage_report_trigger_o5_b2_timth;
378 static int hf_pfcp_usage_report_trigger_o5_b1_volth;
379 static int hf_pfcp_usage_report_trigger_o5_b0_perio;
380 static int hf_pfcp_usage_report_trigger_o6_b7_eveth;
381 static int hf_pfcp_usage_report_trigger_o6_b6_macar;
382 static int hf_pfcp_usage_report_trigger_o6_b5_envcl;
383 static int hf_pfcp_usage_report_trigger_o6_b4_monit;
384 static int hf_pfcp_usage_report_trigger_o6_b3_termr;
385 static int hf_pfcp_usage_report_trigger_o6_b2_liusa;
386 static int hf_pfcp_usage_report_trigger_o6_b1_timqu;
387 static int hf_pfcp_usage_report_trigger_o6_b0_volqu;
388 static int hf_pfcp_usage_report_trigger_o7_b5_upint;
389 static int hf_pfcp_usage_report_trigger_o7_b4_emrre;
390 static int hf_pfcp_usage_report_trigger_o7_b3_quvti;
391 static int hf_pfcp_usage_report_trigger_o7_b2_ipmjl;
392 static int hf_pfcp_usage_report_trigger_o7_b1_tebur;
393 static int hf_pfcp_usage_report_trigger_o7_b0_evequ;
395 static int hf_pfcp_volume_measurement_b5_dlnop;
396 static int hf_pfcp_volume_measurement_b4_ulnop;
397 static int hf_pfcp_volume_measurement_b3_tonop;
398 static int hf_pfcp_volume_measurement_b2_dlvol;
399 static int hf_pfcp_volume_measurement_b1_ulvol;
400 static int hf_pfcp_volume_measurement_b0_tovol;
401 static int hf_pfcp_vol_meas_tovol;
402 static int hf_pfcp_vol_meas_ulvol;
403 static int hf_pfcp_vol_meas_dlvol;
404 static int hf_pfcp_vol_meas_tonop;
405 static int hf_pfcp_vol_meas_ulnop;
406 static int hf_pfcp_vol_meas_dlnop;
408 static int hf_pfcp_cp_function_features_o6_b1_rpgur;
409 static int hf_pfcp_cp_function_features_o6_b0_psucc;
410 static int hf_pfcp_cp_function_features_o5_b7_uiaur;
411 static int hf_pfcp_cp_function_features_o5_b6_ardr;
412 static int hf_pfcp_cp_function_features_o5_b5_mpas;
413 static int hf_pfcp_cp_function_features_o5_b4_bundl;
414 static int hf_pfcp_cp_function_features_o5_b3_sset;
415 static int hf_pfcp_cp_function_features_o5_b2_epfar;
416 static int hf_pfcp_cp_function_features_o5_b1_ovrl;
417 static int hf_pfcp_cp_function_features_o5_b0_load;
419 static int hf_pfcp_usage_information_b3_ube;
420 static int hf_pfcp_usage_information_b2_uae;
421 static int hf_pfcp_usage_information_b1_aft;
422 static int hf_pfcp_usage_information_b0_bef;
424 static int hf_pfcp_application_instance_id;
425 static int hf_pfcp_application_instance_id_str;
426 static int hf_pfcp_flow_dir;
427 static int hf_pfcp_packet_rate_b0_ulpr;
428 static int hf_pfcp_packet_rate_b1_dlpr;
429 static int hf_pfcp_packet_rate_b2_aprc;
430 static int hf_pfcp_ul_time_unit;
431 static int hf_pfcp_max_ul_pr;
432 static int hf_pfcp_dl_time_unit;
433 static int hf_pfcp_max_dl_pr;
434 static int hf_pfcp_a_ul_time_unit;
435 static int hf_pfcp_a_max_ul_pr;
436 static int hf_pfcp_a_dl_time_unit;
437 static int hf_pfcp_a_max_dl_pr;
439 static int hf_pfcp_dl_flow_level_marking_b0_ttc;
440 static int hf_pfcp_dl_flow_level_marking_b1_sci;
442 static int hf_pfcp_sci;
443 static int hf_pfcp_dl_data_notification_delay;
444 static int hf_pfcp_packet_count;
445 static int hf_pfcp_dl_data_service_inf_b0_ppi;
446 static int hf_pfcp_dl_data_service_inf_b1_qfii;
447 static int hf_pfcp_dl_data_service_inf_b2_dlpsi;
448 static int hf_pfcp_paging_policy_indication;
449 static int hf_pfcp_dldatapacketsize;
451 static int hf_pfcp_pfcpsmreq_flags_b0_drobu;
452 static int hf_pfcp_pfcpsmreq_flags_b1_sndem;
453 static int hf_pfcp_pfcpsmreq_flags_b2_qaurr;
454 static int hf_pfcp_pfcpsmreq_flags_b3_sumpc;
455 static int hf_pfcp_pfcpsmreq_flags_b4_rumuc;
456 static int hf_pfcp_pfcpsmreq_flags_b5_deteid;
457 static int hf_pfcp_pfcpsmreq_flags_b6_hrsbom;
459 static int hf_pfcp_pfcpsrrsp_flags_b0_drobu;
461 static int hf_pfcp_pfd_contents_flags_b7_adnp;
462 static int hf_pfcp_pfd_contents_flags_b6_aurl;
463 static int hf_pfcp_pfd_contents_flags_b5_afd;
464 static int hf_pfcp_pfd_contents_flags_b4_dnp;
465 static int hf_pfcp_pfd_contents_flags_b3_cp;
466 static int hf_pfcp_pfd_contents_flags_b2_dn;
467 static int hf_pfcp_pfd_contents_flags_b1_url;
468 static int hf_pfcp_pfd_contents_flags_b0_fd;
470 static int hf_pfcp_url_len;
471 static int hf_pfcp_url;
472 static int hf_pfcp_dn_len;
473 static int hf_pfcp_dn;
474 static int hf_pfcp_cp_len;
475 static int hf_pfcp_cp;
476 static int hf_pfcp_dnp_len;
477 static int hf_pfcp_dnp;
478 static int hf_pfcp_afd_len;
479 static int hf_pfcp_aurl_len;
480 static int hf_pfcp_adnp_len;
481 static int hf_pfcp_header_type;
482 static int hf_pfcp_hf_len;
483 static int hf_pfcp_hf_name;
484 static int hf_pfcp_hf_val_len;
485 static int hf_pfcp_hf_val;
487 static int hf_pfcp_measurement_info_b0_mbqe;
488 static int hf_pfcp_measurement_info_b1_inam;
489 static int hf_pfcp_measurement_info_b2_radi;
490 static int hf_pfcp_measurement_info_b3_istm;
491 static int hf_pfcp_measurement_info_b4_mnop;
492 static int hf_pfcp_measurement_info_b5_sspoc;
493 static int hf_pfcp_measurement_info_b6_aspoc;
494 static int hf_pfcp_measurement_info_b7_ciam;
496 static int hf_pfcp_node_report_type_b0_upfr;
497 static int hf_pfcp_node_report_type_b1_uprr;
498 static int hf_pfcp_node_report_type_b2_ckdr;
499 static int hf_pfcp_node_report_type_b3_gpqr;
500 static int hf_pfcp_node_report_type_b4_purr;
501 static int hf_pfcp_node_report_type_b5_vsr;
503 static int hf_pfcp_remote_gtp_u_peer_flags_b0_v6;
504 static int hf_pfcp_remote_gtp_u_peer_flags_b1_v4;
505 static int hf_pfcp_remote_gtp_u_peer_flags_b2_di;
506 static int hf_pfcp_remote_gtp_u_peer_flags_b3_ni;
507 static int hf_pfcp_remote_gtp_u_peer_flags_b4_rts;
508 static int hf_pfcp_remote_gtp_u_peer_ipv4;
509 static int hf_pfcp_remote_gtp_u_peer_ipv6;
510 static int hf_pfcp_remote_gtp_u_peer_length_di;
511 static int hf_pfcp_remote_gtp_u_peer_length_ni;
512 static int hf_pfcp_remote_gtp_u_peer_time_stamp;
513 static int hf_pfcp_ur_seqn;
515 static int hf_pfcp_oci_flags_b0_aoci;
517 static int hf_pfcp_pfcp_assoc_rel_req_b0_sarr;
518 static int hf_pfcp_pfcp_assoc_rel_req_b1_urss;
520 static int hf_pfcp_upiri_flags_b0_v4;
521 static int hf_pfcp_upiri_flags_b1_v6;
522 static int hf_pfcp_upiri_flg_b6_assosi;
523 static int hf_pfcp_upiri_flg_b5_assoni;
524 static int hf_pfcp_upiri_flg_b2b4_teidri;
525 static int hf_pfcp_upiri_teidri;
526 static int hf_pfcp_upiri_teid_range;
527 static int hf_pfcp_upiri_ipv4;
528 static int hf_pfcp_upiri_ipv6;
530 static int hf_pfcp_user_plane_inactivity_timer;
532 static int hf_pfcp_subsequent_volume_quota_b2_dlvol;
533 static int hf_pfcp_subsequent_volume_quota_b1_ulvol;
534 static int hf_pfcp_subsequent_volume_quota_b0_tovol;
535 static int hf_pfcp_subsequent_volume_quota_tovol;
536 static int hf_pfcp_subsequent_volume_quota_ulvol;
537 static int hf_pfcp_subsequent_volume_quota_dlvol;
539 static int hf_pfcp_subsequent_time_quota;
541 static int hf_pfcp_rqi_flag;
542 static int hf_pfcp_qfi;
543 static int hf_pfcp_query_urr_reference;
544 static int hf_pfcp_additional_usage_reports_information_b14_b0_number_value;
545 static int hf_pfcp_additional_usage_reports_information_b15_auri;
546 static int hf_pfcp_traffic_endpoint_id;
548 static int hf_pfcp_mac_address_flags_b3_udes;
549 static int hf_pfcp_mac_address_flags_b2_usou;
550 static int hf_pfcp_mac_address_flags_b1_dest;
551 static int hf_pfcp_mac_address_flags_b0_sour;
552 static int hf_pfcp_mac_address_upper_dest_mac_address;
553 static int hf_pfcp_mac_address_upper_source_mac_address;
554 static int hf_pfcp_mac_address_dest_mac_address;
555 static int hf_pfcp_mac_address_source_mac_address;
557 static int hf_pfcp_c_tag_flags_b2_vid;
558 static int hf_pfcp_c_tag_flags_b1_dei;
559 static int hf_pfcp_c_tag_flags_b0_pcp;
560 static int hf_pfcp_c_tag_cvid;
561 static int hf_pfcp_c_tag_dei_flag;
562 static int hf_pfcp_c_tag_pcp_value;
564 static int hf_pfcp_s_tag_flags_b2_vid;
565 static int hf_pfcp_s_tag_flags_b1_dei;
566 static int hf_pfcp_s_tag_flags_b0_pcp;
567 static int hf_pfcp_s_tag_svid;
568 static int hf_pfcp_s_tag_dei_flag;
569 static int hf_pfcp_s_tag_pcp_value;
571 static int hf_pfcp_ethertype;
573 static int hf_pfcp_proxying_flags_b1_ins;
574 static int hf_pfcp_proxying_flags_b0_arp;
576 static int hf_pfcp_ethertype_filter_id;
578 static int hf_pfcp_ethertype_filter_properties_flags_b0_bide;
580 static int hf_pfcp_suggested_buffering_packets_count_packet_count;
582 static int hf_pfcp_user_id_flags_b6_peif;
583 static int hf_pfcp_user_id_flags_b5_gpsif;
584 static int hf_pfcp_user_id_flags_b4_supif;
585 static int hf_pfcp_user_id_flags_b3_naif;
586 static int hf_pfcp_user_id_flags_b2_msisdnf;
587 static int hf_pfcp_user_id_flags_b1_imeif;
588 static int hf_pfcp_user_id_flags_b0_imsif;
589 static int hf_pfcp_user_id_length_of_imsi;
590 static int hf_pfcp_user_id_length_of_imei;
591 static int hf_pfcp_user_id_imei;
592 static int hf_pfcp_user_id_length_of_msisdn;
593 static int hf_pfcp_user_id_length_of_nai;
594 static int hf_pfcp_user_id_nai;
595 static int hf_pfcp_user_id_length_of_supi;
596 static int hf_pfcp_user_id_supi;
597 static int hf_pfcp_user_id_length_of_gpsi;
598 static int hf_pfcp_user_id_gpsi;
599 static int hf_pfcp_user_id_length_of_pei;
600 static int hf_pfcp_user_id_pei;
602 static int hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi;
604 static int hf_pfcp_mac_addresses_detected_number_of_mac_addresses;
605 static int hf_pfcp_mac_addresses_detected_mac_address;
606 static int hf_pfcp_mac_addresses_detected_length_of_ctag;
607 static int hf_pfcp_mac_addresses_detected_length_of_stag;
609 static int hf_pfcp_mac_addresses_removed_number_of_mac_addresses;
610 static int hf_pfcp_mac_addresses_removed_mac_address;
611 static int hf_pfcp_mac_addresses_removed_length_of_ctag;
612 static int hf_pfcp_mac_addresses_removed_length_of_stag;
614 static int hf_pfcp_ethernet_inactivity_timer;
616 static int hf_pfcp_subsequent_event_quota;
618 static int hf_pfcp_subsequent_event_threshold;
620 static int hf_pfcp_trace_information_trace_id;
621 static int hf_pfcp_trace_information_length_trigger_events;
622 static int hf_pfcp_trace_information_trigger_events;
623 static int hf_pfcp_trace_information_session_trace_depth;
624 static int hf_pfcp_trace_information_length_list_interfaces;
625 static int hf_pfcp_trace_information_list_interfaces;
626 static int hf_pfcp_trace_information_length_ipaddress;
627 static int hf_pfcp_trace_information_ipv4;
628 static int hf_pfcp_trace_information_ipv6;
630 static int hf_pfcp_framed_route;
631 static int hf_pfcp_framed_routing;
632 static int hf_pfcp_framed_ipv6_route;
634 static int hf_pfcp_event_quota;
636 static int hf_pfcp_event_threshold;
638 static int hf_pfcp_time_stamp;
640 static int hf_pfcp_averaging_window;
642 static int hf_pfcp_paging_policy_indicator;
644 static int hf_pfcp_apn_dnn;
646 static int hf_pfcp_tgpp_interface_type;
648 static int hf_pfcp_pfcpsrreq_flags_b0_psdbu;
650 static int hf_pfcp_pfcpaureq_flags_b0_parps;
652 static int hf_pfcp_activation_time;
653 static int hf_pfcp_deactivation_time;
655 static int hf_pfcp_mar_id;
657 static int hf_pfcp_steering_functionality;
658 static int hf_pfcp_steering_mode;
660 static int hf_pfcp_weight;
661 static int hf_pfcp_priority;
663 static int hf_pfcp_ue_ip_address_pool_length;
664 static int hf_pfcp_ue_ip_address_pool_identity;
666 static int hf_pfcp_alternative_smf_ip_address_flags_ppe;
667 static int hf_pfcp_alternative_smf_ip_address_ipv4;
668 static int hf_pfcp_alternative_smf_ip_address_ipv6;
670 static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b3_dcaroni;
671 static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b2_prin6i;
672 static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b1_prin19i;
673 static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b0_priueai;
675 static int hf_pfcp_validity_time_value;
676 static int hf_pfcp_validity_time_str;
678 static int hf_pfcp_number_of_reports;
680 static int hf_pfcp_pfcpasrsp_flags_flags_b1_uupsi;
681 static int hf_pfcp_pfcpasrsp_flags_flags_b0_psrei;
683 static int hf_pfcp_cp_pfcp_entity_ip_address_ipv4;
684 static int hf_pfcp_cp_pfcp_entity_ip_address_ipv6;
686 static int hf_pfcp_pfcpsereq_flags_flags_b2_hrsbom;
687 static int hf_pfcp_pfcpsereq_flags_flags_b1_sumpc;
688 static int hf_pfcp_pfcpsereq_flags_flags_b0_resti;
690 static int hf_pfcp_ip_multicast_address_flags_b3_any;
691 static int hf_pfcp_ip_multicast_address_flags_b2_range;
692 static int hf_pfcp_ip_multicast_address_start_ipv4;
693 static int hf_pfcp_ip_multicast_address_start_ipv6;
694 static int hf_pfcp_ip_multicast_address_end_ipv4;
695 static int hf_pfcp_ip_multicast_address_end_ipv6;
697 static int hf_pfcp_source_ip_address_flags_b2_mpl;
698 static int hf_pfcp_source_ip_address_ipv4;
699 static int hf_pfcp_source_ip_address_ipv6;
700 static int hf_pfcp_source_ip_address_mask_prefix_lengt;
702 static int hf_pfcp_packet_rate_status_flags_b2_apr;
703 static int hf_pfcp_packet_rate_status_flags_b1_dl;
704 static int hf_pfcp_packet_rate_status_flags_b0_ul;
705 static int hf_pfcp_packet_rate_status_ul;
706 static int hf_pfcp_packet_rate_status_dl;
707 static int hf_pfcp_packet_rate_status_apr_ul;
708 static int hf_pfcp_packet_rate_status_apr_dl;
709 static int hf_pfcp_packet_rate_status_validity_time;
711 static int hf_pfcp_create_bridge_router_info_flags_b1_rii;
712 static int hf_pfcp_create_bridge_router_info_flags_b0_bii;
714 static int hf_pfcp_port_number;
716 static int hf_pfcp_nw_tt_port_number;
718 static int hf_pfcp_5gs_user_plane_node_id_flags_b0_bid;
719 static int hf_pfcp_5gs_user_plane_node_id_value;
721 static int hf_pfcp_port_management_information;
723 static int hf_pfcp_requested_clock_drift_control_information_flags_b1_rrcr;
724 static int hf_pfcp_requested_clock_drift_control_information_flags_b0_rrto;
726 static int hf_pfcp_time_domain_number_value;
728 static int hf_pfcp_time_offset_threshold;
730 static int hf_pfcp_cumulative_rate_ratio_threshold;
732 static int hf_pfcp_time_offset_measurement;
734 static int hf_pfcp_cumulative_rate_ratio_measurement;
736 static int hf_pfcp_srr_id;
738 static int hf_pfcp_requested_access_availability_control_information_flags_b0_rrca;
740 static int hf_pfcp_availability_status;
741 static int hf_pfcp_availability_type;
743 static int hf_pfcp_mptcp_control_information_flags_b0_tci;
745 static int hf_pfcp_atsss_ll_control_information_flags_b0_lli;
747 static int hf_pfcp_pmf_control_information_flags_b2_pqpm;
748 static int hf_pfcp_pmf_control_information_flags_b1_drtti;
749 static int hf_pfcp_pmf_control_information_flags_b0_pmfi;
750 static int hf_pfcp_pmf_control_information_number_of_qfi;
752 static int hf_pfcp_mptcp_address_information_flags_b1_v6;
753 static int hf_pfcp_mptcp_address_information_flags_b0_v4;
754 static int hf_pfcp_mptcp_proxy_type;
755 static int hf_pfcp_mptcp_proxy_port;
756 static int hf_pfcp_mptcp_proxy_ip_address_ipv4;
757 static int hf_pfcp_mptcp_proxy_ip_address_ipv6;
759 static int hf_pfcp_link_specific_multipath_ip_address_flags_b3_nv6;
760 static int hf_pfcp_link_specific_multipath_ip_address_flags_b2_nv4;
761 static int hf_pfcp_link_specific_multipath_ip_address_flags_b1_v6;
762 static int hf_pfcp_link_specific_multipath_ip_address_flags_b0_v4;
763 static int hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv4;
764 static int hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv6;
765 static int hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv4;
766 static int hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv6;
768 static int hf_pfcp_pmf_address_information_flags_b2_mac;
769 static int hf_pfcp_pmf_address_information_flags_b1_v6;
770 static int hf_pfcp_pmf_address_information_flags_b0_v4;
771 static int hf_pfcp_pmf_address_ipv4;
772 static int hf_pfcp_pmf_address_ipv6;
773 static int hf_pfcp_pmf_port_3gpp;
774 static int hf_pfcp_pmf_port_non3gpp;
775 static int hf_pfcp_pmf_mac_address_3gpp;
776 static int hf_pfcp_pmf_mac_address_non3gpp;
778 static int hf_pfcp_atsss_ll_information_flags_b0_lli;
780 static int hf_pfcp_data_network_access_identifier;
782 static int hf_pfcp_packet_delay_milliseconds;
784 static int hf_pfcp_qos_report_trigger_flags_b2_ire;
785 static int hf_pfcp_qos_report_trigger_flags_b1_thr;
786 static int hf_pfcp_qos_report_trigger_flags_b0_per;
788 static int hf_pfcp_gtp_u_path_interface_type_flags_b1_n3;
789 static int hf_pfcp_gtp_u_path_interface_type_flags_b0_n9;
791 static int hf_pfcp_requested_qos_monitoring_flags_b7_ulpr;
792 static int hf_pfcp_requested_qos_monitoring_flags_b6_dlpr;
793 static int hf_pfcp_requested_qos_monitoring_flags_b5_ulci;
794 static int hf_pfcp_requested_qos_monitoring_flags_b4_dlci;
795 static int hf_pfcp_requested_qos_monitoring_flags_b3_gtpupm;
796 static int hf_pfcp_requested_qos_monitoring_flags_b2_rppd;
797 static int hf_pfcp_requested_qos_monitoring_flags_b1_ulpd;
798 static int hf_pfcp_requested_qos_monitoring_flags_b0_dlpd;
800 static int hf_pfcp_reporting_frequency_flags_b2_sesrl;
801 static int hf_pfcp_reporting_frequency_flags_b1_perio;
802 static int hf_pfcp_reporting_frequency_flags_b0_evett;
804 static int hf_pfcp_packet_delay_thresholds_flags_b2_rp;
805 static int hf_pfcp_packet_delay_thresholds_flags_b1_ul;
806 static int hf_pfcp_packet_delay_thresholds_flags_b0_dl;
807 static int hf_pfcp_packet_delay_thresholds_downlink;
808 static int hf_pfcp_packet_delay_thresholds_uplink;
809 static int hf_pfcp_packet_delay_thresholds_roundtrip;
811 static int hf_pfcp_minimum_wait_time_seconds;
813 static int hf_pfcp_qos_monitoring_measurement_flags_b5_ulci;
814 static int hf_pfcp_qos_monitoring_measurement_flags_b4_dlci;
815 static int hf_pfcp_qos_monitoring_measurement_flags_b3_plmf;
816 static int hf_pfcp_qos_monitoring_measurement_flags_b2_rppd;
817 static int hf_pfcp_qos_monitoring_measurement_flags_b1_ulpd;
818 static int hf_pfcp_qos_monitoring_measurement_flags_b0_dlpd;
819 static int hf_pfcp_qos_monitoring_measurement_downlink_packet_delay;
820 static int hf_pfcp_qos_monitoring_measurement_uplink_packet_delay;
821 static int hf_pfcp_qos_monitoring_measurement_roundtrip;
822 static int hf_pfcp_qos_monitoring_measurement_downlink_congestion_information;
823 static int hf_pfcp_qos_monitoring_measurement_uplink_congestion_information;
824 static int hf_pfcp_qos_monitoring_measurement_downlink_packet_rate;
825 static int hf_pfcp_qos_monitoring_measurement_uplink_packet_rate;
827 static int hf_pfcp_mt_edt_control_information_flags_b0_rdsi;
829 static int hf_pfcp_dl_data_packets_size;
831 static int hf_pfcp_qer_control_indications_o5_b0_rcsr;
833 static int hf_pfcp_nf_instance_id;
835 static int hf_pfcp_s_nssai_sst;
836 static int hf_pfcp_s_nssai_sd;
838 static int hf_pfcp_ip_version_flags_b1_v6;
839 static int hf_pfcp_ip_version_flags_b0_v4;
841 static int hf_pfcp_pfcpasreq_flags_flags_b0_uupsi;
843 static int hf_pfcp_data_status_flags_b1_buff;
844 static int hf_pfcp_data_status_flags_b0_drop;
846 static int hf_pfcp_rds_configuration_information_flags_b0_rds;
848 static int hf_pfcp_multipath_application_indication_flags_b1_mqai;
849 static int hf_pfcp_multipath_application_indication_flags_b0_mtai;
851 static int hf_pfcp_user_plane_node_management_information_container;
853 static int hf_pfcp_number_of_ue_ip_addresses_b1_ipv6;
854 static int hf_pfcp_number_of_ue_ip_addresses_b0_ipv4;
855 static int hf_pfcp_number_of_ue_ip_addresses_ipv6;
856 static int hf_pfcp_number_of_ue_ip_addresses_ipv4;
858 static int hf_pfcp_validity_timer;
860 static int hf_pfcp_rattype;
862 static int hf_pfcp_l2tp_user_authentication_proxy_authen_type_value;
863 static int hf_pfcp_l2tp_user_authentication_b3_pai;
864 static int hf_pfcp_l2tp_user_authentication_b2_par;
865 static int hf_pfcp_l2tp_user_authentication_b1_pac;
866 static int hf_pfcp_l2tp_user_authentication_b0_pan;
867 static int hf_pfcp_l2tp_user_authentication_proxy_authen_name_len;
868 static int hf_pfcp_l2tp_user_authentication_proxy_authen_name;
869 static int hf_pfcp_l2tp_user_authentication_proxy_authen_challenge_len;
870 static int hf_pfcp_l2tp_user_authentication_proxy_authen_challenge;
871 static int hf_pfcp_l2tp_user_authentication_proxy_authen_response_len;
872 static int hf_pfcp_l2tp_user_authentication_proxy_authen_response;
873 static int hf_pfcp_l2tp_user_authentication_proxy_authen_id;
875 static int hf_pfcp_lns_address_ipv4;
876 static int hf_pfcp_lns_address_ipv6;
878 static int hf_pfcp_tunnel_preference_value;
880 static int hf_pfcp_calling_number_value;
881 static int hf_pfcp_called_number_value;
883 static int hf_pfcp_l2tp_session_indications_o5_b2_rensa;
884 static int hf_pfcp_l2tp_session_indications_o5_b1_redsa;
885 static int hf_pfcp_l2tp_session_indications_o5_b0_reuia;
887 static int hf_pfcp_maximum_receive_unit;
889 static int hf_pfcp_thresholds_flags_b1_plr;
890 static int hf_pfcp_thresholds_flags_b0_rtt;
891 static int hf_pfcp_thresholds_rtt;
892 static int hf_pfcp_thresholds_plr;
894 static int hf_pfcp_l2tp_steering_mode_indications_o5_b1_ueai;
895 static int hf_pfcp_l2tp_steering_mode_indications_o5_b0_albi;
897 static int hf_pfcp_group_id;
899 static int hf_pfcp_cp_ip_address_ipv4;
900 static int hf_pfcp_cp_ip_address_ipv6;
902 static int hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4;
903 static int hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6;
904 static int hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn;
905 static int hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4;
906 static int hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6;
907 static int hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn;
908 static int hf_pfcp_ip_address_and_port_number_replacement_flag_b6_umn6rs;
909 static int hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4;
910 static int hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6;
911 static int hf_pfcp_ip_address_and_port_number_replacement_destination_port;
912 static int hf_pfcp_ip_address_and_port_number_replacement_source_ipv4;
913 static int hf_pfcp_ip_address_and_port_number_replacement_source_ipv6;
914 static int hf_pfcp_ip_address_and_port_number_replacement_source_port;
916 static int hf_pfcp_dns_query_filter_pattern_len;
917 static int hf_pfcp_dns_query_filter_pattern;
919 static int hf_pfcp_event_notification_uri;
921 static int hf_pfcp_notification_correlation_id;
923 static int hf_pfcp_reporting_flags_o5_b0_dupl;
925 static int hf_pfcp_mbs_session_identifier_flag_b0_tmgi;
926 static int hf_pfcp_mbs_session_identifier_flag_b1_ssmi;
927 static int hf_pfcp_mbs_session_identifier_flag_b2_nidi;
928 static int hf_pfcp_mbs_session_identifier_tmgi;
929 static int hf_pfcp_mbs_session_identifier_nidi;
930 static int hf_pfcp_mbs_session_identifier_source_address_type;
931 static int hf_pfcp_mbs_session_identifier_source_address_length;
932 static int hf_pfcp_mbs_session_identifier_source_address_ipv4;
933 static int hf_pfcp_mbs_session_identifier_source_address_ipv6;
935 static int hf_pfcp_multicast_transport_information_endpoint_identifier;
936 static int hf_pfcp_multicast_transport_information_distribution_address_type;
937 static int hf_pfcp_multicast_transport_information_distribution_address_length;
938 static int hf_pfcp_multicast_transport_information_distribution_address_ipv4;
939 static int hf_pfcp_multicast_transport_information_distribution_address_ipv6;
940 static int hf_pfcp_multicast_transport_information_source_address_type;
941 static int hf_pfcp_multicast_transport_information_source_address_length;
942 static int hf_pfcp_multicast_transport_information_source_address_ipv4;
943 static int hf_pfcp_multicast_transport_information_source_address_ipv6;
945 static int hf_pfcp_mbsn4mbreq_flags_o5_b2_mbs_resti;
946 static int hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm;
947 static int hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm;
949 static int hf_pfcp_local_ingress_tunnel_flags_b2_ch;
950 static int hf_pfcp_local_ingress_tunnel_flags_b1_v6;
951 static int hf_pfcp_local_ingress_tunnel_flags_b0_v4;
952 static int hf_pfcp_local_ingress_tunnel_udp_port;
953 static int hf_pfcp_local_ingress_tunnel_ipv4;
954 static int hf_pfcp_local_ingress_tunnel_ipv6;
956 static int hf_pfcp_mbs_unicast_parameters_id;
958 static int hf_pfcp_mbsn4resp_flags_o5_b2_n19dtr;
959 static int hf_pfcp_mbsn4resp_flags_o5_b1_jmti;
960 static int hf_pfcp_mbsn4resp_flags_o5_b0_nn19dt;
962 static int hf_pfcp_tunnel_password_value;
964 static int hf_pfcp_area_session_id_value;
966 static int hf_pfcp_dscp_to_ppi_mapping_info_ppi_value;
967 static int hf_pfcp_dscp_to_ppi_mapping_info_dscp_value;
969 static int hf_pfcp_pfcpsdrsp_flags_b0_puru;
971 static int hf_pfcp_qer_indications_flags_b3_pdusm;
972 static int hf_pfcp_qer_indications_flags_b2_eml4s;
973 static int hf_pfcp_qer_indications_flags_b1_edbmi;
974 static int hf_pfcp_qer_indications_flags_b0_iqfis;
976 static int hf_pfcp_configured_time_domain_flags_b0_ctdi;
978 static int hf_pfcp_metadata;
979 static int hf_pfcp_metadata_binary_metadata;
981 static int hf_pfcp_traffic_parameter_threshold_flags_b0_dl;
982 static int hf_pfcp_traffic_parameter_threshold_downlink_n6_jitter_threshold;
984 static int hf_pfcp_dl_periodicity_value;
986 static int hf_pfcp_n6_jitter_measurement_flags_b0_dl;
987 static int hf_pfcp_n6_jitter_measurement_dl_periodicity;
988 static int hf_pfcp_n6_jitter_measurement_lower_dl_jitter_measurement;
989 static int hf_pfcp_n6_jitter_measurement_higher_dl_jitter_measurement;
992 static int hf_pfcp_traffic_parameter_measurement_indication_flags_b2_n6jmi;
993 static int hf_pfcp_traffic_parameter_measurement_indication_flags_b1_dlpmi;
994 static int hf_pfcp_traffic_parameter_measurement_indication_flags_b0_ulpmi;
996 static int hf_pfcp_ul_periodicity_value;
998 static int hf_pfcp_mpquic_control_information_flags_b0_cupd;
1000 static int hf_pfcp_mpquic_address_information_flags_b1_v6;
1001 static int hf_pfcp_mpquic_address_information_flags_b0_v4;
1002 static int hf_pfcp_mpquic_address_information_type;
1003 static int hf_pfcp_mpquic_address_information_port;
1004 static int hf_pfcp_mpquic_address_information_address_ipv4;
1005 static int hf_pfcp_mpquic_address_information_address_ipv6;
1007 static int hf_pfcp_transport_mode_value;
1009 static int hf_pfcp_protocol_description_flags_b2_srtp;
1010 static int hf_pfcp_protocol_description_flags_b1_rtp;
1011 static int hf_pfcp_protocol_description_flags_b0_h264;
1013 static int hf_pfcp_reporting_suggestion_info_reporting_urgency_value;
1014 static int hf_pfcp_reporting_suggestion_info_reporting_time_info;
1016 static int hf_pfcp_tl_container;
1018 static int hf_pfcp_measurement_indication_flags_b0_dqfi;
1020 static int hf_pfcp_hplmn_s_nssai_sst;
1021 static int hf_pfcp_hplmn_s_nssai_sd;
1023 static int hf_pfcp_media_transport_protocol;
1025 static int hf_pfcp_rtp_header_extension_type;
1027 static int hf_pfcp_rtp_header_extension_id;
1029 static int hf_pfcp_rtp_payload_type;
1031 static int hf_pfcp_rtp_payload_format;
1033 static int hf_pfcp_extended_dl_buffering_notification_policy_flags_b0_edbn;
1035 static int hf_pfcp_mt_sdt_control_information_flags_b0_rdsi;
1037 static int hf_pfcp_reporting_thresholds_flags_b3_uldr;
1038 static int hf_pfcp_reporting_thresholds_flags_b2_dldr;
1039 static int hf_pfcp_reporting_thresholds_flags_b1_ulci;
1040 static int hf_pfcp_reporting_thresholds_flags_b0_dlci;
1041 static int hf_pfcp_reporting_thresholds_dl_congestion_information_threshold;
1042 static int hf_pfcp_reporting_thresholds_ul_congestion_information_threshold;
1043 static int hf_pfcp_reporting_thresholds_dl_data_rate_threshold;
1044 static int hf_pfcp_reporting_thresholds_ul_data_rate_threshold;
1046 static int hf_pfcp_rtp_header_extension_additional_information_flags_b1_pssai;
1047 static int hf_pfcp_rtp_header_extension_additional_information_flags_b0_fi;
1048 static int hf_pfcp_rtp_header_extension_additional_information_pssa;
1049 static int hf_pfcp_rtp_header_extension_additional_information_format;
1051 static int hf_pfcp_mapped_n6_ip_address_b0_chv4;
1052 static int hf_pfcp_mapped_n6_ip_address_b1_v4;
1053 static int hf_pfcp_mapped_n6_ip_address_ipv4;
1055 static int hf_pfcp_n6_routing_information_flag_b0_sipv4;
1056 static int hf_pfcp_n6_routing_information_flag_b1_sipv6;
1057 static int hf_pfcp_n6_routing_information_flag_b2_spo;
1058 static int hf_pfcp_n6_routing_information_flag_b3_dipv4;
1059 static int hf_pfcp_n6_routing_information_flag_b4_dipv6;
1060 static int hf_pfcp_n6_routing_information_flag_b5_dpo;
1061 static int hf_pfcp_n6_routing_information_source_ipv4;
1062 static int hf_pfcp_n6_routing_information_source_ipv6;
1063 static int hf_pfcp_n6_routing_information_source_port;
1064 static int hf_pfcp_n6_routing_information_destination_ipv4;
1065 static int hf_pfcp_n6_routing_information_destination_ipv6;
1066 static int hf_pfcp_n6_routing_information_destination_port;
1068 /* Enterprise IEs */
1069 /* BBF */
1070 static int hf_pfcp_bbf_up_function_features_o7_b7_nat_up;
1071 static int hf_pfcp_bbf_up_function_features_o7_b6_nat_cp;
1072 static int hf_pfcp_bbf_up_function_features_o7_b5_iptv;
1073 static int hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload;
1074 static int hf_pfcp_bbf_up_function_features_o7_b3_lns;
1075 static int hf_pfcp_bbf_up_function_features_o7_b2_lac;
1076 static int hf_pfcp_bbf_up_function_features_o7_b1_ipoe;
1077 static int hf_pfcp_bbf_up_function_features_o7_b0_pppoe;
1079 static int hf_pfcp_bbf_logical_port_id;
1080 static int hf_pfcp_bbf_logical_port_id_str;
1083 static int hf_pfcp_bbf_outer_hdr_creation_desc_spare;
1084 static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b4_ppp;
1085 static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b3_l2tp;
1086 static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b2_traffic_endpoint;
1087 static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b1_crp_nsh;
1088 static int hf_pfcp_bbf_outer_hdr_creation_tunnel_id;
1089 static int hf_pfcp_bbf_outer_hdr_creation_session_id;
1091 static int hf_pfcp_bbf_out_hdr_desc;
1093 static int hf_pfcp_bbf_pppoe_session_id;
1095 static int hf_pfcp_bbf_ppp_protocol_flags;
1096 static int hf_pfcp_bbf_ppp_protocol_b2_control;
1097 static int hf_pfcp_bbf_ppp_protocol_b1_data;
1098 static int hf_pfcp_bbf_ppp_protocol_b0_specific;
1099 static int hf_pfcp_bbf_ppp_protocol;
1101 static int hf_pfcp_bbf_verification_timer_interval;
1102 static int hf_pfcp_bbf_verification_timer_count;
1104 static int hf_pfcp_bbf_ppp_lcp_magic_number_tx;
1105 static int hf_pfcp_bbf_ppp_lcp_magic_number_rx;
1107 static int hf_pfcp_bbf_mtu;
1109 static int hf_pfcp_bbf_l2tp_endp_flags;
1110 static int hf_pfcp_bbf_l2tp_endp_flags_b2_ch;
1111 static int hf_pfcp_bbf_l2tp_endp_flags_b1_v6;
1112 static int hf_pfcp_bbf_l2tp_endp_flags_b0_v4;
1113 static int hf_pfcp_bbf_l2tp_endp_id_tunnel_id;
1114 static int hf_pfcp_bbf_l2tp_endp_id_ipv4;
1115 static int hf_pfcp_bbf_l2tp_endp_id_ipv6;
1117 static int hf_pfcp_bbf_l2tp_session_id;
1119 static int hf_pfcp_bbf_l2tp_type_flags;
1120 static int hf_pfcp_bbf_l2tp_type_flags_b0_t;
1122 static int hf_pfcp_bbf_multicast_flags_o7_b1_routeralertoff;
1123 static int hf_pfcp_bbf_multicast_flags_o7_b0_fastleave;
1125 static int hf_pfcp_bbf_multicast_query_param_robustness;
1126 static int hf_pfcp_bbf_multicast_query_param_query_interval;
1127 static int hf_pfcp_bbf_multicast_query_param_query_response_interval;
1128 static int hf_pfcp_bbf_multicast_query_param_group_query_interval;
1130 static int hf_pfcp_bbf_multicast_group_limit_max_joins;
1132 static int hf_pfcp_bbf_apply_action_flags_b0_nat;
1134 static int hf_pfcp_bbf_nat_external_port_range_start;
1135 static int hf_pfcp_bbf_nat_external_port_range_end;
1137 static int hf_pfcp_bbf_nat_port_forward;
1138 static int hf_pfcp_bbf_nat_port_forward_inside_ip;
1139 static int hf_pfcp_bbf_nat_port_forward_inside_port;
1140 static int hf_pfcp_bbf_nat_port_forward_outside_port;
1141 static int hf_pfcp_bbf_nat_port_forward_protocol;
1143 static int hf_pfcp_bbf_reporting_trigger;
1145 static int hf_pfcp_bbf_dynamic_nat_block_port_range_start_port;
1146 static int hf_pfcp_bbf_dynamic_nat_block_port_range_end_port;
1148 static int hf_pfcp_bbf_event_time_stamp;
1150 static int hf_pfcp_bbf_direction = -1;
1151 static int hf_pfcp_bbf_family = -1;
1152 static int hf_pfcp_bbf_sgrp_identifier = -1;
1153 static int hf_pfcp_bbf_sgrp_state = -1;
1154 static int hf_pfcp_bbf_sgrp_flags = -1;
1155 static int hf_pfcp_bbf_sgrp_flags_b0_ras = -1;
1156 static int hf_pfcp_bbf_sgrp_flags_b1_psa = -1;
1157 static int hf_pfcp_bbf_operational_condition = -1;
1158 static int hf_pfcp_bbf_ipv4_prefix = -1;
1159 static int hf_pfcp_bbf_ipv4_prefix_length = -1;
1160 static int hf_pfcp_bbf_ipv6_prefix = -1;
1161 static int hf_pfcp_bbf_ipv6_prefix_length = -1;
1162 static int hf_pfcp_bbf_prefix_tag_usage = -1;
1163 static int hf_pfcp_bbf_prefix_tag = -1;
1164 static int hf_pfcp_bbf_error_code = -1;
1165 static int hf_pfcp_bbf_error_message = -1;
1166 static int hf_pfcp_bbf_maximum_acl_chain_length = -1;
1167 static int hf_pfcp_bbf_forwarding_capability = -1;
1168 static int hf_pfcp_bbf_connectivity_status = -1;
1169 static int hf_pfcp_bbf_vendor_specific_node_report_type = -1;
1170 static int hf_pfcp_bbf_vendor_specific_node_report_type_b0_lpr = -1;
1171 static int hf_pfcp_bbf_vendor_specific_node_report_type_b1_sgr = -1;
1172 static int hf_pfcp_bbf_vendor_specific_node_report_type_b2_nir = -1;
1173 static int hf_pfcp_bbf_ctag_range_start = -1;
1174 static int hf_pfcp_bbf_ctag_range_end = -1;
1175 static int hf_pfcp_bbf_stag_range_start = -1;
1176 static int hf_pfcp_bbf_stag_range_end = -1;
1178 /* Travelping */
1179 static int hf_pfcp_enterprise_travelping_packet_measurement;
1180 static int hf_pfcp_enterprise_travelping_packet_measurement_b2_dlnop;
1181 static int hf_pfcp_enterprise_travelping_packet_measurement_b1_ulnop;
1182 static int hf_pfcp_enterprise_travelping_packet_measurement_b0_tonop;
1183 static int hf_pfcp_travelping_pkt_meas_tonop;
1184 static int hf_pfcp_travelping_pkt_meas_ulnop;
1185 static int hf_pfcp_travelping_pkt_meas_dlnop;
1187 static int hf_pfcp_travelping_build_id;
1188 static int hf_pfcp_travelping_build_id_str;
1189 static int hf_pfcp_travelping_now;
1190 static int hf_pfcp_travelping_error_message;
1191 static int hf_pfcp_travelping_error_message_str;
1192 static int hf_pfcp_travelping_file_name;
1193 static int hf_pfcp_travelping_file_name_str;
1194 static int hf_pfcp_travelping_line_number;
1195 static int hf_pfcp_travelping_ipfix_policy;
1196 static int hf_pfcp_travelping_ipfix_policy_str;
1197 static int hf_pfcp_travelping_trace_parent;
1198 static int hf_pfcp_travelping_trace_parent_str;
1199 static int hf_pfcp_travelping_trace_state;
1200 static int hf_pfcp_travelping_trace_state_str;
1202 /* Nokia */
1204 static int hf_pfcp_nokia_sap_template;
1205 static int hf_pfcp_nokia_group_iface_template;
1206 static int hf_pfcp_nokia_session_state_id;
1207 static int hf_pfcp_nokia_detailed_stats_key;
1208 static int hf_pfcp_nokia_detailed_stats_key_direction;
1209 static int hf_pfcp_nokia_detailed_stats_key_object_id;
1210 static int hf_pfcp_nokia_detailed_stats_key_stat_mode;
1211 static int hf_pfcp_nokia_detailed_stats_key_type;
1212 static int hf_pfcp_nokia_detailed_stats_bitmap_item;
1213 static int hf_pfcp_nokia_detailed_stats_octets;
1214 static int hf_pfcp_nokia_detailed_error;
1215 static int hf_pfcp_nokia_qos_override;
1216 static int hf_pfcp_nokia_measurement_info;
1217 static int hf_pfcp_nokia_measurement_info_b0_det;
1218 static int hf_pfcp_nokia_pfcpsmreq_flags;
1219 static int hf_pfcp_nokia_pfcpsmreq_flags_b0_abs;
1220 static int hf_pfcp_nokia_pfcpsmreq_flags_b1_audit;
1221 static int hf_pfcp_nokia_up_function_features_bulk_audit;
1222 static int hf_pfcp_nokia_up_function_features_sssg;
1223 static int hf_pfcp_nokia_filter_override_type;
1224 static int hf_pfcp_nokia_filter_override_name;
1225 static int hf_pfcp_nokia_intermediate_destination;
1226 static int hf_pfcp_nokia_nat_isa_members;
1227 static int hf_pfcp_nokia_pfcphb_flags;
1228 static int hf_pfcp_nokia_pfcphb_flags_b0_aud_r;
1229 static int hf_pfcp_nokia_pfcphb_flags_b1_aud_s;
1230 static int hf_pfcp_nokia_pfcphb_flags_b2_aud_e;
1231 static int hf_pfcp_nokia_l2tp_lcp_request;
1232 static int hf_pfcp_nokia_l2tp_auth_type;
1233 static int hf_pfcp_nokia_l2tp_auth_name;
1234 static int hf_pfcp_nokia_l2tp_auth_id;
1235 static int hf_pfcp_nokia_l2tp_auth_challenge;
1236 static int hf_pfcp_nokia_l2tp_auth_response;
1237 static int hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address;
1238 static int hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address;
1239 static int hf_pfcp_nokia_l2tp_client_auth_id;
1240 static int hf_pfcp_nokia_l2tp_server_auth_id;
1241 static int hf_pfcp_nokia_l2tp_password;
1242 static int hf_pfcp_nokia_l2tp_assignment_id;
1243 static int hf_pfcp_nokia_l2tp_private_group_id;
1244 static int hf_pfcp_nokia_l2tp_tunnel_params_flags;
1245 static int hf_pfcp_nokia_l2tp_params_flags_b31_hello_interval;
1246 static int hf_pfcp_nokia_l2tp_params_flags_b30_idle_timeout;
1247 static int hf_pfcp_nokia_l2tp_params_flags_b29_session_limit;
1248 static int hf_pfcp_nokia_l2tp_params_flags_b28_preference;
1249 static int hf_pfcp_nokia_l2tp_params_flags_b27_df_bit;
1250 static int hf_pfcp_nokia_l2tp_params_flags_b26_challenge;
1251 static int hf_pfcp_nokia_l2tp_params_flags_b25_avp_hiding;
1252 static int hf_pfcp_nokia_l2tp_params_flags_b24_algorithm;
1253 static int hf_pfcp_nokia_l2tp_params_flags_b19_rx_window_size;
1254 static int hf_pfcp_nokia_l2tp_params_flags_b18_max_retries_not_estab;
1255 static int hf_pfcp_nokia_l2tp_params_flags_b17_max_retries_estab;
1256 static int hf_pfcp_nokia_l2tp_params_flags_b16_destruct_timeout;
1257 static int hf_pfcp_nokia_l2tp_params_hello_interval;
1258 static int hf_pfcp_nokia_l2tp_params_idle_timeout;
1259 static int hf_pfcp_nokia_l2tp_params_session_limit;
1260 static int hf_pfcp_nokia_l2tp_params_preference;
1261 static int hf_pfcp_nokia_l2tp_params_df_bit;
1262 static int hf_pfcp_nokia_l2tp_params_challenge;
1263 static int hf_pfcp_nokia_l2tp_params_avp_hiding;
1264 static int hf_pfcp_nokia_l2tp_params_algorithm;
1265 static int hf_pfcp_nokia_l2tp_params_rx_window_size;
1266 static int hf_pfcp_nokia_l2tp_params_max_retries_not_estab;
1267 static int hf_pfcp_nokia_l2tp_params_max_retries_estab;
1268 static int hf_pfcp_nokia_l2tp_params_destruct_timeout;
1269 static int hf_pfcp_nokia_l2tp_local_tunnel_id;
1270 static int hf_pfcp_nokia_l2tp_remote_tunnel_id;
1271 static int hf_pfcp_nokia_l2tp_local_session_id;
1272 static int hf_pfcp_nokia_l2tp_remote_session_id;
1273 static int hf_pfcp_nokia_l2tp_call_serial_num;
1274 static int hf_pfcp_nokia_snat_inside_ipv4_address;
1275 static int hf_pfcp_nokia_access_line_circuit_id;
1276 static int hf_pfcp_nokia_access_line_remote_id;
1277 static int hf_pfcp_nokia_access_line_params_flags;
1278 static int hf_pfcp_nokia_access_line_params_flags_b24_act_up;
1279 static int hf_pfcp_nokia_access_line_params_flags_b25_act_down;
1280 static int hf_pfcp_nokia_access_line_params_flags_b26_min_up;
1281 static int hf_pfcp_nokia_access_line_params_flags_b27_min_down;
1282 static int hf_pfcp_nokia_access_line_params_flags_b28_att_up;
1283 static int hf_pfcp_nokia_access_line_params_flags_b29_att_down;
1284 static int hf_pfcp_nokia_access_line_params_flags_b30_max_up;
1285 static int hf_pfcp_nokia_access_line_params_flags_b31_max_down;
1286 static int hf_pfcp_nokia_access_line_params_flags_b16_min_up_lp;
1287 static int hf_pfcp_nokia_access_line_params_flags_b17_min_down_lp;
1288 static int hf_pfcp_nokia_access_line_params_flags_b18_max_inter_delay_up;
1289 static int hf_pfcp_nokia_access_line_params_flags_b19_act_inter_delay_up;
1290 static int hf_pfcp_nokia_access_line_params_flags_b20_max_inter_delay_down;
1291 static int hf_pfcp_nokia_access_line_params_flags_b21_act_inter_delay_down;
1292 static int hf_pfcp_nokia_access_line_params_flags_b22_access_loop_encap;
1293 static int hf_pfcp_nokia_access_line_params_flags_b23_iw_session;
1294 static int hf_pfcp_nokia_access_line_params_act_up;
1295 static int hf_pfcp_nokia_access_line_params_act_down;
1296 static int hf_pfcp_nokia_access_line_params_min_up;
1297 static int hf_pfcp_nokia_access_line_params_min_down;
1298 static int hf_pfcp_nokia_access_line_params_att_up;
1299 static int hf_pfcp_nokia_access_line_params_att_down;
1300 static int hf_pfcp_nokia_access_line_params_max_up;
1301 static int hf_pfcp_nokia_access_line_params_max_down;
1302 static int hf_pfcp_nokia_access_line_params_min_up_lp;
1303 static int hf_pfcp_nokia_access_line_params_min_down_lp;
1304 static int hf_pfcp_nokia_access_line_params_max_inter_delay_up;
1305 static int hf_pfcp_nokia_access_line_params_act_inter_delay_up;
1306 static int hf_pfcp_nokia_access_line_params_max_inter_delay_down;
1307 static int hf_pfcp_nokia_access_line_params_act_inter_delay_down;
1308 static int hf_pfcp_nokia_access_line_params_access_loop_encap;
1309 static int hf_pfcp_nokia_acct_session_id;
1310 static int hf_pfcp_nokia_fsg_template_name;
1311 static int hf_pfcp_nokia_up_profile;
1312 static int hf_pfcp_nokia_default_qos_id;
1313 static int hf_pfcp_nokia_serving_node_id_flags;
1314 static int hf_pfcp_nokia_serving_node_id_flg_b2_uuid;
1315 static int hf_pfcp_nokia_serving_node_id_flg_b1_v6;
1316 static int hf_pfcp_nokia_serving_node_id_flg_b0_v4;
1317 static int hf_pfcp_nokia_serving_node_id_ipv4;
1318 static int hf_pfcp_nokia_serving_node_id_ipv6;
1319 static int hf_pfcp_nokia_serving_node_id_uuid;
1320 static int hf_pfcp_nokia_pcc_rule_name;
1321 static int hf_pfcp_nokia_calltrace_profile;
1322 static int hf_pfcp_nokia_custom_charging_group;
1325 static int ett_pfcp;
1326 static int ett_pfcp_flags;
1327 static int ett_pfcp_ie;
1328 static int ett_pfcp_unknown_enterprise_ie;
1329 static int ett_pfcp_grouped_ie;
1330 static int ett_pfcp_reporting_triggers;
1331 static int ett_pfcp_up_function_features;
1332 static int ett_pfcp_report_trigger;
1333 static int ett_pfcp_flow_desc;
1334 static int ett_pfcp_tos;
1335 static int ett_pfcp_spi;
1336 static int ett_pfcp_flow_label;
1337 static int ett_pfcp_sdf_filter_id;
1338 static int ett_pfcp_adf;
1339 static int ett_pfcp_aurl;
1340 static int ett_pfcp_adnp;
1342 static int ett_pfcp_enterprise_travelping_packet_measurement;
1343 static int ett_pfcp_enterprise_travelping_error_report;
1344 static int ett_pfcp_enterprise_travelping_created_nat_binding;
1345 static int ett_pfcp_enterprise_travelping_trace_info;
1347 static int ett_pfcp_bbf_ppp_protocol_flags;
1348 static int ett_pfcp_bbf_l2tp_endp_flags;
1349 static int ett_pfcp_bbf_l2tp_type_flags;
1350 static int ett_pfcp_bbf_ppp_lcp_connectivity;
1351 static int ett_pfcp_bbf_l2tp_tunnel;
1352 static int ett_pfcp_bbf_nat_port_forward_list;
1353 static int ett_pfcp_bbf_sgrp_flags;
1354 static int ett_pfcp_bbf_vendor_specific_node_report_type;
1356 static int ett_pfcp_nokia_detailed_stats_key;
1357 static int ett_pfcp_nokia_detailed_stats_bitmap;
1358 static int ett_pfcp_nokia_measurement_info;
1359 static int ett_pfcp_nokia_pfcpsmreq_flags;
1360 static int ett_pfcp_nokia_pfcphb_flags;
1361 static int ett_pfcp_nokia_l2tp_tunnel_params_flags;
1362 static int ett_pfcp_nokia_access_line_params_flags;
1363 static int ett_pfcp_nokia_serving_node_id_flags;
1365 static expert_field ei_pfcp_ie_reserved;
1366 static expert_field ei_pfcp_ie_data_not_decoded;
1367 static expert_field ei_pfcp_ie_not_decoded_null;
1368 static expert_field ei_pfcp_ie_not_decoded_too_large;
1369 static expert_field ei_pfcp_ie_encoding_error;
1371 static int pfcp_tap = -1;
1373 static bool g_pfcp_session;
1374 static unsigned pref_pair_matching_max_interval_ms; /* Default: disable */
1376 static uint32_t pfcp_session_count;
1378 typedef 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;
1388 typedef 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;
1397 typedef 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;
1403 /* Relation between frame -> session */
1404 GHashTable* pfcp_session_table;
1405 /* Relation between <seid,ip> -> frame */
1406 wmem_map_t* pfcp_frame_map;
1409 typedef struct pfcp_info {
1410 uint64_t seid;
1411 address addr;
1412 } pfcp_info_t;
1414 typedef struct _pfcp_sub_dis_t {
1415 uint8_t message_type;
1416 pfcp_session_args_t *args;
1417 } pfcp_sub_dis_t;
1419 static dissector_table_t pfcp_enterprise_ies_dissector_table;
1421 static void
1422 dissect_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);
1424 static const true_false_string pfcp_id_predef_dynamic_tfs = {
1425 "Predefined by UP",
1426 "Dynamic by CP",
1429 #define PFCP_MSG_RESERVED_0 0
1431 #define PFCP_MSG_HEARTBEAT_REQUEST 1
1432 #define PFCP_MSG_HEARTBEAT_RESPONSE 2
1433 #define PFCP_MSG_PFD_MANAGEMENT_REQUEST 3
1434 #define PFCP_MSG_PFD_MANAGEMENT_RESPONSE 4
1435 #define PFCP_MSG_ASSOCIATION_SETUP_REQUEST 5
1436 #define PFCP_MSG_ASSOCIATION_SETUP_RESPONSE 6
1437 #define PFCP_MSG_ASSOCIATION_UPDATE_REQUEST 7
1438 #define PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE 8
1439 #define PFCP_MSG_ASSOCIATION_RELEASE_REQUEST 9
1440 #define PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE 10
1441 #define PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE 11
1442 #define PFCP_MSG_NODE_REPORT_REQEUST 12
1443 #define PFCP_MSG_NODE_REPORT_RERESPONSE 13
1444 #define PFCP_MSG_SESSION_SET_DELETION_REQUEST 14
1445 #define PFCP_MSG_SESSION_SET_DELETION_RESPONSE 15
1446 #define PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST 16
1447 #define PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE 17
1448 #define PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST 50
1449 #define PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE 51
1450 #define PFCP_MSG_SESSION_MODIFICATION_REQUEST 52
1451 #define PFCP_MSG_SESSION_MODIFICATION_RESPONSE 53
1452 #define PFCP_MSG_SESSION_DELETION_REQUEST 54
1453 #define PFCP_MSG_SESSION_DELETION_RESPONSE 55
1454 #define PFCP_MSG_SESSION_REPORT_REQUEST 56
1455 #define PFCP_MSG_SESSION_REPORT_RESPONSE 57
1457 static const value_string pfcp_message_type[] = {
1458 {PFCP_MSG_RESERVED_0, "Reserved"},
1459 /* PFCP Node related messages */
1461 { PFCP_MSG_HEARTBEAT_REQUEST, "PFCP Heartbeat Request"},
1462 { PFCP_MSG_HEARTBEAT_RESPONSE, "PFCP Heartbeat Response"},
1463 { PFCP_MSG_PFD_MANAGEMENT_REQUEST, "PFCP PFD Management Request"},
1464 { PFCP_MSG_PFD_MANAGEMENT_RESPONSE, "PFCP PFD Management Response"},
1465 { PFCP_MSG_ASSOCIATION_SETUP_REQUEST, "PFCP Association Setup Request"},
1466 { PFCP_MSG_ASSOCIATION_SETUP_RESPONSE, "PFCP Association Setup Response"},
1467 { PFCP_MSG_ASSOCIATION_UPDATE_REQUEST, "PFCP Association Update Request"},
1468 { PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE, "PFCP Association Update Response"},
1469 { PFCP_MSG_ASSOCIATION_RELEASE_REQUEST, "PFCP Association Release Request"},
1470 { PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE, "PFCP Association Release Response"},
1471 { PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE, "PFCP Version Not Supported Response"},
1472 { PFCP_MSG_NODE_REPORT_REQEUST, "PFCP Node Report Request"},
1473 { PFCP_MSG_NODE_REPORT_RERESPONSE, "PFCP Node Report Response"},
1474 { PFCP_MSG_SESSION_SET_DELETION_REQUEST, "PFCP Session Set Deletion Request"},
1475 { PFCP_MSG_SESSION_SET_DELETION_RESPONSE, "PFCP Session Set Deletion Response"},
1476 { PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST, "PFCP Session Set Modification Request"},
1477 { PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE, "PFCP Session Set Modification Response"},
1478 //18 to 49 For future use
1479 //PFCP Session related messages
1480 { PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST, "PFCP Session Establishment Request"},
1481 { PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE, "PFCP Session Establishment Response"},
1482 { PFCP_MSG_SESSION_MODIFICATION_REQUEST, "PFCP Session Modification Request"},
1483 { PFCP_MSG_SESSION_MODIFICATION_RESPONSE, "PFCP Session Modification Response"},
1484 { PFCP_MSG_SESSION_DELETION_REQUEST, "PFCP Session Deletion Request"},
1485 { PFCP_MSG_SESSION_DELETION_RESPONSE, "PFCP Session Deletion Response"},
1486 { PFCP_MSG_SESSION_REPORT_REQUEST, "PFCP Session Report Request"},
1487 { PFCP_MSG_SESSION_REPORT_RESPONSE, "PFCP Session Report Response"},
1488 //58 to 99 For future use
1489 //Other messages
1490 //100 to 255 For future use
1491 {0, NULL}
1493 static value_string_ext pfcp_message_type_ext = VALUE_STRING_EXT_INIT(pfcp_message_type);
1495 /* 8.1.2 Information Element Types */
1496 #define PFCP_IE_ID_CREATE_PDR 1
1497 #define PFCP_IE_ID_PDI 2
1498 #define PFCP_IE_CREATE_FAR 3
1499 #define PFCP_IE_FORWARDING_PARAMETERS 4
1500 #define PFCP_IE_DUPLICATING_PARAMETERS 5
1501 #define PFCP_IE_CREATE_URR 6
1502 #define PFCP_IE_CREATE_QER 7
1503 #define PFCP_IE_CREATED_PDR 8
1504 #define PFCP_IE_UPDATE_PDR 9
1505 #define PFCP_IE_UPDATE_FAR 10
1506 #define PFCP_IE_UPD_FORWARDING_PARAM 11
1507 #define PFCP_IE_UPDATE_BAR 12
1508 #define PFCP_IE_UPDATE_URR 13
1509 #define PFCP_IE_UPDATE_QER 14
1510 #define PFCP_IE_REMOVE_PDR 15
1511 #define PFCP_IE_REMOVE_FAR 16
1512 #define PFCP_IE_REMOVE_URR 17
1513 #define PFCP_IE_REMOVE_QER 18
1515 #define PFCP_IE_LOAD_CONTROL_INFORMATION 51
1516 #define PFCP_IE_OVERLOAD_CONTROL_INFORMATION 54
1517 #define PFCP_IE_APPLICATION_IDS_PFDS 58
1518 #define PFCP_IE_PFD_CONTEXT 59
1519 #define PFCP_IE_APPLICATION_DETECTION_INF 68
1520 #define PFCP_IE_QUERY_URR 77
1521 #define PFCP_IE_USAGE_REPORT_SMR 78
1522 #define PFCP_IE_USAGE_REPORT_SDR 79
1523 #define PFCP_IE_USAGE_REPORT_SRR 80
1524 #define PFCP_IE_DOWNLINK_DATA_REPORT 83
1525 #define PFCP_IE_CREATE_BAR 85
1526 #define PFCP_IE_UPDATE_BAR_SMR 86
1527 #define PFCP_IE_REMOVE_BAR 87
1528 #define PFCP_IE_ERROR_INDICATION_REPORT 99
1529 #define PFCP_IE_USER_PLANE_PATH_FAILURE_REPORT 102
1530 #define PFCP_IE_UPDATE_DUPLICATING_PARAMETERS 105
1531 #define PFCP_IE_AGGREGATED_URRS 118
1532 #define PFCP_IE_CREATE_TRAFFIC_ENDPOINT 127
1533 #define PFCP_IE_CREATED_TRAFFIC_ENDPOINT 128
1534 #define PFCP_IE_UPDATE_TRAFFIC_ENDPOINT 129
1535 #define PFCP_IE_REMOVE_TRAFFIC_ENDPOINT 130
1536 #define PFCP_IE_ETHERNET_PACKET_FILTER 132
1537 #define PFCP_IE_ETHERNET_TRAFFIC_INFORMATION 143
1538 #define PFCP_IE_ADDITIONAL_MONITORING_TIME 147
1539 #define PFCP_IE_EVENT_INFORMATION 148
1540 #define PFCP_IE_EVENT_REPORTING 149
1541 #define PFCP_IE_CREATE_MAR 165
1542 #define PFCP_IE_ACCESS_FORWARDING_ACTION_INORMATION_1 166
1543 #define PFCP_IE_ACCESS_FORWARDING_ACTION_INORMATION_2 167
1544 #define PFCP_IE_REMOVE_MAR 168
1545 #define PFCP_IE_UPDATE_MAR 169
1546 #define PFCP_IE_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_1 175
1547 #define PFCP_IE_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_2 176
1548 #define PFCP_IE_PFCP_SESSION_RETENTION_INFORMATION_WITHIN_ASSOCIATION_SETUP_REQUEST 183
1549 #define PFCP_IE_USER_PLANE_PATH_RECOVERY_REPORT 187
1550 #define PFCP_IE_IP_MULTICAST_ADDRESSING_INFO 189
1551 #define PFCP_IE_JOIN_IP_MULTICAST_INFORMATION 189
1552 #define PFCP_IE_LEAVE_IP_MULTICAST_INFORMATION 190
1553 #define PFCP_IE_CREATED_BRIDGE_INFO_FOR_TSC 195
1554 #define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_MODIFICATION_REQUEST 199
1555 #define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_MODIFICATION_RESPONSE 200
1556 #define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_REPORT_REQUEST 201
1557 #define PFCP_IE_CLOCK_DRIFT_CONTROL_INFORMATION 203
1558 #define PFCP_IE_CLOCK_DRIFT_REPORT 205
1559 #define PFCP_IE_REMOVE_SRR 211
1560 #define PFCP_IE_CREATE_SRR 212
1561 #define PFCP_IE_UPDATE_SRR 213
1562 #define PFCP_IE_SESSION_REPORT 214
1563 #define PFCP_IE_ACCESS_AVAILABILITY_CONTROL_INFORMATION 216
1564 #define PFCP_IE_ACCESS_AVAILABILITY_REPORT 218
1565 #define PFCP_IE_PROVICE_ATSSS_CONTROL_INFORMATION 220
1566 #define PFCP_IE_ATSSS_CONTROl_PARAMETERS 221
1567 #define PFCP_IE_MPTCP_PARAMETERS 225
1568 #define PFCP_IE_ATSSS_LL_PARAMETERS 226
1569 #define PFCP_IE_PMF_PARAMETERS 227
1570 #define PFCP_IE_UE_IP_ADDRESS_POOL_INFORMATION 233
1571 #define PFCP_IE_GTP_U_PATH_QOS_CONTROL_INFORMATION 238
1572 #define PFCP_IE_GTP_U_PATH_QOS_REPORT 239
1573 #define PFCP_IE_QOS_INFORMATION_IN_GTP_U_PATH_QOS_REPORT 240
1574 #define PFCP_IE_QOS_MONITORING_PER_QOS_FLOW_CONTROL_INFORMATION 242
1575 #define PFCP_IE_QOS_MONITORING_REPORT 247
1576 #define PFCP_IE_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PFCP_SESSION_DELETION_RESPONSE 252
1577 #define PCFP_IE_ETHERNET_CONTEXT_INFORMATION_WITHIN_PFCP_SESSION_MODIFICATION_REQUEST 254
1578 #define PFCP_IE_REDUNDANT_TRANSMISSION_DETECTION_PARAMETERS_IE_IN_PDI 255
1579 #define PFCP_IE_UPDATED_PDR_IE_WITHIN_PFCP_SESSION_MODIFICATION_RESPONSE 256
1580 #define PFCP_IE_PROVIDE_RDS_CONFIGURATION_INFORMATION_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 261
1581 #define PFCP_IE_QUERY_PACKET_RATE_STATUS_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 263
1582 #define PFCP_IE_QUERY_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_RESPONSE 264
1583 #define PFCP_IE_UE_IP_ADDRESS_USAGE_INFORMATION_IE_WITHIN_PFCP_ASSOCIATION_UPDATE_REQUEST 267
1584 #define PFCP_IE_REDUNDANT_TRANSMISSION_FORWARD_PARAMETERS_IE_IN_FAR 270
1585 #define PFCP_IE_TRANSPORT_DELAY_REPORTING 271
1586 #define PFCP_IE_PARTIAL_FAILURE_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE 272
1587 #define PFCP_IE_PARTIAL_FAILURE_INFORMATION_WITHIN_PFCP_SESSION_MODIFICATION_RESPONSE 273
1588 #define PFCP_IE_L2TP_TUNNEL_INFORMATION 276
1589 #define PFCP_IE_L2TP_SESSION_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_REQUEST 277
1590 #define PFCP_IE_L2TP_SESSION_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE 279
1591 #define PFCP_IE_PFCP_SESSION_CHANGE_INFO 290
1592 #define PFCP_IE_DIRECT_REPORTING_INFORMATION 295
1593 #define PFCP_IE_MBS_SESSION_N4MB_CONTROL_INFORMATION 300
1594 #define PFCP_IE_MBS_MULTICAST_PARAMETERS 301
1595 #define PFCP_IE_ADD_MBS_UNICAST_PARAMETERS_IE_IN_CREATE_FAR 302
1596 #define PFCP_IE_MBS_SESSION_N4MB_INFORMATION 300
1597 #define PFCP_IE_REMOVE_MBS_UNICAST_PARAMETERS_IE_IN_UPDATE_FAR 304
1598 #define PFCP_IE_MBS_SESSION_N4_CONTROl_INFORMATION_IE_WITHIN_PFCP_SESSION_ESTABLISHMENT_REQUEST 310
1599 #define PFCP_IE_MBS_SESSION_N4_CONTROl_INFORMATION_IE_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE 311
1600 #define PFCP_IE_PEER_UP_REPORT_IE_WITING_PFCP_NODE_REPORT_REQUEST 315
1601 #define PFCP_IE_DSCP_TO_PPI_CONTROL_INFORMATION_IE_WITIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 316
1603 static const value_string pfcp_ie_type[] = {
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}
1956 static value_string_ext pfcp_ie_type_ext = VALUE_STRING_EXT_INIT(pfcp_ie_type);
1958 /* PFCP Session funcs*/
1959 static unsigned
1960 pfcp_info_hash(gconstpointer key)
1962 const pfcp_info_t *k = (const pfcp_info_t *)key;
1964 /* The SEID is likely unique, so just use it. */
1965 return g_int_hash(&k->seid);
1968 static gboolean
1969 pfcp_info_equal(gconstpointer key1, gconstpointer key2)
1971 const pfcp_info_t *a = (const pfcp_info_t *)key1;
1972 const pfcp_info_t *b = (const pfcp_info_t *)key2;
1974 return (a->seid == b->seid && (cmp_address(&a->addr, &b->addr) == 0));
1977 static uint32_t
1978 pfcp_get_frame(address ip, uint64_t seid, uint32_t *frame) {
1979 pfcp_info_t info;
1980 uint32_t *value;
1982 info.seid = seid;
1983 copy_address_shallow(&info.addr, &ip);
1984 value = wmem_map_lookup(pfcp_frame_map, &info);
1985 if (value != NULL) {
1986 *frame = GPOINTER_TO_UINT(value);
1987 return 1;
1989 return 0;
1992 static gboolean
1993 pfcp_frame_equal(void *key _U_, void *value, void *data){
1994 uint32_t frame = GPOINTER_TO_UINT(data);
1996 return (GPOINTER_TO_UINT(value) == frame);
1999 static void
2000 pfcp_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.
2007 wmem_map_foreach_remove(pfcp_frame_map, pfcp_frame_equal, GUINT_TO_POINTER(f));
2011 static void
2012 pfcp_add_session(uint32_t frame, uint32_t session) {
2013 g_hash_table_insert(pfcp_session_table, GUINT_TO_POINTER(frame), GUINT_TO_POINTER(session));
2017 static bool
2018 pfcp_seid_exists(uint64_t seid, wmem_list_t *seid_list) {
2019 wmem_list_frame_t *elem;
2020 uint32_t *info;
2021 bool found;
2022 found = false;
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);
2029 return found;
2032 static bool
2033 pfcp_ip_exists(address ip, wmem_list_t *ip_list) {
2034 wmem_list_frame_t *elem;
2035 address *info;
2036 bool found;
2037 found = false;
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);
2044 return found;
2047 static void
2048 pfcp_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;
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);
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)));
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) == 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));
2083 wmem_map_insert(pfcp_frame_map, pfcp_info, GUINT_TO_POINTER(frame));
2084 elem_seid = wmem_list_frame_next(elem_seid);
2086 elem_ip = wmem_list_frame_next(elem_ip);
2090 static bool
2091 pfcp_is_cause_accepted(uint8_t cause) {
2092 return cause == 1;
2095 /* Data structure attached to a conversation,
2096 * to keep track of request/response-pairs
2098 typedef struct pfcp_conv_info_t {
2099 wmem_map_t *unmatched;
2100 wmem_map_t *matched;
2101 } pfcp_conv_info_t;
2103 /* structure used to track responses to requests using sequence number */
2104 typedef struct pfcp_msg_hash_entry {
2105 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;
2113 static unsigned
2114 pfcp_sn_hash(gconstpointer k)
2116 const pfcp_msg_hash_t *key = (const pfcp_msg_hash_t *)k;
2118 return key->seq_nr;
2121 static gboolean
2122 pfcp_sn_equal_matched(gconstpointer k1, gconstpointer k2)
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;
2127 if (key1->req_frame && key2->req_frame && (key1->req_frame != key2->req_frame)) {
2128 return FALSE;
2131 if (key1->rep_frame && key2->rep_frame && (key1->rep_frame != key2->rep_frame)) {
2132 return FALSE;
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;
2143 return TRUE;
2145 return FALSE;
2148 static gboolean
2149 pfcp_sn_equal_unmatched(gconstpointer k1, gconstpointer k2)
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;
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;
2162 return TRUE;
2164 return FALSE;
2167 static GHashTable *pfcp_stat_msg_idx_hash;
2169 static void
2170 pfcp_stat_init(struct register_srt* srt _U_, GArray*srt_array)
2172 if (pfcp_stat_msg_idx_hash != NULL) {
2173 g_hash_table_destroy(pfcp_stat_msg_idx_hash);
2175 pfcp_stat_msg_idx_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
2177 init_srt_table("PFCP Requests", NULL, srt_array, 0, NULL, NULL, NULL);
2180 static tap_packet_status
2181 pfcp_stat_packet(void *pss, packet_info *pinfo, epan_dissect_t *edt _U_, const void *prv, tap_flags_t flags _U_)
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;
2189 /* We are only interested in matched reply packets. */
2190 if (pcrp->is_request) {
2191 return TAP_PACKET_DONT_REDRAW;
2193 if (!pcrp->req_frame) {
2194 return TAP_PACKET_DONT_REDRAW;
2197 pfcp_srt_table = g_array_index(srt_data->srt_array, srt_stat_table*, i);
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.)
2205 idx = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_stat_msg_idx_hash, GUINT_TO_POINTER(pcrp->msgtype)));
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), GUINT_TO_POINTER(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;
2216 add_srt_table_data(pfcp_srt_table, idx, &pcrp->req_time, pinfo);
2218 return TAP_PACKET_REDRAW;
2221 static void
2222 pfcp_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_, address last_ip _U_)
2224 uint32_t session, frame_seid_cp;
2225 proto_item *it;
2227 /* PFCP session */
2228 if (tree) {
2229 session = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_session_table, GUINT_TO_POINTER(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);
2236 if (!PINFO_FD_VISITED(pinfo)) {
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)));
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.
2249 if ((pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST && pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE &&
2250 pfcp_hdr->message != PFCP_MSG_SESSION_MODIFICATION_REQUEST && pfcp_hdr->message != PFCP_MSG_SESSION_MODIFICATION_RESPONSE &&
2251 pfcp_hdr->message != PFCP_MSG_SESSION_DELETION_REQUEST && pfcp_hdr->message != PFCP_MSG_SESSION_DELETION_RESPONSE &&
2252 pfcp_hdr->message != PFCP_MSG_SESSION_REPORT_REQUEST && pfcp_hdr->message != PFCP_MSG_SESSION_REPORT_RESPONSE)) {
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);
2258 if (pfcp_hdr->message == PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST){
2259 /* If SEREQ and not already in the list then we create a new session*/
2260 pfcp_add_session(pinfo->num, pfcp_session_count++);
2262 else if (pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE) {
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)));
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);
2278 static void
2279 dissect_pfcp_reserved(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2281 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_reserved, tvb, 0, length);
2284 static int dissect_pfcp_string_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int hf)
2286 char* string_value = NULL;
2287 proto_tree_add_item_ret_display_string(tree, hf, tvb, 0, -1, ENC_ASCII, pinfo->pool, &string_value);
2288 proto_item_append_text(proto_tree_get_parent(tree), " : %s", string_value);
2290 return tvb_reported_length(tvb);
2293 /* Functions for C-Tag and S-TAG
2294 * See 8.2.94 and 8.2.95
2297 /* From Tables G-2,3 of IEEE standard 802.1Q-2005 (and I-2,3,7 of 2011 and 2015 revisions) */
2298 static 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 }
2310 static const true_false_string tfs_eligible_ineligible = {
2311 "Eligible",
2312 "Ineligible"
2315 static int decode_pfcp_c_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, int offset)
2317 static const crumb_spec_t pfcp_c_tag_cvid_crumbs[] = {
2318 { 0, 4 },
2319 { 8, 8 },
2320 { 0, 0 }
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
2330 /* Octet 5 Spare VID DEI PCP */
2331 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_c_tag_flags, ENC_BIG_ENDIAN);
2332 offset += 1;
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);
2338 proto_tree_add_item(tree, hf_pfcp_c_tag_dei_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
2339 proto_tree_add_item(tree, hf_pfcp_c_tag_pcp_value, tvb, offset, 1, ENC_BIG_ENDIAN);
2340 offset += 2;
2342 return offset;
2345 static int decode_pfcp_s_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset)
2347 static const crumb_spec_t pfcp_s_tag_svid_crumbs[] = {
2348 { 0, 4 },
2349 { 8, 8 },
2350 { 0, 0 }
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
2360 /* Octet 5 Spare VID DEI PCP */
2361 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_s_tag_flags, ENC_BIG_ENDIAN);
2362 offset += 1;
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);
2368 proto_tree_add_item(tree, hf_pfcp_s_tag_dei_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
2369 proto_tree_add_item(tree, hf_pfcp_s_tag_pcp_value, tvb, offset, 1, ENC_BIG_ENDIAN);
2370 offset += 2;
2372 return offset;
2376 * 8.2.1 Cause
2378 static const value_string pfcp_cause_vals[] = {
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}
2415 static void
2416 dissect_pfcp_cause(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args)
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_ENDIAN, &value);
2421 if (g_pfcp_session) {
2422 args->last_cause = (uint8_t)value;
2424 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_cause_vals, "Unknown"));
2428 * 8.2.2 Source Interface
2430 static const value_string pfcp_source_interface_vals[] = {
2432 { 0, "Access" },
2433 { 1, "Core" },
2434 { 2, "SGi-LAN/N6-LAN" },
2435 { 3, "CP-function" },
2436 { 4, "5G VN Internal" },
2437 { 0, NULL }
2439 static int
2440 decode_pfcp_source_interface(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, int offset)
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_ENDIAN);
2445 proto_tree_add_item_ret_uint(tree, hf_pfcp_source_interface, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
2446 offset += 1;
2448 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_source_interface_vals, "Unknown"));
2450 return offset;
2453 static void
2454 dissect_pfcp_source_interface(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2456 int offset = 0;
2458 offset = decode_pfcp_source_interface(tvb, pinfo, tree, item, offset);
2460 if (offset < length) {
2461 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2467 * 8.2.3 F-TEID
2469 static void
2470 dissect_pfcp_f_teid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2472 int offset = 0;
2473 uint64_t fteid_flags_val;
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
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_ENDIAN, &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.
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_NA);
2504 offset += 1;
2506 } else {
2508 /* Octet 6 to 9 TEID */
2509 proto_tree_add_item(tree, hf_pfcp_f_teid_teid, tvb, offset, 4, ENC_BIG_ENDIAN);
2510 proto_item_append_text(item, "TEID: 0x%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 4));
2511 offset += 4;
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_ENDIAN);
2516 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
2517 offset += 4;
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_NA);
2522 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
2523 offset += 16;
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);
2530 if (offset < length) {
2531 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2536 * 8.2.4 Network Instance
2538 static int
2539 decode_pfcp_network_instance(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, int offset, int length)
2542 int name_len;
2544 if (length > 0) {
2545 name_len = tvb_get_uint8(tvb, offset);
2546 if (name_len < 0x41) {
2547 /* APN */
2548 uint8_t *apn = NULL;
2550 name_len = tvb_get_uint8(tvb, offset);
2552 if (name_len < 0x20) {
2553 apn = tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_APN_STR);
2554 } else {
2555 apn = tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_ASCII);
2557 proto_tree_add_string(tree, hf_pfcp_network_instance, tvb, offset, length, apn);
2558 proto_item_append_text(item, "%s", apn);
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_ASCII | ENC_NA, pinfo->pool, &string_value);
2564 proto_item_append_text(item, "%s", string_value);
2568 return offset + length;
2570 static void
2571 dissect_pfcp_network_instance(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item , uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2573 int offset = 0;
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)
2580 /* Test for Printable character or length indicator(APN), assume first character of Domain name >= 0x41 */
2582 decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, length);
2587 * 8.2.5 SDF Filter
2589 static void
2590 dissect_pfcp_sdf_filter(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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;
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
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_ENDIAN, &flags_val);
2608 offset += 1;
2609 /* Octet 6 Spare*/
2610 proto_tree_add_item(tree, hf_pfcp_spare, tvb, offset, 1, ENC_BIG_ENDIAN);
2611 offset += 1;
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
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_ENDIAN, &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
2625 proto_tree_add_item(flow_desc_tree, hf_pfcp_flow_desc, tvb, offset, fd_length, ENC_ASCII);
2626 offset += fd_length;
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
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_ENDIAN);
2635 offset += 1;
2636 proto_tree_add_item(tos_tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN);
2637 offset += 1;
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
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_ENDIAN);
2647 offset += 4;
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_ENDIAN);
2656 proto_tree_add_item(flow_label_tree, hf_pfcp_flow_label, tvb, offset, 3, ENC_BIG_ENDIAN);
2657 offset += 3;
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_ENDIAN);
2664 offset += 4;
2667 if (offset < length) {
2668 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2672 * 8.2.6 Application ID
2674 static void
2675 dissect_pfcp_application_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2677 int offset = 0;
2679 /* Octet 5 to (n+4) Application Identifier
2680 * The Application Identifier shall be encoded as an OctetString (see 3GPP TS 29.212)
2682 if (tvb_ascii_isprint(tvb, offset, length))
2684 const uint8_t* string_value;
2685 proto_tree_add_item_ret_string(tree, hf_pfcp_application_id_str, tvb, offset, length, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
2686 proto_item_append_text(item, "%s", string_value);
2688 else
2690 proto_tree_add_item(tree, hf_pfcp_application_id, tvb, offset, length, ENC_NA);
2694 * 8.2.7 Gate Status
2696 static const value_string pfcp_gate_status_vals[] = {
2697 { 0, "OPEN" },
2698 { 1, "CLOSED" },
2699 { 0, NULL }
2703 static void
2704 dissect_pfcp_gate_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2706 int offset = 0;
2708 static int * const pfcp_gate_status_flags[] = {
2709 &hf_pfcp_gate_status_b3b2_ulgate,
2710 &hf_pfcp_gate_status_b0b1_dlgate,
2711 NULL
2713 /* Octet 5 Spare UL Gate DL Gate */
2714 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_gate_status_flags, ENC_BIG_ENDIAN);
2715 offset += 1;
2717 if (offset < length) {
2718 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2725 * 8.2.8 MBR
2727 static void
2728 dissect_pfcp_mbr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2730 int offset = 0;
2731 int len1 = (length != 10) ? length/2 : 5;
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);
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
2741 proto_tree_add_item(tree, hf_pfcp_ul_mbr, tvb, offset, len1, ENC_BIG_ENDIAN);
2742 offset += len1;
2744 /* 10 to 14 DL MBR */
2745 proto_tree_add_item(tree, hf_pfcp_dl_mbr, tvb, offset, len1, ENC_BIG_ENDIAN);
2746 offset += len1;
2748 if (offset < length) {
2749 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2755 * 8.2.9 GBR
2757 static void
2758 dissect_pfcp_gbr(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2760 int offset = 0;
2761 int len1 = (length != 10) ? length/2 : 5;
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);
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
2771 proto_tree_add_item(tree, hf_pfcp_ul_gbr, tvb, offset, len1, ENC_BIG_ENDIAN);
2772 offset += len1;
2774 /* 10 to 14 DL GBR */
2775 proto_tree_add_item(tree, hf_pfcp_dl_gbr, tvb, offset, len1, ENC_BIG_ENDIAN);
2776 offset += len1;
2778 if (offset < length) {
2779 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2785 * 8.2.10 QER Correlation ID
2787 static void
2788 dissect_pfcp_qer_correlation_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
2794 offset += 4;
2796 proto_item_append_text(item, "%u", value);
2798 if (offset < length) {
2799 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2804 * 8.2.11 Precedence
2806 static void
2807 dissect_pfcp_precedence(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
2813 offset += 4;
2815 proto_item_append_text(item, "%u", value);
2817 if (offset < length) {
2818 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2823 * 8.2.12 Transport Level Marking
2825 static void
2826 dissect_pfcp_transport_level_marking(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2828 int offset = 0;
2829 proto_item *dscp_it;
2830 const char *dscp_str;
2831 uint32_t tos, mask;
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
2837 proto_tree_add_item_ret_uint(tree, hf_pfcp_traffic_class, tvb, offset, 1, ENC_BIG_ENDIAN, &tos);
2838 offset += 1;
2839 proto_tree_add_item_ret_uint(tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN, &mask);
2840 offset += 1;
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);
2847 if (offset < length) {
2848 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2854 * 8.2.13 Volume Threshold
2856 static void
2857 dissect_pfcp_volume_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2859 int offset = 0;
2860 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
2871 offset += 1;
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.
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
2880 proto_tree_add_item(tree, hf_pfcp_volume_threshold_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
2881 offset += 8;
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
2887 proto_tree_add_item(tree, hf_pfcp_volume_threshold_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
2888 offset += 8;
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
2894 proto_tree_add_item(tree, hf_pfcp_volume_threshold_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
2895 offset += 8;
2898 if (offset < length) {
2899 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2903 * 8.2.14 Time Threshold
2905 static void
2906 dissect_pfcp_time_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2908 int offset = 0;
2909 unsigned value;
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.
2915 proto_tree_add_item_ret_uint(tree, hf_pfcp_time_threshold, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
2916 offset += 4;
2918 proto_item_append_text(item, "%u s", value);
2920 if (offset < length) {
2921 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2927 * 8.2.15 Monitoring Time
2929 static void
2930 dissect_pfcp_monitoring_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2932 char *time_str;
2933 int offset = 0;
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.
2939 proto_tree_add_item_ret_time_string(tree, hf_pfcp_monitoring_time, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
2940 proto_item_append_text(item, "%s", time_str);
2941 offset += 4;
2943 if (offset < length) {
2944 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2949 * 8.2.16 Subsequent Volume Threshold
2951 static void
2952 dissect_pfcp_subseq_volume_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
2954 int offset = 0;
2955 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
2966 offset += 1;
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.
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
2975 proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
2976 offset += 8;
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
2982 proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
2983 offset += 8;
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
2989 proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
2990 offset += 8;
2993 if (offset < length) {
2994 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
2999 * 8.2.17 Subsequent Time Threshold
3001 static void
3002 dissect_pfcp_subsequent_time_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
3008 offset += 4;
3010 proto_item_append_text(item, "%u s", value);
3012 if (offset < length) {
3013 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3017 * 8.2.18 Inactivity Detection Time
3019 static void
3020 dissect_pfcp_inactivity_detection_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
3026 offset += 4;
3028 proto_item_append_text(item, "%u s", value);
3030 if (offset < length) {
3031 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3036 * 8.2.19 Reporting Triggers
3038 static void
3039 dissect_pfcp_reporting_triggers(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3041 int offset = 0;
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
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_ENDIAN);
3056 offset++;
3058 if (offset == length) {
3059 return;
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
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_ENDIAN);
3075 offset++;
3077 if (offset == length) {
3078 return;
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
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_ENDIAN);
3089 offset++;
3091 if (offset == length) {
3092 return;
3096 if (offset < length) {
3097 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3103 * 8.2.20 Redirect Information
3105 static const value_string pfcp_redirect_address_type_vals[] = {
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 }
3119 static void
3120 dissect_pfcp_redirect_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3122 int offset = 0;
3123 uint32_t redirect_address_type, addr_len, other_addr_len;
3125 /* Octet Spare Redirect Address Type */
3126 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
3127 proto_tree_add_item_ret_uint(tree, hf_pfcp_redirect_address_type, tvb, offset, 1, ENC_BIG_ENDIAN, &redirect_address_type);
3128 offset++;
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_ENDIAN, &addr_len);
3134 offset+=2;
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_8 | ENC_NA);
3138 offset += addr_len;
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.
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_ENDIAN, &other_addr_len);
3147 offset+=2;
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_8 | ENC_NA);
3151 offset += other_addr_len;
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_ENDIAN);
3158 offset+=2;
3161 if (offset < length) {
3162 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3166 * 8.2.21 Report Type
3168 static void
3169 dissect_pfcp_report_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3171 int offset = 0;
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
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_ENDIAN);
3186 offset += 1;
3188 if (offset < length) {
3189 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3194 * 8.2.22 Offending IE
3196 static void
3197 dissect_pfcp_offending_ie(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
3203 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_ie_type, "Unknown"));
3207 * 8.2.23 Forwarding Policy
3209 static void
3210 dissect_pfcp_forwarding_policy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3212 int offset = 0;
3213 uint32_t id_len;
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_ENDIAN, &id_len);
3217 offset += 1;
3219 proto_tree_add_item(tree, hf_pfcp_forwarding_policy_id, tvb, offset, id_len, ENC_NA);
3220 offset += id_len;
3222 if (offset < length) {
3223 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3228 * 8.2.24 Destination Interface
3230 static const value_string pfcp_dst_interface_vals[] = {
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 }
3241 static int
3242 decode_pfcp_destination_interface(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, int offset, int length)
3244 uint32_t value;
3246 /* Octet 5 Spare Interface value*/
3247 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
3248 proto_tree_add_item_ret_uint(tree, hf_pfcp_dst_interface, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
3249 offset++;
3251 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_dst_interface_vals, "Unknown"));
3253 if (offset < length) {
3254 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3257 return length;
3259 static void
3260 dissect_pfcp_destination_interface(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3262 int offset = 0;
3264 decode_pfcp_destination_interface(tvb, pinfo, tree, item, offset, length);
3268 * 8.2.25 UP Function Features
3270 static void
3271 dissect_pfcp_up_function_features(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3273 int offset = 0;
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
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_ENDIAN);
3288 offset++;
3290 if (offset == length) {
3291 return;
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
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_ENDIAN);
3307 offset++;
3309 if (offset == length) {
3310 return;
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
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_ENDIAN);
3326 offset++;
3328 if (offset == length) {
3329 return;
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
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_ENDIAN);
3345 offset += 1;
3347 if (offset == length) {
3348 return;
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
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_ENDIAN);
3364 offset += 1;
3366 if (offset == length) {
3367 return;
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
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_ENDIAN);
3383 offset += 1;
3385 if (offset == length) {
3386 return;
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
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_ENDIAN);
3402 offset += 1;
3404 if (offset == length) {
3405 return;
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
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_ENDIAN);
3421 offset += 1;
3423 if (offset == length) {
3424 return;
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
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_ENDIAN);
3440 offset += 1;
3442 if (offset == length) {
3443 return;
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
3451 /* Octet 13 Spare MBSCH */
3452 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o14_flags, ENC_BIG_ENDIAN);
3453 offset += 1;
3455 if (offset == length) {
3456 return;
3458 if (offset < length) {
3459 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3464 * 8.2.26 Apply Action
3466 static void
3467 dissect_pfcp_apply_action(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3469 int offset = 0;
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
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_ENDIAN);
3484 offset += 1;
3486 if (offset == length) {
3487 return;
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
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_ENDIAN);
3501 offset += 1;
3503 if (offset < length) {
3504 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3509 * 8.2.27 Downlink Data Service Information
3511 static void
3512 dissect_pfcp_dl_data_service_inf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3514 int offset = 0;
3515 uint64_t flags;
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
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_ENDIAN, &flags);
3526 offset += 1;
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
3534 proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN);
3535 proto_tree_add_item(tree, hf_pfcp_paging_policy_indication, tvb, offset, 1, ENC_BIG_ENDIAN);
3536 offset++;
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.
3544 proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN);
3545 proto_tree_add_item(tree, hf_pfcp_qfi, tvb, offset, 1, ENC_NA);
3546 offset++;
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) {
3552 * DL Data Packet Size
3554 proto_tree_add_item(tree, hf_pfcp_dldatapacketsize, tvb, offset, 2, ENC_NA);
3555 offset += 2;
3558 if (offset < length) {
3559 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3564 * 8.2.28 Downlink Data Notification Delay
3566 static void
3567 dissect_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_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
3573 offset += 1;
3575 proto_item_append_text(item, "%u ms", value * 50);
3577 if (offset < length) {
3578 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3583 * 8.2.29 DL Buffering Duration
3585 static 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 }
3597 static void
3598 dissect_pfcp_dl_buffering_dur(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3600 int offset = 0;
3601 uint32_t unit, value;
3603 /* Octet 5 Timer unit Timer value */
3604 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN, &unit);
3605 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
3606 offset++;
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;
3637 if (offset < length) {
3638 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3644 * 8.2.30 DL Buffering Suggested Packet Count
3646 static void
3647 dissect_pfcp_dl_buffering_suggested_packet_count(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3649 uint32_t value;
3650 /* Octet 5 to n+4 Packet Count Value
3651 * The length shall be set to 1 or 2 octets.
3653 proto_tree_add_item_ret_uint(tree, hf_pfcp_packet_count, tvb, 0, length, ENC_BIG_ENDIAN, &value);
3655 proto_item_append_text(item, "%u", value);
3658 * 8.2.31 PFCPSMReq-Flags
3660 static void
3661 dissect_pfcp_pfcpsmreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3663 int offset = 0;
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
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_ENDIAN);
3678 offset += 1;
3680 if (offset < length) {
3681 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3686 * 8.2.32 PFCPSRRsp-Flags
3688 static void
3689 dissect_pfcp_pfcpsrrsp_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3691 int offset = 0;
3693 static int * const pfcp_pfcpsrrsp_flags[] = {
3694 &hf_pfcp_spare_b7_b1,
3695 &hf_pfcp_pfcpsrrsp_flags_b0_drobu,
3696 NULL
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_ENDIAN);
3700 offset += 1;
3702 if (offset < length) {
3703 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3709 * 8.2.33 Sequence Number
3711 static void
3712 dissect_pfcp_sequence_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
3718 proto_item_append_text(item, "%u", value);
3723 * 8.2.34 Metric
3725 static void
3726 dissect_pfcp_metric(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3728 uint32_t value;
3729 /* Octet 5 Metric */
3730 proto_tree_add_item_ret_uint(tree, hf_pfcp_metric, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
3732 proto_item_append_text(item, "%u", value);
3737 * 8.2.35 Timer
3739 static void
3740 dissect_pfcp_timer(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3742 int offset = 0;
3743 uint32_t unit, value;
3745 /* Octet 5 Timer unit Timer value */
3746 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN, &unit);
3747 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
3748 offset++;
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;
3779 if (offset < length) {
3780 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3786 * 8.2.36 PDR ID
3788 static int
3789 decode_pfcp_pdr_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, int offset, pfcp_session_args_t *args)
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_ENDIAN, &rule_id);
3794 offset += 2;
3796 proto_item_append_text(item, "%u", rule_id);
3798 if (args) {
3799 args->last_rule_ids.pdr = rule_id;
3802 return offset;
3805 static void
3806 dissect_pfcp_pdr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args)
3808 int offset = 0;
3810 offset = decode_pfcp_pdr_id(tvb, pinfo, tree, item, offset, args);
3812 if (offset < length) {
3813 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3817 * 8.2.37 F-SEID
3819 static void
3820 dissect_pfcp_f_seid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args)
3822 int offset = 0;
3823 uint64_t f_seid_flags;
3824 address *ipv4 = NULL, *ipv6 = NULL;
3825 uint64_t seid_cp, *seid;
3826 uint32_t *session;
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
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_ENDIAN, &f_seid_flags);
3841 offset += 1;
3843 if ((f_seid_flags & 0x3) == 0) {
3844 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
3845 return;
3847 /* Octet 6 to 13 SEID */
3848 proto_tree_add_item_ret_uint64(tree, hf_pfcp_seid, tvb, offset, 8, ENC_BIG_ENDIAN, &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);
3854 proto_tree_add_item(tree, hf_pfcp_f_seid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
3855 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
3856 set_address_tvb(ipv4, AT_IPv4, 4, tvb, offset);
3857 offset += 4;
3859 /* IPv6 address (if present)*/
3860 if ((f_seid_flags & 0x1) == 1) {
3861 ipv6 = wmem_new0(pinfo->pool, address);
3862 proto_tree_add_item(tree, hf_pfcp_f_seid_ipv6, tvb, offset, 16, ENC_NA);
3863 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
3864 set_address_tvb(ipv6, AT_IPv6, 16, tvb, offset);
3865 offset += 16;
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);
3875 *seid = seid_cp;
3876 wmem_list_prepend(args->seid_list, seid);
3878 if (ipv4 != NULL && !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);
3882 if (ipv6 != NULL && !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);
3889 if (offset < length) {
3890 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3895 * 8.2.38 Node ID
3898 static const value_string pfcp_node_id_type_vals[] = {
3900 { 0, "IPv4 address" },
3901 { 1, "IPv6 address" },
3902 { 2, "FQDN" },
3903 { 0, NULL }
3906 static int
3907 decode_pfcp_fqdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, int offset, uint16_t length)
3909 int name_len;
3910 uint8_t *fqdn = NULL;
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.
3915 if (length > 0)
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_STR);
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_ASCII);
3925 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, length - 1);
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;
3931 return offset;
3934 static int
3935 decode_pfcp_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, int offset, uint16_t length)
3937 uint32_t node_id_type;
3939 /* Octet 5 Spare Node ID Type*/
3940 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
3941 proto_tree_add_item_ret_uint(tree, hf_pfcp_node_id_type, tvb, offset, 1, ENC_BIG_ENDIAN, &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++;
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_ENDIAN);
3949 proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, 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_NA);
3955 proto_item_append_text(item, "%s", tvb_ip6_to_str(pinfo->pool, tvb, 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;
3965 return offset;
3967 static void
3968 dissect_pfcp_node_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
3970 int offset = 0;
3972 offset = decode_pfcp_address(tvb, pinfo, tree, item, offset, length);
3974 if (offset < length) {
3975 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
3980 * 8.2.39 PFD Contents
3982 static void
3983 dissect_pfcp_pfd_contents(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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;
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
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_ENDIAN, &flags);
4004 offset += 1;
4006 // Octet 6 Spare Octet
4007 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
4008 offset += 1;
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
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
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_ENDIAN, &len);
4019 offset += 2;
4021 /* (m+2) to p Flow Description */
4022 proto_tree_add_item(tree, hf_pfcp_flow_desc, tvb, offset, len, ENC_ASCII);
4023 offset += len;
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].
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_ENDIAN, &len);
4032 offset += 2;
4034 /* (q+2) to r URL */
4035 proto_tree_add_item(tree, hf_pfcp_url, tvb, offset, len, ENC_ASCII);
4036 offset += len;
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].
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_ENDIAN, &len);
4046 offset += 2;
4048 /* (s+2) to t Domain Name */
4049 proto_tree_add_item(tree, hf_pfcp_dn, tvb, offset, len, ENC_ASCII);
4050 offset += len;
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
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_ENDIAN, &len);
4059 offset += 2;
4061 /* (u+2) to v Custom PFD Content */
4062 proto_tree_add_item(tree, hf_pfcp_cp, tvb, offset, len, ENC_NA);
4063 offset += len;
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.
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].
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_ENDIAN, &len);
4076 offset += 2;
4078 /* (w+2) to x Domain Name Protocol */
4079 proto_tree_add_item(tree, hf_pfcp_dnp, tvb, offset, len, ENC_ASCII);
4080 offset += len;
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.
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_ENDIAN, &len);
4091 offset += 2;
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_ENDIAN, &flow_desc_len);
4100 offset += 2;
4101 dissected_len += 2;
4103 /* (y+4) to i Flow Description */
4104 proto_tree_add_item(afd_tree, hf_pfcp_flow_desc, tvb, offset, flow_desc_len, ENC_ASCII);
4105 offset += flow_desc_len;
4106 dissected_len += flow_desc_len;
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.
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_ENDIAN, &len);
4117 offset += 2;
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_ENDIAN, &url_len);
4126 dissected_len += 2;
4127 offset += 2;
4129 /* (a+4) to o URL */
4130 proto_tree_add_item(aurl_tree, hf_pfcp_url, tvb, offset, url_len, ENC_ASCII);
4131 dissected_len += url_len;
4132 offset += url_len;
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.
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_ENDIAN, &len);
4143 offset += 2;
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_ENDIAN, &domain_name_len);
4152 dissected_len += 2;
4153 offset += 2;
4155 /* (c+4) to pd Domain Name */
4156 proto_tree_add_item(adnp_tree, hf_pfcp_dn, tvb, offset, domain_name_len, ENC_ASCII);
4157 dissected_len += domain_name_len;
4158 offset += domain_name_len;
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_ENDIAN, &domain_name_prot_len);
4162 dissected_len += 2;
4163 offset += 2;
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_ASCII);
4167 dissected_len += domain_name_prot_len;
4168 offset += domain_name_prot_len;
4172 if (offset < length) {
4173 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4178 * 8.2.40 Measurement Method
4180 static void
4181 dissect_pfcp_measurement_method(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4183 int offset = 0;
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
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_ENDIAN);
4194 offset += 1;
4196 if (offset < length) {
4197 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4203 * 8.2.41 Usage Report Trigger
4205 static void
4206 dissect_pfcp_usage_report_trigger(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4208 int offset = 0;
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
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_ENDIAN);
4223 offset++;
4225 if (offset == length) {
4226 return;
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
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_ENDIAN);
4242 offset++;
4244 if (offset == length) {
4245 return;
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
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_ENDIAN);
4260 offset++;
4262 if (offset == length) {
4263 return;
4266 if (offset < length) {
4267 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4273 * 8.2.42 Measurement Period
4275 static void
4276 dissect_pfcp_measurement_period(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
4282 offset += 4;
4284 proto_item_append_text(item, "%u", value);
4286 if (offset < length) {
4287 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4292 * 8.2.43 Fully qualified PDN Connection Set Identifier (FQ-CSID)
4294 static const value_string pfcp_fq_csid_node_id_type_vals[] = {
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 }
4302 static const value_string pfcp_fq_csid_node_type_vals[] = {
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 }
4313 static void
4314 dissect_pfcp_fq_csid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4316 int offset = 0;
4317 uint32_t node_id_type, num_csid;
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_ENDIAN, &node_id_type);
4321 proto_tree_add_item_ret_uint(tree, hf_pfcp_num_csid, tvb, offset, 1, ENC_BIG_ENDIAN, &num_csid);
4322 offset++;
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_ENDIAN);
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_NA);
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
4341 proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_mcc_mnc, tvb, offset, 4, ENC_BIG_ENDIAN);
4342 proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_int, tvb, offset, 4, ENC_BIG_ENDIAN);
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;
4350 while (num_csid > 0) {
4351 proto_tree_add_item(tree, hf_pfcp_fq_csid, tvb, offset, 2, ENC_BIG_ENDIAN);
4352 offset += 2;
4353 num_csid--;
4356 if (offset < length) {
4357 proto_tree_add_item(tree, hf_pfcp_spare_b7_b4, tvb, offset, 1, ENC_BIG_ENDIAN);
4358 proto_tree_add_item(tree, hf_pfcp_fq_csid_node_type, tvb, offset, 1, ENC_BIG_ENDIAN);
4359 offset++;
4362 if (offset < length) {
4363 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4368 * 8.2.44 Volume Measurement
4370 static void
4371 dissect_pfcp_volume_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4373 int offset = 0;
4374 uint64_t flags;
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
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_ENDIAN, &flags);
4388 offset += 1;
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_ENDIAN);
4394 offset += 8;
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_ENDIAN);
4400 offset += 8;
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_ENDIAN);
4406 offset += 8;
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_ENDIAN);
4412 offset += 8;
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_ENDIAN);
4418 offset += 8;
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_ENDIAN);
4424 offset += 8;
4427 if (offset < length) {
4428 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4433 * 8.2.45 Duration Measurement
4435 static void
4436 dissect_pfcp_duration_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
4442 offset += 4;
4444 proto_item_append_text(item, "%u s", value);
4446 if (offset < length) {
4447 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4451 * 8.2.46 Time of First Packet
4453 static void
4454 dissect_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_, pfcp_session_args_t *args _U_)
4456 int offset = 0;
4457 char *time_str;
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
4463 proto_tree_add_item_ret_time_string(tree, hf_pfcp_time_of_first_packet, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
4464 proto_item_append_text(item, "%s", time_str);
4465 offset += 4;
4467 if (offset < length) {
4468 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4472 * 8.2.47 Time of Last Packet
4474 static void
4475 dissect_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_, pfcp_session_args_t *args _U_)
4477 int offset = 0;
4478 char *time_str;
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
4484 proto_tree_add_item_ret_time_string(tree, hf_pfcp_time_of_last_packet, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
4485 proto_item_append_text(item, "%s", time_str);
4486 offset += 4;
4488 if (offset < length) {
4489 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4493 * 8.2.48 Quota Holding Time
4495 static void
4496 dissect_pfcp_quota_holding_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
4503 proto_tree_add_item_ret_uint(tree, hf_pfcp_quota_holding_time, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
4504 offset += 4;
4506 proto_item_append_text(item, "%u s", value);
4508 if (offset < length) {
4509 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4515 * 8.2.49 Dropped DL Traffic Threshold
4517 static void
4518 dissect_pfcp_dropped_dl_traffic_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4520 int offset = 0;
4521 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
4530 offset += 1;
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
4536 proto_tree_add_item(tree, hf_pfcp_downlink_packets, tvb, offset, 8, ENC_BIG_ENDIAN);
4537 offset += 8;
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
4544 proto_tree_add_item(tree, hf_pfcp_bytes_downlink_data, tvb, offset, 8, ENC_BIG_ENDIAN);
4545 offset += 8;
4548 if (offset < length) {
4549 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4553 * 8.2.50 Volume Quota
4555 static void
4556 dissect_pfcp_volume_quota(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4558 int offset = 0;
4559 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
4570 offset += 1;
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.
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
4579 proto_tree_add_item(tree, hf_pfcp_volume_quota_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
4580 offset += 8;
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
4586 proto_tree_add_item(tree, hf_pfcp_volume_quota_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
4587 offset += 8;
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
4593 proto_tree_add_item(tree, hf_pfcp_volume_quota_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
4594 offset += 8;
4597 if (offset < length) {
4598 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4602 * 8.2.51 Time Quota
4604 static void
4605 dissect_pfcp_time_quota(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
4612 proto_tree_add_item_ret_uint(tree, hf_pfcp_time_quota, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
4613 offset += 4;
4615 proto_item_append_text(item, "%u s", value);
4617 if (offset < length) {
4618 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4623 * 8.2.52 Start Time
4625 static void
4626 dissect_pfcp_start_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4628 char *time_str;
4629 int offset = 0;
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].
4634 proto_tree_add_item_ret_time_string(tree, hf_pfcp_start_time, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
4635 proto_item_append_text(item, "%s", time_str);
4636 offset += 4;
4638 if (offset < length) {
4639 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4644 * 8.2.53 End Time
4646 static void
4647 dissect_pfcp_end_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4649 char *time_str;
4650 int offset = 0;
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].
4655 proto_tree_add_item_ret_time_string(tree, hf_pfcp_end_time, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
4656 proto_item_append_text(item, "%s", time_str);
4657 offset += 4;
4659 if (offset < length) {
4660 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4666 * 8.2.54 URR ID
4668 static int
4669 decode_pfcp_urr_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset, pfcp_session_args_t *args)
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
4677 urr_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN);
4679 proto_tree_add_item(tree, hf_pfcp_urr_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN);
4680 proto_tree_add_item(tree, hf_pfcp_urr_id, tvb, offset, 4, ENC_BIG_ENDIAN);
4681 offset += 4;
4683 proto_item_append_text(item, "%s %u",
4684 tfs_get_string((urr_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
4685 (urr_id & 0x7fffffff));
4687 if (args) {
4688 args->last_rule_ids.urr = urr_id;
4691 return offset;
4694 static void
4695 dissect_pfcp_urr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args)
4697 int offset = 0;
4699 offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, args);
4701 if (offset < length) {
4702 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4707 * 8.2.55 Linked URR ID IE
4709 static void
4710 dissect_pfcp_linked_urr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4712 int offset = 0;
4714 /* Octet 5 to 8 Linked URR ID value
4715 * The Linked URR ID value shall be encoded as an Unsigned32 binary integer value
4717 offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, NULL);
4719 if (offset < length) {
4720 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4725 * 8.2.56 Outer Header Creation
4727 static void
4728 dissect_pfcp_outer_header_creation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4730 int offset = 0;
4731 uint64_t value;
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
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_ENDIAN, &value);
4751 offset += 2;
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
4758 if ((value & 0x0100) || (value & 0x0200)) {
4759 proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_teid, tvb, offset, 4, ENC_BIG_ENDIAN);
4760 offset += 4;
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
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_ENDIAN);
4769 offset += 4;
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
4776 if ((value & 0x0200) || (value & 0x0800) || (value & 0x2000)) {
4777 proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_ipv6, tvb, offset, 16, ENC_NA);
4778 offset += 16;
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
4785 if ((value & 0x0400) || (value & 0x0800)) {
4786 proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_port, tvb, offset, 2, ENC_BIG_ENDIAN);
4787 offset += 2;
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
4794 if (value & 0x4000) {
4795 offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
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
4802 if (value & 0x8000) {
4803 offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
4806 if (offset < length) {
4807 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4812 * 8.2.57 BAR ID
4814 static int
4815 decode_pfcp_bar_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t offset, pfcp_session_args_t *args)
4817 uint32_t value;
4818 /* Octet 5 BAR ID value
4819 * The BAR ID value shall be encoded as a binary integer value
4821 proto_tree_add_item_ret_uint(tree, hf_pfcp_bar_id, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
4822 offset++;
4823 proto_item_append_text(item, "%u", value);
4825 if (args) {
4826 args->last_rule_ids.bar = value;
4829 return offset;
4831 static void
4832 dissect_pfcp_bar_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args)
4834 int offset = 0;
4836 offset = decode_pfcp_bar_id(tvb, pinfo, tree, item, offset, args);
4838 if (offset < length) {
4839 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4845 * 8.2.58 CP Function Features
4847 static void
4848 dissect_pfcp_cp_function_features(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4850 int offset = 0;
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
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_ENDIAN);
4865 offset++;
4867 if (offset == length) {
4868 return;
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
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_ENDIAN);
4879 offset++;
4881 if (offset < length) {
4882 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4888 * 8.2.59 Usage Information
4890 static void
4891 dissect_pfcp_usage_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4893 int offset = 0;
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
4903 /* Octet 5 Spare UBE UAE AFT BEF */
4904 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_information_flags, ENC_BIG_ENDIAN);
4905 offset += 1;
4907 if (offset < length) {
4908 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4914 * 8.2.60 Application Instance ID
4916 static void
4917 dissect_pfcp_application_instance_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4919 int offset = 0;
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)
4924 if (tvb_ascii_isprint(tvb, offset, length))
4926 const uint8_t* string_value;
4927 proto_tree_add_item_ret_string(tree, hf_pfcp_application_instance_id_str, tvb, offset, length, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
4928 proto_item_append_text(item, "%s", string_value);
4930 else
4932 proto_tree_add_item(tree, hf_pfcp_application_instance_id, tvb, offset, length, ENC_NA);
4937 * 8.2.61 Flow Information
4939 static 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 }
4947 static void
4948 dissect_pfcp_flow_inf(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN);
4954 proto_tree_add_item(tree, hf_pfcp_flow_dir, tvb, offset, 1, ENC_BIG_ENDIAN);
4955 offset++;
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_ENDIAN, &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
4964 proto_tree_add_item(tree, hf_pfcp_flow_desc, tvb, offset, len, ENC_ASCII);
4965 offset += len;
4967 if (offset < length) {
4968 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
4974 * 8.2.62 UE IP Address
4976 static const true_false_string pfcp_ue_ip_add_sd_flag_vals = {
4977 "Destination IP address",
4978 "Source IP address",
4981 static void
4982 dissect_pfcp_ue_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
4984 int offset = 0;
4985 uint64_t ue_ip_address_flags;
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
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_ENDIAN, &ue_ip_address_flags);
5000 offset += 1;
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_ENDIAN);
5005 offset += 4;
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_NA);
5010 offset += 16;
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_NA);
5015 offset += 1;
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_NA);
5020 offset += 1;
5023 if (offset < length) {
5024 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5029 * 8.2.63 Packet Rate
5031 static 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 }
5040 static void
5041 dissect_pfcp_packet_rate(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5043 int offset = 0;
5044 uint64_t flags;
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
5053 /* Octet 5 Spare DLPR ULPR */
5054 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_packet_rate_flags, ENC_BIG_ENDIAN, &flags);
5055 offset += 1;
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_ENDIAN);
5061 proto_tree_add_item(tree, hf_pfcp_ul_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
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_ENDIAN);
5065 offset += 2;
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_ENDIAN);
5071 proto_tree_add_item(tree, hf_pfcp_dl_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
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_ENDIAN);
5075 offset += 2;
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_ENDIAN);
5083 proto_tree_add_item(tree, hf_pfcp_a_ul_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
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_ENDIAN);
5087 offset += 2;
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_ENDIAN);
5093 proto_tree_add_item(tree, hf_pfcp_a_dl_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
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_ENDIAN);
5097 offset += 2;
5101 if (offset < length) {
5102 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5108 * 8.2.64 Outer Header Removal
5110 static 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 }
5123 static void
5124 dissect_pfcp_outer_hdr_rem(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5126 int offset = 0;
5127 uint32_t value;
5129 static int * const pfcp_gtpu_ext_hdr_del_flags[] = {
5130 &hf_pfcp_gtpu_ext_hdr_del_b0_pdu_sess_cont,
5131 NULL
5134 proto_tree_add_item_ret_uint(tree, hf_pfcp_out_hdr_desc, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
5135 offset++;
5136 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_out_hdr_desc_vals, "Unknown"));
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_ENDIAN);
5141 offset++;
5144 if (offset < length) {
5145 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5149 * 8.2.65 Recovery Time Stamp
5152 static void
5153 dissect_pfcp_recovery_time_stamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5155 char *time_str;
5156 int offset = 0;
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].
5161 proto_tree_add_item_ret_time_string(tree, hf_pfcp_recovery_time_stamp, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
5162 proto_item_append_text(item, "%s", time_str);
5163 offset += 4;
5165 if (offset < length) {
5166 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5171 * 8.2.66 DL Flow Level Marking
5173 static void
5174 dissect_pfcp_dl_flow_level_marking(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5176 int offset = 0;
5177 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
5187 offset += 1;
5189 /* Bit 1 - TTC (ToS/Traffic Class): If this bit is set to "1",
5190 * then the ToS/Traffic Class field shall be present
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
5198 proto_tree_add_item(tree, hf_pfcp_traffic_class, tvb, offset, 1, ENC_BIG_ENDIAN);
5199 offset += 1;
5200 proto_tree_add_item(tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN);
5201 offset += 1;
5203 /* SCI (Service Class Indicator): If this bit is set to "1",
5204 * then the Service Class Indicator field shall be present
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
5211 proto_tree_add_item(tree, hf_pfcp_sci, tvb, offset, 2, ENC_BIG_ENDIAN);
5212 offset += 2;
5215 if (offset < length) {
5216 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5222 * 8.2.67 Header Enrichment
5224 static const value_string pfcp_header_type_vals[] = {
5225 { 0, "HTTP" },
5226 { 0, NULL }
5229 static void
5230 dissect_pfcp_header_enrichment(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5232 int offset = 0;
5233 uint32_t len;
5235 /* Octet 5 Spare Header Type
5237 proto_tree_add_item(tree, hf_pfcp_spare_b7_b5, tvb, offset, 1, ENC_BIG_ENDIAN);
5238 proto_tree_add_item(tree, hf_pfcp_header_type, tvb, offset, 1, ENC_BIG_ENDIAN);
5239 offset++;
5241 /* 6 Length of Header Field Name */
5242 proto_tree_add_item_ret_uint(tree, hf_pfcp_hf_len, tvb, offset, 1, ENC_BIG_ENDIAN, &len);
5243 offset++;
5245 /* 7 to m Header Field Name
5246 * Header Field Name shall be encoded as an OctetString
5248 proto_tree_add_item(tree, hf_pfcp_hf_name, tvb, offset, len, ENC_NA);
5249 offset+= len;
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_ENDIAN, &len);
5253 offset++;
5255 /* (p+1) to q Header Field Value */
5256 proto_tree_add_item(tree, hf_pfcp_hf_val, tvb, offset, len, ENC_NA);
5257 offset += len;
5259 if (offset < length) {
5260 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5265 * 8.2.68 Measurement Information
5267 static void
5268 dissect_pfcp_measurement_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5270 int offset = 0;
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
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_ENDIAN);
5285 offset += 1;
5287 if (offset < length) {
5288 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5293 * 8.2.69 Node Report Type
5295 static void
5296 dissect_pfcp_node_report_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5298 int offset = 0;
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
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_ENDIAN);
5312 offset += 1;
5314 if (offset < length) {
5315 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5320 * 8.2.70 Remote GTP-U Peer
5322 static void
5323 dissect_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_, pfcp_session_args_t *args _U_)
5325 int offset = 0;
5326 uint64_t flags;
5327 uint32_t length_di, length_ni;
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
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_ENDIAN, &flags);
5340 offset += 1;
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_ENDIAN);
5345 proto_item_append_text(item, "IPv4 %s ", tvb_ip_to_str(pinfo->pool, tvb, offset));
5346 offset += 4;
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_NA);
5351 proto_item_append_text(item, "IPv6 %s ", tvb_ip6_to_str(pinfo->pool, tvb, offset));
5352 offset += 16;
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_ENDIAN, &length_di);
5358 offset += 2;
5360 /* Destination Interface */
5361 offset += decode_pfcp_destination_interface(tvb, pinfo, tree, item, offset, length_di);
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_ENDIAN, &length_ni);
5367 offset += 2;
5369 /* Network Instance */
5370 offset += decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, length_ni);
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_NTP | ENC_BIG_ENDIAN);
5375 offset += 4;
5378 if (offset < length) {
5379 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5385 * 8.2.71 UR-SEQN
5387 static void
5388 dissect_pfcp_ur_seqn(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5390 unsigned value;
5392 /* 5 to 8 UR-SEQN
5393 * The UR-SEQN value shall be encoded as an Unsigned32 binary integer value
5395 proto_tree_add_item_ret_uint(tree, hf_pfcp_ur_seqn, tvb, 0, 4, ENC_BIG_ENDIAN, &value);
5397 proto_item_append_text(item, "%u", value);
5403 * 8.2.72 Activate Predefined Rules
5405 static void
5406 dissect_pfcp_act_predef_rules(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
5412 proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA);
5415 * 8.2.73 Deactivate Predefined Rules
5417 static void
5418 dissect_pfcp_deact_predef_rules(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
5424 proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA);
5427 * 8.2.74 FAR ID
5429 static int
5430 decode_pfcp_far_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, int offset, pfcp_session_args_t *args)
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.
5439 far_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN);
5441 proto_tree_add_item(tree, hf_pfcp_far_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN);
5442 proto_tree_add_item(tree, hf_pfcp_far_id, tvb, offset, 4, ENC_BIG_ENDIAN);
5443 offset += 4;
5445 proto_item_append_text(item, "%s %u",
5446 tfs_get_string((far_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
5447 (far_id & 0x7fffffff));
5449 if (args) {
5450 args->last_rule_ids.far = far_id;
5453 return offset;
5456 static void
5457 dissect_pfcp_far_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args)
5459 int offset = 0;
5461 offset = decode_pfcp_far_id(tvb, pinfo, tree, item, offset, args);
5463 if (offset < length) {
5464 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5469 * 8.2.75 QER ID
5471 static int
5472 decode_pfcp_qer_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset, pfcp_session_args_t *args)
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
5480 qer_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN);
5482 proto_tree_add_item(tree, hf_pfcp_qer_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN);
5483 proto_tree_add_item(tree, hf_pfcp_qer_id, tvb, offset, 4, ENC_BIG_ENDIAN);
5484 offset += 4;
5486 proto_item_append_text(item, "%s %u",
5487 tfs_get_string((qer_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
5488 (qer_id & 0x7fffffff));
5490 if (args) {
5491 args->last_rule_ids.qer = qer_id;
5494 return offset;
5496 static void
5497 dissect_pfcp_qer_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args)
5499 int offset = 0;
5501 offset = decode_pfcp_qer_id(tvb, pinfo, tree, item, offset, args);
5503 if (offset < length) {
5504 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5509 * 8.2.76 OCI Flags
5511 static void
5512 dissect_pfcp_oci_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5514 int offset = 0;
5516 static int * const pfcp_oci_flags_flags[] = {
5517 &hf_pfcp_spare_b7_b1,
5518 &hf_pfcp_oci_flags_b0_aoci,
5519 NULL
5521 /* Octet 5 Spare AOCI */
5522 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_oci_flags_flags, ENC_BIG_ENDIAN);
5523 offset += 1;
5525 if (offset < length) {
5526 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5532 * 8.2.77 PFCP Association Release Request
5534 static void
5535 dissect_pfcp_pfcp_assoc_rel_req(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5537 int offset = 0;
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
5545 /* Octet 5 Spare URSS SARR */
5546 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcp_assoc_rel_req_flags, ENC_BIG_ENDIAN);
5547 offset += 1;
5549 if (offset < length) {
5550 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5556 * 8.2.78 Graceful Release Period
5558 static void
5559 dissect_pfcp_graceful_release_period(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5561 int offset = 0;
5562 uint32_t unit, value;
5564 /* Octet 5 Timer unit Timer value */
5565 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN, &unit);
5566 proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
5567 offset++;
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;
5598 if (offset < length) {
5599 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5604 * 8.2.79 PDN Type
5606 static 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 }
5616 static void
5617 dissect_pfcp_pdn_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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)
5624 proto_tree_add_item_ret_uint(tree, hf_pfcp_pdn_type, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
5625 offset++;
5627 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_pdn_type_vals, "Unknown"));
5629 if (offset < length) {
5630 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5634 * 8.2.80 Failed Rule ID
5636 static 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 }
5648 * 8.2.123 MAR ID
5650 static int
5651 decode_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, int offset, pfcp_session_args_t *args)
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_ENDIAN, &mar_id);
5656 offset += 2;
5658 proto_item_append_text(item, "%u", mar_id);
5660 if (args) {
5661 args->last_rule_ids.mar = mar_id;
5664 return offset;
5667 * 8.2.151 SRR ID
5669 static int
5670 decode_pfcp_srr_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, int offset, pfcp_session_args_t *args)
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_ENDIAN, &srr_id);
5675 offset += 1;
5677 proto_item_append_text(item, "%u", srr_id);
5679 if (args) {
5680 args->last_rule_ids.srr = srr_id;
5683 return offset;
5686 static void
5687 dissect_pfcp_failed_rule_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5689 int offset = 0;
5690 uint32_t rule_type;
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_ENDIAN, &rule_type);
5694 offset++;
5696 proto_item_append_text(item, "%s: ", val_to_str_const(rule_type, pfcp_failed_rule_id_type_vals, "Unknown"));
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.
5702 switch (rule_type) {
5703 case 0:
5704 /* PDR ID */
5705 offset = decode_pfcp_pdr_id(tvb, pinfo, tree, item, offset, NULL);
5706 break;
5707 case 1:
5708 /* FAR ID */
5709 offset = decode_pfcp_far_id(tvb, pinfo, tree, item, offset, NULL);
5710 break;
5711 case 2:
5712 /* QER ID */
5713 offset = decode_pfcp_qer_id(tvb, pinfo, tree, item, offset, NULL);
5714 break;
5715 case 3:
5716 /* URR ID */
5717 offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, NULL);
5718 break;
5719 case 4:
5720 /* BAR ID */
5721 offset = decode_pfcp_bar_id(tvb, pinfo, tree, item, offset, NULL);
5722 break;
5723 case 5:
5724 /* MAR ID */
5725 offset = decode_pfcp_mar_id(tvb, pinfo, tree, item, offset, NULL);
5726 break;
5727 case 6:
5728 /* SRR ID */
5729 offset = decode_pfcp_srr_id(tvb, pinfo, tree, item, offset, NULL);
5730 break;
5731 default:
5732 break;
5735 if (offset < length) {
5736 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5740 * 8.2.81 Time Quota Mechanism
5742 static const value_string pfcp_time_quota_mechanism_bti_type_vals[] = {
5743 { 0, "CTP" },
5744 { 1, "DTP" },
5745 { 0, NULL }
5748 static void
5749 dissect_pfcp_time_quota_mechanism(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5751 int offset = 0;
5752 uint32_t bti_type;
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_ENDIAN, &bti_type);
5756 offset++;
5758 proto_item_append_text(item, "%s", val_to_str_const(bti_type, pfcp_time_quota_mechanism_bti_type_vals, "Unknown"));
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
5764 proto_tree_add_item(tree, hf_pfcp_time_quota_mechanism_bti, tvb, offset, 4, ENC_BIG_ENDIAN);
5765 offset += 4;
5767 if (offset < length) {
5768 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5772 * 8.2.82 User Plane IP Resource Information (removed in Rel 16.3)
5774 static void
5775 dissect_pfcp_user_plane_ip_resource_infomation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5777 int offset = 0;
5778 uint64_t upiri_flags_val;
5779 uint32_t upiri_teid_range;
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
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_ENDIAN, &upiri_flags_val);
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.
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_ENDIAN, &upiri_teid_range);
5811 offset += 1;
5813 if (upiri_teid_range > 0)
5815 /* Octet t TEID Range */
5816 proto_tree_add_item(tree, hf_pfcp_upiri_teid_range, tvb, offset, 1, ENC_BIG_ENDIAN);
5817 offset++;
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_ENDIAN);
5823 offset += 4;
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_NA);
5828 offset += 16;
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--;
5836 offset = decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, ni_len);
5838 if ((upiri_flags_val & 0x40) == 0x40) {
5839 /* r Source Interface */
5840 offset = decode_pfcp_source_interface(tvb, pinfo, tree, item, offset);
5842 if (offset < length) {
5843 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5849 * 8.2.83 User Plane Inactivity Timer
5851 static void
5852 dissect_pfcp_user_plane_inactivity_timer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5854 int offset = 0;
5855 uint32_t value;
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.
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_ENDIAN, &value);
5864 offset += 4;
5866 if(value == 0)
5867 proto_item_append_text(item, " (Stopped)");
5869 if (offset < length) {
5870 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5876 * 8.2.84 Multiplier
5878 static void
5879 dissect_pfcp_multiplier(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5882 /* 5 to 12 Value-Digits */
5883 proto_tree_add_item(tree, hf_pfcp_multiplier_value_digits, tvb, 0, 8, ENC_BIG_ENDIAN);
5885 /* 12 to 15 Exponent */
5886 proto_tree_add_item(tree, hf_pfcp_multiplier_exponent, tvb, 8, 4, ENC_BIG_ENDIAN);
5891 * 8.2.85 Aggregated URR ID IE
5893 static void
5894 dissect_pfcp_aggregated_urr_id_ie(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5896 /* 5 to 8 URR ID */
5897 decode_pfcp_urr_id(tvb, pinfo, tree, item, 0, NULL);
5901 * 8.2.86 Subsequent Volume Quota
5903 static void
5904 dissect_pfcp_subsequent_volume_quota(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5906 int offset = 0;
5907 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
5918 offset += 1;
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.
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
5927 proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
5928 offset += 8;
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
5934 proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
5935 offset += 8;
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
5941 proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
5942 offset += 8;
5945 if (offset < length) {
5946 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5951 * 8.2.87 Subsequent Time Quota
5953 static void
5954 dissect_pfcp_subsequent_time_quota(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5956 int offset = 0;
5957 unsigned value;
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.
5963 proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_time_quota, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
5964 offset += 4;
5966 proto_item_append_text(item, "%u s", value);
5968 if (offset < length) {
5969 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5975 * 8.2.88 RQI
5977 static void
5978 dissect_pfcp_rqi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
5980 int offset = 0;
5982 proto_tree_add_item(tree, hf_pfcp_spare_b7_b1, tvb, offset, 1, ENC_BIG_ENDIAN);
5983 proto_tree_add_item(tree, hf_pfcp_rqi_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
5984 offset += 1;
5986 if (offset < length) {
5987 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
5989 return;
5993 * 8.2.89 QFI
5995 static int
5996 decode_pfcp_qfi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, int offset)
5998 /* Octets 5 SPARE QFI
5999 * The Application Identifier shall be encoded as an OctetString
6001 proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN);
6002 proto_tree_add_item(tree, hf_pfcp_qfi, tvb, offset, 1, ENC_NA);
6003 offset += 1;
6005 return offset;
6007 static void
6008 dissect_pfcp_qfi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6010 int offset = 0;
6012 offset = decode_pfcp_qfi(tvb, pinfo, tree, item, offset);
6014 if (offset < length) {
6015 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6017 return;
6021 * 8.2.90 Querry URR Reference
6023 static void
6024 dissect_pfcp_query_urr_reference(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6026 int offset = 0;
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).
6032 proto_tree_add_item(tree, hf_pfcp_query_urr_reference, tvb, offset, 4, ENC_BIG_ENDIAN);
6033 offset += 4;
6035 if (offset < length) {
6036 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6042 * 8.2.91 Additional Usage Reports Information
6044 static void
6045 dissect_pfcp_additional_usage_reports_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6047 int offset = 0;
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 |
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{...}.
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
6063 proto_tree_add_bitmask_list(tree, tvb, offset, 2, pfcp_additional_usage_reports_information_flags, ENC_BIG_ENDIAN);
6064 offset += 2;
6066 if (offset < length) {
6067 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6072 * 8.2.92 Traffic Endpoint ID
6074 static void dissect_pfcp_traffic_endpoint_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6076 int offset = 0;
6078 proto_tree_add_item(tree, hf_pfcp_traffic_endpoint_id, tvb, offset, 1, ENC_BIG_ENDIAN);
6079 offset += 1;
6081 if (offset < length) {
6082 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6084 return;
6088 * 8.2.93 MAC Address
6090 static void dissect_pfcp_mac_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6092 int offset = 0;
6093 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
6105 offset += 1;
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
6113 proto_tree_add_item(tree, hf_pfcp_mac_address_source_mac_address, tvb, offset, 6, ENC_NA);
6114 offset += 6;
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
6121 proto_tree_add_item(tree, hf_pfcp_mac_address_dest_mac_address, tvb, offset, 6, ENC_NA);
6122 offset += 6;
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
6129 proto_tree_add_item(tree, hf_pfcp_mac_address_upper_source_mac_address, tvb, offset, 6, ENC_NA);
6130 offset += 6;
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
6137 proto_tree_add_item(tree, hf_pfcp_mac_address_upper_dest_mac_address, tvb, offset, 6, ENC_NA);
6138 offset += 6;
6141 if (offset < length) {
6142 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6144 return;
6148 * 8.2.94 C-TAG (Customer-VLAN tag)
6150 static void dissect_pfcp_c_tag(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6152 int offset = 0;
6154 offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
6156 if (offset < length) {
6157 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6159 return;
6163 * 8.2.95 S-TAG (Service-VLAN tag)
6165 static void dissect_pfcp_s_tag(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6167 int offset = 0;
6169 offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6171 if (offset < length) {
6172 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6174 return;
6178 * 8.2.96 Ethertype
6180 static void dissect_pfcp_ethertype(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6182 int offset = 0;
6184 proto_tree_add_item(tree, hf_pfcp_ethertype, tvb, offset, 2, ENC_NA);
6185 offset += 2;
6187 if (offset < length) {
6188 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6190 return;
6194 * 8.2.97 Proxying
6196 static void dissect_pfcp_proxying(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6198 int offset = 0;
6199 uint64_t flags_val;
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
6207 /* Octet 5 Spare INS ARP */
6208 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_proxying_flags, ENC_BIG_ENDIAN, &flags_val);
6209 offset += 1;
6211 if (offset < length) {
6212 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6214 return;
6218 * 8.2.98 Ethertype Filter ID
6220 static void dissect_pfcp_ethertype_filter_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6222 int offset = 0;
6224 proto_tree_add_item(tree, hf_pfcp_ethertype_filter_id, tvb, offset, 4, ENC_NA);
6225 offset += 4;
6227 if (offset < length) {
6228 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6230 return;
6234 * 8.2.99 Ethernet Filter Properties
6236 static void dissect_pfcp_ethernet_filter_properties(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6238 int offset = 0;
6239 uint64_t flags_val;
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
6246 /* Octet 5 Spare BIDE */
6247 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_ethernet_filter_properties_flags, ENC_BIG_ENDIAN, &flags_val);
6248 offset += 1;
6250 if (offset < length) {
6251 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6253 return;
6257 * 8.2.100 Suggested Buffering Packets Count
6259 static void
6260 dissect_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_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
6266 offset += 1;
6268 proto_item_append_text(item, "%u packets", value);
6270 if (offset < length) {
6271 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6276 * 8.2.101 User ID
6278 static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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;
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
6295 /* Octet 5 Spare IMEIF IMSIF */
6296 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_user_id_flags, ENC_BIG_ENDIAN, &flags_val);
6297 offset += 1;
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_ENDIAN, &length_imsi);
6303 offset += 1;
6304 /* 7 to (a) IMSI */
6305 dissect_e212_imsi(tvb, pinfo, tree, offset, length_imsi, false);
6306 offset += length_imsi;
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_ENDIAN, &length_imei);
6313 offset += 1;
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.
6320 proto_tree_add_item(tree, hf_pfcp_user_id_imei, tvb, offset, length_imei, ENC_BCD_DIGITS_0_9|ENC_LITTLE_ENDIAN);
6321 offset += length_imei;
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_ENDIAN, &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;
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_ENDIAN, &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_ASCII);
6341 offset += length_nai;
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_ENDIAN, &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_ASCII);
6351 offset += length_supi;
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_ENDIAN, &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_ASCII);
6361 offset += length_gpsi;
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_ENDIAN, &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_ASCII);
6371 offset += length_pei;
6374 if (offset < length) {
6375 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6377 return;
6381 * 8.2.102 Ethernet PDU Session Information
6383 static void dissect_pfcp_ethernet_pdu_session_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6385 int offset = 0;
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
6392 /* Octet 5 Spare ETHI */
6393 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_ethernet_pdu_session_information_flags, ENC_BIG_ENDIAN);
6394 offset += 1;
6396 if (offset < length) {
6397 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6399 return;
6403 * 8.2.103 MAC Addresses Detected
6405 static void
6406 dissect_pfcp_mac_addresses_detected(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6408 int offset = 0;
6409 uint32_t value, i, length_ctag, length_stag;
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_ENDIAN, &value);
6413 offset += 1;
6415 /* o to (o+6) MAC Address */
6416 for (i = 0; i < value; i++)
6418 proto_tree_add_item(tree, hf_pfcp_mac_addresses_detected_mac_address, tvb, offset, 6, ENC_NA);
6419 offset += 6;
6422 if (offset == length) {
6423 return;
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_ENDIAN, &length_ctag);
6428 offset += 1;
6429 /* (s+1) to t C-TAG */
6430 if (length_ctag > 0)
6432 offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
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_ENDIAN, &length_stag);
6437 offset += 1;
6438 /* (u+1) to v S-TAG */
6439 if (length_stag > 0)
6441 offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6444 if (offset < length) {
6445 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6450 * 8.2.104 MAC Addresses Removed
6452 static void
6453 dissect_pfcp_mac_addresses_removed(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6455 int offset = 0;
6456 uint32_t value, i, length_ctag, length_stag;
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_ENDIAN, &value);
6460 offset += 1;
6462 /* o to (o+6) MAC Address */
6463 for (i = 0; i < value; i++)
6465 proto_tree_add_item(tree, hf_pfcp_mac_addresses_removed_mac_address, tvb, offset, 6, ENC_NA);
6466 offset += 6;
6469 if (offset == length) {
6470 return;
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_ENDIAN, &length_ctag);
6475 offset += 1;
6476 /* (s+1) to t C-TAG */
6477 if (length_ctag > 0)
6479 offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
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_ENDIAN, &length_stag);
6484 offset += 1;
6485 /* (u+1) to v S-TAG */
6486 if (length_stag > 0)
6488 offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6491 if (offset < length) {
6492 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6497 * 8.2.105 Ethernet Inactivity Timer
6499 static void
6500 dissect_pfcp_ethernet_inactivity_timer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6502 int offset = 0;
6503 uint32_t value;
6505 * The Ethernet Inactivity Timer field shall be encoded as an Unsigned32 binary integer value.
6508 /* 5 to 8 Inactivity Timer */
6509 proto_tree_add_item_ret_uint(tree, hf_pfcp_ethernet_inactivity_timer, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6510 offset += 4;
6512 if (offset < length) {
6513 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6519 * 8.2.106 Subsequent Event Quota
6521 static void
6522 dissect_pfcp_subsequent_event_quota(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6524 int offset = 0;
6525 uint32_t value;
6527 * The Subsequent Event Quota field shall be encoded as an Unsigned32 binary integer value.
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_ENDIAN, &value);
6532 offset += 4;
6534 proto_item_append_text(item, "%u", value);
6536 if (offset < length) {
6537 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6542 * 8.2.107 Subsequent Event Threshold
6544 static void
6545 dissect_pfcp_subsequent_event_threshold(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6547 int offset = 0;
6548 uint32_t value;
6550 * The Subsequent Event Threshold field shall be encoded as an Unsigned32 binary integer value.
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_ENDIAN, &value);
6555 offset += 4;
6557 proto_item_append_text(item, "%u", value);
6559 if (offset < length) {
6560 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6565 * 8.2.108 Trace Information
6567 static void
6568 dissect_pfcp_trace_information(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6570 int offset = 0;
6571 uint32_t length_trigger_events, length_list_interfaces, length_ipaddress;
6573 /* 5 to 7 MCC MNC */
6574 offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, true);
6576 /* 8 to 10 Trace ID */
6577 proto_tree_add_item(tree, hf_pfcp_trace_information_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN);
6578 offset += 3;
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_ENDIAN, &length_trigger_events);
6582 offset += 1;
6584 /* 12 to m Trigger Events */
6585 proto_tree_add_item(tree, hf_pfcp_trace_information_trigger_events, tvb, offset, length_trigger_events, ENC_NA);
6586 offset += length_trigger_events;
6588 /* m+1 Session Trace Depth */
6589 proto_tree_add_item(tree, hf_pfcp_trace_information_session_trace_depth, tvb, offset, 1, ENC_BIG_ENDIAN);
6590 offset += 1;
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_ENDIAN, &length_list_interfaces);
6594 offset += 1;
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_NA);
6598 offset += length_list_interfaces;
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_ENDIAN, &length_ipaddress);
6602 offset += 1;
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_NA);
6607 } else if (length_ipaddress == 16) {
6608 proto_tree_add_item(tree, hf_pfcp_trace_information_ipv6, tvb, offset, length_ipaddress, ENC_NA);
6610 offset += length_ipaddress;
6612 if (offset < length) {
6613 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6618 * 8.2.109 Framed-Route
6620 static void
6621 dissect_pfcp_framed_route(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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.
6631 proto_tree_add_item(tree, hf_pfcp_framed_route, tvb, 0, length, ENC_UTF_8);
6635 * 8.2.110 Framed-Routing
6637 static void
6638 dissect_pfcp_framed_routing(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
6643 proto_tree_add_item(tree, hf_pfcp_framed_routing, tvb, 0, length, ENC_NA);
6647 * 8.2.111 Framed-IPv6-Route
6649 static void
6650 dissect_pfcp_framed_ipv6_route(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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..."
6657 proto_tree_add_item(tree, hf_pfcp_framed_ipv6_route, tvb, 0, length, ENC_UTF_8);
6661 * 8.2.112 Event Quota
6663 static void
6664 dissect_pfcp_event_quota(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6666 int offset = 0;
6667 uint32_t value;
6669 /* 5 to 8 Event Quota
6670 * The Event Quota field shall be encoded as an Unsigned32 binary integer value.
6672 proto_tree_add_item_ret_uint(tree, hf_pfcp_event_quota, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6673 offset += 4;
6675 proto_item_append_text(item, "%u", value);
6677 if (offset < length) {
6678 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6683 * 8.2.113 Event Threshold
6685 static void
6686 dissect_pfcp_event_threshold(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6688 int offset = 0;
6689 uint32_t value;
6691 /* 5 to 8 Event Threshold
6692 * The Event Threshold field shall be encoded as an Unsigned32 binary integer value.
6694 proto_tree_add_item_ret_uint(tree, hf_pfcp_event_threshold, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6695 offset += 4;
6697 proto_item_append_text(item, "%u", value);
6699 if (offset < length) {
6700 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6705 * 8.2.114 Time Stamp
6707 static void
6708 dissect_pfcp_time_stamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6710 char *time_str;
6711 int offset = 0;
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.
6717 proto_tree_add_item_ret_time_string(tree, hf_pfcp_time_stamp, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
6718 proto_item_append_text(item, "%s", time_str);
6719 offset += 4;
6721 if (offset < length) {
6722 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6727 * 8.2.115 Averaging Window
6729 static void
6730 dissect_pfcp_averaging_window(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6732 int offset = 0;
6733 uint32_t value;
6735 /* 5 to 8 Averaging Window
6736 * The Averaging Window field shall be encoded as an Unsigned32 binary integer value.
6738 proto_tree_add_item_ret_uint(tree, hf_pfcp_averaging_window, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6739 offset += 4;
6741 proto_item_append_text(item, "%u", value);
6743 if (offset < length) {
6744 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6749 * 8.2.116 Paging Policy Indicator (PPI)
6751 static void
6752 dissect_pfcp_paging_policy_indicator(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6754 int offset = 0;
6755 uint32_t value;
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
6760 proto_tree_add_item_ret_uint(tree, hf_pfcp_paging_policy_indicator, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
6761 offset++;
6763 proto_item_append_text(item, "%u", value);
6765 if (offset < length) {
6766 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6771 * 8.2.117 APN/DNN
6773 static void
6774 dissect_pfcp_apn_dnn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item , uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6776 int offset = 0;
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
6783 /* NOTE: The APN/DNN field is not encoded as a dotted string as commonly used in documentation. */
6785 const uint8_t* string_value;
6786 proto_tree_add_item_ret_string(tree, hf_pfcp_apn_dnn, tvb, offset, length, ENC_APN_STR | ENC_NA, pinfo->pool, &string_value);
6787 proto_item_append_text(item, "%s", string_value);
6792 * 8.2.118 3GPP Interface Type
6795 static const value_string pfcp_tgpp_interface_type_vals[] = {
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 }
6832 static void
6833 dissect_pfcp_tgpp_interface_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6835 int offset = 0;
6836 uint32_t tgpp_interface_type;
6838 /* Octet 5 Spare Node ID Type*/
6839 proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
6840 proto_tree_add_item_ret_uint(tree, hf_pfcp_tgpp_interface_type, tvb, offset, 1, ENC_BIG_ENDIAN, &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++;
6844 if (offset < length) {
6845 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6851 * 8.2.119 PFCPSRReq-Flags
6853 static void
6854 dissect_pfcp_pfcpsrreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6856 int offset = 0;
6858 static int * const pfcp_pfcpsrreq_flags[] = {
6859 &hf_pfcp_spare_b7_b1,
6860 &hf_pfcp_pfcpsrreq_flags_b0_psdbu,
6861 NULL
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_ENDIAN);
6865 offset += 1;
6867 if (offset < length) {
6868 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6874 * 8.2.120 PFCPAUReq-Flags
6876 static void
6877 dissect_pfcp_pfcpaureq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6879 int offset = 0;
6881 static int * const pfcp_pfcpaureq_flags[] = {
6882 &hf_pfcp_spare_b7_b1,
6883 &hf_pfcp_pfcpaureq_flags_b0_parps,
6884 NULL
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_ENDIAN);
6888 offset += 1;
6890 if (offset < length) {
6891 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6897 * 8.2.121 Activation Time
6899 static void
6900 dissect_pfcp_activation_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6902 int offset = 0;
6903 char *time_str;
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
6909 proto_tree_add_item_ret_time_string(tree, hf_pfcp_activation_time, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
6910 proto_item_append_text(item, "%s", time_str);
6911 offset += 4;
6913 if (offset < length) {
6914 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6919 * 8.2.122 Deactivation Time
6921 static void
6922 dissect_pfcp_deactivation_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
6924 int offset = 0;
6925 char *time_str;
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
6931 proto_tree_add_item_ret_time_string(tree, hf_pfcp_deactivation_time, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
6932 proto_item_append_text(item, "%s", time_str);
6933 offset += 4;
6935 if (offset < length) {
6936 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6941 * 8.2.123 MAR ID
6944 static void
6945 dissect_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args)
6947 int offset = 0;
6949 offset = decode_pfcp_mar_id(tvb, pinfo, tree, item, offset, args);
6951 if (offset < length) {
6952 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6957 * 8.2.124 Steering Functionality
6959 static const value_string pfcp_steering_functionality_vals[] = {
6960 { 0, "ATSSS-LL" },
6961 { 1, "MPTCP" },
6962 { 0, NULL }
6965 static void
6966 dissect_pfcp_steering_functionality(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
6973 proto_tree_add_item_ret_uint(tree, hf_pfcp_steering_functionality, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
6974 offset++;
6976 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_steering_functionality_vals, "Unknown"));
6978 if (offset < length) {
6979 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
6984 * 8.2.125 Steering Mode
6986 static 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 }
6995 static void
6996 dissect_pfcp_steering_mode(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
7003 proto_tree_add_item_ret_uint(tree, hf_pfcp_steering_mode, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
7004 offset++;
7006 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_steering_mode_vals, "Unknown"));
7008 if (offset < length) {
7009 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7014 * 8.2.126 Weight
7016 static void
7017 dissect_pfcp_weight(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7019 uint32_t value;
7020 /* Octet 5 Weight */
7021 proto_tree_add_item_ret_uint(tree, hf_pfcp_weight, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
7023 proto_item_append_text(item, "%u", value);
7028 * 8.2.127 Priority
7030 static 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 }
7041 static void
7042 dissect_pfcp_priority(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7044 int offset = 0;
7045 uint32_t value;
7046 /* Octet 5 Priority Value
7047 * The Priority shall be encoded as a 4 bits binary.
7049 proto_tree_add_item_ret_uint(tree, hf_pfcp_priority, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
7050 offset++;
7052 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_priority_vals, "Unknown"));
7054 if (offset < length) {
7055 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7060 * 8.2.128 UE IP address Pool Identity
7062 static void
7063 dissect_pfcp_ue_ip_address_pool_identity(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7065 int offset = 0;
7066 uint32_t pool_length;
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).
7072 proto_tree_add_item_ret_uint(tree, hf_pfcp_ue_ip_address_pool_length, tvb, 0, 2, ENC_BIG_ENDIAN, &pool_length);
7073 offset += 2;
7075 proto_tree_add_item(tree, hf_pfcp_ue_ip_address_pool_identity, tvb, offset, pool_length, ENC_NA);
7076 offset += pool_length;
7078 if (offset < length) {
7079 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7084 * 8.2.129 Alternative SMF IP Address
7086 static void
7087 dissect_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_, pfcp_session_args_t *args _U_)
7089 int offset = 0;
7090 uint64_t alternative_smf_ip_address_flags;
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
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_ENDIAN, &alternative_smf_ip_address_flags);
7101 offset += 1;
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_ENDIAN);
7106 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
7107 offset += 4;
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_NA);
7112 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7113 offset += 16;
7116 if (offset < length) {
7117 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7122 * 8.2.130 Packet Replication and Detection Carry-On Information
7124 static void
7125 dissect_pfcp_packet_replication_and_detection_carry_on_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7127 int offset = 0;
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
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_ENDIAN);
7139 offset += 1;
7141 if (offset < length) {
7142 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7147 * 8.2.131 SMF Set ID
7149 static void
7150 dissect_pfcp_smf_set_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7152 int offset = 0;
7154 /* Octet 5 Spare */
7155 proto_tree_add_item(tree, hf_pfcp_spare, tvb, offset, 1, ENC_BIG_ENDIAN);
7156 offset++;
7158 /* 6 to m FQDN */
7159 offset = decode_pfcp_fqdn(tvb, pinfo, tree, item, offset, length);
7161 if (offset < length) {
7162 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7167 * 8.2.132 Quota Validity Time
7169 static void
7170 dissect_pfcp_quota_validity_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7172 int offset = 0;
7173 unsigned value;
7174 nstime_t quvti;
7175 proto_item *pi;
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_ENDIAN, &value);
7179 offset += 4;
7181 proto_item_append_text(item, "%u", value);
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);
7188 if (offset < length) {
7189 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7194 * 8.2.133 Number of Reports
7196 static void
7197 dissect_pfcp_number_of_reports(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7199 unsigned value;
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_ENDIAN, &value);
7203 proto_item_append_text(item, "%u", value);
7207 * 8.2.134 PFCPASRsp-Flags
7209 static void
7210 dissect_pfcp_pfcpasrsp_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7212 int offset = 0;
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
7220 /* Octet 5 Spare UUPSI PSREI */
7221 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpasrsp_flags_flags, ENC_BIG_ENDIAN);
7222 offset += 1;
7224 if (offset < length) {
7225 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7230 * 8.2.135 CP PFCP Entity IP Address
7232 static void
7233 dissect_pfcp_cp_pfcp_entity_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7235 int offset = 0;
7236 uint64_t cp_pfcp_entity_ip_address_flags;
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
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_ENDIAN, &cp_pfcp_entity_ip_address_flags);
7246 offset += 1;
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_ENDIAN);
7251 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
7252 offset += 4;
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_NA);
7257 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7258 offset += 16;
7261 if (offset < length) {
7262 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7267 * 8.2.136 PFCPSEReq-Flags
7269 static void
7270 dissect_pfcp_pfcpsereq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7272 int offset = 0;
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
7281 /* Octet 5 Spare HRSBOM SUMPC RESTI */
7282 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsereq_flags_flags, ENC_BIG_ENDIAN);
7283 offset += 1;
7285 if (offset < length) {
7286 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7291 * 8.2.137 IP Multicast Address
7293 static void
7294 dissect_pfcp_ip_multicast_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7296 int offset = 0;
7297 uint64_t ip_multicast_address_flags;
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
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_ENDIAN, &ip_multicast_address_flags);
7309 offset += 1;
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_ENDIAN);
7316 offset += 4;
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_NA);
7321 offset += 16;
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_ENDIAN);
7328 offset += 4;
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_NA);
7333 offset += 16;
7338 if (offset < length) {
7339 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7344 * 8.2.138 Source IP Address
7346 static void
7347 dissect_pfcp_source_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7349 int offset = 0;
7350 uint64_t source_ip_address_flags;
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
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_ENDIAN, &source_ip_address_flags);
7361 offset += 1;
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_ENDIAN);
7366 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
7367 offset += 4;
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_NA);
7372 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7373 offset += 16;
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_NA);
7378 proto_item_append_text(item, ", Mask/Prefix length %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7379 offset += 1;
7383 if (offset < length) {
7384 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7389 * 8.2.139 Packet Rate Status
7391 static void
7392 dissect_pfcp_packet_rate_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7394 int offset = 0;
7395 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
7406 offset += 1;
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_ENDIAN);
7412 offset += 2;
7414 if ((flags_val & 0x4)) {
7415 proto_tree_add_item(tree, hf_pfcp_packet_rate_status_apr_ul, tvb, offset, 2, ENC_BIG_ENDIAN);
7416 offset += 2;
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_ENDIAN);
7422 offset += 2;
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_ENDIAN);
7427 offset += 2;
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_ENDIAN);
7433 offset += 8;
7436 if (offset < length) {
7437 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7442 * 8.2.140 Create Bridge/Router Info
7444 static void
7445 dissect_pfcp_create_bridge_router_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7447 int offset = 0;
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
7455 /* Octet 5 Spare RII BII */
7456 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_create_bridge_router_info_flags, ENC_BIG_ENDIAN);
7457 offset += 1;
7459 if (offset < length) {
7460 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7465 * 8.2.141 Port Number
7467 static void
7468 dissect_pfcp_port_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7470 unsigned value;
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_ENDIAN, &value);
7474 proto_item_append_text(item, "%u", value);
7478 * 8.2.142 NW-TT Port Number
7480 static void
7481 dissect_pfcp_nw_tt_port_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7483 unsigned value;
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_ENDIAN, &value);
7487 proto_item_append_text(item, "%u", value);
7491 * 8.2.143 5GS User Plane Node ID
7493 static void
7494 dissect_pfcp_5gs_user_plane_node_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7496 int offset = 0;
7497 uint64_t flags_val;
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
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_ENDIAN, &flags_val);
7506 offset += 1;
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_ENDIAN);
7512 offset += 8;
7515 if (offset < length) {
7516 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7521 * 8.2.144 Port Management Information Container
7523 static void
7524 dissect_pfcp_port_management_information_container(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_NA);
7531 * 8.2.145 Requested Clock Drift Information
7533 static void
7534 dissect_pfcp_requested_clock_drift_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7536 int offset = 0;
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
7544 /* Octet 5 Spare BII */
7545 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_requested_clock_drift_control_information_flags, ENC_BIG_ENDIAN);
7546 offset += 1;
7548 if (offset < length) {
7549 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7554 * 8.2.146 Time Domain Number
7556 static void
7557 dissect_pfcp_time_domain_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7559 int offset = 0;
7560 unsigned value;
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_ENDIAN, &value);
7564 offset++;
7566 proto_item_append_text(item, "%u", value);
7568 if (offset < length) {
7569 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7574 * 8.2.147 Time Offset Threshold
7576 static void
7577 dissect_pfcp_time_offset_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7579 int offset = 0;
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_ENDIAN);
7583 offset += 8;
7585 if (offset < length) {
7586 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7591 * 8.2.148 Cumulative rateRatio Threshold
7593 static void
7594 dissect_pfcp_cumulative_rate_ratio_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7596 int offset = 0;
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_ENDIAN);
7600 offset += 4;
7602 if (offset < length) {
7603 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7608 * 8.2.149 Time Offset Measurement
7610 static void
7611 dissect_pfcp_time_offset_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7613 int offset = 0;
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_ENDIAN);
7617 offset += 8;
7619 if (offset < length) {
7620 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7625 * 8.2.150 Cumulative rateRatio Measurement
7627 static void
7628 dissect_pfcp_cumulative_rate_ratio_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7630 int offset = 0;
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_ENDIAN);
7634 offset += 4;
7636 if (offset < length) {
7637 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7642 * 8.2.151 SRR ID
7645 static void
7646 dissect_pfcp_srr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args)
7648 int offset = 0;
7650 offset = decode_pfcp_srr_id(tvb, pinfo, tree, item, offset, args);
7652 if (offset < length) {
7653 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7658 * 8.2.152 Requested Access Availability Information
7660 static void
7661 dissect_pfcp_requested_access_availability_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7663 int offset = 0;
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
7670 /* Octet 5 Spare RRCA */
7671 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_requested_access_availability_control_information_flags, ENC_BIG_ENDIAN);
7672 offset += 1;
7674 if (offset < length) {
7675 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7680 * 8.2.153 Access Availability Information
7682 static const value_string pfcp_availability_status_vals[] = {
7683 { 0, "Access has become unavailable" },
7684 { 1, "Access has become available" },
7685 { 0, NULL }
7687 static const value_string pfcp_availability_type_vals[] = {
7688 { 0, "3GPP access type" },
7689 { 1, "Non-3GPP access type" },
7690 { 0, NULL }
7693 static void
7694 dissect_pfcp_access_availability_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7696 int offset = 0;
7698 /* Octet 5 */
7699 /* Availability Status */
7700 proto_tree_add_item(tree, hf_pfcp_availability_status, tvb, offset, 1, ENC_BIG_ENDIAN);
7702 /* Access Type */
7703 proto_tree_add_item(tree, hf_pfcp_availability_type, tvb, offset, 1, ENC_BIG_ENDIAN);
7704 offset++;
7706 if (offset < length) {
7707 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7712 * 8.2.154 MPTCP Control Information
7714 static void
7715 dissect_pfcp_mptcp_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7717 int offset = 0;
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
7724 /* Octet 5 Spare RRCA */
7725 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mptcp_control_information_flags, ENC_BIG_ENDIAN);
7726 offset += 1;
7728 if (offset < length) {
7729 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7734 * 8.2.155 ATSSS-LL Control Information
7736 static void
7737 dissect_pfcp_atsss_ll_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7739 int offset = 0;
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
7746 /* Octet 5 Spare RRCA */
7747 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_atsss_ll_control_information_flags, ENC_BIG_ENDIAN);
7748 offset += 1;
7751 if (offset < length) {
7752 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7757 * 8.2.156 PMF Control Information
7759 static void
7760 dissect_pfcp_pmf_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7762 int offset = 0;
7763 uint64_t flags;
7764 uint32_t value, i;
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
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_ENDIAN, &flags);
7775 offset += 1;
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_ENDIAN, &value);
7781 offset += 1;
7783 /* 7 to (7+p+1) QFI */
7784 for (i = 0; i < value; i++)
7786 offset = decode_pfcp_qfi(tvb, pinfo, tree, item, offset);
7790 if (offset < length) {
7791 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7796 * 8.2.157 MPTCP Address Information
7798 static void
7799 dissect_pfcp_mptcp_address_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7801 int offset = 0;
7802 uint64_t mptcp_address_flags;
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
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_ENDIAN, &mptcp_address_flags);
7812 offset += 1;
7814 /* Octet 6 MPTCP Proxy Type */
7815 proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_type, tvb, offset, 1, ENC_NA);
7816 offset++;
7818 /* Octet 7 to 8 MPTCP Proxy Port */
7819 proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_port, tvb, offset, 2, ENC_BIG_ENDIAN);
7820 offset += 2;
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_ENDIAN);
7825 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
7826 offset += 4;
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_NA);
7831 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7832 offset += 16;
7835 if (offset < length) {
7836 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7841 * 8.2.158 Link-Specific Multipath IP Address
7843 static void
7844 dissect_pfcp_link_specific_multipath_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7846 int offset = 0;
7847 uint64_t link_specific_multipath_ip_address_flags;
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
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_ENDIAN, &link_specific_multipath_ip_address_flags);
7859 offset += 1;
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_ENDIAN);
7864 offset += 4;
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_NA);
7869 offset += 16;
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_ENDIAN);
7875 offset += 4;
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_NA);
7880 offset += 16;
7882 if (offset < length) {
7883 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7888 * 8.2.159 PMF Address Information
7890 static void
7891 dissect_pfcp_pmf_address_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7893 int offset = 0;
7894 uint64_t pmf_address_information_flags;
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
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_ENDIAN, &pmf_address_information_flags);
7905 offset += 1;
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_ENDIAN);
7910 offset += 4;
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_NA);
7915 offset += 16;
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_ENDIAN);
7919 offset += 2;
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_ENDIAN);
7923 offset += 2;
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_NA);
7928 offset += 6;
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_NA);
7934 offset += 6;
7937 if (offset < length) {
7938 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
7943 * 8.2.160 ATSSS-LL Information
7945 static void
7946 dissect_pfcp_atsss_ll_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7948 int offset = 0;
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
7955 /* Octet 5 Spare LLI */
7956 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_atsss_ll_information_flags, ENC_BIG_ENDIAN);
7957 offset += 1;
7959 if (offset < length) {
7960 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7965 * 8.2.161 Data Network Access Identifier
7967 static void
7968 dissect_pfcp_data_network_access_identifier(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7970 int offset = 0;
7972 /* Octet 5 to (n+4) Data Network Access Identifier
7973 * The Data Network Access Identifier field shall be encoded as an OctetString
7975 proto_tree_add_item(tree, hf_pfcp_data_network_access_identifier, tvb, offset, length, ENC_NA);
7979 * 8.2.162 Average Packet Delay
7981 static void
7982 dissect_pfcp_average_packet_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
7984 int offset = 0;
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_ENDIAN);
7988 offset += 4;
7990 if (offset < length) {
7991 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7996 * 8.2.163 Minimum Packet Delay
7998 static void
7999 dissect_pfcp_minimum_packet_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8001 int offset = 0;
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_ENDIAN);
8005 offset += 4;
8007 if (offset < length) {
8008 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8013 * 8.2.164 Maximum Packet Delay
8015 static void
8016 dissect_pfcp_maximum_packet_delay(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8018 int offset = 0;
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_ENDIAN);
8022 offset += 4;
8024 if (offset < length) {
8025 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8030 * 8.2.165 QoS Report Trigger
8032 static void
8033 dissect_pfcp_qos_report_trigger(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8035 int offset = 0;
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
8044 /* Octet 5 Spare IRE THR PER */
8045 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qos_report_trigger_flags, ENC_BIG_ENDIAN);
8046 offset += 1;
8048 if (offset < length) {
8049 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8054 * 8.2.166 GTP-U Path Interface Type
8056 static void
8057 dissect_pfcp_gtp_u_path_interface_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8059 int offset = 0;
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
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_ENDIAN);
8069 offset += 1;
8071 if (offset < length) {
8072 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8077 * 8.2.167 Requested QoS Monitoring
8079 static void
8080 dissect_pfcp_requested_qos_monitoring(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8082 int offset = 0;
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
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_ENDIAN);
8097 offset += 1;
8099 if (offset < length) {
8100 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8105 * 8.2.168 Reporting Frequency
8107 static void
8108 dissect_pfcp_reporting_frequency(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8110 int offset = 0;
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
8119 /* Octet 5 Spare RP Ul DL */
8120 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_frequency_flags, ENC_BIG_ENDIAN);
8121 offset += 1;
8123 if (offset < length) {
8124 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8129 * 8.2.169 Packet Delay Thresholds
8131 static void
8132 dissect_pfcp_packet_delay_thresholds(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8134 int offset = 0;
8135 uint64_t packet_delay_thresholds_flags;
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
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_ENDIAN, &packet_delay_thresholds_flags);
8146 offset += 1;
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_ENDIAN);
8151 offset += 4;
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_ENDIAN);
8157 offset += 4;
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_ENDIAN);
8163 offset += 4;
8166 if (offset < length) {
8167 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8172 * 8.2.170 Minimum Wait Time
8174 static void
8175 dissect_pfcp_minimum_wait_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8177 int offset = 0;
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_ENDIAN);
8181 offset += 4;
8183 if (offset < length) {
8184 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8189 * 8.2.171 QoS Monitoring Measurement
8191 static void
8192 dissect_pfcp_qos_monitoring_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8194 int offset = 0;
8195 uint64_t qos_monitoring_measurement_flags;
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
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_ENDIAN, &qos_monitoring_measurement_flags);
8209 offset += 1;
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_ENDIAN);
8214 offset += 4;
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_ENDIAN);
8220 offset += 4;
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_ENDIAN);
8226 offset += 4;
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_ENDIAN);
8232 offset += 1;
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_ENDIAN);
8238 offset += 1;
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_ENDIAN);
8244 offset += 4;
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_ENDIAN);
8250 offset += 4;
8252 if (offset < length) {
8253 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8258 * 8.2.172 MT-EDT Control Information
8260 static void
8261 dissect_pfcp_mt_edt_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8263 int offset = 0;
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
8270 /* Octet 5 Spare RDSI */
8271 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mt_edt_control_information_flags, ENC_BIG_ENDIAN);
8272 offset += 1;
8274 if (offset < length) {
8275 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8280 * 8.2.173 DL Data Packets Size
8282 static void
8283 dissect_pfcp_dl_data_packets_size(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8285 int offset = 0;
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_ENDIAN);
8289 offset += 2;
8291 if (offset < length) {
8292 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8297 * 8.2.174 QER Control Indications
8299 static void
8300 dissect_pfcp_qer_control_indications(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8302 int offset = 0;
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
8309 /* Octet 5 Spare RCSR */
8310 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qer_control_indications_o5_flags, ENC_BIG_ENDIAN);
8311 offset++;
8313 if (offset < length) {
8314 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8320 * 8.2.175 NF Instance ID
8322 static void
8323 dissect_pfcp_nf_instance_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8325 int offset = 0;
8327 /* Octet 5 to 20 NF Instance ID */
8328 proto_tree_add_item(tree, hf_pfcp_nf_instance_id, tvb, offset, length, ENC_NA);
8332 * 8.2.176 S-NSSAI
8334 static void
8335 dissect_pfcp_s_nssai(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8337 int offset = 0;
8339 /* Octet 5 SST */
8340 proto_tree_add_item(tree, hf_pfcp_s_nssai_sst, tvb, offset, 1, ENC_NA);
8341 offset++;
8343 /* Octet 6 to 8 SD */
8344 proto_tree_add_item(tree, hf_pfcp_s_nssai_sd, tvb, offset, 3, ENC_NA);
8345 offset += 3;
8347 if (offset < length) {
8348 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8353 * 8.2.177 IP version
8355 static void
8356 dissect_pfcp_ip_version(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8358 int offset = 0;
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
8366 /* Octet 5 Spare V6 V4 */
8367 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_ip_version_flags, ENC_BIG_ENDIAN);
8368 offset += 1;
8370 if (offset < length) {
8371 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8376 * 8.2.178 PFCPASReq-Flags
8378 static void
8379 dissect_pfcp_pfcpasreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8381 int offset = 0;
8383 static int * const pfcp_pfcpasreq_flags_flags[] = {
8384 &hf_pfcp_spare_b7_b1,
8385 &hf_pfcp_pfcpasreq_flags_flags_b0_uupsi,
8386 NULL
8388 /* Octet 5 Spare UUPSI */
8389 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpasreq_flags_flags, ENC_BIG_ENDIAN);
8390 offset += 1;
8392 if (offset < length) {
8393 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8398 * 8.2.179 Data Status
8400 static void
8401 dissect_pfcp_data_status(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8403 int offset = 0;
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
8411 /* Octet 5 Spare BUFF DROP */
8412 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_data_status_flags, ENC_BIG_ENDIAN);
8413 offset += 1;
8415 if (offset < length) {
8416 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8421 * 8.2.180 RDS Configuration Information
8423 static void
8424 dissect_pfcp_rds_configuration_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8426 int offset = 0;
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
8433 /* Octet 5 Spare RDS */
8434 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_rds_configuration_information_flags, ENC_BIG_ENDIAN);
8435 offset += 1;
8437 if (offset < length) {
8438 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8443 * 8.2.181 Multipath Application Indication
8445 static void
8446 dissect_pfcp_multipath_application_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8448 int offset = 0;
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
8456 /* Octet 5 Spare MQAI MTAI */
8457 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_multipath_application_indication_flags, ENC_BIG_ENDIAN);
8458 offset += 1;
8460 if (offset < length) {
8461 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8466 * 8.2.182 User Plane Node Management Information Container
8468 static void
8469 dissect_pfcp_user_plane_node_management_information_container(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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.
8475 proto_tree_add_item(tree, hf_pfcp_user_plane_node_management_information_container, tvb, offset, length, ENC_NA);
8479 * 8.2.183 Number of UE IP Addresses
8481 static void
8482 dissect_pfcp_number_of_ue_ip_addresses(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8484 int offset = 0;
8485 uint64_t number_of_ue_ip_addresses_flags;
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
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_ENDIAN, &number_of_ue_ip_addresses_flags);
8495 offset += 1;
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_ENDIAN);
8500 offset += 4;
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_ENDIAN);
8505 offset += 4;
8508 if (offset < length) {
8509 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8514 * 8.2.184 Validity Timer
8516 static void
8517 dissect_pfcp_validity_timer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
8524 proto_tree_add_item_ret_uint(tree, hf_pfcp_validity_timer, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
8525 offset += 2;
8527 proto_item_append_text(item, "%u s", value);
8529 if (offset < length) {
8530 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8536 * 8.2.185 Offending IE Information
8538 static void
8539 dissect_pfcp_offending_ie_information(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8541 int offset = 0;
8542 uint32_t value;
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_ENDIAN, &value);
8546 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_ie_type, "Unknown"));
8547 offset += 2;
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_NA);
8554 * 8.2.186 RAT Type
8556 static 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 }
8589 static void
8590 dissect_pfcp_rattype(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
8596 offset++;
8598 proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_rattype_vals, "Unknown"));
8600 if (offset < length) {
8601 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8606 * 8.2.187 L2TP User Authentication
8608 static void
8609 dissect_pfcp_l2tp_user_authentication(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8611 int offset = 0;
8612 uint64_t l2tp_user_authentication_flags;
8613 uint32_t l2tp_length;
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
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_ASCII | ENC_NA);
8626 offset += 2;
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_ENDIAN, &l2tp_user_authentication_flags);
8630 offset += 1;
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_ENDIAN, &l2tp_length);
8635 offset += 1;
8636 proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_name, tvb, offset, l2tp_length, ENC_ASCII | ENC_NA);
8637 offset += l2tp_length;
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_ENDIAN, &l2tp_length);
8643 offset += 1;
8644 proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_challenge, tvb, offset, l2tp_length, ENC_ASCII | ENC_NA);
8645 offset += l2tp_length;
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_ENDIAN, &l2tp_length);
8651 offset += 1;
8652 proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_response, tvb, offset, l2tp_length, ENC_ASCII | ENC_NA);
8653 offset += l2tp_length;
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_ENDIAN);
8659 offset++;
8662 if (offset < length) {
8663 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8668 * 8.2.188 LNS Address
8670 static void
8671 dissect_pfcp_lns_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8673 int offset = 0;
8675 /* IPv4 address */
8676 if (length == 4) {
8677 proto_tree_add_item(tree, hf_pfcp_lns_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
8678 offset += 4;
8680 /* IPv6 address */
8681 else if (length == 16) {
8682 proto_tree_add_item(tree, hf_pfcp_lns_address_ipv6, tvb, offset, 16, ENC_NA);
8683 offset += 16;
8686 if (offset < length) {
8687 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8693 * 8.2.189 Tunnel Preference
8695 static void
8696 dissect_pfcp_tunnel_preference(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8698 proto_tree_add_item(tree, hf_pfcp_tunnel_preference_value, tvb, 0, length, ENC_BIG_ENDIAN);
8702 * 8.2.190 Calling Number
8704 static void
8705 dissect_pfcp_calling_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8707 proto_tree_add_item(tree, hf_pfcp_calling_number_value, tvb, 0, length, ENC_ASCII | ENC_NA);
8711 * 8.2.191 Called Number
8713 static void
8714 dissect_pfcp_called_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8716 proto_tree_add_item(tree, hf_pfcp_called_number_value, tvb, 0, length, ENC_ASCII | ENC_NA);
8720 * 8.2.192 L2TP Session Indications
8722 static void
8723 dissect_pfcp_l2tp_session_indications(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8725 int offset = 0;
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
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_ENDIAN);
8736 offset++;
8738 if (offset < length) {
8739 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8745 * 8.2.193 DNS Server Address
8747 static void
8748 dissect_pfcp_dns_sever_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8750 int offset = 0;
8752 /* IPv4 address */
8753 proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
8754 proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset));
8755 offset += 4;
8757 if (offset < length) {
8758 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8764 * 8.2.194 NBNS Server Address
8766 static void
8767 dissect_pfcp_nbns_sever_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8769 int offset = 0;
8771 /* IPv4 address */
8772 proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
8773 proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset));
8774 offset += 4;
8776 if (offset < length) {
8777 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8783 * 8.2.195 Maximum Receive Unit
8785 static void
8786 dissect_pfcp_maximum_receive_unit(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8788 /* Oct 5 to 6 Maximum Receive Unit */
8789 proto_tree_add_item(tree, hf_pfcp_maximum_receive_unit, tvb, 0, length, ENC_BIG_ENDIAN);
8793 * 8.2.196 Thresholds
8795 static void
8796 dissect_pfcp_thresholds(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8798 int offset = 0;
8799 uint64_t flags;
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
8807 /* Octet 5 Spare PLR RTT */
8808 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_thresholds_flags, ENC_BIG_ENDIAN, &flags);
8809 offset += 1;
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_ENDIAN);
8815 offset += 2;
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_ENDIAN);
8822 offset++;
8825 if (offset < length) {
8826 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8831 * 8.2.197 Steering Mode Indicator
8833 static void
8834 dissect_pfcp_steering_mode_indications(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8836 int offset = 0;
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
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_ENDIAN);
8846 offset++;
8848 if (offset < length) {
8849 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8855 * 8.2.198 Group ID
8857 static void
8858 dissect_pfcp_group_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8860 /* Octet 5 to (n+4) Group ID */
8861 proto_tree_add_item(tree, hf_pfcp_group_id, tvb, 0, length, ENC_UTF_8);
8865 * 8.2.199 CP IP Address
8867 static void
8868 dissect_pfcp_cp_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8870 int offset = 0;
8871 uint64_t cp_ip_address_flags;
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
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_ENDIAN, &cp_ip_address_flags);
8881 offset += 1;
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_ENDIAN);
8886 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
8887 offset += 4;
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_NA);
8892 proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
8893 offset += 16;
8896 if (offset < length) {
8897 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8902 * 8.2.200 IP Address and Port Number Replacement
8904 static void
8905 dissect_pfcp_ip_address_and_port_number_replacement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8907 int offset = 0;
8908 uint64_t ip_address_and_port_number_replacement_flags;
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
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_ENDIAN, &ip_address_and_port_number_replacement_flags);
8923 offset += 1;
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_ENDIAN);
8928 offset += 4;
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_NA);
8933 offset += 16;
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_NA);
8938 offset += 2;
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_ENDIAN);
8943 offset += 4;
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_NA);
8948 offset += 16;
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_NA);
8953 offset += 2;
8956 if (offset < length) {
8957 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8962 * 8.2.201 DNS Query/Response Filter
8964 static void
8965 dissect_pfcp_dns_query_response_filter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8967 int offset = 0;
8968 uint32_t dns_query_length;
8970 proto_tree_add_item_ret_uint(tree, hf_pfcp_dns_query_filter_pattern_len, tvb, offset, 2, ENC_BIG_ENDIAN, &dns_query_length);
8971 offset += 2;
8972 proto_tree_add_item(tree, hf_pfcp_dns_query_filter_pattern, tvb, offset, dns_query_length, ENC_ASCII | ENC_NA);
8973 offset += dns_query_length;
8975 if (offset < length) {
8976 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
8981 * 8.2.202 Event Notification URI
8983 static void
8984 dissect_pfcp_event_notification_uri(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
8986 proto_tree_add_item(tree, hf_pfcp_event_notification_uri, tvb, 0, length, ENC_ASCII | ENC_NA);
8991 * 8.2.203 Notification Correlation ID
8993 static void
8994 dissect_pfcp_notification_correlation_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
8999 proto_item_append_text(item, "%u", value);
9003 * 8.2.204 Reporting Flags
9005 static void
9006 dissect_pfcp_reporting_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9008 int offset = 0;
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
9015 /* Octet 5 Spare DUPL */
9016 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_flags_o5_flags, ENC_BIG_ENDIAN);
9017 offset++;
9019 if (offset == length) {
9020 return;
9023 if (offset < length) {
9024 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9029 * 8.2.205 Predefined Rules Name
9031 static void
9032 dissect_pfcp_predefined_rules_name(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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
9038 proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA);
9042 * 8.2.206 MBS Session Identifier
9044 static void
9045 dissect_pfcp_mbs_session_identifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9047 int offset = 0;
9048 uint64_t mbs_session_identifier_flags;
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
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_ENDIAN, &mbs_session_identifier_flags);
9059 offset += 1;
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_NA);
9064 offset += 6;
9066 /* SSMI (if present)*/
9067 if ((mbs_session_identifier_flags & 0x2)) {
9068 uint32_t source_address_type;
9069 uint32_t source_address_length;
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_ENDIAN, &source_address_type);
9073 proto_tree_add_item_ret_uint(tree, hf_pfcp_mbs_session_identifier_source_address_length, tvb, offset, 1, ENC_BIG_ENDIAN, &source_address_length);
9074 offset++;
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_ENDIAN);
9079 offset += source_address_length;
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_NA);
9084 offset += source_address_length;
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_NA);
9090 return;
9093 if (offset < length) {
9094 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9099 * 8.2.207 Multicast Transport Information
9101 static void
9102 dissect_pfcp_multicast_transport_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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;
9110 /* Oct 5 Spare */
9111 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
9112 offset++;
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_ENDIAN);
9116 offset+=4;
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_ENDIAN, &distribution_address_type);
9120 proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_distribution_address_length, tvb, offset, 1, ENC_BIG_ENDIAN, &distribution_address_length);
9121 offset++;
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_ENDIAN);
9126 offset += distribution_address_length;
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_NA);
9131 offset += distribution_address_length;
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_ENDIAN, &source_address_type);
9136 proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_source_address_length, tvb, offset, 1, ENC_BIG_ENDIAN, &source_address_length);
9137 offset++;
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_ENDIAN);
9142 offset += source_address_length;
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_NA);
9147 offset += source_address_length;
9150 if (offset < length) {
9151 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9156 * 8.2.208 MBSN4mbReq-Flags
9158 static void
9159 dissect_pfcp_mbsn4mbreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9161 int offset = 0;
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
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_ENDIAN);
9172 offset++;
9174 if (offset == length) {
9175 return;
9178 if (offset < length) {
9179 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9184 * 8.2.209 Local Ingress Tunnel
9186 static void
9187 dissect_pfcp_local_ingress_tunnel(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9189 int offset = 0;
9190 uint64_t local_ingress_tunnel_flags_val;
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
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_ENDIAN, &local_ingress_tunnel_flags_val);
9201 offset += 1;
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_ENDIAN);
9207 offset += 2;
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_ENDIAN);
9212 offset += 4;
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_NA);
9217 offset += 16;
9220 if (offset < length) {
9221 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9227 * 8.2.210 MBS Unicast Parameters ID
9229 static void
9230 dissect_pfcp_mbs_unicast_parameters_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_ENDIAN, &value);
9235 proto_item_append_text(item, "%u", value);
9239 * 8.2.211 MBSN4Resp-Flags
9241 static void
9242 dissect_pfcp_mbsn4resp_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9244 int offset = 0;
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
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_ENDIAN);
9255 offset++;
9257 if (offset < length) {
9258 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9264 * 8.2.212 Tunnel Password
9266 static void
9267 dissect_pfcp_tunnel_password(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_8 | ENC_NA);
9274 * 8.2.213 Area Session ID
9276 static void
9277 dissect_pfcp_area_session_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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_8 | ENC_NA, &value);
9282 proto_item_append_text(item, "%u", value);
9286 * 8.2.214 DSCP to PPI Mapping Information
9288 static void
9289 dissect_pfcp_dscp_to_ppi_mapping_information(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9291 int offset = 0;
9292 int dscp_values = 0;
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
9297 proto_tree_add_item(tree, hf_pfcp_dscp_to_ppi_mapping_info_ppi_value, tvb, offset, 1, ENC_BIG_ENDIAN);
9298 offset++;
9300 while (offset < length) {
9301 proto_tree_add_item(tree, hf_pfcp_dscp_to_ppi_mapping_info_dscp_value, tvb, offset, 1, ENC_BIG_ENDIAN);
9302 offset++;
9303 dscp_values++;
9305 /* no more than 63 DSCP values */
9306 if(dscp_values >= 63) {
9307 break;
9311 if (offset < length) {
9312 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9317 * 8.2.215 PFCPSDRsp-Flags
9319 static void
9320 dissect_pfcp_pfcpsdrsp_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9322 int offset = 0;
9324 static int * const pfcp_pfcpsdrsp_flags[] = {
9325 &hf_pfcp_spare_b7_b1,
9326 &hf_pfcp_pfcpsdrsp_flags_b0_puru,
9327 NULL
9329 /* Octet 5 Spare PURU */
9330 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsdrsp_flags, ENC_BIG_ENDIAN);
9331 offset += 1;
9333 if (offset < length) {
9334 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9339 * 8.2.216 QER Indications
9341 static void
9342 dissect_pfcp_qer_indications(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9344 int offset = 0;
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
9354 /* Octet 5 Spare PDUSM EML4s EDBMI PURU */
9355 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qer_indications_flags, ENC_BIG_ENDIAN);
9356 offset += 1;
9358 if (offset < length) {
9359 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9364 * 8.2.217 Vendor-Specific Node Report Type
9366 static void
9367 dissect_pfcp_vendor_specific_node_report_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9369 int offset = 0;
9371 /* Octet 5 to 6 Enterprise ID */
9372 proto_tree_add_item(tree, hf_pfcp_enterprise_id, tvb, offset, 2, ENC_BIG_ENDIAN);
9373 offset += 2;
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
9386 /* Octet 5 Spare */
9387 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_vendor_specific_node_report_type_flags, ENC_BIG_ENDIAN);
9388 offset += 1;
9390 if (offset < length) {
9391 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9396 * 8.2.218 Configured Time Domain
9398 static void
9399 dissect_pfcp_configured_time_domain(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9401 int offset = 0;
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
9408 /* Octet 5 Spare CTDI */
9409 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_configured_time_domain_flags, ENC_BIG_ENDIAN);
9410 offset += 1;
9412 if (offset < length) {
9413 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9418 * 8.2.219 Metadata
9420 static void
9421 dissect_pfcp_metadata(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9423 int offset = 0;
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
9428 proto_tree_add_item(tree, hf_pfcp_metadata, tvb, offset, length, ENC_NA);
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_NA);
9437 * 8.2.220 Traffic Parameter Threshold
9439 static void
9440 dissect_pfcp_traffic_parameter_threshold(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9442 int offset = 0;
9443 uint64_t traffic_parameter_threshold_flags;
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
9450 /* Octet 5 Spare DL */
9451 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_traffic_parameter_threshold_flags, ENC_BIG_ENDIAN, &traffic_parameter_threshold_flags);
9452 offset += 1;
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_ENDIAN);
9457 offset += 4;
9460 if (offset < length) {
9461 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9466 * 8.2.221 DL Periodicity
9468 static void
9469 dissect_pfcp_dl_periodicity(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9471 int offset = 0;
9473 // Octet 5 Spare Octet
9474 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
9475 offset += 1;
9477 /* Octet 6 to 9 DL Periodicity */
9478 proto_tree_add_item(tree, hf_pfcp_dl_periodicity_value, tvb, offset, 4, ENC_BIG_ENDIAN);
9479 offset += 4;
9481 if (offset < length) {
9482 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9487 * 8.2.222 N6 Jitter Measurement
9489 static void
9490 dissect_pfcp_n6_jitter_measurement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9492 int offset = 0;
9493 uint64_t n6_jitter_measurement_flags;
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
9500 /* Octet 5 Spare DL */
9501 proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_n6_jitter_measurement_flags, ENC_BIG_ENDIAN, &n6_jitter_measurement_flags);
9502 offset += 1;
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_ENDIAN);
9507 offset += 4;
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_ENDIAN);
9511 offset += 4;
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_ENDIAN);
9515 offset += 4;
9518 if (offset < length) {
9519 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9524 * 8.2.223 Traffic Parameter Measurement Indication
9526 static void
9527 dissect_pfcp_traffic_parameter_measurement_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9529 int offset = 0;
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
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_ENDIAN);
9540 offset += 1;
9542 if (offset < length) {
9543 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9548 * 8.2.224 UL Periodicity
9550 static void
9551 dissect_pfcp_ul_periodicity(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9553 int offset = 0;
9555 // Octet 5 Spare Octet
9556 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
9557 offset += 1;
9559 /* Octet 6 to 9 DL Periodicity */
9560 proto_tree_add_item(tree, hf_pfcp_ul_periodicity_value, tvb, offset, 4, ENC_BIG_ENDIAN);
9561 offset += 4;
9563 if (offset < length) {
9564 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9569 * 8.2.225 MPQUIC Control Information
9571 static void
9572 dissect_pfcp_mpquic_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9574 int offset = 0;
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
9581 /* Octet 5 Spare CUDP */
9582 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mpquic_control_information_flags, ENC_BIG_ENDIAN);
9583 offset += 1;
9585 if (offset < length) {
9586 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9591 * 8.2.226 MPQUIC Address Information
9593 static 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 }
9599 static void
9600 dissect_pfcp_mpquic_address_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9602 int offset = 0;
9603 uint64_t mpquic_address_information_flags;
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
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_ENDIAN, &mpquic_address_information_flags);
9613 offset += 1;
9615 /* 6 MPQUIC Proxy Type */
9616 proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_type, tvb, offset, 1, ENC_BIG_ENDIAN);
9617 offset += 1;
9619 /* 7 MPQUIC Proxy Port */
9620 proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_port, tvb, offset, 2, ENC_BIG_ENDIAN);
9621 offset += 2;
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_ENDIAN);
9626 offset += 4;
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_NA);
9631 offset += 16;
9634 if (offset < length) {
9635 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9640 * 8.2.227 Transport Mode
9642 static 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 }
9649 static void
9650 dissect_pfcp_transport_mode(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9652 int offset = 0;
9654 /* 5 Transport Mode Value */
9655 proto_tree_add_item(tree, hf_pfcp_transport_mode_value, tvb, offset, 1, ENC_BIG_ENDIAN);
9656 offset += 1;
9658 if (offset < length) {
9659 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9664 * 8.2.228 Protocol Description
9666 static void
9667 dissect_pfcp_protocol_description(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9669 int offset = 0;
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
9678 /* Octet 5 Spare SRTP RTP H264 */
9679 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_protocol_description_flags, ENC_BIG_ENDIAN);
9680 offset += 1;
9682 if (offset < length) {
9683 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9688 * 8.2.229 Reporting Suggestion Info
9690 static const value_string pfcp_reporting_urgency_type_vals[] = {
9691 { 0, "Delay tolerant" },
9692 { 1, "Non delay tolerant" },
9693 { 0, NULL }
9696 static void
9697 dissect_pfcp_reporting_suggestion_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9699 int offset = 0;
9700 uint32_t value;
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_ENDIAN, &value);
9704 offset += 1;
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_ENDIAN);
9709 offset += 4;
9712 if (offset < length) {
9713 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9718 * 8.2.230 TL-Container
9720 static void
9721 dissect_pfcp_tl_container(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
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.
9728 proto_tree_add_item(tree, hf_pfcp_tl_container, tvb, offset, length, ENC_NA);
9732 * 8.2.231 Measurement Indication
9734 static void
9735 dissect_pfcp_measurement_indication(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9737 int offset = 0;
9739 static int * const pfcp_measurement_indication_flags[] = {
9740 &hf_pfcp_spare_b7_b1,
9741 &hf_pfcp_measurement_indication_flags_b0_dqfi,
9742 NULL
9744 /* Octet 5 Spare DQFI */
9745 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_measurement_indication_flags, ENC_BIG_ENDIAN);
9746 offset += 1;
9748 if (offset < length) {
9749 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9754 * 8.2.232 HPLMN S-NSSAI
9756 static void
9757 dissect_pfcp_hplmn_s_nssai(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9759 int offset = 0;
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_NA);
9764 offset += 1;
9766 /* Octet 6-8 SD */
9767 proto_tree_add_item(tree, hf_pfcp_hplmn_s_nssai_sd, tvb, offset, 3, ENC_NA);
9771 * 8.2.233 Media Transport Protocol
9773 static 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 }
9780 static void
9781 dissect_pfcp_media_transport_protocol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9783 int offset = 0;
9785 /* 5 Media Transport Protocol */
9786 proto_tree_add_item(tree, hf_pfcp_media_transport_protocol, tvb, offset, 1, ENC_BIG_ENDIAN);
9787 offset += 1;
9789 if (offset < length) {
9790 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9795 * 8.2.234 RTP Header Extension Type
9797 static const value_string pfcp_rtp_header_extension_type_vals[] = {
9798 { 1, "RTP Header Extension for PDU Set Marking" },
9799 { 0, NULL }
9802 static void
9803 dissect_pfcp_rtp_header_extension_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9805 /* Octet 5 RTP Header Extension Type */
9806 proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_type, tvb, 0, length, ENC_NA);
9810 * 8.2.235 RTP Header Extension ID
9812 static void
9813 dissect_pfcp_rtp_header_extension_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9815 /* Octet 5 RTP Header Extension ID */
9816 proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_id, tvb, 0, length, ENC_NA);
9820 * 8.2.236 RTP Payload Type
9822 static void
9823 dissect_pfcp_rtp_payload_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9825 /* Octet 5 RTP Payload Type */
9826 proto_tree_add_item(tree, hf_pfcp_rtp_payload_type, tvb, 0, length, ENC_NA);
9830 * 8.2.237 RTP Payload Format
9832 static const value_string pfcp_rtp_payload_format_vals[] = {
9833 { 1, "RTP Header Extension for PDU Set Marking" },
9834 { 0, NULL }
9837 static void
9838 dissect_pfcp_rtp_payload_format(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9840 /* Octet 5 RTP Payload Format */
9841 proto_tree_add_item(tree, hf_pfcp_rtp_payload_format, tvb, 0, length, ENC_NA);
9845 * 8.2.238 Extended DL Buffering Notification Policy
9847 static void
9848 dissect_pfcp_extended_dl_buffering_notification_policy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9850 int offset = 0;
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
9857 /* Octet 5 Spare EDBN */
9858 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_extended_dl_buffering_notification_policy_flags, ENC_BIG_ENDIAN);
9859 offset += 1;
9861 if (offset < length) {
9862 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9867 * 8.2.239 MT-SDT Control Information
9869 static void
9870 dissect_pfcp_mt_sdt_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9872 int offset = 0;
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
9879 /* Octet 5 Spare RDSI */
9880 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mt_sdt_control_information_flags, ENC_BIG_ENDIAN);
9881 offset += 1;
9883 if (offset < length) {
9884 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9889 * 8.2.240 Reporting Thresholds
9891 static void
9892 dissect_pfcp_reporting_thresholds(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9894 int offset = 0;
9895 uint64_t reporting_thresholds_flags;
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
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_ENDIAN, &reporting_thresholds_flags);
9907 offset += 1;
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_ENDIAN);
9912 offset += 1;
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_ENDIAN);
9918 offset += 1;
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_ENDIAN);
9924 offset += 4;
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_ENDIAN);
9930 offset += 4;
9933 if (offset < length) {
9934 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
9939 * 8.2.241 RTP Header Extension Additional Information
9941 static 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 }
9947 static void
9948 dissect_pfcp_rtp_header_extension_additional_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9950 int offset = 0;
9951 uint64_t rtp_header_extension_additional_information_flags;
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
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_ENDIAN, &rtp_header_extension_additional_information_flags);
9961 offset += 1;
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_ENDIAN);
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_ENDIAN);
9972 offset += 1;
9974 if (offset < length) {
9975 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
9980 * 8.2.242 Mapped N6 IP Address
9982 static void
9983 dissect_pfcp_mapped_n6_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
9985 int offset = 0;
9986 uint64_t mapped_n6_ip_address_flags;
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
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_ENDIAN, &mapped_n6_ip_address_flags);
9996 offset += 1;
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_ENDIAN);
10001 proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
10002 offset += 4;
10005 if (offset < length) {
10006 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
10011 * 8.2.243 N6 Routing Information
10013 static void
10014 dissect_pfcp_n6_routing_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
10016 int offset = 0;
10017 uint64_t n6_routing_information_flags;
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
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_ENDIAN, &n6_routing_information_flags);
10031 offset += 1;
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_ENDIAN);
10036 offset += 4;
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_NA);
10041 offset += 16;
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_NA);
10046 offset += 2;
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_ENDIAN);
10051 offset += 4;
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_NA);
10056 offset += 16;
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_NA);
10061 offset += 2;
10064 if (offset < length) {
10065 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
10069 static pfcp_msg_hash_t *
10070 pfcp_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)
10072 pfcp_msg_hash_t pcr, *pcrp = NULL;
10073 uint32_t session;
10075 pcr.seq_nr = seq_nr;
10076 pcr.req_time = pinfo->abs_ts;
10078 switch (msgtype) {
10079 case PFCP_MSG_HEARTBEAT_REQUEST:
10080 case PFCP_MSG_PFD_MANAGEMENT_REQUEST:
10081 case PFCP_MSG_ASSOCIATION_SETUP_REQUEST:
10082 case PFCP_MSG_ASSOCIATION_UPDATE_REQUEST:
10083 case PFCP_MSG_ASSOCIATION_RELEASE_REQUEST:
10084 case PFCP_MSG_NODE_REPORT_REQEUST:
10085 case PFCP_MSG_SESSION_SET_DELETION_REQUEST:
10086 case PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST:
10087 case PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST:
10088 case PFCP_MSG_SESSION_MODIFICATION_REQUEST:
10089 case PFCP_MSG_SESSION_DELETION_REQUEST:
10090 case PFCP_MSG_SESSION_REPORT_REQUEST:
10091 pcr.is_request = true;
10092 pcr.req_frame = pinfo->num;
10093 pcr.rep_frame = 0;
10094 break;
10095 case PFCP_MSG_HEARTBEAT_RESPONSE:
10096 case PFCP_MSG_PFD_MANAGEMENT_RESPONSE:
10097 case PFCP_MSG_ASSOCIATION_SETUP_RESPONSE:
10098 case PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE:
10099 case PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE:
10100 case PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE:
10101 case PFCP_MSG_NODE_REPORT_RERESPONSE:
10102 case PFCP_MSG_SESSION_SET_DELETION_RESPONSE:
10103 case PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE:
10104 case PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE:
10105 case PFCP_MSG_SESSION_MODIFICATION_RESPONSE:
10106 case PFCP_MSG_SESSION_DELETION_RESPONSE:
10107 case PFCP_MSG_SESSION_REPORT_RESPONSE:
10109 pcr.is_request = false;
10110 pcr.req_frame = 0;
10111 pcr.rep_frame = pinfo->num;
10112 break;
10113 default:
10114 pcr.is_request = false;
10115 pcr.req_frame = 0;
10116 pcr.rep_frame = 0;
10117 break;
10120 pcrp = (pfcp_msg_hash_t *)wmem_map_lookup(pfcp_info->matched, &pcr);
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_REQUEST:
10128 case PFCP_MSG_PFD_MANAGEMENT_REQUEST:
10129 case PFCP_MSG_ASSOCIATION_SETUP_REQUEST:
10130 case PFCP_MSG_ASSOCIATION_UPDATE_REQUEST:
10131 case PFCP_MSG_ASSOCIATION_RELEASE_REQUEST:
10132 case PFCP_MSG_NODE_REPORT_REQEUST:
10133 case PFCP_MSG_SESSION_SET_DELETION_REQUEST:
10134 case PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST:
10135 case PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST:
10136 case PFCP_MSG_SESSION_MODIFICATION_REQUEST:
10137 case PFCP_MSG_SESSION_DELETION_REQUEST:
10138 case PFCP_MSG_SESSION_REPORT_REQUEST:
10140 pcr.seq_nr = seq_nr;
10142 pcrp = (pfcp_msg_hash_t *)wmem_map_remove(pfcp_info->unmatched, &pcr);
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);
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 = true;
10154 wmem_map_insert(pfcp_info->unmatched, pcrp, pcrp);
10155 return NULL;
10156 case PFCP_MSG_HEARTBEAT_RESPONSE:
10157 case PFCP_MSG_PFD_MANAGEMENT_RESPONSE:
10158 case PFCP_MSG_ASSOCIATION_SETUP_RESPONSE:
10159 case PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE:
10160 case PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE:
10161 case PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE:
10162 case PFCP_MSG_NODE_REPORT_RERESPONSE:
10163 case PFCP_MSG_SESSION_SET_DELETION_RESPONSE:
10164 case PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE:
10165 case PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE:
10166 case PFCP_MSG_SESSION_MODIFICATION_RESPONSE:
10167 case PFCP_MSG_SESSION_DELETION_RESPONSE:
10168 case PFCP_MSG_SESSION_REPORT_RESPONSE:
10170 pcr.seq_nr = seq_nr;
10171 pcrp = (pfcp_msg_hash_t *)wmem_map_lookup(pfcp_info->unmatched, &pcr);
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 = false;
10178 wmem_map_insert(pfcp_info->matched, pcrp, pcrp);
10181 break;
10182 default:
10183 break;
10187 /* we have found a match */
10188 if (pcrp) {
10189 proto_item *it;
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;
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)) {
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)));
10206 if (!session) {
10207 session = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_session_table, GUINT_TO_POINTER(pcrp->req_frame)));
10208 if (session) {
10209 pfcp_add_session(pinfo->num, session);
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);
10220 return pcrp;
10223 /* 7.2.3.3 Grouped Information Elements */
10225 static void
10226 dissect_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)
10228 proto_item_append_text(item, "[Grouped IE]");
10229 dissect_pfcp_ies_common(tvb, pinfo, tree, 0, length, message_type, args);
10232 // wrapper around dissect_pfcp_grouped_ie with the dissector_t prototype
10233 static int
10234 dissect_pfcp_grouped_ie_wrapper(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
10236 pfcp_sub_dis_t *pfcp_sub_dis_info = (pfcp_sub_dis_t *)data;
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);
10240 return tvb_reported_length(tvb);
10243 static void
10244 dissect_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)
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);
10250 static void
10251 dissect_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)
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));
10259 static void
10260 dissect_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)
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));
10268 static void
10269 dissect_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)
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));
10277 static void
10278 dissect_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)
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);
10284 static void
10285 dissect_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)
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);
10291 static void
10292 dissect_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)
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));
10300 static void
10301 dissect_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)
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);
10307 static void
10308 dissect_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)
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));
10316 static void
10317 dissect_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)
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));
10325 static void
10326 dissect_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)
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);
10332 static void
10333 dissect_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)
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));
10341 static void
10342 dissect_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)
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));
10350 static void
10351 dissect_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)
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));
10359 static void
10360 dissect_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)
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));
10368 static void
10369 dissect_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)
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));
10377 static void
10378 dissect_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)
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));
10386 static void
10387 dissect_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)
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);
10393 static void
10394 dissect_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)
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);
10400 static void
10401 dissect_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)
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);
10407 static void
10408 dissect_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)
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);
10414 static void
10415 dissect_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)
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);
10421 static void
10422 dissect_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)
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);
10428 static void
10429 dissect_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)
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);
10435 static void
10436 dissect_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)
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);
10442 static void
10443 dissect_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)
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);
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)
10452 typedef 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;
10456 static 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 }, /* End of List */
10814 #define NUM_PFCP_IES array_length(pfcp_ies)
10815 /* Set up the array to hold "etts" for each IE*/
10816 int ett_pfcp_elem[NUM_PFCP_IES-1];
10818 typedef 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;
10826 static int
10827 dissect_pfcp_unknown_enterprise_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
10829 proto_tree_add_item(tree, hf_pfcp_enterprise_data, tvb, 0, -1, ENC_NA);
10830 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_not_decoded_null, tvb, 0, -1);
10832 return tvb_reported_length(tvb);
10835 // Generic-IE dissector which wraps the actual data-dissector and which overwrites the
10836 // default tree-type and tree-text.
10837 static int
10838 dissect_pfcp_generic_ie_cb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data, void *cb)
10840 const pfcp_generic_ie_t* ie_info = cb;
10841 proto_item* item = proto_tree_get_parent(tree);
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);
10848 // Overwrite generic text with per-IE text
10849 if (ie_info->name != NULL) {
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) {
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);
10862 // Run dissector
10863 return ie_info->dissector(tvb, pinfo, tree, data);
10866 static int
10867 dissect_pfcp_generic_enterprise_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data, void *cb)
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);
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_ENDIAN, &ie_type);
10877 proto_tree_add_item_ret_uint(tree, hf_pfcp2_ie_len, tvb, 2, 2, ENC_BIG_ENDIAN, &ie_len);
10878 proto_tree_add_item_ret_uint(tree, hf_pfcp_enterprise_id, tvb, 4, 2, ENC_BIG_ENDIAN, &enterprise_id);
10880 // Item text
10881 const char* enterprise_name = try_enterprises_lookup(enterprise_id);
10882 if (enterprise_name != NULL) {
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);
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);
10891 const unsigned data_len = ie_len - 2;
10892 if (data_len == 0)
10895 * 5.6.3 Modifying the Rules of an Existing PFCP Session
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.
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);
10906 dissector_table_t ie_table = cb;
10907 int offset = 0;
10908 if (ie_table == NULL)
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, false, data);
10916 // Fallback to unknown-ie dissector
10917 if (offset == 0) {
10918 offset = dissect_pfcp_unknown_enterprise_ie(data_tvb, pinfo, tree, data);
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)
10926 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, data_tvb, offset, -1);
10930 return tvb_reported_length(tvb);
10933 static 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)
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;
10941 proto_register_subtree_array(ie_refs, num_ies);
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);
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]));
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);
10956 static void
10957 dissect_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)
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);
10966 pfcp_sub_dis_inf->message_type = message_type;
10967 pfcp_sub_dis_inf->args = args;
10969 /* 8.1.1 Information Element Format */
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
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
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.
10986 /* Length: this field contains the length of the IE excluding the first four octets, which are common for all IEs */
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);
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);
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, false, pfcp_sub_dis_inf)) {
11000 dissect_pfcp_generic_enterprise_ie(ie_tvb, pinfo, tree, pfcp_sub_dis_inf, NULL);
11002 offset += (4 + length_ie);
11003 } else {
11004 int tmp_ett;
11005 if (type < (NUM_PFCP_IES - 1)) {
11006 tmp_ett = ett_pfcp_elem[type];
11007 } else {
11008 tmp_ett = ett_pfcp_ie;
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"));
11013 proto_tree_add_item(ie_tree, hf_pfcp2_ie, tvb, offset, 2, ENC_BIG_ENDIAN);
11014 offset += 2;
11015 proto_tree_add_item(ie_tree, hf_pfcp2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN);
11016 offset += 2;
11019 * 5.6.3 Modifying the Rules of an Existing PFCP Session
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.
11025 if( length_ie == 0 ) {
11026 proto_item_append_text(ti, "[IE to be removed]");
11027 } else {
11028 if (type < (NUM_PFCP_IES -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);
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);
11041 offset += length_ie;
11046 static int
11047 dissect_pfcp_message(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
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;
11060 pfcp_msg_hash_t *pcrp = NULL;
11061 pfcp_hdr_t *pfcp_hdr = NULL;
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
11073 pfcp_hdr = wmem_new0(pinfo->pool, pfcp_hdr_t);
11075 /* Setting the SEID to -1 to say that the SEID is not valid for this packet */
11076 pfcp_hdr->seid = -1;
11078 col_set_str(pinfo->cinfo, COL_PROTOCOL, "PFCP");
11079 col_clear(pinfo->cinfo, COL_INFO);
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"));
11084 args = wmem_new0(pinfo->pool, 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);
11092 /* Do we have a conversation for this connection? */
11093 conversation = find_or_create_conversation(pinfo);
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) {
11098 /* No. Attach that information to the conversation,
11099 * and add it to the list of information structures.
11101 pfcp_info = wmem_new(wmem_file_scope(), 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);
11106 conversation_add_proto_data(conversation, proto_pfcp, pfcp_info);
11109 item = proto_tree_add_item(tree, proto_pfcp, tvb, 0, -1, ENC_NA);
11110 sub_tree = proto_item_add_subtree(item, ett_pfcp);
11112 /* 7.2.2 Message Header */
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 |
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_ENDIAN, BMT_NO_FALSE | BMT_NO_INT, &pfcp_flags);
11130 offset += 1;
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;
11137 /* Octet 3 - 4 Message Length */
11138 proto_tree_add_item_ret_uint(sub_tree, hf_pfcp_msg_length, tvb, offset, 2, ENC_BIG_ENDIAN, &length);
11139 offset += 2;
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);
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;
11151 /* 7.2.2.2 PFCP Header for Node Related Messages */
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 |
11163 proto_tree_add_item_ret_uint(sub_tree, hf_pfcp_seqno, tvb, offset, 3, ENC_BIG_ENDIAN, &seq_no);
11164 offset += 3;
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_ENDIAN);
11169 proto_tree_add_item(sub_tree, hf_pfcp_spare_h0, tvb, offset, 1, ENC_BIG_ENDIAN);
11170 } else {
11171 proto_tree_add_item(sub_tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
11173 offset++;
11175 /* Dissect the IEs in the message */
11176 dissect_pfcp_ies_common(tvb, pinfo, sub_tree, offset, length_total, message_type, args);
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)) {
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;
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);
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);
11193 return length_total;
11196 static int
11197 dissect_pfcp(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void *data _U_)
11199 int offset = 0;
11200 unsigned length = tvb_reported_length(tvb);
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. */
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 follow_on = (tvb_get_uint8(tvb, offset) & 0x04);
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);
11214 tvbuff_t *message_tvb = tvb_new_subset_length(tvb, offset, message_length);
11215 offset += dissect_pfcp_message(message_tvb, pinfo, tree);
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");
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");
11227 } while (length > (unsigned)offset);
11229 return length;
11232 /* Enterprise IE decoding Broadband Forum
11234 * TR-459: Control and User Plane Separation for a disaggregated BNG
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
11242 static int
11243 dissect_pfcp_enterprise_bbf_up_function_features(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11245 int offset = 0;
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
11259 // Octet 8 Spare Octet
11260 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
11261 offset += 1;
11263 // Octet 9 Spare Octet
11264 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
11265 offset += 1;
11267 // Octet 10 Spare Octet
11268 proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
11269 offset += 1;
11271 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_up_function_features_o7_flags, ENC_BIG_ENDIAN);
11272 offset += 1;
11274 return offset;
11278 * TR-459: 6.6.2 Logical Port
11280 static int
11281 dissect_pfcp_enterprise_bbf_logical_port(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
11283 /* Octet 7 to (n+4) logical-port-id */
11284 if (tvb_ascii_isprint(tvb, 0, -1))
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_ASCII | ENC_NA, pinfo->pool, &string_value);
11288 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
11290 else
11292 proto_tree_add_item(tree, hf_pfcp_bbf_logical_port_id, tvb, 0, -1, ENC_NA);
11295 return tvb_reported_length(tvb);
11299 * TR-459i2: 6.9.3 BBF Outer Header Creation
11301 static int
11302 dissect_pfcp_enterprise_bbf_outer_header_creation(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11304 int offset = 0;
11305 uint64_t value;
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
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_ENDIAN, &value);
11318 offset += 2;
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_ENDIAN);
11323 offset += 2;
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_ENDIAN);
11327 offset += 2;
11330 return offset;
11334 * TR-459: 6.6.4 BBF Outer Header Removal
11337 static 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 }
11346 static int
11347 dissect_pfcp_enterprise_bbf_outer_header_removal(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11349 int offset = 0;
11350 uint32_t value;
11352 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_out_hdr_desc, tvb, offset, 1, ENC_BIG_ENDIAN, &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"));
11356 return offset;
11360 * TR-459: 6.6.5 PPPoE Session ID
11362 static int
11363 dissect_pfcp_enterprise_bbf_pppoe_session_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11365 int offset = 0;
11366 uint32_t value;
11368 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_pppoe_session_id, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
11369 offset += 2;
11370 proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
11372 return offset;
11376 * TR-459: 6.6.6 PPP Protocol
11378 static int
11379 dissect_pfcp_enterprise_bbf_ppp_protocol(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11381 int offset = 0;
11382 uint64_t bbf_ppp_flags_val;
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
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_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS, &bbf_ppp_flags_val);
11394 offset += 1;
11396 if ((bbf_ppp_flags_val & 0x01) == 1)
11398 /* Octet 8 and 9 protocol */
11399 proto_tree_add_item(tree, hf_pfcp_bbf_ppp_protocol, tvb, offset, 2, ENC_BIG_ENDIAN);
11400 offset += 2;
11403 return offset;
11407 * TR-459: 6.6.7 Verification Timers
11409 static int
11410 dissect_pfcp_enterprise_bbf_verification_timers(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11412 int offset = 0;
11414 proto_tree_add_item(tree, hf_pfcp_bbf_verification_timer_interval, tvb, offset, 2, ENC_BIG_ENDIAN);
11415 offset += 2;
11417 proto_tree_add_item(tree, hf_pfcp_bbf_verification_timer_count, tvb, offset, 1, ENC_BIG_ENDIAN);
11418 offset += 1;
11420 return offset;
11424 * TR-459: 6.6.8 LCP Magic Number
11426 static int
11427 dissect_pfcp_enterprise_bbf_ppp_lcp_magic_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11429 int offset = 0;
11431 proto_tree_add_item(tree, hf_pfcp_bbf_ppp_lcp_magic_number_tx, tvb, offset, 4, ENC_BIG_ENDIAN);
11432 offset += 4;
11434 proto_tree_add_item(tree, hf_pfcp_bbf_ppp_lcp_magic_number_rx, tvb, offset, 4, ENC_BIG_ENDIAN);
11435 offset += 4;
11437 return offset;
11441 * TR-459: 6.6.9 MTU
11443 static int
11444 dissect_pfcp_enterprise_bbf_mtu(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11446 int offset = 0;
11447 uint32_t value;
11449 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_mtu, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
11450 offset += 2;
11451 proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
11453 return offset;
11457 * TR-459: 6.6.10 L2TP Tunnel Endpoint
11459 static int
11460 dissect_pfcp_enterprise_bbf_l2tp_tunnel_endpoint(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11462 int offset = 0;
11463 uint64_t bbf_l2tp_endp_flags_val;
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
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_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS, &bbf_l2tp_endp_flags_val);
11475 offset += 1;
11477 proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_tunnel_id, tvb, offset, 2, ENC_BIG_ENDIAN);
11478 offset += 2;
11480 proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
11481 offset += 4;
11483 proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_ipv6, tvb, offset, 16, ENC_NA);
11484 offset += 16;
11486 return offset;
11490 * TR-459: 6.6.11 L2TP Session ID
11492 static int
11493 dissect_pfcp_enterprise_bbf_l2tp_session_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11495 int offset = 0;
11496 uint32_t value;
11498 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_l2tp_session_id, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
11499 offset += 2;
11500 proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
11502 return offset;
11507 * TR-459: 6.6.12 L2TP Type
11510 static const true_false_string pfcp_bbf_l2tp_type_b0_t_tfs = {
11511 "control",
11512 "data"
11515 static int
11516 dissect_pfcp_enterprise_bbf_l2tp_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11518 int offset = 0;
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
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_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS);
11528 offset += 1;
11530 return offset;
11534 * TR-459.3: Figure 6: BBF Multicast Flags Information Element
11536 static int
11537 dissect_pfcp_enterprise_bbf_multicast_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11539 int offset = 0;
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
11548 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_multicast_flags, ENC_BIG_ENDIAN);
11549 offset += 1;
11551 return offset;
11555 * TR-459.3: Figure 7: BBF Multicast Query Parameters Information Element
11557 static int
11558 dissect_pfcp_enterprise_bbf_multicast_query_parameters(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11560 int offset = 0;
11562 proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_robustness, tvb, offset, 1, ENC_BIG_ENDIAN);
11563 offset += 1;
11565 proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_query_interval, tvb, offset, 2, ENC_BIG_ENDIAN);
11566 offset += 2;
11568 proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_query_response_interval, tvb, offset, 2, ENC_BIG_ENDIAN);
11569 offset += 2;
11571 proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_group_query_interval, tvb, offset, 2, ENC_BIG_ENDIAN);
11572 offset += 2;
11574 return offset;
11578 * TR-459.3: Figure 8: BBF Multicast Group Limit Information Element
11580 static int
11581 dissect_pfcp_enterprise_bbf_multicast_group_limit(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11583 int offset = 0;
11584 uint32_t value;
11586 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_multicast_group_limit_max_joins, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
11587 offset += 2;
11588 proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
11590 return offset;
11594 * TR-459.2: 6.5.5 BBF Apply Action IE
11596 static int
11597 dissect_pfcp_enterprise_bbf_apply_action(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11599 int offset = 0;
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
11607 proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_apply_action_flags, ENC_BIG_ENDIAN);
11608 offset += 1;
11610 return offset;
11614 * TR-459.2: 6.5.6 BBF NAT External Port Range
11616 static int
11617 dissect_pfcp_enterprise_bbf_nat_external_port_range(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11619 int offset = 0;
11620 uint32_t start, end;
11622 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_nat_external_port_range_start, tvb, offset, 2, ENC_BIG_ENDIAN, &start);
11623 offset += 2;
11625 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_nat_external_port_range_end, tvb, offset, 2, ENC_BIG_ENDIAN, &end);
11626 offset += 2;
11628 proto_item_append_text(proto_tree_get_parent(tree), ": %u:%u", start, end);
11630 return offset;
11634 * TR-459.2: 6.5.7 BBF NAT port forward
11636 static int
11637 dissect_pfcp_enterprise_bbf_nat_port_forward(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
11639 int offset = 0;
11640 unsigned length = tvb_reported_length(tvb);
11642 while ((unsigned)offset < length) {
11643 uint32_t in, out, protocol;
11644 proto_item *li;
11645 proto_tree *lt;
11647 li = proto_tree_add_item(tree, hf_pfcp_bbf_nat_port_forward, tvb, offset, 9, ENC_NA);
11648 lt = proto_item_add_subtree(li, ett_pfcp_bbf_nat_port_forward_list);
11650 proto_tree_add_item(lt, hf_pfcp_bbf_nat_port_forward_inside_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
11651 offset += 4;
11653 proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_inside_port, tvb, offset, 2, ENC_BIG_ENDIAN, &in);
11654 offset += 2;
11656 proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_outside_port, tvb, offset, 2, ENC_BIG_ENDIAN, &out);
11657 offset += 2;
11659 proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_protocol, tvb, offset, 1, ENC_BIG_ENDIAN, &protocol);
11660 offset += 1;
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), in, out);
11666 return offset;
11670 * TR 459.2: 6.5.3 BBF Report Trigger
11672 static const value_string pfcp_bbf_reporting_trigger_vals[] = {
11674 { 0, "reserved" },
11675 { 1, "DBNG-UP allocated NAT blocks" },
11676 { 0, NULL }
11679 static int
11680 dissect_pfcp_enterprise_bbf_reporting_trigger(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11682 int offset = 0;
11683 uint32_t value;
11685 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_reporting_trigger, tvb, offset, 1, ENC_BIG_ENDIAN, &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"));
11689 return offset;
11693 * TR 459.2: 6.5.8 BBF Dynamic NAT Block Port Range
11695 static int
11696 dissect_pfcp_enterprise_bbf_dynamic_nat_block_port_range(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11698 int offset = 0;
11699 uint32_t start, end;
11701 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_dynamic_nat_block_port_range_start_port, tvb, offset, 2, ENC_BIG_ENDIAN, &start);
11702 offset += 2;
11704 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_dynamic_nat_block_port_range_end_port, tvb, offset, 2, ENC_BIG_ENDIAN, &end);
11705 offset += 2;
11707 proto_item_append_text(proto_tree_get_parent(tree), "%u:%u", start, end);
11709 return offset;
11713 * TR 459.2: 6.5.9 BBF Event Time Stamp
11715 static int
11716 dissect_pfcp_enterprise_bbf_event_time_stamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
11718 int offset = 0;
11719 char *time_str;
11721 proto_tree_add_item_ret_time_string(tree, hf_pfcp_bbf_event_time_stamp, tvb, 0, 8, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
11722 offset += 8;
11723 proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
11725 return offset;
11728 static const value_string pfcp_bbf_direction_vals[] = {
11729 {0, "Input/Ingress/Upstream" },
11730 {1, "Output/Egress/Downstream" },
11731 {0, NULL}
11735 * TR 459i2: 6.9.13 BBF Direction IE
11737 static int
11738 dissect_pfcp_enterprise_bbf_direction(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11740 uint32_t value;
11742 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_direction, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
11743 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_direction_vals, "Unknown"));
11745 return 1;
11748 static const value_string pfcp_bbf_family_vals[] = {
11749 {0, "IPv4" },
11750 {1, "IPv6" },
11751 {2, "IPv46" },
11752 {3, "L2eth" },
11753 {0, NULL}
11757 * TR 459i2: 6.9.14 BBF Family IE
11759 static int
11760 dissect_pfcp_enterprise_bbf_family(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11762 uint32_t value;
11764 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_family, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
11765 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_family_vals, "Unknown"));
11767 return 1;
11771 * TR 459i2: 6.9.15 BBF SGRP Identifier
11773 static int
11774 dissect_pfcp_enterprise_bbf_sgrp_identifier(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11776 uint32_t value;
11778 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_sgrp_identifier, tvb, 0, 4, ENC_BIG_ENDIAN, &value);
11779 proto_item_append_text(proto_tree_get_parent(tree), " : %d", value);
11781 return 4;
11784 static 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}
11793 * TR 459i2: 6.9.16 BBF SGRP State
11795 static int
11796 dissect_pfcp_enterprise_bbf_sgrp_state(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11798 uint32_t value;
11800 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_sgrp_state, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
11801 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_sgrp_state_vals, "Unknown"));
11803 return 1;
11807 * TR 459i2: 6.9.17 BBF SGRP Flags
11809 static int
11810 dissect_pfcp_enterprise_bbf_sgrp_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
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
11819 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_bbf_sgrp_flags, ett_pfcp_bbf_sgrp_flags, flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT);
11821 return 1;
11824 static const value_string pfcp_bbf_operational_condition_vals[] = {
11825 {0, "Up" },
11826 {1, "Down" },
11827 {2, "Not ready" },
11828 {0, NULL}
11832 * TR 459i2: 6.9.18 BBF Operational Condition IE
11834 static int
11835 dissect_pfcp_enterprise_bbf_operational_condition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11837 uint32_t value;
11839 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_operational_condition, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
11840 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_operational_condition_vals, "Unknown"));
11842 return 1;
11846 * TR 459i2: 6.9.19 BBF IPv4 Prefix
11848 static int
11849 dissect_pfcp_enterprise_bbf_ipv4_prefix(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11851 uint32_t prefix_len;
11853 proto_tree_add_item(tree, hf_pfcp_bbf_ipv4_prefix, tvb, 0, 4, ENC_NA);
11854 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_ipv4_prefix_length, tvb, 4, 1, ENC_BIG_ENDIAN, &prefix_len);
11855 proto_item_append_text(proto_tree_get_parent(tree), " : %s/%d", tvb_ip_to_str(pinfo->pool, tvb, 0), prefix_len);
11857 return 5;
11861 * TR 459i2: 6.9.20 BBF IPv6 Prefix
11863 static int
11864 dissect_pfcp_enterprise_bbf_ipv6_prefix(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11866 uint32_t prefix_len;
11868 proto_tree_add_item(tree, hf_pfcp_bbf_ipv6_prefix, tvb, 0, 16, ENC_NA);
11869 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_ipv6_prefix_length, tvb, 16, 1, ENC_BIG_ENDIAN, &prefix_len);
11870 proto_item_append_text(proto_tree_get_parent(tree), " : %s/%d", tvb_ip6_to_str(pinfo->pool, tvb, 0), prefix_len);
11872 return 17;
11875 static const value_string pfcp_bbf_prefix_tag_usage_vals[] = {
11876 {0, "(reserved)" },
11877 {1, "Active SGRP" },
11878 {2, "Standby SGRP" },
11879 {0, NULL}
11883 * TR 459i2: 6.9.21 BBF Prefix Tag
11885 static int
11886 dissect_pfcp_enterprise_bbf_prefix_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11888 uint32_t value;
11889 int offset = 0;
11891 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_prefix_tag_usage, tvb, offset, 1, ENC_BIG_ENDIAN, &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;
11895 if (tvb_reported_length(tvb) > 1)
11897 uint32_t tag;
11899 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_prefix_tag, tvb, offset, 4, ENC_BIG_ENDIAN, &tag);
11900 proto_item_append_text(proto_tree_get_parent(tree), " : %d", tag);
11901 offset += 4;
11904 return offset;
11907 static 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}
11928 * TR 459i2: 6.9.22 BBF Error Code
11930 static int
11931 dissect_pfcp_enterprise_bbf_error_code(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11933 uint32_t value;
11935 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_error_code, tvb, 0, 2, ENC_BIG_ENDIAN, &value);
11936 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_error_code_vals, "Unknown"));
11938 return 2;
11942 * TR 459i2: 6.9.23 BBF Error Message
11944 static int
11945 dissect_pfcp_enterprise_bbf_error_message(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11947 proto_tree_add_item(tree, hf_pfcp_bbf_error_message, tvb, 0, tvb_reported_length(tvb), ENC_ASCII);
11949 return tvb_reported_length(tvb);
11953 * TR 459i2: 6.9.24 BBF Maximum ACL Chain Length
11955 static int
11956 dissect_pfcp_enterprise_bbf_maximum_acl_chain_length(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11958 uint32_t value;
11960 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_maximum_acl_chain_length, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
11961 proto_item_append_text(proto_tree_get_parent(tree), " : %d", value);
11963 return 1;
11967 * TR 459i2: 6.9.25 BBF Forwarding Capability
11969 static int
11970 dissect_pfcp_enterprise_bbf_forwarding_capability(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11972 uint32_t value;
11974 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_forwarding_capability, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
11975 proto_item_append_text(proto_tree_get_parent(tree), " : %d%%", value);
11977 return 1;
11980 static const value_string pfcp_bbf_connectivity_status_vals[] = {
11981 {0, "(reserved)" },
11982 {1, "Connected" },
11983 {2, "Isolated" },
11984 {0, NULL}
11988 * TR 459i2: 6.9.26 BBF Connectivity Status
11990 static int
11991 dissect_pfcp_enterprise_bbf_connectivity_status(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
11993 uint32_t value;
11995 proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_connectivity_status, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
11996 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_connectivity_status_vals, "Unknown"));
11998 return 1;
12002 * TR 459i2: 6.9.27 Vendor-Specific Node Report Type
12004 static int
12005 dissect_pfcp_enterprise_bbf_vendor_specific_node_report_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
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
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_ENDIAN, BMT_NO_FALSE | BMT_NO_INT);
12017 return 1;
12021 * TR 459i2: 6.9.28 BBF C-Tag Range
12023 static int
12024 dissect_pfcp_enterprise_bbf_ctag_range(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12026 static const crumb_spec_t start_crumbs[] = {
12027 { 0, 8 },
12028 { 12, 4 },
12029 { 0, 0 },
12031 static const crumb_spec_t end_crumbs[] = {
12032 { 0, 4 },
12033 { 8, 8 },
12034 { 0, 0 },
12037 uint64_t start, end;
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 "-%" PRIu64, start, end);
12043 return 3;
12047 * TR 459i2: 6.9.29 BBF S-Tag Range
12049 static int
12050 dissect_pfcp_enterprise_bbf_stag_range(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12052 static const crumb_spec_t start_crumbs[] = {
12053 { 0, 8 },
12054 { 12, 4 },
12055 { 0, 0 },
12057 static const crumb_spec_t end_crumbs[] = {
12058 { 0, 4 },
12059 { 8, 8 },
12060 { 0, 0 },
12063 uint64_t start, end;
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 "-%" PRIu64, start, end);
12069 return 3;
12072 static pfcp_generic_ie_t pfcp_bbf_ies[] = {
12073 /* TR-459 */
12074 { VENDOR_BROADBAND_FORUM, 32768 , "UP Function Features" , dissect_pfcp_enterprise_bbf_up_function_features , -1} ,
12075 { VENDOR_BROADBAND_FORUM, 32769 , "Logical Port" , dissect_pfcp_enterprise_bbf_logical_port , -1} ,
12076 { VENDOR_BROADBAND_FORUM, 32770 , "Outer Header Creation" , dissect_pfcp_enterprise_bbf_outer_header_creation , -1} ,
12077 { VENDOR_BROADBAND_FORUM, 32771 , "Outer Header Removal" , dissect_pfcp_enterprise_bbf_outer_header_removal , -1} ,
12078 { VENDOR_BROADBAND_FORUM, 32772 , "PPPoE Session ID" , dissect_pfcp_enterprise_bbf_pppoe_session_id , -1} ,
12079 { VENDOR_BROADBAND_FORUM, 32773 , "PPP protocol" , dissect_pfcp_enterprise_bbf_ppp_protocol , -1} ,
12080 { VENDOR_BROADBAND_FORUM, 32774 , "Verification Timers" , dissect_pfcp_enterprise_bbf_verification_timers , -1} ,
12081 { VENDOR_BROADBAND_FORUM, 32775 , "PPP LCP Magic Number" , dissect_pfcp_enterprise_bbf_ppp_lcp_magic_number , -1} ,
12082 { VENDOR_BROADBAND_FORUM, 32776 , "MTU" , dissect_pfcp_enterprise_bbf_mtu , -1} ,
12083 { VENDOR_BROADBAND_FORUM, 32777 , "L2TP Tunnel Endpoint" , dissect_pfcp_enterprise_bbf_l2tp_tunnel_endpoint , -1} ,
12084 { VENDOR_BROADBAND_FORUM, 32778 , "L2TP Session ID" , dissect_pfcp_enterprise_bbf_l2tp_session_id , -1} ,
12085 { VENDOR_BROADBAND_FORUM, 32779 , "L2TP Type" , dissect_pfcp_enterprise_bbf_l2tp_type , -1} ,
12086 { VENDOR_BROADBAND_FORUM, 32780 , "PPP LCP Connectivity" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12087 { VENDOR_BROADBAND_FORUM, 32781 , "L2TP Tunnel" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12088 /* TR-459.3 */
12089 { VENDOR_BROADBAND_FORUM, 32782 , "BBF Multicast Flags" , dissect_pfcp_enterprise_bbf_multicast_flags , -1} ,
12090 { VENDOR_BROADBAND_FORUM, 32783 , "BBF Multicast Query Parameters" , dissect_pfcp_enterprise_bbf_multicast_query_parameters , -1} ,
12091 { VENDOR_BROADBAND_FORUM, 32784 , "BBF Multicast Group Limit" , dissect_pfcp_enterprise_bbf_multicast_group_limit , -1} ,
12092 { VENDOR_BROADBAND_FORUM, 32785 , "BBF Multicast Protocol Control" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12093 /* TR-459.2 */
12094 { VENDOR_BROADBAND_FORUM, 32787 , "BBF Apply Action" , dissect_pfcp_enterprise_bbf_apply_action , -1} ,
12095 { VENDOR_BROADBAND_FORUM, 32788 , "BBF NAT External Port Range" , dissect_pfcp_enterprise_bbf_nat_external_port_range , -1} ,
12096 { VENDOR_BROADBAND_FORUM, 32789 , "BBF NAT Port Forward" , dissect_pfcp_enterprise_bbf_nat_port_forward , -1} ,
12097 { VENDOR_BROADBAND_FORUM, 32790 , "BBF Report Trigger" , dissect_pfcp_enterprise_bbf_reporting_trigger , -1} ,
12098 { VENDOR_BROADBAND_FORUM, 32791 , "BBF Dynamic NAT Block Port Range" , dissect_pfcp_enterprise_bbf_dynamic_nat_block_port_range , -1} ,
12099 { VENDOR_BROADBAND_FORUM, 32792 , "BBF Event Time Stamp" , dissect_pfcp_enterprise_bbf_event_time_stamp , -1} ,
12100 /* TR-459i2 */
12101 { VENDOR_BROADBAND_FORUM, 32793 , "Node Info Create" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12102 { VENDOR_BROADBAND_FORUM, 32794 , "Node Info Modify" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12103 { VENDOR_BROADBAND_FORUM, 32795 , "Node Info Delete" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12104 { VENDOR_BROADBAND_FORUM, 32796 , "Logical Port Report" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12105 { VENDOR_BROADBAND_FORUM, 32797 , "SGRP Notification Report" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12106 { VENDOR_BROADBAND_FORUM, 32798 , "Network Instance Report" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12107 { VENDOR_BROADBAND_FORUM, 32799 , "SGRP Error" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12108 { VENDOR_BROADBAND_FORUM, 32800 , "SGRP" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12109 { VENDOR_BROADBAND_FORUM, 32801 , "UP Subscriber Prefix" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12110 { VENDOR_BROADBAND_FORUM, 32802 , "ACL" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12111 { VENDOR_BROADBAND_FORUM, 32803 , "Direction" , dissect_pfcp_enterprise_bbf_direction , -1} ,
12112 { VENDOR_BROADBAND_FORUM, 32804 , "Family" , dissect_pfcp_enterprise_bbf_family , -1} ,
12113 { VENDOR_BROADBAND_FORUM, 32806 , "SGRP Identifier" , dissect_pfcp_enterprise_bbf_sgrp_identifier , -1} ,
12114 { VENDOR_BROADBAND_FORUM, 32807 , "SGRP State" , dissect_pfcp_enterprise_bbf_sgrp_state , -1} ,
12115 { VENDOR_BROADBAND_FORUM, 32808 , "SGRP Flags" , dissect_pfcp_enterprise_bbf_sgrp_flags , -1} ,
12116 { VENDOR_BROADBAND_FORUM, 32809 , "Operational Condition" , dissect_pfcp_enterprise_bbf_operational_condition , -1} ,
12117 { VENDOR_BROADBAND_FORUM, 32810 , "IPv4 Prefix" , dissect_pfcp_enterprise_bbf_ipv4_prefix, -1} ,
12118 { VENDOR_BROADBAND_FORUM, 32811 , "IPv6 Prefix" , dissect_pfcp_enterprise_bbf_ipv6_prefix, -1} ,
12119 { VENDOR_BROADBAND_FORUM, 32812 , "Prefix Tag" , dissect_pfcp_enterprise_bbf_prefix_tag, -1} ,
12120 { VENDOR_BROADBAND_FORUM, 32813 , "Error Code" , dissect_pfcp_enterprise_bbf_error_code , -1} ,
12121 { VENDOR_BROADBAND_FORUM, 32814 , "Error Message" , dissect_pfcp_enterprise_bbf_error_message , -1} ,
12122 { VENDOR_BROADBAND_FORUM, 32815 , "Maximum ACL Chain Length" , dissect_pfcp_enterprise_bbf_maximum_acl_chain_length , -1} ,
12123 { VENDOR_BROADBAND_FORUM, 32816 , "Forwarding Capability" , dissect_pfcp_enterprise_bbf_forwarding_capability , -1} ,
12124 { VENDOR_BROADBAND_FORUM, 32817 , "Connectivity Status" , dissect_pfcp_enterprise_bbf_connectivity_status , -1} ,
12125 { VENDOR_BROADBAND_FORUM, 32818 , "Vendor-Specific Node Report Type" , dissect_pfcp_enterprise_bbf_vendor_specific_node_report_type , -1} ,
12126 { VENDOR_BROADBAND_FORUM, 32819 , "Prefix Error" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12127 { VENDOR_BROADBAND_FORUM, 32820 , "C-Tag Range" , dissect_pfcp_enterprise_bbf_ctag_range , -1} ,
12128 { VENDOR_BROADBAND_FORUM, 32821 , "S-Tag Range" , dissect_pfcp_enterprise_bbf_stag_range , -1} ,
12131 /* Enterprise IE decoding Travelping */
12133 static int
12134 dissect_pfcp_enterprise_travelping_packet_measurement(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12136 int offset = 0;
12137 uint64_t flags;
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
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_ENDIAN, BMT_NO_FALSE | BMT_NO_INT, &flags);
12149 offset += 1;
12151 if ((flags & 0x1)) {
12152 proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_tonop, tvb, offset, 8, ENC_BIG_ENDIAN);
12153 offset += 8;
12155 if ((flags & 0x2)) {
12156 proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_ulnop, tvb, offset, 8, ENC_BIG_ENDIAN);
12157 offset += 8;
12159 if ((flags & 0x4)) {
12160 proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_dlnop, tvb, offset, 8, ENC_BIG_ENDIAN);
12161 offset += 8;
12164 return offset;
12167 static int
12168 dissect_pfcp_enterprise_travelping_build_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12170 /* Octet 7 to (n+4) Travelping Build Id */
12171 if (tvb_ascii_isprint(tvb, 0, -1))
12173 const uint8_t* string_value;
12174 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_build_id_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
12175 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12177 else
12179 proto_tree_add_item(tree, hf_pfcp_travelping_build_id, tvb, 0, -1, ENC_NA);
12182 return tvb_reported_length(tvb);
12185 static int
12186 dissect_pfcp_enterprise_travelping_now(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12188 int offset = 0;
12189 char *time_str;
12191 proto_tree_add_item_ret_time_string(tree, hf_pfcp_travelping_now, tvb, 0, 8, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
12192 offset += 8;
12194 proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
12196 return offset;
12199 static int
12200 dissect_pfcp_enterprise_travelping_start(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12202 int offset = 0;
12203 char *time_str;
12205 proto_tree_add_item_ret_time_string(tree, hf_pfcp_travelping_now, tvb, 0, 8, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
12206 offset += 8;
12208 proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
12210 return offset;
12213 static int
12214 dissect_pfcp_enterprise_travelping_stop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12216 int offset = 0;
12217 char *time_str;
12219 proto_tree_add_item_ret_time_string(tree, hf_pfcp_travelping_now, tvb, offset, 8, ENC_TIME_NTP | ENC_BIG_ENDIAN, pinfo->pool, &time_str);
12220 offset += 8;
12222 proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
12224 return offset;
12227 static int
12228 dissect_pfcp_enterprise_travelping_error_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12230 /* Octet 7 to (n+4) Travelping Error Message */
12231 if (tvb_ascii_isprint(tvb, 0, -1))
12233 const uint8_t* string_value;
12234 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_error_message_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
12235 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12237 else
12239 proto_tree_add_item(tree, hf_pfcp_travelping_error_message, tvb, 0, -1, ENC_NA);
12242 return tvb_reported_length(tvb);
12245 static int
12246 dissect_pfcp_enterprise_travelping_file_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12248 /* Octet 7 to (n+4) Travelping Error Message */
12249 if (tvb_ascii_isprint(tvb, 0, -1))
12251 const uint8_t* string_value;
12252 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_file_name_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
12253 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12255 else
12257 proto_tree_add_item(tree, hf_pfcp_travelping_file_name, tvb, 0, -1, ENC_NA);
12260 return tvb_reported_length(tvb);
12263 static int
12264 dissect_pfcp_enterprise_travelping_line_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12266 int offset = 0;
12267 uint32_t line_number;
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_ENDIAN, &line_number);
12271 offset += 4;
12273 proto_item_append_text(proto_tree_get_parent(tree), " : %u", line_number);
12275 return offset;
12278 static int
12279 dissect_pfcp_enterprise_travelping_ipfix_policy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12281 /* Octet 7 to (n+4) Travelping IPFIX Policy */
12282 if (tvb_ascii_isprint(tvb, 0, -1))
12284 const uint8_t* string_value;
12285 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_ipfix_policy_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
12286 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12288 else
12290 proto_tree_add_item(tree, hf_pfcp_travelping_ipfix_policy, tvb, 0, -1, ENC_NA);
12293 return tvb_reported_length(tvb);
12296 static int
12297 dissect_pfcp_enterprise_travelping_trace_parent(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12299 /* Octet 7 to (n+4) Travelping Trace Parent */
12300 if (tvb_ascii_isprint(tvb, 0, -1))
12302 const uint8_t* string_value;
12303 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_trace_parent_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
12304 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12306 else
12308 proto_tree_add_item(tree, hf_pfcp_travelping_trace_parent, tvb, 0, -1, ENC_NA);
12311 return tvb_reported_length(tvb);
12314 static int
12315 dissect_pfcp_enterprise_travelping_trace_state(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12317 /* Octet 7 to (n+4) Travelping Trace State */
12318 if (tvb_ascii_isprint(tvb, 0, -1))
12320 const uint8_t* string_value;
12321 proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_trace_state_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
12322 proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12324 else
12326 proto_tree_add_item(tree, hf_pfcp_travelping_trace_state, tvb, 0, -1, ENC_NA);
12329 return tvb_reported_length(tvb);
12333 static pfcp_generic_ie_t pfcp_travelping_ies[] = {
12334 { VENDOR_TRAVELPING, 32769 , "Packet Measurement" , dissect_pfcp_enterprise_travelping_packet_measurement , -1} ,
12335 { VENDOR_TRAVELPING, 32770 , "Build Id" , dissect_pfcp_enterprise_travelping_build_id , -1} ,
12336 { VENDOR_TRAVELPING, 32771 , "Now" , dissect_pfcp_enterprise_travelping_now , -1} ,
12337 { VENDOR_TRAVELPING, 32772 , "Start" , dissect_pfcp_enterprise_travelping_start , -1} ,
12338 { VENDOR_TRAVELPING, 32773 , "Stop" , dissect_pfcp_enterprise_travelping_stop , -1} ,
12339 { VENDOR_TRAVELPING, 32774 , "Error Report" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12340 { VENDOR_TRAVELPING, 32775 , "Error Message" , dissect_pfcp_enterprise_travelping_error_message , -1} ,
12341 { VENDOR_TRAVELPING, 32776 , "File Name" , dissect_pfcp_enterprise_travelping_file_name , -1} ,
12342 { VENDOR_TRAVELPING, 32777 , "Line Number" , dissect_pfcp_enterprise_travelping_line_number , -1} ,
12343 { VENDOR_TRAVELPING, 32778 , "Created NAT Binding" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12344 { VENDOR_TRAVELPING, 32779 , "IPFIX Policy" , dissect_pfcp_enterprise_travelping_ipfix_policy , -1} ,
12345 { VENDOR_TRAVELPING, 32780 , "Trace Information" , dissect_pfcp_grouped_ie_wrapper , -1} ,
12346 { VENDOR_TRAVELPING, 32781 , "Trace Parent" , dissect_pfcp_enterprise_travelping_trace_parent , -1} ,
12347 { VENDOR_TRAVELPING, 32782 , "Trace State" , dissect_pfcp_enterprise_travelping_trace_state , -1} ,
12350 /************************************ Nokia ***********************************/
12352 static int dissect_pfcp_nokia_sap_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12354 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_sap_template);
12357 static int dissect_pfcp_nokia_group_if_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12359 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_group_iface_template);
12362 static int dissect_pfcp_nokia_session_state_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12364 uint64_t value;
12366 proto_tree_add_item_ret_uint64(tree, hf_pfcp_nokia_session_state_id, tvb, 0, 8, ENC_BIG_ENDIAN, &value);
12367 proto_item_append_text(proto_tree_get_parent(tree), " : %" PRIu64, value);
12369 return 8;
12372 static const true_false_string tfs_nokia_detailed_stats_ie = { "Egress", "Ingress" };
12373 static const true_false_string tfs_nokia_detailed_stats_qp = { "Policer", "Queue" };
12374 static 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}
12382 static int dissect_pfcp_nokia_detailed_statistics(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
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},
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},
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},
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
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_ENDIAN, 0, &flags
12463 const bool flags_egress = !!(flags & 0x80000000);
12464 const bool flags_policer = !!(flags & 0x40000000);
12465 offset += 4;
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;
12473 int num = 0;
12474 for (int i = 0; bitmap != 0; bitmap <<= 8, i += 4)
12476 uint8_t mappedbyte = (bitmap >> 56) & 0xff;
12477 if (mappedbyte == 0) continue;
12479 for (int j = 1; mappedbyte != 0; mappedbyte >>= 2, j++)
12481 const uint8_t bits = mappedbyte & 0x03;
12482 int counter_index = i + j;
12483 if (bits == 0) continue;
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");
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_ENDIAN);
12490 proto_item_append_text(it, " - %s (%u) ", counter_name, counter_index);
12491 if (bits == 3)
12493 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, bitmap_offset, 8);
12494 break;
12497 const int len = bits == 1 ? 4 : 8;
12499 if (offset > 0 && (unsigned) offset + len > tvb_reported_length(tvb))
12501 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, tvb_reported_length(tvb) - offset);
12502 break;
12505 uint64_t octets;
12506 it = proto_tree_add_item_ret_uint64(tree, hf_pfcp_nokia_detailed_stats_octets, tvb, offset, len, ENC_BIG_ENDIAN, &octets);
12507 proto_item_set_text(it, "%s: %" PRIu64, counter_name, octets);
12509 num++;
12510 offset += len;
12514 if (num == 0)
12516 proto_item_append_text(bitmap_item, " (empty)");
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);
12523 return offset;
12526 static int dissect_pfcp_nokia_detailed_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12528 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_detailed_error);
12531 static int dissect_pfcp_nokia_qos_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12533 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_qos_override);
12536 static int dissect_pfcp_nokia_measurement_information(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12538 static int * const flags[] = {
12539 &hf_pfcp_spare_b7_b1,
12540 &hf_pfcp_nokia_measurement_info_b0_det,
12541 NULL
12544 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_nokia_measurement_info, ett_pfcp_nokia_measurement_info, flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT);
12546 return 1;
12549 static int dissect_pfcp_nokia_pfpsmreq_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
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
12558 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_nokia_pfcpsmreq_flags, ett_pfcp_nokia_pfcpsmreq_flags, flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT);
12560 return 1;
12563 static int dissect_pfcp_nokia_up_function_features(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
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,
12571 proto_tree_add_bitmask_list(tree, tvb, 0, 1, pfcp_nokia_up_function_features_flags, ENC_BIG_ENDIAN);
12573 return 1;
12576 static 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}
12584 static int dissect_pfcp_nokia_filter_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12586 uint32_t type;
12587 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_filter_override_type, tvb, 0, 1, ENC_BIG_ENDIAN, &type);
12589 if (tvb_reported_length(tvb) == 1)
12591 proto_item_append_text(proto_tree_get_parent(tree), " : %s: <disable>", val_to_str_const(type, nokia_filter_override_type_vals, "Unknown"));
12593 else
12595 proto_tree_add_item(tree, hf_pfcp_nokia_filter_override_name, tvb, 1, tvb_reported_length(tvb) - 1, ENC_ASCII);
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_ASCII));
12602 return tvb_reported_length(tvb);
12605 static int dissect_pfcp_nokia_intermediate_destination(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12607 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_intermediate_destination);
12610 static int dissect_pfcp_nokia_nat_isa_members(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12612 uint32_t num_members;
12614 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_nat_isa_members, tvb, 0, 1, ENC_BIG_ENDIAN, &num_members);
12615 proto_item_append_text(proto_tree_get_parent(tree), " : %u", num_members);
12617 return 1;
12620 static int dissect_pfcp_nokia_pfcphb_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
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
12630 proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_nokia_pfcphb_flags, ett_pfcp_nokia_pfcphb_flags, flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT);
12632 return 1;
12635 static int dissect_pfcp_nokia_l2tp_lcp_options(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12637 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_lcp_request, tvb, 0, -1, ENC_NA);
12639 return tvb_reported_length(tvb);
12642 static const value_string nokia_l2tp_auth_type_vals[] = {
12643 {0, "CHAP"},
12644 {1, "PAP"},
12645 {0, NULL}
12648 static int dissect_pfcp_nokia_l2tp_auth_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12650 uint32_t type;
12651 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_auth_type, tvb, 0, 1, ENC_BIG_ENDIAN, &type);
12652 proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(type, nokia_l2tp_auth_type_vals, "<Unknown>"));
12654 return 1;
12657 static int dissect_pfcp_nokia_l2tp_auth_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12659 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_auth_name);
12662 static int dissect_pfcp_nokia_l2tp_auth_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12664 uint32_t id;
12665 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_auth_id, tvb, 0, 1, ENC_BIG_ENDIAN, &id);
12666 proto_item_append_text(proto_tree_get_parent(tree), " : %u", id);
12668 return 1;
12671 static int dissect_pfcp_nokia_l2tp_auth_challenge(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12673 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_auth_challenge, tvb, 0, -1, ENC_NA);
12675 return tvb_reported_length(tvb);
12678 static int dissect_pfcp_nokia_l2tp_auth_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12680 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_auth_response, tvb, 0, -1, ENC_NA);
12682 return tvb_reported_length(tvb);
12685 static int dissect_pfcp_nokia_l2tp_endpoint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12687 if (tvb_reported_length(tvb) == 4)
12689 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address, tvb, 0, 4, ENC_BIG_ENDIAN);
12690 proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip_to_str(pinfo->pool, tvb, 0));
12692 else if (tvb_reported_length(tvb) == 16)
12694 proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address, tvb, 0, 16, ENC_NA);
12695 proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip6_to_str(pinfo->pool, tvb, 0));
12697 else
12699 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, -1);
12702 return tvb_reported_length(tvb);
12705 static int dissect_pfcp_nokia_l2tp_client_auth_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12707 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_client_auth_id);
12710 static int dissect_pfcp_nokia_l2tp_server_auth_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12712 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_server_auth_id);
12715 static int dissect_pfcp_nokia_l2tp_password(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12717 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_password);
12720 static int dissect_pfcp_nokia_l2tp_assignment_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12722 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_assignment_id);
12725 static int dissect_pfcp_nokia_l2tp_private_group_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12727 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_private_group_id);
12730 static 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)
12732 unsigned offset = 0;
12734 uint64_t flags_present;
12735 proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, flags_hf, flags_ett, flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT, &flags_present);
12736 offset += 4;
12738 for (int i = 0; flags[i] != NULL; i++)
12740 // is there a corresponding field?
12741 if (fields[i] == NULL) continue;
12743 // is the flag enabled?
12744 header_field_info* hf = proto_registrar_get_nth(*flags[i]);
12745 if ((flags_present & hf->bitmask) == 0) continue;
12747 // is the field actually there?
12748 if (offset >= length)
12750 proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, length);
12751 return tvb_reported_length(tvb);
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_NA);
12760 offset += len;
12763 return offset;
12766 static const value_string nokia_l2tp_params_algorithm_vals[] = {
12767 {0, "Weighted Access"},
12768 {1, "Weighted Random"},
12769 {2, "Existing First"},
12770 {0, NULL}
12773 static const value_string nokia_l2tp_params_avp_hiding_vals[] = {
12774 {0, "Nothing"},
12775 {1, "Sensitive Only"},
12776 {2, "All"},
12777 {0, NULL}
12780 static const value_string nokia_l2tp_params_never_always[] = {
12781 {0, "Never"},
12782 {1, "Always"},
12783 {0, NULL}
12786 static const value_string nokia_l2tp_params_infinite[] = {
12787 {0xffffff, "Infinite"},
12788 {0, NULL}
12791 static int dissect_pfcp_nokia_l2tp_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
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
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
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);
12827 static int dissect_pfcp_nokia_l2tp_ids(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12829 uint32_t local_tunnel, remote_tunnel, local_session, remote_session, call_serial_number;
12831 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_local_tunnel_id , tvb, 0, 2, ENC_BIG_ENDIAN, &local_tunnel);
12832 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_remote_tunnel_id , tvb, 2, 2, ENC_BIG_ENDIAN, &remote_tunnel);
12833 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_local_session_id , tvb, 4, 2, ENC_BIG_ENDIAN, &local_session);
12834 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_remote_session_id, tvb, 6, 2, ENC_BIG_ENDIAN, &remote_session);
12835 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_call_serial_num , tvb, 8, 4, ENC_BIG_ENDIAN, &call_serial_number);
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);
12839 return 12;
12842 static int dissect_pfcp_nokia_snat_inside_ip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12844 proto_tree_add_item(tree, hf_pfcp_nokia_snat_inside_ipv4_address, tvb, 0, 4, ENC_BIG_ENDIAN);
12845 proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip_to_str(pinfo->pool, tvb, 0));
12847 return 4;
12850 static int dissect_pfcp_nokia_access_line_circuit_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12852 proto_tree_add_item(tree, hf_pfcp_nokia_access_line_circuit_id, tvb, 0, -1, ENC_NA);
12854 return tvb_reported_length(tvb);
12857 static int dissect_pfcp_nokia_access_line_remote_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12859 proto_tree_add_item(tree, hf_pfcp_nokia_access_line_remote_id, tvb, 0, -1, ENC_NA);
12861 return tvb_reported_length(tvb);
12864 static int dissect_pfcp_nokia_access_line_params(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
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
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
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);
12907 static int dissect_pfcp_nokia_acct_session_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12909 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_acct_session_id);
12912 static int dissect_pfcp_nokia_fsg_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12914 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_fsg_template_name);
12917 static int dissect_pfcp_nokia_up_profiles(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12919 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_up_profile);
12922 static int dissect_pfcp_nokia_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12924 return call_dissector(gtpv2_uli_handle, tvb, pinfo, tree);
12927 static int dissect_pfcp_nokia_default_qos_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
12929 uint32_t id;
12931 proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_default_qos_id, tvb, 0, 1, ENC_BIG_ENDIAN, &id);
12932 proto_item_append_text(proto_tree_get_parent(tree), " : %u", id);
12934 return 1;
12937 static int dissect_pfcp_nokia_serving_node_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12939 int offset = 0;
12940 uint64_t serving_node_id_flags_val;
12941 bool firstField = true;
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
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_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS, &serving_node_id_flags_val);
12954 offset++;
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.
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_NA);
12967 proto_item_append_text(proto_tree_get_parent(tree), "%s IPv4 %s", firstField ? " :" : ",", tvb_ip_to_str(pinfo->pool, tvb, offset));
12968 firstField = false;
12969 offset += 4;
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_NA);
12974 proto_item_append_text(proto_tree_get_parent(tree), "%s IPv6 %s", firstField ? " :" : ",", tvb_ip6_to_str(pinfo->pool, tvb, offset));
12975 firstField = false;
12976 offset += 16;
12978 if (serving_node_id_flags_val & 0x4) {
12979 /* p to (p+15) UUID */
12980 e_guid_t guid;
12982 proto_tree_add_item(tree, hf_pfcp_nokia_serving_node_id_uuid, tvb, offset, 16, ENC_NA);
12983 tvb_get_guid(tvb, offset, &guid, ENC_BIG_ENDIAN);
12984 proto_item_append_text(proto_tree_get_parent(tree), "%s UUID %s", firstField ? " :" : ",", guid_to_str(pinfo->pool, &guid));
12985 offset += 16;
12988 return offset;
12991 static int dissect_pfcp_nokia_pcc_rule_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12993 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_pcc_rule_name);
12996 static int dissect_pfcp_nokia_calltrace_profile(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
12998 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_calltrace_profile);
13001 static int dissect_pfcp_nokia_custom_charging_group(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13003 return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_custom_charging_group);
13006 static pfcp_generic_ie_t pfcp_nokia_ies[] = {
13007 {VENDOR_NOKIA, 32774, "UP Aggregate Route", dissect_pfcp_grouped_ie_wrapper, -1},
13008 {VENDOR_NOKIA, 32775, "SAP Template", dissect_pfcp_nokia_sap_template, -1},
13009 {VENDOR_NOKIA, 32776, "Group Interface Template", dissect_pfcp_nokia_group_if_template, -1},
13010 {VENDOR_NOKIA, 32777, "State Id", dissect_pfcp_nokia_session_state_id, -1},
13011 {VENDOR_NOKIA, 32778, "Detailed Statistics", dissect_pfcp_nokia_detailed_statistics, -1},
13012 {VENDOR_NOKIA, 32779, "Detailed Error", dissect_pfcp_nokia_detailed_error, -1},
13013 {VENDOR_NOKIA, 32780, "Qos Override", dissect_pfcp_nokia_qos_override, -1},
13014 {VENDOR_NOKIA, 32781, "Measurement Information", dissect_pfcp_nokia_measurement_information, -1},
13015 {VENDOR_NOKIA, 32783, "PFCPSMReq-Flags", dissect_pfcp_nokia_pfpsmreq_flags, -1},
13016 {VENDOR_NOKIA, 32787, "UP Function Features", dissect_pfcp_nokia_up_function_features, -1},
13017 {VENDOR_NOKIA, 32788, "Create Filter Override", dissect_pfcp_nokia_filter_override, -1},
13018 {VENDOR_NOKIA, 32789, "Delete Filter Override", dissect_pfcp_nokia_filter_override, -1},
13019 {VENDOR_NOKIA, 32790, "Intermediate Destination", dissect_pfcp_nokia_intermediate_destination, -1},
13020 {VENDOR_NOKIA, 32791, "NAT ISA Members", dissect_pfcp_nokia_nat_isa_members, -1},
13021 {VENDOR_NOKIA, 32797, "PFCPHB-Flags", dissect_pfcp_nokia_pfcphb_flags, -1},
13022 {VENDOR_NOKIA, 32800, "L2TP First Rx LCP Conf Request", dissect_pfcp_nokia_l2tp_lcp_options, -1},
13023 {VENDOR_NOKIA, 32801, "L2TP Last Tx LCP Conf Request", dissect_pfcp_nokia_l2tp_lcp_options, -1},
13024 {VENDOR_NOKIA, 32802, "L2TP Last Rx LCP Conf Request", dissect_pfcp_nokia_l2tp_lcp_options, -1},
13025 {VENDOR_NOKIA, 32803, "L2TP Auth Type", dissect_pfcp_nokia_l2tp_auth_type, -1},
13026 {VENDOR_NOKIA, 32804, "L2TP Auth Name", dissect_pfcp_nokia_l2tp_auth_name, -1},
13027 {VENDOR_NOKIA, 32805, "L2TP Auth Id", dissect_pfcp_nokia_l2tp_auth_id, -1},
13028 {VENDOR_NOKIA, 32806, "L2TP Auth Challenge", dissect_pfcp_nokia_l2tp_auth_challenge, -1},
13029 {VENDOR_NOKIA, 32807, "L2TP Auth Response", dissect_pfcp_nokia_l2tp_auth_response, -1},
13030 {VENDOR_NOKIA, 32808, "L2TP Tunnel", dissect_pfcp_grouped_ie_wrapper, -1},
13031 {VENDOR_NOKIA, 32809, "L2TP Client Endpoint", dissect_pfcp_nokia_l2tp_endpoint, -1},
13032 {VENDOR_NOKIA, 32810, "L2TP Server Endpoint", dissect_pfcp_nokia_l2tp_endpoint, -1},
13033 {VENDOR_NOKIA, 32811, "L2TP Client Auth Id", dissect_pfcp_nokia_l2tp_client_auth_id, -1},
13034 {VENDOR_NOKIA, 32812, "L2TP Server Auth Id", dissect_pfcp_nokia_l2tp_server_auth_id, -1},
13035 {VENDOR_NOKIA, 32813, "L2TP Password", dissect_pfcp_nokia_l2tp_password, -1},
13036 {VENDOR_NOKIA, 32814, "L2TP Assignment Id", dissect_pfcp_nokia_l2tp_assignment_id, -1},
13037 {VENDOR_NOKIA, 32815, "L2TP Private Group Id", dissect_pfcp_nokia_l2tp_private_group_id, -1},
13038 {VENDOR_NOKIA, 32816, "L2TP Parameters", dissect_pfcp_nokia_l2tp_parameters, -1},
13039 {VENDOR_NOKIA, 32817, "L2TP Ids", dissect_pfcp_nokia_l2tp_ids, -1},
13040 {VENDOR_NOKIA, 32819, "SNAT Inside IP", dissect_pfcp_nokia_snat_inside_ip, -1},
13041 {VENDOR_NOKIA, 32820, "Access Line Circuit Id", dissect_pfcp_nokia_access_line_circuit_id, -1},
13042 {VENDOR_NOKIA, 32821, "Access Line Remote Id", dissect_pfcp_nokia_access_line_remote_id, -1},
13043 {VENDOR_NOKIA, 32822, "Access Line Params", dissect_pfcp_nokia_access_line_params, -1},
13044 {VENDOR_NOKIA, 32823, "Accounting Session Id", dissect_pfcp_nokia_acct_session_id, -1},
13045 {VENDOR_NOKIA, 32830, "FSG Template", dissect_pfcp_nokia_fsg_template, -1},
13046 {VENDOR_NOKIA, 32832, "UP Profiles", dissect_pfcp_nokia_up_profiles, -1},
13047 {VENDOR_NOKIA, 32833, "User Location Information", dissect_pfcp_nokia_uli, -1},
13048 {VENDOR_NOKIA, 32834, "Default Qos Id", dissect_pfcp_nokia_default_qos_id, -1},
13049 {VENDOR_NOKIA, 32835, "Serving Node Id", dissect_pfcp_nokia_serving_node_id, -1},
13050 {VENDOR_NOKIA, 32836, "PCC Rule Name", dissect_pfcp_nokia_pcc_rule_name, -1},
13051 {VENDOR_NOKIA, 32837, "Calltrace Profile", dissect_pfcp_nokia_calltrace_profile, -1},
13052 {VENDOR_NOKIA, 32838, "Custom Charging Group", dissect_pfcp_nokia_custom_charging_group, -1},
13055 static void
13056 pfcp_init(void)
13058 pfcp_session_count = 1;
13059 pfcp_session_table = g_hash_table_new(g_direct_hash, g_direct_equal);
13060 pfcp_frame_map = wmem_map_new(wmem_file_scope(), pfcp_info_hash, pfcp_info_equal);
13064 static void
13065 pfcp_cleanup(void)
13067 /* Free up state attached to the pfcp session structures */
13068 if (pfcp_session_table != NULL) {
13069 g_hash_table_destroy(pfcp_session_table);
13071 pfcp_session_table = NULL;
13074 void
13075 proto_register_pfcp(void)
13078 static hf_register_info hf_pfcp[] = {
13080 { &hf_pfcp_msg_type,
13081 { "Message Type", "pfcp.msg_type",
13082 FT_UINT8, BASE_DEC | BASE_EXT_STRING, &pfcp_message_type_ext, 0x0,
13083 NULL, HFILL }
13085 { &hf_pfcp_msg_length,
13086 { "Length", "pfcp.length",
13087 FT_UINT16, BASE_DEC, NULL, 0x0,
13088 NULL, HFILL }
13090 { &hf_pfcp_hdr_flags,
13091 { "Flags", "pfcp.flags",
13092 FT_UINT8, BASE_HEX, NULL, 0x0,
13093 NULL, HFILL }
13095 { &hf_pfcp_version,
13096 { "Version", "pfcp.version",
13097 FT_UINT8, BASE_DEC, NULL, 0xe0,
13098 NULL, HFILL }
13100 { &hf_pfcp_fo_flag,
13101 { "Follow On (FO)", "pfcp.fo_flag",
13102 FT_BOOLEAN, 8, NULL, 0x04,
13103 NULL, HFILL }
13105 { &hf_pfcp_mp_flag,
13106 { "Message Priority (MP)", "pfcp.mp_flag",
13107 FT_BOOLEAN, 8, NULL, 0x02,
13108 NULL, HFILL }
13110 { &hf_pfcp_s_flag,
13111 { "SEID (S)", "pfcp.s",
13112 FT_BOOLEAN, 8, NULL, 0x01,
13113 NULL, HFILL }
13115 { &hf_pfcp_spare_b0,
13116 { "Spare", "pfcp.spare_b0",
13117 FT_UINT8, BASE_DEC, NULL, 0x01,
13118 NULL, HFILL }
13120 { &hf_pfcp_spare_b1,
13121 { "Spare", "pfcp.spare_b1",
13122 FT_UINT8, BASE_DEC, NULL, 0x02,
13123 NULL, HFILL }
13125 { &hf_pfcp_spare_b2,
13126 { "Spare", "pfcp.spare_b2",
13127 FT_UINT8, BASE_DEC, NULL, 0x04,
13128 NULL, HFILL }
13130 { &hf_pfcp_spare_b3,
13131 { "Spare", "pfcp.spare_b3",
13132 FT_UINT8, BASE_DEC, NULL, 0x08,
13133 NULL, HFILL }
13135 { &hf_pfcp_spare_b4,
13136 { "Spare", "pfcp.spare_b4",
13137 FT_UINT8, BASE_DEC, NULL, 0x10,
13138 NULL, HFILL }
13140 { &hf_pfcp_spare_b5,
13141 { "Spare", "pfcp.spare_b5",
13142 FT_UINT8, BASE_DEC, NULL, 0x20,
13143 NULL, HFILL }
13145 { &hf_pfcp_spare_b6,
13146 { "Spare", "pfcp.spare_b6",
13147 FT_UINT8, BASE_DEC, NULL, 0x40,
13148 NULL, HFILL }
13150 { &hf_pfcp_spare_b7,
13151 { "Spare", "pfcp.spare_b7",
13152 FT_UINT8, BASE_DEC, NULL, 0x80,
13153 NULL, HFILL }
13155 { &hf_pfcp_spare_b7_b6,
13156 { "Spare", "pfcp.spare_b7_b6",
13157 FT_UINT8, BASE_DEC, NULL, 0xc0,
13158 NULL, HFILL }
13160 { &hf_pfcp_spare_b7_b5,
13161 { "Spare", "pfcp.spare_b7_b5",
13162 FT_UINT8, BASE_DEC, NULL, 0xe0,
13163 NULL, HFILL }
13165 { &hf_pfcp_spare_b7_b4,
13166 { "Spare", "pfcp.spare_b7_b4",
13167 FT_UINT8, BASE_DEC, NULL, 0xf0,
13168 NULL, HFILL }
13170 { &hf_pfcp_spare_b7_b3,
13171 { "Spare", "pfcp.spare_b7_b3",
13172 FT_UINT8, BASE_DEC, NULL, 0xf8,
13173 NULL, HFILL }
13175 { &hf_pfcp_spare_b7_b2,
13176 { "Spare", "pfcp.spare_b7_b2",
13177 FT_UINT8, BASE_DEC, NULL, 0xfc,
13178 NULL, HFILL }
13180 { &hf_pfcp_spare_b7_b1,
13181 { "Spare", "pfcp.spare_b7_b1",
13182 FT_UINT8, BASE_DEC, NULL, 0xfe,
13183 NULL, HFILL }
13185 { &hf_pfcp_spare_oct,
13186 { "Spare", "pfcp.spare_oct",
13187 FT_UINT8, BASE_DEC, NULL, 0x0,
13188 NULL, HFILL }
13190 { &hf_pfcp_spare_h0,
13191 { "Spare", "pfcp.spare_h0",
13192 FT_UINT8, BASE_DEC, NULL, 0x0f,
13193 NULL, HFILL }
13195 { &hf_pfcp_spare_h1,
13196 { "Spare", "pfcp.spare_h1",
13197 FT_UINT8, BASE_DEC, NULL, 0xf0,
13198 NULL, HFILL }
13200 { &hf_pfcp_spare,
13201 { "Spare", "pfcp.spare",
13202 FT_UINT8, BASE_DEC, NULL, 0x0,
13203 NULL, HFILL }
13205 { &hf_pfcp_seid,
13206 { "SEID", "pfcp.seid",
13207 FT_UINT64, BASE_HEX, NULL, 0x0,
13208 NULL, HFILL }
13210 { &hf_pfcp_seqno,
13211 { "Sequence Number", "pfcp.seqno",
13212 FT_UINT24, BASE_DEC, NULL, 0x0,
13213 NULL, HFILL }
13215 { &hf_pfcp_response_in,
13216 { "Response In", "pfcp.response_in",
13217 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
13218 "The response to this PFCP request is in this frame", HFILL }
13220 { &hf_pfcp_response_to,
13221 { "Response To", "pfcp.response_to",
13222 FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
13223 "This is a response to the PFCP request in this frame", HFILL }
13225 { &hf_pfcp_response_time,
13226 { "Response Time", "pfcp.response_time",
13227 FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
13228 "The time between the Request and the Response", HFILL }
13230 { &hf_pfcp_session,
13231 { "Session", "pfcp.session",
13232 FT_UINT32, BASE_DEC, NULL, 0,
13233 NULL, HFILL }
13235 { &hf_pfcp_mp,
13236 { "Message Priority", "pfcp.mp",
13237 FT_UINT24, BASE_DEC, NULL, 0xf0,
13238 NULL, HFILL }
13240 { &hf_pfcp_enterprise_id,
13241 { "Enterprise ID", "pfcp.enterprise_id",
13242 FT_UINT16, BASE_ENTERPRISES, STRINGS_ENTERPRISES,
13243 0x0, NULL, HFILL } },
13244 { &hf_pfcp_enterprise_data,
13245 { "Enterprise IE Data", "pfcp.enterprise_ie_data",
13246 FT_BYTES, BASE_NONE, NULL, 0,
13247 NULL, HFILL }
13249 { &hf_pfcp2_ie,
13250 { "IE Type", "pfcp.ie_type",
13251 FT_UINT16, BASE_DEC | BASE_EXT_STRING, &pfcp_ie_type_ext, 0x0,
13252 NULL, HFILL }
13254 { &hf_pfcp2_enterprise_ie,
13255 { "Enterprise specific IE Type", "pfcp.enterprise_ie",
13256 FT_UINT16, BASE_DEC, NULL, 0x0,
13257 NULL, HFILL }
13259 { &hf_pfcp2_ie_len,
13260 { "IE Length", "pfcp.ie_len",
13261 FT_UINT16, BASE_DEC, NULL, 0x0,
13262 NULL, HFILL }
13264 { &hf_pfcp_recovery_time_stamp,
13265 { "Recovery Time Stamp", "pfcp.recovery_time_stamp",
13266 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
13267 NULL, HFILL }
13269 { &hf_pfcp2_cause,
13270 { "Cause", "pfcp.cause",
13271 FT_UINT8, BASE_DEC, VALS(pfcp_cause_vals), 0x0,
13272 NULL, HFILL }
13274 { &hf_pfcp_node_id_type,
13275 { "Address Type", "pfcp.node_id_type",
13276 FT_UINT8, BASE_DEC, VALS(pfcp_node_id_type_vals), 0x0f,
13277 NULL, HFILL }
13279 { &hf_pfcp_node_id_ipv4,
13280 { "IPv4", "pfcp.node_id_ipv4",
13281 FT_IPv4, BASE_NONE, NULL, 0x0,
13282 NULL, HFILL }
13284 { &hf_pfcp_node_id_ipv6,
13285 { "IPv6", "pfcp.node_id_ipv6",
13286 FT_IPv6, BASE_NONE, NULL, 0x0,
13287 NULL, HFILL }
13289 { &hf_pfcp_node_id_fqdn,
13290 { "FQDN", "pfcp.node_id_fqdn",
13291 FT_STRING, BASE_NONE, NULL, 0x0,
13292 NULL, HFILL }
13294 { &hf_pfcp_b0_v6,
13295 { "V6 (IPv6)", "pfcp.f_seid_flags.v6",
13296 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
13297 NULL, HFILL }
13299 { &hf_pfcp_b1_v4,
13300 { "V4 (IPv4)", "pfcp.f_seid_flags.v4",
13301 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
13302 NULL, HFILL }
13304 { &hf_pfcp_f_seid_ipv4,
13305 { "IPv4 address", "pfcp.f_seid.ipv4",
13306 FT_IPv4, BASE_NONE, NULL, 0x0,
13307 NULL, HFILL }
13309 { &hf_pfcp_f_seid_ipv6,
13310 { "IPv6 address", "pfcp.f_seid.ipv6",
13311 FT_IPv6, BASE_NONE, NULL, 0x0,
13312 NULL, HFILL }
13314 { &hf_pfcp_pdr_id,
13315 { "Rule ID", "pfcp.pdr_id",
13316 FT_UINT16, BASE_DEC, NULL, 0x0,
13317 NULL, HFILL }
13319 { &hf_pfcp_precedence,
13320 { "Precedence", "pfcp.precedence",
13321 FT_UINT32, BASE_DEC, NULL, 0x0,
13322 NULL, HFILL }
13324 { &hf_pfcp_source_interface,
13325 { "Source Interface", "pfcp.source_interface",
13326 FT_UINT8, BASE_DEC, VALS(pfcp_source_interface_vals), 0x0f,
13327 NULL, HFILL }
13329 { &hf_pfcp_fteid_flg_spare,
13330 { "Spare", "pfcp.fteid_flg.spare",
13331 FT_UINT8, BASE_DEC, NULL, 0xf0,
13332 NULL, HFILL }
13334 { &hf_pfcp_fteid_flg_b3_ch_id,
13335 { "CHID (CHOOSE_ID)", "pfcp.f_teid_flags.ch_id",
13336 FT_BOOLEAN, 8, NULL, 0x08,
13337 NULL, HFILL }
13339 { &hf_pfcp_fteid_flg_b2_ch,
13340 { "CH (CHOOSE)", "pfcp.f_teid_flags.ch",
13341 FT_BOOLEAN, 8, NULL, 0x04,
13342 NULL, HFILL }
13344 { &hf_pfcp_fteid_flg_b1_v6,
13345 { "V6 (IPv6)", "pfcp.f_teid_flags.v6",
13346 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
13347 NULL, HFILL }
13349 { &hf_pfcp_fteid_flg_b0_v4,
13350 { "V4 (IPv4)", "pfcp.f_teid_flags.v4",
13351 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
13352 NULL, HFILL }
13354 { &hf_pfcp_f_teid_ch_id,
13355 { "Choose Id", "pfcp.f_teid.choose_id",
13356 FT_BYTES, BASE_NONE, NULL, 0x0,
13357 NULL, HFILL }
13359 { &hf_pfcp_f_teid_teid,
13360 { "TEID", "pfcp.f_teid.teid",
13361 FT_UINT32, BASE_HEX, NULL, 0x0,
13362 NULL, HFILL }
13364 { &hf_pfcp_f_teid_ipv4,
13365 { "IPv4 address", "pfcp.f_teid.ipv4_addr",
13366 FT_IPv4, BASE_NONE, NULL, 0x0,
13367 NULL, HFILL }
13369 { &hf_pfcp_f_teid_ipv6,
13370 { "IPv6 address", "pfcp.f_teid.ipv6_addr",
13371 FT_IPv6, BASE_NONE, NULL, 0x0,
13372 NULL, HFILL }
13374 { &hf_pfcp_network_instance,
13375 { "Network Instance", "pfcp.network_instance",
13376 FT_STRING, BASE_NONE, NULL, 0x0,
13377 NULL, HFILL }
13379 { &hf_pfcp_pdn_type,
13380 { "PDN Type", "pfcp.pdn_type",
13381 FT_UINT8, BASE_DEC, VALS(pfcp_pdn_type_vals), 0x7,
13382 NULL, HFILL }
13384 { &hf_pfcp_multiplier_value_digits,
13385 { "Value Digits", "pfcp.multiplier.value_digits",
13386 FT_UINT64, BASE_DEC, NULL, 0x0,
13387 NULL, HFILL }
13389 { &hf_pfcp_multiplier_exponent,
13390 { "Exponent", "pfcp.multiplier.exponent",
13391 FT_UINT32, BASE_DEC, NULL, 0x0,
13392 NULL, HFILL }
13394 { &hf_pfcp_failed_rule_id_type,
13395 { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
13396 FT_UINT8, BASE_DEC, VALS(pfcp_failed_rule_id_type_vals), 0x7,
13397 NULL, HFILL }
13399 { &hf_pfcp_time_quota_mechanism_bti_type,
13400 { "Base Time Interval Type", "pfcp.time_quota_mechanism_bti_type",
13401 FT_UINT8, BASE_DEC, VALS(pfcp_time_quota_mechanism_bti_type_vals), 0x3,
13402 NULL, HFILL }
13404 { &hf_pfcp_time_quota_mechanism_bti,
13405 { "Base Time Interval", "pfcp.time_quota_mechanism_bti",
13406 FT_UINT32, BASE_DEC, NULL, 0x0,
13407 NULL, HFILL }
13409 { &hf_pfcp_ue_ip_address_flag_b0_v6,
13410 { "V6 (IPv6)", "pfcp.ue_ip_address_flag.v6",
13411 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
13412 NULL, HFILL }
13414 { &hf_pfcp_ue_ip_address_flag_b1_v4,
13415 { "V4 (IPv4)", "pfcp.ue_ip_address_flag.v4",
13416 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
13417 NULL, HFILL }
13419 { &hf_pfcp_ue_ip_address_flag_b2_sd,
13420 { "S/D", "pfcp.ue_ip_address_flag.sd",
13421 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x04,
13422 NULL, HFILL }
13424 { &hf_pfcp_ue_ip_address_flag_b3_v6d,
13425 { "IPv6D", "pfcp.ue_ip_address_flag.v6d",
13426 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x08,
13427 NULL, HFILL }
13429 { &hf_pfcp_ue_ip_address_flag_b4_chv4,
13430 { "CHV4", "pfcp.ue_ip_address_flag.chv4",
13431 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x10,
13432 NULL, HFILL }
13434 { &hf_pfcp_ue_ip_address_flag_b5_chv6,
13435 { "CHV6", "pfcp.ue_ip_address_flag.chv6",
13436 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x20,
13437 NULL, HFILL }
13439 { &hf_pfcp_ue_ip_address_flag_b6_v6pl,
13440 { "IPV6PL", "pfcp.ue_ip_address_flag.v6pl",
13441 FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x40,
13442 NULL, HFILL }
13444 { &hf_pfcp_ue_ip_addr_ipv4,
13445 { "IPv4 address", "pfcp.ue_ip_addr_ipv4",
13446 FT_IPv4, BASE_NONE, NULL, 0x0,
13447 NULL, HFILL }
13449 { &hf_pfcp_ue_ip_add_ipv6,
13450 { "IPv6 address", "pfcp.ue_ip_addr_ipv6",
13451 FT_IPv6, BASE_NONE, NULL, 0x0,
13452 NULL, HFILL }
13454 { &hf_pfcp_ue_ip_add_ipv6_prefix_delegation_bits,
13455 { "IPv6 Prefix Delegation Bits", "pfcp.ue_ip_addr_ipv6_prefix",
13456 FT_UINT8, BASE_DEC, NULL, 0x0,
13457 NULL, HFILL }
13459 { &hf_pfcp_ue_ip_add_ipv6_prefix_length,
13460 { "IPv6 Prefix Length", "pfcp.ue_ip_addr_ipv6_prefix_length",
13461 FT_UINT8, BASE_DEC, NULL, 0x0,
13462 NULL, HFILL }
13464 { &hf_pfcp_application_id,
13465 { "Application Identifier", "pfcp.application_id",
13466 FT_BYTES, BASE_NONE, NULL, 0x0,
13467 NULL, HFILL }
13469 { &hf_pfcp_application_id_str,
13470 { "Application Identifier", "pfcp.application_id_str",
13471 FT_STRING, BASE_NONE, NULL, 0x0,
13472 NULL, HFILL }
13474 { &hf_pfcp_sdf_filter_flags_b0_fd,
13475 { "FD (Flow Description)", "pfcp.sdf_filter.fd",
13476 FT_BOOLEAN, 8, NULL, 0x01,
13477 NULL, HFILL }
13479 { &hf_pfcp_sdf_filter_flags_b1_ttc,
13480 { "TTC (ToS Traffic Class)", "pfcp.sdf_filter.ttc",
13481 FT_BOOLEAN, 8, NULL, 0x02,
13482 NULL, HFILL }
13484 { &hf_pfcp_sdf_filter_flags_b2_spi,
13485 { "SPI (Security Parameter Index)", "pfcp.sdf_filter.spi",
13486 FT_BOOLEAN, 8, NULL, 0x04,
13487 NULL, HFILL }
13489 { &hf_pfcp_sdf_filter_flags_b3_fl,
13490 { "FL (Flow Label)", "pfcp.sdf_filter.fl",
13491 FT_BOOLEAN, 8, NULL, 0x08,
13492 NULL, HFILL }
13494 { &hf_pfcp_sdf_filter_flags_b4_bid,
13495 { "BID (Bidirectional SDF Filter)", "pfcp.sdf_filter.bid",
13496 FT_BOOLEAN, 8, NULL, 0x10,
13497 NULL, HFILL }
13499 { &hf_pfcp_flow_desc_len,
13500 { "Length of Flow Description", "pfcp.flow_desc_len",
13501 FT_UINT16, BASE_DEC, NULL, 0x0,
13502 NULL, HFILL }
13504 { &hf_pfcp_flow_desc,
13505 { "Flow Description", "pfcp.flow_desc",
13506 FT_STRING, BASE_NONE, NULL, 0x0,
13507 NULL, HFILL }
13509 { &hf_pfcp_traffic_class,
13510 { "ToS Traffic Class", "pfcp.traffic_class",
13511 FT_UINT8, BASE_HEX, NULL, 0x0,
13512 NULL, HFILL }
13514 { &hf_pfcp_traffic_mask,
13515 { "Mask field", "pfcp.traffic_mask",
13516 FT_UINT8, BASE_HEX, NULL, 0x0,
13517 NULL, HFILL }
13519 { &hf_pfcp_traffic_dscp,
13520 {"DSCP", "pfcp.traffic_dscp",
13521 FT_STRING, BASE_NONE, NULL, 0x0,
13522 NULL, HFILL}
13524 { &hf_pfcp_spi,
13525 { "Security Parameter Index", "pfcp.spi",
13526 FT_UINT32, BASE_HEX, NULL, 0x0,
13527 NULL, HFILL }
13529 { &hf_pfcp_flow_label_spare_bit,
13530 { "Spare bit", "pfcp.flow_label_spare_bit",
13531 FT_UINT8, BASE_DEC, NULL, 0x0,
13532 NULL, HFILL }
13534 { &hf_pfcp_flow_label,
13535 { "Flow Label", "pfcp.flow_label",
13536 FT_UINT24, BASE_HEX, NULL, 0x0FFFFF,
13537 NULL, HFILL }
13539 { &hf_pfcp_sdf_filter_id,
13540 { "SDF Filter ID", "pfcp.sdf_filter_id",
13541 FT_UINT32, BASE_DEC, NULL, 0x0,
13542 NULL, HFILL }
13545 { &hf_pfcp_out_hdr_desc,
13546 { "Outer Header Removal Description", "pfcp.out_hdr_desc",
13547 FT_UINT8, BASE_DEC, VALS(pfcp_out_hdr_desc_vals), 0x0,
13548 NULL, HFILL }
13550 { &hf_pfcp_gtpu_ext_hdr_del_b0_pdu_sess_cont,
13551 { "PDU Session Container to be deleted", "pfcp.gtpu_ext_hdr_del.pdu_sess_cont",
13552 FT_BOOLEAN, 8, NULL, 0x01,
13553 NULL, HFILL }
13555 { &hf_pfcp_far_id_flg,
13556 { "Allocation type", "pfcp.far_id_flg",
13557 FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs), 0x80000000,
13558 NULL, HFILL }
13560 { &hf_pfcp_far_id,
13561 { "FAR ID", "pfcp.far_id",
13562 FT_UINT32, BASE_DEC, NULL, 0x7fffffff,
13563 NULL, HFILL }
13565 { &hf_pfcp_urr_id_flg,
13566 { "Allocation type", "pfcp.urr_id_flg",
13567 FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs), 0x80000000,
13568 NULL, HFILL }
13570 { &hf_pfcp_urr_id,
13571 { "URR ID", "pfcp.urr_id",
13572 FT_UINT32, BASE_DEC, NULL, 0x7fffffff,
13573 NULL, HFILL }
13575 { &hf_pfcp_qer_id_flg,
13576 { "Allocation type", "pfcp.qer_id_flg",
13577 FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs), 0x80000000,
13578 NULL, HFILL }
13580 { &hf_pfcp_qer_id,
13581 { "QER ID", "pfcp.qer_id",
13582 FT_UINT32, BASE_DEC, NULL, 0x7fffffff,
13583 NULL, HFILL }
13585 { &hf_pfcp_predef_rules_name,
13586 { "Predefined Rules Name", "pfcp.predef_rules_name",
13587 FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
13588 NULL, HFILL }
13590 { &hf_pfcp_apply_action_flags_o5_b0_drop,
13591 { "DROP (Drop)", "pfcp.apply_action.drop",
13592 FT_BOOLEAN, 8, NULL, 0x01,
13593 NULL, HFILL }
13595 { &hf_pfcp_apply_action_flags_o5_b1_forw,
13596 { "FORW (Forward)", "pfcp.apply_action.forw",
13597 FT_BOOLEAN, 8, NULL, 0x02,
13598 NULL, HFILL }
13600 { &hf_pfcp_apply_action_flags_o5_b2_buff,
13601 { "BUFF (Buffer)", "pfcp.apply_action.buff",
13602 FT_BOOLEAN, 8, NULL, 0x04,
13603 NULL, HFILL }
13605 { &hf_pfcp_apply_action_flags_o5_b3_nocp,
13606 { "NOCP (Notify the CP function)", "pfcp.apply_action.nocp",
13607 FT_BOOLEAN, 8, NULL, 0x08,
13608 NULL, HFILL }
13610 { &hf_pfcp_apply_action_flags_o5_b4_dupl,
13611 { "DUPL (Duplicate)", "pfcp.apply_action.dupl",
13612 FT_BOOLEAN, 8, NULL, 0x10,
13613 NULL, HFILL }
13615 { &hf_pfcp_apply_action_flags_o5_b5_ipma,
13616 { "IPMA (IP Multicast Accept)", "pfcp.apply_action.ipma",
13617 FT_BOOLEAN, 8, NULL, 0x20,
13618 NULL, HFILL }
13620 { &hf_pfcp_apply_action_flags_o5_b6_ipmd,
13621 { "IPMD (IP Multicast Deny)", "pfcp.apply_action.ipmd",
13622 FT_BOOLEAN, 8, NULL, 0x40,
13623 NULL, HFILL }
13625 { &hf_pfcp_apply_action_flags_o5_b7_dfrt,
13626 { "DFRT (Duplicate for Redundant Transmission)", "pfcp.apply_action.dfrt",
13627 FT_BOOLEAN, 8, NULL, 0x80,
13628 NULL, HFILL }
13630 { &hf_pfcp_apply_action_flags_o6_b0_edrt,
13631 { "EDRT (Eliminate Duplicate Packets for Redundant Transmission)", "pfcp.apply_action.edrt",
13632 FT_BOOLEAN, 8, NULL, 0x01,
13633 NULL, HFILL }
13635 { &hf_pfcp_apply_action_flags_o6_b1_bdpn,
13636 { "BDPN (Buffered Downlink Packet Notification)", "pfcp.apply_action.bdpn",
13637 FT_BOOLEAN, 8, NULL, 0x02,
13638 NULL, HFILL }
13640 { &hf_pfcp_apply_action_flags_o6_b2_ddpn,
13641 { "DDPN (Discared Downlink Packet Notification)", "pfcp.apply_action.ddpn",
13642 FT_BOOLEAN, 8, NULL, 0x04,
13643 NULL, HFILL }
13645 { &hf_pfcp_apply_action_flags_o6_b3_fssm,
13646 { "FSSM (Forward packets to lower layer SSM)", "pfcp.apply_action.fssm",
13647 FT_BOOLEAN, 8, NULL, 0x08,
13648 NULL, HFILL }
13650 { &hf_pfcp_apply_action_flags_o6_b4_mbsu,
13651 { "MBSU (Forward and replicate MBS data using Unicast transport)", "pfcp.apply_action.mbsu",
13652 FT_BOOLEAN, 8, NULL, 0x10,
13653 NULL, HFILL }
13656 { &hf_pfcp_bar_id,
13657 { "BAR ID", "pfcp.bar_id",
13658 FT_UINT8, BASE_DEC, NULL, 0x0,
13659 NULL, HFILL }
13661 { &hf_pfcp_fq_csid_node_id_type,
13662 { "FQ-CSID Node-ID Type", "pfcp.fq_csid_node_id_type",
13663 FT_UINT8, BASE_DEC, VALS(pfcp_fq_csid_node_id_type_vals), 0xf0,
13664 NULL, HFILL }
13666 { &hf_pfcp_num_csid,
13667 { "Number of CSID", "pfcp.num_csid",
13668 FT_UINT8, BASE_DEC, NULL, 0x0f,
13669 NULL, HFILL }
13671 { &hf_pfcp_fq_csid_node_id_ipv4,
13672 { "Node-Address", "pfcp.q_csid_node_id.ipv4",
13673 FT_IPv4, BASE_NONE, NULL, 0x0,
13674 NULL, HFILL }
13676 { &hf_pfcp_fq_csid_node_id_ipv6,
13677 { "Node-Address", "pfcp.q_csid_node_id.ipv6",
13678 FT_IPv6, BASE_NONE, NULL, 0x0,
13679 NULL, HFILL }
13681 { &hf_pfcp_fq_csid_node_id_mcc_mnc,
13682 { "Node-Address MCC MNC", "pfcp.q_csid_node_id.mcc_mnc",
13683 FT_UINT32, BASE_DEC, NULL, 0xfffff000,
13684 NULL, HFILL }
13686 { &hf_pfcp_fq_csid_node_id_int,
13687 { "Node-Address Number", "pfcp.q_csid_node_id.int",
13688 FT_UINT32, BASE_DEC, NULL, 0x00000fff,
13689 NULL, HFILL }
13691 { &hf_pfcp_fq_csid,
13692 { "PDN Connection Set Identifier (CSID)", "pfcp.csid",
13693 FT_UINT16, BASE_DEC, NULL, 0x0,
13694 NULL, HFILL }
13696 { &hf_pfcp_fq_csid_node_type,
13697 { "Node Type", "pfcp.fq_csid_node_type",
13698 FT_UINT8, BASE_DEC, VALS(pfcp_fq_csid_node_type_vals), 0x0f,
13699 NULL, HFILL }
13701 { &hf_pfcp_measurement_period,
13702 { "Measurement Period", "pfcp.measurement_period",
13703 FT_UINT32, BASE_DEC, NULL, 0x0,
13704 NULL, HFILL }
13706 { &hf_pfcp_duration_measurement,
13707 { "Duration", "pfcp.duration_measurement",
13708 FT_UINT32, BASE_DEC, NULL, 0x0,
13709 NULL, HFILL }
13711 { &hf_pfcp_time_of_first_packet,
13712 { "Time of First Packet", "pfcp.time_of_first_packet",
13713 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
13714 NULL, HFILL }
13716 { &hf_pfcp_time_of_last_packet,
13717 { "Time of Last Packet", "pfcp.time_of_last_packet",
13718 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
13719 NULL, HFILL }
13721 { &hf_pfcp_dst_interface,
13722 { "Interface", "pfcp.dst_interface",
13723 FT_UINT8, BASE_DEC, VALS(pfcp_dst_interface_vals), 0x0f,
13724 NULL, HFILL }
13726 { &hf_pfcp_redirect_address_type,
13727 { "Redirect Address Type", "pfcp.redirect_address_type",
13728 FT_UINT8, BASE_DEC, VALS(pfcp_redirect_address_type_vals), 0x0f,
13729 NULL, HFILL }
13731 { &hf_pfcp_redirect_server_addr_len,
13732 { "Redirect Server Address Length", "pfcp.redirect_server_addr_len",
13733 FT_UINT16, BASE_DEC, NULL, 0x0,
13734 NULL, HFILL }
13736 { &hf_pfcp_redirect_server_address,
13737 { "Redirect Server Address", "pfcp.redirect_server_address",
13738 FT_STRING, BASE_NONE, NULL, 0x0,
13739 NULL, HFILL }
13741 { &hf_pfcp_other_redirect_server_addr_len,
13742 { "Other Redirect Server Address Length", "pfcp.other_redirect_server_addr_len",
13743 FT_UINT16, BASE_DEC, NULL, 0x0,
13744 NULL, HFILL }
13746 { &hf_pfcp_other_redirect_server_address,
13747 { "Other Redirect Server Address", "pfcp.other_redirect_server_address",
13748 FT_STRING, BASE_NONE, NULL, 0x0,
13749 NULL, HFILL }
13751 { &hf_pfcp_redirect_port,
13752 { "Redirect Port", "pfcp.redirect_port",
13753 FT_UINT16, BASE_DEC, NULL, 0x0,
13754 NULL, HFILL }
13756 { &hf_pfcp_outer_hdr_desc_o5_b0_gtp_udp_ipv4,
13757 { "GTP-U/UDP/IPv4", "pfcp.pfcp_outer_hdr_desc.gtpu_udp_ipv4",
13758 FT_BOOLEAN, 16, NULL, 0x0100,
13759 NULL, HFILL }
13761 { &hf_pfcp_outer_hdr_desc_o5_b1_gtp_udp_ipv6,
13762 { "GTP-U/UDP/IPv6", "pfcp.pfcp_outer_hdr_desc.gtpu_udp_ipv6",
13763 FT_BOOLEAN, 16, NULL, 0x0200,
13764 NULL, HFILL }
13766 { &hf_pfcp_outer_hdr_desc_o5_b2_udp_ipv4,
13767 { "UDP/IPv4", "pfcp.pfcp_outer_hdr_desc.udp_ipv4",
13768 FT_BOOLEAN, 16, NULL, 0x0400,
13769 NULL, HFILL }
13771 { &hf_pfcp_outer_hdr_desc_o5_b3_udp_ipv6,
13772 { "UDP/IPv6", "pfcp.pfcp_outer_hdr_desc.udp_ipv6",
13773 FT_BOOLEAN, 16, NULL, 0x0800,
13774 NULL, HFILL }
13776 { &hf_pfcp_outer_hdr_desc_o5_b4_ipv4,
13777 { "IPv4", "pfcp.pfcp_outer_hdr_desc.ipv4",
13778 FT_BOOLEAN, 16, NULL, 0x1000,
13779 NULL, HFILL }
13781 { &hf_pfcp_outer_hdr_desc_o5_b5_ipv6,
13782 { "IPv6", "pfcp.pfcp_outer_hdr_desc.ipv6",
13783 FT_BOOLEAN, 16, NULL, 0x2000,
13784 NULL, HFILL }
13786 { &hf_pfcp_outer_hdr_desc_o5_b6_ctag,
13787 { "C-TAG", "pfcp.pfcp_outer_hdr_desc.ctag",
13788 FT_BOOLEAN, 16, NULL, 0x4000,
13789 NULL, HFILL }
13791 { &hf_pfcp_outer_hdr_desc_o5_b7_stag,
13792 { "S-TAG", "pfcp.pfcp_outer_hdr_desc.stag",
13793 FT_BOOLEAN, 16, NULL, 0x8000,
13794 NULL, HFILL }
13796 { &hf_pfcp_outer_hdr_desc_o6_b0_n19,
13797 { "N19 Indication", "pfcp.pfcp_outer_hdr_desc.n19",
13798 FT_BOOLEAN, 16, NULL, 0x0001,
13799 NULL, HFILL }
13801 { &hf_pfcp_outer_hdr_desc_o6_b1_n6,
13802 { "N6 Indication", "pfcp.pfcp_outer_hdr_desc.n6",
13803 FT_BOOLEAN, 16, NULL, 0x0002,
13804 NULL, HFILL }
13806 { &hf_pfcp_outer_hdr_desc_o6_b2_ssm_cteid,
13807 { "Low Layer SSM and C-TEID", "pfcp.pfcp_outer_hdr_desc.ssm_cteid",
13808 FT_BOOLEAN, 16, NULL, 0x0004,
13809 NULL, HFILL }
13811 { &hf_pfcp_outer_hdr_desc_o6_spare,
13812 { "Spare", "pfcp.pfcp_outer_hdr_desc.spare",
13813 FT_UINT16, BASE_DEC, NULL, 0x00f8,
13814 NULL, HFILL }
13816 { &hf_pfcp_outer_hdr_creation_teid,
13817 { "TEID", "pfcp.outer_hdr_creation.teid",
13818 FT_UINT32, BASE_HEX, NULL, 0x0,
13819 NULL, HFILL }
13821 { &hf_pfcp_outer_hdr_creation_ipv4,
13822 { "IPv4 Address", "pfcp.outer_hdr_creation.ipv4",
13823 FT_IPv4, BASE_NONE, NULL, 0x0,
13824 NULL, HFILL }
13826 { &hf_pfcp_outer_hdr_creation_ipv6,
13827 { "IPv6 Address", "pfcp.outer_hdr_creation.ipv6",
13828 FT_IPv6, BASE_NONE, NULL, 0x0,
13829 NULL, HFILL }
13831 { &hf_pfcp_outer_hdr_creation_port,
13832 { "Port Number", "pfcp.outer_hdr_creation.port",
13833 FT_UINT16, BASE_DEC, NULL, 0x0,
13834 NULL, HFILL }
13836 { &hf_pfcp_time_threshold,
13837 { "Time Threshold", "pfcp.time_threshold",
13838 FT_UINT32, BASE_DEC, NULL, 0x0,
13839 NULL, HFILL }
13841 { &hf_pfcp_forwarding_policy_id_len,
13842 { "Forwarding Policy Identifier Length", "pfcp.forwarding_policy_id_len",
13843 FT_UINT8, BASE_DEC, NULL, 0x0,
13844 NULL, HFILL }
13846 { &hf_pfcp_forwarding_policy_id,
13847 { "Forwarding Policy Identifier", "pfcp.forwarding_policy_id",
13848 FT_BYTES, BASE_NONE, NULL, 0x0,
13849 NULL, HFILL }
13851 { &hf_pfcp_measurement_method_flags_b0_durat,
13852 { "DURAT (Duration)", "pfcp.measurement_method_flags.durat",
13853 FT_BOOLEAN, 8, NULL, 0x01,
13854 NULL, HFILL }
13856 { &hf_pfcp_measurement_method_flags_b1_volume,
13857 { "VOLUM (Volume)", "pfcp.measurement_method_flags.volume",
13858 FT_BOOLEAN, 8, NULL, 0x02,
13859 NULL, HFILL }
13861 { &hf_pfcp_measurement_method_flags_b2_event,
13862 { "EVENT (Event)", "pfcp.measurement_method_flags.event",
13863 FT_BOOLEAN, 8, NULL, 0x04,
13864 NULL, HFILL }
13866 { &hf_pfcp_subsequent_time_threshold,
13867 { "Subsequent Time Threshold", "pfcp.subsequent_time_threshold",
13868 FT_UINT32, BASE_DEC, NULL, 0x0,
13869 NULL, HFILL }
13871 { &hf_pfcp_inactivity_detection_time,
13872 { "Inactivity Detection Time", "pfcp.inactivity_detection_time",
13873 FT_UINT32, BASE_DEC, NULL, 0x0,
13874 NULL, HFILL }
13876 { &hf_pfcp_monitoring_time,
13877 { "Monitoring Time", "pfcp.monitoring_time",
13878 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
13879 NULL, HFILL }
13881 { &hf_pfcp_reporting_triggers_o5_b0_perio,
13882 { "PERIO (Periodic Reporting)", "pfcp.reporting_triggers_flags.perio",
13883 FT_BOOLEAN, 8, NULL, 0x01,
13884 NULL, HFILL }
13886 { &hf_pfcp_reporting_triggers_o5_b1_volth,
13887 { "VOLTH (Volume Threshold)", "pfcp.reporting_triggers_flags.volth",
13888 FT_BOOLEAN, 8, NULL, 0x02,
13889 NULL, HFILL }
13891 { &hf_pfcp_reporting_triggers_o5_b2_timth,
13892 { "TIMTH (Time Threshold)", "pfcp.reporting_triggers_flags.timth",
13893 FT_BOOLEAN, 8, NULL, 0x04,
13894 NULL, HFILL }
13896 { &hf_pfcp_reporting_triggers_o5_b3_quhti,
13897 { "QUHTI (Quota Holding Time)", "pfcp.reporting_triggers_flags.quhti",
13898 FT_BOOLEAN, 8, NULL, 0x08,
13899 NULL, HFILL }
13901 { &hf_pfcp_reporting_triggers_o5_b4_start,
13902 { "START (Start of Traffic)", "pfcp.reporting_triggers_flags.start",
13903 FT_BOOLEAN, 8, NULL, 0x10,
13904 NULL, HFILL }
13906 { &hf_pfcp_reporting_triggers_o5_b5_stopt,
13907 { "STOPT (Stop of Traffic)", "pfcp.reporting_triggers_flags.stopt",
13908 FT_BOOLEAN, 8, NULL, 0x20,
13909 NULL, HFILL }
13911 { &hf_pfcp_reporting_triggers_o5_b6_droth,
13912 { "DROTH (Dropped DL Traffic Threshold)", "pfcp.reporting_triggers_flags.droth",
13913 FT_BOOLEAN, 8, NULL, 0x40,
13914 NULL, HFILL }
13916 { &hf_pfcp_reporting_triggers_o5_b7_liusa,
13917 { "LIUSA (Linked Usage Reporting)", "pfcp.reporting_triggers_flags.liusa",
13918 FT_BOOLEAN, 8, NULL, 0x80,
13919 NULL, HFILL }
13921 { &hf_pfcp_reporting_triggers_o6_b0_volqu,
13922 { "VOLQU (Volume Quota)", "pfcp.reporting_triggers_flags.volqu",
13923 FT_BOOLEAN, 8, NULL, 0x01,
13924 NULL, HFILL }
13926 { &hf_pfcp_reporting_triggers_o6_b1_timqu,
13927 { "TIMQU (Time Quota)", "pfcp.reporting_triggers_flags.timqu",
13928 FT_BOOLEAN, 8, NULL, 0x02,
13929 NULL, HFILL }
13931 { &hf_pfcp_reporting_triggers_o6_b2_envcl,
13932 { "ENVCL (Envelope Closure)", "pfcp.reporting_triggers_flags.envcl",
13933 FT_BOOLEAN, 8, NULL, 0x04,
13934 NULL, HFILL }
13936 { &hf_pfcp_reporting_triggers_o6_b3_macar,
13937 { "MACAR (MAC Addresses Reporting)", "pfcp.reporting_triggers_flags.macar",
13938 FT_BOOLEAN, 8, NULL, 0x08,
13939 NULL, HFILL }
13941 { &hf_pfcp_reporting_triggers_o6_b4_eveth,
13942 { "EVETH (Event Threshold)", "pfcp.reporting_triggers_flags.eveth",
13943 FT_BOOLEAN, 8, NULL, 0x10,
13944 NULL, HFILL }
13946 { &hf_pfcp_reporting_triggers_o6_b5_evequ,
13947 { "EVEQU (Event Quota)", "pfcp.reporting_triggers_flags.evequ",
13948 FT_BOOLEAN, 8, NULL, 0x20,
13949 NULL, HFILL }
13951 { &hf_pfcp_reporting_triggers_o6_b6_ipmjl,
13952 { "IPMJL (IP Multicast Join/Leave)", "pfcp.reporting_triggers_flags.ipmjl",
13953 FT_BOOLEAN, 8, NULL, 0x40,
13954 NULL, HFILL }
13956 { &hf_pfcp_reporting_triggers_o6_b7_quvti,
13957 { "QUVTI (Quota Validity Time)", "pfcp.reporting_triggers_flags.quvti",
13958 FT_BOOLEAN, 8, NULL, 0x80,
13959 NULL, HFILL }
13961 { &hf_pfcp_reporting_triggers_o7_b0_reemr,
13962 { "REEMR (REport the End Marker Reception)", "pfcp.reporting_triggers_flags.reemr",
13963 FT_BOOLEAN, 8, NULL, 0x01,
13964 NULL, HFILL }
13966 { &hf_pfcp_reporting_triggers_o7_b1_upint,
13967 { "UPINT (User Plane Inactivity Timer)", "pfcp.reporting_triggers_flags.upint",
13968 FT_BOOLEAN, 8, NULL, 0x02,
13969 NULL, HFILL }
13971 { &hf_pfcp_usage_report_trigger_o7_b0_evequ,
13972 { "EVEQU (Event Quota)", "pfcp.usage_report_trigger_flags.evequ",
13973 FT_BOOLEAN, 8, NULL, 0x01,
13974 NULL, HFILL }
13976 { &hf_pfcp_usage_report_trigger_o7_b1_tebur,
13977 { "TEBUR (Termination By UP function Report)", "pfcp.usage_report_trigger_flags.tebur",
13978 FT_BOOLEAN, 8, NULL, 0x02,
13979 NULL, HFILL }
13981 { &hf_pfcp_usage_report_trigger_o7_b2_ipmjl,
13982 { "IPMJL (IP Multicast Join/Leave)", "pfcp.usage_report_trigger_flags.ipmjl",
13983 FT_BOOLEAN, 8, NULL, 0x04,
13984 NULL, HFILL }
13986 { &hf_pfcp_usage_report_trigger_o7_b3_quvti,
13987 { "QUVTI (Quota Validity Time)", "pfcp.usage_report_trigger_flags.quvti",
13988 FT_BOOLEAN, 8, NULL, 0x08,
13989 NULL, HFILL }
13991 { &hf_pfcp_usage_report_trigger_o7_b4_emrre,
13992 { "EMRRE (End Marker Reception REport)", "pfcp.usage_report_trigger_flags.emrre",
13993 FT_BOOLEAN, 8, NULL, 0x10,
13994 NULL, HFILL }
13996 { &hf_pfcp_usage_report_trigger_o7_b5_upint,
13997 { "UPINT (User Plane Inactivity Timer)", "pfcp.usage_report_trigger_flags.upint",
13998 FT_BOOLEAN, 8, NULL, 0x20,
13999 NULL, HFILL }
14001 { &hf_pfcp_usage_report_trigger_o6_b0_volqu,
14002 { "VOLQU (Volume Quota)", "pfcp.usage_report_trigger_flags.volqu",
14003 FT_BOOLEAN, 8, NULL, 0x01,
14004 NULL, HFILL }
14006 { &hf_pfcp_usage_report_trigger_o6_b1_timqu,
14007 { "TIMQU (Time Quota)", "pfcp.usage_report_trigger_flags.timqu",
14008 FT_BOOLEAN, 8, NULL, 0x02,
14009 NULL, HFILL }
14011 { &hf_pfcp_usage_report_trigger_o6_b2_liusa,
14012 { "LIUSA (Linked Usage Reporting)", "pfcp.usage_report_trigger_flags.liusa",
14013 FT_BOOLEAN, 8, NULL, 0x04,
14014 NULL, HFILL }
14016 { &hf_pfcp_usage_report_trigger_o6_b3_termr,
14017 { "TERMR (Termination Report)", "pfcp.usage_report_trigger.term",
14018 FT_BOOLEAN, 8, NULL, 0x08,
14019 NULL, HFILL }
14021 { &hf_pfcp_usage_report_trigger_o6_b4_monit,
14022 { "MONIT (Monitoring Time)", "pfcp.usage_report_trigger.monit",
14023 FT_BOOLEAN, 8, NULL, 0x10,
14024 NULL, HFILL }
14026 { &hf_pfcp_usage_report_trigger_o6_b5_envcl,
14027 { "ENVCL (Envelope Closure)", "pfcp.usage_report_trigger_flags.envcl",
14028 FT_BOOLEAN, 8, NULL, 0x20,
14029 NULL, HFILL }
14031 { &hf_pfcp_usage_report_trigger_o6_b7_eveth,
14032 { "EVETH (Event Threshold)", "pfcp.usage_report_trigger_flags.eveth",
14033 FT_BOOLEAN, 8, NULL, 0x80,
14034 NULL, HFILL }
14036 { &hf_pfcp_usage_report_trigger_o6_b6_macar,
14037 { "MACAR (MAC Addresses Reporting)", "pfcp.usage_report_trigger_flags.macar",
14038 FT_BOOLEAN, 8, NULL, 0x40,
14039 NULL, HFILL }
14041 { &hf_pfcp_usage_report_trigger_o5_b0_perio,
14042 { "PERIO (Periodic Reporting)", "pfcp.usage_report_trigger_flags.perio",
14043 FT_BOOLEAN, 8, NULL, 0x01,
14044 NULL, HFILL }
14046 { &hf_pfcp_usage_report_trigger_o5_b1_volth,
14047 { "VOLTH (Volume Threshold)", "pfcp.usage_report_trigger_flags.volth",
14048 FT_BOOLEAN, 8, NULL, 0x02,
14049 NULL, HFILL }
14051 { &hf_pfcp_usage_report_trigger_o5_b2_timth,
14052 { "TIMTH (Time Threshold)", "pfcp.usage_report_trigger_flags.timth",
14053 FT_BOOLEAN, 8, NULL, 0x04,
14054 NULL, HFILL }
14056 { &hf_pfcp_usage_report_trigger_o5_b3_quhti,
14057 { "QUHTI (Quota Holding Time)", "pfcp.usage_report_trigger_flags.quhti",
14058 FT_BOOLEAN, 8, NULL, 0x08,
14059 NULL, HFILL }
14061 { &hf_pfcp_usage_report_trigger_o5_b4_start,
14062 { "START (Start of Traffic)", "pfcp.usage_report_trigger_flags.start",
14063 FT_BOOLEAN, 8, NULL, 0x10,
14064 NULL, HFILL }
14066 { &hf_pfcp_usage_report_trigger_o5_b5_stopt,
14067 { "STOPT (Stop of Traffic)", "pfcp.usage_report_trigger_flags.stopt",
14068 FT_BOOLEAN, 8, NULL, 0x20,
14069 NULL, HFILL }
14071 { &hf_pfcp_usage_report_trigger_o5_b6_droth,
14072 { "DROTH (Dropped DL Traffic Threshold)", "pfcp.usage_report_trigger_flags.droth",
14073 FT_BOOLEAN, 8, NULL, 0x40,
14074 NULL, HFILL }
14076 { &hf_pfcp_usage_report_trigger_o5_b7_immer,
14077 { "IMMER (Immediate Report)", "pfcp.usage_report_trigger.immer",
14078 FT_BOOLEAN, 8, NULL, 0x80,
14079 NULL, HFILL }
14082 { &hf_pfcp_volume_threshold_b0_tovol,
14083 { "TOVOL", "pfcp.volume_threshold_flags.tovol",
14084 FT_BOOLEAN, 8, NULL, 0x01,
14085 NULL, HFILL }
14087 { &hf_pfcp_volume_threshold_b1_ulvol,
14088 { "ULVOL", "pfcp.volume_threshold_flags.ulvol",
14089 FT_BOOLEAN, 8, NULL, 0x02,
14090 NULL, HFILL }
14092 { &hf_pfcp_volume_threshold_b2_dlvol,
14093 { "DLVOL", "pfcp.volume_threshold_flags.dlvol",
14094 FT_BOOLEAN, 8, NULL, 0x04,
14095 NULL, HFILL }
14097 { &hf_pfcp_volume_threshold_tovol,
14098 { "Total Volume", "pfcp.volume_threshold.tovol",
14099 FT_UINT64, BASE_DEC, NULL, 0x0,
14100 NULL, HFILL }
14102 { &hf_pfcp_volume_threshold_ulvol,
14103 { "Uplink Volume", "pfcp.volume_threshold.ulvol",
14104 FT_UINT64, BASE_DEC, NULL, 0x0,
14105 NULL, HFILL }
14107 { &hf_pfcp_volume_threshold_dlvol,
14108 { "Downlink Volume", "pfcp.volume_threshold.dlvol",
14109 FT_UINT64, BASE_DEC, NULL, 0x0,
14110 NULL, HFILL }
14112 { &hf_pfcp_volume_quota_b0_tovol,
14113 { "TOVOL", "pfcp.volume_quota_flags.tovol",
14114 FT_BOOLEAN, 8, NULL, 0x01,
14115 NULL, HFILL }
14117 { &hf_pfcp_volume_quota_b1_ulvol,
14118 { "ULVOL", "pfcp.volume_quota_flags.ulvol",
14119 FT_BOOLEAN, 8, NULL, 0x02,
14120 NULL, HFILL }
14122 { &hf_pfcp_volume_quota_b2_dlvol,
14123 { "DLVOL", "pfcp.volume_quota_flags.dlvol",
14124 FT_BOOLEAN, 8, NULL, 0x04,
14125 NULL, HFILL }
14127 { &hf_pfcp_volume_quota_tovol,
14128 { "Total Volume", "pfcp.volume_quota.tovol",
14129 FT_UINT64, BASE_DEC, NULL, 0x0,
14130 NULL, HFILL }
14132 { &hf_pfcp_volume_quota_ulvol,
14133 { "Uplink Volume", "pfcp.volume_quota.ulvol",
14134 FT_UINT64, BASE_DEC, NULL, 0x0,
14135 NULL, HFILL }
14137 { &hf_pfcp_volume_quota_dlvol,
14138 { "Downlink Volume", "pfcp.volume_quota.dlvol",
14139 FT_UINT64, BASE_DEC, NULL, 0x0,
14140 NULL, HFILL }
14142 { &hf_pfcp_subseq_volume_threshold_b0_tovol,
14143 { "TOVOL", "pfcp.subseq_volume_threshold.tovol_flg",
14144 FT_BOOLEAN, 8, NULL, 0x01,
14145 NULL, HFILL }
14147 { &hf_pfcp_subseq_volume_threshold_b1_ulvol,
14148 { "ULVOL", "pfcp.subseq_volume_threshold.ulvol_flg",
14149 FT_BOOLEAN, 8, NULL, 0x02,
14150 NULL, HFILL }
14152 { &hf_pfcp_subseq_volume_threshold_b2_dlvol,
14153 { "DLVOL", "pfcp.subseq_volume_threshold.dlvol_flg",
14154 FT_BOOLEAN, 8, NULL, 0x04,
14155 NULL, HFILL }
14157 { &hf_pfcp_subseq_volume_threshold_tovol,
14158 { "Total Volume", "pfcp.subseq_volume_threshold.tovol",
14159 FT_UINT64, BASE_DEC, NULL, 0x0,
14160 NULL, HFILL }
14162 { &hf_pfcp_subseq_volume_threshold_ulvol,
14163 { "Uplink Volume", "pfcp.subseq_volume_threshold.ulvol",
14164 FT_UINT64, BASE_DEC, NULL, 0x0,
14165 NULL, HFILL }
14167 { &hf_pfcp_subseq_volume_threshold_dlvol,
14168 { "Downlink Volume", "pfcp.subseq_volume_threshold.dlvol",
14169 FT_UINT64, BASE_DEC, NULL, 0x0,
14170 NULL, HFILL }
14172 { &hf_pfcp_time_quota,
14173 { "Time Quota", "pfcp.time_quota",
14174 FT_UINT32, BASE_DEC, NULL, 0x0,
14175 NULL, HFILL }
14177 { &hf_pfcp_start_time,
14178 { "Start Time", "pfcp.start_time",
14179 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
14180 NULL, HFILL }
14182 { &hf_pfcp_end_time,
14183 { "End Time", "pfcp.end_time",
14184 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
14185 NULL, HFILL }
14187 { &hf_pfcp_quota_holding_time,
14188 { "Quota Holding Time", "pfcp.quota_holding_time",
14189 FT_UINT32, BASE_DEC, NULL, 0x0,
14190 NULL, HFILL }
14192 { &hf_pfcp_dropped_dl_traffic_threshold_b0_dlpa,
14193 { "DLPA", "pfcp.dropped_dl_traffic_threshold.dlpa_flg",
14194 FT_BOOLEAN, 8, NULL, 0x01,
14195 NULL, HFILL }
14197 { &hf_pfcp_dropped_dl_traffic_threshold_b1_dlby,
14198 { "DLBY", "pfcp.dropped_dl_traffic_threshold.dlby_flg",
14199 FT_BOOLEAN, 8, NULL, 0x02,
14200 NULL, HFILL }
14202 { &hf_pfcp_downlink_packets,
14203 { "Downlink Packets", "pfcp.downlink_packets",
14204 FT_UINT64, BASE_DEC, NULL, 0x0,
14205 NULL, HFILL }
14207 { &hf_pfcp_bytes_downlink_data,
14208 { "Bytes of Downlink Data", "pfcp.bytes_downlink_data",
14209 FT_UINT64, BASE_DEC, NULL, 0x0,
14210 NULL, HFILL }
14212 { &hf_pfcp_qer_correlation_id,
14213 { "QER Correlation ID", "pfcp.qer_correlation_id",
14214 FT_UINT32, BASE_DEC, NULL, 0x0,
14215 NULL, HFILL }
14217 { &hf_pfcp_gate_status_b0b1_dlgate,
14218 { "DL Gate", "pfcp.gate_status.dlgate",
14219 FT_UINT8, BASE_DEC, VALS(pfcp_gate_status_vals), 0x03,
14220 NULL, HFILL }
14222 { &hf_pfcp_gate_status_b3b2_ulgate,
14223 { "UL Gate", "pfcp.gate_status.ulgate",
14224 FT_UINT8, BASE_DEC, VALS(pfcp_gate_status_vals), 0x0c,
14225 NULL, HFILL }
14227 { &hf_pfcp_ul_mbr,
14228 { "UL MBR", "pfcp.ul_mbr",
14229 FT_UINT40, BASE_DEC, NULL, 0x0,
14230 NULL, HFILL }
14232 { &hf_pfcp_dl_mbr,
14233 { "DL MBR", "pfcp.dl_mbr",
14234 FT_UINT40, BASE_DEC, NULL, 0x0,
14235 NULL, HFILL }
14237 { &hf_pfcp_ul_gbr,
14238 { "UL GBR", "pfcp.ul_gbr",
14239 FT_UINT40, BASE_DEC, NULL, 0x0,
14240 NULL, HFILL }
14242 { &hf_pfcp_dl_gbr,
14243 { "DL GBR", "pfcp.dl_gbr",
14244 FT_UINT40, BASE_DEC, NULL, 0x0,
14245 NULL, HFILL }
14247 { &hf_pfcp_report_type_b6_uisr,
14248 { "UISR (UP Initiated Session Request)", "pfcp.report_type.uisr",
14249 FT_BOOLEAN, 8, NULL, 0x40,
14250 NULL, HFILL }
14252 { &hf_pfcp_report_type_b5_sesr,
14253 { "SESR (Session Report)", "pfcp.report_type.sesr",
14254 FT_BOOLEAN, 8, NULL, 0x20,
14255 NULL, HFILL }
14257 { &hf_pfcp_report_type_b4_tmir,
14258 { "TMIR (TSC Management Information Report)", "pfcp.report_type.tmir",
14259 FT_BOOLEAN, 8, NULL, 0x10,
14260 NULL, HFILL }
14262 { &hf_pfcp_report_type_b3_upir,
14263 { "UPIR (User Plane Inactivity Report)", "pfcp.report_type.upir",
14264 FT_BOOLEAN, 8, NULL, 0x08,
14265 NULL, HFILL }
14267 { &hf_pfcp_report_type_b2_erir,
14268 { "ERIR (Error Indication Report)", "pfcp.report_type.erir",
14269 FT_BOOLEAN, 8, NULL, 0x04,
14270 NULL, HFILL }
14272 { &hf_pfcp_report_type_b1_usar,
14273 { "USAR (Usage Report)", "pfcp.report_type.usar",
14274 FT_BOOLEAN, 8, NULL, 0x02,
14275 NULL, HFILL }
14277 { &hf_pfcp_report_type_b0_dldr,
14278 { "DLDR (Downlink Data Report)", "pfcp.report_type.dldr",
14279 FT_BOOLEAN, 8, NULL, 0x01,
14280 NULL, HFILL }
14282 { &hf_pfcp_offending_ie,
14283 { "Type of the offending IE", "pfcp.offending_ie",
14284 FT_UINT16, BASE_DEC | BASE_EXT_STRING, &pfcp_ie_type_ext, 0x0,
14285 NULL, HFILL }
14287 { &hf_pfcp_offending_ie_value,
14288 { "Value of the offending IE", "pfcp.offending_ie_value",
14289 FT_BYTES, BASE_NONE, NULL, 0x0,
14290 NULL, HFILL }
14293 { &hf_pfcp_up_function_features_o5_b0_bucp,
14294 { "BUCP", "pfcp.up_function_features.bucp",
14295 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14296 "Downlink Data Buffering in CP function", HFILL }
14298 { &hf_pfcp_up_function_features_o5_b1_ddnd,
14299 { "DDND", "pfcp.up_function_features.ddnd",
14300 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14301 "Buffering parameter 'Downlink Data Notification Delay", HFILL }
14303 { &hf_pfcp_up_function_features_o5_b2_dlbd,
14304 { "DLBD", "pfcp.up_function_features.dlbd",
14305 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14306 NULL, HFILL }
14308 { &hf_pfcp_up_function_features_o5_b3_trst,
14309 { "TRST", "pfcp.up_function_features.trst",
14310 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14311 "Traffic Steering", HFILL }
14313 { &hf_pfcp_up_function_features_o5_b4_ftup,
14314 { "FTUP", "pfcp.up_function_features.ftup",
14315 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14316 "F-TEID allocation / release in the UP function", HFILL }
14318 { &hf_pfcp_up_function_features_o5_b5_pfdm,
14319 { "PFDM", "pfcp.up_function_features.pfdm",
14320 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14321 "PFD Management procedure", HFILL }
14323 { &hf_pfcp_up_function_features_o5_b6_heeu,
14324 { "HEEU", "pfcp.up_function_features.heeu",
14325 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14326 "Header Enrichment of Uplink traffic", HFILL }
14328 { &hf_pfcp_up_function_features_o5_b7_treu,
14329 { "TREU", "pfcp.up_function_features.treu",
14330 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14331 "Traffic Redirection Enforcement in the UP function", HFILL }
14333 { &hf_pfcp_up_function_features_o6_b0_empu,
14334 { "EMPU", "pfcp.up_function_features.empu",
14335 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14336 "Sending of End Marker packets", HFILL }
14338 { &hf_pfcp_up_function_features_o6_b1_pdiu,
14339 { "PDIU", "pfcp.up_function_features.pdiu",
14340 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14341 "Support of PDI optimised signalling", HFILL }
14343 { &hf_pfcp_up_function_features_o6_b2_udbc,
14344 { "UDBC", "pfcp.up_function_features.udbc",
14345 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14346 "Support of UL/DL Buffering Control", HFILL }
14348 { &hf_pfcp_up_function_features_o6_b3_quoac,
14349 { "QUOAC", "pfcp.up_function_features.quoac",
14350 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14351 "The UP function supports being provisioned with the Quota Action to apply when reaching quotas", HFILL }
14353 { &hf_pfcp_up_function_features_o6_b4_trace,
14354 { "TRACE", "pfcp.up_function_features.trace",
14355 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14356 "The UP function supports Trace", HFILL }
14358 { &hf_pfcp_up_function_features_o6_b5_frrt,
14359 { "FRRT", "pfcp.up_function_features.frrt",
14360 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14361 "The UP function supports Framed Routing", HFILL }
14363 { &hf_pfcp_up_function_features_o6_b6_pfde,
14364 { "PFDE", "pfcp.up_function_features.pfde",
14365 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14366 "The UP function supports a PFD Contents including a property with multiple values", HFILL }
14368 { &hf_pfcp_up_function_features_o6_b7_epfar,
14369 { "EPFAR", "pfcp.up_function_features.epfar",
14370 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14371 "The UP function supports the Enhanced PFCP Association Release feature", HFILL }
14373 { &hf_pfcp_up_function_features_o7_b0_dpdra,
14374 { "DPDRA", "pfcp.up_function_features.dpdra",
14375 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14376 "The UP function supports Deferred PDR Activation or Deactivation", HFILL }
14378 { &hf_pfcp_up_function_features_o7_b1_adpdp,
14379 { "ADPDP", "pfcp.up_function_features.adpdp",
14380 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14381 "The UP function supports the Activation and Deactivation of Pre-defined PDRs", HFILL }
14383 { &hf_pfcp_up_function_features_o7_b2_ueip,
14384 { "UEIP", "pfcp.up_function_features.ueip",
14385 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14386 "The UP function supports allocating UE IP addresses or prefixes", HFILL }
14388 { &hf_pfcp_up_function_features_o7_b3_sset,
14389 { "SSET", "pfcp.up_function_features.sset",
14390 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14391 "UP function support of PFCP sessions successively controlled by different SMFs of a same SMF", HFILL }
14393 { &hf_pfcp_up_function_features_o7_b4_mnop,
14394 { "MNOP", "pfcp.up_function_features.mnop",
14395 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14396 "UPF supports measurement of number of packets which is instructed with the flag 'Measurement of Number of Packets' in a URR", HFILL }
14398 { &hf_pfcp_up_function_features_o7_b5_mte_n4,
14399 { "MTE N4", "pfcp.up_function_features.mte_n4",
14400 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14401 "UPF supports multiple instances of Traffic Endpoint IDs in a PDI", HFILL }
14403 { &hf_pfcp_up_function_features_o7_b6_bundl,
14404 { "BUNDL", "pfcp.up_function_features.bundl",
14405 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14406 "PFCP messages bundling", HFILL }
14408 { &hf_pfcp_up_function_features_o7_b7_gcom,
14409 { "GCOM", "pfcp.up_function_features.gcom",
14410 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14411 "UPF support of 5G VN Group Communication", HFILL }
14413 { &hf_pfcp_up_function_features_o8_b0_mpas,
14414 { "MPAS", "pfcp.up_function_features.mpas",
14415 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14416 "UPF support for multiple PFCP associations to the SMFs in an SMF set", HFILL }
14418 { &hf_pfcp_up_function_features_o8_b1_rttl,
14419 { "RTTL", "pfcp.up_function_features.rttl",
14420 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14421 "The UP function supports redundant transmission at transport layer", HFILL }
14423 { &hf_pfcp_up_function_features_o8_b2_vtime,
14424 { "VTIME", "pfcp.up_function_features.vtime",
14425 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14426 "UPF support of quota validity time feature", HFILL }
14428 { &hf_pfcp_up_function_features_o8_b3_norp,
14429 { "NORP", "pfcp.up_function_features.norp",
14430 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14431 "UP function support of Number of Reports", HFILL }
14433 { &hf_pfcp_up_function_features_o8_b4_iptv,
14434 { "IPTV", "pfcp.up_function_features.iptv",
14435 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14436 "UPF support of IPTV service", HFILL }
14438 { &hf_pfcp_up_function_features_o8_b5_ip6pl,
14439 { "IP6PL", "pfcp.up_function_features.ip6pl",
14440 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14441 "UPF supports UE IPv6 address(es) allocation with IPv6 prefix length other than default /64", HFILL }
14443 { &hf_pfcp_up_function_features_o8_b6_tsn,
14444 { "TSN", "pfcp.up_function_features.tsn",
14445 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14446 "Integration of 5GS into a TSN data network is supported by the UPF", HFILL }
14448 { &hf_pfcp_up_function_features_o8_b7_mptcp,
14449 { "MPTCP", "pfcp.up_function_features.mptcp",
14450 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14451 "UPF support of MPTCP Proxy functionality", HFILL }
14453 { &hf_pfcp_up_function_features_o9_b0_atsss_ll,
14454 { "ATSSS-LL", "pfcp.up_function_features.atsss_ll",
14455 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14456 "UPF support of ATSSS-LLL steering functionality", HFILL }
14458 { &hf_pfcp_up_function_features_o9_b1_qfqm,
14459 { "QFQM", "pfcp.up_function_features.qfqm",
14460 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14461 "UPF support of per QoS flow per UE QoS monitoring for packet delay", HFILL }
14463 { &hf_pfcp_up_function_features_o9_b2_gpqm,
14464 { "GPQM", "pfcp.up_function_features.gpqm",
14465 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14466 "UPF support of per GTP-U Path QoS monitoring", HFILL }
14468 { &hf_pfcp_up_function_features_o9_b3_mt_edt,
14469 { "MT-EDT", "pfcp.up_function_features.mtedt",
14470 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14471 "SGW-U support of reporting the size of DL Data Packets", HFILL }
14473 { &hf_pfcp_up_function_features_o9_b4_ciot,
14474 { "CIOT", "pfcp.up_function_features.ciot",
14475 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14476 "UPF support of CIoT feature", HFILL }
14478 { &hf_pfcp_up_function_features_o9_b5_ethar,
14479 { "ETHAR", "pfcp.up_function_features.ethar",
14480 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14481 "UPF support of Ethernet PDU Session Anchor Relocation", HFILL }
14483 { &hf_pfcp_up_function_features_o9_b6_ddds,
14484 { "DDDS", "pfcp.up_function_features.ddds",
14485 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14486 "UPF support of reporting of the first buffered / discarded data for downlink", HFILL }
14488 { &hf_pfcp_up_function_features_o9_b7_rds,
14489 { "RDS", "pfcp.up_function_features.rds",
14490 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14491 "UP function support of Reliable Data Service", HFILL }
14493 { &hf_pfcp_up_function_features_o10_b0_rttwp,
14494 { "RTTWP", "pfcp.up_function_features.rttwp",
14495 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14496 "UPF support of RTT measurement towards the UE without PMF", HFILL }
14498 { &hf_pfcp_up_function_features_o10_b1_quasf,
14499 { "QUASF", "pfcp.up_function_features.quasf",
14500 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14501 "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 }
14503 { &hf_pfcp_up_function_features_o10_b2_nspoc,
14504 { "NSPOC", "pfcp.up_function_features.nspoc",
14505 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14506 "UP function supports notifying start of Pause of Charging via user plane", HFILL }
14508 { &hf_pfcp_up_function_features_o10_b3_l2tp,
14509 { "L2TP", "pfcp.up_function_features.l2tp",
14510 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14511 "UP function supports L2TP", HFILL }
14513 { &hf_pfcp_up_function_features_o10_b4_upber,
14514 { "UPBER", "pfcp.up_function_features.upber",
14515 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14516 "UP function supports the uplink packet buffering during EAS relocation", HFILL }
14518 { &hf_pfcp_up_function_features_o10_b5_resps,
14519 { "RESPS", "pfcp.up_function_features.resps",
14520 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14521 "UP function supports Restoration of PFCP Session association", HFILL }
14523 { &hf_pfcp_up_function_features_o10_b6_iprep,
14524 { "IPREP", "pfcp.up_function_features.iprep",
14525 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14526 "UP function supports IP Address and Port number replacement", HFILL }
14528 { &hf_pfcp_up_function_features_o10_b7_dnsts,
14529 { "DNSTS", "pfcp.up_function_features.dnsts",
14530 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14531 "UP function support DNS Traffic Steering based on FQDN in the DNS Query message", HFILL }
14533 { &hf_pfcp_up_function_features_o11_b0_drqos,
14534 { "DRQOS", "pfcp.up_function_features.drqos",
14535 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14536 "UP function supports Direct Reporting of QoS monitoring events to Local NEF or AF", HFILL }
14538 { &hf_pfcp_up_function_features_o11_b1_mbsn4,
14539 { "MBSN4", "pfcp.up_function_features.mbsn4",
14540 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14541 "UPF supports sending MBS multicast session data to associated PDU sessions using 5GC individual delivery", HFILL }
14543 { &hf_pfcp_up_function_features_o11_b2_psuprm,
14544 { "MBSN4", "pfcp.up_function_features.mbsn4",
14545 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14546 "UP function supports Per Slice UP Resource Management", HFILL }
14548 { &hf_pfcp_up_function_features_o11_b3_eppi,
14549 { "EPPI", "pfcp.up_function_features.eppi",
14550 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14551 "UP function supports Enhanced Provisioning of Paging Policy Indicator", HFILL }
14553 { &hf_pfcp_up_function_features_o11_b4_ratp,
14554 { "RATP", "pfcp.up_function_features.ratp",
14555 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14556 "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 }
14558 { &hf_pfcp_up_function_features_o11_b5_upidp,
14559 { "UPIDP", "pfcp.up_function_features.upidp",
14560 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14561 "UP function supports User Plane Inactivity Detection and reporting per PDR", HFILL }
14563 { &hf_pfcp_up_function_features_o11_b6_afsfc,
14564 { "AFSFC", "pfcp.up_function_features.afsfc",
14565 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14566 "UP function supports inserting metadata when Application Function influence on Service Function Chaining", HFILL }
14568 { &hf_pfcp_up_function_features_o11_b7_mpquic,
14569 { "MPQUIC", "pfcp.up_function_features.mpquic",
14570 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14571 "UPF support of MPQUIC Proxy functionality", HFILL }
14573 { &hf_pfcp_up_function_features_o12_b0_redsm,
14574 { "REDSM", "pfcp.up_function_features.redsm",
14575 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14576 "UP function supports the Redundant Steering Mode", HFILL }
14578 { &hf_pfcp_up_function_features_o12_b1_dbdm,
14579 { "DBDM", "pfcp.up_function_features.dbdm",
14580 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14581 "The buffering parameters 'DL Buffering Duration' and 'DL Buffering Suggested Packet Count' in PFCP Session Modification Request are supported by the UP function", HFILL }
14583 { &hf_pfcp_up_function_features_o12_b2_tscts,
14584 { "TSCTS", "pfcp.up_function_features.tscts",
14585 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14586 "AF requested support of Time Synchronization and/or Time Sensitive Communication is supported by the UP function", HFILL }
14588 { &hf_pfcp_up_function_features_o12_b3_drtsc,
14589 { "DRTSC", "pfcp.up_function_features.drtsc",
14590 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14591 "UP function supports Direct Reporting of TSC management information events to TSN AF or TSCTSF", HFILL }
14593 { &hf_pfcp_up_function_features_o12_b4_n6jedb,
14594 { "N6JEDB", "pfcp.up_function_features.n6jedb",
14595 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14596 "UPF support of N6 Jitter, DL Periodicity and UL Periodicity Measurement and Reporting, and End of Data Burst marking", HFILL }
14598 { &hf_pfcp_up_function_features_o12_b5_qmcon,
14599 { "QMCON", "pfcp.up_function_features.qmcon",
14600 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14601 "UPF support of QoS monitoring of Congestion information", HFILL }
14603 { &hf_pfcp_up_function_features_o12_b6_detnet,
14604 { "DETNET", "pfcp.up_function_features.detnet",
14605 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14606 "Deterministic Networking is supported by the UP function", HFILL }
14608 { &hf_pfcp_up_function_features_o12_b7_eml4s,
14609 { "EML4S", "pfcp.up_function_features.eml4s",
14610 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14611 "UP function supports ECN Marking for L4S", HFILL }
14613 { &hf_pfcp_up_function_features_o13_b0_pdusm,
14614 { "PDUSM", "pfcp.up_function_features.pdusm",
14615 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14616 "UP function supports PDU Set Marking", HFILL }
14618 { &hf_pfcp_up_function_features_o13_b1_cntl,
14619 { "CN-TL", "pfcp.up_function_features.cntl",
14620 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14621 "UPF support of the TSN Talker and Listener (TL) functionality", HFILL }
14623 { &hf_pfcp_up_function_features_o13_b2_qmdrm,
14624 { "QMDRM", "pfcp.up_function_features.qmdrm",
14625 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14626 "UPF support of QoS monitoring of Data Rate Measurement", HFILL }
14628 { &hf_pfcp_up_function_features_o13_b3_edbnc,
14629 { "EDBNC", "pfcp.up_function_features.edbnc",
14630 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14631 "UP function supports Extended DL Buffering Notification Control", HFILL }
14633 { &hf_pfcp_up_function_features_o13_b4_mtsdt,
14634 { "MT-SDT", "pfcp.up_function_features.mtsdt",
14635 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14636 "UPF support of reporting the size of DL Data Packets per QoS flow", HFILL }
14638 { &hf_pfcp_up_function_features_o13_b5_upsbies,
14639 { "UPSBIES", "pfcp.up_function_features.upsbies",
14640 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14641 "UPF support of event subscription via Service Based Interface", HFILL }
14643 { &hf_pfcp_up_function_features_o13_b7_un6tu,
14644 { "UN6TU", "pfcp.up_function_features.un6tu",
14645 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14646 "UPF supports to allocate a mapped N6 IP address and perform IP replacement", HFILL }
14648 { &hf_pfcp_up_function_features_o13_b6_umn6ip,
14649 { "UMN6IP", "pfcp.up_function_features.umn6ip",
14650 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14651 "UPF supports N6 tunnelling using N6 routing information", HFILL }
14653 { &hf_pfcp_up_function_features_o14_b0_mbsch,
14654 { "MBSCH", "pfcp.up_function_features.mbsch",
14655 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14656 "MB-UPF support of MBS charging", HFILL }
14659 { &hf_pfcp_sequence_number,
14660 { "Sequence Number", "pfcp.sequence_number",
14661 FT_UINT32, BASE_DEC, NULL, 0x0,
14662 NULL, HFILL }
14664 { &hf_pfcp_metric,
14665 { "Metric", "pfcp.metric",
14666 FT_UINT8, BASE_DEC, NULL, 0x0,
14667 NULL, HFILL }
14669 { &hf_pfcp_timer_unit,
14670 { "Timer unit", "pfcp.timer_unit",
14671 FT_UINT8, BASE_DEC, VALS(pfcp_timer_unit_vals), 0xe0,
14672 NULL, HFILL }
14674 { &hf_pfcp_timer_value,
14675 { "Timer value", "pfcp.timer_value",
14676 FT_UINT8, BASE_DEC, NULL, 0x1f,
14677 NULL, HFILL }
14679 { &hf_pfcp_volume_measurement_b0_tovol,
14680 { "TOVOL", "pfcp.volume_measurement_flags.tovol",
14681 FT_BOOLEAN, 8, NULL, 0x01,
14682 NULL, HFILL }
14684 { &hf_pfcp_volume_measurement_b1_ulvol,
14685 { "ULVOL", "pfcp.volume_measurement_flags.ulvol",
14686 FT_BOOLEAN, 8, NULL, 0x02,
14687 NULL, HFILL }
14689 { &hf_pfcp_volume_measurement_b2_dlvol,
14690 { "DLVOL", "pfcp.volume_measurement_flags.dlvol",
14691 FT_BOOLEAN, 8, NULL, 0x04,
14692 NULL, HFILL }
14694 { &hf_pfcp_volume_measurement_b3_tonop,
14695 { "TONOP", "pfcp.volume_measurement_flags.tonop",
14696 FT_BOOLEAN, 8, NULL, 0x08,
14697 NULL, HFILL }
14699 { &hf_pfcp_volume_measurement_b4_ulnop,
14700 { "ULNOP", "pfcp.volume_measurement_flags.ulnop",
14701 FT_BOOLEAN, 8, NULL, 0x10,
14702 NULL, HFILL }
14704 { &hf_pfcp_volume_measurement_b5_dlnop,
14705 { "DLNOP", "pfcp.volume_measurement_flags.dlnops",
14706 FT_BOOLEAN, 8, NULL, 0x20,
14707 NULL, HFILL }
14709 { &hf_pfcp_vol_meas_tovol,
14710 { "Total Volume", "pfcp.volume_measurement.tovol",
14711 FT_UINT64, BASE_DEC, NULL, 0x0,
14712 NULL, HFILL }
14714 { &hf_pfcp_vol_meas_ulvol,
14715 { "Uplink Volume", "pfcp.volume_measurement.ulvol",
14716 FT_UINT64, BASE_DEC, NULL, 0x0,
14717 NULL, HFILL }
14719 { &hf_pfcp_vol_meas_dlvol,
14720 { "Downlink Volume", "pfcp.volume_measurement.dlvol",
14721 FT_UINT64, BASE_DEC, NULL, 0x0,
14722 NULL, HFILL }
14724 { &hf_pfcp_vol_meas_tonop,
14725 { "Total Number of Packets", "pfcp.volume_measurement.tonop",
14726 FT_UINT64, BASE_DEC, NULL, 0x0,
14727 NULL, HFILL }
14729 { &hf_pfcp_vol_meas_ulnop,
14730 { "Uplink Number of Packets", "pfcp.volume_measurement.ulnop",
14731 FT_UINT64, BASE_DEC, NULL, 0x0,
14732 NULL, HFILL }
14734 { &hf_pfcp_vol_meas_dlnop,
14735 { "Downlink Number of Packets", "pfcp.volume_measurement.dlnop",
14736 FT_UINT64, BASE_DEC, NULL, 0x0,
14737 NULL, HFILL }
14739 { &hf_pfcp_cp_function_features_o5_b0_load,
14740 { "LOAD", "pfcp.cp_function_features.load",
14741 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14742 "Load Control", HFILL }
14744 { &hf_pfcp_cp_function_features_o5_b1_ovrl,
14745 { "OVRL", "pfcp.cp_function_features.ovrl",
14746 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14747 "Overload Control", HFILL }
14749 { &hf_pfcp_cp_function_features_o5_b2_epfar,
14750 { "EPFAR", "pfcp.cp_function_features.epfar",
14751 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
14752 "The CP function supports the Enhanced PFCP Association Release feature", HFILL }
14754 { &hf_pfcp_cp_function_features_o5_b3_sset,
14755 { "SSET", "pfcp.cp_function_features.sset",
14756 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
14757 "SMF support of PFCP sessions successively controlled by different SMFs of a same SMF Set", HFILL }
14759 { &hf_pfcp_cp_function_features_o5_b4_bundl,
14760 { "BUNDL", "pfcp.cp_function_features.bundl",
14761 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
14762 "PFCP messages bundling", HFILL }
14764 { &hf_pfcp_cp_function_features_o5_b5_mpas,
14765 { "MPAS", "pfcp.cp_function_features.mpas",
14766 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
14767 "SMF support for multiple PFCP associations from an SMF set to a single UPF", HFILL }
14769 { &hf_pfcp_cp_function_features_o5_b6_ardr,
14770 { "ARDR", "pfcp.cp_function_features.ardr",
14771 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
14772 "CP function supports Additional Usage Reports in the PFCP Session Deletion Response", HFILL }
14774 { &hf_pfcp_cp_function_features_o5_b7_uiaur,
14775 { "UIAUR", "pfcp.cp_function_features.uiaur",
14776 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
14777 "CP function supports the UE IP Address Usage Reporting feature", HFILL }
14779 { &hf_pfcp_cp_function_features_o6_b0_psucc,
14780 { "PSUCC", "pfcp.cp_function_features.psucc",
14781 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
14782 "CP function supports PFCP session establishment or modification with Partial Success", HFILL }
14784 { &hf_pfcp_cp_function_features_o6_b1_rpgur,
14785 { "RPGUR", "pfcp.cp_function_features.rpgur",
14786 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
14787 "CP function supports the Peer GTP-U Entity Restart Reporting", HFILL }
14790 { &hf_pfcp_usage_information_b0_bef,
14791 { "BEF (Before)", "pfcp.usage_information.bef",
14792 FT_BOOLEAN, 8, NULL, 0x01,
14793 NULL, HFILL }
14795 { &hf_pfcp_usage_information_b1_aft,
14796 { "AFT (After)", "pfcp.usage_information.aft",
14797 FT_BOOLEAN, 8, NULL, 0x02,
14798 NULL, HFILL }
14800 { &hf_pfcp_usage_information_b2_uae,
14801 { "UAE (Usage After Enforcement)", "pfcp.usage_information.uae",
14802 FT_BOOLEAN, 8, NULL, 0x04,
14803 NULL, HFILL }
14805 { &hf_pfcp_usage_information_b3_ube,
14806 { "UBE (Usage Before Enforcement)", "pfcp.usage_information.ube",
14807 FT_BOOLEAN, 8, NULL, 0x08,
14808 NULL, HFILL }
14810 { &hf_pfcp_application_instance_id,
14811 { "Application Instance Identifier", "pfcp.application_instance_id",
14812 FT_BYTES, BASE_NONE, NULL, 0x0,
14813 NULL, HFILL }
14815 { &hf_pfcp_application_instance_id_str,
14816 { "Application Instance Identifier", "pfcp.application_instance_id_str",
14817 FT_STRING, BASE_NONE, NULL, 0x0,
14818 NULL, HFILL }
14820 { &hf_pfcp_flow_dir,
14821 { "Flow Direction", "pfcp.flow_dir",
14822 FT_UINT8, BASE_DEC, VALS(pfcp_flow_dir_vals), 0x07,
14823 NULL, HFILL }
14825 { &hf_pfcp_packet_rate_b0_ulpr,
14826 { "ULPR (Uplink Packet Rate)", "pfcp.packet_rate.ulpr",
14827 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
14828 NULL, HFILL }
14830 { &hf_pfcp_packet_rate_b1_dlpr,
14831 { "DLPR (Downlink Packet Rate)", "pfcp.packet_rate.dlpr",
14832 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
14833 NULL, HFILL }
14835 { &hf_pfcp_packet_rate_b2_aprc,
14836 { "APRC (Additional Packet Rate Control)", "pfcp.packet_rate.aprc",
14837 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
14838 NULL, HFILL }
14840 { &hf_pfcp_ul_time_unit,
14841 { "Uplink Time Unit", "pfcp.ul_time_unit",
14842 FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals), 0x07,
14843 NULL, HFILL }
14845 { &hf_pfcp_max_ul_pr,
14846 { "Maximum Uplink Packet Rate", "pfcp.max_ul_pr",
14847 FT_UINT16, BASE_DEC, NULL, 0x0,
14848 NULL, HFILL }
14850 { &hf_pfcp_dl_time_unit,
14851 { "Downlink Time Unit", "pfcp.dl_time_unit",
14852 FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals), 0x07,
14853 NULL, HFILL }
14855 { &hf_pfcp_max_dl_pr,
14856 { "Maximum Downlink Packet Rate", "pfcp.max_dl_pr",
14857 FT_UINT16, BASE_DEC, NULL, 0x0,
14858 NULL, HFILL }
14860 { &hf_pfcp_a_ul_time_unit,
14861 { "Additional Uplink Time Unit", "pfcp.a_ul_time_unit",
14862 FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals), 0x07,
14863 NULL, HFILL }
14865 { &hf_pfcp_a_max_ul_pr,
14866 { "Additional Maximum Uplink Packet Rate", "pfcp.a_max_ul_pr",
14867 FT_UINT16, BASE_DEC, NULL, 0x0,
14868 NULL, HFILL }
14870 { &hf_pfcp_a_dl_time_unit,
14871 { "Additional Downlink Time Unit", "pfcp.a_dl_time_unit",
14872 FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals), 0x07,
14873 NULL, HFILL }
14875 { &hf_pfcp_a_max_dl_pr,
14876 { "Additional Maximum Downlink Packet Rate", "pfcp.a_max_dl_pr",
14877 FT_UINT16, BASE_DEC, NULL, 0x0,
14878 NULL, HFILL }
14880 { &hf_pfcp_dl_flow_level_marking_b0_ttc,
14881 { "TTC (ToS/Traffic Class)", "pfcp.dl_flow_level_marking.ttc",
14882 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
14883 NULL, HFILL }
14885 { &hf_pfcp_dl_flow_level_marking_b1_sci,
14886 { "SCI(Service Class Indicator)", "pfcp.dl_flow_level_marking.sci",
14887 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
14888 NULL, HFILL }
14890 { &hf_pfcp_sci,
14891 { "Service Class Indicator", "pfcp.sci",
14892 FT_UINT16, BASE_HEX, NULL, 0x0,
14893 NULL, HFILL }
14895 { &hf_pfcp_dl_data_notification_delay,
14896 { "Delay Value", "pfcp.dl_data_notification_delay",
14897 FT_UINT8, BASE_DEC, NULL, 0x0,
14898 "Delay Value in integer multiples of 50 millisecs, or zero", HFILL }
14900 { &hf_pfcp_packet_count,
14901 { "Packet Count", "pfcp.packet_count",
14902 FT_UINT16, BASE_DEC, NULL, 0x0,
14903 NULL, HFILL }
14905 { &hf_pfcp_dl_data_service_inf_b0_ppi,
14906 { "PPI(Paging Policy Indication)", "pfcp.dl_data_service_inf.ppi",
14907 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
14908 NULL, HFILL }
14910 { &hf_pfcp_dl_data_service_inf_b1_qfii,
14911 { "QFII(QoS Flow Identifier)", "pfcp.dl_data_service_inf.qfii",
14912 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
14913 NULL, HFILL }
14915 { &hf_pfcp_dl_data_service_inf_b2_dlpsi,
14916 { "DLPSI(DL Packet Size Indication)", "pfcp.dl_data_service_inf.dlpsi",
14917 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
14918 NULL, HFILL }
14920 { &hf_pfcp_paging_policy_indication,
14921 { "Paging Policy Indication", "pfcp.dl_data_service_inf.paging_policy_indication",
14922 FT_UINT16, BASE_DEC, NULL, 0x7f,
14923 NULL, HFILL }
14925 { &hf_pfcp_dldatapacketsize,
14926 { "DL Data Packet Size", "pfcp.dl_data_service_inf.dlpacketsize",
14927 FT_UINT16, BASE_DEC, NULL, 0x0,
14928 NULL, HFILL }
14930 { &hf_pfcp_pfcpsmreq_flags_b0_drobu,
14931 { "DROBU (Drop Buffered Packets)", "pfcp.smreq_flags.drobu",
14932 FT_BOOLEAN, 8, NULL, 0x01,
14933 NULL, HFILL }
14935 { &hf_pfcp_pfcpsmreq_flags_b1_sndem,
14936 { "SNDEM (Send End Marker Packets)", "pfcp.smreq_flags.sndem",
14937 FT_BOOLEAN, 8, NULL, 0x02,
14938 NULL, HFILL }
14940 { &hf_pfcp_pfcpsmreq_flags_b2_qaurr,
14941 { "QAURR (Query All URRs)", "pfcp.smreq_flags.qaurr",
14942 FT_BOOLEAN, 8, NULL, 0x04,
14943 NULL, HFILL }
14945 { &hf_pfcp_pfcpsmreq_flags_b3_sumpc,
14946 { "SUMPC (Stop of Usage Measurement to Pause Charging)", "pfcp.smreq_flags.sumpc",
14947 FT_BOOLEAN, 8, NULL, 0x08,
14948 NULL, HFILL }
14950 { &hf_pfcp_pfcpsmreq_flags_b4_rumuc,
14951 { "RUMUC (Resume of Usage Measurement to Un-pause of Charging)", "pfcp.smreq_flags.rumuc",
14952 FT_BOOLEAN, 8, NULL, 0x10,
14953 NULL, HFILL }
14955 { &hf_pfcp_pfcpsmreq_flags_b5_deteid,
14956 { "DETEID (Delete All DL N3mb and/or N19mb F-TEIDs)", "pfcp.smreq_flags.deteid",
14957 FT_BOOLEAN, 8, NULL, 0x20,
14958 NULL, HFILL }
14960 { &hf_pfcp_pfcpsmreq_flags_b6_hrsbom,
14961 { "HRSBOM (HR-SBO Mode)", "pfcp.smreq_flags.hrsbom",
14962 FT_BOOLEAN, 8, NULL, 0x40,
14963 NULL, HFILL }
14965 { &hf_pfcp_pfcpsrrsp_flags_b0_drobu,
14966 { "DROBU (Drop Buffered Packets)", "pfcp.srrsp_flags.drobu",
14967 FT_BOOLEAN, 8, NULL, 0x01,
14968 NULL, HFILL }
14970 { &hf_pfcp_pfd_contents_flags_b0_fd,
14971 { "FD (Flow Description)", "pfcp.pfd_contents_flags.fd",
14972 FT_BOOLEAN, 8, NULL, 0x01,
14973 NULL, HFILL }
14975 { &hf_pfcp_pfd_contents_flags_b1_url,
14976 { "URL (URL)", "pfcp.pfd_contents_flags.url",
14977 FT_BOOLEAN, 8, NULL, 0x02,
14978 NULL, HFILL }
14980 { &hf_pfcp_pfd_contents_flags_b2_dn,
14981 { "DN (Domain Name)", "pfcp.pfd_contents_flags.dn",
14982 FT_BOOLEAN, 8, NULL, 0x04,
14983 NULL, HFILL }
14985 { &hf_pfcp_pfd_contents_flags_b3_cp,
14986 { "CP (Custom PFD Content)", "pfcp.pfd_contents_flags.cp",
14987 FT_BOOLEAN, 8, NULL, 0x08,
14988 NULL, HFILL }
14990 { &hf_pfcp_pfd_contents_flags_b4_dnp,
14991 { "DNP (Domain Name Protocol)", "pfcp.pfd_contents_flags.dnp",
14992 FT_BOOLEAN, 8, NULL, 0x10,
14993 NULL, HFILL }
14995 { &hf_pfcp_pfd_contents_flags_b5_afd,
14996 { "AFD (Additional Flow Description)", "pfcp.pfd_contents_flags.afd",
14997 FT_BOOLEAN, 8, NULL, 0x20,
14998 NULL, HFILL }
15000 { &hf_pfcp_pfd_contents_flags_b6_aurl,
15001 { "AURL (Additional URL)", "pfcp.pfd_contents_flags.aurl",
15002 FT_BOOLEAN, 8, NULL, 0x40,
15003 NULL, HFILL }
15005 { &hf_pfcp_pfd_contents_flags_b7_adnp,
15006 { "ADNP (Additional Domain Name and Domain Name Protocol)", "pfcp.pfd_contents_flags.adnp",
15007 FT_BOOLEAN, 8, NULL, 0x80,
15008 NULL, HFILL }
15010 { &hf_pfcp_url_len,
15011 { "Length of URL", "pfcp.url_len",
15012 FT_UINT16, BASE_DEC, NULL, 0x0,
15013 NULL, HFILL }
15015 { &hf_pfcp_url,
15016 { "URL", "pfcp.url",
15017 FT_STRING, BASE_NONE, NULL, 0x0,
15018 NULL, HFILL }
15020 { &hf_pfcp_dn_len,
15021 { "Length of Domain Name", "pfcp.dn_len",
15022 FT_UINT16, BASE_DEC, NULL, 0x0,
15023 NULL, HFILL }
15025 { &hf_pfcp_dn,
15026 { "Domain Name", "pfcp.dn",
15027 FT_STRING, BASE_NONE, NULL, 0x0,
15028 NULL, HFILL }
15030 { &hf_pfcp_cp_len,
15031 { "Length of Custom PFD Content", "pfcp.cp_len",
15032 FT_UINT16, BASE_DEC, NULL, 0x0,
15033 NULL, HFILL }
15035 { &hf_pfcp_cp,
15036 { "Custom PFD Content", "pfcp.cp",
15037 FT_BYTES, BASE_NONE, NULL, 0x0,
15038 NULL, HFILL }
15040 { &hf_pfcp_dnp_len,
15041 { "Length of Domain Name Protocol", "pfcp.dnp_len",
15042 FT_UINT16, BASE_DEC, NULL, 0x0,
15043 NULL, HFILL }
15045 { &hf_pfcp_dnp,
15046 { "Domain Name Protocol", "pfcp.dnp",
15047 FT_STRING, BASE_NONE, NULL, 0x0,
15048 NULL, HFILL }
15050 { &hf_pfcp_afd_len,
15051 { "Length of Additional Flow Description", "pfcp.adf_len",
15052 FT_UINT16, BASE_DEC, NULL, 0x0,
15053 NULL, HFILL }
15055 { &hf_pfcp_aurl_len,
15056 { "Length of Additional URL", "pfcp.aurl_len",
15057 FT_UINT16, BASE_DEC, NULL, 0x0,
15058 NULL, HFILL }
15060 { &hf_pfcp_adnp_len,
15061 { "Length of Additional Domain Name and Domain Name Protocol", "pfcp.adnp_len",
15062 FT_UINT16, BASE_DEC, NULL, 0x0,
15063 NULL, HFILL }
15065 { &hf_pfcp_header_type,
15066 { "Header Type", "pfcp.header_type",
15067 FT_UINT8, BASE_DEC, VALS(pfcp_header_type_vals), 0x1f,
15068 NULL, HFILL }
15070 { &hf_pfcp_hf_len,
15071 { "Length of Header Field Name", "pfcp.hf_len",
15072 FT_UINT8, BASE_DEC, NULL, 0x0,
15073 NULL, HFILL }
15075 { &hf_pfcp_hf_name,
15076 { "Header Field Name", "pfcp.hf_name",
15077 FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
15078 NULL, HFILL }
15080 { &hf_pfcp_hf_val_len,
15081 { "Length of Header Field Value", "pfcp.hf_val_len",
15082 FT_UINT8, BASE_DEC, NULL, 0x0,
15083 NULL, HFILL }
15085 { &hf_pfcp_hf_val,
15086 { "Header Field Value", "pfcp.hf_val",
15087 FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
15088 NULL, HFILL }
15091 { &hf_pfcp_measurement_info_b0_mbqe,
15092 { "MBQE (Measurement Before QoS Enforcement)", "pfcp.measurement_info.fd",
15093 FT_BOOLEAN, 8, NULL, 0x01,
15094 NULL, HFILL }
15096 { &hf_pfcp_measurement_info_b1_inam,
15097 { "INAM (Inactive Measurement)", "pfcp.measurement_info.inam",
15098 FT_BOOLEAN, 8, NULL, 0x02,
15099 NULL, HFILL }
15101 { &hf_pfcp_measurement_info_b2_radi,
15102 { "RADI (Reduced Application Detection Information)", "pfcp.measurement_info.radi",
15103 FT_BOOLEAN, 8, NULL, 0x04,
15104 NULL, HFILL }
15106 { &hf_pfcp_measurement_info_b3_istm,
15107 { "ISTM (Immediate Start Time Metering)", "pfcp.measurement_info.istm",
15108 FT_BOOLEAN, 8, NULL, 0x08,
15109 NULL, HFILL }
15111 { &hf_pfcp_measurement_info_b4_mnop,
15112 { "MNOP (Measurement of Number of Packets)", "pfcp.measurement_info.mnop",
15113 FT_BOOLEAN, 8, NULL, 0x10,
15114 NULL, HFILL }
15116 { &hf_pfcp_measurement_info_b5_sspoc,
15117 { "SSPOC (Send Start Pause of Charging)", "pfcp.measurement_info.sspoc",
15118 FT_BOOLEAN, 8, NULL, 0x20,
15119 NULL, HFILL }
15121 { &hf_pfcp_measurement_info_b6_aspoc,
15122 { "ASPOC (Applicable for Start Pause of Charging)", "pfcp.measurement_info.aspoc",
15123 FT_BOOLEAN, 8, NULL, 0x40,
15124 NULL, HFILL }
15126 { &hf_pfcp_measurement_info_b7_ciam,
15127 { "CIAM (Control of Inactive Measurement)", "pfcp.measurement_info.ciam",
15128 FT_BOOLEAN, 8, NULL, 0x80,
15129 NULL, HFILL }
15131 { &hf_pfcp_node_report_type_b0_upfr,
15132 { "UPFR (User Plane Path Failure Report)", "pfcp.node_report_type.upfr",
15133 FT_BOOLEAN, 8, NULL, 0x01,
15134 NULL, HFILL }
15136 { &hf_pfcp_node_report_type_b1_uprr,
15137 { "UPRR (User Plane Path Recovery Report)", "pfcp.node_report_type.uprr",
15138 FT_BOOLEAN, 8, NULL, 0x02,
15139 NULL, HFILL }
15141 { &hf_pfcp_node_report_type_b2_ckdr,
15142 { "CKDR (Clock Drift Report)", "pfcp.node_report_type.ckdr",
15143 FT_BOOLEAN, 8, NULL, 0x04,
15144 NULL, HFILL }
15146 { &hf_pfcp_node_report_type_b3_gpqr,
15147 { "GPQR (GTP-U Path QoS Report)", "pfcp.node_report_type.gpqr",
15148 FT_BOOLEAN, 8, NULL, 0x08,
15149 NULL, HFILL }
15151 { &hf_pfcp_node_report_type_b4_purr,
15152 { "PURR (peer GTP-U entity Restart Report)", "pfcp.node_report_type.purr",
15153 FT_BOOLEAN, 8, NULL, 0x10,
15154 NULL, HFILL }
15156 { &hf_pfcp_node_report_type_b5_vsr,
15157 { "VSR (Vendor-Specific Report)", "pfcp.node_report_type.pvsrurr",
15158 FT_BOOLEAN, 8, NULL, 0x20,
15159 NULL, HFILL }
15162 { &hf_pfcp_remote_gtp_u_peer_flags_b0_v6,
15163 { "V6 (IPv6)", "pfcp.remote_gtp_u_peer.flags.v6",
15164 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15165 NULL, HFILL }
15167 { &hf_pfcp_remote_gtp_u_peer_flags_b1_v4,
15168 { "V4 (IPv4)", "pfcp.remote_gtp_u_peer.flags.v4",
15169 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
15170 NULL, HFILL }
15172 { &hf_pfcp_remote_gtp_u_peer_flags_b2_di,
15173 { "DI (Destination Interface)", "pfcp.remote_gtp_u_peer.flags.di",
15174 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
15175 NULL, HFILL }
15177 { &hf_pfcp_remote_gtp_u_peer_flags_b3_ni,
15178 { "NI (Network Instance)", "pfcp.remote_gtp_u_peer.flags.ni",
15179 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
15180 NULL, HFILL }
15182 { &hf_pfcp_remote_gtp_u_peer_flags_b4_rts,
15183 { "RTS (Recovery Timestamp)", "pfcp.remote_gtp_u_peer.flags.rts",
15184 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
15185 NULL, HFILL }
15187 { &hf_pfcp_remote_gtp_u_peer_ipv4,
15188 { "IPv4 address", "pfcp.remote_gtp_u_peer.ipv4",
15189 FT_IPv4, BASE_NONE, NULL, 0x0,
15190 NULL, HFILL }
15192 { &hf_pfcp_remote_gtp_u_peer_ipv6,
15193 { "IPv6 address", "pfcp.remote_gtp_u_peer.ipv6",
15194 FT_IPv6, BASE_NONE, NULL, 0x0,
15195 NULL, HFILL }
15197 { &hf_pfcp_remote_gtp_u_peer_length_di,
15198 { "Length of Destination Interface field", "pfcp.remote_gtp_u_peer.length_di",
15199 FT_UINT16, BASE_DEC, NULL, 0,
15200 NULL, HFILL }
15202 { &hf_pfcp_remote_gtp_u_peer_length_ni,
15203 { "Length of Network Instance field", "pfcp.remote_gtp_u_peer.length_ni",
15204 FT_UINT16, BASE_DEC, NULL, 0,
15205 NULL, HFILL }
15207 { &hf_pfcp_remote_gtp_u_peer_time_stamp,
15208 { "Time Stamp", "pfcp.remote_gtp_u_peer.time_stamp",
15209 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15210 NULL, HFILL }
15212 { &hf_pfcp_ur_seqn,
15213 { "UR-SEQN", "pfcp.ur_seqn",
15214 FT_UINT32, BASE_DEC, NULL, 0x0,
15215 NULL, HFILL }
15217 { &hf_pfcp_oci_flags_b0_aoci,
15218 { "AOCI: Associate OCI with Node ID", "pfcp.oci_flags.aoci",
15219 FT_BOOLEAN, 8, NULL, 0x01,
15220 NULL, HFILL }
15222 { &hf_pfcp_pfcp_assoc_rel_req_b0_sarr,
15223 { "SARR (PFCP Association Release Request)", "pfcp.assoc_rel_req.sarr",
15224 FT_BOOLEAN, 8, NULL, 0x01,
15225 NULL, HFILL }
15227 { &hf_pfcp_pfcp_assoc_rel_req_b1_urss,
15228 { "URSS (non-zero Usage Reports for the affected PFCP Sessions Sent)", "pfcp.assoc_rel_req.urss",
15229 FT_BOOLEAN, 8, NULL, 0x02,
15230 NULL, HFILL }
15232 { &hf_pfcp_upiri_flg_b6_assosi,
15233 { "ASSOSI (Associated Source Instance)", "pfcp.upiri_flags.assosi",
15234 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x40,
15235 NULL, HFILL }
15237 { &hf_pfcp_upiri_flg_b5_assoni,
15238 { "ASSONI (Associated Network Instance)", "pfcp.upiri_flags.assoni",
15239 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
15240 NULL, HFILL }
15242 { &hf_pfcp_upiri_flg_b2b4_teidri,
15243 { "TEIDRI (TEID Range Indication)", "pfcp.upiri_flags.teidri",
15244 FT_UINT8, BASE_HEX, NULL, 0x1c,
15245 NULL, HFILL }
15247 { &hf_pfcp_upiri_flags_b1_v6,
15248 { "V6 (IPv6)", "pfcp.upiri_flags.v6",
15249 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
15250 NULL, HFILL }
15252 { &hf_pfcp_upiri_flags_b0_v4,
15253 { "V4 (IPv4)", "pfcp.upiri_flags.v4",
15254 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15255 NULL, HFILL }
15257 { &hf_pfcp_upiri_teidri,
15258 { "TEID Range Indication", "pfcp.upiri.teidri",
15259 FT_UINT8, BASE_DEC, NULL, 0x1C,
15260 NULL, HFILL }
15262 { &hf_pfcp_upiri_teid_range,
15263 { "TEID", "pfcp.upiri.teid_range",
15264 FT_UINT32, BASE_HEX, NULL, 0x0,
15265 NULL, HFILL }
15267 { &hf_pfcp_upiri_ipv4,
15268 { "IPv4 address", "pfcp.upiri.ipv4_addr",
15269 FT_IPv4, BASE_NONE, NULL, 0x0,
15270 NULL, HFILL }
15272 { &hf_pfcp_upiri_ipv6,
15273 { "IPv6 address", "pfcp.upiri.ipv6_addr",
15274 FT_IPv6, BASE_NONE, NULL, 0x0,
15275 NULL, HFILL }
15277 { &hf_pfcp_user_plane_inactivity_timer,
15278 { "User Plane Inactivity Timer", "pfcp.user_plane_inactivity_time",
15279 FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0,
15280 NULL, HFILL }
15283 { &hf_pfcp_subsequent_volume_quota_b0_tovol,
15284 { "TOVOL", "pfcp.subsequent_volume_quota_flags.tovol",
15285 FT_BOOLEAN, 8, NULL, 0x01,
15286 NULL, HFILL }
15288 { &hf_pfcp_subsequent_volume_quota_b1_ulvol,
15289 { "ULVOL", "pfcp.subsequent_volume_quota_flags.ulvol",
15290 FT_BOOLEAN, 8, NULL, 0x02,
15291 NULL, HFILL }
15293 { &hf_pfcp_subsequent_volume_quota_b2_dlvol,
15294 { "DLVOL", "pfcp.subsequent_volume_quota_flags.dlvol",
15295 FT_BOOLEAN, 8, NULL, 0x04,
15296 NULL, HFILL }
15298 { &hf_pfcp_subsequent_volume_quota_tovol,
15299 { "Total Volume", "pfcp.subsequent_volume_quota.tovol",
15300 FT_UINT64, BASE_DEC, NULL, 0x0,
15301 NULL, HFILL }
15303 { &hf_pfcp_subsequent_volume_quota_ulvol,
15304 { "Uplink Volume", "pfcp.subsequent_volume_quota.ulvol",
15305 FT_UINT64, BASE_DEC, NULL, 0x0,
15306 NULL, HFILL }
15308 { &hf_pfcp_subsequent_volume_quota_dlvol,
15309 { "Downlink Volume", "pfcp.subsequent_volume_quota.dlvol",
15310 FT_UINT64, BASE_DEC, NULL, 0x0,
15311 NULL, HFILL }
15314 { &hf_pfcp_subsequent_time_quota,
15315 { "Subsequent Time Quota", "pfcp.subsequent_time_quota",
15316 FT_UINT32, BASE_DEC, NULL, 0x0,
15317 NULL, HFILL }
15319 { &hf_pfcp_rqi_flag,
15320 { "RQI", "pfcp.rqi_flag",
15321 FT_BOOLEAN, 8, NULL, 0x01,
15322 NULL, HFILL }
15324 { &hf_pfcp_qfi,
15325 { "QFI", "pfcp.qfi_value",
15326 FT_UINT8, BASE_HEX, NULL, 0x3f,
15327 NULL, HFILL }
15329 { &hf_pfcp_query_urr_reference,
15330 { "Query URR Reference", "pfcp.query_urr_reference",
15331 FT_UINT32, BASE_DEC, NULL, 0x0,
15332 NULL, HFILL }
15335 { &hf_pfcp_additional_usage_reports_information_b15_auri,
15336 { "AURI (Additional Usage Reports Indication)", "pfcp.additional_usage_reports_information_auri",
15337 FT_BOOLEAN, 16, NULL, 0x8000,
15338 NULL, HFILL }
15340 { &hf_pfcp_additional_usage_reports_information_b14_b0_number_value,
15341 { "Number of Additional Usage Reports value", "pfcp.additional_usage_reports_information_value",
15342 FT_UINT16, BASE_DEC, NULL, 0x7FFF,
15343 NULL, HFILL }
15345 { &hf_pfcp_traffic_endpoint_id,
15346 { "Traffic Endpoint ID", "pfcp.traffic_endpoint_id",
15347 FT_UINT8, BASE_DEC, NULL, 0x0,
15348 NULL, HFILL }
15351 { &hf_pfcp_mac_address_flags_b0_sour,
15352 { "SOUR", "pfcp.mac_address.flags.sour",
15353 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15354 NULL, HFILL }
15356 { &hf_pfcp_mac_address_flags_b1_dest,
15357 { "DEST", "pfcp.mac_address.flags.dest",
15358 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
15359 NULL, HFILL }
15361 { &hf_pfcp_mac_address_flags_b2_usou,
15362 { "USUO", "pfcp.mac_address.flags.usuo",
15363 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
15364 NULL, HFILL }
15366 { &hf_pfcp_mac_address_flags_b3_udes,
15367 { "UDES", "pfcp.mac_address.flags.udes",
15368 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
15369 NULL, HFILL }
15371 { &hf_pfcp_mac_address_source_mac_address,
15372 { "Source MAC Address", "pfcp.mac_address.sour",
15373 FT_BYTES, BASE_NONE, NULL, 0x0,
15374 NULL, HFILL }
15376 { &hf_pfcp_mac_address_dest_mac_address,
15377 { "Destination MAC Address", "pfcp.mac_address.dest",
15378 FT_BYTES, BASE_NONE, NULL, 0x0,
15379 NULL, HFILL }
15381 { &hf_pfcp_mac_address_upper_source_mac_address,
15382 { "Upper Source MAC Address", "pfcp.mac_address.usou",
15383 FT_BYTES, BASE_NONE, NULL, 0x0,
15384 NULL, HFILL }
15386 { &hf_pfcp_mac_address_upper_dest_mac_address,
15387 { "Upper Destination MAC Address", "pfcp.mac_address.udes",
15388 FT_BYTES, BASE_NONE, NULL, 0x0,
15389 NULL, HFILL }
15392 { &hf_pfcp_c_tag_flags_b0_pcp,
15393 { "PCP", "pfcp.c_tag.flags.pcp",
15394 FT_BOOLEAN, 8, NULL, 0x01,
15395 "Priority code point", HFILL }
15397 { &hf_pfcp_c_tag_flags_b1_dei,
15398 { "DEI", "pfcp.c_tag.flags.dei",
15399 FT_BOOLEAN, 8, NULL, 0x02,
15400 "Drop eligible indicator", HFILL }
15402 { &hf_pfcp_c_tag_flags_b2_vid,
15403 { "VID", "pfcp.c_tag.flags.vid",
15404 FT_BOOLEAN, 8, NULL, 0x04,
15405 "VLAN identifier", HFILL }
15407 { &hf_pfcp_c_tag_cvid,
15408 { "C-VID", "pfcp.c_tag.cvid",
15409 FT_UINT16, BASE_HEX, NULL, 0x0,
15410 NULL, HFILL }
15412 { &hf_pfcp_c_tag_dei_flag,
15413 { "Drop eligible indicator (DEI)", "pfcp.c_tag.dei_flag",
15414 FT_BOOLEAN, 8, TFS(&tfs_eligible_ineligible), 0x08,
15415 NULL, HFILL }
15417 { &hf_pfcp_c_tag_pcp_value,
15418 { "Priority code point (PCP)", "pfcp.c_tag.pcp",
15419 FT_UINT8, BASE_DEC, VALS(pfcp_vlan_tag_pcp_vals), 0x07,
15420 NULL, HFILL }
15423 { &hf_pfcp_s_tag_flags_b0_pcp,
15424 { "PCP", "pfcp.s_tag.flags.pcp",
15425 FT_BOOLEAN, 8, NULL, 0x01,
15426 "Priority code point", HFILL }
15428 { &hf_pfcp_s_tag_flags_b1_dei,
15429 { "DEI", "pfcp.s_tag.flags.dei",
15430 FT_BOOLEAN, 8, NULL, 0x02,
15431 "Drop eligible indicator", HFILL }
15433 { &hf_pfcp_s_tag_flags_b2_vid,
15434 { "VID", "pfcp.s_tag.flags.vid",
15435 FT_BOOLEAN, 8, NULL, 0x04,
15436 "VLAN identifier", HFILL }
15438 { &hf_pfcp_s_tag_svid,
15439 { "S-VID", "pfcp.s_tag.svid",
15440 FT_UINT16, BASE_HEX, NULL, 0x0,
15441 NULL, HFILL }
15443 { &hf_pfcp_s_tag_dei_flag,
15444 { "Drop eligible indicator (DEI)", "pfcp.s_tag.dei_flag",
15445 FT_BOOLEAN, 8, TFS(&tfs_eligible_ineligible), 0x08,
15446 NULL, HFILL }
15448 { &hf_pfcp_s_tag_pcp_value,
15449 { "Priority code point (PCP)", "pfcp.s_tag.pcp",
15450 FT_UINT8, BASE_DEC, VALS(pfcp_vlan_tag_pcp_vals), 0x07,
15451 NULL, HFILL }
15454 { &hf_pfcp_ethertype,
15455 { "Ethertype", "pfcp.ethertype",
15456 FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0,
15457 NULL, HFILL }
15460 { &hf_pfcp_proxying_flags_b0_arp,
15461 { "ARP", "pfcp.proxying.flags.arp",
15462 FT_BOOLEAN, 8, NULL, 0x01,
15463 NULL, HFILL }
15465 { &hf_pfcp_proxying_flags_b1_ins,
15466 { "INS", "pfcp.proxying.flags.ins",
15467 FT_BOOLEAN, 8, NULL, 0x02,
15468 NULL, HFILL }
15471 { &hf_pfcp_ethertype_filter_id,
15472 { "Ethertype Filter ID", "pfcp.ethertype_filter_id",
15473 FT_UINT64, BASE_DEC, NULL, 0x0,
15474 NULL, HFILL }
15477 { &hf_pfcp_ethertype_filter_properties_flags_b0_bide,
15478 { "BIDE", "pfcp.ethertype_filter_properties.flags.bide",
15479 FT_BOOLEAN, 8, NULL, 0x01,
15480 NULL, HFILL }
15483 { &hf_pfcp_suggested_buffering_packets_count_packet_count,
15484 { "Packet count", "pfcp.suggested_buffering_packets_count.packet_count",
15485 FT_UINT8, BASE_DEC, NULL, 0x0,
15486 NULL, HFILL }
15489 { &hf_pfcp_user_id_flags_b0_imsif,
15490 { "IMSIF", "pfcp.user_id.flags.imsif",
15491 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15492 NULL, HFILL }
15494 { &hf_pfcp_user_id_flags_b1_imeif,
15495 { "IMEIF", "pfcp.user_id.flags.imeif",
15496 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
15497 NULL, HFILL }
15499 { &hf_pfcp_user_id_flags_b2_msisdnf,
15500 { "MSISDNF", "pfcp.user_id.flags.msisdnf",
15501 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
15502 NULL, HFILL }
15504 { &hf_pfcp_user_id_flags_b3_naif,
15505 { "NAIF", "pfcp.user_id.flags.naif",
15506 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
15507 NULL, HFILL }
15509 { &hf_pfcp_user_id_flags_b4_supif,
15510 { "SUPIF", "pfcp.user_id.flags.supif",
15511 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
15512 NULL, HFILL }
15514 { &hf_pfcp_user_id_flags_b5_gpsif,
15515 { "GPSIF", "pfcp.user_id.flags.gpsif",
15516 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
15517 NULL, HFILL }
15519 { &hf_pfcp_user_id_flags_b6_peif,
15520 { "PEIF", "pfcp.user_id.flags.peif",
15521 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x40,
15522 NULL, HFILL }
15525 { &hf_pfcp_user_id_length_of_imsi,
15526 { "Length of IMSI", "pfcp.user_id.length_of_imsi",
15527 FT_UINT8, BASE_DEC, NULL, 0x0,
15528 NULL, HFILL }
15530 { &hf_pfcp_user_id_length_of_imei,
15531 { "Length of IMEI", "pfcp.user_id.length_of_imei",
15532 FT_UINT8, BASE_DEC, NULL, 0x0,
15533 NULL, HFILL }
15535 { &hf_pfcp_user_id_imei,
15536 { "IMEI", "pfcp.user_id.imei",
15537 FT_STRING, BASE_NONE, NULL, 0,
15538 NULL, HFILL }
15540 { &hf_pfcp_user_id_length_of_msisdn,
15541 { "Length of MSISDN", "pfcp.user_id.length_of_msisdn",
15542 FT_UINT8, BASE_DEC, NULL, 0x0,
15543 NULL, HFILL }
15545 { &hf_pfcp_user_id_length_of_nai,
15546 { "Length of NAI", "pfcp.user_id.length_of_nai",
15547 FT_UINT8, BASE_DEC, NULL, 0x0,
15548 NULL, HFILL }
15550 { &hf_pfcp_user_id_nai,
15551 { "NAI", "pfcp.user_id.nai",
15552 FT_STRING, BASE_NONE, NULL, 0x0,
15553 NULL, HFILL }
15555 { &hf_pfcp_user_id_length_of_supi,
15556 { "Length of SUPI", "pfcp.user_id.length_of_supi",
15557 FT_UINT8, BASE_DEC, NULL, 0x0,
15558 NULL, HFILL }
15560 { &hf_pfcp_user_id_supi,
15561 { "SUPI", "pfcp.user_id.supi",
15562 FT_STRING, BASE_NONE, NULL, 0x0,
15563 NULL, HFILL }
15565 { &hf_pfcp_user_id_length_of_gpsi,
15566 { "Length of GPSI", "pfcp.user_id.length_of_gpsi",
15567 FT_UINT8, BASE_DEC, NULL, 0x0,
15568 NULL, HFILL }
15570 { &hf_pfcp_user_id_gpsi,
15571 { "GPSI", "pfcp.user_id.gpsi",
15572 FT_STRING, BASE_NONE, NULL, 0x0,
15573 NULL, HFILL }
15575 { &hf_pfcp_user_id_length_of_pei,
15576 { "Length of PEI", "pfcp.user_id.length_of_pei",
15577 FT_UINT8, BASE_DEC, NULL, 0x0,
15578 NULL, HFILL }
15580 { &hf_pfcp_user_id_pei,
15581 { "PEI", "pfcp.user_id.pei",
15582 FT_STRING, BASE_NONE, NULL, 0x0,
15583 NULL, HFILL }
15586 { &hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi,
15587 { "IMSIF", "pfcp.ethernet_pdu_session_information.flags.ethi",
15588 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15589 NULL, HFILL }
15592 { &hf_pfcp_mac_addresses_detected_number_of_mac_addresses,
15593 { "Number of MAC addresses", "pfcp.mac_addresses_detected.number_of_mac_addresses",
15594 FT_UINT8, BASE_DEC, NULL, 0x0,
15595 NULL, HFILL }
15597 { &hf_pfcp_mac_addresses_detected_mac_address,
15598 { "MAC Address", "pfcp.mac_addresses_detected.mac_address",
15599 FT_BYTES, BASE_NONE, NULL, 0x0,
15600 NULL, HFILL }
15602 { &hf_pfcp_mac_addresses_detected_length_of_ctag,
15603 { "Length of C-TAG", "pfcp.mac_addresses_detected.length_of_ctag",
15604 FT_UINT8, BASE_DEC, NULL, 0x0,
15605 NULL, HFILL }
15607 { &hf_pfcp_mac_addresses_detected_length_of_stag,
15608 { "Length of S-TAG", "pfcp.mac_addresses_detected.length_of_stag",
15609 FT_UINT8, BASE_DEC, NULL, 0x0,
15610 NULL, HFILL }
15613 { &hf_pfcp_mac_addresses_removed_number_of_mac_addresses,
15614 { "Number of MAC addresses", "pfcp.mac_addresses_removed.number_of_mac_address",
15615 FT_UINT8, BASE_DEC, NULL, 0x0,
15616 NULL, HFILL }
15618 { &hf_pfcp_mac_addresses_removed_mac_address,
15619 { "MAC Address", "pfcp.mac_addresses_removed.mac_addresses",
15620 FT_BYTES, BASE_NONE, NULL, 0x0,
15621 NULL, HFILL }
15623 { &hf_pfcp_mac_addresses_removed_length_of_ctag,
15624 { "Length of C-TAG", "pfcp.mac_addresses_removed.length_of_ctag",
15625 FT_UINT8, BASE_DEC, NULL, 0x0,
15626 NULL, HFILL }
15628 { &hf_pfcp_mac_addresses_removed_length_of_stag,
15629 { "Length of S-TAG", "pfcp.mac_addresses_removed.length_of_stag",
15630 FT_UINT8, BASE_DEC, NULL, 0x0,
15631 NULL, HFILL }
15634 { &hf_pfcp_ethernet_inactivity_timer,
15635 { "Ethernet Inactivity Timer", "pfcp.ethernet",
15636 FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0,
15637 NULL, HFILL }
15640 { &hf_pfcp_subsequent_event_quota,
15641 { "Subsequent Event Quota", "pfcp.subsequent_event_quota",
15642 FT_UINT32, BASE_DEC, NULL, 0,
15643 NULL, HFILL }
15646 { &hf_pfcp_subsequent_event_threshold,
15647 { "Subsequent Event Threshold", "pfcp.subsequent_event_threshold",
15648 FT_UINT32, BASE_DEC, NULL, 0,
15649 NULL, HFILL }
15652 { &hf_pfcp_trace_information_trace_id,
15653 { "Trace ID", "pfcp.trace_information.traceid",
15654 FT_UINT24, BASE_DEC, NULL, 0,
15655 NULL, HFILL }
15657 { &hf_pfcp_trace_information_length_trigger_events,
15658 { "Length of Trigger Events", "pfcp.trace_information.length_trigger_events",
15659 FT_UINT8, BASE_DEC, NULL, 0,
15660 NULL, HFILL }
15662 { &hf_pfcp_trace_information_trigger_events,
15663 { "Trigger Events", "pfcp.trace_information.trigger_events",
15664 FT_BYTES, BASE_NONE, NULL, 0x0,
15665 NULL, HFILL }
15667 { &hf_pfcp_trace_information_session_trace_depth,
15668 { "Session Trace Depth", "pfcp.trace_information.session_trace_depth",
15669 FT_UINT8, BASE_DEC, NULL, 0,
15670 NULL, HFILL }
15672 { &hf_pfcp_trace_information_length_list_interfaces,
15673 { "Length of List of Interfaces", "pfcp.trace_information.length_list_interfaces",
15674 FT_UINT8, BASE_DEC, NULL, 0,
15675 NULL, HFILL }
15677 { &hf_pfcp_trace_information_list_interfaces,
15678 { "List of Interfaces", "pfcp.trace_information.list_interfaces",
15679 FT_BYTES, BASE_NONE, NULL, 0x0,
15680 NULL, HFILL }
15682 { &hf_pfcp_trace_information_length_ipaddress,
15683 { "Length of IP Address", "pfcp.trace_information.length_ipaddress",
15684 FT_UINT8, BASE_DEC, NULL, 0,
15685 NULL, HFILL }
15687 { &hf_pfcp_trace_information_ipv4,
15688 { "IP Address of Trace Collection Entity", "pfcp.trace_information.ipv4",
15689 FT_IPv4, BASE_NONE, NULL, 0x0,
15690 NULL, HFILL }
15692 { &hf_pfcp_trace_information_ipv6,
15693 { "IP Address of Trace Collection Entity", "pfcp.trace_information.ipv6",
15694 FT_IPv6, BASE_NONE, NULL, 0x0,
15695 NULL, HFILL }
15698 { &hf_pfcp_framed_route,
15699 { "Framed-Route", "pfcp.framed_route",
15700 FT_STRING, BASE_NONE, NULL, 0x0,
15701 NULL, HFILL }
15703 { &hf_pfcp_framed_routing,
15704 { "Framed-Routing", "pfcp.framed_routing",
15705 FT_BYTES, BASE_NONE, NULL, 0x0,
15706 NULL, HFILL }
15708 { &hf_pfcp_framed_ipv6_route,
15709 { "Framed-IPv6-Route", "pfcp.framed_ipv6_route",
15710 FT_STRING, BASE_NONE, NULL, 0x0,
15711 NULL, HFILL }
15714 { &hf_pfcp_event_quota,
15715 { "Event Quota", "pfcp.event_quota",
15716 FT_UINT32, BASE_DEC, NULL, 0,
15717 NULL, HFILL }
15720 { &hf_pfcp_event_threshold,
15721 { "Event Threshold", "pfcp.event_threshold",
15722 FT_UINT32, BASE_DEC, NULL, 0,
15723 NULL, HFILL }
15726 { &hf_pfcp_time_stamp,
15727 { "Time Stamp", "pfcp.time_stamp",
15728 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15729 NULL, HFILL }
15732 { &hf_pfcp_averaging_window,
15733 { "Averaging Window", "pfcp.averaging_window",
15734 FT_UINT32, BASE_DEC, NULL, 0,
15735 NULL, HFILL }
15738 { &hf_pfcp_paging_policy_indicator,
15739 { "Paging Policy Indicator (PPI)", "pfcp.ppi",
15740 FT_UINT8, BASE_DEC, NULL, 0x7,
15741 NULL, HFILL }
15743 { &hf_pfcp_apn_dnn,
15744 { "APN/DNN", "pfcp.apn_dnn",
15745 FT_STRING, BASE_NONE, NULL, 0x0,
15746 NULL, HFILL }
15748 { &hf_pfcp_tgpp_interface_type,
15749 { "3GPP Interface Type", "pfcp.tgpp_interface_type",
15750 FT_UINT8, BASE_DEC, VALS(pfcp_tgpp_interface_type_vals), 0x3f,
15751 NULL, HFILL }
15754 { &hf_pfcp_pfcpsrreq_flags_b0_psdbu,
15755 { "PSDBU (PFCP Session Deleted By the UP function)", "pfcp.srreq_flags.psdbu",
15756 FT_BOOLEAN, 8, NULL, 0x01,
15757 NULL, HFILL }
15760 { &hf_pfcp_pfcpaureq_flags_b0_parps,
15761 { "PARPBS (PFCP Association Release Preparation Start)", "pfcp.aureq_flags.parps",
15762 FT_BOOLEAN, 8, NULL, 0x01,
15763 NULL, HFILL }
15766 { &hf_pfcp_activation_time,
15767 { "Activation Time", "pfcp.activation_time",
15768 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15769 NULL, HFILL }
15771 { &hf_pfcp_deactivation_time,
15772 { "Deactivation Time", "pfcp.deactivation_time",
15773 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15774 NULL, HFILL }
15777 { &hf_pfcp_mar_id,
15778 { "MAR ID", "pfcp.mar_id",
15779 FT_UINT16, BASE_DEC, NULL, 0x0,
15780 NULL, HFILL }
15783 { &hf_pfcp_steering_functionality,
15784 { "Steering Functionality", "pfcp.steering_functionality",
15785 FT_UINT8, BASE_DEC, VALS(pfcp_steering_functionality_vals), 0xF,
15786 NULL, HFILL }
15788 { &hf_pfcp_steering_mode,
15789 { "Steering Mode", "pfcp.steering_mode",
15790 FT_UINT8, BASE_DEC, VALS(pfcp_steering_mode_vals), 0xF,
15791 NULL, HFILL }
15794 { &hf_pfcp_weight,
15795 { "Weight", "pfcp.weight",
15796 FT_UINT8, BASE_DEC, NULL, 0x0,
15797 NULL, HFILL }
15799 { &hf_pfcp_priority,
15800 { "Priority", "pfcp.priority",
15801 FT_UINT8, BASE_DEC, VALS(pfcp_priority_vals), 0xF,
15802 NULL, HFILL }
15805 { &hf_pfcp_ue_ip_address_pool_length,
15806 { "UE IP address Pool Identity Length", "pfcp.ue_ip_address_pool_length",
15807 FT_UINT16, BASE_DEC, NULL, 0x0,
15808 NULL, HFILL }
15810 { &hf_pfcp_ue_ip_address_pool_identity,
15811 { "UE IP address Pool Identity", "pfcp.ue_ip_address_pool_identity",
15812 FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
15813 NULL, HFILL }
15816 { &hf_pfcp_alternative_smf_ip_address_flags_ppe,
15817 { "PPE (Preferred PFCP Entity)", "pfcp.alternative_smf_ip_address_flags.ppe",
15818 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
15819 NULL, HFILL }
15821 { &hf_pfcp_alternative_smf_ip_address_ipv4,
15822 { "IPv4 address", "pfcp.alternative_smf_ip_address.ipv4",
15823 FT_IPv4, BASE_NONE, NULL, 0x0,
15824 NULL, HFILL }
15826 { &hf_pfcp_alternative_smf_ip_address_ipv6,
15827 { "IPv6 address", "pfcp.alternative_smf_ip_address.ipv6",
15828 FT_IPv6, BASE_NONE, NULL, 0x0,
15829 NULL, HFILL }
15832 { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b0_priueai,
15833 { "PRIUEAI (Packet Replication Information – UE/PDU Session Address Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.priueai",
15834 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15835 NULL, HFILL }
15837 { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b1_prin19i,
15838 { "PRIN19I (Packet Replication Information - N19 Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.prin19i",
15839 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
15840 NULL, HFILL }
15842 { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b2_prin6i,
15843 { "PRIN6I (Packet Replication Information - N6 Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.prin6i",
15844 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
15845 NULL, HFILL }
15847 { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b3_dcaroni,
15848 { "DCARONI (Detection Carry-On Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.dcaroni",
15849 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
15850 NULL, HFILL }
15853 { &hf_pfcp_validity_time_value,
15854 { "Validity Time value", "pfcp.validity_time_value",
15855 FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
15856 NULL, HFILL }
15858 { &hf_pfcp_validity_time_str,
15859 { "Validity Time", "pfcp.validity_time",
15860 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
15861 NULL, HFILL }
15864 { &hf_pfcp_number_of_reports,
15865 { "Number of Reports", "pfcp.number_of_reports",
15866 FT_UINT16, BASE_DEC, NULL, 0x0,
15867 NULL, HFILL }
15870 { &hf_pfcp_pfcpasrsp_flags_flags_b0_psrei,
15871 { "PSREI (PFCP Session Retained Indication)", "pfcp.asrsp_flags.flags.psrei",
15872 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15873 NULL, HFILL }
15875 { &hf_pfcp_pfcpasrsp_flags_flags_b1_uupsi,
15876 { "UUPSI (UPF configured for IPUPS indication)", "pfcp.asrsp_flags.flags.uupsi",
15877 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
15878 NULL, HFILL }
15881 { &hf_pfcp_cp_pfcp_entity_ip_address_ipv4,
15882 { "IPv4 address", "pfcp.cp_pfcp_entity_ip_address.ipv4",
15883 FT_IPv4, BASE_NONE, NULL, 0x0,
15884 NULL, HFILL }
15886 { &hf_pfcp_cp_pfcp_entity_ip_address_ipv6,
15887 { "IPv6 address", "pfcp.cp_pfcp_entity_ip_address.ipv6",
15888 FT_IPv6, BASE_NONE, NULL, 0x0,
15889 NULL, HFILL }
15892 { &hf_pfcp_pfcpsereq_flags_flags_b0_resti,
15893 { "RESTI (Restoration Indication)", "pfcp.sereq_flags.flags.resti",
15894 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
15895 NULL, HFILL }
15897 { &hf_pfcp_pfcpsereq_flags_flags_b1_sumpc,
15898 { "SUMPC (Stop of Measurement of Pause of Charging)", "pfcp.sereq_flags.flags.sumpc",
15899 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
15900 NULL, HFILL }
15902 { &hf_pfcp_pfcpsereq_flags_flags_b2_hrsbom,
15903 { "HRSBOM (HR-SBO Mode)", "pfcp.sereq_flags.flags.hrsbom",
15904 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
15905 NULL, HFILL }
15908 { &hf_pfcp_ip_multicast_address_flags_b2_range,
15909 { "RANGE", "pfcp.ip_multicast_address.flags.range",
15910 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
15911 NULL, HFILL }
15913 { &hf_pfcp_ip_multicast_address_flags_b3_any,
15914 { "ANY", "pfcp.ip_multicast_address.flags.any",
15915 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
15916 NULL, HFILL }
15918 { &hf_pfcp_ip_multicast_address_start_ipv4,
15919 { "(Start) IPv4 address", "pfcp.ip_multicast_address.start_ipv4",
15920 FT_IPv4, BASE_NONE, NULL, 0x0,
15921 NULL, HFILL }
15923 { &hf_pfcp_ip_multicast_address_start_ipv6,
15924 { "(Start) IPv6 address", "pfcp.ip_multicast_address.start_ipv6",
15925 FT_IPv6, BASE_NONE, NULL, 0x0,
15926 NULL, HFILL }
15928 { &hf_pfcp_ip_multicast_address_end_ipv4,
15929 { "(End) IPv4 address", "pfcp.ip_multicast_address.end_ipv4",
15930 FT_IPv4, BASE_NONE, NULL, 0x0,
15931 NULL, HFILL }
15933 { &hf_pfcp_ip_multicast_address_end_ipv6,
15934 { "(End) IPv6 address", "pfcp.ip_multicast_address.end_ipv6",
15935 FT_IPv6, BASE_NONE, NULL, 0x0,
15936 NULL, HFILL }
15939 { &hf_pfcp_source_ip_address_flags_b2_mpl,
15940 { "MPL (Mask/Prefix Length)", "pfcp.source_ip_address.flags.mpl",
15941 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
15942 NULL, HFILL }
15944 { &hf_pfcp_source_ip_address_ipv4,
15945 { "IPv4 address", "pfcp.source_ip_address.ipv4",
15946 FT_IPv4, BASE_NONE, NULL, 0x0,
15947 NULL, HFILL }
15949 { &hf_pfcp_source_ip_address_ipv6,
15950 { "IPv6 address", "pfcp.source_ip_address.ipv6",
15951 FT_IPv6, BASE_NONE, NULL, 0x0,
15952 NULL, HFILL }
15954 { &hf_pfcp_source_ip_address_mask_prefix_lengt,
15955 { "Mask/Prefix Length", "pfcp.source_ip_address.mpl",
15956 FT_UINT8, BASE_DEC, NULL, 0x0,
15957 NULL, HFILL }
15960 { &hf_pfcp_packet_rate_status_flags_b0_ul,
15961 { "UL", "pfcp.packet_rate_status.flags.ul",
15962 FT_BOOLEAN, 8, NULL, 0x01,
15963 NULL, HFILL }
15965 { &hf_pfcp_packet_rate_status_flags_b1_dl,
15966 { "DL", "pfcp.packet_rate_status.flags.dl",
15967 FT_BOOLEAN, 8, NULL, 0x02,
15968 NULL, HFILL }
15970 { &hf_pfcp_packet_rate_status_flags_b2_apr,
15971 { "APR", "pfcp.packet_rate_status.flags.apr",
15972 FT_BOOLEAN, 8, NULL, 0x04,
15973 NULL, HFILL }
15975 { &hf_pfcp_packet_rate_status_ul,
15976 { "UL (remaining uplink packet limit)", "pfcp.packet_rate_status.tovol",
15977 FT_UINT16, BASE_DEC, NULL, 0x0,
15978 NULL, HFILL }
15980 { &hf_pfcp_packet_rate_status_dl,
15981 { "DL (remaining downlink packet limit)", "pfcp.packet_rate_status.ulvol",
15982 FT_UINT16, BASE_DEC, NULL, 0x0,
15983 NULL, HFILL }
15985 { &hf_pfcp_packet_rate_status_apr_ul,
15986 { "Additional UL (remaining uplink packet limit)", "pfcp.packet_rate_status.apr_tovol",
15987 FT_UINT16, BASE_DEC, NULL, 0x0,
15988 NULL, HFILL }
15990 { &hf_pfcp_packet_rate_status_apr_dl,
15991 { "Additional DL (remaining downlink packet limit)", "pfcp.packet_rate_status.apr_ulvol",
15992 FT_UINT16, BASE_DEC, NULL, 0x0,
15993 NULL, HFILL }
15995 { &hf_pfcp_packet_rate_status_validity_time,
15996 { "Rate Status Validity Time value", "pfcp.packet_rate_status.validity_time",
15997 FT_UINT64, BASE_DEC, NULL, 0x0,
15998 NULL, HFILL }
16001 { &hf_pfcp_create_bridge_router_info_flags_b0_bii,
16002 { "BII (Bridge Information Indication)", "pfcp.create_bridge_router_info.flags.bii",
16003 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16004 NULL, HFILL }
16006 { &hf_pfcp_create_bridge_router_info_flags_b1_rii,
16007 { "RII (Router Information Indication)", "pfcp.create_bridge_router_info.flags.rii",
16008 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16009 NULL, HFILL }
16012 { &hf_pfcp_port_number,
16013 { "Port Number value", "pfcp.port_number.value",
16014 FT_UINT32, BASE_DEC, NULL, 0x0,
16015 NULL, HFILL }
16018 { &hf_pfcp_nw_tt_port_number,
16019 { "NW-TT Port Number value", "pfcp.nw_tt_port_number.value",
16020 FT_UINT32, BASE_DEC, NULL, 0x0,
16021 NULL, HFILL }
16024 { &hf_pfcp_5gs_user_plane_node_id_flags_b0_bid,
16025 { "BID", "pfcp.5gs_user_plane_node_id.flags.sour",
16026 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16027 NULL, HFILL }
16029 { &hf_pfcp_5gs_user_plane_node_id_value,
16030 { "Use Plane Node value", "pfcp.5gs_user_plane_node_id.value",
16031 FT_UINT64, BASE_DEC, NULL, 0x0,
16032 NULL, HFILL }
16035 { &hf_pfcp_port_management_information,
16036 { "Port Management Information", "pfcp.port_management_information",
16037 FT_BYTES, BASE_NONE, NULL, 0x0,
16038 NULL, HFILL }
16041 { &hf_pfcp_requested_clock_drift_control_information_flags_b0_rrto,
16042 { "RRTO (Request to Report Time Offset)", "pfcp.requested_clock_drift_control_information.flags.rrto",
16043 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16044 NULL, HFILL }
16046 { &hf_pfcp_requested_clock_drift_control_information_flags_b1_rrcr,
16047 { "RRCR (Request to Report Cumulative RateRatio)", "pfcp.requested_clock_drift_control_information.flags.rrcr",
16048 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16049 NULL, HFILL }
16052 { &hf_pfcp_time_domain_number_value,
16053 { "Time Domain Number value", "pfcp.time_domain_number_value",
16054 FT_UINT8, BASE_DEC, NULL, 0x0,
16055 NULL, HFILL }
16058 { &hf_pfcp_time_offset_threshold,
16059 { "Time Offset Threshold", "pfcp.time_offset_threshold",
16060 FT_UINT64, BASE_DEC, NULL, 0x0,
16061 NULL, HFILL }
16064 { &hf_pfcp_cumulative_rate_ratio_threshold,
16065 { "Cumulative rateRatio Threshold", "pfcp.cumulative_rate_ratio_threshold",
16066 FT_UINT32, BASE_DEC, NULL, 0x0,
16067 NULL, HFILL }
16071 { &hf_pfcp_time_offset_measurement,
16072 { "Time Offset Measurement", "pfcp.time_offset_measurement",
16073 FT_UINT64, BASE_DEC, NULL, 0x0,
16074 NULL, HFILL }
16077 { &hf_pfcp_cumulative_rate_ratio_measurement,
16078 { "Cumulative rateRatio Measurement", "pfcp.cumulative_rate_ratio_measurement",
16079 FT_UINT32, BASE_DEC, NULL, 0x0,
16080 NULL, HFILL }
16083 { &hf_pfcp_srr_id,
16084 { "SRR ID value", "pfcp.srr_id_value",
16085 FT_UINT8, BASE_DEC, NULL, 0x0,
16086 NULL, HFILL }
16089 { &hf_pfcp_requested_access_availability_control_information_flags_b0_rrca,
16090 { "RRCA (Request to Report Change in Access availability)", "pfcp.requested_access_availability_control_information.flags.rrca",
16091 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16092 NULL, HFILL }
16095 { &hf_pfcp_availability_type,
16096 { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
16097 FT_UINT8, BASE_DEC, VALS(pfcp_availability_status_vals), 0xC,
16098 NULL, HFILL }
16100 { &hf_pfcp_availability_status,
16101 { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
16102 FT_UINT8, BASE_DEC, VALS(pfcp_availability_type_vals), 0x3,
16103 NULL, HFILL }
16106 { &hf_pfcp_mptcp_control_information_flags_b0_tci,
16107 { "TCI (Transport Converter Indication)", "pfcp.mptcp_control_information.flags.tci",
16108 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16109 NULL, HFILL }
16112 { &hf_pfcp_atsss_ll_control_information_flags_b0_lli,
16113 { "LLI: ATSSS-LL steering functionality is required", "pfcp.atsss_ll_control_information.flags.lli",
16114 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16115 NULL, HFILL }
16118 { &hf_pfcp_pmf_control_information_flags_b0_pmfi,
16119 { "PMFI (PMF functionality is required)", "pfcp.pmf_control_information.flags.pmfi",
16120 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16121 NULL, HFILL }
16123 { &hf_pfcp_pmf_control_information_flags_b1_drtti,
16124 { "DRTTI (Disallow PMF RTT Indication)", "pfcp.pmf_control_information.flags.drtti",
16125 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16126 NULL, HFILL }
16128 { &hf_pfcp_pmf_control_information_flags_b2_pqpm,
16129 { "PQPM (Per Qos flow Performance Measurement indication)", "pfcp.pmf_control_information.flags.pqpm",
16130 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16131 NULL, HFILL }
16133 { &hf_pfcp_pmf_control_information_number_of_qfi,
16134 { "Number of QFI", "pfcp.pmf_control_information.number_of_qfi",
16135 FT_UINT8, BASE_DEC, NULL, 0x0,
16136 NULL, HFILL }
16139 { &hf_pfcp_mptcp_address_information_flags_b0_v4,
16140 { "V4", "pfcp.mptcp_ip_address_information.flags.v4",
16141 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16142 NULL, HFILL }
16144 { &hf_pfcp_mptcp_address_information_flags_b1_v6,
16145 { "V6", "pfcp.mptcp_ip_address_information.flags.v6",
16146 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16147 NULL, HFILL }
16149 { &hf_pfcp_mptcp_proxy_type,
16150 { "MPTCP proxy type", "pfcp.mptcp_proxy.type",
16151 FT_BYTES, BASE_NONE, NULL, 0x0,
16152 NULL, HFILL }
16154 { &hf_pfcp_mptcp_proxy_port,
16155 { "MPTCP proxy port", "pfcp.mptcp_proxy.port",
16156 FT_UINT16, BASE_DEC, NULL, 0x0,
16157 NULL, HFILL }
16159 { &hf_pfcp_mptcp_proxy_ip_address_ipv4,
16160 { "MPTCP proxy IPv4 address", "pfcp.mptcp_proxy.ipv4",
16161 FT_IPv4, BASE_NONE, NULL, 0x0,
16162 NULL, HFILL }
16164 { &hf_pfcp_mptcp_proxy_ip_address_ipv6,
16165 { "MPTCP proxy IPv6 address", "pfcp.mptcp_proxy.ipv6",
16166 FT_IPv6, BASE_NONE, NULL, 0x0,
16167 NULL, HFILL }
16170 { &hf_pfcp_link_specific_multipath_ip_address_flags_b0_v4,
16171 { "V4", "pfcp.link_specific_multipath_ip_address.flags.v4",
16172 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16173 NULL, HFILL }
16175 { &hf_pfcp_link_specific_multipath_ip_address_flags_b1_v6,
16176 { "V6", "pfcp.link_specific_multipath_ip_address.flags.v6",
16177 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16178 NULL, HFILL }
16180 { &hf_pfcp_link_specific_multipath_ip_address_flags_b2_nv4,
16181 { "NV4", "pfcp.link_specific_multipath_ip_address.flags.nv4",
16182 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16183 NULL, HFILL }
16185 { &hf_pfcp_link_specific_multipath_ip_address_flags_b3_nv6,
16186 { "NV6", "pfcp.link_specific_multipath_ip_address.flags.nv6",
16187 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
16188 NULL, HFILL }
16190 { &hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv4,
16191 { "Link-Specific IPv4 Address for 3GPP Access", "pfcp.link_specific_multipath_ip_address.3gpp.ipv4",
16192 FT_IPv4, BASE_NONE, NULL, 0x0,
16193 NULL, HFILL }
16195 { &hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv6,
16196 { "Link-Specific IPv6 Address for 3GPP Access", "pfcp.link_specific_multipath_ip_address.3gpp.ipv6",
16197 FT_IPv6, BASE_NONE, NULL, 0x0,
16198 NULL, HFILL }
16200 { &hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv4,
16201 { "Link-Specific IPv4 Address for Non-3GPP Access", "pfcp.link_specific_multipath_ip_address.non3gpp.ipv4",
16202 FT_IPv4, BASE_NONE, NULL, 0x0,
16203 NULL, HFILL }
16205 { &hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv6,
16206 { "Link-Specific IPv6 Address for Non-3GPP Access", "pfcp.link_specific_multipath_ip_address.non3gpp.ipv6",
16207 FT_IPv6, BASE_NONE, NULL, 0x0,
16208 NULL, HFILL }
16211 { &hf_pfcp_pmf_address_information_flags_b0_v4,
16212 { "V4", "pfcp.pmf_address_information.flags.v4",
16213 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16214 NULL, HFILL }
16216 { &hf_pfcp_pmf_address_information_flags_b1_v6,
16217 { "V6", "pfcp.pmf_address_information.flags.v6",
16218 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16219 NULL, HFILL }
16221 { &hf_pfcp_pmf_address_information_flags_b2_mac,
16222 { "MAC", "pfcp.pmf_address_information.flags.mac",
16223 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16224 NULL, HFILL }
16226 { &hf_pfcp_pmf_address_ipv4,
16227 { "PMF IPv4 Address", "pfcp.pmf_address_information.ipv4",
16228 FT_IPv4, BASE_NONE, NULL, 0x0,
16229 NULL, HFILL }
16231 { &hf_pfcp_pmf_address_ipv6,
16232 { "PMF IPv6 Address", "pfcp.pmf_address_information.ipv6",
16233 FT_IPv6, BASE_NONE, NULL, 0x0,
16234 NULL, HFILL }
16236 { &hf_pfcp_pmf_port_3gpp,
16237 { "PMF port for 3GPP", "pfcp.pmf_address_information.port_3gpp",
16238 FT_UINT16, BASE_DEC, NULL, 0x0,
16239 NULL, HFILL }
16241 { &hf_pfcp_pmf_port_non3gpp,
16242 { "PMF port for Non-3GPP", "pfcp.pmf_address_information.port_non3gpp",
16243 FT_UINT16, BASE_DEC, NULL, 0x0,
16244 NULL, HFILL }
16246 { &hf_pfcp_pmf_mac_address_3gpp,
16247 { "MAC Address for 3GPP", "pfcp.pmf_address_information.mac_address_3gpp",
16248 FT_BYTES, BASE_NONE, NULL, 0x0,
16249 NULL, HFILL }
16251 { &hf_pfcp_pmf_mac_address_non3gpp,
16252 { "MAC Address for Non-3GPP", "pfcp.pmf_address_information.mac_address_non3gpp",
16253 FT_BYTES, BASE_NONE, NULL, 0x0,
16254 NULL, HFILL }
16257 { &hf_pfcp_atsss_ll_information_flags_b0_lli,
16258 { "LLI: ATSSS-LL steering functionality have been allocated", "pfcp.atsss_ll_information.flags.lli",
16259 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16260 NULL, HFILL }
16263 { &hf_pfcp_data_network_access_identifier,
16264 { "Data Network Access Identifier", "pfcp.data_network_access_identifier",
16265 FT_BYTES, BASE_NONE, NULL, 0x0,
16266 NULL, HFILL }
16269 { &hf_pfcp_packet_delay_milliseconds,
16270 { "Delay Value in milliseconds", "pfcp.average_packet_delay.milliseconds",
16271 FT_UINT32, BASE_DEC, NULL, 0x0,
16272 NULL, HFILL }
16275 { &hf_pfcp_qos_report_trigger_flags_b0_per,
16276 { "PER (Periodic Reporting)", "pfcp.qos_report_trigger.flags.v4",
16277 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16278 NULL, HFILL }
16280 { &hf_pfcp_qos_report_trigger_flags_b1_thr,
16281 { "THR (Event triggered based on Threshold)", "pfcp.qos_report_trigger.flags.thr",
16282 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16283 NULL, HFILL }
16285 { &hf_pfcp_qos_report_trigger_flags_b2_ire,
16286 { "IRE (Immediate Report)", "pfcp.qos_report_trigger.flags.ire",
16287 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16288 NULL, HFILL }
16291 { &hf_pfcp_gtp_u_path_interface_type_flags_b0_n9,
16292 { "N9", "pfcp.qos_report_trigtp_u_path_interface_typegger.flags.n9",
16293 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16294 NULL, HFILL }
16296 { &hf_pfcp_gtp_u_path_interface_type_flags_b1_n3,
16297 { "N3", "pfcp.gtp_u_path_interface_type.flags.n3",
16298 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16299 NULL, HFILL }
16302 { &hf_pfcp_requested_qos_monitoring_flags_b0_dlpd,
16303 { "DLPD (Downlink Packet Delay)", "pfcp.requested_qos_monitoring.flags.dlpd",
16304 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16305 NULL, HFILL }
16307 { &hf_pfcp_requested_qos_monitoring_flags_b1_ulpd,
16308 { "ULPD (Uplink Packet Delay)", "pfcp.requested_qos_monitoring.flags.ulpd",
16309 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16310 NULL, HFILL }
16312 { &hf_pfcp_requested_qos_monitoring_flags_b2_rppd,
16313 { "RPPD (Round Trip Packet Delay)", "pfcp.requested_qos_monitoring.flags.rppd",
16314 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16315 NULL, HFILL }
16317 { &hf_pfcp_requested_qos_monitoring_flags_b3_gtpupm,
16318 { "GTPUPM (GTP-U Path Monitoring)", "pfcp.requested_qos_monitoring.flags.gtpupm",
16319 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
16320 NULL, HFILL }
16322 { &hf_pfcp_requested_qos_monitoring_flags_b4_dlci,
16323 { "DLCI (Downlink Congestion Information)", "pfcp.requested_qos_monitoring.flags.dlci",
16324 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
16325 NULL, HFILL }
16327 { &hf_pfcp_requested_qos_monitoring_flags_b5_ulci,
16328 { "ULCI (Uplink Congestion Information)", "pfcp.requested_qos_monitoring.flags.ulci",
16329 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
16330 NULL, HFILL }
16332 { &hf_pfcp_requested_qos_monitoring_flags_b6_dlpr,
16333 { "DLPR (Downlink Packet Rate)", "pfcp.requested_qos_monitoring.flags.dlpr",
16334 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x40,
16335 NULL, HFILL }
16337 { &hf_pfcp_requested_qos_monitoring_flags_b7_ulpr,
16338 { "ULPR (Uplink Packet Rate)", "pfcp.requested_qos_monitoring.flags.ulpr",
16339 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x80,
16340 NULL, HFILL }
16343 { &hf_pfcp_reporting_frequency_flags_b0_evett,
16344 { "EVETT (Event Triggered QoS monitoring reporting)", "pfcp.reporting_frequency.flags.evett",
16345 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16346 NULL, HFILL }
16348 { &hf_pfcp_reporting_frequency_flags_b1_perio,
16349 { "PERIO (Periodic QoS monitoring reporting)", "pfcp.reporting_frequency.flags.perio",
16350 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16351 NULL, HFILL }
16353 { &hf_pfcp_reporting_frequency_flags_b2_sesrl,
16354 { "SESRL (Session Released QoS monitoring reporting) (Deprecated in R18.1)", "pfcp.reporting_frequency.flags.sesrl",
16355 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16356 NULL, HFILL }
16359 { &hf_pfcp_packet_delay_thresholds_flags_b0_dl,
16360 { "DL (Downlink)", "pfcp.packet_delay_thresholds.flags.dl",
16361 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16362 NULL, HFILL }
16364 { &hf_pfcp_packet_delay_thresholds_flags_b1_ul,
16365 { "UL (Uplink)", "pfcp.packet_delay_thresholds.flags.ul",
16366 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16367 NULL, HFILL }
16369 { &hf_pfcp_packet_delay_thresholds_flags_b2_rp,
16370 { "RP (Round Trip)", "pfcp.packet_delay_thresholds.flags.rp",
16371 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16372 NULL, HFILL }
16374 { &hf_pfcp_packet_delay_thresholds_downlink,
16375 { "Downlink packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.downlink",
16376 FT_UINT32, BASE_DEC, NULL, 0x0,
16377 NULL, HFILL }
16379 { &hf_pfcp_packet_delay_thresholds_uplink,
16380 { "Downlink packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.uplink",
16381 FT_UINT32, BASE_DEC, NULL, 0x0,
16382 NULL, HFILL }
16384 { &hf_pfcp_packet_delay_thresholds_roundtrip,
16385 { "Round trip packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.roundtrip",
16386 FT_UINT32, BASE_DEC, NULL, 0x0,
16387 NULL, HFILL }
16390 { &hf_pfcp_minimum_wait_time_seconds,
16391 { "The Minimum Wait Time (seconds)", "pfcp.minimum_wait_time.seconds",
16392 FT_UINT32, BASE_DEC, NULL, 0x0,
16393 NULL, HFILL }
16396 { &hf_pfcp_qos_monitoring_measurement_flags_b0_dlpd,
16397 { "DLPD (Downlink Packet Delay)", "pfcp.qos_monitoring_measurement.flags.dlpd",
16398 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16399 NULL, HFILL }
16401 { &hf_pfcp_qos_monitoring_measurement_flags_b1_ulpd,
16402 { "ULPD (Uplink Packet Delay)", "pfcp.qos_monitoring_measurement.flags.ulpd",
16403 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16404 NULL, HFILL }
16406 { &hf_pfcp_qos_monitoring_measurement_flags_b2_rppd,
16407 { "RPPD (Round Trip Packet Delay)", "pfcp.qos_monitoring_measurement.flags.rppd",
16408 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16409 NULL, HFILL }
16411 { &hf_pfcp_qos_monitoring_measurement_flags_b3_plmf,
16412 { "PLMF (Packet Delay Measurement Failure)", "pfcp.qos_monitoring_measurement.flags.plmf",
16413 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
16414 NULL, HFILL }
16416 { &hf_pfcp_qos_monitoring_measurement_flags_b4_dlci,
16417 { "DLCI (Downlink Congestion Info)", "pfcp.qos_monitoring_measurement.flags.dlci",
16418 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
16419 NULL, HFILL }
16421 { &hf_pfcp_qos_monitoring_measurement_flags_b5_ulci,
16422 { "ULCI (Uplink Congestion Info)", "pfcp.qos_monitoring_measurement.flags.ulci",
16423 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
16424 NULL, HFILL }
16427 { &hf_pfcp_qos_monitoring_measurement_downlink_packet_delay,
16428 { "Downlink packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.downlink_packet_delay",
16429 FT_UINT32, BASE_DEC, NULL, 0x0,
16430 NULL, HFILL }
16432 { &hf_pfcp_qos_monitoring_measurement_uplink_packet_delay,
16433 { "Downlink packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.uplink_packet_delay",
16434 FT_UINT32, BASE_DEC, NULL, 0x0,
16435 NULL, HFILL }
16437 { &hf_pfcp_qos_monitoring_measurement_roundtrip,
16438 { "Round trip packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.roundtrip",
16439 FT_UINT32, BASE_DEC, NULL, 0x0,
16440 NULL, HFILL }
16442 { &hf_pfcp_qos_monitoring_measurement_downlink_congestion_information,
16443 { "Downlink Congestion information", "pfcp.qos_monitoring_measurement.downlink_congestion_information",
16444 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
16445 NULL, HFILL }
16447 { &hf_pfcp_qos_monitoring_measurement_uplink_congestion_information,
16448 { "Uplink Congestion information", "pfcp.qos_monitoring_measurement.uplink_congestion_information",
16449 FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
16450 NULL, HFILL }
16452 { &hf_pfcp_qos_monitoring_measurement_downlink_packet_rate,
16453 { "Average Downlink packet rate (kilobits per second)", "pfcp.qos_monitoring_measurement.downlink_packet_rate",
16454 FT_UINT32, BASE_DEC, NULL, 0x0,
16455 NULL, HFILL }
16457 { &hf_pfcp_qos_monitoring_measurement_uplink_packet_rate,
16458 { "Average Uplink packet rate (kilobits per second)", "pfcp.qos_monitoring_measurement.uplink_packet_rate",
16459 FT_UINT32, BASE_DEC, NULL, 0x0,
16460 NULL, HFILL }
16463 { &hf_pfcp_mt_edt_control_information_flags_b0_rdsi,
16464 { "RDSI (Reporting DL data packets Size Indication)", "pfcp.mt_edt_control_information.flags.rdsi",
16465 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16466 NULL, HFILL }
16469 { &hf_pfcp_dl_data_packets_size,
16470 { "DL Data Packets Size", "pfcp.dl_data_packets_size",
16471 FT_UINT16, BASE_DEC, NULL, 0x0,
16472 NULL, HFILL }
16475 { &hf_pfcp_qer_control_indications_o5_b0_rcsr,
16476 { "RCSR (Rate Control Status Reporting)", "pfcp.qer_control_indications.rcsr",
16477 FT_BOOLEAN, 8, NULL, 0x01,
16478 NULL, HFILL }
16481 { &hf_pfcp_nf_instance_id,
16482 { "NF Instance ID", "pfcp.nf_instance_id",
16483 FT_GUID, BASE_NONE, NULL, 0x0,
16484 NULL, HFILL }
16487 { &hf_pfcp_s_nssai_sst,
16488 { "SST", "pfcp.s_nssai_sst.sst",
16489 FT_BYTES, BASE_NONE, NULL, 0x0,
16490 NULL, HFILL }
16492 { &hf_pfcp_s_nssai_sd,
16493 { "SD", "pfcp.s_nssai_sst.sd",
16494 FT_BYTES, BASE_NONE, NULL, 0x0,
16495 NULL, HFILL }
16498 { &hf_pfcp_ip_version_flags_b1_v6,
16499 { "V6 (IPv6)", "pfcp.ip_version.v6",
16500 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16501 NULL, HFILL }
16503 { &hf_pfcp_ip_version_flags_b0_v4,
16504 { "V4 (IPv4)", "pfcp.ip_version.v4",
16505 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16506 NULL, HFILL }
16509 { &hf_pfcp_pfcpasreq_flags_flags_b0_uupsi,
16510 { "UUPSI (UPF configured for IPUPS indication)", "pfcp.asreq_flags.flags.uupsi",
16511 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16512 NULL, HFILL }
16515 { &hf_pfcp_data_status_flags_b0_drop,
16516 { "DROP (First DL packet is discared by UP function)", "pfcp.data_status.flags.drop",
16517 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16518 NULL, HFILL }
16520 { &hf_pfcp_data_status_flags_b1_buff,
16521 { "BUFF (First DL packet is received and buffered by UP function)", "pfcp.data_status.flags.buff",
16522 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16523 NULL, HFILL }
16526 { &hf_pfcp_rds_configuration_information_flags_b0_rds,
16527 { "RDS (Reliable Data Service)", "pfcp.rds_configuration_information.flags.rds",
16528 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16529 NULL, HFILL }
16532 { &hf_pfcp_multipath_application_indication_flags_b0_mtai,
16533 { "MTAI (MPTCP Applicable Indication)", "pfcp.multipath_application_indication.flags.mtai",
16534 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16535 NULL, HFILL }
16537 { &hf_pfcp_multipath_application_indication_flags_b1_mqai,
16538 { "MQAI (MPQUIC Applicable Indication)", "pfcp.multipath_application_indication.flags.mqai",
16539 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16540 NULL, HFILL }
16543 { &hf_pfcp_user_plane_node_management_information_container,
16544 { "Predefined Rules Name", "pfcp.user_plane_node_management_information_container",
16545 FT_BYTES, BASE_NONE, NULL, 0x0,
16546 NULL, HFILL }
16549 { &hf_pfcp_number_of_ue_ip_addresses_b0_ipv4,
16550 { "IPv4", "pfcp.number_of_ue_ip_addresses.v4",
16551 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16552 NULL, HFILL }
16554 { &hf_pfcp_number_of_ue_ip_addresses_b1_ipv6,
16555 { "IPv6", "pfcp.number_of_ue_ip_addresses.v6",
16556 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16557 NULL, HFILL }
16559 { &hf_pfcp_number_of_ue_ip_addresses_ipv4,
16560 { "Number of UE IPv4 Addresses", "pfcp.number_of_ue_ip_addresses.ipv4addresses",
16561 FT_UINT32, BASE_DEC, NULL, 0x0,
16562 NULL, HFILL }
16564 { &hf_pfcp_number_of_ue_ip_addresses_ipv6,
16565 { "Number of UE IPv6 Addresses", "pfcp.number_of_ue_ip_addresses.ipv6addresses",
16566 FT_UINT32, BASE_DEC, NULL, 0x0,
16567 NULL, HFILL }
16570 { &hf_pfcp_validity_timer,
16571 { "Validity Timer", "pfcp.validity_timer",
16572 FT_UINT16, BASE_DEC, NULL, 0x0,
16573 NULL, HFILL }
16576 { &hf_pfcp_rattype,
16577 { "RAT Type", "pfcp.rattype",
16578 FT_UINT8, BASE_DEC, VALS(pfcp_rattype_vals), 0x0,
16579 NULL, HFILL }
16582 { &hf_pfcp_l2tp_user_authentication_proxy_authen_type_value,
16583 { "Proxy Authen Type Value", "pfcp.l2tp_user_authentication.proxy_authen_type_value",
16584 FT_UINT16, BASE_DEC, NULL, 0x0,
16585 NULL, HFILL }
16587 { &hf_pfcp_l2tp_user_authentication_b0_pan,
16588 { "PAN (Proxy Authen Name)", "pfcp.l2tp_user_authentication.flags.pan",
16589 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16590 NULL, HFILL }
16592 { &hf_pfcp_l2tp_user_authentication_b1_pac,
16593 { "PAC (Proxy Authen Challenge)", "pfcp.l2tp_user_authentication.flags.pac",
16594 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16595 NULL, HFILL }
16597 { &hf_pfcp_l2tp_user_authentication_b2_par,
16598 { "PAR (Proxy Authen Response)", "pfcp.l2tp_user_authentication.flags.par",
16599 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16600 NULL, HFILL }
16602 { &hf_pfcp_l2tp_user_authentication_b3_pai,
16603 { "PAI (Proxy Authen UD)", "pfcp.l2tp_user_authentication.flags.pai",
16604 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
16605 NULL, HFILL }
16607 { &hf_pfcp_l2tp_user_authentication_proxy_authen_name_len,
16608 { "Proxy Authen Name Length", "pfcp.l2tp_user_authentication.pan_len",
16609 FT_UINT8, BASE_DEC, NULL, 0x0,
16610 NULL, HFILL }
16612 { &hf_pfcp_l2tp_user_authentication_proxy_authen_name,
16613 { "Proxy Authen Name", "pfcp.l2tp_user_authentication.pan",
16614 FT_STRING, BASE_NONE, NULL, 0,
16615 NULL, HFILL }
16617 { &hf_pfcp_l2tp_user_authentication_proxy_authen_challenge_len,
16618 { "Proxy Authen Challenge Length", "pfcp.l2tp_user_authentication.pac_len",
16619 FT_UINT8, BASE_DEC, NULL, 0x0,
16620 NULL, HFILL }
16622 { &hf_pfcp_l2tp_user_authentication_proxy_authen_challenge,
16623 { "Proxy Authen Challenge", "pfcp.l2tp_user_authentication.pac",
16624 FT_STRING, BASE_NONE, NULL, 0,
16625 NULL, HFILL }
16627 { &hf_pfcp_l2tp_user_authentication_proxy_authen_response_len,
16628 { "Proxy Authen Response Length", "pfcp.l2tp_user_authentication.par_len",
16629 FT_UINT8, BASE_DEC, NULL, 0x0,
16630 NULL, HFILL }
16632 { &hf_pfcp_l2tp_user_authentication_proxy_authen_response,
16633 { "Proxy Authen Response", "pfcp.l2tp_user_authentication.par",
16634 FT_STRING, BASE_NONE, NULL, 0,
16635 NULL, HFILL }
16637 { &hf_pfcp_l2tp_user_authentication_proxy_authen_id,
16638 { "Proxy Authen ID", "pfcp.l2tp_user_authentication.pai",
16639 FT_UINT8, BASE_DEC, NULL, 0x0,
16640 NULL, HFILL }
16643 { &hf_pfcp_lns_address_ipv4,
16644 { "IPv4 address", "pfcp.lns_address.ipv4",
16645 FT_IPv4, BASE_NONE, NULL, 0x0,
16646 NULL, HFILL }
16648 { &hf_pfcp_lns_address_ipv6,
16649 { "IPv6 address", "pfcp.lns_address.ipv6",
16650 FT_IPv6, BASE_NONE, NULL, 0x0,
16651 NULL, HFILL }
16654 { &hf_pfcp_tunnel_preference_value,
16655 { "Tunnel Preference Value", "pfcp.tunnel_preference_value",
16656 FT_UINT24, BASE_DEC, NULL, 0,
16657 NULL, HFILL }
16660 { &hf_pfcp_calling_number_value,
16661 { "Calling Number Value", "pfcp.calling_number_value",
16662 FT_STRING, BASE_NONE, NULL, 0,
16663 NULL, HFILL }
16665 { &hf_pfcp_called_number_value,
16666 { "Called Number Value", "pfcp.called_number_value",
16667 FT_STRING, BASE_NONE, NULL, 0,
16668 NULL, HFILL }
16671 { &hf_pfcp_l2tp_session_indications_o5_b0_reuia,
16672 { "REUIA", "pfcp.l2tp_session_indications.reuia",
16673 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16674 "Request UE IP Address", HFILL }
16676 { &hf_pfcp_l2tp_session_indications_o5_b1_redsa,
16677 { "REDSA", "pfcp.l2tp_session_indications.redsa",
16678 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16679 "Request DNS Server Address", HFILL }
16681 { &hf_pfcp_l2tp_session_indications_o5_b2_rensa,
16682 { "RENSA", "pfcp.l2tp_session_indications.rensa",
16683 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16684 "Request NBNS Server Address", HFILL }
16687 { &hf_pfcp_maximum_receive_unit,
16688 { "Maximum Receive Unit", "pfcp.maximum_receive_unit",
16689 FT_UINT16, BASE_DEC, NULL, 0x0,
16690 NULL, HFILL }
16693 { &hf_pfcp_thresholds_flags_b0_rtt,
16694 { "RTT", "pfcp.thresholds.flags.rtt",
16695 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16696 NULL, HFILL }
16698 { &hf_pfcp_thresholds_flags_b1_plr,
16699 { "PLR (Packet Loss Rate)", "pfcp.thresholds.flags.plr",
16700 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16701 NULL, HFILL }
16703 { &hf_pfcp_thresholds_rtt,
16704 { "RTT (in milliseconds)", "pfcp.thresholds.rtt",
16705 FT_UINT16, BASE_DEC, NULL, 0x0,
16706 NULL, HFILL }
16708 { &hf_pfcp_thresholds_plr,
16709 { "Packet Loss Rate (in percent)", "pfcp.thresholds.plr",
16710 FT_UINT8, BASE_DEC, NULL, 0x0,
16711 NULL, HFILL }
16714 { &hf_pfcp_l2tp_steering_mode_indications_o5_b0_albi,
16715 { "ALBI", "pfcp.l2tp_session_indications.reuia",
16716 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16717 "Autonomous Load Balancing Indicator", HFILL }
16719 { &hf_pfcp_l2tp_steering_mode_indications_o5_b1_ueai,
16720 { "UEAI", "pfcp.l2tp_session_indications.redsa",
16721 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16722 "UE Assistance Indicator", HFILL }
16725 { &hf_pfcp_group_id,
16726 { "Group ID", "pfcp.group_id",
16727 FT_STRING, BASE_NONE, NULL, 0x0,
16728 NULL, HFILL }
16731 { &hf_pfcp_cp_ip_address_ipv4,
16732 { "IPv4 address", "pfcp.cp_ip_address.ipv4",
16733 FT_IPv4, BASE_NONE, NULL, 0x0,
16734 NULL, HFILL }
16736 { &hf_pfcp_cp_ip_address_ipv6,
16737 { "IPv6 address", "pfcp.cp_ip_address.ipv6",
16738 FT_IPv6, BASE_NONE, NULL, 0x0,
16739 NULL, HFILL }
16742 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4,
16743 { "DIPV4", "pfcp.ip_address_and_port_number_replacement.flag.dipv4",
16744 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16745 NULL, HFILL }
16747 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6,
16748 { "DIPV6", "pfcp.ip_address_and_port_number_replacement.flag.dipv6",
16749 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16750 NULL, HFILL }
16752 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn,
16753 { "DPN", "pfcp.ip_address_and_port_number_replacement.flag.dpn",
16754 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16755 NULL, HFILL }
16757 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4,
16758 { "SIPV4", "pfcp.ip_address_and_port_number_replacement.flag.sipv4",
16759 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
16760 NULL, HFILL }
16762 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6,
16763 { "SIPV6", "pfcp.ip_address_and_port_number_replacement.flag.sipv6",
16764 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
16765 NULL, HFILL }
16767 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn,
16768 { "SPN", "pfcp.ip_address_and_port_number_replacement.flag.spn",
16769 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
16770 NULL, HFILL }
16772 { &hf_pfcp_ip_address_and_port_number_replacement_flag_b6_umn6rs,
16773 { "UMN6RS", "pfcp.ip_address_and_port_number_replacement.flag.umn6rs",
16774 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
16775 NULL, HFILL }
16778 { &hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4,
16779 { "Destination IPv4 address", "pfcp.ip_address_and_port_number_replacement.dipv4",
16780 FT_IPv4, BASE_NONE, NULL, 0x0,
16781 NULL, HFILL }
16783 { &hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6,
16784 { "Destination IPv6 address", "pfcp.ip_address_and_port_number_replacement.dipv6",
16785 FT_IPv6, BASE_NONE, NULL, 0x0,
16786 NULL, HFILL }
16788 { &hf_pfcp_ip_address_and_port_number_replacement_destination_port,
16789 { "Destination Port Number", "pfcp.ip_address_and_port_number_replacement.dpn",
16790 FT_UINT16, BASE_DEC, NULL, 0x0,
16791 NULL, HFILL }
16793 { &hf_pfcp_ip_address_and_port_number_replacement_source_ipv4,
16794 { "Source IPv4 address", "pfcp.ip_address_and_port_number_replacement.sipv4",
16795 FT_IPv4, BASE_NONE, NULL, 0x0,
16796 NULL, HFILL }
16798 { &hf_pfcp_ip_address_and_port_number_replacement_source_ipv6,
16799 { "Source IPv6 address", "pfcp.ip_address_and_port_number_replacement.sipv6",
16800 FT_IPv6, BASE_NONE, NULL, 0x0,
16801 NULL, HFILL }
16803 { &hf_pfcp_ip_address_and_port_number_replacement_source_port,
16804 { "Source Port Number", "pfcp.ip_address_and_port_number_replacement.spn",
16805 FT_UINT16, BASE_DEC, NULL, 0x0,
16806 NULL, HFILL }
16809 { &hf_pfcp_dns_query_filter_pattern_len,
16810 { "DNS Query Filter Pattern Length", "pfcp.dns_query_filter.pattern_len",
16811 FT_UINT16, BASE_DEC, NULL, 0x0,
16812 NULL, HFILL }
16814 { &hf_pfcp_dns_query_filter_pattern,
16815 { "DNS Query Filter Pattern", "pfcp.dns_query_filter.pattern",
16816 FT_STRING, BASE_NONE, NULL, 0,
16817 NULL, HFILL }
16820 { &hf_pfcp_event_notification_uri,
16821 { "Event Notification URI", "pfcp.event_notification_uri",
16822 FT_STRING, BASE_NONE, NULL, 0,
16823 NULL, HFILL }
16826 { &hf_pfcp_notification_correlation_id,
16827 { "QER Correlation ID", "pfcp.qer_correlation_id",
16828 FT_UINT32, BASE_DEC, NULL, 0x0,
16829 NULL, HFILL }
16832 { &hf_pfcp_reporting_flags_o5_b0_dupl,
16833 { "DUPL (Duplication Notification)", "pfcp.reporting_flags.dupl",
16834 FT_BOOLEAN, 8, NULL, 0x01,
16835 NULL, HFILL }
16838 { &hf_pfcp_mbs_session_identifier_flag_b0_tmgi,
16839 { "TGMI", "pfcp.session_identifier.flag.tmgi",
16840 FT_BOOLEAN, 8, NULL, 0x01,
16841 NULL, HFILL }
16843 { &hf_pfcp_mbs_session_identifier_flag_b1_ssmi,
16844 { "SSMI", "pfcp.session_identifier.flag.ssmi",
16845 FT_BOOLEAN, 8, NULL, 0x02,
16846 NULL, HFILL }
16848 { &hf_pfcp_mbs_session_identifier_flag_b2_nidi,
16849 { "NIDI", "pfcp.session_identifier.flag.nidi",
16850 FT_BOOLEAN, 8, NULL, 0x04,
16851 NULL, HFILL }
16853 { &hf_pfcp_mbs_session_identifier_tmgi,
16854 {"TMGI", "pfcp.mbs_session_identifier.tmgi",
16855 FT_BYTES, BASE_NONE, NULL, 0x0,
16856 NULL, HFILL}
16858 { &hf_pfcp_mbs_session_identifier_source_address_type,
16859 { "Source Address Type", "pfcp.mbs_session_identifier.source_address.type",
16860 FT_UINT8, BASE_DEC, NULL, 0xC0,
16861 NULL, HFILL }
16863 { &hf_pfcp_mbs_session_identifier_source_address_length,
16864 { "Source Address Length", "pfcp.mbs_session_identifier.source_address.length",
16865 FT_UINT8, BASE_DEC, NULL, 0x3F,
16866 NULL, HFILL }
16868 { &hf_pfcp_mbs_session_identifier_source_address_ipv4,
16869 { "Source IPv4 address", "pfcp.mbs_session_identifier.source_address.ipv4",
16870 FT_IPv4, BASE_NONE, NULL, 0x0,
16871 NULL, HFILL }
16873 { &hf_pfcp_mbs_session_identifier_source_address_ipv6,
16874 { "Source IPv6 address", "pfcp.mbs_session_identifier.source_address.ipv6",
16875 FT_IPv6, BASE_NONE, NULL, 0x0,
16876 NULL, HFILL }
16878 { &hf_pfcp_mbs_session_identifier_nidi,
16879 {"NIDI", "pfcp.mbs_session_identifier.nidi",
16880 FT_BYTES, BASE_NONE, NULL, 0x0,
16881 NULL, HFILL}
16884 { &hf_pfcp_multicast_transport_information_endpoint_identifier,
16885 { "Common Tunnel Endpoint Identifier", "pfcp.multicast_transport_information.endpoint_identifier",
16886 FT_UINT32, BASE_DEC, NULL, 0x0,
16887 NULL, HFILL }
16889 { &hf_pfcp_multicast_transport_information_distribution_address_type,
16890 { "Distribution Address Type", "pfcp.multicast_transport_information.distribution_address.type",
16891 FT_UINT8, BASE_DEC, NULL, 0xC0,
16892 NULL, HFILL }
16894 { &hf_pfcp_multicast_transport_information_distribution_address_length,
16895 { "Distribution Address Length", "pfcp.multicast_transport_information.distribution_address.length",
16896 FT_UINT8, BASE_DEC, NULL, 0x3F,
16897 NULL, HFILL }
16899 { &hf_pfcp_multicast_transport_information_distribution_address_ipv4,
16900 { "Distribution IPv4 address", "pfcp.multicast_transport_information.distribution_address.ipv4",
16901 FT_IPv4, BASE_NONE, NULL, 0x0,
16902 NULL, HFILL }
16904 { &hf_pfcp_multicast_transport_information_distribution_address_ipv6,
16905 { "Distribution IPv6 address", "pfcp.multicast_transport_information.distribution_address.ipv6",
16906 FT_IPv6, BASE_NONE, NULL, 0x0,
16907 NULL, HFILL }
16909 { &hf_pfcp_multicast_transport_information_source_address_type,
16910 { "Source Address Type", "pfcp.multicast_transport_information.source_address.type",
16911 FT_UINT8, BASE_DEC, NULL, 0xC0,
16912 NULL, HFILL }
16914 { &hf_pfcp_multicast_transport_information_source_address_length,
16915 { "Source Address Length", "pfcp.multicast_transport_information.source_address.length",
16916 FT_UINT8, BASE_DEC, NULL, 0x3F,
16917 NULL, HFILL }
16919 { &hf_pfcp_multicast_transport_information_source_address_ipv4,
16920 { "Source IPv4 address", "pfcp.multicast_transport_information.source_address.ipv4",
16921 FT_IPv4, BASE_NONE, NULL, 0x0,
16922 NULL, HFILL }
16924 { &hf_pfcp_multicast_transport_information_source_address_ipv6,
16925 { "Source IPv6 address", "pfcp.multicast_transport_information.source_address.ipv6",
16926 FT_IPv6, BASE_NONE, NULL, 0x0,
16927 NULL, HFILL }
16930 { &hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm,
16931 { "PLLSSM (Provide Lower Layer SSM)", "pfcp.reporting_flags.pllssm",
16932 FT_BOOLEAN, 8, NULL, 0x01,
16933 NULL, HFILL }
16935 { &hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm,
16936 { "JMBSSM (Join MBS Session SSM)", "pfcp.reporting_flags.jmbssm",
16937 FT_BOOLEAN, 8, NULL, 0x02,
16938 NULL, HFILL }
16940 { &hf_pfcp_mbsn4mbreq_flags_o5_b2_mbs_resti,
16941 { "MBS RESTI (MBS Restoration Indication)", "pfcp.reporting_flags.mbs_resti",
16942 FT_BOOLEAN, 8, NULL, 0x04,
16943 NULL, HFILL }
16946 { &hf_pfcp_local_ingress_tunnel_flags_b2_ch,
16947 { "CH (CHOOSE)", "pfcp.local_ingress_tunnel.flags.ch",
16948 FT_BOOLEAN, 8, NULL, 0x04,
16949 NULL, HFILL }
16951 { &hf_pfcp_local_ingress_tunnel_flags_b1_v6,
16952 { "V6 (IPv6)", "pfcp.local_ingress_tunnel.flags.v6",
16953 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16954 NULL, HFILL }
16956 { &hf_pfcp_local_ingress_tunnel_flags_b0_v4,
16957 { "V4 (IPv4)", "pfcp.local_ingress_tunnel.flags.v4",
16958 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16959 NULL, HFILL }
16961 { &hf_pfcp_local_ingress_tunnel_udp_port,
16962 { "UDP Port", "pfcp.local_ingress_tunnel.udp",
16963 FT_UINT32, BASE_HEX, NULL, 0x0,
16964 NULL, HFILL }
16966 { &hf_pfcp_local_ingress_tunnel_ipv4,
16967 { "IPv4 address", "pfcp.local_ingress_tunnel.ipv4",
16968 FT_IPv4, BASE_NONE, NULL, 0x0,
16969 NULL, HFILL }
16971 { &hf_pfcp_local_ingress_tunnel_ipv6,
16972 { "IPv6 address", "pfcp.local_ingress_tunnel.ipv6",
16973 FT_IPv6, BASE_NONE, NULL, 0x0,
16974 NULL, HFILL }
16977 { &hf_pfcp_mbs_unicast_parameters_id,
16978 { "MBS Unicast Parameters ID value", "pfcp.mbs_unicast_parameters_id",
16979 FT_UINT16, BASE_DEC, NULL, 0x0,
16980 NULL, HFILL }
16983 { &hf_pfcp_mbsn4resp_flags_o5_b0_nn19dt,
16984 { "NN19DT", "pfcp.mbsn4resp_flags.nn19dt",
16985 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16986 "New N19mb Downlink Tunnel", HFILL }
16988 { &hf_pfcp_mbsn4resp_flags_o5_b1_jmti,
16989 { "JMTI", "pfcp.mbsn4resp_flags.jmti",
16990 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16991 "Joined N19mb Multicast Tree Indication", HFILL }
16993 { &hf_pfcp_mbsn4resp_flags_o5_b2_n19dtr,
16994 { "N19DTR", "pfcp.mbsn4resp_flags.n19dtr",
16995 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16996 "N19mb Downlink Tunnel Removal", HFILL }
16999 { &hf_pfcp_tunnel_password_value,
17000 { "Tunnel Password value", "pfcp.tunnel_password_value",
17001 FT_STRING, BASE_NONE, NULL, 0x0,
17002 NULL, HFILL }
17005 { &hf_pfcp_area_session_id_value,
17006 { "Area Session ID value", "pfcp.area_session_id_value",
17007 FT_UINT16, BASE_DEC, NULL, 0x0,
17008 NULL, HFILL }
17011 { &hf_pfcp_dscp_to_ppi_mapping_info_ppi_value,
17012 { "PPI value", "pfcp.dscp_to_ppi_mapping_info_ppi_value",
17013 FT_UINT8, BASE_DEC, NULL, 0x0,
17014 NULL, HFILL }
17017 { &hf_pfcp_dscp_to_ppi_mapping_info_dscp_value,
17018 { "DSCP value", "pfcp.dscp_to_ppi_mapping_info_dscp_value",
17019 FT_UINT8, BASE_DEC, NULL, 0x0,
17020 NULL, HFILL }
17023 { &hf_pfcp_pfcpsdrsp_flags_b0_puru,
17024 { "PURU (Pending Usage Reports Unacknowledged)", "pfcp.pfcpsdrsp_flags.puru",
17025 FT_BOOLEAN, 8, NULL, 0x01,
17026 NULL, HFILL }
17029 { &hf_pfcp_qer_indications_flags_b0_iqfis,
17030 { "IQFIS (Insert DL MBS QFI SN)", "pfcp.qer_indications_flags.iqfis",
17031 FT_BOOLEAN, 8, NULL, 0x01,
17032 NULL, HFILL }
17034 { &hf_pfcp_qer_indications_flags_b1_edbmi,
17035 { "EDBMI (End Of Data Burst Marking Indication)", "pfcp.qer_indications_flags.edbmi",
17036 FT_BOOLEAN, 8, NULL, 0x02,
17037 NULL, HFILL }
17039 { &hf_pfcp_qer_indications_flags_b2_eml4s,
17040 { "EML4S (ECN Marking for L4S)", "pfcp.qer_indications_flags.eml4s",
17041 FT_BOOLEAN, 8, NULL, 0x04,
17042 NULL, HFILL }
17044 { &hf_pfcp_qer_indications_flags_b3_pdusm,
17045 { "PDUSM (PDU Set Marking)", "pfcp.qer_indications_flags.pdusm",
17046 FT_BOOLEAN, 8, NULL, 0x04,
17047 NULL, HFILL }
17050 { &hf_pfcp_configured_time_domain_flags_b0_ctdi,
17051 { "CTDI (Configured Time Domain Indicator)", "pfcp.qer_indications_flags.ctdi",
17052 FT_BOOLEAN, 8, NULL, 0x01,
17053 NULL, HFILL }
17056 { &hf_pfcp_metadata,
17057 { "Metadata", "pfcp.metadata.metadata",
17058 FT_BYTES, BASE_NONE, NULL, 0x0,
17059 NULL, HFILL }
17061 { &hf_pfcp_metadata_binary_metadata,
17062 { "Metadata - Binary data", "pfcp.metadata.binary_metadata",
17063 FT_BYTES, BASE_NONE, NULL, 0x00,
17064 NULL, HFILL }
17067 { &hf_pfcp_traffic_parameter_threshold_flags_b0_dl,
17068 { "DL", "pfcp.traffic_parameter_threshold_flags.dl",
17069 FT_BOOLEAN, 8, NULL, 0x01,
17070 NULL, HFILL }
17072 { &hf_pfcp_traffic_parameter_threshold_downlink_n6_jitter_threshold,
17073 { "Downlink N6 Jitter Threshold", "pfcp.traffic_parameter_threshold.downlink_n6_jitter_threshold",
17074 FT_UINT32, BASE_DEC, NULL, 0x0,
17075 NULL, HFILL }
17078 { &hf_pfcp_dl_periodicity_value,
17079 { "Dl Periodicity", "pfcp.dl_periodicity.value",
17080 FT_UINT32, BASE_DEC, NULL, 0x0,
17081 NULL, HFILL }
17084 { &hf_pfcp_n6_jitter_measurement_flags_b0_dl,
17085 { "DL", "pfcp.dl_periodicity.dl",
17086 FT_BOOLEAN, 8, NULL, 0x01,
17087 NULL, HFILL }
17089 { &hf_pfcp_n6_jitter_measurement_dl_periodicity,
17090 { "DL Periodicity", "pfcp.dl_periodicity.dl_periodicity",
17091 FT_UINT32, BASE_DEC, NULL, 0x0,
17092 NULL, HFILL }
17094 { &hf_pfcp_n6_jitter_measurement_lower_dl_jitter_measurement,
17095 { "Lower DL Jitter Measurement", "pfcp.dl_periodicity.lower_dl_jitter_measurement",
17096 FT_UINT32, BASE_DEC, NULL, 0x0,
17097 NULL, HFILL }
17099 { &hf_pfcp_n6_jitter_measurement_higher_dl_jitter_measurement,
17100 { "Higher DL Jitter Measurement", "pfcp.dl_periodicity.higher_dl_jitter_measurement",
17101 FT_UINT32, BASE_DEC, NULL, 0x0,
17102 NULL, HFILL }
17105 { &hf_pfcp_traffic_parameter_measurement_indication_flags_b0_ulpmi,
17106 { "ULPMI", "pfcp.traffic_parameter_measurement_indication.ulpmi",
17107 FT_BOOLEAN, 8, NULL, 0x01,
17108 NULL, HFILL }
17110 { &hf_pfcp_traffic_parameter_measurement_indication_flags_b1_dlpmi,
17111 { "DLPMI", "pfcp.traffic_parameter_measurement_indication.dlpmi",
17112 FT_BOOLEAN, 8, NULL, 0x02,
17113 NULL, HFILL }
17115 { &hf_pfcp_traffic_parameter_measurement_indication_flags_b2_n6jmi,
17116 { "N6JMI", "pfcp.traffic_parameter_measurement_indication.n6jmi",
17117 FT_BOOLEAN, 8, NULL, 0x02,
17118 NULL, HFILL }
17121 { &hf_pfcp_ul_periodicity_value,
17122 { "Ul Periodicity", "pfcp.ul_periodicity.value",
17123 FT_UINT32, BASE_DEC, NULL, 0x0,
17124 NULL, HFILL }
17127 { &hf_pfcp_mpquic_control_information_flags_b0_cupd,
17128 { "CUPD", "pfcp.quic_control_information.cupd",
17129 FT_BOOLEAN, 8, NULL, 0x01,
17130 NULL, HFILL }
17133 { &hf_pfcp_mpquic_address_information_flags_b0_v4,
17134 { "V4", "pfcp.mpquic_address_information.flags.v4",
17135 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17136 NULL, HFILL }
17138 { &hf_pfcp_mpquic_address_information_flags_b1_v6,
17139 { "V6", "pfcp.mpquic_address_information.flags.v6",
17140 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17141 NULL, HFILL }
17143 { &hf_pfcp_mpquic_address_information_type,
17144 { "MPQUIC Proxy Type", "pfcp.mpquic_address_information.type",
17145 FT_UINT8, BASE_DEC, VALS(pfcp_mpquic_address_information_type_vals), 0x0,
17146 NULL, HFILL }
17148 { &hf_pfcp_mpquic_address_information_port,
17149 { "MPQUIC Proxy Port", "pfcp.mpquic_address_information.port",
17150 FT_UINT16, BASE_DEC, NULL, 0x0,
17151 NULL, HFILL }
17153 { &hf_pfcp_mpquic_address_information_address_ipv4,
17154 { "MPQUIC Proxy IPv4 Address", "pfcp.mpquic_address_information.ipv4",
17155 FT_IPv4, BASE_NONE, NULL, 0x0,
17156 NULL, HFILL }
17158 { &hf_pfcp_mpquic_address_information_address_ipv6,
17159 { "MPQUIC Proxy IPv6 Address", "pfcp.mpquic_address_information.ipv6",
17160 FT_IPv6, BASE_NONE, NULL, 0x0,
17161 NULL, HFILL }
17164 { &hf_pfcp_transport_mode_value,
17165 { "Transport Mode Value", "pfcp.transport_mode.value",
17166 FT_UINT8, BASE_DEC, VALS(pfcp_transport_mode_type_vals), 0x0f,
17167 NULL, HFILL }
17170 { &hf_pfcp_protocol_description_flags_b0_h264,
17171 { "H264", "pfcp.protocol_description.h264",
17172 FT_BOOLEAN, 8, NULL, 0x01,
17173 NULL, HFILL }
17175 { &hf_pfcp_protocol_description_flags_b1_rtp,
17176 { "RTP", "pfcp.protocol_description.rtp",
17177 FT_BOOLEAN, 8, NULL, 0x02,
17178 NULL, HFILL }
17180 { &hf_pfcp_protocol_description_flags_b2_srtp,
17181 { "SRTP", "pfcp.protocol_description.srtp",
17182 FT_BOOLEAN, 8, NULL, 0x02,
17183 NULL, HFILL }
17186 { &hf_pfcp_reporting_suggestion_info_reporting_urgency_value,
17187 { "Reporting Urgency value", "pfcp.reporting_suggestion_info.reporting_urgency_value",
17188 FT_UINT8, BASE_DEC, VALS(pfcp_reporting_urgency_type_vals), 0x0f,
17189 NULL, HFILL }
17191 { &hf_pfcp_reporting_suggestion_info_reporting_time_info,
17192 { "Reporting Time Info", "pfcp.reporting_suggestion_info.reporting_time_info",
17193 FT_UINT32, BASE_DEC, NULL, 0x0,
17194 NULL, HFILL }
17197 { &hf_pfcp_tl_container,
17198 { "TL-Container", "pfcp.tl_container",
17199 FT_BYTES, BASE_NONE, NULL, 0x0,
17200 NULL, HFILL }
17203 { &hf_pfcp_measurement_indication_flags_b0_dqfi,
17204 { "DQFI", "pfcp.measurement_indication.dqfi",
17205 FT_BOOLEAN, 8, NULL, 0x01,
17206 NULL, HFILL }
17209 { &hf_pfcp_hplmn_s_nssai_sst,
17210 { "SST (Slice/Service Type)", "pfcp.hplmn_s_nssai.sst",
17211 FT_BYTES, BASE_NONE, NULL, 0x0,
17212 NULL, HFILL }
17214 { &hf_pfcp_hplmn_s_nssai_sd,
17215 { "SD (Slice Differentiator)", "pfcp.hplmn_s_nssai.sd",
17216 FT_BYTES, BASE_NONE, NULL, 0x0,
17217 NULL, HFILL }
17220 { &hf_pfcp_media_transport_protocol,
17221 { "Media Transport Protocol", "pfcp.media_transport_protocol.media_transport_protocol_value",
17222 FT_UINT8, BASE_DEC, VALS(pfcp_media_transport_protocol_vals), 0x0f,
17223 NULL, HFILL }
17226 { &hf_pfcp_rtp_header_extension_type,
17227 { "RTP Header Extension Type", "pfcp.rtp_header_extension.rtp_header_extension_type",
17228 FT_UINT8, BASE_DEC, VALS(pfcp_rtp_header_extension_type_vals), 0x0,
17229 NULL, HFILL }
17232 { &hf_pfcp_rtp_header_extension_id,
17233 { "RTP Header Extension ID", "pfcp.rtp_header_extension_id.rtp_header_extension_id",
17234 FT_UINT8, BASE_DEC, NULL, 0x0,
17235 NULL, HFILL }
17238 { &hf_pfcp_rtp_payload_type,
17239 { "RTP Payload Type", "pfcp.rtp_payload_type.rtp_payload_type",
17240 FT_UINT8, BASE_DEC, NULL, 0x0,
17241 NULL, HFILL }
17244 { &hf_pfcp_rtp_payload_format,
17245 { "RTP Payload Format", "pfcp.rtp_payload_format.rtp_payload_format",
17246 FT_UINT8, BASE_DEC, VALS(pfcp_rtp_payload_format_vals), 0x0,
17247 NULL, HFILL }
17250 { &hf_pfcp_extended_dl_buffering_notification_policy_flags_b0_edbn,
17251 { "EDBN", "pfcp.extended_dl_buffering_notification_policy.edbn",
17252 FT_BOOLEAN, 8, NULL, 0x01,
17253 NULL, HFILL }
17256 { &hf_pfcp_mt_sdt_control_information_flags_b0_rdsi,
17257 { "RDSI", "pfcp.mt_sdt_control_information.rdsi",
17258 FT_BOOLEAN, 8, NULL, 0x01,
17259 NULL, HFILL }
17262 { &hf_pfcp_reporting_thresholds_flags_b0_dlci,
17263 { "DLCI", "pfcp.reporting_thresholds.flags.dlci",
17264 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17265 NULL, HFILL }
17267 { &hf_pfcp_reporting_thresholds_flags_b1_ulci,
17268 { "ULCI", "pfcp.reporting_thresholds.flags.ulci",
17269 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17270 NULL, HFILL }
17272 { &hf_pfcp_reporting_thresholds_flags_b2_dldr,
17273 { "DLRP", "pfcp.reporting_thresholds.flags.dlrp",
17274 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17275 NULL, HFILL }
17277 { &hf_pfcp_reporting_thresholds_flags_b3_uldr,
17278 { "ULRP", "pfcp.reporting_thresholds.flags.ulrp",
17279 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
17280 NULL, HFILL }
17282 { &hf_pfcp_reporting_thresholds_dl_congestion_information_threshold,
17283 { "DL Congestion Information Threshold", "pfcp.reporting_thresholds.dl_congestion",
17284 FT_UINT16, BASE_DEC, NULL, 0x0,
17285 NULL, HFILL }
17287 { &hf_pfcp_reporting_thresholds_ul_congestion_information_threshold,
17288 { "UL Congestion Information Threshold", "pfcp.reporting_thresholds.ul_congestion",
17289 FT_UINT16, BASE_DEC, NULL, 0x0,
17290 NULL, HFILL }
17292 { &hf_pfcp_reporting_thresholds_dl_data_rate_threshold,
17293 { "DL Data Rate threshold (kilobits)", "pfcp.reporting_thresholds.dl_data_rate",
17294 FT_UINT32, BASE_DEC, NULL, 0x0,
17295 NULL, HFILL }
17297 { &hf_pfcp_reporting_thresholds_ul_data_rate_threshold,
17298 { "UL Data Rate threshold (kilobits)", "pfcp.reporting_thresholds.ul_data_rate",
17299 FT_UINT32, BASE_DEC, NULL, 0x0,
17300 NULL, HFILL }
17303 { &hf_pfcp_rtp_header_extension_additional_information_flags_b0_fi,
17304 { "FI (Format Indication)", "pfcp.rtp_header_extension_additional_information.flags.fi",
17305 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17306 NULL, HFILL }
17308 { &hf_pfcp_rtp_header_extension_additional_information_flags_b1_pssai,
17309 { "PSSAI (PDU Set Size Activation Indication)", "pfcp.rtp_header_extension_additional_information.flags.pssai",
17310 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17311 NULL, HFILL }
17313 { &hf_pfcp_rtp_header_extension_additional_information_pssa,
17314 { "PSSA", "pfcp.rtp_header_extension_additional_information.pssa",
17315 FT_UINT8, BASE_DEC, NULL, 0x4,
17316 NULL, HFILL }
17318 { &hf_pfcp_rtp_header_extension_additional_information_format,
17319 { "Format", "pfcp.rtp_header_extension_additional_information.format",
17320 FT_UINT8, BASE_DEC, VALS(pfcp_rtp_header_extension_additional_information_type_vals), 0x3,
17321 NULL, HFILL }
17323 { &hf_pfcp_mapped_n6_ip_address_b0_chv4,
17324 { "CHV4", "pfcp.mapped_n6_ip_address.flags.chv4",
17325 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17326 NULL, HFILL }
17328 { &hf_pfcp_mapped_n6_ip_address_b1_v4,
17329 { "V4", "pfcp.mapped_n6_ip_address.flags.v4",
17330 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17331 NULL, HFILL }
17333 { &hf_pfcp_mapped_n6_ip_address_ipv4,
17334 { "IPv4 address", "pfcp.mapped_n6_ip_address.ipv4",
17335 FT_IPv4, BASE_NONE, NULL, 0x0,
17336 NULL, HFILL }
17339 { &hf_pfcp_n6_routing_information_flag_b0_sipv4,
17340 { "SIPV4", "pfcp.n6_routing_information.flag.sipv4",
17341 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17342 NULL, HFILL }
17344 { &hf_pfcp_n6_routing_information_flag_b1_sipv6,
17345 { "SIPV6", "pfcp.n6_routing_information.flag.sipv6",
17346 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17347 NULL, HFILL }
17349 { &hf_pfcp_n6_routing_information_flag_b2_spo,
17350 { "SPO", "pfcp.n6_routing_information.flag.spo",
17351 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17352 NULL, HFILL }
17354 { &hf_pfcp_n6_routing_information_flag_b3_dipv4,
17355 { "DIPV4", "pfcp.n6_routing_information.flag.dipv4",
17356 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
17357 NULL, HFILL }
17359 { &hf_pfcp_n6_routing_information_flag_b4_dipv6,
17360 { "DIPV6", "pfcp.n6_routing_information.flag.dipv6",
17361 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
17362 NULL, HFILL }
17364 { &hf_pfcp_n6_routing_information_flag_b5_dpo,
17365 { "DPO", "pfcp.n6_routing_information.flag.spn",
17366 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
17367 NULL, HFILL }
17370 { &hf_pfcp_n6_routing_information_source_ipv4,
17371 { "Source IPv4 address", "pfcp.n6_routing_information.sipv4",
17372 FT_IPv4, BASE_NONE, NULL, 0x0,
17373 NULL, HFILL }
17375 { &hf_pfcp_n6_routing_information_source_ipv6,
17376 { "Source IPv6 address", "pfcp.n6_routing_information.sipv6",
17377 FT_IPv6, BASE_NONE, NULL, 0x0,
17378 NULL, HFILL }
17380 { &hf_pfcp_n6_routing_information_source_port,
17381 { "Source Port Number", "pfcp.n6_routing_information.spn",
17382 FT_UINT16, BASE_DEC, NULL, 0x0,
17383 NULL, HFILL }
17385 { &hf_pfcp_n6_routing_information_destination_ipv4,
17386 { "Destination IPv4 address", "pfcp.n6_routing_information.dipv4",
17387 FT_IPv4, BASE_NONE, NULL, 0x0,
17388 NULL, HFILL }
17390 { &hf_pfcp_n6_routing_information_destination_ipv6,
17391 { "Destination IPv6 address", "pfcp.n6_routing_information.dipv6",
17392 FT_IPv6, BASE_NONE, NULL, 0x0,
17393 NULL, HFILL }
17395 { &hf_pfcp_n6_routing_information_destination_port,
17396 { "Destination Port Number", "pfcp.n6_routing_information.dpn",
17397 FT_UINT16, BASE_DEC, NULL, 0x0,
17398 NULL, HFILL }
17401 /* Enterprise IEs */
17402 /* BBF */
17403 { &hf_pfcp_bbf_up_function_features_o7_b0_pppoe,
17404 { "PPPoE", "pfcp.bbf.up_function_features.pppoe",
17405 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
17406 "PPPoE supported in DBNG-UP function", HFILL }
17408 { &hf_pfcp_bbf_up_function_features_o7_b1_ipoe,
17409 { "IPoE", "pfcp.bbf.up_function_features.ipoe",
17410 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
17411 "IPoE supported in DBNG-UP function", HFILL }
17413 { &hf_pfcp_bbf_up_function_features_o7_b2_lac,
17414 { "LAC", "pfcp.bbf.up_function_features.lac",
17415 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
17416 "LAC function supported in DBNG-UP function", HFILL }
17418 { &hf_pfcp_bbf_up_function_features_o7_b3_lns,
17419 { "LNS", "pfcp.bbf.up_function_features.lns",
17420 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
17421 "LNS function supported in DBNG-UP function", HFILL }
17423 { &hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload,
17424 { "LCP keepalive offload", "pfcp.bbf.up_function_features.lcp_keepalive_offload",
17425 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
17426 "PPP LCP echo supported in DBNG-UP function", HFILL }
17428 { &hf_pfcp_bbf_up_function_features_o7_b5_iptv,
17429 { "IPTV", "pfcp.bbf.up_function_features.iptv",
17430 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
17431 "DBNG-UP support of IP Multicast", HFILL }
17433 { &hf_pfcp_bbf_up_function_features_o7_b6_nat_cp,
17434 { "NAT-CP", "pfcp.bbf.up_function_features.nat_cp",
17435 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
17436 "NAT function supported in DBNG-CP function", HFILL }
17438 { &hf_pfcp_bbf_up_function_features_o7_b7_nat_up,
17439 { "NAT-UP", "pfcp.bbf.up_function_features.nat_up",
17440 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
17441 "NAT function supported in DBNG-UP function", HFILL }
17444 { &hf_pfcp_bbf_logical_port_id,
17445 { "Logical Port", "pfcp.bbf.logical_port_id",
17446 FT_BYTES, BASE_NONE, NULL, 0x0,
17447 NULL, HFILL }
17449 { &hf_pfcp_bbf_logical_port_id_str,
17450 { "Logical Port", "pfcp.bbf.logical_port_id_str",
17451 FT_STRING, BASE_NONE, NULL, 0x0,
17452 NULL, HFILL }
17455 { &hf_pfcp_bbf_outer_hdr_creation_desc_spare,
17456 { "Spare", "pfcp.bbf.outer_hdr_creation.desc.spare",
17457 FT_BOOLEAN, 16, NULL, 0xf0ff,
17458 NULL, HFILL }
17460 { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b4_ppp,
17461 { "PPP", "pfcp.bbf.outer_hdr_creation.desc.ppp",
17462 FT_BOOLEAN, 16, NULL, 0x0800,
17463 NULL, HFILL }
17465 { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b3_l2tp,
17466 { "L2TP", "pfcp.bbf.outer_hdr_creation.desc.l2tp",
17467 FT_BOOLEAN, 16, NULL, 0x0400,
17468 NULL, HFILL }
17470 { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b2_traffic_endpoint,
17471 { "Traffic-Endpoint", "pfcp.bbf.outer_hdr_creation.desc.trfep",
17472 FT_BOOLEAN, 16, NULL, 0x0200,
17473 NULL, HFILL }
17475 { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b1_crp_nsh,
17476 { "CPR-NSH", "pfcp.bbf.outer_hdr_creation.desc.cpr_nsh",
17477 FT_BOOLEAN, 16, NULL, 0x0100,
17478 NULL, HFILL }
17480 { &hf_pfcp_bbf_outer_hdr_creation_tunnel_id,
17481 { "L2TP Tunnel ID", "pfcp.bbf.outer_hdr_creation.tunnel_id",
17482 FT_UINT16, BASE_HEX, NULL, 0x0,
17483 NULL, HFILL }
17485 { &hf_pfcp_bbf_outer_hdr_creation_session_id,
17486 { "L2TP Session ID", "pfcp.bbf.outer_hdr_creation.session_id",
17487 FT_UINT16, BASE_HEX, NULL, 0x0,
17488 NULL, HFILL }
17491 { &hf_pfcp_bbf_out_hdr_desc,
17492 { "BBF Outer Header Removal Description", "pfcp.bbf.out_hdr_desc",
17493 FT_UINT8, BASE_DEC, VALS(pfcp_bbf_out_hdr_desc_vals), 0x0,
17494 NULL, HFILL }
17497 { &hf_pfcp_bbf_pppoe_session_id,
17498 { "PPPoE Session ID", "pfcp.bbf.pppoe_session_id",
17499 FT_UINT16, BASE_HEX, NULL, 0x0,
17500 NULL, HFILL }
17503 { &hf_pfcp_bbf_ppp_protocol_flags,
17504 { "Flags", "pfcp.bbf.protocol_flags",
17505 FT_UINT8, BASE_HEX, NULL, 0x0,
17506 NULL, HFILL }
17508 { &hf_pfcp_bbf_ppp_protocol_b2_control,
17509 { "control", "pfcp.bbf.protocol_flags.control",
17510 FT_BOOLEAN, 8, NULL, 0x04,
17511 NULL, HFILL }
17513 { &hf_pfcp_bbf_ppp_protocol_b1_data,
17514 { "data", "pfcp.bbf.protocol_flags.data",
17515 FT_BOOLEAN, 8, NULL, 0x02,
17516 NULL, HFILL }
17518 { &hf_pfcp_bbf_ppp_protocol_b0_specific,
17519 { "specific", "pfcp.bbf.protocol_flags.specific",
17520 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17521 NULL, HFILL }
17523 { &hf_pfcp_bbf_ppp_protocol,
17524 { "protocol", "pfcp.bbf.protocol_flags.protocol",
17525 FT_UINT16, BASE_HEX, NULL, 0x0,
17526 NULL, HFILL }
17529 { &hf_pfcp_bbf_verification_timer_interval,
17530 { "Interval", "pfcp.bbf.verification_timer.interval",
17531 FT_UINT16, BASE_DEC, NULL, 0x0,
17532 NULL, HFILL }
17534 { &hf_pfcp_bbf_verification_timer_count,
17535 { "Count", "pfcp.bbf.verification_timer.count",
17536 FT_UINT8, BASE_DEC, NULL, 0x0,
17537 NULL, HFILL }
17540 { &hf_pfcp_bbf_ppp_lcp_magic_number_tx,
17541 { "PPP LCP Magic Number Tx", "pfcp.bbf.lcp_magic_number.tx",
17542 FT_UINT32, BASE_HEX, NULL, 0x0,
17543 NULL, HFILL }
17545 { &hf_pfcp_bbf_ppp_lcp_magic_number_rx,
17546 { "PPP LCP Magic Number Rx", "pfcp.bbf.lcp_magic_number.rx",
17547 FT_UINT32, BASE_HEX, NULL, 0x0,
17548 NULL, HFILL }
17551 { &hf_pfcp_bbf_mtu,
17552 { "MTU", "pfcp.bbf.mtu",
17553 FT_UINT16, BASE_DEC, NULL, 0x0,
17554 NULL, HFILL }
17557 { &hf_pfcp_bbf_l2tp_endp_flags,
17558 { "Flags", "pfcp.bbf.l2tp_endp_flags",
17559 FT_UINT8, BASE_HEX, NULL, 0x0,
17560 NULL, HFILL }
17562 { &hf_pfcp_bbf_l2tp_endp_flags_b2_ch,
17563 { "CH (CHOOSE)", "pfcp.bbf.l2tp_endp_flags.ch",
17564 FT_BOOLEAN, 8, NULL, 0x04,
17565 NULL, HFILL }
17567 { &hf_pfcp_bbf_l2tp_endp_flags_b1_v6,
17568 { "V6 (IPv6)", "pfcp.bbf.l2tp_endp_flags.v6",
17569 FT_BOOLEAN, 8, NULL, 0x02,
17570 NULL, HFILL }
17572 { &hf_pfcp_bbf_l2tp_endp_flags_b0_v4,
17573 { "V4 (IPv4)", "pfcp.bbf.l2tp_endp_flags.v4",
17574 FT_BOOLEAN, 8, NULL, 0x01,
17575 NULL, HFILL }
17577 { &hf_pfcp_bbf_l2tp_endp_id_tunnel_id,
17578 { "Tunnel ID", "pfcp.bbf.l2tp_endp.tunnel_id",
17579 FT_UINT16, BASE_HEX, NULL, 0x0,
17580 NULL, HFILL }
17582 { &hf_pfcp_bbf_l2tp_endp_id_ipv4,
17583 { "IPv4 address", "pfcp.bbf.l2tp_endp.ipv4_addr",
17584 FT_IPv4, BASE_NONE, NULL, 0x0,
17585 NULL, HFILL }
17587 { &hf_pfcp_bbf_l2tp_endp_id_ipv6,
17588 { "IPv6 address", "pfcp.bbf.l2tp_endp.ipv6_addr",
17589 FT_IPv6, BASE_NONE, NULL, 0x0,
17590 NULL, HFILL }
17593 { &hf_pfcp_bbf_l2tp_session_id,
17594 { "L2TP Session ID", "pfcp.bbf.bbf_l2tp_session_id",
17595 FT_UINT16, BASE_HEX, NULL, 0x0,
17596 NULL, HFILL }
17599 { &hf_pfcp_bbf_l2tp_type_flags,
17600 { "Flags", "pfcp.bbf.l2tp_type_flags",
17601 FT_UINT8, BASE_HEX, NULL, 0x0,
17602 NULL, HFILL }
17604 { &hf_pfcp_bbf_l2tp_type_flags_b0_t,
17605 { "T (TYPE)", "pfcp.bbf.l2tp_type_flags.t",
17606 FT_BOOLEAN, 8, TFS(&pfcp_bbf_l2tp_type_b0_t_tfs), 0x01,
17607 NULL, HFILL }
17610 { &hf_pfcp_bbf_multicast_flags_o7_b1_routeralertoff,
17611 { "ROUTERALERTOFF", "pfcp.bbf.multicast_flags.routeralertoff",
17612 FT_BOOLEAN, 8, NULL, 0x01,
17613 NULL, HFILL }
17615 { &hf_pfcp_bbf_multicast_flags_o7_b0_fastleave,
17616 { "FASTLEAVE", "pfcp.bbf.multicast_flags.fastleave",
17617 FT_BOOLEAN, 8, NULL, 0x02,
17618 NULL, HFILL }
17621 { &hf_pfcp_bbf_multicast_query_param_robustness,
17622 { "Robustness count", "pfcp.bbf.multicast_query_parameters.robustness_count",
17623 FT_UINT8, BASE_DEC, NULL, 0x0,
17624 NULL, HFILL }
17626 { &hf_pfcp_bbf_multicast_query_param_query_interval,
17627 { "Query interval", "pfcp.bbf.multicast_query_parameters.query_interval",
17628 FT_UINT16, BASE_DEC, NULL, 0x0,
17629 NULL, HFILL }
17631 { &hf_pfcp_bbf_multicast_query_param_query_response_interval,
17632 { "Query response interval", "pfcp.bbf.multicast_query_parameters.query_response_interval",
17633 FT_UINT16, BASE_DEC, NULL, 0x0,
17634 NULL, HFILL }
17636 { &hf_pfcp_bbf_multicast_query_param_group_query_interval,
17637 { "Group-specific query interval", "pfcp.bbf.multicast_query_parameters.group_specific_query_interval",
17638 FT_UINT16, BASE_DEC, NULL, 0x0,
17639 NULL, HFILL }
17642 { &hf_pfcp_bbf_multicast_group_limit_max_joins,
17643 { "Maximum number of concurrent (S,G) joins allowed", "pfcp.bbf.multicast_group_limit.max_joins",
17644 FT_UINT16, BASE_DEC, NULL, 0x0,
17645 NULL, HFILL }
17648 { &hf_pfcp_bbf_apply_action_flags_b0_nat,
17649 { "NAT", "pfcp.bbf.apply_action_flags.nat",
17650 FT_BOOLEAN, 8, NULL, 0x01,
17651 NULL, HFILL }
17654 { &hf_pfcp_bbf_nat_external_port_range_start,
17655 { "Start", "pfcp.bbf.nat_external_port_range.start",
17656 FT_UINT16, BASE_DEC, NULL, 0x0,
17657 NULL, HFILL }
17659 { &hf_pfcp_bbf_nat_external_port_range_end,
17660 { "End", "pfcp.bbf.nat_external_port_range.end",
17661 FT_UINT16, BASE_DEC, NULL, 0x0,
17662 NULL, HFILL }
17665 { &hf_pfcp_bbf_nat_port_forward,
17666 { "NAT Port Forward", "pfcp.bbf.nat_port_forward",
17667 FT_NONE, BASE_NONE, NULL, 0x0,
17668 NULL, HFILL }
17670 { &hf_pfcp_bbf_nat_port_forward_inside_ip,
17671 { "Inside Address", "pfcp.bbf.nat_port_forward.inside_address",
17672 FT_IPv4, BASE_NONE, NULL, 0x0,
17673 NULL, HFILL }
17675 { &hf_pfcp_bbf_nat_port_forward_inside_port,
17676 { "Inside Port", "pfcp.bbf.nat_port_forward.inside_port",
17677 FT_UINT16, BASE_DEC, NULL, 0x0,
17678 NULL, HFILL }
17680 { &hf_pfcp_bbf_nat_port_forward_outside_port,
17681 { "Outside Port", "pfcp.bbf.nat_port_forward.outside_port",
17682 FT_UINT16, BASE_DEC, NULL, 0x0,
17683 NULL, HFILL }
17685 { &hf_pfcp_bbf_nat_port_forward_protocol,
17686 { "Protocol", "pfcp.bbf.nat_port_forward.protocol",
17687 FT_UINT8, BASE_DEC|BASE_EXT_STRING, &ipproto_val_ext, 0x0,
17688 NULL , HFILL
17692 { &hf_pfcp_bbf_reporting_trigger,
17693 { "Reporting Trigger", "pfcp.bbf.reporting_trigger",
17694 FT_UINT8, BASE_DEC, VALS(pfcp_bbf_reporting_trigger_vals), 0x0,
17695 NULL, HFILL }
17698 { &hf_pfcp_bbf_dynamic_nat_block_port_range_start_port,
17699 { "Start", "pfcp.dynamic_nat_block_port_range.start",
17700 FT_UINT16, BASE_DEC, NULL, 0x0,
17701 NULL, HFILL }
17703 { &hf_pfcp_bbf_dynamic_nat_block_port_range_end_port,
17704 { "End", "pfcp.dynamic_nat_block_port_range.end",
17705 FT_UINT16, BASE_DEC, NULL, 0x0,
17706 NULL, HFILL }
17709 { &hf_pfcp_bbf_event_time_stamp,
17710 { "Event Time Stamp", "pfcp.bbf.event_time_stamp",
17711 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0x0,
17712 NULL, HFILL }
17715 { &hf_pfcp_bbf_direction,
17716 { "Direction", "pfcp.bbf.direction",
17717 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_direction_vals), 0x0,
17718 NULL, HFILL }
17720 { &hf_pfcp_bbf_family,
17721 { "Family", "pfcp.bbf.family",
17722 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_family_vals), 0x0,
17723 NULL, HFILL }
17725 { &hf_pfcp_bbf_sgrp_identifier,
17726 { "SGRP Identifier", "pfcp.bbf.sgrp_identifier",
17727 FT_UINT32, BASE_DEC, NULL, 0x0,
17728 NULL, HFILL }
17730 { &hf_pfcp_bbf_sgrp_state,
17731 { "SGRP State", "pfcp.bbf.sgrp_state",
17732 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_sgrp_state_vals), 0x0,
17733 NULL, HFILL }
17735 { &hf_pfcp_bbf_sgrp_flags,
17736 { "Flags", "pfcp.bbf.sgrp_flags",
17737 FT_UINT8, BASE_HEX, NULL, 0x0,
17738 NULL, HFILL }
17740 { &hf_pfcp_bbf_sgrp_flags_b0_ras,
17741 { "RAS", "pfcp.bbf.sgrp_flags.ras",
17742 FT_BOOLEAN, 8, NULL, 0x01,
17743 "Route Advertisement State", HFILL }
17745 { &hf_pfcp_bbf_sgrp_flags_b1_psa,
17746 { "PSA", "pfcp.bbf.sgrp_flags.psa",
17747 FT_BOOLEAN, 8, NULL, 0x02,
17748 "Partial State Allowed", HFILL }
17750 { &hf_pfcp_bbf_operational_condition,
17751 { "Operational Condition", "pfcp.bbf.operational_condition",
17752 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_operational_condition_vals), 0x0,
17753 NULL, HFILL }
17755 { &hf_pfcp_bbf_ipv4_prefix,
17756 { "IPv4 Prefix", "pfcp.bbf.ipv4_prefix",
17757 FT_IPv4, BASE_NONE, NULL, 0x0,
17758 NULL, HFILL }
17760 { &hf_pfcp_bbf_ipv4_prefix_length,
17761 { "IPv4 Prefix Length", "pfcp.bbf.ipv4_prefix_length",
17762 FT_UINT8, BASE_DEC, NULL, 0x0,
17763 NULL, HFILL }
17765 { &hf_pfcp_bbf_ipv6_prefix,
17766 { "IPv6 Prefix", "pfcp.bbf.ipv6_prefix",
17767 FT_IPv6, BASE_NONE, NULL, 0x0,
17768 NULL, HFILL }
17770 { &hf_pfcp_bbf_ipv6_prefix_length,
17771 { "IPv6 Prefix Length", "pfcp.bbf.ipv6_prefix_length",
17772 FT_UINT8, BASE_DEC, NULL, 0x0,
17773 NULL, HFILL }
17775 { &hf_pfcp_bbf_prefix_tag_usage,
17776 { "Prefix Tag Usage", "pfcp.bbf.prefix_tag_usage",
17777 FT_UINT8, BASE_HEX, VALS(pfcp_bbf_prefix_tag_usage_vals), 0x0,
17778 NULL, HFILL }
17780 { &hf_pfcp_bbf_prefix_tag,
17781 { "Prefix Tag", "pfcp.bbf.prefix_tag",
17782 FT_UINT32, BASE_DEC, NULL, 0x0,
17783 NULL, HFILL }
17785 { &hf_pfcp_bbf_error_code,
17786 { "Error Code", "pfcp.bbf.error_code",
17787 FT_UINT16, BASE_HEX, VALS(pfcp_bbf_error_code_vals), 0x0,
17788 NULL, HFILL }
17790 { &hf_pfcp_bbf_error_message,
17791 { "Error Message", "pfcp.bbf.error_message",
17792 FT_STRING, BASE_NONE, NULL, 0x0,
17793 NULL, HFILL }
17795 { &hf_pfcp_bbf_maximum_acl_chain_length,
17796 { "Maximum ACL Chain Length", "pfcp.bbf.maximum_acl_chain_length",
17797 FT_UINT8, BASE_DEC, NULL, 0x0,
17798 NULL, HFILL }
17800 { &hf_pfcp_bbf_forwarding_capability,
17801 { "Forwarding Capability", "pfcp.bbf.forwarding_capability",
17802 FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_percent), 0x0,
17803 NULL, HFILL }
17805 { &hf_pfcp_bbf_connectivity_status,
17806 { "Connectivity Status", "pfcp.bbf.connectivity_status",
17807 FT_UINT8, BASE_DEC, VALS(pfcp_bbf_connectivity_status_vals), 0x0,
17808 NULL, HFILL }
17810 { &hf_pfcp_bbf_vendor_specific_node_report_type,
17811 { "Flags", "pfcp.bbf.vendor_specific_node_report_type",
17812 FT_UINT8, BASE_HEX, NULL, 0x0,
17813 NULL, HFILL }
17815 { &hf_pfcp_bbf_vendor_specific_node_report_type_b0_lpr,
17816 { "LPR", "pfcp.bbf.vendor_specific_node_report_type.lpr",
17817 FT_BOOLEAN, 8, NULL, 0x01,
17818 "Logical Port Report", HFILL }
17820 { &hf_pfcp_bbf_vendor_specific_node_report_type_b1_sgr,
17821 { "SGR", "pfcp.bbf.vendor_specific_node_report_type.sgr",
17822 FT_BOOLEAN, 8, NULL, 0x02,
17823 "Subscriber Group Report", HFILL }
17825 { &hf_pfcp_bbf_vendor_specific_node_report_type_b2_nir,
17826 { "NIR", "pfcp.bbf.vendor_specific_node_report_type.nir",
17827 FT_BOOLEAN, 8, NULL, 0x04,
17828 "Network Instance Report", HFILL }
17830 { &hf_pfcp_bbf_ctag_range_start,
17831 { "C-Tag Range Start", "pfcp.bbf.ctag_range_start",
17832 FT_UINT24, BASE_DEC, NULL, 0x0,
17833 NULL, HFILL }
17835 { &hf_pfcp_bbf_ctag_range_end,
17836 { "C-Tag Range End", "pfcp.bbf.ctag_range_end",
17837 FT_UINT24, BASE_DEC, NULL, 0x0,
17838 NULL, HFILL }
17840 { &hf_pfcp_bbf_stag_range_start,
17841 { "S-Tag Range Start", "pfcp.bbf.stag_range_start",
17842 FT_UINT24, BASE_DEC, NULL, 0x0,
17843 NULL, HFILL }
17845 { &hf_pfcp_bbf_stag_range_end,
17846 { "S-Tag Range End", "pfcp.bbf.stag_range_end",
17847 FT_UINT24, BASE_DEC, NULL, 0x0,
17848 NULL, HFILL }
17851 /* Travelping */
17852 { &hf_pfcp_enterprise_travelping_packet_measurement,
17853 { "Flags", "pfcp.travelping.volume_measurement",
17854 FT_UINT8, BASE_HEX, NULL, 0x0,
17855 NULL, HFILL }
17857 { &hf_pfcp_enterprise_travelping_packet_measurement_b0_tonop,
17858 { "TONOP", "pfcp.travelping.volume_measurement_flags.tonop",
17859 FT_BOOLEAN, 8, NULL, 0x01,
17860 NULL, HFILL }
17862 { &hf_pfcp_enterprise_travelping_packet_measurement_b1_ulnop,
17863 { "ULNOP", "pfcp.travelping.volume_measurement_flags.ulnop",
17864 FT_BOOLEAN, 8, NULL, 0x02,
17865 NULL, HFILL }
17867 { &hf_pfcp_enterprise_travelping_packet_measurement_b2_dlnop,
17868 { "DLNOP", "pfcp.travelping.volume_measurement_flags.dlnops",
17869 FT_BOOLEAN, 8, NULL, 0x04,
17870 NULL, HFILL }
17872 { &hf_pfcp_travelping_pkt_meas_tonop,
17873 { "Total Number of Packets", "pfcp.travelping.volume_measurement.tonop",
17874 FT_UINT64, BASE_DEC, NULL, 0x0,
17875 NULL, HFILL }
17877 { &hf_pfcp_travelping_pkt_meas_ulnop,
17878 { "Uplink Number of Packets", "pfcp.travelping.volume_measurement.ulnop",
17879 FT_UINT64, BASE_DEC, NULL, 0x0,
17880 NULL, HFILL }
17882 { &hf_pfcp_travelping_pkt_meas_dlnop,
17883 { "Downlink Number of Packets", "pfcp.travelping.volume_measurement.dlnop",
17884 FT_UINT64, BASE_DEC, NULL, 0x0,
17885 NULL, HFILL }
17887 { &hf_pfcp_travelping_build_id,
17888 { "Build Identifier", "pfcp.travelping.build_id",
17889 FT_BYTES, BASE_NONE, NULL, 0x0,
17890 NULL, HFILL }
17892 { &hf_pfcp_travelping_build_id_str,
17893 { "Build Identifier", "pfcp.travelping.build_id_str",
17894 FT_STRING, BASE_NONE, NULL, 0x0,
17895 NULL, HFILL }
17897 { &hf_pfcp_travelping_now,
17898 { "Now", "pfcp.travelping.now",
17899 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0x0,
17900 NULL, HFILL }
17902 { &hf_pfcp_travelping_error_message,
17903 { "Error Message", "pfcp.travelping.error_message",
17904 FT_BYTES, BASE_NONE, NULL, 0x0,
17905 NULL, HFILL }
17907 { &hf_pfcp_travelping_error_message_str,
17908 { "Error Message", "pfcp.travelping.error_message_str",
17909 FT_STRING, BASE_NONE, NULL, 0x0,
17910 NULL, HFILL }
17912 { &hf_pfcp_travelping_file_name,
17913 { "File Name", "pfcp.travelping.file_name",
17914 FT_BYTES, BASE_NONE, NULL, 0x0,
17915 NULL, HFILL }
17917 { &hf_pfcp_travelping_file_name_str,
17918 { "File Name", "pfcp.travelping.file_name_str",
17919 FT_STRING, BASE_NONE, NULL, 0x0,
17920 NULL, HFILL }
17922 { &hf_pfcp_travelping_line_number,
17923 { "Line Number", "pfcp.travelping.line_number",
17924 FT_UINT32, BASE_DEC, NULL, 0x0,
17925 NULL, HFILL }
17927 { &hf_pfcp_travelping_ipfix_policy,
17928 { "IPFIX Policy", "pfcp.travelping.ipfix_policy",
17929 FT_BYTES, BASE_NONE, NULL, 0x0,
17930 NULL, HFILL }
17932 { &hf_pfcp_travelping_ipfix_policy_str,
17933 { "IPFIX Policy", "pfcp.travelping.ipfix_policy_str",
17934 FT_STRING, BASE_NONE, NULL, 0x0,
17935 NULL, HFILL }
17937 { &hf_pfcp_travelping_trace_parent,
17938 { "Trace Parent", "pfcp.travelping.trace_parent",
17939 FT_BYTES, BASE_NONE, NULL, 0x0,
17940 NULL, HFILL }
17942 { &hf_pfcp_travelping_trace_parent_str,
17943 { "Trace Parent", "pfcp.travelping.trace_parent_str",
17944 FT_STRING, BASE_NONE, NULL, 0x0,
17945 NULL, HFILL }
17947 { &hf_pfcp_travelping_trace_state,
17948 { "Trace State", "pfcp.travelping.trace_state",
17949 FT_BYTES, BASE_NONE, NULL, 0x0,
17950 NULL, HFILL }
17952 { &hf_pfcp_travelping_trace_state_str,
17953 { "Trace State", "pfcp.travelping.trace_state_str",
17954 FT_STRING, BASE_NONE, NULL, 0x0,
17955 NULL, HFILL }
17958 /* Nokia */
17960 { &hf_pfcp_nokia_sap_template,
17961 { "SAP template", "pfcp.nokia.sap_template",
17962 FT_STRING, BASE_NONE, NULL, 0,
17963 NULL, HFILL }
17965 { &hf_pfcp_nokia_group_iface_template,
17966 { "Group Interface Template", "pfcp.nokia.group_if_template",
17967 FT_STRING, BASE_NONE, NULL, 0,
17968 NULL, HFILL }
17970 { &hf_pfcp_nokia_session_state_id,
17971 { "Session State Id", "pfcp.nokia.session_state_id",
17972 FT_UINT64, BASE_DEC, NULL, 0,
17973 NULL, HFILL }
17975 { &hf_pfcp_nokia_detailed_stats_key,
17976 { "Key", "pfcp.nokia.detailed_stats.key",
17977 FT_UINT32, BASE_HEX, NULL, 0,
17978 NULL, HFILL }
17980 { &hf_pfcp_nokia_detailed_stats_key_direction,
17981 { "Direction", "pfcp.nokia.detailed_stats.direction",
17982 FT_BOOLEAN, 32, TFS(&tfs_nokia_detailed_stats_ie), 0x80000000,
17983 NULL, HFILL }
17985 { &hf_pfcp_nokia_detailed_stats_key_type,
17986 { "Type", "pfcp.nokia.detailed_stats.type",
17987 FT_BOOLEAN, 32, TFS(&tfs_nokia_detailed_stats_qp), 0x40000000,
17988 NULL, HFILL }
17990 { &hf_pfcp_nokia_detailed_stats_key_object_id,
17991 { "Object id", "pfcp.nokia.detailed_stats.object_id",
17992 FT_UINT32, BASE_DEC, NULL, 0x003f0000,
17993 NULL, HFILL }
17995 { &hf_pfcp_nokia_detailed_stats_key_stat_mode,
17996 { "Stat mode", "pfcp.nokia.detailed_stats.stat_mode",
17997 FT_UINT32, BASE_DEC, NULL, 0x0000001f,
17998 NULL, HFILL }
18000 { &hf_pfcp_nokia_detailed_stats_bitmap_item,
18001 { "length", "pfcp.nokia.detailed_stats.bitmap.len",
18002 FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(nokia_detailed_stats_length_values), 0x0,
18003 NULL, HFILL }
18005 { &hf_pfcp_nokia_detailed_stats_octets,
18006 { "Packets offered", "pfcp.nokia.detailed_stats.octets",
18007 FT_UINT64, BASE_DEC, NULL, 0,
18008 NULL, HFILL }
18010 { &hf_pfcp_nokia_detailed_error,
18011 { "Detailed Error", "pfcp.nokia.detailed_error",
18012 FT_STRING, BASE_NONE, NULL, 0,
18013 NULL, HFILL }
18015 { &hf_pfcp_nokia_qos_override,
18016 { "Qos Override", "pfcp.nokia.qos_override",
18017 FT_STRING, BASE_NONE, NULL, 0,
18018 NULL, HFILL }
18020 { &hf_pfcp_nokia_measurement_info,
18021 { "Flags", "pfcp.nokia.measurement_info",
18022 FT_UINT8, BASE_HEX, NULL, 0,
18023 NULL, HFILL }
18025 { &hf_pfcp_nokia_measurement_info_b0_det,
18026 { "DET (Detailed Statistics)", "pfcp.nokia.measurement_info.det",
18027 FT_BOOLEAN, 8, NULL, 0x01,
18028 NULL, HFILL }
18030 { &hf_pfcp_nokia_pfcpsmreq_flags,
18031 { "Flags", "pfcp.nokia.smreq_flags",
18032 FT_UINT8, BASE_HEX, NULL, 0x0,
18033 NULL, HFILL }
18035 { &hf_pfcp_nokia_pfcpsmreq_flags_b0_abs,
18036 { "ABS (Absolute modification request)", "pfcp.nokia.smreq_flags.abs",
18037 FT_BOOLEAN, 8, NULL, 0x01,
18038 NULL, HFILL }
18040 { &hf_pfcp_nokia_pfcpsmreq_flags_b1_audit,
18041 { "AUD (Auditing modification message)", "pfcp.nokia.smreq_flags.audit",
18042 FT_BOOLEAN, 8, NULL, 0x02,
18043 NULL, HFILL }
18045 { &hf_pfcp_nokia_up_function_features_bulk_audit,
18046 { "BLK_AUD (Bulk Audit)", "pfcp.nokia.up_function_features.blk_aud",
18047 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
18048 NULL, HFILL }
18050 { &hf_pfcp_nokia_up_function_features_sssg,
18051 { "SSSG (Shared Subnet Signaling)", "pfcp.nokia.up_function_features.sssg",
18052 FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
18053 NULL, HFILL }
18055 { &hf_pfcp_nokia_filter_override_type,
18056 { "Filter Type", "pfcp.nokia.filter_override.type",
18057 FT_UINT8, BASE_HEX, VALS(nokia_filter_override_type_vals), 0x0,
18058 NULL, HFILL }
18060 { &hf_pfcp_nokia_filter_override_name,
18061 { "Filter Override", "pfcp.nokia.filter_override.name",
18062 FT_STRING, BASE_NONE, NULL, 0,
18063 NULL, HFILL }
18065 { &hf_pfcp_nokia_intermediate_destination,
18066 { "Intermediate Destination", "pfcp.nokia.intermediate_destination",
18067 FT_STRING, BASE_NONE, NULL, 0,
18068 NULL, HFILL }
18070 { &hf_pfcp_nokia_nat_isa_members,
18071 { "Number of ISA members", "pfcp.nokia.nat_isa_members",
18072 FT_UINT8, BASE_DEC, NULL, 0,
18073 NULL, HFILL }
18075 { &hf_pfcp_nokia_pfcphb_flags,
18076 { "Flags", "pfcp.nokia.hb_flags",
18077 FT_UINT8, BASE_HEX, NULL, 0x0,
18078 NULL, HFILL }
18080 { &hf_pfcp_nokia_pfcphb_flags_b0_aud_r,
18081 { "AUDR (Mass Audit Request)", "pfcp.nokia.hb_flags.audr",
18082 FT_BOOLEAN, 8, NULL, 0x01,
18083 NULL, HFILL }
18085 { &hf_pfcp_nokia_pfcphb_flags_b1_aud_s,
18086 { "AUDS (Mass Audit Start)", "pfcp.nokia.hb_flags.auds",
18087 FT_BOOLEAN, 8, NULL, 0x02,
18088 NULL, HFILL }
18090 { &hf_pfcp_nokia_pfcphb_flags_b2_aud_e,
18091 { "AUDE (Mass Audit End)", "pfcp.nokia.hb_flags.aude",
18092 FT_BOOLEAN, 8, NULL, 0x04,
18093 NULL, HFILL }
18095 { &hf_pfcp_nokia_l2tp_lcp_request,
18096 { "LCP Request", "pfcp.nokia.l2tp.lcp_request",
18097 FT_BYTES, BASE_NONE, NULL, 0,
18098 NULL, HFILL }
18100 { &hf_pfcp_nokia_l2tp_auth_type,
18101 { "L2TP Auth Type", "pfcp.nokia.l2tp.auth_type",
18102 FT_UINT8, BASE_HEX, VALS(nokia_l2tp_auth_type_vals), 0x0,
18103 NULL, HFILL }
18105 { &hf_pfcp_nokia_l2tp_auth_name,
18106 { "L2TP Auth Name", "pfcp.nokia.l2tp.auth_name",
18107 FT_STRING, BASE_NONE, NULL, 0,
18108 NULL, HFILL }
18110 { &hf_pfcp_nokia_l2tp_auth_id,
18111 { "L2TP Auth Id", "pfcp.nokia.l2tp.auth_id",
18112 FT_UINT8, BASE_HEX, NULL, 0,
18113 NULL, HFILL }
18115 { &hf_pfcp_nokia_l2tp_auth_challenge,
18116 { "L2TP Auth Challenge", "pfcp.nokia.l2tp.auth_challenge",
18117 FT_BYTES, BASE_NONE, NULL, 0,
18118 NULL, HFILL }
18120 { &hf_pfcp_nokia_l2tp_auth_response,
18121 { "L2TP Auth Response", "pfcp.nokia.l2tp.auth_response",
18122 FT_BYTES, BASE_NONE, NULL, 0,
18123 NULL, HFILL }
18125 { &hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address,
18126 { "L2TP IPv4 Endpoint", "pfcp.nokia.l2tp.tunnel_endpoint.ipv4_addr",
18127 FT_IPv4, BASE_NONE, NULL, 0x0,
18128 NULL, HFILL }
18130 { &hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address,
18131 { "L2TP IPv6 Endpoint", "pfcp.nokia.l2tp.tunnel_endpoint.ipv6_addr",
18132 FT_IPv6, BASE_NONE, NULL, 0x0,
18133 NULL, HFILL }
18135 { &hf_pfcp_nokia_l2tp_client_auth_id,
18136 { "L2TP Client Auth Id", "pfcp.nokia.l2tp.client_auth_id",
18137 FT_STRING, BASE_NONE, NULL, 0,
18138 NULL, HFILL }
18140 { &hf_pfcp_nokia_l2tp_server_auth_id,
18141 { "L2TP Server Auth Id", "pfcp.nokia.l2tp.server_auth_id",
18142 FT_STRING, BASE_NONE, NULL, 0,
18143 NULL, HFILL }
18145 { &hf_pfcp_nokia_l2tp_password,
18146 { "L2TP Password", "pfcp.nokia.l2tp.password",
18147 FT_STRING, BASE_NONE, NULL, 0,
18148 NULL, HFILL }
18150 { &hf_pfcp_nokia_l2tp_assignment_id,
18151 { "L2TP Assignment Id", "pfcp.nokia.l2tp.assignment_id",
18152 FT_STRING, BASE_NONE, NULL, 0,
18153 NULL, HFILL }
18155 { &hf_pfcp_nokia_l2tp_private_group_id,
18156 { "L2TP Private Group Id", "pfcp.nokia.l2tp.private_group_id",
18157 FT_STRING, BASE_NONE, NULL, 0,
18158 NULL, HFILL }
18160 { &hf_pfcp_nokia_l2tp_tunnel_params_flags,
18161 { "Flags", "pfcp.nokia.l2tp.tunnel_params.flags",
18162 FT_UINT32, BASE_HEX, NULL, 0x0,
18163 NULL, HFILL }
18165 { &hf_pfcp_nokia_l2tp_params_flags_b30_idle_timeout,
18166 {"Idle Timeout", "pfcp.nokia.l2tp.tunnel_params.flags.idle_timeout",
18167 FT_BOOLEAN, 32, NULL, 0x40000000,
18168 NULL, HFILL }
18170 { &hf_pfcp_nokia_l2tp_params_flags_b31_hello_interval,
18171 {"Hello Interval", "pfcp.nokia.l2tp.tunnel_params.flags.hello_interval",
18172 FT_BOOLEAN, 32, NULL, 0x80000000,
18173 NULL, HFILL }
18175 { &hf_pfcp_nokia_l2tp_params_flags_b29_session_limit,
18176 {"Session Limit", "pfcp.nokia.l2tp.tunnel_params.flags.session_limit",
18177 FT_BOOLEAN, 32, NULL, 0x20000000,
18178 NULL, HFILL }
18180 { &hf_pfcp_nokia_l2tp_params_flags_b28_preference,
18181 {"Preference", "pfcp.nokia.l2tp.tunnel_params.flags.preference",
18182 FT_BOOLEAN, 32, NULL, 0x10000000,
18183 NULL, HFILL }
18185 { &hf_pfcp_nokia_l2tp_params_flags_b27_df_bit,
18186 {"DF Bit", "pfcp.nokia.l2tp.tunnel_params.flags.df_bit",
18187 FT_BOOLEAN, 32, NULL, 0x08000000,
18188 NULL, HFILL }
18190 { &hf_pfcp_nokia_l2tp_params_flags_b26_challenge,
18191 {"Challenge", "pfcp.nokia.l2tp.tunnel_params.flags.challenge",
18192 FT_BOOLEAN, 32, NULL, 0x04000000,
18193 NULL, HFILL }
18195 { &hf_pfcp_nokia_l2tp_params_flags_b25_avp_hiding,
18196 {"AVP Hiding", "pfcp.nokia.l2tp.tunnel_params.flags.avp_hiding",
18197 FT_BOOLEAN, 32, NULL, 0x02000000,
18198 NULL, HFILL }
18200 { &hf_pfcp_nokia_l2tp_params_flags_b24_algorithm,
18201 {"Algorithm", "pfcp.nokia.l2tp.tunnel_params.flags.algorithm",
18202 FT_BOOLEAN, 32, NULL, 0x01000000,
18203 NULL, HFILL }
18205 { &hf_pfcp_nokia_l2tp_params_flags_b19_rx_window_size,
18206 {"RX Window Size", "pfcp.nokia.l2tp.tunnel_params.flags.rx_window_size",
18207 FT_BOOLEAN, 32, NULL, 0x00080000,
18208 NULL, HFILL }
18210 { &hf_pfcp_nokia_l2tp_params_flags_b18_max_retries_not_estab,
18211 {"Max Retries Not Established", "pfcp.nokia.l2tp.tunnel_params.flags.max_retries_not_estab",
18212 FT_BOOLEAN, 32, NULL, 0x00040000,
18213 NULL, HFILL }
18215 { &hf_pfcp_nokia_l2tp_params_flags_b17_max_retries_estab,
18216 {"Max Retries Established", "pfcp.nokia.l2tp.tunnel_params.flags.max_retries_estab",
18217 FT_BOOLEAN, 32, NULL, 0x00020000,
18218 NULL, HFILL }
18220 { &hf_pfcp_nokia_l2tp_params_flags_b16_destruct_timeout,
18221 {"Destruct Timeout", "pfcp.nokia.l2tp.tunnel_params.flags.destruct_timeout",
18222 FT_BOOLEAN, 32, NULL, 0x00010000,
18223 NULL, HFILL }
18225 { &hf_pfcp_nokia_l2tp_params_hello_interval,
18226 {"Hello Interval", "pfcp.nokia.l2tp.tunnel_params.hello_interval",
18227 FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS, VALS(nokia_l2tp_params_infinite), 0,
18228 NULL, HFILL }
18230 { &hf_pfcp_nokia_l2tp_params_idle_timeout,
18231 {"Idle Timeout", "pfcp.nokia.l2tp.tunnel_params.idle_timeout",
18232 FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS, VALS(nokia_l2tp_params_infinite), 0,
18233 NULL, HFILL }
18235 { &hf_pfcp_nokia_l2tp_params_session_limit,
18236 {"Session Limit", "pfcp.nokia.l2tp.tunnel_params.session_limit",
18237 FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS, VALS(nokia_l2tp_params_infinite), 0,
18238 NULL, HFILL }
18240 { &hf_pfcp_nokia_l2tp_params_preference,
18241 {"Preference", "pfcp.nokia.l2tp.tunnel_params.preference",
18242 FT_UINT24, BASE_DEC, NULL, 0,
18243 NULL, HFILL }
18245 { &hf_pfcp_nokia_l2tp_params_df_bit,
18246 {"DF Bit", "pfcp.nokia.l2tp.tunnel_params.df_bit",
18247 FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_never_always), 0,
18248 NULL, HFILL }
18250 { &hf_pfcp_nokia_l2tp_params_challenge,
18251 {"Challenge", "pfcp.nokia.l2tp.tunnel_params.challenge",
18252 FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_never_always), 0,
18253 NULL, HFILL }
18255 { &hf_pfcp_nokia_l2tp_params_avp_hiding,
18256 {"AVP Hiding", "pfcp.nokia.l2tp.tunnel_params.avp_hiding",
18257 FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_avp_hiding_vals), 0,
18258 NULL, HFILL }
18260 { &hf_pfcp_nokia_l2tp_params_algorithm,
18261 {"Algorithm", "pfcp.nokia.l2tp.tunnel_params.algorithm",
18262 FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_algorithm_vals), 0,
18263 NULL, HFILL }
18265 { &hf_pfcp_nokia_l2tp_params_rx_window_size,
18266 {"RX Window Size", "pfcp.nokia.l2tp.tunnel_params.rx_window_size",
18267 FT_UINT24, BASE_DEC, NULL, 0,
18268 NULL, HFILL }
18270 { &hf_pfcp_nokia_l2tp_params_max_retries_not_estab,
18271 {"Max Retries Not Estab", "pfcp.nokia.l2tp.tunnel_params.max_retries_not_estab",
18272 FT_UINT24, BASE_DEC, NULL, 0,
18273 NULL, HFILL }
18275 { &hf_pfcp_nokia_l2tp_params_max_retries_estab,
18276 {"Max Retries Estab", "pfcp.nokia.l2tp.tunnel_params.max_retries_estab",
18277 FT_UINT24, BASE_DEC, NULL, 0,
18278 NULL, HFILL }
18280 { &hf_pfcp_nokia_l2tp_params_destruct_timeout,
18281 {"Destruct Timeout", "pfcp.nokia.l2tp.tunnel_params.destruct_timeout",
18282 FT_UINT24, BASE_DEC, NULL, 0,
18283 NULL, HFILL }
18285 { &hf_pfcp_nokia_l2tp_local_tunnel_id,
18286 { "Local Tunnel Id", "pfcp.nokia.l2tp.local_tunnel_id",
18287 FT_UINT16, BASE_DEC, NULL, 0,
18288 NULL, HFILL }
18290 { &hf_pfcp_nokia_l2tp_remote_tunnel_id,
18291 { "Remote Tunnel Id", "pfcp.nokia.l2tp.remote_tunnel_id",
18292 FT_UINT16, BASE_DEC, NULL, 0,
18293 NULL, HFILL }
18295 { &hf_pfcp_nokia_l2tp_local_session_id,
18296 { "Local Session Id", "pfcp.nokia.l2tp.local_session_id",
18297 FT_UINT16, BASE_DEC, NULL, 0,
18298 NULL, HFILL }
18300 { &hf_pfcp_nokia_l2tp_remote_session_id,
18301 { "Remote Session Id", "pfcp.nokia.l2tp.remote_session_id",
18302 FT_UINT16, BASE_DEC, NULL, 0,
18303 NULL, HFILL }
18305 { &hf_pfcp_nokia_l2tp_call_serial_num,
18306 { "Call Serial Number", "pfcp.nokia.l2tp.call_serial_num",
18307 FT_UINT32, BASE_DEC, NULL, 0,
18308 NULL, HFILL }
18310 { &hf_pfcp_nokia_snat_inside_ipv4_address,
18311 { "SNAT Inside IP", "pfcp.nokia.snat_inside_ip",
18312 FT_IPv4, BASE_NONE, NULL, 0x0,
18313 NULL, HFILL }
18315 { &hf_pfcp_nokia_access_line_circuit_id,
18316 { "Access Line Circuit Id", "pfcp.nokia.access_line.circuit_id",
18317 FT_BYTES, BASE_NONE, NULL, 0,
18318 NULL, HFILL }
18320 { &hf_pfcp_nokia_access_line_remote_id,
18321 { "Access Line Remote Id", "pfcp.nokia.access_line.remote_id",
18322 FT_BYTES, BASE_NONE, NULL, 0,
18323 NULL, HFILL }
18325 { &hf_pfcp_nokia_access_line_params_flags,
18326 { "Flags", "pfcp.nokia.access_line.params.flags",
18327 FT_UINT32, BASE_HEX, NULL, 0x0,
18328 NULL, HFILL }
18330 { &hf_pfcp_nokia_access_line_params_flags_b24_act_up,
18331 {"Act Up", "pfcp.nokia.access_line.params.flags.act_up",
18332 FT_BOOLEAN, 32, NULL, 0x01000000,
18333 NULL, HFILL }
18335 { &hf_pfcp_nokia_access_line_params_flags_b25_act_down,
18336 {"Act Down", "pfcp.nokia.access_line.params.flags.act_down",
18337 FT_BOOLEAN, 32, NULL, 0x02000000,
18338 NULL, HFILL }
18340 { &hf_pfcp_nokia_access_line_params_flags_b26_min_up,
18341 {"Min Up", "pfcp.nokia.access_line.params.flags.min_up",
18342 FT_BOOLEAN, 32, NULL, 0x04000000,
18343 NULL, HFILL }
18345 { &hf_pfcp_nokia_access_line_params_flags_b27_min_down,
18346 {"Min Down", "pfcp.nokia.access_line.params.flags.min_down",
18347 FT_BOOLEAN, 32, NULL, 0x08000000,
18348 NULL, HFILL }
18350 { &hf_pfcp_nokia_access_line_params_flags_b28_att_up,
18351 {"Att Up", "pfcp.nokia.access_line.params.flags.att_up",
18352 FT_BOOLEAN, 32, NULL, 0x10000000,
18353 NULL, HFILL }
18355 { &hf_pfcp_nokia_access_line_params_flags_b29_att_down,
18356 {"Att Down", "pfcp.nokia.access_line.params.flags.att_down",
18357 FT_BOOLEAN, 32, NULL, 0x20000000,
18358 NULL, HFILL }
18360 { &hf_pfcp_nokia_access_line_params_flags_b30_max_up,
18361 {"Max Up", "pfcp.nokia.access_line.params.flags.max_up",
18362 FT_BOOLEAN, 32, NULL, 0x40000000,
18363 NULL, HFILL }
18365 { &hf_pfcp_nokia_access_line_params_flags_b31_max_down,
18366 {"Max Down", "pfcp.nokia.access_line.params.flags.max_down",
18367 FT_BOOLEAN, 32, NULL, 0x80000000,
18368 NULL, HFILL }
18370 { &hf_pfcp_nokia_access_line_params_flags_b16_min_up_lp,
18371 {"Min Up Lp", "pfcp.nokia.access_line.params.flags.min_up_lp",
18372 FT_BOOLEAN, 32, NULL, 0x00010000,
18373 NULL, HFILL }
18375 { &hf_pfcp_nokia_access_line_params_flags_b17_min_down_lp,
18376 {"Min Down Lp", "pfcp.nokia.access_line.params.flags.min_down_lp",
18377 FT_BOOLEAN, 32, NULL, 0x00020000,
18378 NULL, HFILL }
18380 { &hf_pfcp_nokia_access_line_params_flags_b18_max_inter_delay_up,
18381 {"Max Inter Delay Up", "pfcp.nokia.access_line.params.flags.max_inter_delay_up",
18382 FT_BOOLEAN, 32, NULL, 0x00040000,
18383 NULL, HFILL }
18385 { &hf_pfcp_nokia_access_line_params_flags_b19_act_inter_delay_up,
18386 {"Act Inter Delay Up", "pfcp.nokia.access_line.params.flags.act_inter_delay_up",
18387 FT_BOOLEAN, 32, NULL, 0x00080000,
18388 NULL, HFILL }
18390 { &hf_pfcp_nokia_access_line_params_flags_b20_max_inter_delay_down,
18391 {"Max Inter Delay Down", "pfcp.nokia.access_line.params.flags.max_inter_delay_down",
18392 FT_BOOLEAN, 32, NULL, 0x00100000,
18393 NULL, HFILL }
18395 { &hf_pfcp_nokia_access_line_params_flags_b21_act_inter_delay_down,
18396 {"Act Inter Delay Down", "pfcp.nokia.access_line.params.flags.act_inter_delay_down",
18397 FT_BOOLEAN, 32, NULL, 0x00200000,
18398 NULL, HFILL }
18400 { &hf_pfcp_nokia_access_line_params_flags_b22_access_loop_encap,
18401 {"Access Loop Encap", "pfcp.nokia.access_line.params.flags.access_loop_encap",
18402 FT_BOOLEAN, 32, NULL, 0x00400000,
18403 NULL, HFILL }
18405 { &hf_pfcp_nokia_access_line_params_flags_b23_iw_session,
18406 {"IW Session", "pfcp.nokia.access_line.params.flags.iw_session",
18407 FT_BOOLEAN, 32, NULL, 0x00800000,
18408 NULL, HFILL }
18410 { &hf_pfcp_nokia_access_line_params_act_up,
18411 { "Act Up", "pfcp.nokia.access_line.params.act_up",
18412 FT_UINT32, BASE_DEC, NULL, 0,
18413 NULL, HFILL }
18415 { &hf_pfcp_nokia_access_line_params_act_down,
18416 { "Act Down", "pfcp.nokia.access_line.params.act_down",
18417 FT_UINT32, BASE_DEC, NULL, 0,
18418 NULL, HFILL }
18420 { &hf_pfcp_nokia_access_line_params_min_up,
18421 { "Min Up", "pfcp.nokia.access_line.params.min_up",
18422 FT_UINT32, BASE_DEC, NULL, 0,
18423 NULL, HFILL }
18425 { &hf_pfcp_nokia_access_line_params_min_down,
18426 { "Min Down", "pfcp.nokia.access_line.params.min_down",
18427 FT_UINT32, BASE_DEC, NULL, 0,
18428 NULL, HFILL }
18430 { &hf_pfcp_nokia_access_line_params_att_up,
18431 { "Att Up", "pfcp.nokia.access_line.params.att_up",
18432 FT_UINT32, BASE_DEC, NULL, 0,
18433 NULL, HFILL }
18435 { &hf_pfcp_nokia_access_line_params_att_down,
18436 { "Act Att Down", "pfcp.nokia.access_line.params.att_down",
18437 FT_UINT32, BASE_DEC, NULL, 0,
18438 NULL, HFILL }
18440 { &hf_pfcp_nokia_access_line_params_max_up,
18441 { "Max Up", "pfcp.nokia.access_line.params.max_up",
18442 FT_UINT32, BASE_DEC, NULL, 0,
18443 NULL, HFILL }
18445 { &hf_pfcp_nokia_access_line_params_max_down,
18446 { "Max Down", "pfcp.nokia.access_line.params.max_down",
18447 FT_UINT32, BASE_DEC, NULL, 0,
18448 NULL, HFILL }
18450 { &hf_pfcp_nokia_access_line_params_min_up_lp,
18451 { "Min Up Lp", "pfcp.nokia.access_line.params.min_up_lp",
18452 FT_UINT32, BASE_DEC, NULL, 0,
18453 NULL, HFILL }
18455 { &hf_pfcp_nokia_access_line_params_min_down_lp,
18456 { "Min Down Lp", "pfcp.nokia.access_line.params.min_down_lp",
18457 FT_UINT32, BASE_DEC, NULL, 0,
18458 NULL, HFILL }
18460 { &hf_pfcp_nokia_access_line_params_max_inter_delay_up,
18461 { "Max Inter Delay Up", "pfcp.nokia.access_line.params.max_inter_delay_up",
18462 FT_UINT32, BASE_DEC, NULL, 0,
18463 NULL, HFILL }
18465 { &hf_pfcp_nokia_access_line_params_act_inter_delay_up,
18466 { "Act Inter Delay Up", "pfcp.nokia.access_line.params.act_inter_delay_up",
18467 FT_UINT32, BASE_DEC, NULL, 0,
18468 NULL, HFILL }
18470 { &hf_pfcp_nokia_access_line_params_max_inter_delay_down,
18471 { "Max Inter Delay Down", "pfcp.nokia.access_line.params.max_inter_delay_down",
18472 FT_UINT32, BASE_DEC, NULL, 0,
18473 NULL, HFILL }
18475 { &hf_pfcp_nokia_access_line_params_act_inter_delay_down,
18476 { "Act Inter Delay Down", "pfcp.nokia.access_line.params.act_inter_delay_down",
18477 FT_UINT32, BASE_DEC, NULL, 0,
18478 NULL, HFILL }
18480 { &hf_pfcp_nokia_access_line_params_access_loop_encap,
18481 { "Access Loop Encap", "pfcp.nokia.access_line.params.access_loop_encap",
18482 FT_UINT24, BASE_DEC, NULL, 0,
18483 NULL, HFILL }
18485 { &hf_pfcp_nokia_acct_session_id,
18486 { "Accounting Session Id", "pfcp.nokia.acct_session_id",
18487 FT_STRING, BASE_NONE, NULL, 0,
18488 NULL, HFILL }
18490 { &hf_pfcp_nokia_fsg_template_name,
18491 { "FSG Template Name", "pfcp.nokia.fsg_template_name",
18492 FT_STRING, BASE_NONE, NULL, 0,
18493 NULL, HFILL }
18495 { &hf_pfcp_nokia_up_profile,
18496 { "UP Profiles", "pfcp.nokia.up_profiles",
18497 FT_STRING, BASE_NONE, NULL, 0,
18498 NULL, HFILL }
18500 { &hf_pfcp_nokia_default_qos_id,
18501 { "Default Qos Id", "pfcp.nokia.default_qos_id",
18502 FT_UINT8, BASE_DEC, NULL, 0,
18503 NULL, HFILL }
18505 { &hf_pfcp_nokia_serving_node_id_flags,
18506 { "Flags", "pfcp.nokia.serving_node_id.flags",
18507 FT_UINT8, BASE_HEX, NULL, 0x0,
18508 NULL, HFILL }
18510 { &hf_pfcp_nokia_serving_node_id_flg_b2_uuid,
18511 { "UUID", "pfcp.nokia.serving_node_id.flags.uuid",
18512 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
18513 NULL, HFILL }
18515 { &hf_pfcp_nokia_serving_node_id_flg_b1_v6,
18516 { "V6 (IPv6)", "pfcp.nokia.serving_node_id.flags.v6",
18517 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18518 NULL, HFILL }
18520 { &hf_pfcp_nokia_serving_node_id_flg_b0_v4,
18521 { "V4 (IPv4)", "pfcp.nokia.serving_node_id.flags.v4",
18522 FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18523 NULL, HFILL }
18525 { &hf_pfcp_nokia_serving_node_id_ipv4,
18526 { "IPv4 address", "pfcp.nokia.serving_node_id.ipv4_addr",
18527 FT_IPv4, BASE_NONE, NULL, 0x0,
18528 NULL, HFILL }
18530 { &hf_pfcp_nokia_serving_node_id_ipv6,
18531 { "IPv6 address", "pfcp.nokia.serving_node_id.ipv6_addr",
18532 FT_IPv6, BASE_NONE, NULL, 0x0,
18533 NULL, HFILL }
18535 { &hf_pfcp_nokia_serving_node_id_uuid,
18536 { "UUID", "pfcp.nokia.serving_node_id.uuid",
18537 FT_GUID, BASE_NONE, NULL, 0x0,
18538 NULL, HFILL }
18540 { &hf_pfcp_nokia_pcc_rule_name,
18541 { "PCC Rule Name", "pfcp.nokia.pcc_rule_name",
18542 FT_STRING, BASE_NONE, NULL, 0,
18543 NULL, HFILL }
18545 { &hf_pfcp_nokia_calltrace_profile,
18546 { "Calltrace Profile", "pfcp.nokia.calltrace_profile",
18547 FT_STRING, BASE_NONE, NULL, 0,
18548 NULL, HFILL }
18550 { &hf_pfcp_nokia_custom_charging_group,
18551 { "Custom Charging Group", "pfcp.nokia.custom_charging_group",
18552 FT_STRING, BASE_NONE, NULL, 0,
18553 NULL, HFILL }
18557 /* Setup protocol subtree array */
18558 int *ett[] = {
18559 &ett_pfcp,
18560 &ett_pfcp_flags,
18561 &ett_pfcp_ie,
18562 &ett_pfcp_unknown_enterprise_ie,
18563 &ett_pfcp_grouped_ie,
18564 &ett_pfcp_reporting_triggers,
18565 &ett_pfcp_up_function_features,
18566 &ett_pfcp_report_trigger,
18567 &ett_pfcp_flow_desc,
18568 &ett_pfcp_tos,
18569 &ett_pfcp_spi,
18570 &ett_pfcp_flow_label,
18571 &ett_pfcp_sdf_filter_id,
18572 &ett_pfcp_adf,
18573 &ett_pfcp_aurl,
18574 &ett_pfcp_adnp,
18575 /* Travelping */
18576 &ett_pfcp_enterprise_travelping_packet_measurement,
18577 &ett_pfcp_enterprise_travelping_error_report,
18578 &ett_pfcp_enterprise_travelping_created_nat_binding,
18579 &ett_pfcp_enterprise_travelping_trace_info,
18580 /* BBF */
18581 &ett_pfcp_bbf_ppp_protocol_flags,
18582 &ett_pfcp_bbf_l2tp_endp_flags,
18583 &ett_pfcp_bbf_l2tp_type_flags,
18584 &ett_pfcp_bbf_ppp_lcp_connectivity,
18585 &ett_pfcp_bbf_l2tp_tunnel,
18586 &ett_pfcp_bbf_nat_port_forward_list,
18587 &ett_pfcp_bbf_sgrp_flags,
18588 &ett_pfcp_bbf_vendor_specific_node_report_type,
18589 /* Nokia */
18590 &ett_pfcp_nokia_detailed_stats_key,
18591 &ett_pfcp_nokia_detailed_stats_bitmap,
18592 &ett_pfcp_nokia_measurement_info,
18593 &ett_pfcp_nokia_pfcpsmreq_flags,
18594 &ett_pfcp_nokia_pfcphb_flags,
18595 &ett_pfcp_nokia_l2tp_tunnel_params_flags,
18596 &ett_pfcp_nokia_access_line_params_flags,
18597 &ett_pfcp_nokia_serving_node_id_flags,
18600 // Each IE gets its own subtree
18601 int* ie_ett[NUM_PFCP_IES - 1];
18602 for (unsigned i = 0; i < NUM_PFCP_IES - 1; i++) {
18603 ie_ett[i] = &ett_pfcp_elem[i];
18606 static ei_register_info ei[] = {
18607 { &ei_pfcp_ie_reserved,{ "pfcp.ie_id_reserved", PI_PROTOCOL, PI_ERROR, "Reserved IE value used", EXPFILL } },
18608 { &ei_pfcp_ie_data_not_decoded,{ "pfcp.ie_data_not_decoded", PI_UNDECODED, PI_NOTE, "IE data not decoded by WS yet", EXPFILL } },
18609 { &ei_pfcp_ie_not_decoded_null,{ "pfcp.ie_not_decoded_null", PI_UNDECODED, PI_NOTE, "IE not decoded yet", EXPFILL } },
18610 { &ei_pfcp_ie_not_decoded_too_large,{ "pfcp.ie_not_decoded", PI_UNDECODED, PI_NOTE, "IE not decoded yet(WS:IE id too large)", EXPFILL } },
18611 { &ei_pfcp_ie_encoding_error,{ "pfcp.ie_encoding_error", PI_PROTOCOL, PI_ERROR, "IE wrongly encoded", EXPFILL } },
18614 module_t *module_pfcp;
18615 expert_module_t* expert_pfcp;
18617 proto_pfcp = proto_register_protocol("Packet Forwarding Control Protocol", "PFCP", "pfcp");
18618 pfcp_handle = register_dissector("pfcp", dissect_pfcp, proto_pfcp);
18619 module_pfcp = prefs_register_protocol(proto_pfcp, NULL);
18621 proto_register_field_array(proto_pfcp, hf_pfcp, array_length(hf_pfcp));
18622 proto_register_subtree_array(ett, array_length(ett));
18623 proto_register_subtree_array(ie_ett, array_length(ie_ett));
18624 expert_pfcp = expert_register_protocol(proto_pfcp);
18625 expert_register_field_array(expert_pfcp, ei, array_length(ei));
18627 /* Register dissector table for enterprise IE dissectors */
18628 pfcp_enterprise_ies_dissector_table = register_dissector_table("pfcp.enterprise_ies", "PFCP Enterprice IEs",
18629 proto_pfcp, FT_UINT32, BASE_DEC);
18631 pfcp_register_generic_ie_dissector(VENDOR_TRAVELPING, "pfcp_travelping_ies", "pfcp.ie.travelping", "Travelping IE Type", pfcp_travelping_ies, G_N_ELEMENTS(pfcp_travelping_ies));
18632 pfcp_register_generic_ie_dissector(VENDOR_BROADBAND_FORUM, "pfcp_bbf_ies", "pfcp.ie.bbf", "Broadband Forum IE Type", pfcp_bbf_ies, G_N_ELEMENTS(pfcp_bbf_ies));
18633 pfcp_register_generic_ie_dissector(VENDOR_NOKIA, "pfcp_nokia_ies", "pfcp.ie.nokia", "Nokia IE Type", pfcp_nokia_ies, G_N_ELEMENTS(pfcp_nokia_ies));
18635 prefs_register_bool_preference(module_pfcp, "track_pfcp_session", "Track PFCP session", "Track PFCP session", &g_pfcp_session);
18637 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 register_init_routine(pfcp_init);
18640 register_cleanup_routine(pfcp_cleanup);
18642 pfcp_tap = register_tap("pfcp");
18644 register_srt_table(proto_pfcp, NULL, 1, pfcp_stat_packet, pfcp_stat_init, NULL);
18647 void
18648 proto_reg_handoff_pfcp(void)
18650 dissector_add_uint_with_preference("udp.port", UDP_PORT_PFCP, pfcp_handle);
18651 dissector_add_string("media_type", "application/vnd.3gpp.pfcp", pfcp_handle);
18653 gtpv2_uli_handle = find_dissector("gtpv2.uli");
18657 * Editor modelines - https://www.wireshark.org/tools/modelines.html
18659 * Local variables:
18660 * c-basic-offset: 4
18661 * tab-width: 8
18662 * indent-tabs-mode: nil
18663 * End:
18665 * vi: set shiftwidth=4 tabstop=8 expandtab:
18666 * :indentSize=4:tabSize=8:noTabs=true: