Coverage Report

Created: 2026-07-12 07:10

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-pfcp.c
Line
Count
Source
1
/* packet-pfcp.c
2
 *
3
 * Routines for Packet Forwarding Control Protocol (PFCP) dissection
4
 *
5
 * Copyright 2017-2018, Anders Broman <anders.broman@ericsson.com>
6
 *
7
 * Updates and corrections:
8
 * Copyright 2017-2026, Joakim Karlsson <oakimk@gmail.com>
9
 *
10
 * Wireshark - Network traffic analyzer
11
 * By Gerald Combs <gerald@wireshark.org>
12
 * Copyright 1998 Gerald Combs
13
 *
14
 * SPDX-License-Identifier: GPL-2.0-or-later
15
 *
16
 * Ref 3GPP TS 29.244 V19.6.0 (2026-06)
17
 */
18
#include "config.h"
19
20
#include <math.h>
21
22
#include <epan/packet.h>
23
#include <epan/conversation.h>
24
#include <epan/etypes.h>
25
#include <epan/expert.h>
26
#include <epan/sminmpec.h>
27
#include <epan/addr_resolv.h> /* Needed for BASE_ENTERPRISES */
28
#include <epan/tap.h>
29
#include <epan/srt_table.h>
30
#include <epan/tfs.h>
31
#include <epan/unit_strings.h>
32
#include <epan/iana-info.h>
33
#include <proto.h>
34
#include <tvbuff.h>
35
#include <wsutil/array.h>
36
#include "packet-e164.h"
37
#include "packet-e212.h"
38
#include "packet-ip.h"
39
40
void proto_register_pfcp(void);
41
void proto_reg_handoff_pfcp(void);
42
43
static dissector_handle_t pfcp_handle;
44
static dissector_handle_t gtpv2_uli_handle;
45
46
15
#define UDP_PORT_PFCP  8805 /* IANA-registered */
47
48
static int proto_pfcp;
49
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;
60
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;
66
67
static int hf_pfcp_response_in;
68
static int hf_pfcp_response_to;
69
static int hf_pfcp_response_time;
70
71
static int hf_pfcp_session;
72
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;
91
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;
121
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;
135
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;
141
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;
151
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;
161
162
163
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;
177
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;
217
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;
221
222
static int hf_pfcp_subsequent_time_threshold;
223
static int hf_pfcp_inactivity_detection_time;
224
static int hf_pfcp_monitoring_time;
225
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;
244
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;
251
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;
258
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;
265
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;
281
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;
289
290
static int hf_pfcp_offending_ie;
291
static int hf_pfcp_offending_ie_value;
292
293
static int hf_pfcp_up_function_features_o14_b7_muxmf;
294
static int hf_pfcp_up_function_features_o14_b6_dyntr;
295
static int hf_pfcp_up_function_features_o14_b5_mpquic_e;
296
static int hf_pfcp_up_function_features_o14_b4_mpquic_ip;
297
static int hf_pfcp_up_function_features_o14_b3_ushph;
298
static int hf_pfcp_up_function_features_o14_b2_natpub;
299
static int hf_pfcp_up_function_features_o14_b1_un6dm;
300
static int hf_pfcp_up_function_features_o14_b0_mbsch;
301
static int hf_pfcp_up_function_features_o15_b6_papfd;
302
static int hf_pfcp_up_function_features_o15_b5_qmabr;
303
static int hf_pfcp_up_function_features_o15_b4_udpopt;
304
static int hf_pfcp_up_function_features_o15_b3_psitlm;
305
static int hf_pfcp_up_function_features_o15_b2_ulm;
306
static int hf_pfcp_up_function_features_o15_b1_moq;
307
static int hf_pfcp_up_function_features_o15_b0_conudp;
308
static int hf_pfcp_up_function_features_o13_b7_un6tu;
309
static int hf_pfcp_up_function_features_o13_b6_umn6ip;
310
static int hf_pfcp_up_function_features_o13_b5_upsbies;
311
static int hf_pfcp_up_function_features_o13_b4_mtsdt;
312
static int hf_pfcp_up_function_features_o13_b3_edbnc;
313
static int hf_pfcp_up_function_features_o13_b2_qmdrm;
314
static int hf_pfcp_up_function_features_o13_b1_cntl;
315
static int hf_pfcp_up_function_features_o13_b0_pdusm;
316
static int hf_pfcp_up_function_features_o12_b7_eml4s;
317
static int hf_pfcp_up_function_features_o12_b6_detnet;
318
static int hf_pfcp_up_function_features_o12_b5_qmcon;
319
static int hf_pfcp_up_function_features_o12_b4_n6jedb;
320
static int hf_pfcp_up_function_features_o12_b3_drtsc;
321
static int hf_pfcp_up_function_features_o12_b2_tscts;
322
static int hf_pfcp_up_function_features_o12_b1_dbdm;
323
static int hf_pfcp_up_function_features_o12_b0_redsm;
324
static int hf_pfcp_up_function_features_o11_b7_mpquic;
325
static int hf_pfcp_up_function_features_o11_b6_afsfc;
326
static int hf_pfcp_up_function_features_o11_b5_upidp;
327
static int hf_pfcp_up_function_features_o11_b4_ratp;
328
static int hf_pfcp_up_function_features_o11_b3_eppi;
329
static int hf_pfcp_up_function_features_o11_b2_psuprm;
330
static int hf_pfcp_up_function_features_o11_b1_mbsn4;
331
static int hf_pfcp_up_function_features_o11_b0_drqos;
332
static int hf_pfcp_up_function_features_o10_b7_dnsts;
333
static int hf_pfcp_up_function_features_o10_b6_iprep;
334
static int hf_pfcp_up_function_features_o10_b5_resps;
335
static int hf_pfcp_up_function_features_o10_b4_upber;
336
static int hf_pfcp_up_function_features_o10_b3_l2tp;
337
static int hf_pfcp_up_function_features_o10_b2_nspoc;
338
static int hf_pfcp_up_function_features_o10_b1_quasf;
339
static int hf_pfcp_up_function_features_o10_b0_rttwp;
340
static int hf_pfcp_up_function_features_o9_b7_rds;
341
static int hf_pfcp_up_function_features_o9_b6_ddds;
342
static int hf_pfcp_up_function_features_o9_b5_ethar;
343
static int hf_pfcp_up_function_features_o9_b4_ciot;
344
static int hf_pfcp_up_function_features_o9_b3_mt_edt;
345
static int hf_pfcp_up_function_features_o9_b2_gpqm;
346
static int hf_pfcp_up_function_features_o9_b1_qfqm;
347
static int hf_pfcp_up_function_features_o9_b0_atsss_ll;
348
static int hf_pfcp_up_function_features_o8_b7_mptcp;
349
static int hf_pfcp_up_function_features_o8_b6_tsn;
350
static int hf_pfcp_up_function_features_o8_b5_ip6pl;
351
static int hf_pfcp_up_function_features_o8_b4_iptv;
352
static int hf_pfcp_up_function_features_o8_b3_norp;
353
static int hf_pfcp_up_function_features_o8_b2_vtime;
354
static int hf_pfcp_up_function_features_o8_b1_rttl;
355
static int hf_pfcp_up_function_features_o8_b0_mpas;
356
static int hf_pfcp_up_function_features_o7_b7_gcom;
357
static int hf_pfcp_up_function_features_o7_b6_bundl;
358
static int hf_pfcp_up_function_features_o7_b5_mte_n4;
359
static int hf_pfcp_up_function_features_o7_b4_mnop;
360
static int hf_pfcp_up_function_features_o7_b3_sset;
361
static int hf_pfcp_up_function_features_o7_b2_ueip;
362
static int hf_pfcp_up_function_features_o7_b1_adpdp;
363
static int hf_pfcp_up_function_features_o7_b0_dpdra;
364
static int hf_pfcp_up_function_features_o6_b7_epfar;
365
static int hf_pfcp_up_function_features_o6_b6_pfde;
366
static int hf_pfcp_up_function_features_o6_b5_frrt;
367
static int hf_pfcp_up_function_features_o6_b4_trace;
368
static int hf_pfcp_up_function_features_o6_b3_quoac;
369
static int hf_pfcp_up_function_features_o6_b2_udbc;
370
static int hf_pfcp_up_function_features_o6_b1_pdiu;
371
static int hf_pfcp_up_function_features_o6_b0_empu;
372
static int hf_pfcp_up_function_features_o5_b7_treu;
373
static int hf_pfcp_up_function_features_o5_b6_heeu;
374
static int hf_pfcp_up_function_features_o5_b5_pfdm;
375
static int hf_pfcp_up_function_features_o5_b4_ftup;
376
static int hf_pfcp_up_function_features_o5_b3_trst;
377
static int hf_pfcp_up_function_features_o5_b2_dlbd;
378
static int hf_pfcp_up_function_features_o5_b1_ddnd;
379
static int hf_pfcp_up_function_features_o5_b0_bucp;
380
381
static int hf_pfcp_sequence_number;
382
static int hf_pfcp_metric;
383
static int hf_pfcp_timer_unit;
384
static int hf_pfcp_timer_value;
385
386
static int hf_pfcp_usage_report_trigger_o5_b7_immer;
387
static int hf_pfcp_usage_report_trigger_o5_b6_droth;
388
static int hf_pfcp_usage_report_trigger_o5_b5_stopt;
389
static int hf_pfcp_usage_report_trigger_o5_b4_start;
390
static int hf_pfcp_usage_report_trigger_o5_b3_quhti;
391
static int hf_pfcp_usage_report_trigger_o5_b2_timth;
392
static int hf_pfcp_usage_report_trigger_o5_b1_volth;
393
static int hf_pfcp_usage_report_trigger_o5_b0_perio;
394
static int hf_pfcp_usage_report_trigger_o6_b7_eveth;
395
static int hf_pfcp_usage_report_trigger_o6_b6_macar;
396
static int hf_pfcp_usage_report_trigger_o6_b5_envcl;
397
static int hf_pfcp_usage_report_trigger_o6_b4_monit;
398
static int hf_pfcp_usage_report_trigger_o6_b3_termr;
399
static int hf_pfcp_usage_report_trigger_o6_b2_liusa;
400
static int hf_pfcp_usage_report_trigger_o6_b1_timqu;
401
static int hf_pfcp_usage_report_trigger_o6_b0_volqu;
402
static int hf_pfcp_usage_report_trigger_o7_b5_upint;
403
static int hf_pfcp_usage_report_trigger_o7_b4_emrre;
404
static int hf_pfcp_usage_report_trigger_o7_b3_quvti;
405
static int hf_pfcp_usage_report_trigger_o7_b2_ipmjl;
406
static int hf_pfcp_usage_report_trigger_o7_b1_tebur;
407
static int hf_pfcp_usage_report_trigger_o7_b0_evequ;
408
409
static int hf_pfcp_volume_measurement_b5_dlnop;
410
static int hf_pfcp_volume_measurement_b4_ulnop;
411
static int hf_pfcp_volume_measurement_b3_tonop;
412
static int hf_pfcp_volume_measurement_b2_dlvol;
413
static int hf_pfcp_volume_measurement_b1_ulvol;
414
static int hf_pfcp_volume_measurement_b0_tovol;
415
static int hf_pfcp_vol_meas_tovol;
416
static int hf_pfcp_vol_meas_ulvol;
417
static int hf_pfcp_vol_meas_dlvol;
418
static int hf_pfcp_vol_meas_tonop;
419
static int hf_pfcp_vol_meas_ulnop;
420
static int hf_pfcp_vol_meas_dlnop;
421
422
static int hf_pfcp_cp_function_features_o6_b2_papfd;
423
static int hf_pfcp_cp_function_features_o6_b1_rpgur;
424
static int hf_pfcp_cp_function_features_o6_b0_psucc;
425
static int hf_pfcp_cp_function_features_o5_b7_uiaur;
426
static int hf_pfcp_cp_function_features_o5_b6_ardr;
427
static int hf_pfcp_cp_function_features_o5_b5_mpas;
428
static int hf_pfcp_cp_function_features_o5_b4_bundl;
429
static int hf_pfcp_cp_function_features_o5_b3_sset;
430
static int hf_pfcp_cp_function_features_o5_b2_epfar;
431
static int hf_pfcp_cp_function_features_o5_b1_ovrl;
432
static int hf_pfcp_cp_function_features_o5_b0_load;
433
434
static int hf_pfcp_usage_information_b3_ube;
435
static int hf_pfcp_usage_information_b2_uae;
436
static int hf_pfcp_usage_information_b1_aft;
437
static int hf_pfcp_usage_information_b0_bef;
438
439
static int hf_pfcp_application_instance_id;
440
static int hf_pfcp_application_instance_id_str;
441
static int hf_pfcp_flow_dir;
442
static int hf_pfcp_packet_rate_b0_ulpr;
443
static int hf_pfcp_packet_rate_b1_dlpr;
444
static int hf_pfcp_packet_rate_b2_aprc;
445
static int hf_pfcp_ul_time_unit;
446
static int hf_pfcp_max_ul_pr;
447
static int hf_pfcp_dl_time_unit;
448
static int hf_pfcp_max_dl_pr;
449
static int hf_pfcp_a_ul_time_unit;
450
static int hf_pfcp_a_max_ul_pr;
451
static int hf_pfcp_a_dl_time_unit;
452
static int hf_pfcp_a_max_dl_pr;
453
454
static int hf_pfcp_dl_flow_level_marking_b0_ttc;
455
static int hf_pfcp_dl_flow_level_marking_b1_sci;
456
457
static int hf_pfcp_sci;
458
static int hf_pfcp_dl_data_notification_delay;
459
static int hf_pfcp_packet_count;
460
static int hf_pfcp_dl_data_service_inf_b0_ppi;
461
static int hf_pfcp_dl_data_service_inf_b1_qfii;
462
static int hf_pfcp_dl_data_service_inf_b2_dlpsi;
463
static int hf_pfcp_paging_policy_indication;
464
static int hf_pfcp_dldatapacketsize;
465
466
static int hf_pfcp_pfcpsmreq_flags_b0_drobu;
467
static int hf_pfcp_pfcpsmreq_flags_b1_sndem;
468
static int hf_pfcp_pfcpsmreq_flags_b2_qaurr;
469
static int hf_pfcp_pfcpsmreq_flags_b3_sumpc;
470
static int hf_pfcp_pfcpsmreq_flags_b4_rumuc;
471
static int hf_pfcp_pfcpsmreq_flags_b5_deteid;
472
static int hf_pfcp_pfcpsmreq_flags_b6_hrsbom;
473
474
static int hf_pfcp_pfcpsrrsp_flags_b0_drobu;
475
476
static int hf_pfcp_pfd_contents_flags_b7_adnp;
477
static int hf_pfcp_pfd_contents_flags_b6_aurl;
478
static int hf_pfcp_pfd_contents_flags_b5_afd;
479
static int hf_pfcp_pfd_contents_flags_b4_dnp;
480
static int hf_pfcp_pfd_contents_flags_b3_cp;
481
static int hf_pfcp_pfd_contents_flags_b2_dn;
482
static int hf_pfcp_pfd_contents_flags_b1_url;
483
static int hf_pfcp_pfd_contents_flags_b0_fd;
484
485
static int hf_pfcp_url_len;
486
static int hf_pfcp_url;
487
static int hf_pfcp_dn_len;
488
static int hf_pfcp_dn;
489
static int hf_pfcp_cp_len;
490
static int hf_pfcp_cp;
491
static int hf_pfcp_dnp_len;
492
static int hf_pfcp_dnp;
493
static int hf_pfcp_afd_len;
494
static int hf_pfcp_aurl_len;
495
static int hf_pfcp_adnp_len;
496
static int hf_pfcp_header_type;
497
static int hf_pfcp_hf_len;
498
static int hf_pfcp_hf_name;
499
static int hf_pfcp_hf_val_len;
500
static int hf_pfcp_hf_val;
501
502
static int hf_pfcp_measurement_info_b0_mbqe;
503
static int hf_pfcp_measurement_info_b1_inam;
504
static int hf_pfcp_measurement_info_b2_radi;
505
static int hf_pfcp_measurement_info_b3_istm;
506
static int hf_pfcp_measurement_info_b4_mnop;
507
static int hf_pfcp_measurement_info_b5_sspoc;
508
static int hf_pfcp_measurement_info_b6_aspoc;
509
static int hf_pfcp_measurement_info_b7_ciam;
510
511
static int hf_pfcp_node_report_type_b0_upfr;
512
static int hf_pfcp_node_report_type_b1_uprr;
513
static int hf_pfcp_node_report_type_b2_ckdr;
514
static int hf_pfcp_node_report_type_b3_gpqr;
515
static int hf_pfcp_node_report_type_b4_purr;
516
static int hf_pfcp_node_report_type_b5_vsr;
517
static int hf_pfcp_node_report_type_b6_n6dr;
518
519
static int hf_pfcp_remote_gtp_u_peer_flags_b0_v6;
520
static int hf_pfcp_remote_gtp_u_peer_flags_b1_v4;
521
static int hf_pfcp_remote_gtp_u_peer_flags_b2_di;
522
static int hf_pfcp_remote_gtp_u_peer_flags_b3_ni;
523
static int hf_pfcp_remote_gtp_u_peer_flags_b4_rts;
524
static int hf_pfcp_remote_gtp_u_peer_ipv4;
525
static int hf_pfcp_remote_gtp_u_peer_ipv6;
526
static int hf_pfcp_remote_gtp_u_peer_length_di;
527
static int hf_pfcp_remote_gtp_u_peer_length_ni;
528
static int hf_pfcp_remote_gtp_u_peer_time_stamp;
529
static int hf_pfcp_ur_seqn;
530
531
static int hf_pfcp_oci_flags_b0_aoci;
532
533
static int hf_pfcp_pfcp_assoc_rel_req_b0_sarr;
534
static int hf_pfcp_pfcp_assoc_rel_req_b1_urss;
535
536
static int hf_pfcp_upiri_flags_b0_v4;
537
static int hf_pfcp_upiri_flags_b1_v6;
538
static int hf_pfcp_upiri_flg_b6_assosi;
539
static int hf_pfcp_upiri_flg_b5_assoni;
540
static int hf_pfcp_upiri_flg_b2b4_teidri;
541
static int hf_pfcp_upiri_teidri;
542
static int hf_pfcp_upiri_teid_range;
543
static int hf_pfcp_upiri_ipv4;
544
static int hf_pfcp_upiri_ipv6;
545
546
static int hf_pfcp_user_plane_inactivity_timer;
547
548
static int hf_pfcp_subsequent_volume_quota_b2_dlvol;
549
static int hf_pfcp_subsequent_volume_quota_b1_ulvol;
550
static int hf_pfcp_subsequent_volume_quota_b0_tovol;
551
static int hf_pfcp_subsequent_volume_quota_tovol;
552
static int hf_pfcp_subsequent_volume_quota_ulvol;
553
static int hf_pfcp_subsequent_volume_quota_dlvol;
554
555
static int hf_pfcp_subsequent_time_quota;
556
557
static int hf_pfcp_rqi_flag;
558
static int hf_pfcp_qfi;
559
static int hf_pfcp_query_urr_reference;
560
static int hf_pfcp_additional_usage_reports_information_b14_b0_number_value;
561
static int hf_pfcp_additional_usage_reports_information_b15_auri;
562
static int hf_pfcp_traffic_endpoint_id;
563
564
static int hf_pfcp_mac_address_flags_b3_udes;
565
static int hf_pfcp_mac_address_flags_b2_usou;
566
static int hf_pfcp_mac_address_flags_b1_dest;
567
static int hf_pfcp_mac_address_flags_b0_sour;
568
static int hf_pfcp_mac_address_upper_dest_mac_address;
569
static int hf_pfcp_mac_address_upper_source_mac_address;
570
static int hf_pfcp_mac_address_dest_mac_address;
571
static int hf_pfcp_mac_address_source_mac_address;
572
573
static int hf_pfcp_c_tag_flags_b2_vid;
574
static int hf_pfcp_c_tag_flags_b1_dei;
575
static int hf_pfcp_c_tag_flags_b0_pcp;
576
static int hf_pfcp_c_tag_cvid;
577
static int hf_pfcp_c_tag_dei_flag;
578
static int hf_pfcp_c_tag_pcp_value;
579
580
static int hf_pfcp_s_tag_flags_b2_vid;
581
static int hf_pfcp_s_tag_flags_b1_dei;
582
static int hf_pfcp_s_tag_flags_b0_pcp;
583
static int hf_pfcp_s_tag_svid;
584
static int hf_pfcp_s_tag_dei_flag;
585
static int hf_pfcp_s_tag_pcp_value;
586
587
static int hf_pfcp_ethertype;
588
589
static int hf_pfcp_proxying_flags_b1_ins;
590
static int hf_pfcp_proxying_flags_b0_arp;
591
592
static int hf_pfcp_ethertype_filter_id;
593
594
static int hf_pfcp_ethertype_filter_properties_flags_b0_bide;
595
596
static int hf_pfcp_suggested_buffering_packets_count_packet_count;
597
598
static int hf_pfcp_user_id_flags_b6_peif;
599
static int hf_pfcp_user_id_flags_b5_gpsif;
600
static int hf_pfcp_user_id_flags_b4_supif;
601
static int hf_pfcp_user_id_flags_b3_naif;
602
static int hf_pfcp_user_id_flags_b2_msisdnf;
603
static int hf_pfcp_user_id_flags_b1_imeif;
604
static int hf_pfcp_user_id_flags_b0_imsif;
605
static int hf_pfcp_user_id_length_of_imsi;
606
static int hf_pfcp_user_id_length_of_imei;
607
static int hf_pfcp_user_id_imei;
608
static int hf_pfcp_user_id_length_of_msisdn;
609
static int hf_pfcp_user_id_length_of_nai;
610
static int hf_pfcp_user_id_nai;
611
static int hf_pfcp_user_id_length_of_supi;
612
static int hf_pfcp_user_id_supi;
613
static int hf_pfcp_user_id_length_of_gpsi;
614
static int hf_pfcp_user_id_gpsi;
615
static int hf_pfcp_user_id_length_of_pei;
616
static int hf_pfcp_user_id_pei;
617
618
static int hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi;
619
620
static int hf_pfcp_mac_addresses_detected_number_of_mac_addresses;
621
static int hf_pfcp_mac_addresses_detected_mac_address;
622
static int hf_pfcp_mac_addresses_detected_length_of_ctag;
623
static int hf_pfcp_mac_addresses_detected_length_of_stag;
624
625
static int hf_pfcp_mac_addresses_removed_number_of_mac_addresses;
626
static int hf_pfcp_mac_addresses_removed_mac_address;
627
static int hf_pfcp_mac_addresses_removed_length_of_ctag;
628
static int hf_pfcp_mac_addresses_removed_length_of_stag;
629
630
static int hf_pfcp_ethernet_inactivity_timer;
631
632
static int hf_pfcp_subsequent_event_quota;
633
634
static int hf_pfcp_subsequent_event_threshold;
635
636
static int hf_pfcp_trace_information_trace_id;
637
static int hf_pfcp_trace_information_length_trigger_events;
638
static int hf_pfcp_trace_information_trigger_events;
639
static int hf_pfcp_trace_information_session_trace_depth;
640
static int hf_pfcp_trace_information_length_list_interfaces;
641
static int hf_pfcp_trace_information_list_interfaces;
642
static int hf_pfcp_trace_information_length_ipaddress;
643
static int hf_pfcp_trace_information_ipv4;
644
static int hf_pfcp_trace_information_ipv6;
645
646
static int hf_pfcp_framed_route;
647
static int hf_pfcp_framed_routing;
648
static int hf_pfcp_framed_ipv6_route;
649
650
static int hf_pfcp_event_quota;
651
652
static int hf_pfcp_event_threshold;
653
654
static int hf_pfcp_time_stamp;
655
656
static int hf_pfcp_averaging_window;
657
658
static int hf_pfcp_paging_policy_indicator;
659
660
static int hf_pfcp_apn_dnn;
661
662
static int hf_pfcp_tgpp_interface_type;
663
664
static int hf_pfcp_pfcpsrreq_flags_b0_psdbu;
665
666
static int hf_pfcp_pfcpaureq_flags_b0_parps;
667
668
static int hf_pfcp_activation_time;
669
static int hf_pfcp_deactivation_time;
670
671
static int hf_pfcp_mar_id;
672
673
static int hf_pfcp_steering_functionality;
674
static int hf_pfcp_steering_mode;
675
676
static int hf_pfcp_weight;
677
static int hf_pfcp_priority;
678
679
static int hf_pfcp_ue_ip_address_pool_length;
680
static int hf_pfcp_ue_ip_address_pool_identity;
681
682
static int hf_pfcp_alternative_smf_ip_address_flags_ppe;
683
static int hf_pfcp_alternative_smf_ip_address_ipv4;
684
static int hf_pfcp_alternative_smf_ip_address_ipv6;
685
686
static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b3_dcaroni;
687
static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b2_prin6i;
688
static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b1_prin19i;
689
static int hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b0_priueai;
690
691
static int hf_pfcp_validity_time_value;
692
static int hf_pfcp_validity_time_str;
693
694
static int hf_pfcp_number_of_reports;
695
696
static int hf_pfcp_pfcpasrsp_flags_flags_b1_uupsi;
697
static int hf_pfcp_pfcpasrsp_flags_flags_b0_psrei;
698
699
static int hf_pfcp_cp_pfcp_entity_ip_address_ipv4;
700
static int hf_pfcp_cp_pfcp_entity_ip_address_ipv6;
701
702
static int hf_pfcp_pfcpsereq_flags_flags_b2_hrsbom;
703
static int hf_pfcp_pfcpsereq_flags_flags_b1_sumpc;
704
static int hf_pfcp_pfcpsereq_flags_flags_b0_resti;
705
706
static int hf_pfcp_ip_multicast_address_flags_b3_any;
707
static int hf_pfcp_ip_multicast_address_flags_b2_range;
708
static int hf_pfcp_ip_multicast_address_start_ipv4;
709
static int hf_pfcp_ip_multicast_address_start_ipv6;
710
static int hf_pfcp_ip_multicast_address_end_ipv4;
711
static int hf_pfcp_ip_multicast_address_end_ipv6;
712
713
static int hf_pfcp_source_ip_address_flags_b2_mpl;
714
static int hf_pfcp_source_ip_address_ipv4;
715
static int hf_pfcp_source_ip_address_ipv6;
716
static int hf_pfcp_source_ip_address_mask_prefix_lengt;
717
718
static int hf_pfcp_packet_rate_status_flags_b2_apr;
719
static int hf_pfcp_packet_rate_status_flags_b1_dl;
720
static int hf_pfcp_packet_rate_status_flags_b0_ul;
721
static int hf_pfcp_packet_rate_status_ul;
722
static int hf_pfcp_packet_rate_status_dl;
723
static int hf_pfcp_packet_rate_status_apr_ul;
724
static int hf_pfcp_packet_rate_status_apr_dl;
725
static int hf_pfcp_packet_rate_status_validity_time;
726
727
static int hf_pfcp_create_bridge_router_info_flags_b1_rii;
728
static int hf_pfcp_create_bridge_router_info_flags_b0_bii;
729
730
static int hf_pfcp_port_number;
731
732
static int hf_pfcp_nw_tt_port_number;
733
734
static int hf_pfcp_5gs_user_plane_node_id_flags_b0_bid;
735
static int hf_pfcp_5gs_user_plane_node_id_value;
736
737
static int hf_pfcp_port_management_information;
738
739
static int hf_pfcp_requested_clock_drift_control_information_flags_b1_rrcr;
740
static int hf_pfcp_requested_clock_drift_control_information_flags_b0_rrto;
741
742
static int hf_pfcp_time_domain_number_value;
743
744
static int hf_pfcp_time_offset_threshold;
745
746
static int hf_pfcp_cumulative_rate_ratio_threshold;
747
748
static int hf_pfcp_time_offset_measurement;
749
750
static int hf_pfcp_cumulative_rate_ratio_measurement;
751
752
static int hf_pfcp_srr_id;
753
754
static int hf_pfcp_requested_access_availability_control_information_flags_b0_rrca;
755
756
static int hf_pfcp_availability_status;
757
static int hf_pfcp_availability_type;
758
759
static int hf_pfcp_mptcp_control_information_flags_b0_tci;
760
761
static int hf_pfcp_atsss_ll_control_information_flags_b0_lli;
762
763
static int hf_pfcp_pmf_control_information_flags_b2_pqpm;
764
static int hf_pfcp_pmf_control_information_flags_b1_drtti;
765
static int hf_pfcp_pmf_control_information_flags_b0_pmfi;
766
static int hf_pfcp_pmf_control_information_number_of_qfi;
767
768
static int hf_pfcp_mptcp_address_information_flags_b1_v6;
769
static int hf_pfcp_mptcp_address_information_flags_b0_v4;
770
static int hf_pfcp_mptcp_proxy_type;
771
static int hf_pfcp_mptcp_proxy_port;
772
static int hf_pfcp_mptcp_proxy_ip_address_ipv4;
773
static int hf_pfcp_mptcp_proxy_ip_address_ipv6;
774
775
static int hf_pfcp_link_specific_multipath_ip_address_flags_b3_nv6;
776
static int hf_pfcp_link_specific_multipath_ip_address_flags_b2_nv4;
777
static int hf_pfcp_link_specific_multipath_ip_address_flags_b1_v6;
778
static int hf_pfcp_link_specific_multipath_ip_address_flags_b0_v4;
779
static int hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv4;
780
static int hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv6;
781
static int hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv4;
782
static int hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv6;
783
784
static int hf_pfcp_pmf_address_information_flags_b2_mac;
785
static int hf_pfcp_pmf_address_information_flags_b1_v6;
786
static int hf_pfcp_pmf_address_information_flags_b0_v4;
787
static int hf_pfcp_pmf_address_ipv4;
788
static int hf_pfcp_pmf_address_ipv6;
789
static int hf_pfcp_pmf_port_3gpp;
790
static int hf_pfcp_pmf_port_non3gpp;
791
static int hf_pfcp_pmf_mac_address_3gpp;
792
static int hf_pfcp_pmf_mac_address_non3gpp;
793
794
static int hf_pfcp_atsss_ll_information_flags_b0_lli;
795
796
static int hf_pfcp_data_network_access_identifier;
797
798
static int hf_pfcp_packet_delay_milliseconds;
799
800
static int hf_pfcp_qos_report_trigger_flags_b2_ire;
801
static int hf_pfcp_qos_report_trigger_flags_b1_thr;
802
static int hf_pfcp_qos_report_trigger_flags_b0_per;
803
804
static int hf_pfcp_gtp_u_path_interface_type_flags_b1_n3;
805
static int hf_pfcp_gtp_u_path_interface_type_flags_b0_n9;
806
807
static int hf_pfcp_requested_qos_monitoring_flags_b7_ulpr;
808
static int hf_pfcp_requested_qos_monitoring_flags_b6_dlpr;
809
static int hf_pfcp_requested_qos_monitoring_flags_b5_ulci;
810
static int hf_pfcp_requested_qos_monitoring_flags_b4_dlci;
811
static int hf_pfcp_requested_qos_monitoring_flags_b3_gtpupm;
812
static int hf_pfcp_requested_qos_monitoring_flags_b2_rppd;
813
static int hf_pfcp_requested_qos_monitoring_flags_b1_ulpd;
814
static int hf_pfcp_requested_qos_monitoring_flags_b0_dlpd;
815
816
static int hf_pfcp_reporting_frequency_flags_b2_sesrl;
817
static int hf_pfcp_reporting_frequency_flags_b1_perio;
818
static int hf_pfcp_reporting_frequency_flags_b0_evett;
819
820
static int hf_pfcp_packet_delay_thresholds_flags_b2_rp;
821
static int hf_pfcp_packet_delay_thresholds_flags_b1_ul;
822
static int hf_pfcp_packet_delay_thresholds_flags_b0_dl;
823
static int hf_pfcp_packet_delay_thresholds_downlink;
824
static int hf_pfcp_packet_delay_thresholds_uplink;
825
static int hf_pfcp_packet_delay_thresholds_roundtrip;
826
827
static int hf_pfcp_minimum_wait_time_seconds;
828
829
static int hf_pfcp_qos_monitoring_measurement_flags_b7_uldr;
830
static int hf_pfcp_qos_monitoring_measurement_flags_b6_dldr;
831
static int hf_pfcp_qos_monitoring_measurement_flags_b5_ulci;
832
static int hf_pfcp_qos_monitoring_measurement_flags_b4_dlci;
833
static int hf_pfcp_qos_monitoring_measurement_flags_b3_plmf;
834
static int hf_pfcp_qos_monitoring_measurement_flags_b2_rppd;
835
static int hf_pfcp_qos_monitoring_measurement_flags_b1_ulpd;
836
static int hf_pfcp_qos_monitoring_measurement_flags_b0_dlpd;
837
static int hf_pfcp_qos_monitoring_measurement_downlink_packet_delay;
838
static int hf_pfcp_qos_monitoring_measurement_uplink_packet_delay;
839
static int hf_pfcp_qos_monitoring_measurement_roundtrip;
840
static int hf_pfcp_qos_monitoring_measurement_downlink_congestion_information;
841
static int hf_pfcp_qos_monitoring_measurement_uplink_congestion_information;
842
static int hf_pfcp_qos_monitoring_measurement_downlink_packet_rate;
843
static int hf_pfcp_qos_monitoring_measurement_uplink_packet_rate;
844
845
static int hf_pfcp_mt_edt_control_information_flags_b0_rdsi;
846
847
static int hf_pfcp_dl_data_packets_size;
848
849
static int hf_pfcp_qer_control_indications_o5_b0_rcsr;
850
851
static int hf_pfcp_nf_instance_id;
852
853
static int hf_pfcp_s_nssai_sst;
854
static int hf_pfcp_s_nssai_sd;
855
856
static int hf_pfcp_ip_version_flags_b1_v6;
857
static int hf_pfcp_ip_version_flags_b0_v4;
858
859
static int hf_pfcp_pfcpasreq_flags_flags_b0_uupsi;
860
861
static int hf_pfcp_data_status_flags_b1_buff;
862
static int hf_pfcp_data_status_flags_b0_drop;
863
864
static int hf_pfcp_rds_configuration_information_flags_b0_rds;
865
866
static int hf_pfcp_multipath_application_indication_flags_b1_mqai;
867
static int hf_pfcp_multipath_application_indication_flags_b0_mtai;
868
869
static int hf_pfcp_user_plane_node_management_information_container;
870
871
static int hf_pfcp_number_of_ue_ip_addresses_b1_ipv6;
872
static int hf_pfcp_number_of_ue_ip_addresses_b0_ipv4;
873
static int hf_pfcp_number_of_ue_ip_addresses_ipv6;
874
static int hf_pfcp_number_of_ue_ip_addresses_ipv4;
875
876
static int hf_pfcp_validity_timer;
877
878
static int hf_pfcp_rattype;
879
880
static int hf_pfcp_l2tp_user_authentication_proxy_authen_type_value;
881
static int hf_pfcp_l2tp_user_authentication_b3_pai;
882
static int hf_pfcp_l2tp_user_authentication_b2_par;
883
static int hf_pfcp_l2tp_user_authentication_b1_pac;
884
static int hf_pfcp_l2tp_user_authentication_b0_pan;
885
static int hf_pfcp_l2tp_user_authentication_proxy_authen_name_len;
886
static int hf_pfcp_l2tp_user_authentication_proxy_authen_name;
887
static int hf_pfcp_l2tp_user_authentication_proxy_authen_challenge_len;
888
static int hf_pfcp_l2tp_user_authentication_proxy_authen_challenge;
889
static int hf_pfcp_l2tp_user_authentication_proxy_authen_response_len;
890
static int hf_pfcp_l2tp_user_authentication_proxy_authen_response;
891
static int hf_pfcp_l2tp_user_authentication_proxy_authen_id;
892
893
static int hf_pfcp_lns_address_ipv4;
894
static int hf_pfcp_lns_address_ipv6;
895
896
static int hf_pfcp_tunnel_preference_value;
897
898
static int hf_pfcp_calling_number_value;
899
static int hf_pfcp_called_number_value;
900
901
static int hf_pfcp_l2tp_session_indications_o5_b2_rensa;
902
static int hf_pfcp_l2tp_session_indications_o5_b1_redsa;
903
static int hf_pfcp_l2tp_session_indications_o5_b0_reuia;
904
905
static int hf_pfcp_maximum_receive_unit;
906
907
static int hf_pfcp_thresholds_flags_b1_plr;
908
static int hf_pfcp_thresholds_flags_b0_rtt;
909
static int hf_pfcp_thresholds_rtt;
910
static int hf_pfcp_thresholds_plr;
911
912
static int hf_pfcp_l2tp_steering_mode_indications_o5_b1_ueai;
913
static int hf_pfcp_l2tp_steering_mode_indications_o5_b0_albi;
914
915
static int hf_pfcp_group_id;
916
917
static int hf_pfcp_cp_ip_address_ipv4;
918
static int hf_pfcp_cp_ip_address_ipv6;
919
920
static int hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4;
921
static int hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6;
922
static int hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn;
923
static int hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4;
924
static int hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6;
925
static int hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn;
926
static int hf_pfcp_ip_address_and_port_number_replacement_flag_b6_umn6rs;
927
static int hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4;
928
static int hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6;
929
static int hf_pfcp_ip_address_and_port_number_replacement_destination_port;
930
static int hf_pfcp_ip_address_and_port_number_replacement_source_ipv4;
931
static int hf_pfcp_ip_address_and_port_number_replacement_source_ipv6;
932
static int hf_pfcp_ip_address_and_port_number_replacement_source_port;
933
934
static int hf_pfcp_dns_query_filter_pattern_len;
935
static int hf_pfcp_dns_query_filter_pattern;
936
937
static int hf_pfcp_event_notification_uri;
938
939
static int hf_pfcp_notification_correlation_id;
940
941
static int hf_pfcp_reporting_flags_o5_b0_dupl;
942
943
static int hf_pfcp_mbs_session_identifier_flag_b0_tmgi;
944
static int hf_pfcp_mbs_session_identifier_flag_b1_ssmi;
945
static int hf_pfcp_mbs_session_identifier_flag_b2_nidi;
946
static int hf_pfcp_mbs_session_identifier_tmgi;
947
static int hf_pfcp_mbs_session_identifier_nidi;
948
static int hf_pfcp_mbs_session_identifier_source_address_type;
949
static int hf_pfcp_mbs_session_identifier_source_address_length;
950
static int hf_pfcp_mbs_session_identifier_source_address_ipv4;
951
static int hf_pfcp_mbs_session_identifier_source_address_ipv6;
952
953
static int hf_pfcp_multicast_transport_information_endpoint_identifier;
954
static int hf_pfcp_multicast_transport_information_distribution_address_type;
955
static int hf_pfcp_multicast_transport_information_distribution_address_length;
956
static int hf_pfcp_multicast_transport_information_distribution_address_ipv4;
957
static int hf_pfcp_multicast_transport_information_distribution_address_ipv6;
958
static int hf_pfcp_multicast_transport_information_source_address_type;
959
static int hf_pfcp_multicast_transport_information_source_address_length;
960
static int hf_pfcp_multicast_transport_information_source_address_ipv4;
961
static int hf_pfcp_multicast_transport_information_source_address_ipv6;
962
963
static int hf_pfcp_mbsn4mbreq_flags_o5_b2_mbs_resti;
964
static int hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm;
965
static int hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm;
966
967
static int hf_pfcp_local_ingress_tunnel_flags_b2_ch;
968
static int hf_pfcp_local_ingress_tunnel_flags_b1_v6;
969
static int hf_pfcp_local_ingress_tunnel_flags_b0_v4;
970
static int hf_pfcp_local_ingress_tunnel_udp_port;
971
static int hf_pfcp_local_ingress_tunnel_ipv4;
972
static int hf_pfcp_local_ingress_tunnel_ipv6;
973
974
static int hf_pfcp_mbs_unicast_parameters_id;
975
976
static int hf_pfcp_mbsn4resp_flags_o5_b2_n19dtr;
977
static int hf_pfcp_mbsn4resp_flags_o5_b1_jmti;
978
static int hf_pfcp_mbsn4resp_flags_o5_b0_nn19dt;
979
980
static int hf_pfcp_tunnel_password_value;
981
982
static int hf_pfcp_area_session_id_value;
983
984
static int hf_pfcp_dscp_to_ppi_mapping_info_ppi_value;
985
static int hf_pfcp_dscp_to_ppi_mapping_info_dscp_value;
986
987
static int hf_pfcp_pfcpsdrsp_flags_b0_puru;
988
989
static int hf_pfcp_qer_indications_flags_b5_tnbmi;
990
static int hf_pfcp_qer_indications_flags_b4_dbsmi;
991
static int hf_pfcp_qer_indications_flags_b3_pdusm;
992
static int hf_pfcp_qer_indications_flags_b2_eml4s;
993
static int hf_pfcp_qer_indications_flags_b1_edbmi;
994
static int hf_pfcp_qer_indications_flags_b0_iqfis;
995
996
static int hf_pfcp_configured_time_domain_flags_b0_ctdi;
997
998
static int hf_pfcp_metadata;
999
static int hf_pfcp_metadata_binary_metadata;
1000
1001
static int hf_pfcp_traffic_parameter_threshold_flags_b0_dl;
1002
static int hf_pfcp_traffic_parameter_threshold_downlink_n6_jitter_threshold;
1003
1004
static int hf_pfcp_dl_periodicity_value;
1005
1006
static int hf_pfcp_n6_jitter_measurement_flags_b0_dl;
1007
static int hf_pfcp_n6_jitter_measurement_dl_periodicity;
1008
static int hf_pfcp_n6_jitter_measurement_lower_dl_jitter_measurement;
1009
static int hf_pfcp_n6_jitter_measurement_higher_dl_jitter_measurement;
1010
1011
1012
static int hf_pfcp_traffic_parameter_measurement_indication_flags_b2_n6jmi;
1013
static int hf_pfcp_traffic_parameter_measurement_indication_flags_b1_dlpmi;
1014
static int hf_pfcp_traffic_parameter_measurement_indication_flags_b0_ulpmi;
1015
1016
static int hf_pfcp_ul_periodicity_value;
1017
1018
static int hf_pfcp_mpquic_control_information_flags_b0_cupd;
1019
static int hf_pfcp_mpquic_control_information_flags_b1_cip;
1020
static int hf_pfcp_mpquic_control_information_flags_b2_ceth;
1021
1022
static int hf_pfcp_mpquic_address_information_flags_b1_v6;
1023
static int hf_pfcp_mpquic_address_information_flags_b0_v4;
1024
static int hf_pfcp_mpquic_address_information_type;
1025
static int hf_pfcp_mpquic_address_information_port;
1026
static int hf_pfcp_mpquic_address_information_address_ipv4;
1027
static int hf_pfcp_mpquic_address_information_address_ipv6;
1028
1029
static int hf_pfcp_transport_mode_value;
1030
1031
static int hf_pfcp_protocol_description_flags_b2_srtp;
1032
static int hf_pfcp_protocol_description_flags_b1_rtp;
1033
static int hf_pfcp_protocol_description_flags_b0_h264;
1034
1035
static int hf_pfcp_reporting_suggestion_info_reporting_urgency_value;
1036
static int hf_pfcp_reporting_suggestion_info_reporting_time_info;
1037
1038
static int hf_pfcp_tl_container;
1039
1040
static int hf_pfcp_measurement_indication_flags_b0_dqfi;
1041
1042
static int hf_pfcp_hplmn_s_nssai_sst;
1043
static int hf_pfcp_hplmn_s_nssai_sd;
1044
1045
static int hf_pfcp_media_transport_protocol;
1046
1047
static int hf_pfcp_rtp_header_extension_type;
1048
1049
static int hf_pfcp_rtp_header_extension_id;
1050
1051
static int hf_pfcp_rtp_payload_type;
1052
1053
static int hf_pfcp_rtp_payload_format;
1054
1055
static int hf_pfcp_extended_dl_buffering_notification_policy_flags_b0_edbn;
1056
1057
static int hf_pfcp_mt_sdt_control_information_flags_b0_rdsi;
1058
1059
static int hf_pfcp_reporting_thresholds_flags_b3_uldr;
1060
static int hf_pfcp_reporting_thresholds_flags_b2_dldr;
1061
static int hf_pfcp_reporting_thresholds_flags_b1_ulci;
1062
static int hf_pfcp_reporting_thresholds_flags_b0_dlci;
1063
static int hf_pfcp_reporting_thresholds_dl_congestion_information_threshold;
1064
static int hf_pfcp_reporting_thresholds_ul_congestion_information_threshold;
1065
static int hf_pfcp_reporting_thresholds_dl_data_rate_threshold;
1066
static int hf_pfcp_reporting_thresholds_ul_data_rate_threshold;
1067
1068
static int hf_pfcp_rtp_header_extension_additional_information_flags_b2_npdsi;
1069
static int hf_pfcp_rtp_header_extension_additional_information_flags_b1_pssai;
1070
static int hf_pfcp_rtp_header_extension_additional_information_flags_b0_fi;
1071
static int hf_pfcp_rtp_header_extension_additional_information_pssa;
1072
static int hf_pfcp_rtp_header_extension_additional_information_format;
1073
1074
static int hf_pfcp_mapped_n6_ip_address_b0_chv4;
1075
static int hf_pfcp_mapped_n6_ip_address_b1_v4;
1076
static int hf_pfcp_mapped_n6_ip_address_ipv4;
1077
1078
static int hf_pfcp_n6_routing_information_flag_b0_sipv4;
1079
static int hf_pfcp_n6_routing_information_flag_b1_sipv6;
1080
static int hf_pfcp_n6_routing_information_flag_b2_spo;
1081
static int hf_pfcp_n6_routing_information_flag_b3_dipv4;
1082
static int hf_pfcp_n6_routing_information_flag_b4_dipv6;
1083
static int hf_pfcp_n6_routing_information_flag_b5_dpo;
1084
static int hf_pfcp_n6_routing_information_source_ipv4;
1085
static int hf_pfcp_n6_routing_information_source_ipv6;
1086
static int hf_pfcp_n6_routing_information_source_port;
1087
static int hf_pfcp_n6_routing_information_destination_ipv4;
1088
static int hf_pfcp_n6_routing_information_destination_ipv6;
1089
static int hf_pfcp_n6_routing_information_destination_port;
1090
1091
static int hf_pfcp_uri;
1092
1093
static int hf_pfcp_ue_level_measurements_configuration_job_type;
1094
static int hf_pfcp_ue_level_measurements_configuration_number_of_measurement;
1095
static int hf_pfcp_ue_level_measurements_configuration_measurement_type;
1096
static int hf_pfcp_ue_level_measurements_configuration_time_period;
1097
1098
static int hf_pfcp_n6_delay_measurement_protocols_b0_twamp;
1099
static int hf_pfcp_n6_delay_measurement_protocols_b1_owamp;
1100
static int hf_pfcp_n6_delay_measurement_protocols_b2_stamp;
1101
static int hf_pfcp_n6_delay_measurement_protocols_b3_other;
1102
1103
static int hf_pfcp_n6_delay_measurement_information_b0_mind;
1104
static int hf_pfcp_n6_delay_measurement_information_b1_maxd;
1105
static int hf_pfcp_n6_delay_measurement_information_avg_delay;
1106
static int hf_pfcp_n6_delay_measurement_information_min_delay;
1107
static int hf_pfcp_n6_delay_measurement_information_max_delay;
1108
1109
static int hf_pfcp_measurement_endpoint_address_b0_v4;
1110
static int hf_pfcp_measurement_endpoint_address_b1_v6;
1111
static int hf_pfcp_measurement_endpoint_address_ipv4;
1112
static int hf_pfcp_measurement_endpoint_address_ipv6;
1113
1114
static int hf_pfcp_operator_configurable_upf_capability;
1115
1116
static int hf_pfcp_packet_inspection_functionality_b0_ipbd;
1117
static int hf_pfcp_packet_inspection_functionality_b1_macd;
1118
static int hf_pfcp_packet_inspection_functionality_b2_dpid;
1119
1120
static int hf_pfcp_header_detection_reference;
1121
1122
static int hf_pfcp_header_detection_support_information;
1123
1124
static int hf_pfcp_reporting_endpoint_id;
1125
1126
static int hf_pfcp_header_handling_control_reference;
1127
1128
static int hf_pfcp_header_handling_action;
1129
1130
static int hf_pfcp_header_information;
1131
1132
static int hf_pfcp_header_value;
1133
1134
static int hf_pfcp_header_handling_condition;
1135
1136
static int hf_pfcp_header_handling_control_id;
1137
1138
static int hf_pfcp_header_handling_control_rule_id;
1139
1140
static int hf_pfcp_on_path_n6_connection_information_flags_b3_v4;
1141
static int hf_pfcp_on_path_n6_connection_information_flags_b4_v6;
1142
static int hf_pfcp_on_path_n6_connection_information_flags_b5_pn;
1143
static int hf_pfcp_on_path_n6_connection_information_signaling_method;
1144
static int hf_pfcp_on_path_n6_connection_information_ipv4;
1145
static int hf_pfcp_on_path_n6_connection_information_ipv6;
1146
static int hf_pfcp_on_path_n6_connection_information_port;
1147
1148
static int hf_pfcp_measurement_reporting_type_b0_per;
1149
static int hf_pfcp_measurement_reporting_type_b1_evt;
1150
static int hf_pfcp_measurement_reporting_type_b2_ire;
1151
1152
static int hf_pfcp_n6_delay_measurement_failure_cause;
1153
1154
static int hf_pfcp_n6_delay_measurement_control_information_id;
1155
1156
static int hf_pfcp_measurement_endpoint_port_number;
1157
1158
static int hf_pfcp_header_handling_reporting_indication_b0_otri;
1159
1160
static int hf_pfcp_smf_change_reason_b0_mpsnr;
1161
static int hf_pfcp_smf_change_reason_b1_mpssf;
1162
static int hf_pfcp_smf_change_reason_b2_mpsai;
1163
1164
static int hf_pfcp_pdu_set_importance_psi0_7;
1165
static int hf_pfcp_pdu_set_importance_psi8_15;
1166
1167
static int hf_pfcp_moq_control_information_b0_mqrei;
1168
static int hf_pfcp_moq_control_information_b1_mqrai;
1169
1170
static int hf_pfcp_moq_relay_ip_address_flags_b0_v6;
1171
static int hf_pfcp_moq_relay_ip_address_flags_b1_v4;
1172
static int hf_pfcp_moq_relay_ip_address_ipv4;
1173
static int hf_pfcp_moq_relay_ip_address_ipv6;
1174
1175
static int hf_pfcp_media_related_information_transfer_info;
1176
1177
static int hf_pfcp_reporting_control_information_b0_uelm;
1178
1179
static int hf_pfcp_security_mode_stamp_b0_intp;
1180
static int hf_pfcp_security_mode_stamp_b1_conp;
1181
1182
static int hf_pfcp_hmac_key_stamp;
1183
1184
static int hf_pfcp_security_mode_owamp_or_twamp;
1185
1186
static int hf_pfcp_key_id_and_shared_secret_key_id_length;
1187
static int hf_pfcp_key_id_and_shared_secret_key_id;
1188
static int hf_pfcp_key_id_and_shared_secret_shared_secret_length;
1189
static int hf_pfcp_key_id_and_shared_secret_shared_secret;
1190
1191
static int hf_pfcp_remaining_data_reporting_indication;
1192
1193
static int hf_pfcp_expedited_transfer_indication_b0_true;
1194
static int hf_pfcp_expedited_transfer_indication_b1_false;
1195
1196
static int hf_pfcp_session_reflector_mode_stamp_b0_srm;
1197
1198
static int hf_pfcp_transport_level_marking_indications_b0_tlmip;
1199
1200
static int hf_pfcp_binding_indication;
1201
1202
static int hf_pfcp_pdu_set_importance_for_n6_unmarked_pdus_spare;
1203
static int hf_pfcp_pdu_set_importance_for_n6_unmarked_pdus_psi_value;
1204
1205
/* Enterprise IEs */
1206
/* BBF */
1207
static int hf_pfcp_bbf_up_function_features_o7_b7_nat_up;
1208
static int hf_pfcp_bbf_up_function_features_o7_b6_nat_cp;
1209
static int hf_pfcp_bbf_up_function_features_o7_b5_iptv;
1210
static int hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload;
1211
static int hf_pfcp_bbf_up_function_features_o7_b3_lns;
1212
static int hf_pfcp_bbf_up_function_features_o7_b2_lac;
1213
static int hf_pfcp_bbf_up_function_features_o7_b1_ipoe;
1214
static int hf_pfcp_bbf_up_function_features_o7_b0_pppoe;
1215
1216
static int hf_pfcp_bbf_logical_port_id;
1217
static int hf_pfcp_bbf_logical_port_id_str;
1218
1219
1220
static int hf_pfcp_bbf_outer_hdr_creation_desc_spare;
1221
static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b4_ppp;
1222
static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b3_l2tp;
1223
static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b2_traffic_endpoint;
1224
static int hf_pfcp_bbf_outer_hdr_creation_desc_o7_b1_crp_nsh;
1225
static int hf_pfcp_bbf_outer_hdr_creation_tunnel_id;
1226
static int hf_pfcp_bbf_outer_hdr_creation_session_id;
1227
1228
static int hf_pfcp_bbf_out_hdr_desc;
1229
1230
static int hf_pfcp_bbf_pppoe_session_id;
1231
1232
static int hf_pfcp_bbf_ppp_protocol_flags;
1233
static int hf_pfcp_bbf_ppp_protocol_b2_control;
1234
static int hf_pfcp_bbf_ppp_protocol_b1_data;
1235
static int hf_pfcp_bbf_ppp_protocol_b0_specific;
1236
static int hf_pfcp_bbf_ppp_protocol;
1237
1238
static int hf_pfcp_bbf_verification_timer_interval;
1239
static int hf_pfcp_bbf_verification_timer_count;
1240
1241
static int hf_pfcp_bbf_ppp_lcp_magic_number_tx;
1242
static int hf_pfcp_bbf_ppp_lcp_magic_number_rx;
1243
1244
static int hf_pfcp_bbf_mtu;
1245
1246
static int hf_pfcp_bbf_l2tp_endp_flags;
1247
static int hf_pfcp_bbf_l2tp_endp_flags_b2_ch;
1248
static int hf_pfcp_bbf_l2tp_endp_flags_b1_v6;
1249
static int hf_pfcp_bbf_l2tp_endp_flags_b0_v4;
1250
static int hf_pfcp_bbf_l2tp_endp_id_tunnel_id;
1251
static int hf_pfcp_bbf_l2tp_endp_id_ipv4;
1252
static int hf_pfcp_bbf_l2tp_endp_id_ipv6;
1253
1254
static int hf_pfcp_bbf_l2tp_session_id;
1255
1256
static int hf_pfcp_bbf_l2tp_type_flags;
1257
static int hf_pfcp_bbf_l2tp_type_flags_b0_t;
1258
1259
static int hf_pfcp_bbf_multicast_flags_o7_b1_routeralertoff;
1260
static int hf_pfcp_bbf_multicast_flags_o7_b0_fastleave;
1261
1262
static int hf_pfcp_bbf_multicast_query_param_robustness;
1263
static int hf_pfcp_bbf_multicast_query_param_query_interval;
1264
static int hf_pfcp_bbf_multicast_query_param_query_response_interval;
1265
static int hf_pfcp_bbf_multicast_query_param_group_query_interval;
1266
1267
static int hf_pfcp_bbf_multicast_group_limit_max_joins;
1268
1269
static int hf_pfcp_bbf_apply_action_flags_b0_nat;
1270
1271
static int hf_pfcp_bbf_nat_external_port_range_start;
1272
static int hf_pfcp_bbf_nat_external_port_range_end;
1273
1274
static int hf_pfcp_bbf_nat_port_forward;
1275
static int hf_pfcp_bbf_nat_port_forward_inside_ip;
1276
static int hf_pfcp_bbf_nat_port_forward_inside_port;
1277
static int hf_pfcp_bbf_nat_port_forward_outside_port;
1278
static int hf_pfcp_bbf_nat_port_forward_protocol;
1279
1280
static int hf_pfcp_bbf_reporting_trigger;
1281
1282
static int hf_pfcp_bbf_dynamic_nat_block_port_range_start_port;
1283
static int hf_pfcp_bbf_dynamic_nat_block_port_range_end_port;
1284
1285
static int hf_pfcp_bbf_event_time_stamp;
1286
1287
static int hf_pfcp_bbf_direction;
1288
static int hf_pfcp_bbf_family;
1289
static int hf_pfcp_bbf_sgrp_identifier;
1290
static int hf_pfcp_bbf_sgrp_state;
1291
static int hf_pfcp_bbf_sgrp_flags;
1292
static int hf_pfcp_bbf_sgrp_flags_b0_ras;
1293
static int hf_pfcp_bbf_sgrp_flags_b1_psa;
1294
static int hf_pfcp_bbf_operational_condition;
1295
static int hf_pfcp_bbf_ipv4_prefix;
1296
static int hf_pfcp_bbf_ipv4_prefix_length;
1297
static int hf_pfcp_bbf_ipv6_prefix;
1298
static int hf_pfcp_bbf_ipv6_prefix_length;
1299
static int hf_pfcp_bbf_prefix_tag_usage;
1300
static int hf_pfcp_bbf_prefix_tag;
1301
static int hf_pfcp_bbf_error_code;
1302
static int hf_pfcp_bbf_error_message;
1303
static int hf_pfcp_bbf_maximum_acl_chain_length;
1304
static int hf_pfcp_bbf_forwarding_capability;
1305
static int hf_pfcp_bbf_connectivity_status;
1306
static int hf_pfcp_bbf_vendor_specific_node_report_type;
1307
static int hf_pfcp_bbf_vendor_specific_node_report_type_b0_lpr;
1308
static int hf_pfcp_bbf_vendor_specific_node_report_type_b1_sgr;
1309
static int hf_pfcp_bbf_vendor_specific_node_report_type_b2_nir;
1310
static int hf_pfcp_bbf_ctag_range_start;
1311
static int hf_pfcp_bbf_ctag_range_end;
1312
static int hf_pfcp_bbf_stag_range_start;
1313
static int hf_pfcp_bbf_stag_range_end;
1314
1315
/* Travelping */
1316
static int hf_pfcp_enterprise_travelping_packet_measurement;
1317
static int hf_pfcp_enterprise_travelping_packet_measurement_b2_dlnop;
1318
static int hf_pfcp_enterprise_travelping_packet_measurement_b1_ulnop;
1319
static int hf_pfcp_enterprise_travelping_packet_measurement_b0_tonop;
1320
static int hf_pfcp_travelping_pkt_meas_tonop;
1321
static int hf_pfcp_travelping_pkt_meas_ulnop;
1322
static int hf_pfcp_travelping_pkt_meas_dlnop;
1323
1324
static int hf_pfcp_travelping_build_id;
1325
static int hf_pfcp_travelping_build_id_str;
1326
static int hf_pfcp_travelping_now;
1327
static int hf_pfcp_travelping_error_message;
1328
static int hf_pfcp_travelping_error_message_str;
1329
static int hf_pfcp_travelping_file_name;
1330
static int hf_pfcp_travelping_file_name_str;
1331
static int hf_pfcp_travelping_line_number;
1332
static int hf_pfcp_travelping_ipfix_policy;
1333
static int hf_pfcp_travelping_ipfix_policy_str;
1334
static int hf_pfcp_travelping_trace_parent;
1335
static int hf_pfcp_travelping_trace_parent_str;
1336
static int hf_pfcp_travelping_trace_state;
1337
static int hf_pfcp_travelping_trace_state_str;
1338
1339
/* Juniper Networks */
1340
1341
static int hf_pfcp_jnpr_cp_id_opaque_string;
1342
static int hf_pfcp_jnpr_filter_length;
1343
static int hf_pfcp_jnpr_filter_data;
1344
static int hf_pfcp_jnpr_filter_service_info_len;
1345
static int hf_pfcp_jnpr_filter_service_info_data;
1346
static int hf_pfcp_jnpr_sgrp_name;
1347
static int hf_pfcp_jnpr_logical_port_address;
1348
static int hf_pfcp_jnpr_compute_limit_exceeded;
1349
static int hf_pfcp_jnpr_final_stats;
1350
static int hf_pfcp_jnpr_error_event_id;
1351
static int hf_pfcp_jnpr_error_event_len;
1352
static int hf_pfcp_jnpr_error_event_desc;
1353
static int hf_pfcp_jnpr_mcast_flags;
1354
static int hf_pfcp_jnpr_mcast_group_threshold;
1355
static int hf_pfcp_jnpr_src_ip_ie_group;
1356
static int hf_pfcp_jnpr_nested_ie_type;
1357
static int hf_pfcp_jnpr_nested_ie_len;
1358
static int hf_pfcp_jnpr_source_ip_spare;
1359
static int hf_pfcp_jnpr_source_ip;
1360
static int hf_pfcp_jnpr_hi_prio_port;
1361
static int hf_pfcp_jnpr_med_hi_prio_port;
1362
static int hf_pfcp_jnpr_med_prio_port;
1363
static int hf_pfcp_jnpr_med_low_prio_port;
1364
static int hf_pfcp_jnpr_low_prio_port;
1365
static int hf_pfcp_jnpr_accounting_port;
1366
static int hf_pfcp_jnpr_session_port;
1367
static int hf_pfcp_jnpr_cos_fwd_len;
1368
static int hf_pfcp_jnpr_cos_fwd_data;
1369
static int hf_pfcp_jnpr_delete_flag;
1370
static int hf_pfcp_jnpr_ih_flag;
1371
static int hf_pfcp_jnpr_max_hierarchy_levels;
1372
static int hf_pfcp_jnpr_li_source_port;
1373
static int hf_pfcp_jnpr_li_service_id;
1374
static int hf_pfcp_jnpr_li_md_header;
1375
static int hf_pfcp_jnpr_operation_type;
1376
static int hf_pfcp_jnpr_address_qualifier;
1377
static int hf_pfcp_jnpr_addr_primary;
1378
static int hf_pfcp_jnpr_addr_preferred;
1379
static int hf_pfcp_jnpr_targeted_distribution_weight;
1380
static int hf_pfcp_jnpr_l2tp_flag;
1381
static int hf_pfcp_jnpr_l2tp_tunnel_id;
1382
static int hf_pfcp_jnpr_l2tp_src_port;
1383
static int hf_pfcp_jnpr_l2tp_dst_port;
1384
static int hf_pfcp_jnpr_l2tp_tos_reflect;
1385
static int hf_pfcp_jnpr_l2tp_is_lns;
1386
static int hf_pfcp_jnpr_l2tp_ipv4;
1387
static int hf_pfcp_jnpr_l2tp_tunnel_index;
1388
1389
static const value_string final_stats[] = {
1390
    { 0, "Do not send final stats" },
1391
    { 1, "Send final stats" },
1392
    { 0, NULL }
1393
};
1394
1395
static const value_string mcast_flags_vals[] = {
1396
    { 0x01, "Distributed" },
1397
    { 0x02, "Centralized" },
1398
    { 0x04, "Promiscuous" },
1399
    { 0x08, "Passive Allow Receive" },
1400
    { 0x10, "Passive Send General Query" },
1401
    { 0x20, "Passive Send Group Query" },
1402
    { 0, NULL }
1403
};
1404
1405
static const value_string op_type_vals[] = {
1406
    { 1, "Add" },
1407
    { 2, "Delete" },
1408
    { 4, "Modify" },
1409
    { 0, "None" },
1410
    { 0, NULL }
1411
};
1412
1413
/* Nokia */
1414
1415
static int hf_pfcp_nokia_sap_template;
1416
static int hf_pfcp_nokia_group_iface_template;
1417
static int hf_pfcp_nokia_session_state_id;
1418
static int hf_pfcp_nokia_detailed_stats_key;
1419
static int hf_pfcp_nokia_detailed_stats_key_direction;
1420
static int hf_pfcp_nokia_detailed_stats_key_object_id;
1421
static int hf_pfcp_nokia_detailed_stats_key_stat_mode;
1422
static int hf_pfcp_nokia_detailed_stats_key_type;
1423
static int hf_pfcp_nokia_detailed_stats_bitmap_item;
1424
static int hf_pfcp_nokia_detailed_stats_octets;
1425
static int hf_pfcp_nokia_detailed_error;
1426
static int hf_pfcp_nokia_qos_override;
1427
static int hf_pfcp_nokia_measurement_info;
1428
static int hf_pfcp_nokia_measurement_info_b0_det;
1429
static int hf_pfcp_nokia_pfcpsmreq_flags;
1430
static int hf_pfcp_nokia_pfcpsmreq_flags_b0_abs;
1431
static int hf_pfcp_nokia_pfcpsmreq_flags_b1_audit;
1432
static int hf_pfcp_nokia_cp_function_features_assoc_audit;
1433
static int hf_pfcp_nokia_cp_function_features_imm_l2_access_id_report;
1434
static int hf_pfcp_nokia_cp_function_features_cmag_c;
1435
static int hf_pfcp_nokia_up_function_features_bulk_audit;
1436
static int hf_pfcp_nokia_up_function_features_sssg;
1437
static int hf_pfcp_nokia_filter_override_type;
1438
static int hf_pfcp_nokia_filter_override_name;
1439
static int hf_pfcp_nokia_intermediate_destination;
1440
static int hf_pfcp_nokia_nat_isa_members;
1441
static int hf_pfcp_nokia_pfcphb_flags;
1442
static int hf_pfcp_nokia_pfcphb_flags_b0_aud_r;
1443
static int hf_pfcp_nokia_pfcphb_flags_b1_aud_s;
1444
static int hf_pfcp_nokia_pfcphb_flags_b2_aud_e;
1445
static int hf_pfcp_nokia_l2tp_lcp_request;
1446
static int hf_pfcp_nokia_l2tp_auth_type;
1447
static int hf_pfcp_nokia_l2tp_auth_name;
1448
static int hf_pfcp_nokia_l2tp_auth_id;
1449
static int hf_pfcp_nokia_l2tp_auth_challenge;
1450
static int hf_pfcp_nokia_l2tp_auth_response;
1451
static int hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address;
1452
static int hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address;
1453
static int hf_pfcp_nokia_l2tp_client_auth_id;
1454
static int hf_pfcp_nokia_l2tp_server_auth_id;
1455
static int hf_pfcp_nokia_l2tp_password;
1456
static int hf_pfcp_nokia_l2tp_assignment_id;
1457
static int hf_pfcp_nokia_l2tp_private_group_id;
1458
static int hf_pfcp_nokia_l2tp_tunnel_params_flags;
1459
static int hf_pfcp_nokia_l2tp_params_flags_b31_hello_interval;
1460
static int hf_pfcp_nokia_l2tp_params_flags_b30_idle_timeout;
1461
static int hf_pfcp_nokia_l2tp_params_flags_b29_session_limit;
1462
static int hf_pfcp_nokia_l2tp_params_flags_b28_preference;
1463
static int hf_pfcp_nokia_l2tp_params_flags_b27_df_bit;
1464
static int hf_pfcp_nokia_l2tp_params_flags_b26_challenge;
1465
static int hf_pfcp_nokia_l2tp_params_flags_b25_avp_hiding;
1466
static int hf_pfcp_nokia_l2tp_params_flags_b24_algorithm;
1467
static int hf_pfcp_nokia_l2tp_params_flags_b19_rx_window_size;
1468
static int hf_pfcp_nokia_l2tp_params_flags_b18_max_retries_not_estab;
1469
static int hf_pfcp_nokia_l2tp_params_flags_b17_max_retries_estab;
1470
static int hf_pfcp_nokia_l2tp_params_flags_b16_destruct_timeout;
1471
static int hf_pfcp_nokia_l2tp_params_hello_interval;
1472
static int hf_pfcp_nokia_l2tp_params_idle_timeout;
1473
static int hf_pfcp_nokia_l2tp_params_session_limit;
1474
static int hf_pfcp_nokia_l2tp_params_preference;
1475
static int hf_pfcp_nokia_l2tp_params_df_bit;
1476
static int hf_pfcp_nokia_l2tp_params_challenge;
1477
static int hf_pfcp_nokia_l2tp_params_avp_hiding;
1478
static int hf_pfcp_nokia_l2tp_params_algorithm;
1479
static int hf_pfcp_nokia_l2tp_params_rx_window_size;
1480
static int hf_pfcp_nokia_l2tp_params_max_retries_not_estab;
1481
static int hf_pfcp_nokia_l2tp_params_max_retries_estab;
1482
static int hf_pfcp_nokia_l2tp_params_destruct_timeout;
1483
static int hf_pfcp_nokia_l2tp_local_tunnel_id;
1484
static int hf_pfcp_nokia_l2tp_remote_tunnel_id;
1485
static int hf_pfcp_nokia_l2tp_local_session_id;
1486
static int hf_pfcp_nokia_l2tp_remote_session_id;
1487
static int hf_pfcp_nokia_l2tp_call_serial_num;
1488
static int hf_pfcp_nokia_snat_inside_ipv4_address;
1489
static int hf_pfcp_nokia_access_line_circuit_id;
1490
static int hf_pfcp_nokia_access_line_remote_id;
1491
static int hf_pfcp_nokia_access_line_params_flags;
1492
static int hf_pfcp_nokia_access_line_params_flags_b24_act_up;
1493
static int hf_pfcp_nokia_access_line_params_flags_b25_act_down;
1494
static int hf_pfcp_nokia_access_line_params_flags_b26_min_up;
1495
static int hf_pfcp_nokia_access_line_params_flags_b27_min_down;
1496
static int hf_pfcp_nokia_access_line_params_flags_b28_att_up;
1497
static int hf_pfcp_nokia_access_line_params_flags_b29_att_down;
1498
static int hf_pfcp_nokia_access_line_params_flags_b30_max_up;
1499
static int hf_pfcp_nokia_access_line_params_flags_b31_max_down;
1500
static int hf_pfcp_nokia_access_line_params_flags_b16_min_up_lp;
1501
static int hf_pfcp_nokia_access_line_params_flags_b17_min_down_lp;
1502
static int hf_pfcp_nokia_access_line_params_flags_b18_max_inter_delay_up;
1503
static int hf_pfcp_nokia_access_line_params_flags_b19_act_inter_delay_up;
1504
static int hf_pfcp_nokia_access_line_params_flags_b20_max_inter_delay_down;
1505
static int hf_pfcp_nokia_access_line_params_flags_b21_act_inter_delay_down;
1506
static int hf_pfcp_nokia_access_line_params_flags_b22_access_loop_encap;
1507
static int hf_pfcp_nokia_access_line_params_flags_b23_iw_session;
1508
static int hf_pfcp_nokia_access_line_params_act_up;
1509
static int hf_pfcp_nokia_access_line_params_act_down;
1510
static int hf_pfcp_nokia_access_line_params_min_up;
1511
static int hf_pfcp_nokia_access_line_params_min_down;
1512
static int hf_pfcp_nokia_access_line_params_att_up;
1513
static int hf_pfcp_nokia_access_line_params_att_down;
1514
static int hf_pfcp_nokia_access_line_params_max_up;
1515
static int hf_pfcp_nokia_access_line_params_max_down;
1516
static int hf_pfcp_nokia_access_line_params_min_up_lp;
1517
static int hf_pfcp_nokia_access_line_params_min_down_lp;
1518
static int hf_pfcp_nokia_access_line_params_max_inter_delay_up;
1519
static int hf_pfcp_nokia_access_line_params_act_inter_delay_up;
1520
static int hf_pfcp_nokia_access_line_params_max_inter_delay_down;
1521
static int hf_pfcp_nokia_access_line_params_act_inter_delay_down;
1522
static int hf_pfcp_nokia_access_line_params_access_loop_encap;
1523
static int hf_pfcp_nokia_acct_session_id;
1524
static int hf_pfcp_nokia_fsg_template_name;
1525
static int hf_pfcp_nokia_up_profile;
1526
static int hf_pfcp_nokia_default_qos_id;
1527
static int hf_pfcp_nokia_serving_node_id_flags;
1528
static int hf_pfcp_nokia_serving_node_id_flg_b2_uuid;
1529
static int hf_pfcp_nokia_serving_node_id_flg_b1_v6;
1530
static int hf_pfcp_nokia_serving_node_id_flg_b0_v4;
1531
static int hf_pfcp_nokia_serving_node_id_ipv4;
1532
static int hf_pfcp_nokia_serving_node_id_ipv6;
1533
static int hf_pfcp_nokia_serving_node_id_uuid;
1534
static int hf_pfcp_nokia_pcc_rule_name;
1535
static int hf_pfcp_nokia_calltrace_profile;
1536
static int hf_pfcp_nokia_custom_charging_group;
1537
static int hf_pfcp_nokia_lpt_present_b0;
1538
static int hf_pfcp_nokia_content_filtering_policy_id;
1539
static int hf_pfcp_nokia_dropped_volume_measurement;
1540
static int hf_pfcp_nokia_dropped_volume_measurement_b0_tovol;
1541
static int hf_pfcp_nokia_dropped_volume_measurement_b1_ulvol;
1542
static int hf_pfcp_nokia_dropped_volume_measurement_b2_dlvol;
1543
static int hf_pfcp_nokia_dropped_volume_measurement_b3_tonop;
1544
static int hf_pfcp_nokia_dropped_volume_measurement_b4_ulnop;
1545
static int hf_pfcp_nokia_dropped_volume_measurement_b5_dlnop;
1546
static int hf_pfcp_nokia_drop_vol_meas_tovol;
1547
static int hf_pfcp_nokia_drop_vol_meas_ulvol;
1548
static int hf_pfcp_nokia_drop_vol_meas_dlvol;
1549
static int hf_pfcp_nokia_drop_vol_meas_tonop;
1550
static int hf_pfcp_nokia_drop_vol_meas_ulnop;
1551
static int hf_pfcp_nokia_drop_vol_meas_dlnop;
1552
static int hf_pfcp_nokia_health_report_interval;
1553
static int hf_pfcp_nokia_ipv6_lla;
1554
static int hf_pfcp_nokia_periodic_shcv_duration;
1555
static int hf_pfcp_nokia_periodic_shcv_retry_count;
1556
static int hf_pfcp_nokia_periodic_shcv_timeout;
1557
1558
1559
static int ett_pfcp;
1560
static int ett_pfcp_flags;
1561
static int ett_pfcp_ie;
1562
static int ett_pfcp_unknown_enterprise_ie;
1563
static int ett_pfcp_grouped_ie;
1564
static int ett_pfcp_reporting_triggers;
1565
static int ett_pfcp_up_function_features;
1566
static int ett_pfcp_report_trigger;
1567
static int ett_pfcp_flow_desc;
1568
static int ett_pfcp_tos;
1569
static int ett_pfcp_spi;
1570
static int ett_pfcp_flow_label;
1571
static int ett_pfcp_sdf_filter_id;
1572
static int ett_pfcp_adf;
1573
static int ett_pfcp_aurl;
1574
static int ett_pfcp_adnp;
1575
1576
static int ett_pfcp_enterprise_travelping_packet_measurement;
1577
static int ett_pfcp_enterprise_travelping_error_report;
1578
static int ett_pfcp_enterprise_travelping_created_nat_binding;
1579
static int ett_pfcp_enterprise_travelping_trace_info;
1580
1581
static int ett_pfcp_jnpr;
1582
1583
static int ett_pfcp_bbf_ppp_protocol_flags;
1584
static int ett_pfcp_bbf_l2tp_endp_flags;
1585
static int ett_pfcp_bbf_l2tp_type_flags;
1586
static int ett_pfcp_bbf_ppp_lcp_connectivity;
1587
static int ett_pfcp_bbf_l2tp_tunnel;
1588
static int ett_pfcp_bbf_nat_port_forward_list;
1589
static int ett_pfcp_bbf_sgrp_flags;
1590
static int ett_pfcp_bbf_vendor_specific_node_report_type;
1591
1592
static int ett_pfcp_nokia_detailed_stats_key;
1593
static int ett_pfcp_nokia_detailed_stats_bitmap;
1594
static int ett_pfcp_nokia_measurement_info;
1595
static int ett_pfcp_nokia_pfcpsmreq_flags;
1596
static int ett_pfcp_nokia_pfcphb_flags;
1597
static int ett_pfcp_nokia_l2tp_tunnel_params_flags;
1598
static int ett_pfcp_nokia_access_line_params_flags;
1599
static int ett_pfcp_nokia_serving_node_id_flags;
1600
static int ett_pfcp_nokia_dropped_volume_measurement;
1601
1602
static expert_field ei_pfcp_ie_reserved;
1603
static expert_field ei_pfcp_ie_data_not_decoded;
1604
static expert_field ei_pfcp_ie_not_decoded_null;
1605
static expert_field ei_pfcp_ie_not_decoded_too_large;
1606
static expert_field ei_pfcp_ie_encoding_error;
1607
1608
static int pfcp_tap = -1;
1609
1610
static bool g_pfcp_session;
1611
static unsigned pref_pair_matching_max_interval_ms; /* Default: disable */
1612
1613
static uint32_t pfcp_session_count;
1614
1615
typedef struct pfcp_rule_ids {
1616
    uint32_t far;
1617
    uint32_t pdr;
1618
    uint32_t qer;
1619
    uint32_t urr;
1620
    uint32_t bar;
1621
    uint32_t mar;
1622
    uint32_t srr;
1623
} pfcp_rule_ids_t;
1624
1625
typedef struct pfcp_session_args {
1626
    wmem_list_t *seid_list;
1627
    wmem_list_t *ip_list;
1628
    uint64_t last_seid;
1629
    address last_ip;
1630
    uint8_t last_cause;
1631
    pfcp_rule_ids_t last_rule_ids;
1632
    const char *imsi;
1633
} pfcp_session_args_t;
1634
1635
typedef struct _pfcp_hdr {
1636
    uint8_t message; /* Message type */
1637
    uint16_t length; /* Length of header */
1638
    uint64_t seid;    /* Session End-point ID */
1639
} pfcp_hdr_t;
1640
1641
461
#define PFCP_SEID_INVALID UINT64_MAX
1642
1643
/* Relation between frame -> session */
1644
static wmem_map_t* pfcp_session_table;
1645
1646
/* Relation between session -> IMSI */
1647
static wmem_map_t* pfcp_session_imsi;
1648
1649
/* Relation between <seid,ip> -> frame */
1650
static wmem_map_t* pfcp_frame_map;
1651
1652
1653
typedef struct pfcp_info {
1654
    uint64_t seid;
1655
    address addr;
1656
} pfcp_info_t;
1657
1658
typedef struct _pfcp_sub_dis_t {
1659
    uint8_t message_type;
1660
    pfcp_session_args_t *args;
1661
} pfcp_sub_dis_t;
1662
1663
static dissector_table_t pfcp_enterprise_ies_dissector_table;
1664
1665
static void
1666
dissect_pfcp_ies_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, unsigned offset, uint16_t length, uint8_t message_type, pfcp_session_args_t *args);
1667
1668
static const true_false_string pfcp_id_predef_dynamic_tfs = {
1669
    "Predefined by UP",
1670
    "Dynamic by CP",
1671
};
1672
1673
#define PFCP_MSG_RESERVED_0                                 0
1674
1675
816
#define PFCP_MSG_HEARTBEAT_REQUEST                          1
1676
520
#define PFCP_MSG_HEARTBEAT_RESPONSE                         2
1677
762
#define PFCP_MSG_PFD_MANAGEMENT_REQUEST                     3
1678
498
#define PFCP_MSG_PFD_MANAGEMENT_RESPONSE                    4
1679
756
#define PFCP_MSG_ASSOCIATION_SETUP_REQUEST                  5
1680
492
#define PFCP_MSG_ASSOCIATION_SETUP_RESPONSE                 6
1681
752
#define PFCP_MSG_ASSOCIATION_UPDATE_REQUEST                 7
1682
482
#define PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE                8
1683
742
#define PFCP_MSG_ASSOCIATION_RELEASE_REQUEST                9
1684
476
#define PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE               10
1685
472
#define PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE             11
1686
728
#define PFCP_MSG_NODE_REPORT_REQUEST                        12
1687
470
#define PFCP_MSG_NODE_REPORT_RESPONSE                       13
1688
716
#define PFCP_MSG_SESSION_SET_DELETION_REQUEST               14
1689
466
#define PFCP_MSG_SESSION_SET_DELETION_RESPONSE              15
1690
686
#define PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST           16
1691
464
#define PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE          17
1692
680
#define PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST              50
1693
462
#define PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE             51
1694
674
#define PFCP_MSG_SESSION_MODIFICATION_REQUEST               52
1695
458
#define PFCP_MSG_SESSION_MODIFICATION_RESPONSE              53
1696
672
#define PFCP_MSG_SESSION_DELETION_REQUEST                   54
1697
454
#define PFCP_MSG_SESSION_DELETION_RESPONSE                  55
1698
262
#define PFCP_MSG_SESSION_REPORT_REQUEST                     56
1699
190
#define PFCP_MSG_SESSION_REPORT_RESPONSE                    57
1700
1701
static const value_string pfcp_message_type[] = {
1702
    {PFCP_MSG_RESERVED_0,             "Reserved"},
1703
    /* PFCP Node related messages */
1704
1705
    { PFCP_MSG_HEARTBEAT_REQUEST, "PFCP Heartbeat Request"},
1706
    { PFCP_MSG_HEARTBEAT_RESPONSE, "PFCP Heartbeat Response"},
1707
    { PFCP_MSG_PFD_MANAGEMENT_REQUEST, "PFCP PFD Management Request"},
1708
    { PFCP_MSG_PFD_MANAGEMENT_RESPONSE, "PFCP PFD Management Response"},
1709
    { PFCP_MSG_ASSOCIATION_SETUP_REQUEST, "PFCP Association Setup Request"},
1710
    { PFCP_MSG_ASSOCIATION_SETUP_RESPONSE, "PFCP Association Setup Response"},
1711
    { PFCP_MSG_ASSOCIATION_UPDATE_REQUEST, "PFCP Association Update Request"},
1712
    { PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE, "PFCP Association Update Response"},
1713
    { PFCP_MSG_ASSOCIATION_RELEASE_REQUEST, "PFCP Association Release Request"},
1714
    { PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE, "PFCP Association Release Response"},
1715
    { PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE, "PFCP Version Not Supported Response"},
1716
    { PFCP_MSG_NODE_REPORT_REQUEST, "PFCP Node Report Request"},
1717
    { PFCP_MSG_NODE_REPORT_RESPONSE, "PFCP Node Report Response"},
1718
    { PFCP_MSG_SESSION_SET_DELETION_REQUEST, "PFCP Session Set Deletion Request"},
1719
    { PFCP_MSG_SESSION_SET_DELETION_RESPONSE, "PFCP Session Set Deletion Response"},
1720
    { PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST, "PFCP Session Set Modification Request"},
1721
    { PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE, "PFCP Session Set Modification Response"},
1722
    //18 to 49    For future use
1723
    //PFCP Session related messages
1724
    { PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST, "PFCP Session Establishment Request"},
1725
    { PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE, "PFCP Session Establishment Response"},
1726
    { PFCP_MSG_SESSION_MODIFICATION_REQUEST, "PFCP Session Modification Request"},
1727
    { PFCP_MSG_SESSION_MODIFICATION_RESPONSE, "PFCP Session Modification Response"},
1728
    { PFCP_MSG_SESSION_DELETION_REQUEST, "PFCP Session Deletion Request"},
1729
    { PFCP_MSG_SESSION_DELETION_RESPONSE, "PFCP Session Deletion Response"},
1730
    { PFCP_MSG_SESSION_REPORT_REQUEST, "PFCP Session Report Request"},
1731
    { PFCP_MSG_SESSION_REPORT_RESPONSE, "PFCP Session Report Response"},
1732
    //58 to 99    For future use
1733
    //Other messages
1734
    //100 to 255     For future use
1735
    {0, NULL}
1736
};
1737
static value_string_ext pfcp_message_type_ext = VALUE_STRING_EXT_INIT(pfcp_message_type);
1738
1739
#define PFCP_MSG_IS_REQUEST(msg)                            \
1740
408
    ((msg) == PFCP_MSG_HEARTBEAT_REQUEST ||                 \
1741
408
     (msg) == PFCP_MSG_PFD_MANAGEMENT_REQUEST ||            \
1742
408
     (msg) == PFCP_MSG_ASSOCIATION_SETUP_REQUEST ||         \
1743
408
     (msg) == PFCP_MSG_ASSOCIATION_UPDATE_REQUEST ||        \
1744
408
     (msg) == PFCP_MSG_ASSOCIATION_RELEASE_REQUEST ||       \
1745
408
     (msg) == PFCP_MSG_NODE_REPORT_REQUEST ||               \
1746
408
     (msg) == PFCP_MSG_SESSION_SET_DELETION_REQUEST ||      \
1747
408
     (msg) == PFCP_MSG_SESSION_SET_MODIFICATION_REQUEST ||  \
1748
408
     (msg) == PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST ||     \
1749
408
     (msg) == PFCP_MSG_SESSION_MODIFICATION_REQUEST ||      \
1750
408
     (msg) == PFCP_MSG_SESSION_DELETION_REQUEST ||          \
1751
408
     (msg) == PFCP_MSG_SESSION_REPORT_REQUEST)
1752
1753
#define PFCP_MSG_IS_RESPONSE(msg)                           \
1754
260
    ((msg) == PFCP_MSG_HEARTBEAT_RESPONSE ||                \
1755
260
     (msg) == PFCP_MSG_PFD_MANAGEMENT_RESPONSE ||           \
1756
260
     (msg) == PFCP_MSG_ASSOCIATION_SETUP_RESPONSE ||        \
1757
260
     (msg) == PFCP_MSG_ASSOCIATION_UPDATE_RESPONSE ||       \
1758
260
     (msg) == PFCP_MSG_ASSOCIATION_RELEASE_RESPONSE ||      \
1759
260
     (msg) == PFCP_MSG_VERSION_NOT_SUPPORTED_RESPONSE ||    \
1760
260
     (msg) == PFCP_MSG_NODE_REPORT_RESPONSE ||              \
1761
260
     (msg) == PFCP_MSG_SESSION_SET_DELETION_RESPONSE ||     \
1762
260
     (msg) == PFCP_MSG_SESSION_SET_MODIFICATION_RESPONSE || \
1763
260
     (msg) == PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE ||    \
1764
260
     (msg) == PFCP_MSG_SESSION_MODIFICATION_RESPONSE ||     \
1765
260
     (msg) == PFCP_MSG_SESSION_DELETION_RESPONSE ||         \
1766
260
     (msg) == PFCP_MSG_SESSION_REPORT_RESPONSE)
1767
1768
/* 8.1.2    Information Element Types */
1769
#define PFCP_IE_ID_CREATE_PDR                   1
1770
#define PFCP_IE_ID_PDI                          2
1771
#define PFCP_IE_CREATE_FAR                      3
1772
#define PFCP_IE_FORWARDING_PARAMETERS           4
1773
#define PFCP_IE_DUPLICATING_PARAMETERS          5
1774
#define PFCP_IE_CREATE_URR                      6
1775
#define PFCP_IE_CREATE_QER                      7
1776
#define PFCP_IE_CREATED_PDR                     8
1777
#define PFCP_IE_UPDATE_PDR                      9
1778
#define PFCP_IE_UPDATE_FAR                     10
1779
#define PFCP_IE_UPD_FORWARDING_PARAM   11
1780
#define PFCP_IE_UPDATE_BAR                     12
1781
#define PFCP_IE_UPDATE_URR                     13
1782
#define PFCP_IE_UPDATE_QER                     14
1783
#define PFCP_IE_REMOVE_PDR                     15
1784
#define PFCP_IE_REMOVE_FAR                     16
1785
#define PFCP_IE_REMOVE_URR                     17
1786
#define PFCP_IE_REMOVE_QER                     18
1787
1788
#define PFCP_IE_LOAD_CONTROL_INFORMATION          51
1789
#define PFCP_IE_OVERLOAD_CONTROL_INFORMATION      54
1790
#define PFCP_IE_APPLICATION_IDS_PFDS              58
1791
#define PFCP_IE_PFD_CONTEXT                       59
1792
#define PFCP_IE_APPLICATION_DETECTION_INF         68
1793
#define PFCP_IE_QUERY_URR                         77
1794
#define PFCP_IE_USAGE_REPORT_SMR                  78
1795
#define PFCP_IE_USAGE_REPORT_SDR                  79
1796
#define PFCP_IE_USAGE_REPORT_SRR                  80
1797
#define PFCP_IE_DOWNLINK_DATA_REPORT              83
1798
#define PFCP_IE_CREATE_BAR                        85
1799
#define PFCP_IE_UPDATE_BAR_SMR                    86
1800
#define PFCP_IE_REMOVE_BAR                        87
1801
#define PFCP_IE_ERROR_INDICATION_REPORT           99
1802
#define PFCP_IE_USER_PLANE_PATH_FAILURE_REPORT   102
1803
#define PFCP_IE_UPDATE_DUPLICATING_PARAMETERS    105
1804
#define PFCP_IE_AGGREGATED_URRS                  118
1805
#define PFCP_IE_CREATE_TRAFFIC_ENDPOINT          127
1806
#define PFCP_IE_CREATED_TRAFFIC_ENDPOINT         128
1807
#define PFCP_IE_UPDATE_TRAFFIC_ENDPOINT          129
1808
#define PFCP_IE_REMOVE_TRAFFIC_ENDPOINT          130
1809
#define PFCP_IE_ETHERNET_PACKET_FILTER           132
1810
#define PFCP_IE_ETHERNET_TRAFFIC_INFORMATION     143
1811
#define PFCP_IE_ADDITIONAL_MONITORING_TIME       147
1812
#define PFCP_IE_EVENT_INFORMATION                148
1813
#define PFCP_IE_EVENT_REPORTING                  149
1814
#define PFCP_IE_CREATE_MAR                       165
1815
#define PFCP_IE_ACCESS_FORWARDING_ACTION_INORMATION_1 166
1816
#define PFCP_IE_ACCESS_FORWARDING_ACTION_INORMATION_2 167
1817
#define PFCP_IE_REMOVE_MAR                       168
1818
#define PFCP_IE_UPDATE_MAR                       169
1819
#define PFCP_IE_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_1 175
1820
#define PFCP_IE_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_2 176
1821
#define PFCP_IE_PFCP_SESSION_RETENTION_INFORMATION_WITHIN_ASSOCIATION_SETUP_REQUEST 183
1822
#define PFCP_IE_USER_PLANE_PATH_RECOVERY_REPORT  187
1823
#define PFCP_IE_IP_MULTICAST_ADDRESSING_INFO     189
1824
#define PFCP_IE_JOIN_IP_MULTICAST_INFORMATION    189
1825
#define PFCP_IE_LEAVE_IP_MULTICAST_INFORMATION   190
1826
#define PFCP_IE_CREATED_BRIDGE_INFO_FOR_TSC      195
1827
#define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_MODIFICATION_REQUEST    199
1828
#define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_MODIFICATION_RESPONSE   200
1829
#define PFCP_IE_TSC_MANAGEMENT_INFORMATION_WITHIN_PCFP_SESSION_REPORT_REQUEST          201
1830
#define PFCP_IE_CLOCK_DRIFT_CONTROL_INFORMATION  203
1831
#define PFCP_IE_CLOCK_DRIFT_REPORT               205
1832
#define PFCP_IE_REMOVE_SRR                       211
1833
#define PFCP_IE_CREATE_SRR                       212
1834
#define PFCP_IE_UPDATE_SRR                       213
1835
#define PFCP_IE_SESSION_REPORT                   214
1836
#define PFCP_IE_ACCESS_AVAILABILITY_CONTROL_INFORMATION 216
1837
#define PFCP_IE_ACCESS_AVAILABILITY_REPORT       218
1838
#define PFCP_IE_PROVICE_ATSSS_CONTROL_INFORMATION 220
1839
#define PFCP_IE_ATSSS_CONTROl_PARAMETERS         221
1840
#define PFCP_IE_MPTCP_PARAMETERS                 225
1841
#define PFCP_IE_ATSSS_LL_PARAMETERS              226
1842
#define PFCP_IE_PMF_PARAMETERS                   227
1843
#define PFCP_IE_UE_IP_ADDRESS_POOL_INFORMATION   233
1844
#define PFCP_IE_GTP_U_PATH_QOS_CONTROL_INFORMATION 238
1845
#define PFCP_IE_GTP_U_PATH_QOS_REPORT            239
1846
#define PFCP_IE_QOS_INFORMATION_IN_GTP_U_PATH_QOS_REPORT 240
1847
#define PFCP_IE_QOS_MONITORING_PER_QOS_FLOW_CONTROL_INFORMATION 242
1848
#define PFCP_IE_QOS_MONITORING_REPORT            247
1849
#define PFCP_IE_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PFCP_SESSION_DELETION_RESPONSE 252
1850
#define PCFP_IE_ETHERNET_CONTEXT_INFORMATION_WITHIN_PFCP_SESSION_MODIFICATION_REQUEST 254
1851
#define PFCP_IE_REDUNDANT_TRANSMISSION_DETECTION_PARAMETERS_IE_IN_PDI 255
1852
#define PFCP_IE_UPDATED_PDR_IE_WITHIN_PFCP_SESSION_MODIFICATION_RESPONSE 256
1853
#define PFCP_IE_PROVIDE_RDS_CONFIGURATION_INFORMATION_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 261
1854
#define PFCP_IE_QUERY_PACKET_RATE_STATUS_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 263
1855
#define PFCP_IE_QUERY_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_RESPONSE 264
1856
#define PFCP_IE_UE_IP_ADDRESS_USAGE_INFORMATION_IE_WITHIN_PFCP_ASSOCIATION_UPDATE_REQUEST 267
1857
#define PFCP_IE_REDUNDANT_TRANSMISSION_FORWARD_PARAMETERS_IE_IN_FAR 270
1858
#define PFCP_IE_TRANSPORT_DELAY_REPORTING 271
1859
#define PFCP_IE_PARTIAL_FAILURE_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE 272
1860
#define PFCP_IE_PARTIAL_FAILURE_INFORMATION_WITHIN_PFCP_SESSION_MODIFICATION_RESPONSE 273
1861
#define PFCP_IE_L2TP_TUNNEL_INFORMATION 276
1862
#define PFCP_IE_L2TP_SESSION_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_REQUEST 277
1863
#define PFCP_IE_L2TP_SESSION_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE 279
1864
#define PFCP_IE_PFCP_SESSION_CHANGE_INFO 290
1865
#define PFCP_IE_DIRECT_REPORTING_INFORMATION 295
1866
#define PFCP_IE_MBS_SESSION_N4MB_CONTROL_INFORMATION 300
1867
#define PFCP_IE_MBS_MULTICAST_PARAMETERS 301
1868
#define PFCP_IE_ADD_MBS_UNICAST_PARAMETERS_IE_IN_CREATE_FAR 302
1869
#define PFCP_IE_MBS_SESSION_N4MB_INFORMATION 300
1870
#define PFCP_IE_REMOVE_MBS_UNICAST_PARAMETERS_IE_IN_UPDATE_FAR 304
1871
#define PFCP_IE_MBS_SESSION_N4_CONTROl_INFORMATION_IE_WITHIN_PFCP_SESSION_ESTABLISHMENT_REQUEST 310
1872
#define PFCP_IE_MBS_SESSION_N4_CONTROl_INFORMATION_IE_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE 311
1873
#define PFCP_IE_PEER_UP_REPORT_IE_WITING_PFCP_NODE_REPORT_REQUEST 315
1874
#define PFCP_IE_DSCP_TO_PPI_CONTROL_INFORMATION_IE_WITIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 316
1875
1876
static const value_string pfcp_ie_type[] = {
1877
1878
    { 0, "Reserved"},
1879
    { 1, "Create PDR"},                                             /* Extendable / Table 7.5.2.2-1 */
1880
    { 2, "PDI"},                                                    /* Extendable / Table 7.5.2.2-2 */
1881
    { 3, "Create FAR"},                                             /* Extendable / Table 7.5.2.3-1 */
1882
    { 4, "Forwarding Parameters"},                                  /* Extendable / Table 7.5.2.3-2 */
1883
    { 5, "Duplicating Parameters"},                                 /* Extendable / Table 7.5.2.3-3 */
1884
    { 6, "Create URR"},                                             /* Extendable / Table 7.5.2.4-1 */
1885
    { 7, "Create QER"},                                             /* Extendable / Table 7.5.2.5-1 */
1886
    { 8, "Created PDR"},                                            /* Extendable / Table 7.5.3.2-1 */
1887
    { 9, "Update PDR" },                                            /* Extendable / Table 7.5.4.2-1 */
1888
    { 10, "Update FAR" },                                           /* Extendable / Table 7.5.4.3-1 */
1889
    { 11, "Update Forwarding Parameters" },                         /* Extendable / Table 7.5.4.3-2 */
1890
    { 12, "Update BAR (PFCP Session Report Response)" },            /* Extendable / Table 7.5.9.2-1 */
1891
    { 13, "Update URR" },                                           /* Extendable / Table 7.5.4.4 */
1892
    { 14, "Update QER" },                                           /* Extendable / Table 7.5.4.5 */
1893
    { 15, "Remove PDR" },                                           /* Extendable / Table 7.5.4.6 */
1894
    { 16, "Remove FAR" },                                           /* Extendable / Table 7.5.4.7 */
1895
    { 17, "Remove URR" },                                           /* Extendable / Table 7.5.4.8 */
1896
    { 18, "Remove QER" },                                           /* Extendable / Table 7.5.4.9 */
1897
    { 19, "Cause" },                                                /* Fixed / Subclause 8.2.1 */
1898
    { 20, "Source Interface" },                                     /* Extendable / Subclause 8.2.2 */
1899
    { 21, "F-TEID" },                                               /* Extendable / Subclause 8.2.3 */
1900
    { 22, "Network Instance" },                                     /* Variable Length / Subclause 8.2.4 */
1901
    { 23, "SDF Filter" },                                           /* Extendable / Subclause 8.2.5 */
1902
    { 24, "Application ID" },                                       /* Variable Length / Subclause 8.2.6 */
1903
    { 25, "Gate Status" },                                          /* Extendable / Subclause 8.2.7 */
1904
    { 26, "MBR" },                                                  /* Extendable / Subclause 8.2.8 */
1905
    { 27, "GBR" },                                                  /* Extendable / Subclause 8.2.9 */
1906
    { 28, "QER Correlation ID" },                                   /* Extendable / Subclause 8.2.10 */
1907
    { 29, "Precedence" },                                           /* Extendable / Subclause 8.2.11 */
1908
    { 30, "Transport Level Marking" },                              /* Extendable / Subclause 8.2.12 */
1909
    { 31, "Volume Threshold" },                                     /* Extendable /Subclause 8.2.13 */
1910
    { 32, "Time Threshold" },                                       /* Extendable /Subclause 8.2.14 */
1911
    { 33, "Monitoring Time" },                                      /* Extendable /Subclause 8.2.15 */
1912
    { 34, "Subsequent Volume Threshold" },                          /* Extendable /Subclause 8.2.16 */
1913
    { 35, "Subsequent Time Threshold" },                            /* Extendable /Subclause 8.2.17 */
1914
    { 36, "Inactivity Detection Time" },                            /* Extendable /Subclause 8.2.18 */
1915
    { 37, "Reporting Triggers" },                                   /* Extendable /Subclause 8.2.19 */
1916
    { 38, "Redirect Information" },                                 /* Extendable /Subclause 8.2.20 */
1917
    { 39, "Report Type" },                                          /* Extendable / Subclause 8.2.21 */
1918
    { 40, "Offending IE" },                                         /* Fixed / Subclause 8.2.22 */
1919
    { 41, "Forwarding Policy" },                                    /* Extendable / Subclause 8.2.23 */
1920
    { 42, "Destination Interface" },                                /* Extendable / Subclause 8.2.24 */
1921
    { 43, "UP Function Features" },                                 /* Extendable / Subclause 8.2.25 */
1922
    { 44, "Apply Action" },                                         /* Extendable / Subclause 8.2.26 */
1923
    { 45, "Downlink Data Service Information" },                    /* Extendable / Subclause 8.2.27 */
1924
    { 46, "Downlink Data Notification Delay" },                     /* Extendable / Subclause 8.2.28 */
1925
    { 47, "DL Buffering Duration" },                                /* Extendable / Subclause 8.2.29 */
1926
    { 48, "DL Buffering Suggested Packet Count" },                  /* Variable / Subclause 8.2.30 */
1927
    { 49, "PFCPSMReq-Flags" },                                      /* Extendable / Subclause 8.2.31 */
1928
    { 50, "PFCPSRRsp-Flags" },                                      /* Extendable / Subclause 8.2.32 */
1929
    { 51, "Load Control Information" },                             /* Extendable / Table 7.5.3.3-1 */
1930
    { 52, "Sequence Number" },                                      /* Fixed Length / Subclause 8.2.33 */
1931
    { 53, "Metric" },                                               /* Fixed Length / Subclause 8.2.34 */
1932
    { 54, "Overload Control Information" },                         /* Extendable / Table 7.5.3.4-1 */
1933
    { 55, "Timer" },                                                /* Extendable / Subclause 8.2 35 */
1934
    { 56, "PDR ID" },                                               /* Extendable / Subclause 8.2 36 */
1935
    { 57, "F-SEID" },                                               /* Extendable / Subclause 8.2 37 */
1936
    { 58, "Application ID's PFDs" },                                /* Extendable / Table 7.4.3.1-2 */
1937
    { 59, "PFD context" },                                          /* Extendable / Table 7.4.3.1-3 */
1938
    { 60, "Node ID" },                                              /* Extendable / Subclause 8.2.38 */
1939
    { 61, "PFD contents" },                                         /* Extendable / Subclause 8.2.39 */
1940
    { 62, "Measurement Method" },                                   /* Extendable / Subclause 8.2.40 */
1941
    { 63, "Usage Report Trigger" },                                 /* Extendable / Subclause 8.2.41 */
1942
    { 64, "Measurement Period" },                                   /* Extendable / Subclause 8.2.42 */
1943
    { 65, "FQ-CSID" },                                              /* Extendable / Subclause 8.2.43 */
1944
    { 66, "Volume Measurement" },                                   /* Extendable / Subclause 8.2.44 */
1945
    { 67, "Duration Measurement" },                                 /* Extendable / Subclause 8.2.45 */
1946
    { 68, "Application Detection Information" },                    /* Extendable / Table 7.5.8.3-2 */
1947
    { 69, "Time of First Packet" },                                 /* Extendable / Subclause 8.2.46 */
1948
    { 70, "Time of Last Packet" },                                  /* Extendable / Subclause 8.2.47 */
1949
    { 71, "Quota Holding Time" },                                   /* Extendable / Subclause 8.2.48 */
1950
    { 72, "Dropped DL Traffic Threshold" },                         /* Extendable / Subclause 8.2.49 */
1951
    { 73, "Volume Quota" },                                         /* Extendable / Subclause 8.2.50 */
1952
    { 74, "Time Quota" },                                           /* Extendable / Subclause 8.2.51 */
1953
    { 75, "Start Time" },                                           /* Extendable / Subclause 8.2.52 */
1954
    { 76, "End Time" },                                             /* Extendable / Subclause 8.2.53 */
1955
    { 77, "Query URR" },                                            /* Extendable / Table 7.5.4.10-1 */
1956
    { 78, "Usage Report (Session Modification Response)" },         /* Extendable / Table 7.5.5.2-1 */
1957
    { 79, "Usage Report (Session Deletion Response)" },             /* Extendable / Table 7.5.7.2-1 */
1958
    { 80, "Usage Report (Session Report Request)" },                /* Extendable / Table 7.5.8.3-1 */
1959
    { 81, "URR ID" },                                               /* Extendable / Subclause 8.2.54 */
1960
    { 82, "Linked URR ID" },                                        /* Extendable / Subclause 8.2.55 */
1961
    { 83, "Downlink Data Report" },                                 /* Extendable / Table 7.5.8.2-1 */
1962
    { 84, "Outer Header Creation" },                                /* Extendable / Subclause 8.2.56 */
1963
    { 85, "Create BAR" },                                           /* Extendable / Table 7.5.2.6-1 */
1964
    { 86, "Update BAR (Session Modification Request)" },            /* Extendable / Table 7.5.4.11-1 */
1965
    { 87, "Remove BAR" },                                           /* Extendable / Table 7.5.4.12-1 */
1966
    { 88, "BAR ID" },                                               /* Extendable / Subclause 8.2.57 */
1967
    { 89, "CP Function Features" },                                 /* Extendable / Subclause 8.2.58 */
1968
    { 90, "Usage Information" },                                    /* Extendable / Subclause 8.2.59 */
1969
    { 91, "Application Instance ID" },                              /* Variable Length / Subclause 8.2.60 */
1970
    { 92, "Flow Information" },                                     /* Extendable / Subclause 8.2.61 */
1971
    { 93, "UE IP Address" },                                        /* Extendable / Subclause 8.2.62 */
1972
    { 94, "Packet Rate" },                                          /* Extendable / Subclause 8.2.63 */
1973
    { 95, "Outer Header Removal" },                                 /* Extendable / Subclause 8.2.64 */
1974
    { 96, "Recovery Time Stamp" },                                  /* Extendable / Subclause 8.2.65 */
1975
    { 97, "DL Flow Level Marking" },                                /* Extendable / Subclause 8.2.66 */
1976
    { 98, "Header Enrichment" },                                    /* Extendable / Subclause 8.2.67 */
1977
    { 99, "Error Indication Report" },                              /* Extendable / Table 7.5.8.4-1 */
1978
    { 100, "Measurement Information" },                             /* Extendable / Subclause 8.2.68 */
1979
    { 101, "Node Report Type" },                                    /* Extendable / Subclause 8.2.69 */
1980
    { 102, "User Plane Path Failure Report" },                      /* Extendable / Table 7.4.5.1.2-1 */
1981
    { 103, "Remote GTP-U Peer" },                                   /* Extendable / Subclause 8.2.70 */
1982
    { 104, "UR-SEQN" },                                             /* Fixed Length / Subclause 8.2.71 */
1983
    { 105, "Update Duplicating Parameters" },                       /* Extendable / Table 7.5.4.3-3 */
1984
    { 106, "Activate Predefined Rules" },                           /* Variable Length / Subclause 8.2.72 */
1985
    { 107, "Deactivate Predefined Rules" },                         /* Variable Length / Subclause 8.2.73 */
1986
    { 108, "FAR ID" },                                              /* Extendable / Subclause 8.2.74 */
1987
    { 109, "QER ID" },                                              /* Extendable / Subclause 8.2.75 */
1988
    { 110, "OCI Flags" },                                           /* Extendable / Subclause 8.2.76 */
1989
    { 111, "PFCP Association Release Request" },                    /* Extendable / Subclause 8.2.77 */
1990
    { 112, "Graceful Release Period" },                             /* Extendable / Subclause 8.2.78 */
1991
    { 113, "PDN Type" },                                            /* Fixed Length / Subclause 8.2.79 */
1992
    { 114, "Failed Rule ID" },                                      /* Extendable / Subclause 8.2.80 */
1993
    { 115, "Time Quota Mechanism" },                                /* Extendable / Subclause 8.2.81 */
1994
    { 116, "User Plane IP Resource Information (removed in Rel 16.3)" }, /* Extendable / Subclause 8.2.82 */
1995
    { 117, "User Plane Inactivity Timer" },                         /* Extendable / Subclause 8.2.83 */
1996
    { 118, "Aggregated URRs" },                                     /* Extendable / Table 7.5.2.4-2 */
1997
    { 119, "Multiplier" },                                          /* Fixed Length / Subclause 8.2.84 */
1998
    { 120, "Aggregated URR ID IE" },                                /* Fixed Length / Subclause 8.2.85 */
1999
    { 121, "Subsequent Volume Quota" },                             /* Extendable / Subclause 8.2.86 */
2000
    { 122, "Subsequent Time Quota" },                               /* Extendable / Subclause 8.2.87 */
2001
    { 123, "RQI" },                                                 /* Extendable / Subclause 8.2.88 */
2002
    { 124, "QFI" },                                                 /* Extendable / Subclause 8.2.89 */
2003
    { 125, "Query URR Reference" },                                 /* Extendable / Subclause 8.2.90 */
2004
    { 126, "Additional Usage Reports Information" },                /* Extendable / Subclause 8.2.91 */
2005
    { 127, "Create Traffic Endpoint" },                             /* Extendable / Table 7.5.2.7 */
2006
    { 128, "Created Traffic Endpoint" },                            /* Extendable / Table 7.5.3.5 */
2007
    { 129, "Update Traffic Endpoint" },                             /* Extendable / Table 7.5.4.13 */
2008
    { 130, "Remove Traffic Endpoint" },                             /* Extendable / Table 7.5.4.14 */
2009
    { 131, "Traffic Endpoint ID" },                                 /* Extendable / Subclause 8.2.92*/
2010
    { 132, "Ethernet Packet Filter"},                               /* Extendable / Table 7.5.2.2-3 */
2011
    { 133, "MAC address"},                                          /* Extendable / Subclause 8.2.93 */
2012
    { 134, "C-TAG"},                                                /* Extendable / Subclause 8.2.94 */
2013
    { 135, "S-TAG"},                                                /* Extendable / Subclause 8.2.95 */
2014
    { 136, "Ethertype"},                                            /* Extendable / Subclause 8.2.96 */
2015
    { 137, "Proxying"},                                             /* Extendable / Subclause 8.2.97 */
2016
    { 138, "Ethernet Filter ID"},                                   /* Extendable / Subclause 8.2.98 */
2017
    { 139, "Ethernet Filter Properties"},                           /* Extendable / Subclause 8.2.99 */
2018
    { 140, "Suggested Buffering Packets Count"},                    /* Extendable / Subclause 8.2.100 */
2019
    { 141, "User ID"},                                              /* Extendable / Subclause 8.2.101 */
2020
    { 142, "Ethernet PDU Session Information"},                     /* Extendable / Subclause 8.2.102 */
2021
    { 143, "Ethernet Traffic Information"},                         /* Extendable / Table 7.5.8.3-3 */
2022
    { 144, "MAC Addresses Detected"},                               /* Extendable / Subclause 8.2.103 */
2023
    { 145, "MAC Addresses Removed"},                                /* Extendable / Subclause 8.2.104 */
2024
    { 146, "Ethernet Inactivity Timer"},                            /* Extendable / Subclause 8.2.105 */
2025
    { 147, "Additional Monitoring Time"},                           /* Extendable / Table 7.5.2.4-3 */
2026
    { 148, "Event Quota"},                                          /* Extendable / Subclause 8.2.112 */
2027
    { 149, "Event Threshold"},                                      /* Extendable / Subclause 8.2.113 */
2028
    { 150, "Subsequent Event Quota"},                               /* Extendable / Subclause 8.2.106 */
2029
    { 151, "Subsequent Event Threshold"},                           /* Extendable / Subclause 8.2.107 */
2030
    { 152, "Trace Information"},                                    /* Extendable / Subclause 8.2.108 */
2031
    { 153, "Framed-Route"},                                         /* Variable Length  / Subclause 8.2.109 */
2032
    { 154, "Framed-Routing"},                                       /* Fixed Length  / Subclause 8.2.110 */
2033
    { 155, "Framed-IPv6-Route"},                                    /* Variable Length  / Subclause 8.2.111 */
2034
    { 156, "Time Stamp"},                                           /* Extendable / Subclause 8.2.114 */
2035
    { 157, "Averaging Window"},                                     /* Extendable / Subclause 8.2.115 */
2036
    { 158, "Paging Policy Indicator"},                              /* Extendable / Subclause 8.2.116 */
2037
    { 159, "APN/DNN"},                                              /* Variable Length  / Subclause 8.2.117 */
2038
    { 160, "3GPP Interface Type"},                                  /* Extendable / Subclause 8.2.118 */
2039
    { 161, "PFCPSRReq-Flags"},                                      /* ExtendableClause 8.2.119 */
2040
    { 162, "PFCPAUReq-Flags"},                                      /* ExtendableClause 8.2.120 */
2041
    { 163, "Activation Time"},                                      /* Extendable Clause 8.2.121 */
2042
    { 164, "Deactivation Time"},                                    /* Extendable Clause 8.2.122 */
2043
    { 165, "Create MAR"},                                           /* Extendable / Table 7.5.2.8-1 */
2044
    { 166, "3GPP Access Forwarding Action Information"},               /* Extendable / Table 7.5.2.8-2 */
2045
    { 167, "Non-3GPP Access Forwarding Action Information"},               /* Extendable / Table 7.5.2.8-3 */
2046
    { 168, "Remove MAR"},                                           /* Extendable / Table 7.5.2.15-1 */
2047
    { 169, "Update MAR"},                                           /* Extendable / Table 7.5.2.16-1 */
2048
    { 170, "MAR ID"},                                              /* Extendable / Clause 8.2.123 */
2049
    { 171, "Steering Functionality"},                              /* Extendable / Clause 8.2.124 */
2050
    { 172, "Steering Mode"},                                       /* Extendable / Clause 8.2.125 */
2051
    { 173, "Weight"},                                              /* Fixed / Clause 8.2.126 */
2052
    { 174, "Priority"},                                            /* Extendable / Clause 8.2.127 */
2053
    { 175, "Update 3GPP Access Forwarding Action Information"},        /* Fixed / Clause 8.2.126 */
2054
    { 176, "Update Non 3GPP Access Forwarding Action Information"},        /* Extendable / Clause 8.2.127 */
2055
    { 177, "UE IP address Pool Identity"},                          /* Variable Length / Clause 8.2.128 */
2056
    { 178, "Alternative SMF IP Address"},                           /* Extendable / Clause 8.2.129 */
2057
    { 179, "Packet Replication and Detection Carry-On Information"},/* Extendable / Clause 8.2.130 */
2058
    { 180, "SMF Set ID"},                                           /* Extendable / Clause 8.2.131 */
2059
    { 181, "Quota Validity Time"},                                  /* Extendable / Clause 8.2.132 */
2060
    { 182, "Number of Reports"},                                    /* Fixed / Clause 8.2.133 */
2061
    { 183, "PFCP Session Retention Information (within PFCP Association Setup Request)"}, /* Extendable / Table 7.4.4.1-2 */
2062
    { 184, "PFCPASRsp-Flags"},                                      /* Extendable / Clause 8.2.134 */
2063
    { 185, "CP PFCP Entity IP Address"},                            /* Extendable / Clause 8.2.135 */
2064
    { 186, "PFCPSEReq-Flags"},                                      /* Extendable / Clause 8.2.136 */
2065
    { 187, "User Plane Path Recovery Report"},                      /* Extendable / Table 7.4.5.1.3-1 */
2066
    { 188, "IP Multicast Addressing Info within PFCP Session Establishment Request"}, /* Extendable / Clause 7.5.2.2-4 */
2067
    { 189, "Join IP Multicast Information IE within Usage Report"}, /* Extendable / Table 7.5.8.3-4 */
2068
    { 190, "Leave IP Multicast Information IE within Usage Report"},/* Extendable / Table 7.5.8.3-5 */
2069
    { 191, "IP Multicast Address"},                                 /* Extendable / Clause 8.2.137 */
2070
    { 192, "Source IP Address"},                                    /* Extendable / Clause 8.2.138 */
2071
    { 193, "Packet Rate Status"},                                   /* Extendable / Clause 8.2.139 */
2072
    { 194, "Create Bridge/Router Info"},                            /* Extendable / Clause 8.2.140 */
2073
    { 195, "Created Bridge/Router Info"},                           /* Extendable / Table 7.5.3.6-1 */
2074
    { 196, "Port Number"},                                          /* Fixed Length / Clause 8.2.141 */
2075
    { 197, "NW-TT Port Number"},                                    /* Fixed Length / Clause 8.2.142 */
2076
    { 198, "5GS User Plane Node ID"},                                  /* Extendable / Clause 8.2.143 */
2077
    { 199, "TSC Management Information IE within PFCP Session Modification Request"}, /* Extendable / Table 7.5.4.18-1 */
2078
    { 200, "TSC Management Information IE within PFCP Session Modification Response"}, /* Extendable / Table 7.5.5.3-1 */
2079
    { 201, "TSC Management Information IE within PFCP Session Report Request"}, /* Extendable / Table 7.5.8.5-1 */
2080
    { 202, "Port Management Information Container"},                /* Variable Length / Clause 8.2.144 */
2081
    { 203, "Clock Drift Control Information"},                      /* Extendable / Table 7.4.4.1.2-1 */
2082
    { 204, "Requested Clock Drift Information"},                    /* Extendable / Clause 8.2.145 */
2083
    { 205, "Clock Drift Report"},                                   /* Extendable / Table 7.4.5.1.4-1 */
2084
    { 206, "Time Domain Number"},                                   /* Extendable / Clause 8.2.146 */
2085
    { 207, "Time Offset Threshold"},                                /* Extendable / Clause 8.2.147 */
2086
    { 208, "Cumulative rateRatio Threshold"},                       /* Extendable / Clause 8.2.148 */
2087
    { 209, "Time Offset Measurement"},                              /* Extendable / Clause 8.2.149 */
2088
    { 210, "Cumulative rateRatio Measurement"},                     /* Extendable / Clause 8.2.150 */
2089
    { 211, "Remove SRR"},                                           /* Extendable/ Table 7.5.4.19-1 */
2090
    { 212, "Create SRR"},                                           /* Extendable/ Table 7.5.2.9-1 */
2091
    { 213, "Update SRR"},                                           /* Extendable/ Table 7.5.4.21-1 */
2092
    { 214, "Session Report"},                                       /* Extendable / Table 7.5.8.7-1 */
2093
    { 215, "SRR ID"},                                               /* Extendable / Clause 8.2.151 */
2094
    { 216, "Access Availability Control Information"},              /* Extendable / Table 7.5.2.9-2 */
2095
    { 217, "Requested Access Availability Information"},            /* Extendable / Clause 8.2.152 */
2096
    { 218, "Access Availability Report"},                           /* Extendable / Table 7.5.8.6-2 */
2097
    { 219, "Access Availability Information"},                      /* Extendable / Clause 8.2.153 */
2098
    { 220, "Provide ATSSS Control Information"},                    /* Extendable / Table 7.5.2.10-1 */
2099
    { 221, "ATSSS Control Parameters"},                             /* Extendable / Table 7.5.3.7-1 */
2100
    { 222, "MPTCP Control Information"},                            /* Extendable / Clause 8.2.154 */
2101
    { 223, "ATSSS-LL Control Information"},                         /* Extendable / Clause 8.2.155 */
2102
    { 224, "PMF Control Information"},                              /* Extendable / Clause 8.2.156 */
2103
    { 225, "MPTCP Parameters"},                                     /* Extendable / Table 7.5.3.7-2 */
2104
    { 226, "ATSSS-LL Parameters"},                                  /* Extendable / Table 7.5.3.7-3 */
2105
    { 227, "PMF Parameters"},                                       /* Extendable / Table 7.5.3.7-4 */
2106
    { 228, "MPTCP Address Information"},                            /* Extendable / Clause 8.2.157 */
2107
    { 229, "Link-Specific Multipath IP Address"},                   /* Extendable / Clause 8.2.158 */
2108
    { 230, "PMF Address Information"},                              /* Extendable / Clause 8.2.159 */
2109
    { 231, "ATSSS-LL Information"},                                 /* Extendable / Clause 8.2.160 */
2110
    { 232, "Data Network Access Identifier"},                       /* Variable Length / Clause 8.2.161 */
2111
    { 233, "UE IP address Pool Information"},                       /* Extendable / Table 7.4.4.1-3 */
2112
    { 234, "Average Packet Delay"},                                 /* Extendable / Clause 8.2.162 */
2113
    { 235, "Minimum Packet Delay"},                                 /* Extendable / Clause 8.2.163 */
2114
    { 236, "Maximum Packet Delay"},                                 /* Extendable / Clause 8.2.164 */
2115
    { 237, "QoS Report Trigger"},                                   /* Extendable / Clause 8.2.165 */
2116
    { 238, "GTP-U Path QoS Control Information"},                   /* Extendable / Table 7.4.4.1.3-1 */
2117
    { 239, "GTP-U Path QoS Report (PFCP Node Report Request)"},     /* Extendable / Table 7.4.5.1.5-1 */
2118
    { 240, "QoS Information in GTP-U Path QoS Report"},             /* Extendable / Table 7.4.5.1.6-1 */
2119
    { 241, "GTP-U Path Interface Type"},                            /* Extendable / Clause 8.2.166 */
2120
    { 242, "QoS Monitoring per QoS flow Control Information"},      /* Extendable / Table 7.5.2.9-3 */
2121
    { 243, "Requested QoS Monitoring"},                             /* Extendable / Clause 8.2.167 */
2122
    { 244, "Reporting Frequency"},                                  /* Extendable / Clause 8.2.168 */
2123
    { 245, "Packet Delay Thresholds"},                              /* Extendable / Clause 8.2.169 */
2124
    { 246, "Minimum Wait Time"},                                    /* Extendable / Clause 8.2.170 */
2125
    { 247, "QoS Monitoring Report"},                                /* Extendable / Table 7.5.8.6-3 */
2126
    { 248, "QoS Monitoring Measurement"},                           /* Extendable / Clause 8.2.171 */
2127
    { 249, "MT-EDT Control Information"},                           /* Extendable / Clause 8.2.172 */
2128
    { 250, "DL Data Packets Size"},                                 /* Extendable / Clause 8.2.173 */
2129
    { 251, "QER Control Indications"},                              /* Extendable / Clause 8.2.174 */
2130
    { 252, "Packet Rate Status Report IE within PFCP Session Deletion Response"}, /* Extendable / Table 7.5.7.1-2 */
2131
    { 253, "NF Instance ID"},                                       /* Extendable / Clause 8.2.175 */
2132
    { 254, "Ethernet Context Information"},                         /* Extendable / Table 7.5.4.21-1 */
2133
    { 255, "Redundant Transmission Detection Parameters IE in PDI"}, /* Extendable / Table 7.5.2.2-5 */
2134
    { 256, "Updated PDR"},                                          /* Extendable / Table 7.5.9.3-1 */
2135
    { 257, "S-NSSAI"},                                              /* Fixed Length / Clause 8.2.176 */
2136
    { 258, "IP version"},                                           /* Extendable / Clause 8.2.177 */
2137
    { 259, "PFCPASReq-Flags"},                                      /* Extendable / Clause 8.2.178 */
2138
    { 260, "Data Status"},                                          /* Extendable / Clause 8.2.179 */
2139
    { 261, "Provide RDS Configuration Information IE within PFCP Session Establishment Request"}, /* Extendable / Table 7.5.2.11-1  */
2140
    { 262, "RDS Configuration Information"},                        /* Extendable / Clause 8.2.180  */
2141
    { 263, "Query Packet Rate Status IE within PFCP Session Modification Request"}, /* Extendable / Table 7.5.4.22-1  */
2142
    { 264, "Query Packet Rate Status Report IE within PFCP Session Modification Response"}, /* Extendable / Table 7.5.5.4-1  */
2143
    { 265, "Multipath Applicable Indication"},                      /* Extendable / Clause 8.2.181 */
2144
    { 266, "User Plane Node Management Information Container"},     /* Variable Length / Clause 8.2.182 */
2145
    { 267, "UE IP Address Usage Information"},                      /* Extendable / Table 7.4.4.3.1-1 */
2146
    { 268, "Number of UE IP Addresses"},                            /* Extendable / Clause 8.2.183 */
2147
    { 269, "Validity Timer"},                                       /* Extendable / Clause 8.2.184 */
2148
    { 270, "Redundant Transmission Forwarding Parameters"},         /* Extendable / Table 7.5.2.3-4 */
2149
    { 271, "Transport Delay Reporting"},                            /* Extendable / Table 7.5.2.2-6 */
2150
    { 272, "Partial Failure Information"},                          /* Extendable / Table 7.5.3.1-2 */
2151
    { 273, "Partial Failure Information within PFCP Session Modification Response (Removed in Rel 17.2.0)"},   /* Extendable / Table 7.5.5.1-2 */
2152
    { 274, "Offending IE Information"},                             /* Extendable / Clause 8.2.185 */
2153
    { 275, "RAT Type"},                                             /* Extendable / Clause 8.2.186 */
2154
    { 276, "L2TP Tunnel Information"},                              /* Extendable / Table 7.5.2.1-2 */
2155
    { 277, "L2TP Session Information within PFCP Session Establishment Request"},   /* Extendable / Table 7.5.2.1-3 */
2156
    { 278, "L2TP User Authentication"},                             /* Variable Length / Clause 8.2.187 */
2157
    { 279, "L2TP Session Information within PFCP Session Establishment Response"},   /* Extendable / Table 7.5.3.1-3 */
2158
    { 280, "LNS Address"},                                          /* Variable Length / Clause 8.2.188 */
2159
    { 281, "Tunnel Preference"},                                    /* Fixed / Clause 8.2.189 */
2160
    { 282, "Calling Number"},                                       /* Variable Length / Clause 8.2.190 */
2161
    { 283, "Called Number"},                                        /* Variable Length / Clause 8.2.191 */
2162
    { 284, "L2TP Session Indications"},                             /* Extendable / Clause 8.2.192 */
2163
    { 285, "DNS Server Address"},                                   /* Extendable / Clause 8.2.193 */
2164
    { 286, "NBNS Server Address"},                                  /* Fixed / Clause 8.2.194 */
2165
    { 287, "Maximum Receive Unit"},                                 /* Variable Length / Clause 8.2.195 */
2166
    { 288, "Thresholds"},                                           /* Variable Length / Clause 8.2.196 */
2167
    { 289, "Steering Mode Indicator"},                              /* Extendable / Clause 8.2.197 */
2168
    { 290, "PFCP Session Change Info"},                             /* Extendable / Table 7.4.7.1-2 */
2169
    { 291, "Group ID"},                                             /* Fixed / Clause 8.2.198 */
2170
    { 292, "CP IP Address"},                                        /* Extendable / Clause 8.2.199 */
2171
    { 293, "IP Address and Port Number Replacement"},               /* Variable Length / Clause 8.2.200 */
2172
    { 294, "DNS Query/Response Filter"},                             /* Variable Length / Clause 8.2.201 */
2173
    { 295, "Direct Reporting Information"},                         /* Extendable / Table 7.5.2.9-4 */
2174
    { 296, "Event Notification URI"},                               /* Variable Length / Clause 8.2.202 */
2175
    { 297, "Notification Correlation ID"},                          /* Variable Length / Clause 8.2.203 */
2176
    { 298, "Reporting Flags"},                                      /* Extendable / Clause 8.2.204 */
2177
    { 299, "Predefined Rules Name"},                                /* Variable Length / Clause 8.2.205 */
2178
    { 300, "MBS Session N4mb Control Information"},                 /* Extendable / Table 7.5.2.1-5 */
2179
    { 301, "MBS Multicast Parameters"},                             /* Extendable / Table 7.5.2.3-5 */
2180
    { 302, "Add MBS Unicast Parameters IE in Create FAR"},          /* Extendable / Table 7.5.2.3-6 */
2181
    { 303, "MBS Session N4mb Information"},                         /* Extendable / Table 7.5.3.1-4 */
2182
    { 304, "Remove MBS Unicast Parameters IE in Update FAR"},       /* Extendable / Table 7.5.4.3-4 */
2183
    { 305, "MBS Session Identifier"},                               /* Extendable Length / Clause 8.2.206 */
2184
    { 306, "Multicast Transport Information"},                      /* Extendable Length / Clause 8.2.207 */
2185
    { 307, "MBSN4mbReq Flags"},                                     /* Extendable Length / Clause 8.2.208 */
2186
    { 308, "Local Ingress Tunnel"},                                 /* Extendable Length / Clause 8.2.209 */
2187
    { 309, "MBS Unicast Parameters ID"},                            /* Extendable Length / Clause 8.2.210 */
2188
    { 310, "MBS Session N4 Control Information IE within PFCP Session Establishment Request"},      /* Extendable / Table 7.5.2.1-6 */
2189
    { 311, "MBS Session N4 Control Information IE within PFCP Session Establishment Response"},     /* Extendable / Table 7.5.3.1-5 */
2190
    { 312, "MBSN4Resp-Flags"},                                      /* Extendable / Clause 8.2.211 */
2191
    { 313, "Tunnel Password"},                                      /* Variable Length / Clause 8.2.212 */
2192
    { 314, "Area Session ID"},                                      /* Fixed / Clause 8.2.213 */
2193
    { 315, "Peer UP Restart Report IE within PFCP Node Report Request"},     /* Extendable / Table 7.4.5.1-7 */
2194
    { 316, "DSCP to PPI Control Information IE within PFCP Session Establishment Request"},     /* Extendable / Table 7.5.2.1-6 */
2195
    { 317, "DSCP to PPI Mapping Information"},                      /* Extendable / Clause 8.2.214 */
2196
    { 318, "PFCPSDRsp-Flags"},                                      /* Extendable / Clause 8.2.215 */
2197
    { 319, "QER Indications"},                                      /* Extendable / Clause 8.2.216 */
2198
    { 320, "Vendor-Specific Node Report Type"},                     /* Extendable / Clause 8.2.217 */
2199
    { 321, "Configured Time Domain"},                               /* Extendable / Clause 8.2.218 */
2200
    { 322, "Metadata"},                                             /* Variable Length / Clause 8.2.219 */
2201
    { 323, "Traffic Parameter Measurement Control Information"},    /* Extendable / Table 7.5.2.9-5 */
2202
    { 324, "Traffic Parameter Measurement Report"},                 /* Extendable / Table 7.5.8.6-4 */
2203
    { 325, "Traffic Parameter Threshold"},                          /* Extendable / Clause 8.2.220 */
2204
    { 326, "DL Periodicity"},                                       /* Extendable / Clause 8.2.221 */
2205
    { 327, "N6 Jitter Measurement"},                                /* Extendable / Clause 8.2.222 */
2206
    { 328, "Traffic Parameter Measurement Indication"},             /* Extendable / Clause 8.2.223 */
2207
    { 329, "UL Periodicity"},                                       /* Extendable / Clause 8.2.224 */
2208
    { 330, "MPQUIC Control Information"},                           /* Extendable / Clause 8.2.225 */
2209
    { 331, "MPQUIC Parameters"},                                    /* Extendable / Table 7.5.3.7-5 */
2210
    { 332, "MPQUIC Address Information"},                           /* Extendable / Clause 8.2.226 */
2211
    { 333, "Transport Mode"},                                       /* Extendable / Clause 8.2.227 */
2212
    { 334, "Protocol Description"},                                 /* Extendable / Table 7.5.2.2-7 */
2213
    { 335, "Reporting Suggestion Info"},                            /* Extendable / Clause 8.2.289 */
2214
    { 336, "TL-Container"},                                         /* Variable Length / Clause 8.2.230 */
2215
    { 337, "Measurement Indication"},                               /* Extendable / Clause 8.2.231 */
2216
    { 338, "HPLMN S-NSSAI"},                                        /* Fixed Length / Clause 8.2.232 */
2217
    { 339, "Media Transport Protocol"},                             /* Extendable / Clause 8.2.233 */
2218
    { 340, "RTP Header Extension Information"},                     /* Extendable / Table 7.5.2.2-8 */
2219
    { 341, "RTP Payload Information"},                              /* Extendable / Table 7.5.2.2-9 */
2220
    { 342, "RTP Header Extension Type"},                            /* Fixed Length / Clause 8.2.234 */
2221
    { 343, "RTP Header Extension ID"},                              /* Fixed Length / Clause 8.2.235 */
2222
    { 344, "RTP Payload Type"},                                     /* Fixed Length / Clause 8.2.236 */
2223
    { 345, "RTP Payload Format"},                                   /* Fixed Length / Clause 8.2.237 */
2224
    { 346, "Extended DL Buffering Notification Policy"},            /* Extendable / Clause 8.2.238 */
2225
    { 347, "MT-SDT Control Information"},                           /* Extendable / Clause 8.2.239 */
2226
    { 348, "Reporting Thresholds"},                                 /* Extendable / Clause 8.2.240 */
2227
    { 349, "RTP Header Extension Additional Information"},          /* Extendable / Clause 8.2.241 */
2228
    { 350, "Mapped N6 IP Address"},                                 /* Extendable / Clause 8.2.242 */
2229
    { 351, "N6 Routing Information"},                               /* Extendable / Clause 8.2.243 */
2230
    { 352, "URI"},                                                  /* Variable Length / Clause 8.2.244 */
2231
    { 353, "UE Level Measurements Configuration"},                  /* Extendable / Clause 8.2.245 */
2232
    { 354, "N6 Delay Measurement Protocols"},                       /*  Extendable / Clause 8.2.246 1 */
2233
    { 355, "N6 Delay Measurement Control Information"},             /*  Extendable / Table 7.4.4.1.4-1  Not Applicable */
2234
    { 356, "N6 Delay Measurement Report (PFCP Node Report Request)"},       /*  Extendable / Table 7.4.5.1.8-1  Not Applicable */
2235
    { 357, "N6 Delay Measurement Information"},                     /*  Extendable / Clause 8.2.247 1 */
2236
    { 358, "Measurement Endpoint Address"},                         /*  Extendable / Clause 8.2.248 1 */
2237
    { 359, "Operator Configurable UPF Capability"},                 /*  Variable / Clause 8.2.249 Not Applicable */
2238
    { 360, "Packet Inspection functionality"},                      /*  Extendable / Clause 8.2.250 1 */
2239
    { 361, "Header Handling Control Rule"},                         /*  Extendable / Table 7.5.2.3-7  Not Applicable */
2240
    { 362, "Header Handling Reporting Control Info"},               /*  Extendable / Table 7.5.2.3-8  Not Applicable */
2241
    { 363, "Header Handling Control information"},                  /*  Extendable / Table  7.5.2.3-9 Not Applicable */
2242
    { 364, "Header Detection Reference"},                           /*  Variable Length / Clause 8.2.251  Not Applicable */
2243
    { 365, "Header Detection Support Information"},                 /*  Variable Length / Clause 8.2.252  Not Applicable */
2244
    { 366, "Reporting Endpoint ID"},                                /*  Fixed / Clause 8.2.253  1 */
2245
    { 367, "Header Handling Control Reference"},                    /*  Variable Length / Clause 8.2.254  Not Applicable */
2246
    { 368, "Header Handling Action"},                               /*  Fixed Length / Clause 8.2.255 1 */
2247
    { 369, "Header Information"},                                   /*  Variable Length / Clause 8.2.256  Not Applicable */
2248
    { 370, "Header Value"},                                         /*  Variable Length / Clause 8.2.257  Not Applicable */
2249
    { 371, "Header Handling Condition"},                            /*  Fixed / Clause 8.2.258  1 */
2250
    { 372, "Header Handling Control ID"},                           /*  Fixed / Clause 8.2.259  1 */
2251
    { 373, "Header Handling Control Rule ID"},                      /*  Fixed / Clause 8.2.260  1 */
2252
    { 374, "On-path N6 Connection Information"},                    /*  Extendable / Clause 8.2.261 1 */
2253
    { 375, "Measurement Reporting Type"},                           /*  Extendable / Clause 8.2.262 1 */
2254
    { 376, "N6 Delay Measurement Failure Information"},             /*  Extendable / Clause 8.2.263 1 */
2255
    { 377, "N6 Delay Measurement Control Information ID"},          /*  Fixed / Clause 8.2.264  2 */
2256
    { 378, "Protocol Specific Configuration Parameters"},           /*  Extendable / Table 7.4.4.1.4-2  1 */
2257
    { 379, "Measurement Endpoint Port Number"},                     /*  Fixed Length / Clause 8.2.265 2 */
2258
    { 380, "Header Handling Reporting Indication"},                 /*  Extendable / Clause 8.2.266 1 */
2259
    { 381, "Can be used "},                                         /* */
2260
    { 382, "SMF Change Reason"},                                    /*  Extendable / Clause 8.2.267 1 */
2261
    { 383, "Extended Transport Level Marking"},                     /*  Extendable / Table 7.5.2.3-10 Not Applicable */
2262
    { 384, "PDU Set Importance"},                                   /*  Fixed / Clause 8.2.268  2 */
2263
    { 385, "MoQ Control Information"},                              /*  Extendable / Clause 8.2.269  */
2264
    { 386, "MoQ Information"},                                      /*  Extendable / Table 7.3.5.1-6  Not Applicable */
2265
    { 387, "MoQ Relay IP Address"},                                 /*  Extendable / Clause 8.2.270 1 */
2266
    { 388, "Media Related Information Transfer Info"},              /*  Extendable / Clause 8.2.271 1 */
2267
    { 389, "Reporting Control Information"},                        /*  Extendable / Clause 8.2.272 1 */
2268
    { 390, "Security Mode (STAMP)"},                                /*  Fixed / Clause 8.2.273  1 */
2269
    { 391, "HMAC Key (STAMP)"},                                     /*  Variable Length / Clause 8.2.274  Not Applicable */
2270
    { 392, "Security Mode (OWAMP or TWAMP)"},                       /*  Fixed / Clause 8.2.275  4 */
2271
    { 393, "Key ID and Shared Secret (OWAMP or TWAMP)"},            /*  Extendable / Clause 8.2.276 1 */
2272
    { 394, "Remaining Data Reporting Indication"},                  /*  Extendable / Clause 8.2.277 1 */
2273
    { 395, "Expedited Transfer Indication"},                        /*  Fixed / Clause 8.2.278  1 */
2274
    { 396, "Session Reflector Mode (STAMP)"},                       /*  Fixed / Clause 8.2.279  1 */
2275
    { 397, "PFD Partial Failure Information"},                      /*  Extendable / Table 7.4.3.2-2  Not Applicable */
2276
    { 398, "Transport Level Marking Indications"},                  /*  Fixed / Clause 8.2.280  1 */
2277
    { 399, "Redundant N3/N9 Transmission Information"},             /*  Extendable / Table 7.5.8.6-5  Not Applicable */
2278
    { 400, "Local N3/N9 Tunnel Information"},                       /*  Extendable / Table 7.5.8.6-6  Not Applicable */
2279
    { 401, "Remote N3/N9 Tunnel Information"},                      /*  Extendable / Table 7.5.8.6-7  Not Applicable */
2280
    { 402, "Binding Indication"},                                   /*  Variable / Clause 8.2.281 */
2281
    { 403, "PDU Set Importance for N6-unmarked PDUs"},              /*  Fixed / Clause 8.2.282 */
2282
    //404 to 32767 Spare. For future use.
2283
    //32768 to 65535 Vendor-specific IEs.
2284
    {0, NULL}
2285
};
2286
2287
static value_string_ext pfcp_ie_type_ext = VALUE_STRING_EXT_INIT(pfcp_ie_type);
2288
2289
/* PFCP Session funcs*/
2290
static unsigned
2291
pfcp_info_hash(const void *key)
2292
0
{
2293
0
    const pfcp_info_t *k = (const pfcp_info_t *)key;
2294
2295
    /* The SEID is likely unique, so just use it. */
2296
0
    return g_int_hash(&k->seid);
2297
0
}
2298
2299
static gboolean
2300
pfcp_info_equal(const void *key1, const void *key2)
2301
0
{
2302
0
    const pfcp_info_t *a = (const pfcp_info_t *)key1;
2303
0
    const pfcp_info_t *b = (const pfcp_info_t *)key2;
2304
2305
0
    return (a->seid == b->seid && (cmp_address(&a->addr, &b->addr) == 0));
2306
0
}
2307
2308
static uint32_t
2309
0
pfcp_get_frame(address ip, uint64_t seid, uint32_t *frame) {
2310
0
    pfcp_info_t info;
2311
0
    uint32_t *value;
2312
2313
0
    info.seid = seid;
2314
0
    copy_address_shallow(&info.addr, &ip);
2315
0
    value = wmem_map_lookup(pfcp_frame_map, &info);
2316
0
    if (value != NULL) {
2317
0
        *frame = GPOINTER_TO_UINT(value);
2318
0
        return 1;
2319
0
    }
2320
0
    return 0;
2321
0
}
2322
2323
static gboolean
2324
0
pfcp_frame_equal(void *key _U_, void *value, void *data){
2325
0
    uint32_t frame = GPOINTER_TO_UINT(data);
2326
2327
0
    return (GPOINTER_TO_UINT(value) == frame);
2328
0
}
2329
2330
static void
2331
0
pfcp_remove_frame_info(uint32_t f) {
2332
    /* XXX: This iterates through the entire map and it is slow if done
2333
     * often. For large files with lots of removals, there are better
2334
     * alternatives, e.g. marking sessions as expired and then periodically
2335
     * removing all expired sessions from the map, or using a bijective
2336
     * map to coordinate removals.
2337
     */
2338
0
    wmem_map_foreach_remove(pfcp_frame_map, pfcp_frame_equal, GUINT_TO_POINTER(f));
2339
0
}
2340
2341
2342
static void
2343
0
pfcp_add_session(uint32_t frame, uint32_t session) {
2344
0
    wmem_map_insert(pfcp_session_table, GUINT_TO_POINTER(frame), GUINT_TO_POINTER(session));
2345
2346
0
}
2347
2348
static bool
2349
0
pfcp_seid_exists(uint64_t seid, wmem_list_t *seid_list) {
2350
0
    wmem_list_frame_t *elem;
2351
0
    uint32_t *info;
2352
0
    bool found;
2353
0
    found = false;
2354
0
    elem = wmem_list_head(seid_list);
2355
0
    while (!found && elem) {
2356
0
        info = (uint32_t*)wmem_list_frame_data(elem);
2357
0
        found = *info == seid;
2358
0
        elem = wmem_list_frame_next(elem);
2359
0
    }
2360
0
    return found;
2361
0
}
2362
2363
static bool
2364
0
pfcp_ip_exists(address ip, wmem_list_t *ip_list) {
2365
0
    wmem_list_frame_t *elem;
2366
0
    address *info;
2367
0
    bool found;
2368
0
    found = false;
2369
0
    elem = wmem_list_head(ip_list);
2370
0
    while (!found && elem) {
2371
0
        info = (address*)wmem_list_frame_data(elem);
2372
0
        found = addresses_equal(info, &ip);
2373
0
        elem = wmem_list_frame_next(elem);
2374
0
    }
2375
0
    return found;
2376
0
}
2377
2378
/* wmem_map_foreach() callback used in fill_map() */
2379
static void
2380
0
pfcp_remove_session_from_table(void *key, void *val, void *userdata) {
2381
0
    unsigned fr = GPOINTER_TO_UINT(key);
2382
0
    unsigned session = GPOINTER_TO_UINT(val);
2383
0
    unsigned remove_session = GPOINTER_TO_UINT(userdata);
2384
2385
    /* If it's the session we are looking for, we remove all the frame information */
2386
0
    if (session == remove_session) {
2387
0
        pfcp_remove_frame_info(fr);
2388
0
    }
2389
0
}
2390
2391
static void
2392
0
pfcp_fill_map(wmem_list_t *seid_list, wmem_list_t *ip_list, uint32_t frame) {
2393
0
    wmem_list_frame_t *elem_ip, *elem_seid;
2394
0
    pfcp_info_t *pfcp_info;
2395
0
    uint64_t seid;
2396
0
    uint32_t session;
2397
0
    address *ip;
2398
2399
0
    elem_ip = wmem_list_head(ip_list);
2400
0
    while (elem_ip) {
2401
0
        ip = (address*)wmem_list_frame_data(elem_ip);
2402
        /* We loop over the seid list */
2403
0
        elem_seid = wmem_list_head(seid_list);
2404
0
        while (elem_seid) {
2405
0
            seid = *(uint64_t*)wmem_list_frame_data(elem_seid);
2406
0
            pfcp_info = wmem_new0(wmem_file_scope(), pfcp_info_t);
2407
0
            pfcp_info->seid = seid;
2408
0
            copy_address_wmem(wmem_file_scope(), &pfcp_info->addr, ip);
2409
0
            if (wmem_map_lookup(pfcp_frame_map, pfcp_info)) {
2410
                /* If the seid and ip already maps to a session, that means
2411
                 * that we need to remove old info about that session */
2412
                /* We look for its session ID */
2413
0
                session = GPOINTER_TO_UINT(wmem_map_lookup(pfcp_session_table, GUINT_TO_POINTER(frame)));
2414
0
                if (session) {
2415
                    /* If the msg has the same session ID and it's not the upd req we have to remove its info */
2416
0
                    wmem_map_foreach(pfcp_session_table, pfcp_remove_session_from_table, GUINT_TO_POINTER(session));
2417
0
                }
2418
0
            }
2419
0
            wmem_map_insert(pfcp_frame_map, pfcp_info, GUINT_TO_POINTER(frame));
2420
0
            elem_seid = wmem_list_frame_next(elem_seid);
2421
0
        }
2422
0
        elem_ip = wmem_list_frame_next(elem_ip);
2423
0
    }
2424
0
}
2425
2426
static bool
2427
0
pfcp_is_cause_accepted(uint8_t cause) {
2428
0
    return cause == 1;
2429
0
}
2430
2431
/* Data structure attached to a conversation,
2432
*  to keep track of request/response-pairs
2433
*/
2434
typedef struct pfcp_conv_info_t {
2435
    wmem_map_t             *unmatched;
2436
    wmem_map_t             *matched;
2437
} pfcp_conv_info_t;
2438
2439
/* structure used to track responses to requests using sequence number */
2440
typedef struct pfcp_msg_hash_entry {
2441
    bool is_request;        /* true/false */
2442
    uint32_t req_frame;     /* frame with request */
2443
    nstime_t req_time;      /* req time */
2444
    uint32_t rep_frame;     /* frame with reply */
2445
    unsigned seq_nr;        /* sequence number */
2446
    unsigned msgtype;       /* messagetype */
2447
} pfcp_msg_hash_t;
2448
2449
static unsigned
2450
pfcp_sn_hash(const void *k)
2451
183
{
2452
183
    const pfcp_msg_hash_t *key = (const pfcp_msg_hash_t *)k;
2453
2454
183
    return key->seq_nr;
2455
183
}
2456
2457
static gboolean
2458
pfcp_sn_equal_matched(const void *k1, const void *k2)
2459
20
{
2460
20
    const pfcp_msg_hash_t *key1 = (const pfcp_msg_hash_t *)k1;
2461
20
    const pfcp_msg_hash_t *key2 = (const pfcp_msg_hash_t *)k2;
2462
2463
20
    if (key1->req_frame && key2->req_frame && (key1->req_frame != key2->req_frame)) {
2464
15
        return FALSE;
2465
15
    }
2466
2467
5
    if (key1->rep_frame && key2->rep_frame && (key1->rep_frame != key2->rep_frame)) {
2468
5
        return FALSE;
2469
5
    }
2470
2471
0
    if (key1->seq_nr == key2->seq_nr) {
2472
0
        if (pref_pair_matching_max_interval_ms) {
2473
0
            nstime_t delta;
2474
0
            nstime_delta(&delta, &key1->req_time, &key2->req_time);
2475
0
            double diff = fabs(nstime_to_msec(&delta));
2476
0
            return diff < pref_pair_matching_max_interval_ms;
2477
0
        }
2478
2479
0
        return TRUE;
2480
0
    }
2481
0
    return FALSE;
2482
0
}
2483
2484
static gboolean
2485
pfcp_sn_equal_unmatched(const void *k1, const void *k2)
2486
37
{
2487
37
    const pfcp_msg_hash_t *key1 = (const pfcp_msg_hash_t *)k1;
2488
37
    const pfcp_msg_hash_t *key2 = (const pfcp_msg_hash_t *)k2;
2489
2490
37
    if (key1->seq_nr == key2->seq_nr) {
2491
37
        if (pref_pair_matching_max_interval_ms) {
2492
0
            nstime_t delta;
2493
0
            nstime_delta(&delta, &key1->req_time, &key2->req_time);
2494
0
            double diff = fabs(nstime_to_msec(&delta));
2495
0
            return diff < pref_pair_matching_max_interval_ms;
2496
0
        }
2497
2498
37
        return TRUE;
2499
37
    }
2500
0
    return FALSE;
2501
37
}
2502
2503
static GHashTable *pfcp_stat_msg_idx_hash;
2504
2505
static void
2506
pfcp_stat_init(struct register_srt* srt _U_, GArray*srt_array)
2507
0
{
2508
0
    if (pfcp_stat_msg_idx_hash != NULL) {
2509
0
        g_hash_table_destroy(pfcp_stat_msg_idx_hash);
2510
0
    }
2511
0
    pfcp_stat_msg_idx_hash = g_hash_table_new(g_direct_hash, g_direct_equal);
2512
2513
0
    init_srt_table("PFCP Requests", NULL, srt_array, 0, NULL, NULL, NULL);
2514
0
}
2515
2516
static tap_packet_status
2517
pfcp_stat_packet(void *pss, packet_info *pinfo, epan_dissect_t *edt _U_, const void *prv, tap_flags_t flags _U_)
2518
0
{
2519
0
    unsigned i = 0;
2520
0
    srt_stat_table *pfcp_srt_table;
2521
0
    srt_data_t *srt_data = (srt_data_t*)pss;
2522
0
    const pfcp_msg_hash_t *pcrp = (const pfcp_msg_hash_t *)prv;
2523
0
    int idx = 0;
2524
2525
    /* We are only interested in matched reply packets. */
2526
0
    if (pcrp->is_request) {
2527
0
        return TAP_PACKET_DONT_REDRAW;
2528
0
    }
2529
0
    if (!pcrp->req_frame) {
2530
0
        return TAP_PACKET_DONT_REDRAW;
2531
0
    }
2532
2533
0
    pfcp_srt_table = g_array_index(srt_data->srt_array, srt_stat_table*, i);
2534
2535
    /* XXX: It would be nice if srt_table handled hashing so that the
2536
     * real procedure number could be displayed in the table without
2537
     * having to add empty rows for unused message types and responses
2538
     * (requests and responses have different message types, and we
2539
     * only use the request value.)
2540
     */
2541
0
    idx = GPOINTER_TO_UINT(g_hash_table_lookup(pfcp_stat_msg_idx_hash, GUINT_TO_POINTER(pcrp->msgtype)));
2542
2543
    /* Store the row value incremented by 1 to distinguish 0 from NULL */
2544
0
    if (idx == 0) {
2545
0
        idx = g_hash_table_size(pfcp_stat_msg_idx_hash);
2546
0
        g_hash_table_insert(pfcp_stat_msg_idx_hash, GUINT_TO_POINTER(pcrp->msgtype), GUINT_TO_POINTER(idx + 1));
2547
0
        init_srt_table_row(pfcp_srt_table, idx, val_to_str_ext_const(pcrp->msgtype, &pfcp_message_type_ext, "Unknown"));
2548
0
    } else {
2549
0
        idx -= 1;
2550
0
    }
2551
2552
0
    add_srt_table_data(pfcp_srt_table, idx, &pcrp->req_time, pinfo);
2553
2554
0
    return TAP_PACKET_REDRAW;
2555
0
}
2556
2557
static void
2558
pfcp_track_session(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, pfcp_hdr_t * pfcp_hdr, pfcp_session_args_t *args)
2559
0
{
2560
0
    uint32_t session, frame_seid_cp;
2561
0
    proto_item *it;
2562
0
    char *imsi = NULL;
2563
2564
    /* PFCP session */
2565
0
    if (!PINFO_FD_VISITED(pinfo)) {
2566
        /* If the message does not have any session ID */
2567
0
        session = GPOINTER_TO_UINT(wmem_map_lookup(pfcp_session_table, GUINT_TO_POINTER(pinfo->num)));
2568
0
        if (!session) {
2569
            /* If the message is not a SEREQ, SERES, SMREQ, SERES, SDREQ, SDRES, SRREQ or SRRES
2570
             * then we remove its information from seid and ip lists
2571
             * XXX: Wouldn't it be better not to insert this information
2572
             * in the first place for other message types, instead of
2573
             * inserting it and then immediately removing it?
2574
             * At the very least, it would be faster to iterate through the
2575
             * seid_list and ip_list and remove via keys rather than doing
2576
             * removal through a reverse lookup.
2577
             */
2578
0
            if ((pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST && pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE &&
2579
0
                pfcp_hdr->message != PFCP_MSG_SESSION_MODIFICATION_REQUEST && pfcp_hdr->message != PFCP_MSG_SESSION_MODIFICATION_RESPONSE &&
2580
0
                pfcp_hdr->message != PFCP_MSG_SESSION_DELETION_REQUEST && pfcp_hdr->message != PFCP_MSG_SESSION_DELETION_RESPONSE &&
2581
0
                pfcp_hdr->message != PFCP_MSG_SESSION_REPORT_REQUEST && pfcp_hdr->message != PFCP_MSG_SESSION_REPORT_RESPONSE)) {
2582
                /* If the lists are not empty*/
2583
0
                if (wmem_list_count(args->seid_list) && wmem_list_count(args->ip_list)) {
2584
0
                    pfcp_remove_frame_info(pinfo->num);
2585
0
                }
2586
0
            }
2587
0
            if (pfcp_hdr->message == PFCP_MSG_SESSION_ESTABLISHMENT_REQUEST){
2588
                /* If SEREQ and not already in the list then we create a new session*/
2589
0
                pfcp_add_session(pinfo->num, pfcp_session_count);
2590
2591
0
                if (args->imsi) {
2592
0
                    imsi = wmem_strdup(wmem_file_scope(), args->imsi);
2593
0
                    wmem_map_insert(pfcp_session_imsi, GUINT_TO_POINTER(pfcp_session_count++), imsi);
2594
0
                }
2595
2596
0
            }
2597
0
            else if (pfcp_hdr->message != PFCP_MSG_SESSION_ESTABLISHMENT_RESPONSE) {
2598
                /* 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
2599
                the corresponding session ID */
2600
0
                if ((pfcp_get_frame(pinfo->dst, pfcp_hdr->seid, &frame_seid_cp) == 1)) {
2601
                    /* Then we have to set its session ID */
2602
0
                    session = GPOINTER_TO_UINT(wmem_map_lookup(pfcp_session_table, GUINT_TO_POINTER(frame_seid_cp)));
2603
0
                    if (session) {
2604
                        /* We add the corresponding session to the list so that when a response came we can associate its session ID*/
2605
0
                        pfcp_add_session(pinfo->num, session);
2606
2607
0
                        if (args->imsi) {
2608
0
                            imsi = wmem_strdup(wmem_file_scope(), args->imsi);
2609
0
                            wmem_map_insert(pfcp_session_imsi, GUINT_TO_POINTER(session), imsi);
2610
0
                        }
2611
2612
0
                    }
2613
0
                }
2614
0
            }
2615
0
        }
2616
0
    }
2617
2618
0
    if (tree) {
2619
0
        session = GPOINTER_TO_UINT(wmem_map_lookup(pfcp_session_table, GUINT_TO_POINTER(pinfo->num)));
2620
0
        if (session) {
2621
0
            it = proto_tree_add_uint(tree, hf_pfcp_session, tvb, 0, 0, session);
2622
0
            proto_item_set_generated(it);
2623
2624
0
            imsi = wmem_map_lookup(pfcp_session_imsi, GUINT_TO_POINTER(session));
2625
0
            if (imsi) {
2626
0
                add_assoc_imsi_item(tvb, tree, imsi);
2627
0
            }
2628
0
        }
2629
0
    }
2630
0
}
2631
2632
static void
2633
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_)
2634
41
{
2635
41
    proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_reserved, tvb, 0, length);
2636
41
}
2637
2638
static int dissect_pfcp_string_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int hf)
2639
0
{
2640
0
    char* string_value = NULL;
2641
0
    proto_tree_add_item_ret_display_string(tree, hf, tvb, 0, -1, ENC_ASCII, pinfo->pool, &string_value);
2642
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", string_value);
2643
2644
0
    return tvb_reported_length(tvb);
2645
0
}
2646
2647
/* Functions for C-Tag and S-TAG
2648
 * See 8.2.94 and 8.2.95
2649
 */
2650
2651
/* From Tables G-2,3 of IEEE standard 802.1Q-2005 (and I-2,3,7 of 2011 and 2015 revisions) */
2652
static const value_string pfcp_vlan_tag_pcp_vals[] = {
2653
  { 0, "Best Effort (default), Drop Eligible"            },
2654
  { 1, "Best Effort (default)"                           },
2655
  { 2, "Critical Applications, Drop Eligible"            },
2656
  { 3, "Critical Applications"                           },
2657
  { 4, "Voice, < 10ms latency and jitter, Drop Eligible" },
2658
  { 5, "Voice, < 10ms latency and jitter"                },
2659
  { 6, "Internetwork Control"                            },
2660
  { 7, "Network Control"                                 },
2661
  { 0, NULL                                              }
2662
};
2663
2664
static const true_false_string tfs_eligible_ineligible = {
2665
    "Eligible",
2666
    "Ineligible"
2667
};
2668
2669
static int decode_pfcp_c_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset)
2670
6
{
2671
6
    static const crumb_spec_t pfcp_c_tag_cvid_crumbs[] = {
2672
6
        { 0, 4 },
2673
6
        { 8, 8 },
2674
6
        { 0, 0 }
2675
6
    };
2676
2677
6
    static int * const pfcp_c_tag_flags[] = {
2678
6
        &hf_pfcp_spare_b7_b3,
2679
6
        &hf_pfcp_c_tag_flags_b2_vid,
2680
6
        &hf_pfcp_c_tag_flags_b1_dei,
2681
6
        &hf_pfcp_c_tag_flags_b0_pcp,
2682
6
        NULL
2683
6
    };
2684
    /* Octet 5  Spare   VID   DEI   PCP */
2685
6
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_c_tag_flags, ENC_BIG_ENDIAN);
2686
6
    offset += 1;
2687
2688
    //  Octet     8     7     6     5     4     3     2     1
2689
    //    6    | C-VID value            |DEI|   PCP value     |
2690
    //    7    | C-VID value                                  |
2691
6
    proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_c_tag_cvid, tvb, offset << 3, pfcp_c_tag_cvid_crumbs, NULL);
2692
6
    proto_tree_add_item(tree, hf_pfcp_c_tag_dei_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
2693
6
    proto_tree_add_item(tree, hf_pfcp_c_tag_pcp_value, tvb, offset, 1, ENC_BIG_ENDIAN);
2694
6
    offset += 2;
2695
2696
6
    return offset;
2697
6
}
2698
2699
static int decode_pfcp_s_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset)
2700
5
{
2701
5
    static const crumb_spec_t pfcp_s_tag_svid_crumbs[] = {
2702
5
        { 0, 4 },
2703
5
        { 8, 8 },
2704
5
        { 0, 0 }
2705
5
    };
2706
2707
5
    static int * const pfcp_s_tag_flags[] = {
2708
5
        &hf_pfcp_spare_b7_b3,
2709
5
        &hf_pfcp_s_tag_flags_b2_vid,
2710
5
        &hf_pfcp_s_tag_flags_b1_dei,
2711
5
        &hf_pfcp_s_tag_flags_b0_pcp,
2712
5
        NULL
2713
5
    };
2714
    /* Octet 5  Spare   VID   DEI   PCP */
2715
5
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_s_tag_flags, ENC_BIG_ENDIAN);
2716
5
    offset += 1;
2717
2718
    //  Octet     8     7     6     5     4     3     2     1
2719
    //    6    | S-VID value            |DEI|   PCP value     |
2720
    //    7    | S-VID value                                  |
2721
5
    proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_s_tag_svid, tvb, offset << 3, pfcp_s_tag_svid_crumbs, NULL);
2722
5
    proto_tree_add_item(tree, hf_pfcp_s_tag_dei_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
2723
5
    proto_tree_add_item(tree, hf_pfcp_s_tag_pcp_value, tvb, offset, 1, ENC_BIG_ENDIAN);
2724
5
    offset += 2;
2725
2726
5
    return offset;
2727
5
}
2728
2729
/*
2730
 * 8.2.1    Cause
2731
 */
2732
static const value_string pfcp_cause_vals[] = {
2733
2734
    {  0, "Reserved" },
2735
    {  1, "Request accepted(success)" },
2736
    {  2, "More Usage Report to send" },
2737
    {  3, "Request partially accepted" },
2738
    /* 4 - 63 Spare. */
2739
    { 64, "Request rejected(reason not specified)" },
2740
    { 65, "Session context not found" },
2741
    { 66, "Mandatory IE missing" },
2742
    { 67, "Conditional IE missing" },
2743
    { 68, "Invalid length" },
2744
    { 69, "Mandatory IE incorrect" },
2745
    { 70, "Invalid Forwarding Policy" },
2746
    { 71, "Invalid F-TEID allocation option" },
2747
    { 72, "No established PFCP Association" },
2748
    { 73, "Rule creation / modification Failure" },
2749
    { 74, "PFCP entity in congestion" },
2750
    { 75, "No resources available" },
2751
    { 76, "Service not supported" },
2752
    { 77, "System failure" },
2753
    { 78, "Redirection Requested" },
2754
    { 79, "All dynamic addresses are occupied" },
2755
    { 80, "Unknown Pre-defined Rule" },
2756
    { 81, "Unknown Application ID" },
2757
    { 82, "L2TP tunnel Establishment failure" },
2758
    { 83, "L2TP session Establishment failure" },
2759
    { 84, "L2TP tunnel release" },
2760
    { 85, "L2TP session release" },
2761
    { 86, "PFCP session restoration failure" },
2762
    { 87, "L2TP tunnel Establishment failure - Tunnel Auth Failure"},
2763
    { 88, "L2TP Session Establishment failure - Session Auth Failure"},
2764
    { 89, "L2TP tunnel Establishment failure - LNS not reachable"},
2765
    { 90, "PFD Contents Syntax Error"},
2766
    { 91, "PFD Contents Semantics Error"},
2767
    { 92, "PFD Application Id Unknown"},
2768
    /* 93 to 255 Spare for future use in a response message. */
2769
    {0, NULL}
2770
};
2771
2772
static void
2773
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)
2774
1
{
2775
1
    uint32_t value;
2776
    /* Octet 5 Cause value */
2777
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp2_cause, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
2778
1
    if (g_pfcp_session) {
2779
0
        args->last_cause = (uint8_t)value;
2780
0
    }
2781
1
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_cause_vals, "Unknown"));
2782
1
}
2783
2784
/*
2785
 * 8.2.2    Source Interface
2786
 */
2787
static const value_string pfcp_source_interface_vals[] = {
2788
2789
    { 0, "Access" },
2790
    { 1, "Core" },
2791
    { 2, "SGi-LAN/N6-LAN" },
2792
    { 3, "CP-function" },
2793
    { 4, "5G VN Internal" },
2794
    { 0, NULL }
2795
};
2796
static int
2797
decode_pfcp_source_interface(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, unsigned offset)
2798
1
{
2799
1
    uint32_t value;
2800
    /* Octet 5 Spare    Interface value */
2801
1
    proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
2802
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_source_interface, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
2803
1
    offset += 1;
2804
2805
1
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_source_interface_vals, "Unknown"));
2806
2807
1
    return offset;
2808
2809
1
}
2810
static void
2811
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_)
2812
1
{
2813
1
    unsigned offset = 0;
2814
2815
1
    offset = decode_pfcp_source_interface(tvb, pinfo, tree, item, offset);
2816
2817
1
    if (offset < length) {
2818
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
2819
1
    }
2820
2821
1
}
2822
2823
/*
2824
 * 8.2.3    F-TEID
2825
 */
2826
static void
2827
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_)
2828
3
{
2829
3
    unsigned offset = 0;
2830
3
    uint64_t fteid_flags_val;
2831
2832
3
    static int * const pfcp_fteid_flags[] = {
2833
3
        &hf_pfcp_fteid_flg_spare,
2834
3
        &hf_pfcp_fteid_flg_b3_ch_id,
2835
3
        &hf_pfcp_fteid_flg_b2_ch,
2836
3
        &hf_pfcp_fteid_flg_b1_v6,
2837
3
        &hf_pfcp_fteid_flg_b0_v4,
2838
3
        NULL
2839
3
    };
2840
    /* Octet 5  Spare  Spare  Spare  Spare  CHID  CH  V6  V4*/
2841
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_fteid_flags, ENC_BIG_ENDIAN, &fteid_flags_val);
2842
3
    offset += 1;
2843
    /* The following flags are coded within Octet 5:
2844
     * 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,
2845
     *         otherwise the IPv4 address field shall not be present.
2846
     * 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,
2847
     *         otherwise the IPv6 address field shall not be present.
2848
     * Bit 3 - CH (CHOOSE): If this bit is set to "1", then the TEID, IPv4 address and IPv6 address fields shall not be
2849
     *         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.
2850
     *         This bit shall only be set by the CP function.
2851
     * Bit 4 - CHID (CHOOSE_ID):If this bit is set to "1", then the UP function shall assign the same F-TEID to the
2852
     *         PDRs requested to be created in a PFCP Session Establishment Request or PFCP Session Modification Request with
2853
     *         the same CHOOSE ID value.
2854
     *         This bit may only be set to "1" if the CH bit is set to "1".
2855
     *         This bit shall only be set by the CP function.
2856
     */
2857
2858
3
    if ((fteid_flags_val & 0x4) == 4) {
2859
2
        if ((fteid_flags_val & 0x8) == 8) {
2860
1
            proto_tree_add_item(tree, hf_pfcp_f_teid_ch_id, tvb, offset, 1, ENC_NA);
2861
1
            offset += 1;
2862
1
        }
2863
2
    } else {
2864
2865
        /* Octet 6 to 9    TEID */
2866
1
        proto_tree_add_item(tree, hf_pfcp_f_teid_teid, tvb, offset, 4, ENC_BIG_ENDIAN);
2867
1
        proto_item_append_text(item, "TEID: 0x%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 4));
2868
1
        offset += 4;
2869
2870
1
        if ((fteid_flags_val & 0x1) == 1) {
2871
            /* m to (m+3)    IPv4 address */
2872
0
            proto_tree_add_item(tree, hf_pfcp_f_teid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
2873
0
            proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
2874
0
            offset += 4;
2875
0
        }
2876
1
        if ((fteid_flags_val & 0x2) == 2) {
2877
            /* p to (p+15)   IPv6 address */
2878
0
            proto_tree_add_item(tree, hf_pfcp_f_teid_ipv6, tvb, offset, 16, ENC_NA);
2879
0
            proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
2880
0
            offset += 16;
2881
0
        }
2882
        /* If the value of CH bit is set to "0", but the value of CHID bit is "1" */
2883
1
        if ((fteid_flags_val & 0x8) == 8) {
2884
0
            proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
2885
0
        }
2886
1
    }
2887
3
    if (offset < length) {
2888
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
2889
3
    }
2890
2891
3
}
2892
/*
2893
 * 8.2.4    Network Instance
2894
 */
2895
static int
2896
decode_pfcp_network_instance(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset, int length)
2897
3
{
2898
2899
3
    int      name_len;
2900
2901
3
    if (length > 0) {
2902
3
        name_len = tvb_get_uint8(tvb, offset);
2903
3
        if (name_len < 0x41) {
2904
            /* APN */
2905
2
            char *apn = NULL;
2906
2907
2
            name_len = tvb_get_uint8(tvb, offset);
2908
2909
2
            if (name_len < 0x20) {
2910
1
                apn = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_APN_STR);
2911
1
            } else {
2912
1
                apn = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset, length, ENC_ASCII);
2913
1
            }
2914
2
            proto_tree_add_string(tree, hf_pfcp_network_instance, tvb, offset, length, apn);
2915
2
            proto_item_append_text(item, "%s", apn);
2916
2917
2
        } else {
2918
            /* Domain name*/
2919
1
            const uint8_t* string_value;
2920
1
            proto_tree_add_item_ret_string(tree, hf_pfcp_network_instance, tvb, offset, length, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
2921
1
            proto_item_append_text(item, "%s", string_value);
2922
1
        }
2923
3
    }
2924
2925
3
    return offset + length;
2926
3
}
2927
static void
2928
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_)
2929
2
{
2930
2
    int      offset = 0;
2931
2932
    /* Octet 5   Network Instance
2933
     * The Network instance field shall be encoded as an OctetString and shall contain an identifier
2934
     * which uniquely identifies a particular Network instance (e.g. PDN instance) in the UP function.
2935
     * It may be encoded as a Domain Name or an Access Point Name (APN)
2936
     */
2937
     /* Test for Printable character or length indicator(APN), assume first character of Domain name >= 0x41 */
2938
2939
2
    decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, length);
2940
2941
2
}
2942
2943
/*
2944
 * 8.2.5    SDF Filter
2945
 */
2946
static void
2947
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_)
2948
3
{
2949
3
    unsigned offset = 0;
2950
3
    uint64_t flags_val;
2951
3
    uint32_t fd_length;
2952
3
    proto_tree *flow_desc_tree, *tos_tree, *spi_tree, *flow_label_tree, *sdf_filter_id_tree;
2953
2954
3
    static int * const pfcp_sdf_filter_flags[] = {
2955
3
        &hf_pfcp_spare_h1,
2956
3
        &hf_pfcp_sdf_filter_flags_b4_bid,
2957
3
        &hf_pfcp_sdf_filter_flags_b3_fl,
2958
3
        &hf_pfcp_sdf_filter_flags_b2_spi,
2959
3
        &hf_pfcp_sdf_filter_flags_b1_ttc,
2960
3
        &hf_pfcp_sdf_filter_flags_b0_fd,
2961
3
        NULL
2962
3
    };
2963
    /* Octet 5  Spare   FL  SPI TTC FD*/
2964
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_sdf_filter_flags, ENC_BIG_ENDIAN, &flags_val);
2965
3
    offset += 1;
2966
    /* Octet 6 Spare*/
2967
3
    proto_tree_add_item(tree, hf_pfcp_spare, tvb, offset, 1, ENC_BIG_ENDIAN);
2968
3
    offset += 1;
2969
2970
3
    if ((flags_val & 0x1) == 1) {
2971
        /* FD (Flow Description): If this bit is set to "1",
2972
         * then the Length of Flow Description and the Flow Description fields shall be present
2973
         */
2974
1
        flow_desc_tree = proto_item_add_subtree(item, ett_pfcp_flow_desc);
2975
        /* m to (m+1)    Length of Flow Description */
2976
1
        proto_tree_add_item_ret_uint(flow_desc_tree, hf_pfcp_flow_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN, &fd_length);
2977
1
        offset += 2;
2978
        /* Flow Description
2979
         * The Flow Description field, when present, shall be encoded as an OctetString
2980
         * as specified in subclause 5.4.2 of 3GPP TS 29.212
2981
         */
2982
1
        proto_tree_add_item(flow_desc_tree, hf_pfcp_flow_desc, tvb, offset, fd_length, ENC_ASCII);
2983
1
        offset += fd_length;
2984
1
    }
2985
3
    if ((flags_val & 0x2) == 2) {
2986
        /* TTC (ToS Traffic Class): If this bit is set to "1", then the ToS Traffic Class field shall be present */
2987
        /* ToS Traffic Class field, when present, shall be encoded as an OctetString on two octets
2988
         * as specified in subclause 5.3.15 of 3GPP TS 29.212
2989
         */
2990
1
        tos_tree = proto_item_add_subtree(item, ett_pfcp_tos);
2991
1
        proto_tree_add_item(tos_tree, hf_pfcp_traffic_class, tvb, offset, 1, ENC_BIG_ENDIAN);
2992
1
        offset += 1;
2993
1
        proto_tree_add_item(tos_tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN);
2994
1
        offset += 1;
2995
1
    }
2996
2997
3
    if ((flags_val & 0x4) == 4) {
2998
        /* SPI (The Security Parameter Index) field, when present, shall be encoded as an OctetString on four octets and shall
2999
         * contain the IPsec security parameter index (which is a 32-bit field),
3000
         * as specified in subclause 5.3.51 of 3GPP TS 29.212
3001
         */
3002
2
        spi_tree = proto_item_add_subtree(item, ett_pfcp_spi);
3003
2
        proto_tree_add_item(spi_tree, hf_pfcp_spi, tvb, offset, 4, ENC_BIG_ENDIAN);
3004
2
        offset += 4;
3005
2
    }
3006
3
    if ((flags_val & 0x8) == 8) {
3007
        /* FL (Flow Label), when present, shall be encoded as an OctetString on 3 octets as specified in
3008
         * subclause 5.3.52 of 3GPP TS 29.212 and shall contain an IPv6 flow label (which is a 20-bit field).
3009
         * The bits 8 to 5 of the octet "v" shall be spare and set to zero, and the remaining 20 bits shall
3010
         * contain the IPv6 flow label.*/
3011
0
        flow_label_tree = proto_item_add_subtree(item, ett_pfcp_flow_label);
3012
0
        proto_tree_add_bits_item(flow_label_tree, hf_pfcp_flow_label_spare_bit, tvb, (offset<<3), 4, ENC_BIG_ENDIAN);
3013
0
        proto_tree_add_item(flow_label_tree, hf_pfcp_flow_label, tvb, offset, 3, ENC_BIG_ENDIAN);
3014
0
        offset += 3;
3015
0
    }
3016
3
    if ((flags_val & 0x10) == 16) {
3017
        /* The SDF Filter ID, when present, shall be encoded as an Unsigned32 binary integer value.
3018
         * It shall uniquely identify an SDF Filter among all the SDF Filters provisioned for a given PFCP Session. */
3019
0
        sdf_filter_id_tree = proto_item_add_subtree(item, ett_pfcp_sdf_filter_id);
3020
0
        proto_tree_add_item(sdf_filter_id_tree, hf_pfcp_sdf_filter_id, tvb, offset, 4, ENC_BIG_ENDIAN);
3021
0
        offset += 4;
3022
0
    }
3023
3024
3
    if (offset < length) {
3025
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3026
3
    }
3027
3
}
3028
/*
3029
 * 8.2.6    Application ID
3030
 */
3031
static void
3032
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_)
3033
2
{
3034
2
    unsigned offset = 0;
3035
3036
    /* Octet 5 to (n+4) Application Identifier
3037
    * The Application Identifier shall be encoded as an OctetString (see 3GPP TS 29.212)
3038
    */
3039
2
    if (tvb_ascii_isprint(tvb, offset, length))
3040
0
    {
3041
0
        const uint8_t* string_value;
3042
0
        proto_tree_add_item_ret_string(tree, hf_pfcp_application_id_str, tvb, offset, length, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
3043
0
        proto_item_append_text(item, "%s", string_value);
3044
0
    }
3045
2
    else
3046
2
    {
3047
2
        proto_tree_add_item(tree, hf_pfcp_application_id, tvb, offset, length, ENC_NA);
3048
2
    }
3049
2
}
3050
/*
3051
 * 8.2.7    Gate Status
3052
 */
3053
static const value_string pfcp_gate_status_vals[] = {
3054
    { 0, "OPEN" },
3055
    { 1, "CLOSED" },
3056
    { 0, NULL }
3057
};
3058
3059
3060
static void
3061
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_)
3062
1
{
3063
1
    unsigned offset = 0;
3064
3065
1
    static int * const pfcp_gate_status_flags[] = {
3066
1
        &hf_pfcp_gate_status_b3b2_ulgate,
3067
1
        &hf_pfcp_gate_status_b0b1_dlgate,
3068
1
        NULL
3069
1
    };
3070
    /* Octet 5  Spare   UL Gate DL Gate */
3071
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_gate_status_flags, ENC_BIG_ENDIAN);
3072
1
    offset += 1;
3073
3074
1
    if (offset < length) {
3075
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3076
1
    }
3077
3078
1
}
3079
3080
3081
/*
3082
 * 8.2.8    MBR
3083
 */
3084
static void
3085
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_)
3086
0
{
3087
0
    unsigned offset = 0;
3088
0
    int len1 = (length != 10) ? length/2 : 5;
3089
3090
    /* In case length is not in accordance with documentation */
3091
0
    if ( length != 10) {
3092
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
3093
0
    }
3094
3095
    /* 5 to 9   UL MBR
3096
    * The UL/DL MBR fields shall be encoded as kilobits per second (1 kbps = 1000 bps) in binary value
3097
    */
3098
0
    proto_tree_add_item(tree, hf_pfcp_ul_mbr, tvb, offset, len1, ENC_BIG_ENDIAN);
3099
0
    offset += len1;
3100
3101
    /* 10 to 14 DL MBR */
3102
0
    proto_tree_add_item(tree, hf_pfcp_dl_mbr, tvb, offset, len1, ENC_BIG_ENDIAN);
3103
0
    offset += len1;
3104
3105
0
    if (offset < length) {
3106
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3107
0
    }
3108
3109
0
}
3110
3111
/*
3112
 * 8.2.9    GBR
3113
 */
3114
static void
3115
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_)
3116
0
{
3117
0
    unsigned offset = 0;
3118
0
    int len1 = (length != 10) ? length/2 : 5;
3119
3120
    /* In case length is not in accordance with documentation */
3121
0
    if ( length != 10) {
3122
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
3123
0
    }
3124
3125
    /* 5 to 9   UL GBR
3126
    * The UL/DL MBR fields shall be encoded as kilobits per second (1 kbps = 1000 bps) in binary value
3127
    */
3128
0
    proto_tree_add_item(tree, hf_pfcp_ul_gbr, tvb, offset, len1, ENC_BIG_ENDIAN);
3129
0
    offset += len1;
3130
3131
    /* 10 to 14 DL GBR */
3132
0
    proto_tree_add_item(tree, hf_pfcp_dl_gbr, tvb, offset, len1, ENC_BIG_ENDIAN);
3133
0
    offset += len1;
3134
3135
0
    if (offset < length) {
3136
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3137
0
    }
3138
3139
0
}
3140
3141
/*
3142
 * 8.2.10   QER Correlation ID
3143
 */
3144
static void
3145
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_)
3146
1
{
3147
1
    unsigned offset = 0;
3148
1
    uint32_t value;
3149
    /* 5 to 8   QER Correlation ID value */
3150
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_qer_correlation_id, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
3151
1
    offset += 4;
3152
3153
1
    proto_item_append_text(item, "%u", value);
3154
3155
1
    if (offset < length) {
3156
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3157
1
    }
3158
3159
1
}
3160
/*
3161
 * 8.2.11   Precedence
3162
 */
3163
static void
3164
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_)
3165
1
{
3166
1
    unsigned offset = 0;
3167
1
    uint32_t value;
3168
    /* Octet 5 5 to 8   Precedence value */
3169
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_precedence, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
3170
1
    offset += 4;
3171
3172
1
    proto_item_append_text(item, "%u", value);
3173
3174
1
    if (offset < length) {
3175
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3176
1
    }
3177
3178
1
}
3179
/*
3180
 * 8.2.12   Transport Level Marking
3181
 */
3182
static void
3183
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_)
3184
2
{
3185
2
    unsigned offset = 0;
3186
2
    proto_item *dscp_it;
3187
2
    const char *dscp_str;
3188
2
    uint32_t tos, mask;
3189
3190
    /* Octet 5 to 6    ToS/Traffic Class
3191
    * The ToS/Traffic Class shall be encoded on two octets as an OctetString.
3192
    * 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
3193
    */
3194
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_traffic_class, tvb, offset, 1, ENC_BIG_ENDIAN, &tos);
3195
2
    offset += 1;
3196
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN, &mask);
3197
2
    offset += 1;
3198
3199
    /* display DSCP value */
3200
2
    dscp_str = val_to_str_ext_const(((tos & mask) >> 2), &dscp_vals_ext, "Unknown");
3201
2
    dscp_it = proto_tree_add_string(tree, hf_pfcp_traffic_dscp, tvb, 0, 2, dscp_str);
3202
2
    proto_item_set_generated(dscp_it);
3203
3204
2
    if (offset < length) {
3205
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3206
1
    }
3207
3208
2
}
3209
3210
/*
3211
 * 8.2.13   Volume Threshold
3212
 */
3213
static void
3214
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_)
3215
2
{
3216
2
    unsigned offset = 0;
3217
2
    uint64_t flags_val;
3218
3219
2
    static int * const pfcp_volume_threshold_flags[] = {
3220
2
        &hf_pfcp_spare_b7_b3,
3221
2
        &hf_pfcp_volume_threshold_b2_dlvol,
3222
2
        &hf_pfcp_volume_threshold_b1_ulvol,
3223
2
        &hf_pfcp_volume_threshold_b0_tovol,
3224
2
        NULL
3225
2
    };
3226
    /* Octet 5  Spare   DLVOL   ULVOL   TOVOL*/
3227
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_volume_threshold_flags, ENC_BIG_ENDIAN, &flags_val);
3228
2
    offset += 1;
3229
3230
    /* The Total Volume, Uplink Volume and Downlink Volume fields shall be encoded as an Unsigned64 binary integer value.
3231
    * They shall contain the total, uplink or downlink number of octets respectively.
3232
    */
3233
2
    if ((flags_val & 0x1) == 1) {
3234
        /* m to (m+7)   Total Volume
3235
        * TOVOL: If this bit is set to "1", then the Total Volume field shall be present
3236
        */
3237
1
        proto_tree_add_item(tree, hf_pfcp_volume_threshold_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
3238
1
        offset += 8;
3239
1
    }
3240
2
    if ((flags_val & 0x2) == 2) {
3241
        /* p to (p+7)    Uplink Volume
3242
        * ULVOL: If this bit is set to "1", then the Uplink Volume field shall be present
3243
        */
3244
1
        proto_tree_add_item(tree, hf_pfcp_volume_threshold_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
3245
1
        offset += 8;
3246
1
    }
3247
2
    if ((flags_val & 0x4) == 4) {
3248
        /* q to (q+7)   Downlink Volume
3249
        * DLVOL: If this bit is set to "1", then the Downlink Volume field shall be present
3250
        */
3251
2
        proto_tree_add_item(tree, hf_pfcp_volume_threshold_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
3252
2
        offset += 8;
3253
2
    }
3254
3255
2
    if (offset < length) {
3256
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3257
2
    }
3258
2
}
3259
/*
3260
 * 8.2.14   Time Threshold
3261
 */
3262
static void
3263
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_)
3264
2
{
3265
2
    unsigned offset = 0;
3266
2
    unsigned value;
3267
3268
    /* Octet 5 to 8    Time Threshold
3269
    * The Time Threshold field shall be encoded as an Unsigned32 binary integer value.
3270
    * It shall contain the duration in seconds.
3271
    */
3272
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_time_threshold, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
3273
2
    offset += 4;
3274
3275
2
    proto_item_append_text(item, "%u s", value);
3276
3277
2
    if (offset < length) {
3278
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3279
1
    }
3280
3281
2
}
3282
3283
/*
3284
 * 8.2.15   Monitoring Time
3285
 */
3286
static void
3287
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_)
3288
1
{
3289
1
    char *time_str;
3290
1
    unsigned offset = 0;
3291
3292
    /* The Monitoring Time field shall indicate the monitoring time in UTC time.
3293
    * Octets 5 to 8 shall be encoded in the same format as the first four octets
3294
    * of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905.
3295
    */
3296
1
    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);
3297
1
    proto_item_append_text(item, "%s", time_str);
3298
1
    offset += 4;
3299
3300
1
    if (offset < length) {
3301
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3302
1
    }
3303
3304
1
}
3305
/*
3306
 * 8.2.16   Subsequent Volume Threshold
3307
 */
3308
static void
3309
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_)
3310
6
{
3311
6
    unsigned offset = 0;
3312
6
    uint64_t flags_val;
3313
3314
6
    static int * const pfcp_subseq_volume_threshold_flags[] = {
3315
6
        &hf_pfcp_spare_b7_b3,
3316
6
        &hf_pfcp_subseq_volume_threshold_b2_dlvol,
3317
6
        &hf_pfcp_subseq_volume_threshold_b1_ulvol,
3318
6
        &hf_pfcp_subseq_volume_threshold_b0_tovol,
3319
6
        NULL
3320
6
    };
3321
    /* Octet 5  Spare   DLVOL   ULVOL   TOVOL*/
3322
6
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_subseq_volume_threshold_flags, ENC_BIG_ENDIAN, &flags_val);
3323
6
    offset += 1;
3324
3325
    /* The Total Volume, Uplink Volume and Downlink Volume fields shall be encoded as an Unsigned64 binary integer value.
3326
    * They shall contain the total, uplink or downlink number of octets respectively.
3327
    */
3328
6
    if ((flags_val & 0x1) == 1) {
3329
        /* m to (m+7)   Total Volume
3330
        * TOVOL: If this bit is set to "1", then the Total Volume field shall be present
3331
        */
3332
1
        proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
3333
1
        offset += 8;
3334
1
    }
3335
6
    if ((flags_val & 0x2) == 2) {
3336
        /* p to (p+7)    Uplink Volume
3337
        * ULVOL: If this bit is set to "1", then the Uplink Volume field shall be present
3338
        */
3339
1
        proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
3340
1
        offset += 8;
3341
1
    }
3342
6
    if ((flags_val & 0x4) == 4) {
3343
        /* q to (q+7)   Downlink Volume
3344
        * DLVOL: If this bit is set to "1", then the Downlink Volume field shall be present
3345
        */
3346
2
        proto_tree_add_item(tree, hf_pfcp_subseq_volume_threshold_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
3347
2
        offset += 8;
3348
2
    }
3349
3350
6
    if (offset < length) {
3351
5
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3352
5
    }
3353
6
}
3354
3355
/*
3356
 * 8.2.17   Subsequent Time Threshold
3357
 */
3358
static void
3359
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_)
3360
1
{
3361
1
    unsigned offset = 0;
3362
1
    uint32_t value;
3363
    /* 5 to 8   Subsequent Time Threshold */
3364
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_time_threshold, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
3365
1
    offset += 4;
3366
3367
1
    proto_item_append_text(item, "%u s", value);
3368
3369
1
    if (offset < length) {
3370
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3371
1
    }
3372
1
}
3373
/*
3374
 * 8.2.18   Inactivity Detection Time
3375
 */
3376
static void
3377
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_)
3378
1
{
3379
1
    unsigned offset = 0;
3380
1
    uint32_t value;
3381
    /* 5 to 8   Inactivity Detection Time */
3382
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_inactivity_detection_time, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
3383
1
    offset += 4;
3384
3385
1
    proto_item_append_text(item, "%u s", value);
3386
3387
1
    if (offset < length) {
3388
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3389
1
    }
3390
1
}
3391
3392
/*
3393
 * 8.2.19   Reporting Triggers
3394
 */
3395
static void
3396
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_)
3397
1
{
3398
1
    unsigned offset = 0;
3399
3400
1
    static int * const pfcp_reporting_triggers_o5_flags[] = {
3401
1
        &hf_pfcp_reporting_triggers_o5_b7_liusa,
3402
1
        &hf_pfcp_reporting_triggers_o5_b6_droth,
3403
1
        &hf_pfcp_reporting_triggers_o5_b5_stopt,
3404
1
        &hf_pfcp_reporting_triggers_o5_b4_start,
3405
1
        &hf_pfcp_reporting_triggers_o5_b3_quhti,
3406
1
        &hf_pfcp_reporting_triggers_o5_b2_timth,
3407
1
        &hf_pfcp_reporting_triggers_o5_b1_volth,
3408
1
        &hf_pfcp_reporting_triggers_o5_b0_perio,
3409
1
        NULL
3410
1
    };
3411
    /* Octet 5 LIUSA   DROTH   STOPT   START   QUHTI   TIMTH   VOLTH   PERIO */
3412
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_triggers_o5_flags, ENC_BIG_ENDIAN);
3413
1
    offset++;
3414
3415
1
    if (offset == length) {
3416
0
        return;
3417
0
    }
3418
3419
1
    static int * const pfcp_reporting_triggers_o6_flags[] = {
3420
1
        &hf_pfcp_reporting_triggers_o6_b7_quvti,
3421
1
        &hf_pfcp_reporting_triggers_o6_b6_ipmjl,
3422
1
        &hf_pfcp_reporting_triggers_o6_b5_evequ,
3423
1
        &hf_pfcp_reporting_triggers_o6_b4_eveth,
3424
1
        &hf_pfcp_reporting_triggers_o6_b3_macar,
3425
1
        &hf_pfcp_reporting_triggers_o6_b2_envcl,
3426
1
        &hf_pfcp_reporting_triggers_o6_b1_timqu,
3427
1
        &hf_pfcp_reporting_triggers_o6_b0_volqu,
3428
1
        NULL
3429
1
    };
3430
    /* Octet 6 QUVTI   IPMJL   EVEQU   EVETH   MACAR   ENVCL   TIMQU   VOLQU */
3431
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_triggers_o6_flags, ENC_BIG_ENDIAN);
3432
1
    offset++;
3433
3434
1
    if (offset == length) {
3435
0
        return;
3436
0
    }
3437
3438
1
    static int * const pfcp_reporting_triggers_o7_flags[] = {
3439
1
        &hf_pfcp_spare_b7_b2,
3440
1
        &hf_pfcp_reporting_triggers_o7_b1_upint,
3441
1
        &hf_pfcp_reporting_triggers_o7_b0_reemr,
3442
1
        NULL
3443
1
    };
3444
    /* Octet 7 Spare   Spare   Spare   Spare   Spare   Spare   UPINT   REEMR */
3445
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_triggers_o7_flags, ENC_BIG_ENDIAN);
3446
1
    offset++;
3447
3448
1
    if (offset == length) {
3449
0
        return;
3450
0
    }
3451
3452
3453
1
    if (offset < length) {
3454
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3455
1
    }
3456
3457
1
}
3458
3459
/*
3460
 * 8.2.20   Redirect Information
3461
 */
3462
static const value_string pfcp_redirect_address_type_vals[] = {
3463
3464
    { 0, "IPv4 address" },
3465
    { 1, "IPv6 address" },
3466
    { 2, "URL" },
3467
    { 3, "SIP URI" },
3468
    { 4, "IPv4 and IPv6 addresses" },
3469
    { 5, "Port" },
3470
    { 6, "IPv4 address and Port" },
3471
    { 7, "IPv6 address and Port" },
3472
    { 8, "IPv4 and IPv6 addresses and Port" },
3473
    { 0, NULL }
3474
};
3475
3476
static void
3477
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_)
3478
2
{
3479
2
    unsigned offset = 0;
3480
2
    uint32_t redirect_address_type, addr_len, other_addr_len;
3481
3482
    /* Octet Spare  Redirect Address Type */
3483
2
    proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
3484
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_redirect_address_type, tvb, offset, 1, ENC_BIG_ENDIAN, &redirect_address_type);
3485
2
    offset++;
3486
3487
    /* If the Redirect Address Type is set to Port, the Redirect Address Server Address shall not be present */
3488
2
    if(!(redirect_address_type == 5)) {
3489
        /* 6-7  Redirect Server Address Length=a */
3490
1
        proto_tree_add_item_ret_uint(tree, hf_pfcp_redirect_server_addr_len, tvb, offset, 2, ENC_BIG_ENDIAN, &addr_len);
3491
1
        offset+=2;
3492
3493
        /* 8-(8+a-1)  Redirect Server Address */
3494
1
        proto_tree_add_item(tree, hf_pfcp_redirect_server_address, tvb, offset, addr_len, ENC_UTF_8);
3495
1
        offset += addr_len;
3496
3497
        /* - If the Redirect Address type is set to "IPv4 and IPv6 address", the Redirect Information IE shall include an IPv4 address
3498
         *   and an IPv6 address in the Redirect Server Address IE and Other Redirect Server Address.
3499
         * - When Redirect Address Type is set to "IPv4 and IPv6 addresses and Port", the Other Redirect Server Address shall also be present.
3500
         */
3501
1
        if((redirect_address_type == 4) || (redirect_address_type == 8)) {
3502
            /* p-(p+1)  Other Redirect Server Address Length=b */
3503
0
            proto_tree_add_item_ret_uint(tree, hf_pfcp_other_redirect_server_addr_len, tvb, offset, 2, ENC_BIG_ENDIAN, &other_addr_len);
3504
0
            offset+=2;
3505
3506
            /* (p+2)-(p+2+b-1)  Other Redirect Server Address */
3507
0
            proto_tree_add_item(tree, hf_pfcp_other_redirect_server_address, tvb, offset, other_addr_len, ENC_UTF_8);
3508
0
            offset += other_addr_len;
3509
0
        }
3510
1
    }
3511
3512
2
    if((redirect_address_type == 5) || (redirect_address_type == 6) || (redirect_address_type == 7) || (redirect_address_type == 8)) {
3513
        /* m to (m+1) Port */
3514
1
        proto_tree_add_item(tree, hf_pfcp_redirect_port, tvb, offset, 2, ENC_BIG_ENDIAN);
3515
1
        offset+=2;
3516
1
    }
3517
3518
2
    if (offset < length) {
3519
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3520
2
    }
3521
2
}
3522
/*
3523
 * 8.2.21   Report Type
3524
 */
3525
static void
3526
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_)
3527
1
{
3528
1
    unsigned offset = 0;
3529
3530
1
    static int * const pfcp_report_type_flags[] = {
3531
1
        &hf_pfcp_spare_b7,
3532
1
        &hf_pfcp_report_type_b6_uisr,
3533
1
        &hf_pfcp_report_type_b5_sesr,
3534
1
        &hf_pfcp_report_type_b4_tmir,
3535
1
        &hf_pfcp_report_type_b3_upir,
3536
1
        &hf_pfcp_report_type_b2_erir,
3537
1
        &hf_pfcp_report_type_b1_usar,
3538
1
        &hf_pfcp_report_type_b0_dldr,
3539
1
        NULL
3540
1
    };
3541
    /* Octet 5  Spare   UISR   SESR    TMIR   UPIR   ERIR    USAR    DLDR */
3542
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_report_type_flags, ENC_BIG_ENDIAN);
3543
1
    offset += 1;
3544
3545
1
    if (offset < length) {
3546
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3547
1
    }
3548
3549
1
}
3550
/*
3551
 * 8.2.22   Offending IE
3552
 */
3553
static void
3554
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_)
3555
1
{
3556
1
    uint32_t value;
3557
    /* Octet 5 to 6 Type of the offending IE */
3558
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_offending_ie, tvb, 0, 2, ENC_BIG_ENDIAN, &value);
3559
3560
1
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_ie_type, "Unknown"));
3561
3562
1
}
3563
/*
3564
 * 8.2.23   Forwarding Policy
3565
 */
3566
static void
3567
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_)
3568
0
{
3569
0
    unsigned offset = 0;
3570
0
    uint32_t id_len;
3571
3572
    /* Octet Forwarding Policy Identifier Length */
3573
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_forwarding_policy_id_len, tvb, offset, 1, ENC_BIG_ENDIAN, &id_len);
3574
0
    offset += 1;
3575
3576
0
    proto_tree_add_item(tree, hf_pfcp_forwarding_policy_id, tvb, offset, id_len, ENC_NA);
3577
0
    offset += id_len;
3578
3579
0
    if (offset < length) {
3580
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3581
0
    }
3582
3583
0
}
3584
/*
3585
 * 8.2.24   Destination Interface
3586
 */
3587
static const value_string pfcp_dst_interface_vals[] = {
3588
3589
    { 0, "Access" },
3590
    { 1, "Core" },
3591
    { 2, "SGi-LAN/N6-LAN" },
3592
    { 3, "CP- Function" },
3593
    { 4, "LI Function" },
3594
    { 5, "5G VN Internal" },
3595
    { 0, NULL }
3596
};
3597
3598
static unsigned
3599
decode_pfcp_destination_interface(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset, unsigned length)
3600
4
{
3601
4
    uint32_t value;
3602
3603
    /* Octet 5    Spare    Interface value*/
3604
4
    proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
3605
4
    proto_tree_add_item_ret_uint(tree, hf_pfcp_dst_interface, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
3606
4
    offset++;
3607
3608
4
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_dst_interface_vals, "Unknown"));
3609
3610
4
    if (offset < length) {
3611
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3612
3
    }
3613
3614
4
    return length;
3615
4
}
3616
static void
3617
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_)
3618
1
{
3619
3620
1
    decode_pfcp_destination_interface(tvb, pinfo, tree, item, 0, length);
3621
3622
1
}
3623
/*
3624
 * 8.2.25   UP Function Features
3625
 */
3626
static void
3627
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_)
3628
2
{
3629
2
    unsigned offset = 0;
3630
3631
2
    static int * const pfcp_up_function_features_o5_flags[] = {
3632
2
        &hf_pfcp_up_function_features_o5_b7_treu,
3633
2
        &hf_pfcp_up_function_features_o5_b6_heeu,
3634
2
        &hf_pfcp_up_function_features_o5_b5_pfdm,
3635
2
        &hf_pfcp_up_function_features_o5_b4_ftup,
3636
2
        &hf_pfcp_up_function_features_o5_b3_trst,
3637
2
        &hf_pfcp_up_function_features_o5_b2_dlbd,
3638
2
        &hf_pfcp_up_function_features_o5_b1_ddnd,
3639
2
        &hf_pfcp_up_function_features_o5_b0_bucp,
3640
2
        NULL
3641
2
    };
3642
    /* Octet 5  TREU    HEEU    PFDM    FTUP    TRST    DLBD    DDND    BUCP */
3643
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o5_flags, ENC_BIG_ENDIAN);
3644
2
    offset++;
3645
3646
2
    if (offset == length) {
3647
0
        return;
3648
0
    }
3649
3650
2
    static int * const pfcp_up_function_features_o6_flags[] = {
3651
2
        &hf_pfcp_up_function_features_o6_b7_epfar,
3652
2
        &hf_pfcp_up_function_features_o6_b6_pfde,
3653
2
        &hf_pfcp_up_function_features_o6_b5_frrt,
3654
2
        &hf_pfcp_up_function_features_o6_b4_trace,
3655
2
        &hf_pfcp_up_function_features_o6_b3_quoac,
3656
2
        &hf_pfcp_up_function_features_o6_b2_udbc,
3657
2
        &hf_pfcp_up_function_features_o6_b1_pdiu,
3658
2
        &hf_pfcp_up_function_features_o6_b0_empu,
3659
2
        NULL
3660
2
    };
3661
    /* Octet 6  EPFAR   PFDE   FRRT    TRACE   QUOAC   UDBC    PDIU    EMPU */
3662
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o6_flags, ENC_BIG_ENDIAN);
3663
2
    offset++;
3664
3665
2
    if (offset == length) {
3666
0
        return;
3667
0
    }
3668
3669
2
    static int * const pfcp_up_function_features_o7_flags[] = {
3670
2
        &hf_pfcp_up_function_features_o7_b7_gcom,
3671
2
        &hf_pfcp_up_function_features_o7_b6_bundl,
3672
2
        &hf_pfcp_up_function_features_o7_b5_mte_n4,
3673
2
        &hf_pfcp_up_function_features_o7_b4_mnop,
3674
2
        &hf_pfcp_up_function_features_o7_b3_sset,
3675
2
        &hf_pfcp_up_function_features_o7_b2_ueip,
3676
2
        &hf_pfcp_up_function_features_o7_b1_adpdp,
3677
2
        &hf_pfcp_up_function_features_o7_b0_dpdra,
3678
2
        NULL
3679
2
    };
3680
    /* Octet 7  GCOM   BUNDL   MTE N4    MNOP   SSET   UEIP    ADPDP    DPDRA */
3681
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o7_flags, ENC_BIG_ENDIAN);
3682
2
    offset++;
3683
3684
2
    if (offset == length) {
3685
0
        return;
3686
0
    }
3687
3688
2
    static int * const pfcp_up_function_features_o8_flags[] = {
3689
2
        &hf_pfcp_up_function_features_o8_b7_mptcp,
3690
2
        &hf_pfcp_up_function_features_o8_b6_tsn,
3691
2
        &hf_pfcp_up_function_features_o8_b5_ip6pl,
3692
2
        &hf_pfcp_up_function_features_o8_b4_iptv,
3693
2
        &hf_pfcp_up_function_features_o8_b3_norp,
3694
2
        &hf_pfcp_up_function_features_o8_b2_vtime,
3695
2
        &hf_pfcp_up_function_features_o8_b1_rttl,
3696
2
        &hf_pfcp_up_function_features_o8_b0_mpas,
3697
2
        NULL
3698
2
    };
3699
    /* Octet 8  MPTCP   TSN   IP6PL    IPTV   NORP   VTIME    RTTL    MPAS */
3700
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o8_flags, ENC_BIG_ENDIAN);
3701
2
    offset += 1;
3702
3703
2
    if (offset == length) {
3704
0
        return;
3705
0
    }
3706
3707
2
    static int * const pfcp_up_function_features_o9_flags[] = {
3708
2
        &hf_pfcp_up_function_features_o9_b7_rds,
3709
2
        &hf_pfcp_up_function_features_o9_b6_ddds,
3710
2
        &hf_pfcp_up_function_features_o9_b5_ethar,
3711
2
        &hf_pfcp_up_function_features_o9_b4_ciot,
3712
2
        &hf_pfcp_up_function_features_o9_b3_mt_edt,
3713
2
        &hf_pfcp_up_function_features_o9_b2_gpqm,
3714
2
        &hf_pfcp_up_function_features_o9_b1_qfqm,
3715
2
        &hf_pfcp_up_function_features_o9_b0_atsss_ll,
3716
2
        NULL
3717
2
    };
3718
    /* Octet 9  RDS     DDDS   ETHAR   CIOT    MT-EDT   GPQM    QFQM    ATSSS-LL */
3719
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o9_flags, ENC_BIG_ENDIAN);
3720
2
    offset += 1;
3721
3722
2
    if (offset == length) {
3723
0
        return;
3724
0
    }
3725
3726
2
    static int * const pfcp_up_function_features_o10_flags[] = {
3727
2
        &hf_pfcp_up_function_features_o10_b7_dnsts,
3728
2
        &hf_pfcp_up_function_features_o10_b6_iprep,
3729
2
        &hf_pfcp_up_function_features_o10_b5_resps,
3730
2
        &hf_pfcp_up_function_features_o10_b4_upber,
3731
2
        &hf_pfcp_up_function_features_o10_b3_l2tp,
3732
2
        &hf_pfcp_up_function_features_o10_b2_nspoc,
3733
2
        &hf_pfcp_up_function_features_o10_b1_quasf,
3734
2
        &hf_pfcp_up_function_features_o10_b0_rttwp,
3735
2
        NULL
3736
2
    };
3737
    /* Octet 10  DNSTS   IPREP   RESPS    UPBER   L2TP   NSPOC    QUOSF    RTTWP */
3738
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o10_flags, ENC_BIG_ENDIAN);
3739
2
    offset += 1;
3740
3741
2
    if (offset == length) {
3742
0
        return;
3743
0
    }
3744
3745
2
    static int * const pfcp_up_function_features_o11_flags[] = {
3746
2
        &hf_pfcp_up_function_features_o11_b7_mpquic,
3747
2
        &hf_pfcp_up_function_features_o11_b6_afsfc,
3748
2
        &hf_pfcp_up_function_features_o11_b5_upidp,
3749
2
        &hf_pfcp_up_function_features_o11_b4_ratp,
3750
2
        &hf_pfcp_up_function_features_o11_b3_eppi,
3751
2
        &hf_pfcp_up_function_features_o11_b2_psuprm,
3752
2
        &hf_pfcp_up_function_features_o11_b1_mbsn4,
3753
2
        &hf_pfcp_up_function_features_o11_b0_drqos,
3754
2
        NULL
3755
2
    };
3756
    /* Octet 11  MPQUIC   AFSFC  UPIDP    RATP   EPPI    PSUPRM    MBSN4   DRQOS */
3757
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o11_flags, ENC_BIG_ENDIAN);
3758
2
    offset += 1;
3759
3760
2
    if (offset == length) {
3761
0
        return;
3762
0
    }
3763
3764
2
    static int * const pfcp_up_function_features_o12_flags[] = {
3765
2
        &hf_pfcp_up_function_features_o12_b7_eml4s,
3766
2
        &hf_pfcp_up_function_features_o12_b6_detnet,
3767
2
        &hf_pfcp_up_function_features_o12_b5_qmcon,
3768
2
        &hf_pfcp_up_function_features_o12_b4_n6jedb,
3769
2
        &hf_pfcp_up_function_features_o12_b3_drtsc,
3770
2
        &hf_pfcp_up_function_features_o12_b2_tscts,
3771
2
        &hf_pfcp_up_function_features_o12_b1_dbdm,
3772
2
        &hf_pfcp_up_function_features_o12_b0_redsm,
3773
2
        NULL
3774
2
    };
3775
    /* Octet 12  EML4S  DETNET  QMCON  N6JEDB  DRTSC  TSCTS  DBDM   REDSM  */
3776
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o12_flags, ENC_BIG_ENDIAN);
3777
2
    offset += 1;
3778
3779
2
    if (offset == length) {
3780
0
        return;
3781
0
    }
3782
3783
2
    static int * const pfcp_up_function_features_o13_flags[] = {
3784
2
        &hf_pfcp_up_function_features_o13_b7_un6tu,
3785
2
        &hf_pfcp_up_function_features_o13_b6_umn6ip,
3786
2
        &hf_pfcp_up_function_features_o13_b5_upsbies,
3787
2
        &hf_pfcp_up_function_features_o13_b4_mtsdt,
3788
2
        &hf_pfcp_up_function_features_o13_b3_edbnc,
3789
2
        &hf_pfcp_up_function_features_o13_b2_qmdrm,
3790
2
        &hf_pfcp_up_function_features_o13_b1_cntl,
3791
2
        &hf_pfcp_up_function_features_o13_b0_pdusm,
3792
2
        NULL
3793
2
    };
3794
    /* Octet 13  UN6TU  UMN6IP  UPSBIES MT-SDT  EDBNC   QMDRM   CN-TL   PDUSM  */
3795
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o13_flags, ENC_BIG_ENDIAN);
3796
2
    offset += 1;
3797
3798
2
    if (offset == length) {
3799
0
        return;
3800
0
    }
3801
3802
2
    static int * const pfcp_up_function_features_o14_flags[] = {
3803
2
        &hf_pfcp_up_function_features_o14_b7_muxmf,
3804
2
        &hf_pfcp_up_function_features_o14_b6_dyntr,
3805
2
        &hf_pfcp_up_function_features_o14_b5_mpquic_e,
3806
2
        &hf_pfcp_up_function_features_o14_b4_mpquic_ip,
3807
2
        &hf_pfcp_up_function_features_o14_b3_ushph,
3808
2
        &hf_pfcp_up_function_features_o14_b2_natpub,
3809
2
        &hf_pfcp_up_function_features_o14_b1_un6dm,
3810
2
        &hf_pfcp_up_function_features_o14_b0_mbsch,
3811
2
        NULL
3812
2
    };
3813
    /* Octet 14  MUXMF  DYNTR  MPQUIC-E  MPQUIC-IP  USHPH  NATPUB  UN6DM  MBSCH */
3814
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o14_flags, ENC_BIG_ENDIAN);
3815
2
    offset += 1;
3816
3817
2
    if (offset == length) {
3818
0
        return;
3819
0
    }
3820
3821
2
    static int * const pfcp_up_function_features_o15_flags[] = {
3822
2
        &hf_pfcp_spare_b7,
3823
2
        &hf_pfcp_up_function_features_o15_b6_papfd,
3824
2
        &hf_pfcp_up_function_features_o15_b5_qmabr,
3825
2
        &hf_pfcp_up_function_features_o15_b4_udpopt,
3826
2
        &hf_pfcp_up_function_features_o15_b3_psitlm,
3827
2
        &hf_pfcp_up_function_features_o15_b2_ulm,
3828
2
        &hf_pfcp_up_function_features_o15_b1_moq,
3829
2
        &hf_pfcp_up_function_features_o15_b0_conudp,
3830
2
        NULL
3831
2
    };
3832
    /* Octet 15  Spare  PAPFD  QMABR  UDPOPT  PSITLM  ULM  MOQ  CONUDP */
3833
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o15_flags, ENC_BIG_ENDIAN);
3834
2
    offset += 1;
3835
3836
2
    if (offset == length) {
3837
0
        return;
3838
0
    }
3839
2
    if (offset < length) {
3840
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3841
2
    }
3842
3843
2
}
3844
/*
3845
 * 8.2.26   Apply Action
3846
 */
3847
static void
3848
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_)
3849
1
{
3850
1
    unsigned offset = 0;
3851
3852
1
    static int * const pfcp_apply_action_o5_flags[] = {
3853
1
        &hf_pfcp_apply_action_flags_o5_b7_dfrt,
3854
1
        &hf_pfcp_apply_action_flags_o5_b6_ipmd,
3855
1
        &hf_pfcp_apply_action_flags_o5_b5_ipma,
3856
1
        &hf_pfcp_apply_action_flags_o5_b4_dupl,
3857
1
        &hf_pfcp_apply_action_flags_o5_b3_nocp,
3858
1
        &hf_pfcp_apply_action_flags_o5_b2_buff,
3859
1
        &hf_pfcp_apply_action_flags_o5_b1_forw,
3860
1
        &hf_pfcp_apply_action_flags_o5_b0_drop,
3861
1
        NULL
3862
1
    };
3863
    /* Octet 5  DFRT   IPMD   IPMA   DUPL    NOCP    BUFF    FORW    DROP */
3864
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_apply_action_o5_flags, ENC_BIG_ENDIAN);
3865
1
    offset += 1;
3866
3867
1
    if (offset == length) {
3868
0
        return;
3869
0
    }
3870
3871
1
    static int * const pfcp_apply_action_o6_flags[] = {
3872
1
        &hf_pfcp_spare_b7_b5,
3873
1
        &hf_pfcp_apply_action_flags_o6_b4_mbsu,
3874
1
        &hf_pfcp_apply_action_flags_o6_b3_fssm,
3875
1
        &hf_pfcp_apply_action_flags_o6_b2_ddpn,
3876
1
        &hf_pfcp_apply_action_flags_o6_b1_bdpn,
3877
1
        &hf_pfcp_apply_action_flags_o6_b0_edrt,
3878
1
        NULL
3879
1
    };
3880
    /* Octet 6  Spare   MBSU    FSSM    DDPN    BDPN    EDRT */
3881
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_apply_action_o6_flags, ENC_BIG_ENDIAN);
3882
1
    offset += 1;
3883
3884
1
    if (offset < length) {
3885
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3886
1
    }
3887
3888
1
}
3889
/*
3890
 * 8.2.27   Downlink Data Service Information
3891
 */
3892
static void
3893
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_)
3894
3
{
3895
3
    unsigned offset = 0;
3896
3
    uint64_t flags;
3897
3898
3
    static int * const pfcp_dl_data_service_inf_flags[] = {
3899
3
        &hf_pfcp_spare_b7_b3,
3900
3
        &hf_pfcp_dl_data_service_inf_b2_dlpsi,
3901
3
        &hf_pfcp_dl_data_service_inf_b1_qfii,
3902
3
        &hf_pfcp_dl_data_service_inf_b0_ppi,
3903
3
        NULL
3904
3
    };
3905
    /* Octet 5  Spare   DLPSI   QFII    PPI */
3906
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_dl_data_service_inf_flags, ENC_BIG_ENDIAN, &flags);
3907
3
    offset += 1;
3908
3909
    /* The PPI flag in octet 5 indicates whether the Paging Policy Indication value in octet 'm' shall be present */
3910
3
    if ((flags & 0x1) == 1) {
3911
        /* m    Spare   Paging Policy Indication value
3912
         * encoded as the DSCP in TOS (IPv4) or TC (IPv6) information received in the IP payload of the GTP-U packet
3913
         * from the PGW (see IETF RFC 2474
3914
         */
3915
1
        proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN);
3916
1
        proto_tree_add_item(tree, hf_pfcp_paging_policy_indication, tvb, offset, 1, ENC_BIG_ENDIAN);
3917
1
        offset++;
3918
1
    }
3919
3920
    /* The QFII flag in octet 5 indicates whether the QFI value in octet 'p' shall be present */
3921
3
    if ((flags & 0x2) == 2) {
3922
        /* m    Spare   QFI value
3923
         * encoded as the octet 5 of the QFI IE in subclause 8.2.89.
3924
         */
3925
1
        proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN);
3926
1
        proto_tree_add_item(tree, hf_pfcp_qfi, tvb, offset, 1, ENC_NA);
3927
1
        offset++;
3928
1
    }
3929
3930
    /* The DLPSI flag in octet 5 indicates whether the DL Data Packet Size value in octet 'q' to 'q+1' shall be present */
3931
3
    if ((flags & 0x4) == 4) {
3932
        /*
3933
         * DL Data Packet Size
3934
         */
3935
2
        proto_tree_add_item(tree, hf_pfcp_dldatapacketsize, tvb, offset, 2, ENC_BIG_ENDIAN);
3936
2
        offset += 2;
3937
2
    }
3938
3939
3
    if (offset < length) {
3940
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3941
2
    }
3942
3943
3
}
3944
/*
3945
 * 8.2.28   Downlink Data Notification Delay
3946
 */
3947
static void
3948
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_)
3949
2
{
3950
2
    unsigned offset = 0;
3951
2
    uint32_t value;
3952
    /* Octet 5 Delay Value in integer multiples of 50 millisecs, or zero */
3953
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_dl_data_notification_delay, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
3954
2
    offset += 1;
3955
3956
2
    proto_item_append_text(item, "%u ms", value * 50);
3957
3958
2
    if (offset < length) {
3959
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
3960
2
    }
3961
2
}
3962
3963
/*
3964
 * 8.2.29   DL Buffering Duration
3965
 */
3966
static const value_string pfcp_timer_unit_vals[] = {
3967
    { 0, "value is incremented in multiples of 2 seconds" },
3968
    { 1, "value is incremented in multiples of 1 minute" },
3969
    { 2, "value is incremented in multiples of 10 minutes" },
3970
    { 3, "value is incremented in multiples of 1 hour" },
3971
    { 4, "value is incremented in multiples of 10 hour" },
3972
    { 5, "values shall be interpreted as multiples of 1 minute(version 14.0.0)" },
3973
    { 6, "values shall be interpreted as multiples of 1 minute(version 14.0.0)" },
3974
    { 7, "value indicates that the timer is infinite" },
3975
    { 0, NULL }
3976
};
3977
3978
static void
3979
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_)
3980
10
{
3981
10
    unsigned offset = 0;
3982
10
    uint32_t unit, value;
3983
3984
    /* Octet 5  Timer unit  Timer value */
3985
10
    proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN, &unit);
3986
10
    proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
3987
10
    offset++;
3988
3989
10
    if ((unit == 0) && (value == 0)) {
3990
3
        proto_item_append_text(item, " Stopped");
3991
7
    } else {
3992
7
        switch (unit) {
3993
1
        case 0:
3994
1
            proto_item_append_text(item, "%u s", value * 2);
3995
1
            break;
3996
1
        case 1:
3997
1
            proto_item_append_text(item, "%u min", value);
3998
1
            break;
3999
1
        case 2:
4000
1
            proto_item_append_text(item, "%u min", value * 10);
4001
1
            break;
4002
1
        case 3:
4003
1
            proto_item_append_text(item, "%u hours", value);
4004
1
            break;
4005
1
        case 4:
4006
1
            proto_item_append_text(item, "%u hours", value * 10);
4007
1
            break;
4008
1
        case 7:
4009
1
            proto_item_append_text(item, "Infinite (%u)", value);
4010
1
            break;
4011
            /* Value 5 and 6 */
4012
1
        default:
4013
1
            proto_item_append_text(item, "%u min", value);
4014
1
            break;
4015
7
        }
4016
7
    }
4017
4018
10
    if (offset < length) {
4019
10
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4020
10
    }
4021
4022
10
}
4023
4024
/*
4025
 * 8.2.30   DL Buffering Suggested Packet Count
4026
 */
4027
static void
4028
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_)
4029
1
{
4030
1
    uint32_t value;
4031
    /* Octet 5 to n+4 Packet Count Value
4032
    * The length shall be set to 1 or 2 octets.
4033
    */
4034
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_packet_count, tvb, 0, length, ENC_BIG_ENDIAN, &value);
4035
4036
1
    proto_item_append_text(item, "%u", value);
4037
1
}
4038
/*
4039
 * 8.2.31   PFCPSMReq-Flags
4040
 */
4041
static void
4042
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_)
4043
1
{
4044
1
    unsigned offset = 0;
4045
4046
1
    static int * const pfcp_pfcpsmreq_flags[] = {
4047
1
        &hf_pfcp_spare_b7,
4048
1
        &hf_pfcp_pfcpsmreq_flags_b6_hrsbom,
4049
1
        &hf_pfcp_pfcpsmreq_flags_b5_deteid,
4050
1
        &hf_pfcp_pfcpsmreq_flags_b4_rumuc,
4051
1
        &hf_pfcp_pfcpsmreq_flags_b3_sumpc,
4052
1
        &hf_pfcp_pfcpsmreq_flags_b2_qaurr,
4053
1
        &hf_pfcp_pfcpsmreq_flags_b1_sndem,
4054
1
        &hf_pfcp_pfcpsmreq_flags_b0_drobu,
4055
1
        NULL
4056
1
    };
4057
    /* Octet 5  Spare   HRBOM   DETEID   RUMUC   SUMPC   QAURR   SNDEM   DROBU */
4058
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsmreq_flags, ENC_BIG_ENDIAN);
4059
1
    offset += 1;
4060
4061
1
    if (offset < length) {
4062
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4063
1
    }
4064
4065
1
}
4066
/*
4067
 * 8.2.32   PFCPSRRsp-Flags
4068
 */
4069
static void
4070
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_)
4071
0
{
4072
0
    unsigned offset = 0;
4073
4074
0
    static int * const pfcp_pfcpsrrsp_flags[] = {
4075
0
        &hf_pfcp_spare_b7_b1,
4076
0
        &hf_pfcp_pfcpsrrsp_flags_b0_drobu,
4077
0
        NULL
4078
0
    };
4079
    /* Octet 5  Spare   Spare   Spare   Spare   Spare   Spare   Spare   DROBU */
4080
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsrrsp_flags, ENC_BIG_ENDIAN);
4081
0
    offset += 1;
4082
4083
0
    if (offset < length) {
4084
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4085
0
    }
4086
4087
0
}
4088
4089
/*
4090
 * 8.2.33   Sequence Number
4091
 */
4092
static void
4093
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_)
4094
1
{
4095
1
    uint32_t value;
4096
    /* Octet 5 to 8    Sequence Number */
4097
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_sequence_number, tvb, 0, 4, ENC_BIG_ENDIAN, &value);
4098
4099
1
    proto_item_append_text(item, "%u", value);
4100
4101
1
}
4102
4103
/*
4104
 * 8.2.34   Metric
4105
 */
4106
static void
4107
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_)
4108
1
{
4109
1
    uint32_t value;
4110
    /* Octet 5  Metric */
4111
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_metric, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
4112
4113
1
    proto_item_append_text(item, "%u", value);
4114
4115
1
}
4116
4117
/*
4118
 * 8.2.35   Timer
4119
 */
4120
static void
4121
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_)
4122
6
{
4123
6
    unsigned offset = 0;
4124
6
    uint32_t unit, value;
4125
4126
    /* Octet 5  Timer unit  Timer value */
4127
6
    proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN, &unit);
4128
6
    proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
4129
6
    offset++;
4130
4131
6
    if ((unit == 0) && (value == 0)) {
4132
1
        proto_item_append_text(item, " Stopped");
4133
5
    } else {
4134
5
        switch (unit) {
4135
1
        case 0:
4136
1
            proto_item_append_text(item, "%u s", value * 2);
4137
1
            break;
4138
1
        case 1:
4139
1
            proto_item_append_text(item, "%u min", value);
4140
1
            break;
4141
1
        case 2:
4142
1
            proto_item_append_text(item, "%u min", value * 10);
4143
1
            break;
4144
0
        case 3:
4145
0
            proto_item_append_text(item, "%u hours", value);
4146
0
            break;
4147
1
        case 4:
4148
1
            proto_item_append_text(item, "%u hours", value * 10);
4149
1
            break;
4150
1
        case 7:
4151
1
            proto_item_append_text(item, "%u Infinite", value);
4152
1
            break;
4153
            /* Value 5 and 6 */
4154
0
        default:
4155
0
            proto_item_append_text(item, "%u min", value * 1);
4156
0
            break;
4157
5
        }
4158
5
    }
4159
4160
6
    if (offset < length) {
4161
6
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4162
6
    }
4163
4164
6
}
4165
4166
/*
4167
 * 8.2.36   PDR ID
4168
 */
4169
static int
4170
decode_pfcp_pdr_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, unsigned offset, pfcp_session_args_t *args)
4171
0
{
4172
0
    uint32_t rule_id;
4173
    /* Octet 5 to 6 Rule ID*/
4174
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_pdr_id, tvb, offset, 2, ENC_BIG_ENDIAN, &rule_id);
4175
0
    offset += 2;
4176
4177
0
    proto_item_append_text(item, "%u", rule_id);
4178
4179
0
    if (args) {
4180
0
        args->last_rule_ids.pdr = rule_id;
4181
0
    }
4182
4183
0
    return offset;
4184
0
}
4185
4186
static void
4187
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)
4188
0
{
4189
0
    unsigned offset = 0;
4190
4191
0
    offset = decode_pfcp_pdr_id(tvb, pinfo, tree, item, offset, args);
4192
4193
0
    if (offset < length) {
4194
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4195
0
    }
4196
0
}
4197
/*
4198
 * 8.2.37   F-SEID
4199
 */
4200
static void
4201
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)
4202
1
{
4203
1
    unsigned offset = 0;
4204
1
    uint64_t f_seid_flags;
4205
1
    address *ipv4 = NULL, *ipv6 = NULL;
4206
1
    uint64_t seid_cp, *seid;
4207
1
    uint32_t session;
4208
4209
1
    static int * const pfcp_f_seid_flags[] = {
4210
1
        &hf_pfcp_spare_b7,
4211
1
        &hf_pfcp_spare_b6,
4212
1
        &hf_pfcp_spare_b5,
4213
1
        &hf_pfcp_spare_b4,
4214
1
        &hf_pfcp_spare_b3,
4215
1
        &hf_pfcp_spare_b2,
4216
1
        &hf_pfcp_b1_v4,
4217
1
        &hf_pfcp_b0_v6,
4218
1
        NULL
4219
1
    };
4220
    /* Octet 5  Spare   Spare   Spare   Spare   Spare   Spare   V4  V6*/
4221
1
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_f_seid_flags, ENC_BIG_ENDIAN, &f_seid_flags);
4222
1
    offset += 1;
4223
4224
1
    if ((f_seid_flags & 0x3) == 0) {
4225
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, 1);
4226
0
        return;
4227
0
    }
4228
    /* Octet 6 to 13    SEID  */
4229
1
    proto_tree_add_item_ret_uint64(tree, hf_pfcp_seid, tvb, offset, 8, ENC_BIG_ENDIAN, &seid_cp);
4230
1
    proto_item_append_text(item, "SEID: 0x%s", tvb_bytes_to_str(pinfo->pool, tvb, offset, 8));
4231
1
    offset += 8;
4232
    /* IPv4 address (if present)*/
4233
1
    if ((f_seid_flags & 0x2) == 2) {
4234
1
        ipv4 = wmem_new0(pinfo->pool, address);
4235
1
        proto_tree_add_item(tree, hf_pfcp_f_seid_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
4236
1
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
4237
1
        set_address_tvb(ipv4, AT_IPv4, 4, tvb, offset);
4238
1
        offset += 4;
4239
1
    }
4240
    /* IPv6 address (if present)*/
4241
1
    if ((f_seid_flags & 0x1) == 1) {
4242
1
        ipv6 = wmem_new0(pinfo->pool, address);
4243
1
        proto_tree_add_item(tree, hf_pfcp_f_seid_ipv6, tvb, offset, 16, ENC_NA);
4244
1
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
4245
1
        set_address_tvb(ipv6, AT_IPv6, 16, tvb, offset);
4246
1
        offset += 16;
4247
1
    }
4248
4249
1
    if (g_pfcp_session) {
4250
0
        session = GPOINTER_TO_UINT(wmem_map_lookup(pfcp_session_table, &pinfo->num));
4251
0
        if (!session) {
4252
            /* We save the seid so that we could assignate its corresponding session ID later */
4253
0
            args->last_seid = seid_cp;
4254
0
            if (!pfcp_seid_exists(seid_cp, args->seid_list)) {
4255
0
                seid = wmem_new(pinfo->pool, uint64_t);
4256
0
                *seid = seid_cp;
4257
0
                wmem_list_prepend(args->seid_list, seid);
4258
0
            }
4259
0
            if (ipv4 != NULL && !pfcp_ip_exists(*ipv4, args->ip_list)) {
4260
0
                copy_address_wmem(pinfo->pool, &args->last_ip, ipv4);
4261
0
                wmem_list_prepend(args->ip_list, ipv4);
4262
0
            }
4263
0
            if (ipv6 != NULL && !pfcp_ip_exists(*ipv6, args->ip_list)) {
4264
0
                copy_address_wmem(pinfo->pool, &args->last_ip, ipv6);
4265
0
                wmem_list_prepend(args->ip_list, ipv6);
4266
0
            }
4267
0
        }
4268
0
    }
4269
4270
1
    if (offset < length) {
4271
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4272
1
    }
4273
1
}
4274
4275
/*
4276
 *   8.2.38   Node ID
4277
 */
4278
4279
static const value_string pfcp_node_id_type_vals[] = {
4280
4281
    { 0, "IPv4 address" },
4282
    { 1, "IPv6 address" },
4283
    { 2, "FQDN" },
4284
    { 0, NULL }
4285
};
4286
4287
static int
4288
decode_pfcp_fqdn(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, unsigned offset, uint16_t length)
4289
5
{
4290
5
    int name_len;
4291
5
    char *fqdn = NULL;
4292
4293
    /* FQDN, the Node ID value encoding shall be identical to the encoding of a FQDN
4294
    * within a DNS message of section 3.1 of IETF RFC 1035 [27] but excluding the trailing zero byte.
4295
    */
4296
5
    if (length > 0)
4297
5
    {
4298
5
        name_len = tvb_get_uint8(tvb, offset);
4299
        /* NOTE 1: The FQDN field in the IE is not encoded as a dotted string as commonly used in DNS master zone files. */
4300
5
        if (name_len < 0x40) {
4301
3
            fqdn = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset, length - 1, ENC_APN_STR);
4302
3
        }
4303
        /* In case the FQDN field is incorrectly in dotted string form.*/
4304
2
        else {
4305
2
            fqdn = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset, length - 1, ENC_ASCII);
4306
2
            proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, length - 1);
4307
2
        }
4308
5
        proto_tree_add_string(tree, hf_pfcp_node_id_fqdn, tvb, offset, length - 1, fqdn);
4309
5
        proto_item_append_text(item, "%s", fqdn);
4310
5
        offset += length - 1;
4311
5
    }
4312
5
    return offset;
4313
5
}
4314
4315
static int
4316
decode_pfcp_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, unsigned offset, uint16_t length)
4317
1
{
4318
1
    uint32_t node_id_type;
4319
4320
    /* Octet 5    Spare Node ID Type*/
4321
1
    proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
4322
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_node_id_type, tvb, offset, 1, ENC_BIG_ENDIAN, &node_id_type);
4323
1
    proto_item_append_text(item, "%s: ", val_to_str_const(node_id_type, pfcp_node_id_type_vals, "Unknown"));
4324
1
    offset++;
4325
4326
1
    switch (node_id_type) {
4327
0
        case 0:
4328
            /* IPv4 address */
4329
0
            proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
4330
0
            proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset));
4331
0
            offset += 4;
4332
0
            break;
4333
0
        case 1:
4334
            /* IPv6 address */
4335
0
            proto_tree_add_item(tree, hf_pfcp_node_id_ipv6, tvb, offset, 16, ENC_NA);
4336
0
            proto_item_append_text(item, "%s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
4337
0
            offset += 16;
4338
0
            break;
4339
0
        case 2:
4340
            /* FQDN */
4341
0
            offset = decode_pfcp_fqdn(tvb, pinfo, tree, item, offset, length);
4342
0
            break;
4343
1
        default:
4344
1
            break;
4345
1
    }
4346
1
    return offset;
4347
1
}
4348
static void
4349
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_)
4350
1
{
4351
1
    unsigned offset = 0;
4352
4353
1
    offset = decode_pfcp_address(tvb, pinfo, tree, item, offset, length);
4354
4355
1
    if (offset < length) {
4356
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4357
1
    }
4358
4359
1
}
4360
/*
4361
 * 8.2.39   PFD Contents
4362
 */
4363
static void
4364
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_)
4365
6
{
4366
6
    unsigned offset = 0;
4367
6
    int dissected_len;
4368
6
    uint64_t flags;
4369
6
    uint32_t len;
4370
6
    proto_tree *afd_tree, *aurl_tree, *adnp_tree;
4371
4372
6
    static int * const pfcp_pfd_contents_flags[] = {
4373
6
        &hf_pfcp_pfd_contents_flags_b7_adnp,
4374
6
        &hf_pfcp_pfd_contents_flags_b6_aurl,
4375
6
        &hf_pfcp_pfd_contents_flags_b5_afd,
4376
6
        &hf_pfcp_pfd_contents_flags_b4_dnp,
4377
6
        &hf_pfcp_pfd_contents_flags_b3_cp,
4378
6
        &hf_pfcp_pfd_contents_flags_b2_dn,
4379
6
        &hf_pfcp_pfd_contents_flags_b1_url,
4380
6
        &hf_pfcp_pfd_contents_flags_b0_fd,
4381
6
        NULL
4382
6
    };
4383
    /* Octet 5  ADNP   AURL   AFD   DNP   CP   DN   URL   FD */
4384
6
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_pfd_contents_flags, ENC_BIG_ENDIAN, &flags);
4385
6
    offset += 1;
4386
4387
    // Octet 6 Spare Octet
4388
6
    proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
4389
6
    offset += 1;
4390
4391
    /* Bit 1 - FD (Flow Description): If this bit is set to "1", then the Length of Flow Description
4392
     * and the Flow Description fields shall be present
4393
     */
4394
6
    if (flags & 0x1) {
4395
        /* The Flow Description field, when present, shall be encoded as an OctetString
4396
        * as specified in subclause 6.4.3.7 of 3GPP TS 29.251
4397
        */
4398
        /* m to (m+1)   Length of Flow Description */
4399
6
        proto_tree_add_item_ret_uint(tree, hf_pfcp_flow_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
4400
6
        offset += 2;
4401
4402
        /* (m+2) to p   Flow Description */
4403
6
        proto_tree_add_item(tree, hf_pfcp_flow_desc, tvb, offset, len, ENC_ASCII);
4404
6
        offset += len;
4405
6
    }
4406
4407
    /* Bit 2 - URL (URL): The URL field, when present,
4408
     * shall be encoded as an OctetString as specified in subclause 6.4.3.8 of 3GPP TS 29.251 [21].
4409
    */
4410
6
    if (flags & 0x2) {
4411
        /* q to (q+1)   Length of URL */
4412
5
        proto_tree_add_item_ret_uint(tree, hf_pfcp_url_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
4413
5
        offset += 2;
4414
4415
        /* (q+2) to r   URL */
4416
5
        proto_tree_add_item(tree, hf_pfcp_url, tvb, offset, len, ENC_ASCII);
4417
5
        offset += len;
4418
4419
5
    }
4420
4421
    /* Bit 3 - DN (Domain Name): The Domain Name field, when present,
4422
     * shall be encoded as an OctetString as specified in subclause 6.4.3.9 of 3GPP TS 29.251 [21].
4423
     */
4424
6
    if (flags & 0x4) {
4425
        /* s to (s+1)   Length of Domain Name */
4426
5
        proto_tree_add_item_ret_uint(tree, hf_pfcp_dn_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
4427
5
        offset += 2;
4428
4429
        /* (s+2) to t   Domain Name */
4430
5
        proto_tree_add_item(tree, hf_pfcp_dn, tvb, offset, len, ENC_ASCII);
4431
5
        offset += len;
4432
5
    }
4433
4434
    /* Bit 4 - CP (Custom PFD Content): If this bit is set to "1", then the Length of Custom PFD Content and
4435
     * the Custom PFD Content fields shall be present
4436
     */
4437
6
    if (flags & 0x8) {
4438
        /* u to (u+1)   Length of Custom PFD Content */
4439
1
        proto_tree_add_item_ret_uint(tree, hf_pfcp_cp_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
4440
1
        offset += 2;
4441
4442
        /* (u+2) to v   Custom PFD Content */
4443
1
        proto_tree_add_item(tree, hf_pfcp_cp, tvb, offset, len, ENC_NA);
4444
1
        offset += len;
4445
1
    }
4446
4447
    /* Bit 5 - DNP (Domain Name Protocol): If this bit is set to "1", then the Length of Domain Name Protocol and
4448
     * the Domain Name Protocol shall be present, otherwise they shall not be present; and if this bit is set to "1",
4449
     * the Length of Domain Name and the Domain Name fields shall also be present.
4450
     */
4451
6
    if (flags & 0x10) {
4452
        /* The Domain Name Protocol field, when present, shall be encoded as an OctetString
4453
         * as specified in subclause 6.4.3.x of 3GPP TS 29.251 [21].
4454
        */
4455
        /* w to (w+1)   Length of Domain Name Protocol */
4456
0
        proto_tree_add_item_ret_uint(tree, hf_pfcp_dnp_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
4457
0
        offset += 2;
4458
4459
        /* (w+2) to x   Domain Name Protocol */
4460
0
        proto_tree_add_item(tree, hf_pfcp_dnp, tvb, offset, len, ENC_ASCII);
4461
0
        offset += len;
4462
0
    }
4463
4464
4465
    /* Bit 6 - AFD (Additional Flow Description): If this bit is set to "1",
4466
     * the Length of Additional Flow Description and the Additional Flow Description field shall be present,
4467
     * otherwise they shall not be present.
4468
    */
4469
6
    if (flags & 0x20) {
4470
        /* y to (y+1)   Length of Additional Flow Description */
4471
5
        proto_tree_add_item_ret_uint(tree, hf_pfcp_afd_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
4472
5
        offset += 2;
4473
4474
        /* (y+2) to z   Additional Flow Description */
4475
5
        dissected_len = 0;
4476
5
        afd_tree = proto_item_add_subtree(item, ett_pfcp_adf);
4477
55
        while (dissected_len < (int)len) {
4478
50
            uint32_t flow_desc_len;
4479
            /* (y+2) to (y+3)   Length of Flow Description */
4480
50
            proto_tree_add_item_ret_uint(afd_tree, hf_pfcp_flow_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN, &flow_desc_len);
4481
50
            offset += 2;
4482
50
            dissected_len += 2;
4483
4484
            /* (y+4) to i   Flow Description */
4485
50
            proto_tree_add_item(afd_tree, hf_pfcp_flow_desc, tvb, offset, flow_desc_len, ENC_ASCII);
4486
50
            offset += flow_desc_len;
4487
50
            dissected_len += flow_desc_len;
4488
50
        }
4489
5
    }
4490
4491
    /* Bit 7 - AURL (Additional URL): If this bit is set to "1",
4492
     * the Length of Additional URL and the Additional URL field shall be present,
4493
     * otherwise they shall not be present.
4494
     */
4495
6
    if (flags & 0x40) {
4496
        /* a to (a+1)   Length of Additional URL */
4497
2
        proto_tree_add_item_ret_uint(tree, hf_pfcp_aurl_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
4498
2
        offset += 2;
4499
4500
        /* (a+2) to b   Additional URL */
4501
2
        dissected_len = 0;
4502
2
        aurl_tree = proto_item_add_subtree(item, ett_pfcp_aurl);
4503
6
        while (dissected_len < (int)len) {
4504
4
            uint32_t url_len;
4505
            /* (a+2) to (a+3)   Length of URL */
4506
4
            proto_tree_add_item_ret_uint(aurl_tree, hf_pfcp_url_len, tvb, offset, 2, ENC_BIG_ENDIAN, &url_len);
4507
4
            dissected_len += 2;
4508
4
            offset += 2;
4509
4510
            /* (a+4) to o   URL */
4511
4
            proto_tree_add_item(aurl_tree, hf_pfcp_url, tvb, offset, url_len, ENC_ASCII);
4512
4
            dissected_len += url_len;
4513
4
            offset += url_len;
4514
4
        }
4515
2
    }
4516
4517
    /* Bit 8 - ADNP (Additional Domain Name and Domain Name Protocol): If this bit is set to "1",
4518
     * the Length of Additional Domain Name and Domain Name Protocol, and the Additional Domain Name and
4519
     * Domain Name Protocol field shall be present, otherwise they shall not be present.
4520
     */
4521
6
    if (flags & 0x80) {
4522
        /* c to (c+1)   Length of Additional Domain Name and Domain Name Protocol */
4523
0
        proto_tree_add_item_ret_uint(tree, hf_pfcp_adnp_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
4524
0
        offset += 2;
4525
4526
        /* (c+2) to d   Additional Domain Name and Domain Name Protocol */
4527
0
        dissected_len = 0;
4528
0
        adnp_tree = proto_item_add_subtree(item, ett_pfcp_adnp);
4529
0
        while (dissected_len < (int)len) {
4530
0
            uint32_t domain_name_len, domain_name_prot_len;
4531
            /* (c+2) to (c+3)   Length of Domain Name */
4532
0
            proto_tree_add_item_ret_uint(adnp_tree, hf_pfcp_dn_len, tvb, offset, 2, ENC_BIG_ENDIAN, &domain_name_len);
4533
0
            dissected_len += 2;
4534
0
            offset += 2;
4535
4536
            /* (c+4) to pd   Domain Name */
4537
0
            proto_tree_add_item(adnp_tree, hf_pfcp_dn, tvb, offset, domain_name_len, ENC_ASCII);
4538
0
            dissected_len += domain_name_len;
4539
0
            offset += domain_name_len;
4540
4541
            /* (pe) to (pe+1)   Length of Domain Name Protocol */
4542
0
            proto_tree_add_item_ret_uint(adnp_tree, hf_pfcp_dnp_len, tvb, offset, 2, ENC_BIG_ENDIAN, &domain_name_prot_len);
4543
0
            dissected_len += 2;
4544
0
            offset += 2;
4545
4546
            /* (pe+2) to ph   Domain Name Protocol */
4547
0
            proto_tree_add_item(adnp_tree, hf_pfcp_dnp, tvb, offset, domain_name_prot_len, ENC_ASCII);
4548
0
            dissected_len += domain_name_prot_len;
4549
0
            offset += domain_name_prot_len;
4550
0
        }
4551
0
    }
4552
4553
6
    if (offset < length) {
4554
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4555
1
    }
4556
4557
6
}
4558
/*
4559
 * 8.2.40   Measurement Method
4560
 */
4561
static void
4562
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_)
4563
1
{
4564
1
    unsigned offset = 0;
4565
4566
1
    static int * const pfcp_measurement_method_flags[] = {
4567
1
        &hf_pfcp_spare_b7_b3,
4568
1
        &hf_pfcp_measurement_method_flags_b2_event,
4569
1
        &hf_pfcp_measurement_method_flags_b1_volume,
4570
1
        &hf_pfcp_measurement_method_flags_b0_durat,
4571
1
        NULL
4572
1
    };
4573
    /* Octet 5  Spare   Spare   Spare   Spare   Spare   EVENT   VOLUM   DURAT */
4574
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_measurement_method_flags, ENC_BIG_ENDIAN);
4575
1
    offset += 1;
4576
4577
1
    if (offset < length) {
4578
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4579
1
    }
4580
4581
1
}
4582
4583
/*
4584
 * 8.2.41   Usage Report Trigger
4585
 */
4586
static void
4587
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_)
4588
1
{
4589
1
    unsigned offset = 0;
4590
4591
1
    static int * const pfcp_usage_report_trigger_o5_flags[] = {
4592
1
        &hf_pfcp_usage_report_trigger_o5_b7_immer,
4593
1
        &hf_pfcp_usage_report_trigger_o5_b6_droth,
4594
1
        &hf_pfcp_usage_report_trigger_o5_b5_stopt,
4595
1
        &hf_pfcp_usage_report_trigger_o5_b4_start,
4596
1
        &hf_pfcp_usage_report_trigger_o5_b3_quhti,
4597
1
        &hf_pfcp_usage_report_trigger_o5_b2_timth,
4598
1
        &hf_pfcp_usage_report_trigger_o5_b1_volth,
4599
1
        &hf_pfcp_usage_report_trigger_o5_b0_perio,
4600
1
        NULL
4601
1
    };
4602
    /* Octet 5  IMMER   DROTH   STOPT   START   QUHTI   TIMTH   VOLTH   PERIO */
4603
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_report_trigger_o5_flags, ENC_BIG_ENDIAN);
4604
1
    offset++;
4605
4606
1
    if (offset == length) {
4607
0
        return;
4608
0
    }
4609
4610
1
    static int * const pfcp_usage_report_trigger_o6_flags[] = {
4611
1
        &hf_pfcp_usage_report_trigger_o6_b7_eveth,
4612
1
        &hf_pfcp_usage_report_trigger_o6_b6_macar,
4613
1
        &hf_pfcp_usage_report_trigger_o6_b5_envcl,
4614
1
        &hf_pfcp_usage_report_trigger_o6_b4_monit,
4615
1
        &hf_pfcp_usage_report_trigger_o6_b3_termr,
4616
1
        &hf_pfcp_usage_report_trigger_o6_b2_liusa,
4617
1
        &hf_pfcp_usage_report_trigger_o6_b1_timqu,
4618
1
        &hf_pfcp_usage_report_trigger_o6_b0_volqu,
4619
1
        NULL
4620
1
    };
4621
    /* Octet 6  EVETH   MACAR   ENVCL   MONIT   TERMR   LIUSA   TIMQU   VOLQU */
4622
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_report_trigger_o6_flags, ENC_BIG_ENDIAN);
4623
1
    offset++;
4624
4625
1
    if (offset == length) {
4626
0
        return;
4627
0
    }
4628
4629
1
    static int * const pfcp_usage_report_trigger_o7_flags[] = {
4630
1
        &hf_pfcp_spare_b7_b6,
4631
1
        &hf_pfcp_usage_report_trigger_o7_b5_upint,
4632
1
        &hf_pfcp_usage_report_trigger_o7_b4_emrre,
4633
1
        &hf_pfcp_usage_report_trigger_o7_b3_quvti,
4634
1
        &hf_pfcp_usage_report_trigger_o7_b2_ipmjl,
4635
1
        &hf_pfcp_usage_report_trigger_o7_b1_tebur,
4636
1
        &hf_pfcp_usage_report_trigger_o7_b0_evequ,
4637
1
        NULL
4638
1
    };
4639
    /* Octet 7  Spare   Spare   UPINT   EMRRE   QUVTI   IPMJL   TEBUR   EVEQU */
4640
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_report_trigger_o7_flags, ENC_BIG_ENDIAN);
4641
1
    offset++;
4642
4643
1
    if (offset == length) {
4644
0
        return;
4645
0
    }
4646
4647
1
    if (offset < length) {
4648
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4649
1
    }
4650
4651
1
}
4652
4653
/*
4654
 * 8.2.42   Measurement Period
4655
 */
4656
static void
4657
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_)
4658
3
{
4659
3
    unsigned offset = 0;
4660
3
    uint32_t value;
4661
    /* 5 to 8   Measurement Period*/
4662
3
    proto_tree_add_item_ret_uint(tree, hf_pfcp_measurement_period, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
4663
3
    offset += 4;
4664
4665
3
    proto_item_append_text(item, "%u", value);
4666
4667
3
    if (offset < length) {
4668
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4669
3
    }
4670
3
}
4671
4672
/*
4673
 * 8.2.43   Fully qualified PDN Connection Set Identifier (FQ-CSID)
4674
 */
4675
static const value_string pfcp_fq_csid_node_id_type_vals[] = {
4676
4677
    { 0, "Node-Address is a global unicast IPv4 address" },
4678
    { 1, "Node-Address is a global unicast IPv6 address" },
4679
    { 2, "Node-Address is a 4 octets long field" },
4680
    { 0, NULL }
4681
};
4682
4683
static const value_string pfcp_fq_csid_node_type_vals[] = {
4684
4685
    { 0, "MME" },
4686
    { 1, "SGW-C" },
4687
    { 2, "PGW-C/SMF" },
4688
    { 3, "ePDG" },
4689
    { 4, "TWAN" },
4690
    { 5, "PGW-U/SGW-U/UPF" },
4691
    { 0, NULL }
4692
};
4693
4694
static void
4695
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_)
4696
3
{
4697
3
    unsigned offset = 0;
4698
3
    uint32_t node_id_type, num_csid;
4699
4700
    /* Octet 5  FQ-CSID Node-ID Type    Number of CSIDs= m*/
4701
3
    proto_tree_add_item_ret_uint(tree, hf_pfcp_fq_csid_node_id_type, tvb, offset, 1, ENC_BIG_ENDIAN, &node_id_type);
4702
3
    proto_tree_add_item_ret_uint(tree, hf_pfcp_num_csid, tvb, offset, 1, ENC_BIG_ENDIAN, &num_csid);
4703
3
    offset++;
4704
4705
    /* 6 to p   Node-Address  */
4706
3
    switch (node_id_type) {
4707
1
    case 0:
4708
        /* 0    indicates that Node-Address is a global unicast IPv4 address and p = 9 */
4709
1
        proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
4710
1
        offset += 4;
4711
1
        break;
4712
0
    case 1:
4713
        /* 1    indicates that Node-Address is a global unicast IPv6 address and p = 21 */
4714
0
        proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_ipv6, tvb, offset, 16, ENC_NA);
4715
0
        offset += 16;
4716
0
        break;
4717
0
    case 2:
4718
        /* 2    indicates that Node-Address is a 4 octets long field with a 32 bit value stored in network order, and p= 9
4719
         *      Most significant 20 bits are the binary encoded value of (MCC * 1000 + MNC).
4720
         *      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
4721
         */
4722
0
        proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_mcc_mnc, tvb, offset, 4, ENC_BIG_ENDIAN);
4723
0
        proto_tree_add_item(tree, hf_pfcp_fq_csid_node_id_int, tvb, offset, 4, ENC_BIG_ENDIAN);
4724
0
        offset += 4;
4725
0
        break;
4726
2
    default:
4727
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4728
2
        break;
4729
3
    }
4730
4731
16
    while (num_csid > 0) {
4732
13
        proto_tree_add_item(tree, hf_pfcp_fq_csid, tvb, offset, 2, ENC_BIG_ENDIAN);
4733
13
        offset += 2;
4734
13
        num_csid--;
4735
13
    }
4736
4737
3
    if (offset < length) {
4738
2
        proto_tree_add_item(tree, hf_pfcp_spare_b7_b4, tvb, offset, 1, ENC_BIG_ENDIAN);
4739
2
        proto_tree_add_item(tree, hf_pfcp_fq_csid_node_type, tvb, offset, 1, ENC_BIG_ENDIAN);
4740
2
        offset++;
4741
2
    }
4742
4743
3
    if (offset < length) {
4744
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4745
2
    }
4746
4747
3
}
4748
/*
4749
 * 8.2.44   Volume Measurement
4750
 */
4751
static void
4752
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_)
4753
3
{
4754
3
    unsigned offset = 0;
4755
3
    uint64_t flags;
4756
4757
3
    static int * const pfcp_volume_measurement_flags[] = {
4758
3
        &hf_pfcp_spare_b7_b6,
4759
3
        &hf_pfcp_volume_measurement_b5_dlnop,
4760
3
        &hf_pfcp_volume_measurement_b4_ulnop,
4761
3
        &hf_pfcp_volume_measurement_b3_tonop,
4762
3
        &hf_pfcp_volume_measurement_b2_dlvol,
4763
3
        &hf_pfcp_volume_measurement_b1_ulvol,
4764
3
        &hf_pfcp_volume_measurement_b0_tovol,
4765
3
        NULL
4766
3
    };
4767
    /* Octet 5  Spare   DLNOP   ULNOP   TONOP   DLVOL   ULVOL   TOVOL*/
4768
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_volume_measurement_flags, ENC_BIG_ENDIAN, &flags);
4769
3
    offset += 1;
4770
4771
    /* Bit 1 - TOVOL: If this bit is set to "1", then the Total Volume field shall be present*/
4772
3
    if ((flags & 0x1)) {
4773
        /* m to (m+7)   Total Volume */
4774
1
        proto_tree_add_item(tree, hf_pfcp_vol_meas_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
4775
1
        offset += 8;
4776
1
    }
4777
    /* Bit 2 - ULVOL: If this bit is set to "1", then the Total Volume field shall be present*/
4778
3
    if ((flags & 0x2)) {
4779
        /* p to (p+7)   Uplink Volume */
4780
1
        proto_tree_add_item(tree, hf_pfcp_vol_meas_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
4781
1
        offset += 8;
4782
1
    }
4783
    /* Bit 3 - DLVOL: If this bit is set to "1", then the Total Volume field shall be present*/
4784
3
    if ((flags & 0x4)) {
4785
        /*q to (q+7)    Downlink Volume */
4786
1
        proto_tree_add_item(tree, hf_pfcp_vol_meas_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
4787
1
        offset += 8;
4788
1
    }
4789
    /* Bit 4 - TONOP: If this bit is set to "1", then the Total Number of Packets field shall be present*/
4790
3
    if ((flags & 0x8)) {
4791
        /* r to (r+7)   Total Number of Packets */
4792
1
        proto_tree_add_item(tree, hf_pfcp_vol_meas_tonop, tvb, offset, 8, ENC_BIG_ENDIAN);
4793
1
        offset += 8;
4794
1
    }
4795
    /* Bit 5 - ULNOP: If this bit is set to "1", then the Total Number of Packets field shall be present*/
4796
3
    if ((flags & 0x10)) {
4797
        /* s to (s+7)   Uplink Number of Packets */
4798
1
        proto_tree_add_item(tree, hf_pfcp_vol_meas_ulnop, tvb, offset, 8, ENC_BIG_ENDIAN);
4799
1
        offset += 8;
4800
1
    }
4801
    /* Bit 6 - DLNOP: If this bit is set to "1", then the Total Number of Packets field shall be present*/
4802
3
    if ((flags & 0x20)) {
4803
        /*t to (t+7)    Downlink Number of Packets */
4804
2
        proto_tree_add_item(tree, hf_pfcp_vol_meas_dlnop, tvb, offset, 8, ENC_BIG_ENDIAN);
4805
2
        offset += 8;
4806
2
    }
4807
4808
3
    if (offset < length) {
4809
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4810
1
    }
4811
4812
3
}
4813
/*
4814
 * 8.2.45   Duration Measurement
4815
 */
4816
static void
4817
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_)
4818
0
{
4819
0
    unsigned offset = 0;
4820
0
    uint32_t value;
4821
    /* 5 to 8   Duration value*/
4822
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_duration_measurement, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
4823
0
    offset += 4;
4824
4825
0
    proto_item_append_text(item, "%u s", value);
4826
4827
0
    if (offset < length) {
4828
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4829
0
    }
4830
0
}
4831
/*
4832
 * 8.2.46   Time of First Packet
4833
 */
4834
static void
4835
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_)
4836
1
{
4837
1
    unsigned offset = 0;
4838
1
    char *time_str;
4839
4840
    /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
4841
     * format as defined in section 6 of IETF RFC 5905
4842
     */
4843
4844
1
    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);
4845
1
    proto_item_append_text(item, "%s", time_str);
4846
1
    offset += 4;
4847
4848
1
    if (offset < length) {
4849
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4850
1
    }
4851
1
}
4852
/*
4853
 * 8.2.47   Time of Last Packet
4854
 */
4855
static void
4856
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_)
4857
1
{
4858
1
    unsigned offset = 0;
4859
1
    char *time_str;
4860
4861
    /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
4862
    * format as defined in section 6 of IETF RFC 5905
4863
    */
4864
4865
1
    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);
4866
1
    proto_item_append_text(item, "%s", time_str);
4867
1
    offset += 4;
4868
4869
1
    if (offset < length) {
4870
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4871
1
    }
4872
1
}
4873
/*
4874
 * 8.2.48   Quota Holding Time
4875
 */
4876
static void
4877
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_)
4878
0
{
4879
0
    unsigned offset = 0;
4880
0
    uint32_t value;
4881
    /* Octet 5 to 8    Time Quota value
4882
    * The Time Quota value shall be encoded as an Unsigned32 binary integer value. It contains a duration in seconds
4883
    */
4884
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_quota_holding_time, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
4885
0
    offset += 4;
4886
4887
0
    proto_item_append_text(item, "%u s", value);
4888
4889
0
    if (offset < length) {
4890
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4891
0
    }
4892
4893
0
}
4894
4895
/*
4896
 * 8.2.49   Dropped DL Traffic Threshold
4897
 */
4898
static void
4899
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_)
4900
3
{
4901
3
    unsigned offset = 0;
4902
3
    uint64_t flags_val;
4903
4904
3
    static int * const pfcp_dropped_dl_traffic_threshold_flags[] = {
4905
3
        &hf_pfcp_dropped_dl_traffic_threshold_b1_dlby,
4906
3
        &hf_pfcp_dropped_dl_traffic_threshold_b0_dlpa,
4907
3
        NULL
4908
3
    };
4909
    /* Octet 5  Spare   DLBY    DLPA*/
4910
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_dropped_dl_traffic_threshold_flags, ENC_BIG_ENDIAN, &flags_val);
4911
3
    offset += 1;
4912
4913
3
    if ((flags_val & 0x1) == 1) {
4914
        /* m to (m+7)   Downlink Packets
4915
        * DLPA: If this bit is set to "1", then the Downlink Packets field shall be present
4916
        */
4917
1
        proto_tree_add_item(tree, hf_pfcp_downlink_packets, tvb, offset, 8, ENC_BIG_ENDIAN);
4918
1
        offset += 8;
4919
1
    }
4920
4921
3
    if ((flags_val & 0x2) == 2) {
4922
        /* o to (o+7)   Number of Bytes of Downlink Data
4923
        * DLBY: If this bit is set to "1", then the Number of Bytes of Downlink Data field shall be present
4924
        */
4925
1
        proto_tree_add_item(tree, hf_pfcp_bytes_downlink_data, tvb, offset, 8, ENC_BIG_ENDIAN);
4926
1
        offset += 8;
4927
1
    }
4928
4929
3
    if (offset < length) {
4930
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4931
2
    }
4932
3
}
4933
/*
4934
 * 8.2.50   Volume Quota
4935
 */
4936
static void
4937
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_)
4938
4
{
4939
4
    unsigned offset = 0;
4940
4
    uint64_t flags_val;
4941
4942
4
    static int * const pfcp_volume_quota_flags[] = {
4943
4
        &hf_pfcp_spare_b7_b3,
4944
4
        &hf_pfcp_volume_quota_b2_dlvol,
4945
4
        &hf_pfcp_volume_quota_b1_ulvol,
4946
4
        &hf_pfcp_volume_quota_b0_tovol,
4947
4
        NULL
4948
4
    };
4949
    /* Octet 5  Spare   DLVOL   ULVOL   TOVOL*/
4950
4
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_volume_quota_flags, ENC_BIG_ENDIAN, &flags_val);
4951
4
    offset += 1;
4952
4953
    /* The Total Volume, Uplink Volume and Downlink Volume fields shall be encoded as an Unsigned64 binary integer value.
4954
    * They shall contain the total, uplink or downlink number of octets respectively.
4955
    */
4956
4
    if ((flags_val & 0x1) == 1) {
4957
        /* m to (m+7)   Total Volume
4958
        * TOVOL: If this bit is set to "1", then the Total Volume field shall be present
4959
        */
4960
3
        proto_tree_add_item(tree, hf_pfcp_volume_quota_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
4961
3
        offset += 8;
4962
3
    }
4963
4
    if ((flags_val & 0x2) == 2) {
4964
        /* p to (p+7)    Uplink Volume
4965
        * ULVOL: If this bit is set to "1", then the Uplink Volume field shall be present
4966
        */
4967
1
        proto_tree_add_item(tree, hf_pfcp_volume_quota_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
4968
1
        offset += 8;
4969
1
    }
4970
4
    if ((flags_val & 0x4) == 4) {
4971
        /* q to (q+7)   Downlink Volume
4972
        * DLVOL: If this bit is set to "1", then the Downlink Volume field shall be present
4973
        */
4974
1
        proto_tree_add_item(tree, hf_pfcp_volume_quota_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
4975
1
        offset += 8;
4976
1
    }
4977
4978
4
    if (offset < length) {
4979
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
4980
3
    }
4981
4
}
4982
/*
4983
 * 8.2.51   Time Quota
4984
 */
4985
static void
4986
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_)
4987
1
{
4988
1
    unsigned offset = 0;
4989
1
    uint32_t value;
4990
    /* Octet 5 to 8    Time Quota value
4991
    * The Time Quota value shall be encoded as an Unsigned32 binary integer value. It contains a duration in seconds
4992
    */
4993
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_time_quota, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
4994
1
    offset += 4;
4995
4996
1
    proto_item_append_text(item, "%u s", value);
4997
4998
1
    if (offset < length) {
4999
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5000
1
    }
5001
5002
1
}
5003
/*
5004
 * 8.2.52   Start Time
5005
 */
5006
static void
5007
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_)
5008
1
{
5009
1
    char *time_str;
5010
1
    unsigned offset = 0;
5011
5012
    /* The Start Time field shall contain a UTC time. Octets 5 to 8 are encoded in the same format as
5013
    * the first four octets of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905 [26].
5014
    */
5015
1
    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);
5016
1
    proto_item_append_text(item, "%s", time_str);
5017
1
    offset += 4;
5018
5019
1
    if (offset < length) {
5020
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5021
1
    }
5022
5023
1
}
5024
/*
5025
 * 8.2.53   End Time
5026
 */
5027
static void
5028
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_)
5029
1
{
5030
1
    char *time_str;
5031
1
    unsigned offset = 0;
5032
5033
    /* The End Time field shall contain a UTC time. Octets 5 to 8 are encoded in the same format as
5034
    * the first four octets of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905 [26].
5035
    */
5036
1
    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);
5037
1
    proto_item_append_text(item, "%s", time_str);
5038
1
    offset += 4;
5039
5040
1
    if (offset < length) {
5041
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5042
1
    }
5043
5044
1
}
5045
5046
/*
5047
 * 8.2.54   URR ID
5048
 */
5049
static int
5050
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)
5051
3
{
5052
3
    uint32_t urr_id;
5053
    /* Octet 5 to 8 URR ID value
5054
    * The bit 8 of octet 5 is used to indicate if the Rule ID is dynamically allocated by the CP function
5055
    * or predefined in the UP function. If set to 0, it indicates that the Rule is dynamically provisioned
5056
    * by the CP Function. If set to 1, it indicates that the Rule is predefined in the UP Function
5057
    */
5058
3
    urr_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN);
5059
5060
3
    proto_tree_add_item(tree, hf_pfcp_urr_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN);
5061
3
    proto_tree_add_item(tree, hf_pfcp_urr_id, tvb, offset, 4, ENC_BIG_ENDIAN);
5062
3
    offset += 4;
5063
5064
3
    proto_item_append_text(item, "%s %u",
5065
3
        tfs_get_string((urr_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
5066
3
        (urr_id & 0x7fffffff));
5067
5068
3
    if (args) {
5069
1
        args->last_rule_ids.urr = urr_id;
5070
1
    }
5071
5072
3
    return offset;
5073
3
}
5074
5075
static void
5076
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)
5077
1
{
5078
1
    unsigned offset = 0;
5079
5080
1
    offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, args);
5081
5082
1
    if (offset < length) {
5083
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5084
1
    }
5085
5086
1
}
5087
/*
5088
 * 8.2.55   Linked URR ID IE
5089
 */
5090
static void
5091
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_)
5092
1
{
5093
1
    unsigned offset = 0;
5094
5095
    /* Octet 5 to 8 Linked URR ID value
5096
    * The Linked URR ID value shall be encoded as an Unsigned32 binary integer value
5097
    */
5098
1
    offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, NULL);
5099
5100
1
    if (offset < length) {
5101
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5102
1
    }
5103
5104
1
}
5105
/*
5106
 * 8.2.56   Outer Header Creation
5107
 */
5108
static void
5109
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_)
5110
9
{
5111
9
    unsigned offset = 0;
5112
9
    uint64_t value;
5113
5114
9
    static int * const outer_hdr_desc[] = {
5115
9
        &hf_pfcp_outer_hdr_desc_o5_b7_stag,
5116
9
        &hf_pfcp_outer_hdr_desc_o5_b6_ctag,
5117
9
        &hf_pfcp_outer_hdr_desc_o5_b5_ipv6,
5118
9
        &hf_pfcp_outer_hdr_desc_o5_b4_ipv4,
5119
9
        &hf_pfcp_outer_hdr_desc_o5_b3_udp_ipv6,
5120
9
        &hf_pfcp_outer_hdr_desc_o5_b2_udp_ipv4,
5121
9
        &hf_pfcp_outer_hdr_desc_o5_b1_gtp_udp_ipv6,
5122
9
        &hf_pfcp_outer_hdr_desc_o5_b0_gtp_udp_ipv4,
5123
9
        &hf_pfcp_outer_hdr_desc_o6_spare,
5124
9
        &hf_pfcp_outer_hdr_desc_o6_b2_ssm_cteid,
5125
9
        &hf_pfcp_outer_hdr_desc_o6_b1_n6,
5126
9
        &hf_pfcp_outer_hdr_desc_o6_b0_n19,
5127
9
        NULL
5128
9
    };
5129
5130
    /* Octet 5-6  Outer Header Creation Description */
5131
9
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 2, outer_hdr_desc, ENC_BIG_ENDIAN, &value);
5132
9
    offset += 2;
5133
5134
5135
    /* m to (m+3)   TEID
5136
     * The TEID field shall be present if the Outer Header Creation Description requests the creation of a GTP-U header.
5137
     * Otherwise it shall not be present
5138
     */
5139
9
    if ((value & 0x0100) || (value & 0x0200)) {
5140
7
        proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_teid, tvb, offset, 4, ENC_BIG_ENDIAN);
5141
7
        offset += 4;
5142
7
    }
5143
5144
    /*
5145
    * p to (p+3)   IPv4
5146
    * The IPv4 Address field shall be present if the Outer Header Creation Description requests the creation of a IPv4 header
5147
    */
5148
9
    if ((value & 0x0100) || (value & 0x0400) || (value & 0x1000)) {
5149
6
        proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
5150
6
        offset += 4;
5151
6
    }
5152
5153
    /*
5154
    * q to (q+15)   IPv6
5155
    * The IPv6 Address field shall be present if the Outer Header Creation Description requests the creation of a IPv6 header
5156
    */
5157
9
    if ((value & 0x0200) || (value & 0x0800) || (value & 0x2000)) {
5158
7
        proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_ipv6, tvb, offset, 16, ENC_NA);
5159
7
        offset += 16;
5160
7
    }
5161
5162
    /*
5163
    * r to (r+1)   Port Number
5164
    * The Port Number field shall be present if the Outer Header Creation Description requests the creation of a UDP/IP header
5165
    */
5166
9
    if ((value & 0x0400) || (value & 0x0800)) {
5167
3
        proto_tree_add_item(tree, hf_pfcp_outer_hdr_creation_port, tvb, offset, 2, ENC_BIG_ENDIAN);
5168
3
        offset += 2;
5169
3
    }
5170
5171
    /*
5172
    * t to (t+2)   C-TAG
5173
    * The C-TAG field shall be present if the Outer Header Creation Description requests the setting of the C-Tag in Ethernet packet
5174
    */
5175
9
    if (value & 0x4000) {
5176
2
        offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
5177
2
    }
5178
5179
    /*
5180
    * u to (u+2)   S-TAG
5181
    * The S-TAG field shall be present if the Outer Header Creation Description requests the setting of the S-Tag in Ethernet packet
5182
    */
5183
9
    if (value & 0x8000) {
5184
1
        offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
5185
1
    }
5186
5187
9
    if (offset < length) {
5188
5
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5189
5
    }
5190
5191
9
}
5192
/*
5193
 * 8.2.57   BAR ID
5194
 */
5195
static int
5196
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)
5197
5
{
5198
5
    uint32_t value;
5199
    /* Octet 5 BAR ID value
5200
    * The BAR ID value shall be encoded as a binary integer value
5201
    */
5202
5
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bar_id, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
5203
5
    offset++;
5204
5
    proto_item_append_text(item, "%u", value);
5205
5206
5
    if (args) {
5207
5
        args->last_rule_ids.bar = value;
5208
5
    }
5209
5210
5
    return offset;
5211
5
}
5212
static void
5213
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)
5214
5
{
5215
5
    unsigned offset = 0;
5216
5217
5
    offset = decode_pfcp_bar_id(tvb, pinfo, tree, item, offset, args);
5218
5219
5
    if (offset < length) {
5220
5
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5221
5
    }
5222
5223
5
}
5224
5225
/*
5226
 * 8.2.58   CP Function Features
5227
 */
5228
static void
5229
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_)
5230
1
{
5231
1
    unsigned offset = 0;
5232
5233
1
    static int * const pfcp_cp_function_features_o5_flags[] = {
5234
1
        &hf_pfcp_cp_function_features_o5_b7_uiaur,
5235
1
        &hf_pfcp_cp_function_features_o5_b6_ardr,
5236
1
        &hf_pfcp_cp_function_features_o5_b5_mpas,
5237
1
        &hf_pfcp_cp_function_features_o5_b4_bundl,
5238
1
        &hf_pfcp_cp_function_features_o5_b3_sset,
5239
1
        &hf_pfcp_cp_function_features_o5_b2_epfar,
5240
1
        &hf_pfcp_cp_function_features_o5_b1_ovrl,
5241
1
        &hf_pfcp_cp_function_features_o5_b0_load,
5242
1
        NULL
5243
1
    };
5244
    /* Octet 5  UIAUR   ARDR    MPAS    BUNDL   SSET   EPFAR   OVRL   LOAD */
5245
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_cp_function_features_o5_flags, ENC_BIG_ENDIAN);
5246
1
    offset++;
5247
5248
1
    if (offset == length) {
5249
0
        return;
5250
0
    }
5251
5252
1
    static int * const pfcp_cp_function_features_o6_flags[] = {
5253
1
        &hf_pfcp_spare_b7_b3,
5254
1
        &hf_pfcp_cp_function_features_o6_b2_papfd,
5255
1
        &hf_pfcp_cp_function_features_o6_b1_rpgur,
5256
1
        &hf_pfcp_cp_function_features_o6_b0_psucc,
5257
1
        NULL
5258
1
    };
5259
    /* Octet 6  Spare   Spare    Spare    Spare   Spare   Spare   RPGUR   PSUCC */
5260
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_cp_function_features_o6_flags, ENC_BIG_ENDIAN);
5261
1
    offset++;
5262
5263
1
    if (offset < length) {
5264
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5265
1
    }
5266
5267
1
}
5268
5269
/*
5270
 * 8.2.59   Usage Information
5271
 */
5272
static void
5273
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_)
5274
1
{
5275
1
    unsigned offset = 0;
5276
5277
1
    static int * const pfcp_usage_information_flags[] = {
5278
1
        &hf_pfcp_spare_h1,
5279
1
        &hf_pfcp_usage_information_b3_ube,
5280
1
        &hf_pfcp_usage_information_b2_uae,
5281
1
        &hf_pfcp_usage_information_b1_aft,
5282
1
        &hf_pfcp_usage_information_b0_bef,
5283
1
        NULL
5284
1
    };
5285
    /* Octet 5  Spare   UBE UAE AFT BEF */
5286
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_usage_information_flags, ENC_BIG_ENDIAN);
5287
1
    offset += 1;
5288
5289
1
    if (offset < length) {
5290
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5291
1
    }
5292
5293
1
}
5294
5295
/*
5296
 * 8.2.60   Application Instance ID
5297
 */
5298
static void
5299
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_)
5300
2
{
5301
2
    unsigned offset = 0;
5302
5303
    /* Octet 5 5 to (n+4)   Application Instance Identifier
5304
     * The Application Instance Identifier shall be encoded as an OctetString (see 3GPP TS 29.212)
5305
     */
5306
2
    if (tvb_ascii_isprint(tvb, offset, length))
5307
0
    {
5308
0
        const uint8_t* string_value;
5309
0
        proto_tree_add_item_ret_string(tree, hf_pfcp_application_instance_id_str, tvb, offset, length, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
5310
0
        proto_item_append_text(item, "%s", string_value);
5311
0
    }
5312
2
    else
5313
2
    {
5314
2
        proto_tree_add_item(tree, hf_pfcp_application_instance_id, tvb, offset, length, ENC_NA);
5315
2
    }
5316
2
}
5317
5318
/*
5319
 * 8.2.61   Flow Information
5320
 */
5321
static const value_string pfcp_flow_dir_vals[] = {
5322
    { 0, "Unspecified" },
5323
    { 1, "Downlink (traffic to the UE)" },
5324
    { 2, "Uplink (traffic from the UE)" },
5325
    { 3, "Bidirectional" },
5326
    { 0, NULL }
5327
};
5328
5329
static void
5330
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_)
5331
0
{
5332
0
    unsigned offset = 0;
5333
0
    uint32_t len;
5334
    /* Octet 5 Spare    Flow Direction */
5335
0
    proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN);
5336
0
    proto_tree_add_item(tree, hf_pfcp_flow_dir, tvb, offset, 1, ENC_BIG_ENDIAN);
5337
0
    offset++;
5338
5339
    /* 6 to 7   Length of Flow Description */
5340
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_flow_desc_len, tvb, offset, 2, ENC_BIG_ENDIAN, &len);
5341
0
    offset += 2;
5342
    /* Flow Description
5343
    * The Flow Description field, when present, shall be encoded as an OctetString
5344
    * as specified in subclause 5.4.2 of 3GPP TS 29.212
5345
    */
5346
0
    proto_tree_add_item(tree, hf_pfcp_flow_desc, tvb, offset, len, ENC_ASCII);
5347
0
    offset += len;
5348
5349
0
    if (offset < length) {
5350
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5351
0
    }
5352
5353
0
}
5354
5355
/*
5356
 * 8.2.62   UE IP Address
5357
 */
5358
static const true_false_string pfcp_ue_ip_add_sd_flag_vals = {
5359
    "Destination IP address",
5360
    "Source IP address",
5361
};
5362
5363
static void
5364
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_)
5365
3
{
5366
3
    unsigned offset = 0;
5367
3
    uint64_t ue_ip_address_flags;
5368
5369
3
    static int * const pfcp_ue_ip_address_flags[] = {
5370
3
        &hf_pfcp_spare_b7,
5371
3
        &hf_pfcp_ue_ip_address_flag_b6_v6pl,
5372
3
        &hf_pfcp_ue_ip_address_flag_b5_chv6,
5373
3
        &hf_pfcp_ue_ip_address_flag_b4_chv4,
5374
3
        &hf_pfcp_ue_ip_address_flag_b3_v6d,
5375
3
        &hf_pfcp_ue_ip_address_flag_b2_sd,
5376
3
        &hf_pfcp_ue_ip_address_flag_b1_v4,
5377
3
        &hf_pfcp_ue_ip_address_flag_b0_v6,
5378
3
        NULL
5379
3
    };
5380
    /* Octet 5  Spare   IPV6PL  CHV6    CHV4   IPv6D   S/D     V4      V6*/
5381
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_ue_ip_address_flags, ENC_BIG_ENDIAN, &ue_ip_address_flags);
5382
3
    offset += 1;
5383
5384
    /* IPv4 address (if present)*/
5385
3
    if ((ue_ip_address_flags & 0x2)) {
5386
0
        proto_tree_add_item(tree, hf_pfcp_ue_ip_addr_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
5387
0
        offset += 4;
5388
0
    }
5389
    /* IPv6 address (if present)*/
5390
3
    if ((ue_ip_address_flags & 0x1)) {
5391
2
        proto_tree_add_item(tree, hf_pfcp_ue_ip_add_ipv6, tvb, offset, 16, ENC_NA);
5392
2
        offset += 16;
5393
2
    }
5394
    /* IPv6 Prefix Delegation Bits (if present)*/
5395
3
    if ((ue_ip_address_flags & 0x8)) {
5396
1
        proto_tree_add_item(tree, hf_pfcp_ue_ip_add_ipv6_prefix_delegation_bits, tvb, offset, 1, ENC_NA);
5397
1
        offset += 1;
5398
1
    }
5399
    /* IPv6 Prefix Lengths (if present)*/
5400
3
    if ((ue_ip_address_flags & 0x40)) {
5401
1
        proto_tree_add_item(tree, hf_pfcp_ue_ip_add_ipv6_prefix_length, tvb, offset, 1, ENC_NA);
5402
1
        offset += 1;
5403
1
    }
5404
5405
3
    if (offset < length) {
5406
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5407
3
    }
5408
5409
3
}
5410
/*
5411
 * 8.2.63   Packet Rate
5412
 */
5413
static const value_string pfcp_pr_time_unit_vals[] = {
5414
    { 0, "Minute" },
5415
    { 1, "6 minutes" },
5416
    { 2, "Hour" },
5417
    { 3, "Day" },
5418
    { 4, "Week" },
5419
    { 0, NULL }
5420
};
5421
5422
static void
5423
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_)
5424
2
{
5425
2
    unsigned offset = 0;
5426
2
    uint64_t flags;
5427
5428
2
    static int * const pfcp_packet_rate_flags[] = {
5429
2
        &hf_pfcp_spare_b7_b4,
5430
2
        &hf_pfcp_packet_rate_b2_aprc,
5431
2
        &hf_pfcp_packet_rate_b1_dlpr,
5432
2
        &hf_pfcp_packet_rate_b0_ulpr,
5433
2
        NULL
5434
2
    };
5435
    /* Octet 5  Spare   DLPR    ULPR */
5436
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_packet_rate_flags, ENC_BIG_ENDIAN, &flags);
5437
2
    offset += 1;
5438
5439
    /* Bit 1 - ULPR (Uplink Packet Rate): If this bit is set to "1", then octets m to (m+2) shall be present */
5440
2
    if ((flags & 0x1)) {
5441
        /* m */
5442
1
        proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN);
5443
1
        proto_tree_add_item(tree, hf_pfcp_ul_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
5444
1
        offset += 1;
5445
        /* (m+1) to (m+2)   Maximum Uplink Packet Rate */
5446
1
        proto_tree_add_item(tree, hf_pfcp_max_ul_pr, tvb, offset, 2, ENC_BIG_ENDIAN);
5447
1
        offset += 2;
5448
1
    }
5449
    /* Bit 2 - DLPR (Downlink Packet Rate): If this bit is set to "1", then octets p to (p+2) shall be present*/
5450
2
    if ((flags & 0x2)) {
5451
        /* p */
5452
1
        proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN);
5453
1
        proto_tree_add_item(tree, hf_pfcp_dl_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
5454
1
        offset += 1;
5455
        /* (p+1) to (p+2)   Maximum Uplink Packet Rate */
5456
1
        proto_tree_add_item(tree, hf_pfcp_max_dl_pr, tvb, offset, 2, ENC_BIG_ENDIAN);
5457
1
        offset += 2;
5458
1
    }
5459
    /* Bit 4 - APRC (Additional Packet Rate Control) */
5460
2
    if ((flags & 0x8)) {
5461
        /* If bit 1 (ULPR) is set to "1", then octets q to (q+2), the Additional Maximum Uplink Packet Rate shall be present. */
5462
1
        if ((flags & 0x1)) {
5463
            /* q */
5464
0
            proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN);
5465
0
            proto_tree_add_item(tree, hf_pfcp_a_ul_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
5466
0
            offset += 1;
5467
            /* (q+1) to (q+2)   Additional Maximum Uplink Packet Rate */
5468
0
            proto_tree_add_item(tree, hf_pfcp_a_max_ul_pr, tvb, offset, 2, ENC_BIG_ENDIAN);
5469
0
            offset += 2;
5470
0
        }
5471
        /* If bit 2 (DLPR) is set to "1", then octets r to (r+2), the Additional Maximum Downlink Packet Rate shall be present. */
5472
1
        if ((flags & 0x2)) {
5473
            /* r */
5474
0
            proto_tree_add_item(tree, hf_pfcp_spare_b7_b3, tvb, offset, 1, ENC_BIG_ENDIAN);
5475
0
            proto_tree_add_item(tree, hf_pfcp_a_dl_time_unit, tvb, offset, 1, ENC_BIG_ENDIAN);
5476
0
            offset += 1;
5477
            /* (r+1) to (r+2)   Additional Maximum Uplink Packet Rate */
5478
0
            proto_tree_add_item(tree, hf_pfcp_a_max_dl_pr, tvb, offset, 2, ENC_BIG_ENDIAN);
5479
0
            offset += 2;
5480
0
        }
5481
1
    }
5482
5483
2
    if (offset < length) {
5484
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5485
2
    }
5486
5487
2
}
5488
5489
/*
5490
 * 8.2.64   Outer Header Removal
5491
 */
5492
static const value_string pfcp_out_hdr_desc_vals[] = {
5493
    { 0, "GTP-U/UDP/IPv4" },
5494
    { 1, "GTP-U/UDP/IPv6" },
5495
    { 2, "UDP/IPv4" },
5496
    { 3, "UDP/IPv6 " },
5497
    { 4, "IPv4" },
5498
    { 5, "IPv6 " },
5499
    { 6, "GTP-U/UDP/IP" },
5500
    { 7, "VLAN TAG POP" },
5501
    { 8, "VLAN TAGs POP-POP" },
5502
    { 0, NULL }
5503
};
5504
5505
static void
5506
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_)
5507
0
{
5508
0
    unsigned offset = 0;
5509
0
    uint32_t value;
5510
5511
0
    static int * const pfcp_gtpu_ext_hdr_del_flags[] = {
5512
0
        &hf_pfcp_gtpu_ext_hdr_del_b0_pdu_sess_cont,
5513
0
        NULL
5514
0
    };
5515
5516
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_out_hdr_desc, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
5517
0
    offset++;
5518
0
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_out_hdr_desc_vals, "Unknown"));
5519
5520
    /* Octet 6  GTP-U Extension Header Deletion */
5521
0
    if (offset < length) {
5522
0
        proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_gtpu_ext_hdr_del_flags, ENC_BIG_ENDIAN);
5523
0
        offset++;
5524
0
    }
5525
5526
0
    if (offset < length) {
5527
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5528
0
    }
5529
0
}
5530
 /*
5531
 * 8.2.65   Recovery Time Stamp
5532
 */
5533
5534
static void
5535
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_)
5536
1
{
5537
1
    char *time_str;
5538
1
    unsigned offset = 0;
5539
5540
    /* indicates the UTC time when the node started. Octets 5 to 8 are encoded in the same format as
5541
    * the first four octets of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905 [26].
5542
    */
5543
1
    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);
5544
1
    proto_item_append_text(item, "%s", time_str);
5545
1
    offset += 4;
5546
5547
1
    if (offset < length) {
5548
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5549
1
    }
5550
5551
1
}
5552
/*
5553
 * 8.2.66   DL Flow Level Marking
5554
 */
5555
static void
5556
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_)
5557
2
{
5558
2
    unsigned offset = 0;
5559
2
    uint64_t flags_val;
5560
5561
2
    static int * const pfcp_dl_flow_level_marking_flags[] = {
5562
2
        &hf_pfcp_spare_b7_b2,
5563
2
        &hf_pfcp_dl_flow_level_marking_b1_sci,
5564
2
        &hf_pfcp_dl_flow_level_marking_b0_ttc,
5565
2
        NULL
5566
2
    };
5567
    /* Octet 5  Spare   SCI TTC*/
5568
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_dl_flow_level_marking_flags, ENC_BIG_ENDIAN, &flags_val);
5569
2
    offset += 1;
5570
5571
    /* Bit 1 - TTC (ToS/Traffic Class): If this bit is set to "1",
5572
     * then the ToS/Traffic Class field shall be present
5573
     */
5574
2
    if ((flags_val & 0x1) == 1) {
5575
        /* m to (m+1)    ToS/Traffic Class
5576
        * The ToS/Traffic Class shall be encoded on two octets as an OctetString.
5577
        * The first octet shall contain the IPv4 Type-of-Service or the IPv6 Traffic-Class field and
5578
        * the second octet shall contain the ToS/Traffic Class mask field
5579
        */
5580
1
        proto_tree_add_item(tree, hf_pfcp_traffic_class, tvb, offset, 1, ENC_BIG_ENDIAN);
5581
1
        offset += 1;
5582
1
        proto_tree_add_item(tree, hf_pfcp_traffic_mask, tvb, offset, 1, ENC_BIG_ENDIAN);
5583
1
        offset += 1;
5584
1
    }
5585
    /* SCI (Service Class Indicator): If this bit is set to "1",
5586
     * then the Service Class Indicator field shall be present
5587
     */
5588
2
    if ((flags_val & 0x2) == 2) {
5589
        /* Octets p and (p+1) of the Service Class Indicator field, when present,
5590
        * shall be encoded respectively as octets 2 and 3 of the Service Class Indicator Extension Header
5591
        * specified in Figure 5.2.2.3-1 of 3GPP TS 29.281
5592
        */
5593
1
        proto_tree_add_item(tree, hf_pfcp_sci, tvb, offset, 2, ENC_BIG_ENDIAN);
5594
1
        offset += 2;
5595
1
    }
5596
5597
2
    if (offset < length) {
5598
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5599
2
    }
5600
5601
2
}
5602
5603
/*
5604
 * 8.2.67   Header Enrichment
5605
 */
5606
static const value_string pfcp_header_type_vals[] = {
5607
    { 0, "HTTP" },
5608
    { 0, NULL }
5609
};
5610
5611
static void
5612
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_)
5613
0
{
5614
0
    unsigned offset = 0;
5615
0
    uint32_t len;
5616
5617
    /* Octet 5 Spare    Header Type
5618
    */
5619
0
    proto_tree_add_item(tree, hf_pfcp_spare_b7_b5, tvb, offset, 1, ENC_BIG_ENDIAN);
5620
0
    proto_tree_add_item(tree, hf_pfcp_header_type, tvb, offset, 1, ENC_BIG_ENDIAN);
5621
0
    offset++;
5622
5623
    /* 6    Length of Header Field Name */
5624
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_hf_len, tvb, offset, 1, ENC_BIG_ENDIAN, &len);
5625
0
    offset++;
5626
5627
    /* 7 to m Header Field Name
5628
     * Header Field Name shall be encoded as an OctetString
5629
     */
5630
0
    proto_tree_add_item(tree, hf_pfcp_hf_name, tvb, offset, len, ENC_NA);
5631
0
    offset+= len;
5632
5633
    /* p    Length of Header Field Value*/
5634
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_hf_val_len, tvb, offset, 1, ENC_BIG_ENDIAN, &len);
5635
0
    offset++;
5636
5637
    /* (p+1) to q   Header Field Value */
5638
0
    proto_tree_add_item(tree, hf_pfcp_hf_val, tvb, offset, len, ENC_NA);
5639
0
    offset += len;
5640
5641
0
    if (offset < length) {
5642
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5643
0
    }
5644
0
}
5645
5646
/*
5647
 * 8.2.68   Measurement Information
5648
 */
5649
static void
5650
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_)
5651
1
{
5652
1
    unsigned offset = 0;
5653
5654
1
    static int * const pfcp_measurement_info_flags[] = {
5655
1
        &hf_pfcp_measurement_info_b7_ciam,
5656
1
        &hf_pfcp_measurement_info_b6_aspoc,
5657
1
        &hf_pfcp_measurement_info_b5_sspoc,
5658
1
        &hf_pfcp_measurement_info_b4_mnop,
5659
1
        &hf_pfcp_measurement_info_b3_istm,
5660
1
        &hf_pfcp_measurement_info_b2_radi,
5661
1
        &hf_pfcp_measurement_info_b1_inam,
5662
1
        &hf_pfcp_measurement_info_b0_mbqe,
5663
1
        NULL
5664
1
    };
5665
    /* Octet 5  CIAM   ASPOC   SSPOC   MNOP    ISTM    INAM    MBQE */
5666
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_measurement_info_flags, ENC_BIG_ENDIAN);
5667
1
    offset += 1;
5668
5669
1
    if (offset < length) {
5670
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5671
1
    }
5672
5673
1
}
5674
/*
5675
 * 8.2.69   Node Report Type
5676
 */
5677
static void
5678
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_)
5679
2
{
5680
2
    unsigned offset = 0;
5681
5682
2
    static int * const pfcp_node_report_type_flags[] = {
5683
2
        &hf_pfcp_spare_b7,
5684
2
        &hf_pfcp_node_report_type_b6_n6dr,
5685
2
        &hf_pfcp_node_report_type_b5_vsr,
5686
2
        &hf_pfcp_node_report_type_b4_purr,
5687
2
        &hf_pfcp_node_report_type_b3_gpqr,
5688
2
        &hf_pfcp_node_report_type_b2_ckdr,
5689
2
        &hf_pfcp_node_report_type_b1_uprr,
5690
2
        &hf_pfcp_node_report_type_b0_upfr,
5691
2
        NULL
5692
2
    };
5693
    /* Octet 5  Spare   N6DR   VSR   PURR   GPQR   CKDR   UPRR    UPFR */
5694
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_node_report_type_flags, ENC_BIG_ENDIAN);
5695
2
    offset += 1;
5696
5697
2
    if (offset < length) {
5698
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5699
2
    }
5700
5701
2
}
5702
/*
5703
 * 8.2.70   Remote GTP-U Peer
5704
 */
5705
static void
5706
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_)
5707
4
{
5708
4
    unsigned offset = 0;
5709
4
    uint64_t flags;
5710
4
    uint32_t length_di, length_ni;
5711
5712
4
    static int * const pfcp_remote_gtp_u_peer_flags[] = {
5713
4
        &hf_pfcp_spare_b7_b5,
5714
4
        &hf_pfcp_remote_gtp_u_peer_flags_b4_rts,
5715
4
        &hf_pfcp_remote_gtp_u_peer_flags_b3_ni,
5716
4
        &hf_pfcp_remote_gtp_u_peer_flags_b2_di,
5717
4
        &hf_pfcp_remote_gtp_u_peer_flags_b1_v4,
5718
4
        &hf_pfcp_remote_gtp_u_peer_flags_b0_v6,
5719
4
        NULL
5720
4
    };
5721
    /* Octet 5  Spare   RTS NI DI V4  V6*/
5722
4
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_remote_gtp_u_peer_flags, ENC_BIG_ENDIAN, &flags);
5723
4
    offset += 1;
5724
5725
    /* IPv4 address (if present)*/
5726
4
    if (flags & 0x2) {
5727
2
        proto_tree_add_item(tree, hf_pfcp_remote_gtp_u_peer_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
5728
2
        proto_item_append_text(item, "IPv4 %s ", tvb_ip_to_str(pinfo->pool, tvb, offset));
5729
2
        offset += 4;
5730
2
    }
5731
    /* IPv6 address (if present)*/
5732
4
    if (flags & 0x1) {
5733
2
        proto_tree_add_item(tree, hf_pfcp_remote_gtp_u_peer_ipv6, tvb, offset, 16, ENC_NA);
5734
2
        proto_item_append_text(item, "IPv6 %s ", tvb_ip6_to_str(pinfo->pool, tvb, offset));
5735
2
        offset += 16;
5736
2
    }
5737
    /* DI (if present)*/
5738
4
    if (flags & 0x4) {
5739
        /* Length of Destination Interface field */
5740
3
        proto_tree_add_item_ret_uint(tree, hf_pfcp_remote_gtp_u_peer_length_di, tvb, offset, 2, ENC_BIG_ENDIAN, &length_di);
5741
3
        offset += 2;
5742
5743
        /* Destination Interface */
5744
3
        offset += decode_pfcp_destination_interface(tvb, pinfo, tree, item, offset, length_di);
5745
3
    }
5746
    /* NI (if present)*/
5747
4
    if (flags & 0x8) {
5748
        /* Length of Network Instance field */
5749
1
        proto_tree_add_item_ret_uint(tree, hf_pfcp_remote_gtp_u_peer_length_ni, tvb, offset, 2, ENC_BIG_ENDIAN, &length_ni);
5750
1
        offset += 2;
5751
5752
        /* Network Instance */
5753
1
        offset += decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, length_ni);
5754
5755
        /* RTS (if present)*/
5756
1
        proto_tree_add_item(tree, hf_pfcp_remote_gtp_u_peer_time_stamp, tvb, offset, 4, ENC_TIME_NTP | ENC_BIG_ENDIAN);
5757
1
        offset += 4;
5758
1
    }
5759
5760
4
    if (offset < length) {
5761
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5762
2
    }
5763
5764
4
}
5765
5766
/*
5767
 * 8.2.71   UR-SEQN
5768
 */
5769
static void
5770
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_)
5771
0
{
5772
0
    unsigned value;
5773
5774
    /* 5 to 8   UR-SEQN
5775
    * The UR-SEQN value shall be encoded as an Unsigned32 binary integer value
5776
    */
5777
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_ur_seqn, tvb, 0, 4, ENC_BIG_ENDIAN, &value);
5778
5779
0
    proto_item_append_text(item, "%u", value);
5780
5781
5782
0
}
5783
5784
/*
5785
 * 8.2.72   Activate Predefined Rules
5786
 */
5787
static void
5788
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_)
5789
1
{
5790
1
    unsigned offset = 0;
5791
    /* Octet 5 to (n+4) Predefined Rules Name
5792
    * The Predefined Rules Name field shall be encoded as an OctetString
5793
    */
5794
1
    proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA);
5795
1
}
5796
/*
5797
 * 8.2.73   Deactivate Predefined Rules
5798
 */
5799
static void
5800
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_)
5801
1
{
5802
1
    unsigned offset = 0;
5803
    /* Octet 5 to (n+4) Predefined Rules Name
5804
    * The Predefined Rules Name field shall be encoded as an OctetString
5805
    */
5806
1
    proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA);
5807
1
}
5808
/*
5809
 * 8.2.74   FAR ID
5810
 */
5811
static int
5812
decode_pfcp_far_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset, pfcp_session_args_t *args)
5813
2
{
5814
2
    uint32_t far_id;
5815
    /* Octet 5 to 8 FAR ID value
5816
     * The bit 8 of octet 5 is used to indicate if the Rule ID is dynamically allocated
5817
     * by the CP function or predefined in the UP function. If set to 0, it indicates that
5818
     * the Rule is dynamically provisioned by the CP Function. If set to 1, it indicates that
5819
     * the Rule is predefined in the UP Function.
5820
     */
5821
2
    far_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN);
5822
5823
2
    proto_tree_add_item(tree, hf_pfcp_far_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN);
5824
2
    proto_tree_add_item(tree, hf_pfcp_far_id, tvb, offset, 4, ENC_BIG_ENDIAN);
5825
2
    offset += 4;
5826
5827
2
    proto_item_append_text(item, "%s %u",
5828
2
        tfs_get_string((far_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
5829
2
        (far_id & 0x7fffffff));
5830
5831
2
    if (args) {
5832
1
        args->last_rule_ids.far = far_id;
5833
1
    }
5834
5835
2
    return offset;
5836
2
}
5837
5838
static void
5839
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)
5840
1
{
5841
1
    unsigned offset = 0;
5842
5843
1
    offset = decode_pfcp_far_id(tvb, pinfo, tree, item, offset, args);
5844
5845
1
    if (offset < length) {
5846
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5847
1
    }
5848
5849
1
}
5850
/*
5851
 * 8.2.75   QER ID
5852
 */
5853
static int
5854
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)
5855
2
{
5856
2
    uint32_t qer_id;
5857
    /* Octet 5 to 8 QER ID value
5858
    * The bit 8 of octet 5 is used to indicate if the Rule ID is dynamically allocated by the CP function
5859
    * or predefined in the UP function. If set to 0, it indicates that the Rule is dynamically provisioned
5860
    * by the CP Function. If set to 1, it indicates that the Rule is predefined in the UP Function
5861
    */
5862
2
    qer_id = tvb_get_uint32(tvb, offset, ENC_BIG_ENDIAN);
5863
5864
2
    proto_tree_add_item(tree, hf_pfcp_qer_id_flg, tvb, offset, 4, ENC_BIG_ENDIAN);
5865
2
    proto_tree_add_item(tree, hf_pfcp_qer_id, tvb, offset, 4, ENC_BIG_ENDIAN);
5866
2
    offset += 4;
5867
5868
2
    proto_item_append_text(item, "%s %u",
5869
2
        tfs_get_string((qer_id & 0x80000000), &pfcp_id_predef_dynamic_tfs),
5870
2
        (qer_id & 0x7fffffff));
5871
5872
2
    if (args) {
5873
1
        args->last_rule_ids.qer = qer_id;
5874
1
    }
5875
5876
2
    return offset;
5877
2
}
5878
static void
5879
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)
5880
1
{
5881
1
    unsigned offset = 0;
5882
5883
1
    offset = decode_pfcp_qer_id(tvb, pinfo, tree, item, offset, args);
5884
5885
1
    if (offset < length) {
5886
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5887
1
    }
5888
5889
1
}
5890
/*
5891
 * 8.2.76   OCI Flags
5892
 */
5893
static void
5894
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_)
5895
1
{
5896
1
    unsigned offset = 0;
5897
5898
1
    static int * const pfcp_oci_flags_flags[] = {
5899
1
        &hf_pfcp_spare_b7_b1,
5900
1
        &hf_pfcp_oci_flags_b0_aoci,
5901
1
        NULL
5902
1
    };
5903
    /* Octet 5  Spare   AOCI */
5904
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_oci_flags_flags, ENC_BIG_ENDIAN);
5905
1
    offset += 1;
5906
5907
1
    if (offset < length) {
5908
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5909
1
    }
5910
5911
1
}
5912
5913
/*
5914
 * 8.2.77   PFCP Association Release Request
5915
 */
5916
static void
5917
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_)
5918
0
{
5919
0
    unsigned offset = 0;
5920
5921
0
    static int * const pfcp_pfcp_assoc_rel_req_flags[] = {
5922
0
        &hf_pfcp_spare_b7_b2,
5923
0
        &hf_pfcp_pfcp_assoc_rel_req_b1_urss,
5924
0
        &hf_pfcp_pfcp_assoc_rel_req_b0_sarr,
5925
0
        NULL
5926
0
    };
5927
    /* Octet 5  Spare  URSS SARR */
5928
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcp_assoc_rel_req_flags, ENC_BIG_ENDIAN);
5929
0
    offset += 1;
5930
5931
0
    if (offset < length) {
5932
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5933
0
    }
5934
5935
0
}
5936
5937
/*
5938
 * 8.2.78   Graceful Release Period
5939
 */
5940
static void
5941
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_)
5942
1
{
5943
1
    unsigned offset = 0;
5944
1
    uint32_t unit, value;
5945
5946
    /* Octet 5  Timer unit  Timer value */
5947
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_unit, tvb, offset, 1, ENC_BIG_ENDIAN, &unit);
5948
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_timer_value, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
5949
1
    offset++;
5950
5951
1
    if ((unit == 0) && (value == 0)) {
5952
0
        proto_item_append_text(item, " Stopped");
5953
1
    } else {
5954
1
        switch (unit) {
5955
0
        case 0:
5956
0
            proto_item_append_text(item, "%u s", value * 2);
5957
0
            break;
5958
0
        case 1:
5959
0
            proto_item_append_text(item, "%u min", value);
5960
0
            break;
5961
0
        case 2:
5962
0
            proto_item_append_text(item, "%u min", value * 10);
5963
0
            break;
5964
1
        case 3:
5965
1
            proto_item_append_text(item, "%u hours", value);
5966
1
            break;
5967
0
        case 4:
5968
0
            proto_item_append_text(item, "%u hours", value * 10);
5969
0
            break;
5970
0
        case 7:
5971
0
            proto_item_append_text(item, "%u Infinite", value);
5972
0
            break;
5973
            /* Value 5 and 6 */
5974
0
        default:
5975
0
            proto_item_append_text(item, "%u min", value * 1);
5976
0
            break;
5977
1
        }
5978
1
    }
5979
5980
1
    if (offset < length) {
5981
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
5982
1
    }
5983
5984
1
}
5985
/*
5986
 * 8.2.79    PDN Type
5987
 */
5988
static const value_string pfcp_pdn_type_vals[] = {
5989
    { 0, "Reserved" },
5990
    { 1, "IPv4" },
5991
    { 2, "IPv6" },
5992
    { 3, "IPv4V6" },
5993
    { 4, "Non-IP" },
5994
    { 5, "Ethernet" },
5995
    { 0, NULL }
5996
};
5997
5998
static void
5999
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_)
6000
1
{
6001
1
    unsigned offset = 0;
6002
1
    uint32_t value;
6003
    /* Octet 5  Application Identifier
6004
    * The Application Identifier shall be encoded as an OctetString (see 3GPP TS 29.212)
6005
    */
6006
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_pdn_type, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
6007
1
    offset++;
6008
6009
1
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_pdn_type_vals, "Unknown"));
6010
6011
1
    if (offset < length) {
6012
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6013
1
    }
6014
1
}
6015
/*
6016
 * 8.2.80    Failed Rule ID
6017
 */
6018
static const value_string pfcp_failed_rule_id_type_vals[] = {
6019
    { 0, "PDR" },
6020
    { 1, "FAR" },
6021
    { 2, "QER" },
6022
    { 3, "URR" },
6023
    { 4, "BAR" },
6024
    { 5, "MAR" },
6025
    { 6, "SRR" },
6026
    { 0, NULL }
6027
};
6028
6029
/*
6030
 * 8.2.123   MAR ID
6031
 */
6032
static int
6033
decode_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, unsigned offset, pfcp_session_args_t *args)
6034
3
{
6035
3
    uint32_t mar_id;
6036
    /* Octet 5 to 6 MAR ID*/
6037
3
    proto_tree_add_item_ret_uint(tree, hf_pfcp_mar_id, tvb, offset, 2, ENC_BIG_ENDIAN, &mar_id);
6038
3
    offset += 2;
6039
6040
3
    proto_item_append_text(item, "%u", mar_id);
6041
6042
3
    if (args) {
6043
3
        args->last_rule_ids.mar = mar_id;
6044
3
    }
6045
6046
3
    return offset;
6047
3
}
6048
/*
6049
 * 8.2.151   SRR ID
6050
 */
6051
static int
6052
decode_pfcp_srr_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, unsigned offset, pfcp_session_args_t *args)
6053
0
{
6054
0
    uint32_t srr_id;
6055
    /* Oct 5 The SRR ID value shall be encoded as a binary integer value. */
6056
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_srr_id, tvb, offset, 1, ENC_BIG_ENDIAN, &srr_id);
6057
0
    offset += 1;
6058
6059
0
    proto_item_append_text(item, "%u", srr_id);
6060
6061
0
    if (args) {
6062
0
        args->last_rule_ids.srr = srr_id;
6063
0
    }
6064
6065
0
    return offset;
6066
0
}
6067
6068
static void
6069
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_)
6070
2
{
6071
2
    unsigned offset = 0;
6072
2
    uint32_t rule_type;
6073
6074
    /* Octet 5  Rule ID Type */
6075
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_failed_rule_id_type, tvb, offset, 1, ENC_BIG_ENDIAN, &rule_type);
6076
2
    offset++;
6077
6078
2
    proto_item_append_text(item, "%s: ", val_to_str_const(rule_type, pfcp_failed_rule_id_type_vals, "Unknown"));
6079
6080
    /* 6 to p  Rule ID value
6081
    * The length and the value of the Rule ID value field shall be set as specified for the
6082
    * PDR ID, FAR ID, QER ID, URR ID, BAR ID, MAR ID and SRR ID IE types respectively.
6083
    */
6084
2
    switch (rule_type) {
6085
0
        case 0:
6086
            /* PDR ID */
6087
0
            offset = decode_pfcp_pdr_id(tvb, pinfo, tree, item, offset, NULL);
6088
0
            break;
6089
1
        case 1:
6090
            /* FAR ID */
6091
1
            offset = decode_pfcp_far_id(tvb, pinfo, tree, item, offset, NULL);
6092
1
            break;
6093
1
        case 2:
6094
            /* QER ID */
6095
1
            offset = decode_pfcp_qer_id(tvb, pinfo, tree, item, offset, NULL);
6096
1
            break;
6097
0
        case 3:
6098
            /* URR ID */
6099
0
            offset = decode_pfcp_urr_id(tvb, pinfo, tree, item, offset, NULL);
6100
0
            break;
6101
0
        case 4:
6102
            /* BAR ID */
6103
0
            offset = decode_pfcp_bar_id(tvb, pinfo, tree, item, offset, NULL);
6104
0
            break;
6105
0
        case 5:
6106
            /* MAR ID */
6107
0
            offset = decode_pfcp_mar_id(tvb, pinfo, tree, item, offset, NULL);
6108
0
            break;
6109
0
        case 6:
6110
            /* SRR ID */
6111
0
            offset = decode_pfcp_srr_id(tvb, pinfo, tree, item, offset, NULL);
6112
0
            break;
6113
0
        default:
6114
0
            break;
6115
2
    }
6116
6117
2
    if (offset < length) {
6118
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6119
2
    }
6120
2
}
6121
/*
6122
 * 8.2.81    Time Quota Mechanism
6123
 */
6124
static const value_string pfcp_time_quota_mechanism_bti_type_vals[] = {
6125
    { 0, "CTP" },
6126
    { 1, "DTP" },
6127
    { 0, NULL }
6128
};
6129
6130
static void
6131
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_)
6132
1
{
6133
1
    unsigned offset = 0;
6134
1
    uint32_t bti_type;
6135
6136
    /* Octet 5  BIT Type */
6137
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_time_quota_mechanism_bti_type, tvb, offset, 1, ENC_BIG_ENDIAN, &bti_type);
6138
1
    offset++;
6139
6140
1
    proto_item_append_text(item, "%s", val_to_str_const(bti_type, pfcp_time_quota_mechanism_bti_type_vals, "Unknown"));
6141
6142
    /* Base Time Interval
6143
    * The Base Time Interval, shall be encoded as an Unsigned32
6144
    * as specified in subclause 7.2.29 of 3GPP TS 32.299
6145
    */
6146
1
    proto_tree_add_item(tree, hf_pfcp_time_quota_mechanism_bti, tvb, offset, 4, ENC_BIG_ENDIAN);
6147
1
    offset += 4;
6148
6149
1
    if (offset < length) {
6150
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6151
1
    }
6152
1
}
6153
/*
6154
 * 8.2.82    User Plane IP Resource Information (removed in Rel 16.3)
6155
 */
6156
static void
6157
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_)
6158
1
{
6159
1
    unsigned offset = 0;
6160
1
    uint64_t upiri_flags_val;
6161
1
    uint32_t upiri_teid_range;
6162
6163
1
    static int * const pfcp_upiri_flags[] = {
6164
1
        &hf_pfcp_spare_b7_b6,
6165
1
        &hf_pfcp_upiri_flg_b6_assosi,
6166
1
        &hf_pfcp_upiri_flg_b5_assoni,
6167
1
        &hf_pfcp_upiri_flg_b2b4_teidri,
6168
1
        &hf_pfcp_upiri_flags_b1_v6,
6169
1
        &hf_pfcp_upiri_flags_b0_v4,
6170
1
        NULL
6171
1
    };
6172
    /* Octet 5  Spare  ASSOSI  ASSONI  TEIDRI  TEIDRI  TEIDRI  V6  V4*/
6173
1
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_upiri_flags, ENC_BIG_ENDIAN, &upiri_flags_val);
6174
6175
    /* The following flags are coded within Octet 5:
6176
     * 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,
6177
     *           otherwise the IPv4 address field shall not be present.
6178
     * 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,
6179
     *           otherwise the IPv6 address field shall not be present.
6180
     * Bit 3-5 - TEIDRI (TEID Range Indication): the value of this field indicates the number of bits in the most significant
6181
     *           octet of a TEID that are used to partition the TEID range, e.g. if this field is set to "4", then the first
6182
     *           4 bits in the TEID are used to partition the TEID range.
6183
     * Bit 6   - ASSONI (Associated Network Instance): if this bit is set to "1", then the Network Instance field shall be present,
6184
     *           otherwise the Network Instance field shall not be present,
6185
     *           i.e. User Plane IP Resource Information provided can be used by CP function for any Network Instance of
6186
     *           GTP-U user plane in the UP function.
6187
     * Bit 7   - ASSOSI (Associated Source Interface): if this bit is set to "1", then the Source Interface field shall be present,
6188
     *           otherwise the Source Interface field shall not be present.
6189
     */
6190
6191
    /* Octet 5, bit 3-5, TEID Range Indication */
6192
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_upiri_teidri, tvb, offset, 1, ENC_BIG_ENDIAN, &upiri_teid_range);
6193
1
    offset += 1;
6194
6195
1
    if (upiri_teid_range > 0)
6196
1
    {
6197
        /* Octet t    TEID Range */
6198
1
        proto_tree_add_item(tree, hf_pfcp_upiri_teid_range, tvb, offset, 1, ENC_BIG_ENDIAN);
6199
1
        offset++;
6200
1
    }
6201
6202
1
    if ((upiri_flags_val & 0x1) == 1) {
6203
        /* m to (m+3)    IPv4 address */
6204
0
        proto_tree_add_item(tree, hf_pfcp_upiri_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
6205
0
        offset += 4;
6206
0
    }
6207
1
    if ((upiri_flags_val & 0x2) == 2) {
6208
        /* p to (p+15)   IPv6 address */
6209
1
        proto_tree_add_item(tree, hf_pfcp_upiri_ipv6, tvb, offset, 16, ENC_NA);
6210
1
        offset += 16;
6211
1
    }
6212
1
    if ((upiri_flags_val & 0x20) == 0x20) {
6213
        /* k to (l)   Network Instance */
6214
1
        uint16_t ni_len = length - offset;
6215
1
        if ((upiri_flags_val & 0x40) == 0x40) {
6216
1
            ni_len--;
6217
1
        }
6218
1
        offset = decode_pfcp_network_instance(tvb, pinfo, tree, item, offset, ni_len);
6219
1
    }
6220
1
    if ((upiri_flags_val & 0x40) == 0x40) {
6221
        /* r   Source Interface */
6222
0
        offset = decode_pfcp_source_interface(tvb, pinfo, tree, item, offset);
6223
0
    }
6224
1
    if (offset < length) {
6225
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6226
0
    }
6227
6228
1
}
6229
6230
/*
6231
 * 8.2.83    User Plane Inactivity Timer
6232
 */
6233
static void
6234
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_)
6235
1
{
6236
1
    unsigned offset = 0;
6237
1
    uint32_t value;
6238
    /*
6239
    * The User Plane Inactivity Timer field shall be encoded as an Unsigned32 binary integer value.
6240
    * The timer value "0" shall be interpreted as an indication that
6241
    * user plane inactivity detection and reporting is stopped.
6242
    */
6243
6244
    /* 5 to 8   Inactivity Timer */
6245
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_user_plane_inactivity_timer, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6246
1
    offset += 4;
6247
6248
1
    if(value == 0)
6249
0
        proto_item_append_text(item, " (Stopped)");
6250
6251
1
    if (offset < length) {
6252
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6253
1
    }
6254
6255
1
}
6256
6257
/*
6258
 * 8.2.84    Multiplier
6259
 */
6260
static void
6261
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_)
6262
1
{
6263
6264
    /* 5 to 12  Value-Digits */
6265
1
    proto_tree_add_item(tree, hf_pfcp_multiplier_value_digits, tvb, 0, 8, ENC_BIG_ENDIAN);
6266
6267
    /* 12 to 15  Exponent */
6268
1
    proto_tree_add_item(tree, hf_pfcp_multiplier_exponent, tvb, 8, 4, ENC_BIG_ENDIAN);
6269
6270
1
}
6271
6272
/*
6273
 * 8.2.85    Aggregated URR ID IE
6274
 */
6275
static void
6276
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_)
6277
1
{
6278
    /* 5 to 8  URR ID */
6279
1
    decode_pfcp_urr_id(tvb, pinfo, tree, item, 0, NULL);
6280
1
}
6281
6282
/*
6283
 * 8.2.86   Subsequent Volume Quota
6284
 */
6285
static void
6286
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_)
6287
2
{
6288
2
    unsigned offset = 0;
6289
2
    uint64_t flags_val;
6290
6291
2
    static int * const pfcp_subsequent_volume_quota_flags[] = {
6292
2
        &hf_pfcp_spare_b7_b3,
6293
2
        &hf_pfcp_subsequent_volume_quota_b2_dlvol,
6294
2
        &hf_pfcp_subsequent_volume_quota_b1_ulvol,
6295
2
        &hf_pfcp_subsequent_volume_quota_b0_tovol,
6296
2
        NULL
6297
2
    };
6298
    /* Octet 5  Spare   DLVOL   ULVOL   TOVOL*/
6299
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_subsequent_volume_quota_flags, ENC_BIG_ENDIAN, &flags_val);
6300
2
    offset += 1;
6301
6302
    /* The Total Volume, Uplink Volume and Downlink Volume fields shall be encoded as an Unsigned64 binary integer value.
6303
    * They shall contain the total, uplink or downlink number of octets respectively.
6304
    */
6305
2
    if ((flags_val & 0x1) == 1) {
6306
        /* m to (m+7)   Total Volume
6307
        * TOVOL: If this bit is set to "1", then the Total Volume field shall be present
6308
        */
6309
2
        proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
6310
2
        offset += 8;
6311
2
    }
6312
2
    if ((flags_val & 0x2) == 2) {
6313
        /* p to (p+7)    Uplink Volume
6314
        * ULVOL: If this bit is set to "1", then the Uplink Volume field shall be present
6315
        */
6316
0
        proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
6317
0
        offset += 8;
6318
0
    }
6319
2
    if ((flags_val & 0x4) == 4) {
6320
        /* q to (q+7)   Downlink Volume
6321
        * DLVOL: If this bit is set to "1", then the Downlink Volume field shall be present
6322
        */
6323
1
        proto_tree_add_item(tree, hf_pfcp_subsequent_volume_quota_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
6324
1
        offset += 8;
6325
1
    }
6326
6327
2
    if (offset < length) {
6328
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6329
2
    }
6330
2
}
6331
6332
/*
6333
 * 8.2.87   Subsequent Time Quota
6334
 */
6335
static void
6336
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_)
6337
1
{
6338
1
    unsigned offset = 0;
6339
1
    unsigned value;
6340
6341
    /* Octet 5 to 8 Time Quota
6342
    * The Time Quota field shall be encoded as an Unsigned32 binary integer value.
6343
    * It shall contain the duration in seconds.
6344
    */
6345
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_time_quota, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6346
1
    offset += 4;
6347
6348
1
    proto_item_append_text(item, "%u s", value);
6349
6350
1
    if (offset < length) {
6351
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6352
1
    }
6353
6354
1
}
6355
6356
/*
6357
 * 8.2.88   RQI
6358
 */
6359
static void
6360
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_)
6361
1
{
6362
1
    unsigned offset = 0;
6363
6364
1
    proto_tree_add_item(tree, hf_pfcp_spare_b7_b1, tvb, offset, 1, ENC_BIG_ENDIAN);
6365
1
    proto_tree_add_item(tree, hf_pfcp_rqi_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
6366
1
    offset += 1;
6367
6368
1
    if (offset < length) {
6369
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6370
1
    }
6371
1
    return;
6372
1
}
6373
6374
/*
6375
 * 8.2.89   QFI
6376
 */
6377
static int
6378
decode_pfcp_qfi(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, unsigned offset)
6379
6
{
6380
    /*     Octets 5 SPARE   QFI
6381
     *    The Application Identifier shall be encoded as an OctetString
6382
     */
6383
6
    proto_tree_add_item(tree, hf_pfcp_spare_b7_b6, tvb, offset, 1, ENC_BIG_ENDIAN);
6384
6
    proto_tree_add_item(tree, hf_pfcp_qfi, tvb, offset, 1, ENC_NA);
6385
6
    offset += 1;
6386
6387
6
    return offset;
6388
6
}
6389
static void
6390
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_)
6391
1
{
6392
1
    unsigned offset = 0;
6393
6394
1
    offset = decode_pfcp_qfi(tvb, pinfo, tree, item, offset);
6395
6396
1
    if (offset < length) {
6397
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6398
1
    }
6399
1
    return;
6400
1
}
6401
6402
/*
6403
 * 8.2.90   Query URR Reference
6404
 */
6405
static void
6406
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_)
6407
2
{
6408
2
    unsigned offset = 0;
6409
6410
    /* Octets 5 to 8 Query URR Reference value
6411
     * The Query URR Reference value shall be encoded as an Unsigned32 binary integer value.
6412
     * It shall contain the reference of a query request for URR(s).
6413
     */
6414
2
    proto_tree_add_item(tree, hf_pfcp_query_urr_reference, tvb, offset, 4, ENC_BIG_ENDIAN);
6415
2
    offset += 4;
6416
6417
2
    if (offset < length) {
6418
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6419
1
    }
6420
6421
2
}
6422
6423
/*
6424
 * 8.2.91    Additional Usage Reports Information
6425
 */
6426
static void
6427
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_)
6428
1
{
6429
1
    unsigned offset = 0;
6430
    /*
6431
     *    Octet    8      7   6      5      4      3      2         1
6432
     *    5    | AURI |   Number of Additional Usage Reports value  |
6433
     *    6    |    Number of Additional Usage Reports value     |
6434
     *
6435
     *  The Number of Additional Usage Reports value shall be encoded as
6436
     *  an unsigned binary integer value on 15 bits.
6437
     *  Bit 7 of Octet 5 is the most significant bit and bit 1 of Octet 6 is the least significant bit.
6438
     *  The bit 8 of octet 5 shall encode the AURI (Additional Usage Reports Indication) flag{...}.
6439
    */
6440
1
    static int * const pfcp_additional_usage_reports_information_flags[] = {
6441
1
        &hf_pfcp_additional_usage_reports_information_b15_auri,
6442
1
        &hf_pfcp_additional_usage_reports_information_b14_b0_number_value,
6443
1
        NULL
6444
1
    };
6445
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 2, pfcp_additional_usage_reports_information_flags, ENC_BIG_ENDIAN);
6446
1
    offset += 2;
6447
6448
1
    if (offset < length) {
6449
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6450
1
    }
6451
1
}
6452
6453
/*
6454
 *   8.2.92 Traffic Endpoint ID
6455
 */
6456
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_)
6457
1
{
6458
1
    unsigned offset = 0;
6459
6460
1
    proto_tree_add_item(tree, hf_pfcp_traffic_endpoint_id, tvb, offset, 1, ENC_BIG_ENDIAN);
6461
1
    offset += 1;
6462
6463
1
    if (offset < length) {
6464
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6465
1
    }
6466
1
    return;
6467
1
}
6468
6469
/*
6470
 *   8.2.93 MAC Address
6471
 */
6472
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_)
6473
3
{
6474
3
    unsigned offset = 0;
6475
3
    uint64_t flags_val;
6476
6477
3
    static int * const pfcp_mac_address_flags[] = {
6478
3
        &hf_pfcp_spare_b7_b4,
6479
3
        &hf_pfcp_mac_address_flags_b3_udes,
6480
3
        &hf_pfcp_mac_address_flags_b2_usou,
6481
3
        &hf_pfcp_mac_address_flags_b1_dest,
6482
3
        &hf_pfcp_mac_address_flags_b0_sour,
6483
3
        NULL
6484
3
    };
6485
    /* Octet 5  Spare   EDES    USOU   DEST   SOUR */
6486
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mac_address_flags, ENC_BIG_ENDIAN, &flags_val);
6487
3
    offset += 1;
6488
6489
    // Octets "m to (m+5)" or "n to (n+5)" and "o to (o+5)" or "p to (p+5)", if present,
6490
    // shall contain a MAC address value (12-digit hexadecimal numbers).
6491
3
    if ((flags_val & 0x1) == 1) {
6492
        /* m to (m+5)   Source MAC Address
6493
        * SOUR: If this bit is set to "1", then the Source MAC Address field shall be present
6494
        */
6495
2
        proto_tree_add_item(tree, hf_pfcp_mac_address_source_mac_address, tvb, offset, 6, ENC_NA);
6496
2
        offset += 6;
6497
2
    }
6498
6499
3
    if ((flags_val & 0x2) == 2) {
6500
        /* n to (n+5)    Destination MAC Address
6501
        * DEST: If this bit is set to "1", then the Destination MAC Address field shall be present
6502
        */
6503
1
        proto_tree_add_item(tree, hf_pfcp_mac_address_dest_mac_address, tvb, offset, 6, ENC_NA);
6504
1
        offset += 6;
6505
1
    }
6506
6507
3
    if ((flags_val & 0x4) == 4) {
6508
        /* o to (o+5)   Upper Source MAC Address
6509
        * USOU: If this bit is set to "1", then the Upper Source MAC Address field shall be present
6510
        */
6511
3
        proto_tree_add_item(tree, hf_pfcp_mac_address_upper_source_mac_address, tvb, offset, 6, ENC_NA);
6512
3
        offset += 6;
6513
3
    }
6514
6515
3
    if ((flags_val & 0x8) == 8) {
6516
        /* p to (p+5)   Upper Destination MAC Address
6517
        * UDES: If this bit is set to "1", then the Upper Destination MAC Address field shall be present
6518
        */
6519
2
        proto_tree_add_item(tree, hf_pfcp_mac_address_upper_dest_mac_address, tvb, offset, 6, ENC_NA);
6520
2
        offset += 6;
6521
2
    }
6522
6523
3
    if (offset < length) {
6524
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6525
3
    }
6526
3
    return;
6527
3
}
6528
6529
/*
6530
 *   8.2.94 C-TAG (Customer-VLAN tag)
6531
 */
6532
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_)
6533
1
{
6534
1
    unsigned offset = 0;
6535
6536
1
    offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
6537
6538
1
    if (offset < length) {
6539
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6540
1
    }
6541
1
    return;
6542
1
}
6543
6544
/*
6545
 *   8.2.95 S-TAG (Service-VLAN tag)
6546
 */
6547
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_)
6548
1
{
6549
1
    unsigned offset = 0;
6550
6551
1
    offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6552
6553
1
    if (offset < length) {
6554
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6555
1
    }
6556
1
    return;
6557
1
}
6558
6559
/*
6560
 *   8.2.96 Ethertype
6561
 */
6562
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_)
6563
1
{
6564
1
    unsigned offset = 0;
6565
6566
1
    proto_tree_add_item(tree, hf_pfcp_ethertype, tvb, offset, 2, ENC_BIG_ENDIAN);
6567
1
    offset += 2;
6568
6569
1
    if (offset < length) {
6570
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6571
1
    }
6572
1
    return;
6573
1
}
6574
6575
/*
6576
 *   8.2.97 Proxying
6577
 */
6578
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_)
6579
2
{
6580
2
    unsigned offset = 0;
6581
2
    uint64_t flags_val;
6582
6583
2
    static int * const pfcp_proxying_flags[] = {
6584
2
        &hf_pfcp_spare_b7_b2,
6585
2
        &hf_pfcp_proxying_flags_b1_ins,
6586
2
        &hf_pfcp_proxying_flags_b0_arp,
6587
2
        NULL
6588
2
    };
6589
    /* Octet 5  Spare  INS   ARP */
6590
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_proxying_flags, ENC_BIG_ENDIAN, &flags_val);
6591
2
    offset += 1;
6592
6593
2
    if (offset < length) {
6594
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6595
2
    }
6596
2
    return;
6597
2
}
6598
6599
/*
6600
 *   8.2.98 Ethertype Filter ID
6601
 */
6602
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_)
6603
1
{
6604
1
    unsigned offset = 0;
6605
6606
1
    proto_tree_add_item(tree, hf_pfcp_ethertype_filter_id, tvb, offset, 4, ENC_BIG_ENDIAN);
6607
1
    offset += 4;
6608
6609
1
    if (offset < length) {
6610
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6611
1
    }
6612
1
    return;
6613
1
}
6614
6615
/*
6616
 *   8.2.99 Ethernet Filter Properties
6617
 */
6618
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_)
6619
1
{
6620
1
    unsigned offset = 0;
6621
1
    uint64_t flags_val;
6622
6623
1
    static int * const pfcp_ethernet_filter_properties_flags[] = {
6624
1
        &hf_pfcp_spare_b7_b1,
6625
1
        &hf_pfcp_ethertype_filter_properties_flags_b0_bide,
6626
1
        NULL
6627
1
    };
6628
    /* Octet 5  Spare  BIDE */
6629
1
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_ethernet_filter_properties_flags, ENC_BIG_ENDIAN, &flags_val);
6630
1
    offset += 1;
6631
6632
1
    if (offset < length) {
6633
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6634
1
    }
6635
1
    return;
6636
1
}
6637
6638
/*
6639
 * 8.2.100   Suggested Buffering Packets Count
6640
 */
6641
static void
6642
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_)
6643
2
{
6644
2
    unsigned offset = 0;
6645
2
    uint32_t value;
6646
    /* 5   Packet count value */
6647
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_suggested_buffering_packets_count_packet_count, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
6648
2
    offset += 1;
6649
6650
2
    proto_item_append_text(item, "%u packets", value);
6651
6652
2
    if (offset < length) {
6653
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6654
2
    }
6655
2
}
6656
6657
/*
6658
 *   8.2.101 User ID
6659
 */
6660
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)
6661
6
{
6662
6
    unsigned offset = 0;
6663
6
    uint64_t flags_val;
6664
6
    uint32_t length_imsi, length_imei, length_msisdn, length_nai, length_supi, length_gpsi, length_pei;
6665
6
    const char *imsi_str;
6666
6667
6
    static int * const pfcp_user_id_flags[] = {
6668
6
        &hf_pfcp_spare_b7,
6669
6
        &hf_pfcp_user_id_flags_b6_peif,
6670
6
        &hf_pfcp_user_id_flags_b5_gpsif,
6671
6
        &hf_pfcp_user_id_flags_b4_supif,
6672
6
        &hf_pfcp_user_id_flags_b3_naif,
6673
6
        &hf_pfcp_user_id_flags_b2_msisdnf,
6674
6
        &hf_pfcp_user_id_flags_b1_imeif,
6675
6
        &hf_pfcp_user_id_flags_b0_imsif,
6676
6
        NULL
6677
6
    };
6678
    /* Octet 5  Spare   IMEIF   IMSIF */
6679
6
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_user_id_flags, ENC_BIG_ENDIAN, &flags_val);
6680
6
    offset += 1;
6681
6682
    /* Bit 1 - IMSIF: If this bit is set to "1", then the Length of IMSI and IMSI fields shall be present */
6683
6
    if ((flags_val & 0x1)) {
6684
        /* 6   Length of IMSI */
6685
5
        proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_imsi, tvb, offset, 1, ENC_BIG_ENDIAN, &length_imsi);
6686
5
        offset += 1;
6687
        /* 7 to (a)    IMSI */
6688
5
        imsi_str = dissect_e212_imsi(tvb, pinfo, tree,  offset, length_imsi, false);
6689
5
        offset += length_imsi;
6690
6691
5
        if (g_pfcp_session) {
6692
0
            args->imsi = imsi_str;
6693
0
        }
6694
5
    }
6695
6696
    /* Bit 2 - IMEIF: If this bit is set to "1", then the Length of IMEI and IMEI fields shall be present */
6697
6
    if ((flags_val & 0x2)) {
6698
        /* b   Length of IMEI */
6699
4
        proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_imei, tvb, offset, 1, ENC_BIG_ENDIAN, &length_imei);
6700
4
        offset += 1;
6701
6702
        /* (b+1) to c    IMEI */
6703
        /* Fetch the BCD encoded digits from tvb low half byte, formatting the digits according to
6704
        * a default digit set of 0-9 returning "?" for overdecadic digits a pointer to the EP
6705
        * allocated string will be returned.
6706
        */
6707
4
        proto_tree_add_item(tree, hf_pfcp_user_id_imei, tvb, offset, length_imei, ENC_BCD_DIGITS_0_9|ENC_LITTLE_ENDIAN);
6708
4
        offset += length_imei;
6709
4
    }
6710
6711
    /* Bit 3 - MSIDNF: If this bit is set to "1", then the Length of MSISDN and MSISDN fields shall be present */
6712
6
    if ((flags_val & 0x4)) {
6713
        /* d   Length of MSISDN */
6714
4
        proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_msisdn, tvb, offset, 1, ENC_BIG_ENDIAN, &length_msisdn);
6715
4
        offset += 1;
6716
        /* (d+1) to e    MSISDN */
6717
4
        dissect_e164_msisdn(tvb, pinfo, tree, offset, length_msisdn, E164_ENC_BCD);
6718
4
        offset += length_msisdn;
6719
4
    }
6720
6721
    /* Bit 4 - NAIF: If this bit is set to "1", then the Length of NAI and NAI fields shall be present */
6722
6
    if ((flags_val & 0x8)) {
6723
        /* f   Length of NAI */
6724
2
        proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_nai, tvb, offset, 1, ENC_BIG_ENDIAN, &length_nai);
6725
2
        offset += 1;
6726
        /* (f+1) to g    NAI */
6727
2
        proto_tree_add_item(tree, hf_pfcp_user_id_nai, tvb, offset, length_nai, ENC_ASCII);
6728
2
        offset += length_nai;
6729
2
    }
6730
6731
    /* Bit 5 - SUPIF: If this bit is set to "1", then the Length of SUPI and SUPI fields shall be present */
6732
6
    if ((flags_val & 0x10)) {
6733
        /* f   Length of SUPI */
6734
0
        proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_supi, tvb, offset, 1, ENC_BIG_ENDIAN, &length_supi);
6735
0
        offset += 1;
6736
        /* (f+1) to g    SUPI */
6737
0
        proto_tree_add_item(tree, hf_pfcp_user_id_supi, tvb, offset, length_supi, ENC_ASCII);
6738
0
        offset += length_supi;
6739
0
    }
6740
6741
    /* Bit 6 - GPSIF: If this bit is set to "1", then the Length of GPSI and GPSI fields shall be present */
6742
6
    if ((flags_val & 0x20)) {
6743
        /* f   Length of GPSI */
6744
3
        proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_gpsi, tvb, offset, 1, ENC_BIG_ENDIAN, &length_gpsi);
6745
3
        offset += 1;
6746
        /* (f+1) to g    GPSI */
6747
3
        proto_tree_add_item(tree, hf_pfcp_user_id_gpsi, tvb, offset, length_gpsi, ENC_ASCII);
6748
3
        offset += length_gpsi;
6749
3
    }
6750
6751
    /* Bit 7 - PEIF: If this bit is set to "1", then the Length of PEI and PEI fields shall be present */
6752
6
    if ((flags_val & 0x40)) {
6753
        /* f   Length of PEI */
6754
3
        proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_pei, tvb, offset, 1, ENC_BIG_ENDIAN, &length_pei);
6755
3
        offset += 1;
6756
        /* (f+1) to g    PEI */
6757
3
        proto_tree_add_item(tree, hf_pfcp_user_id_pei, tvb, offset, length_pei, ENC_ASCII);
6758
3
        offset += length_pei;
6759
3
    }
6760
6761
6
    if (offset < length) {
6762
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6763
2
    }
6764
6
    return;
6765
6
}
6766
6767
/*
6768
 *   8.2.102 Ethernet PDU Session Information
6769
 */
6770
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_)
6771
1
{
6772
1
    unsigned offset = 0;
6773
6774
1
    static int * const pfcp_ethernet_pdu_session_information_flags[] = {
6775
1
        &hf_pfcp_spare_b7_b1,
6776
1
        &hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi,
6777
1
        NULL
6778
1
    };
6779
    /* Octet 5  Spare   ETHI */
6780
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_ethernet_pdu_session_information_flags, ENC_BIG_ENDIAN);
6781
1
    offset += 1;
6782
6783
1
    if (offset < length) {
6784
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6785
1
    }
6786
1
    return;
6787
1
}
6788
6789
/*
6790
 * 8.2.103   MAC Addresses Detected
6791
 */
6792
static void
6793
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_)
6794
5
{
6795
5
    unsigned offset = 0;
6796
5
    uint32_t value, i, length_ctag, length_stag;
6797
6798
    /* 5   Number of MAC addresses  */
6799
5
    proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_detected_number_of_mac_addresses, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
6800
5
    offset += 1;
6801
6802
    /* o to (o+6) MAC Address  */
6803
14
    for (i = 0; i < value; i++)
6804
9
    {
6805
9
        proto_tree_add_item(tree, hf_pfcp_mac_addresses_detected_mac_address, tvb, offset, 6, ENC_NA);
6806
9
        offset += 6;
6807
9
    }
6808
6809
5
    if (offset == length) {
6810
0
        return;
6811
0
    }
6812
6813
    /* s   Length of C-TAG */
6814
5
    proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_detected_length_of_ctag, tvb, offset, 1, ENC_BIG_ENDIAN, &length_ctag);
6815
5
    offset += 1;
6816
    /* (s+1) to t    C-TAG */
6817
5
    if (length_ctag > 0)
6818
2
    {
6819
2
        offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
6820
2
    }
6821
6822
    /* u   Length of S-TAG */
6823
5
    proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_detected_length_of_stag, tvb, offset, 1, ENC_BIG_ENDIAN, &length_stag);
6824
5
    offset += 1;
6825
    /* (u+1) to v    S-TAG */
6826
5
    if (length_stag > 0)
6827
1
    {
6828
1
        offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6829
1
    }
6830
6831
5
    if (offset < length) {
6832
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6833
1
    }
6834
5
}
6835
6836
/*
6837
 * 8.2.104   MAC Addresses Removed
6838
 */
6839
static void
6840
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_)
6841
7
{
6842
7
    unsigned offset = 0;
6843
7
    uint32_t value, i, length_ctag, length_stag;
6844
6845
    /* 5   Number of MAC addresses  */
6846
7
    proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_removed_number_of_mac_addresses, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
6847
7
    offset += 1;
6848
6849
    /* o to (o+6) MAC Address  */
6850
43
    for (i = 0; i < value; i++)
6851
36
    {
6852
36
        proto_tree_add_item(tree, hf_pfcp_mac_addresses_removed_mac_address, tvb, offset, 6, ENC_NA);
6853
36
        offset += 6;
6854
36
    }
6855
6856
7
    if (offset == length) {
6857
0
        return;
6858
0
    }
6859
6860
    /* s   Length of C-TAG */
6861
7
    proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_removed_length_of_ctag, tvb, offset, 1, ENC_BIG_ENDIAN, &length_ctag);
6862
7
    offset += 1;
6863
    /* (s+1) to t    C-TAG */
6864
7
    if (length_ctag > 0)
6865
1
    {
6866
1
        offset = decode_pfcp_c_tag(tvb, pinfo, tree, item, offset);
6867
1
    }
6868
6869
    /* u   Length of S-TAG */
6870
7
    proto_tree_add_item_ret_uint(tree, hf_pfcp_mac_addresses_removed_length_of_stag, tvb, offset, 1, ENC_BIG_ENDIAN, &length_stag);
6871
7
    offset += 1;
6872
    /* (u+1) to v    S-TAG */
6873
7
    if (length_stag > 0)
6874
2
    {
6875
2
        offset = decode_pfcp_s_tag(tvb, pinfo, tree, item, offset);
6876
2
    }
6877
6878
7
    if (offset < length) {
6879
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6880
3
    }
6881
7
}
6882
6883
/*
6884
 * 8.2.105    Ethernet Inactivity Timer
6885
 */
6886
static void
6887
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_)
6888
1
{
6889
1
    unsigned offset = 0;
6890
1
    uint32_t value;
6891
    /*
6892
    * The Ethernet Inactivity Timer field shall be encoded as an Unsigned32 binary integer value.
6893
    */
6894
6895
    /* 5 to 8   Inactivity Timer */
6896
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_ethernet_inactivity_timer, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6897
1
    offset += 4;
6898
6899
1
    if (offset < length) {
6900
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6901
1
    }
6902
6903
1
}
6904
6905
/*
6906
 * 8.2.106   Subsequent Event Quota
6907
 */
6908
static void
6909
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_)
6910
1
{
6911
1
    unsigned offset = 0;
6912
1
    uint32_t value;
6913
    /*
6914
    * The Subsequent Event Quota field shall be encoded as an Unsigned32 binary integer value.
6915
    */
6916
6917
    /* 5 to 8   Subsequent Event Quota */
6918
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_event_quota, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6919
1
    offset += 4;
6920
6921
1
    proto_item_append_text(item, "%u", value);
6922
6923
1
    if (offset < length) {
6924
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6925
1
    }
6926
1
}
6927
6928
/*
6929
 * 8.2.107   Subsequent Event Threshold
6930
 */
6931
static void
6932
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_)
6933
0
{
6934
0
    unsigned offset = 0;
6935
0
    uint32_t value;
6936
    /*
6937
    * The Subsequent Event Threshold field shall be encoded as an Unsigned32 binary integer value.
6938
    */
6939
6940
    /* 5 to 8   Subsequent Event Threshold */
6941
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_subsequent_event_threshold, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
6942
0
    offset += 4;
6943
6944
0
    proto_item_append_text(item, "%u", value);
6945
6946
0
    if (offset < length) {
6947
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
6948
0
    }
6949
0
}
6950
6951
/*
6952
 * 8.2.108   Trace Information
6953
 */
6954
static void
6955
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_)
6956
2
{
6957
2
    unsigned offset = 0;
6958
2
    uint32_t length_trigger_events, length_list_interfaces, length_ipaddress;
6959
6960
    /* 5 to 7   MCC MNC */
6961
2
    offset = dissect_e212_mcc_mnc(tvb, pinfo, tree, offset, E212_NONE, true);
6962
6963
    /* 8 to 10   Trace ID */
6964
2
    proto_tree_add_item(tree, hf_pfcp_trace_information_trace_id, tvb, offset, 3, ENC_BIG_ENDIAN);
6965
2
    offset += 3;
6966
6967
    /* 11   Length of Trigger Events */
6968
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_trace_information_length_trigger_events, tvb, offset, 1, ENC_BIG_ENDIAN, &length_trigger_events);
6969
2
    offset += 1;
6970
6971
    /* 12 to m   Trigger Events */
6972
2
    proto_tree_add_item(tree, hf_pfcp_trace_information_trigger_events, tvb, offset, length_trigger_events, ENC_NA);
6973
2
    offset += length_trigger_events;
6974
6975
    /* m+1   Session Trace Depth */
6976
2
    proto_tree_add_item(tree, hf_pfcp_trace_information_session_trace_depth, tvb, offset, 1, ENC_BIG_ENDIAN);
6977
2
    offset += 1;
6978
6979
    /* m+2   Length of List of Interfaces */
6980
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_trace_information_length_list_interfaces, tvb, offset, 1, ENC_BIG_ENDIAN, &length_list_interfaces);
6981
2
    offset += 1;
6982
6983
    /* (m+3) to p   List of Interfaces */
6984
2
    proto_tree_add_item(tree, hf_pfcp_trace_information_list_interfaces, tvb, offset, length_list_interfaces, ENC_NA);
6985
2
    offset += length_list_interfaces;
6986
6987
    /* p+1   Length of IP address of Trace Collection Entity  */
6988
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_trace_information_length_ipaddress, tvb, offset, 1, ENC_BIG_ENDIAN, &length_ipaddress);
6989
2
    offset += 1;
6990
6991
    /* (p+2) to q   IP Address of Trace Collection Entity */
6992
2
    if (length_ipaddress == 4) {
6993
0
        proto_tree_add_item(tree, hf_pfcp_trace_information_ipv4, tvb, offset, length_ipaddress, ENC_BIG_ENDIAN);
6994
2
    } else if (length_ipaddress == 16) {
6995
0
        proto_tree_add_item(tree, hf_pfcp_trace_information_ipv6, tvb, offset, length_ipaddress, ENC_NA);
6996
0
    }
6997
2
    offset += length_ipaddress;
6998
6999
2
    if (offset < length) {
7000
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7001
1
    }
7002
2
}
7003
7004
/*
7005
 * 8.2.109    Framed-Route
7006
 */
7007
static void
7008
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_)
7009
1
{
7010
    /* Octet 5 to (n+4) Framed-Route
7011
    * 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
7012
    * RFC 2865:
7013
    * The Text field is one or more octets, and its contents are
7014
    *  implementation dependent.  It is intended to be human readable and
7015
    *  MUST NOT affect operation of the protocol.  It is recommended that
7016
    *  the message contain UTF-8 encoded 10646 [7] characters.
7017
    */
7018
1
    proto_tree_add_item(tree, hf_pfcp_framed_route, tvb, 0, length, ENC_UTF_8);
7019
1
}
7020
7021
/*
7022
 * 8.2.110    Framed-Routing
7023
 */
7024
static void
7025
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_)
7026
0
{
7027
    /* Octet 5 to (n+4) Framed-Routing
7028
    * 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
7029
    */
7030
0
    proto_tree_add_item(tree, hf_pfcp_framed_routing, tvb, 0, length, ENC_NA);
7031
0
}
7032
7033
/*
7034
 * 8.2.111    Framed-IPv6-Route
7035
 */
7036
static void
7037
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_)
7038
0
{
7039
    /* Octet 5 to (n+4) Framed-IPv6-Route
7040
    * 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
7041
    * RFC 3162
7042
    * "...It is intended to be human readable..."
7043
    */
7044
0
    proto_tree_add_item(tree, hf_pfcp_framed_ipv6_route, tvb, 0, length, ENC_UTF_8);
7045
0
}
7046
7047
/*
7048
 * 8.2.112   Event Quota
7049
 */
7050
static void
7051
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_)
7052
1
{
7053
1
    unsigned offset = 0;
7054
1
    uint32_t value;
7055
7056
    /* 5 to 8   Event Quota
7057
    * The Event Quota field shall be encoded as an Unsigned32 binary integer value.
7058
    */
7059
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_event_quota, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
7060
1
    offset += 4;
7061
7062
1
    proto_item_append_text(item, "%u", value);
7063
7064
1
    if (offset < length) {
7065
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7066
1
    }
7067
1
}
7068
7069
/*
7070
 * 8.2.113   Event Threshold
7071
 */
7072
static void
7073
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_)
7074
0
{
7075
0
    unsigned offset = 0;
7076
0
    uint32_t value;
7077
7078
    /* 5 to 8   Event Threshold
7079
    * The Event Threshold field shall be encoded as an Unsigned32 binary integer value.
7080
    */
7081
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_event_threshold, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
7082
0
    offset += 4;
7083
7084
0
    proto_item_append_text(item, "%u", value);
7085
7086
0
    if (offset < length) {
7087
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7088
0
    }
7089
0
}
7090
7091
/*
7092
 * 8.2.114   Time Stamp
7093
 */
7094
static void
7095
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_)
7096
1
{
7097
1
    char *time_str;
7098
1
    unsigned offset = 0;
7099
7100
    /* The Time Stamp field shall contain a UTC time.
7101
    * Octets 5 to 8 shall be encoded in the same format as the first four octets
7102
    * of the 64-bit timestamp format as defined in section 6 of IETF RFC 5905.
7103
    */
7104
1
    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);
7105
1
    proto_item_append_text(item, "%s", time_str);
7106
1
    offset += 4;
7107
7108
1
    if (offset < length) {
7109
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7110
1
    }
7111
1
}
7112
7113
/*
7114
 * 8.2.115   Averaging Window
7115
 */
7116
static void
7117
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_)
7118
0
{
7119
0
    unsigned offset = 0;
7120
0
    uint32_t value;
7121
7122
    /* 5 to 8   Averaging Window
7123
    * The Averaging Window field shall be encoded as an Unsigned32 binary integer value.
7124
    */
7125
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_averaging_window, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
7126
0
    offset += 4;
7127
7128
0
    proto_item_append_text(item, "%u", value);
7129
7130
0
    if (offset < length) {
7131
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7132
0
    }
7133
0
}
7134
7135
/*
7136
 * 8.2.116   Paging Policy Indicator (PPI)
7137
 */
7138
static void
7139
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_)
7140
0
{
7141
0
    unsigned offset = 0;
7142
0
    uint32_t value;
7143
7144
    /* Octet 5  Paging Policy Indicator (PPI)
7145
    * 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
7146
    */
7147
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_paging_policy_indicator, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
7148
0
    offset++;
7149
7150
0
    proto_item_append_text(item, "%u", value);
7151
7152
0
    if (offset < length) {
7153
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7154
0
    }
7155
0
}
7156
7157
/*
7158
 * 8.2.117    APN/DNN
7159
 */
7160
static void
7161
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_)
7162
0
{
7163
0
    int      offset = 0;
7164
7165
    /* Octet 5   APN/DNN
7166
     * The encoding the APN/DNN field follows 3GPP TS 23.003 [2] clause 9.1.
7167
     * The content of the APN/DNN field shall be the full APN/DNN with both the
7168
     * APN/DNN Network Identifier and APN/DNN Operator Identifier
7169
     */
7170
     /* NOTE: The APN/DNN field is not encoded as a dotted string as commonly used in documentation. */
7171
7172
0
    const uint8_t* string_value;
7173
0
    proto_tree_add_item_ret_string(tree, hf_pfcp_apn_dnn, tvb, offset, length, ENC_APN_STR | ENC_NA, pinfo->pool, &string_value);
7174
0
    proto_item_append_text(item, "%s", string_value);
7175
7176
0
}
7177
7178
/*
7179
 *   8.2.118   3GPP Interface Type
7180
 */
7181
7182
static const value_string pfcp_tgpp_interface_type_vals[] = {
7183
7184
    { 0, "S1-U" },
7185
    { 1, "S5/S8-U" },
7186
    { 2, "S4-U" },
7187
    { 3, "S11-U" },
7188
    { 4, "S12" },
7189
    { 5, "Gn/Gp-U" },
7190
    { 6, "S2a-U" },
7191
    { 7, "S2b-U" },
7192
    { 8, "eNodeB GTP-U interface for DL data forwarding" },
7193
    { 9, "eNodeB GTP-U interface for UL data forwarding" },
7194
    { 10, "SGW/UPF GTP-U interface for DL data forwarding" },
7195
    { 11, "N3 3GPP Access" },
7196
    { 12, "N3 Trusted Non-3GPP Access" },
7197
    { 13, "N3 Untrusted Non-3GPP Access" },
7198
    { 14, "N3 for data forwarding" },
7199
    { 15, "N9 (or N9 for non-roaming)" },
7200
    { 16, "SGi" },
7201
    { 17, "N6" },
7202
    { 18, "N19" },
7203
    { 19, "S8-U" },
7204
    { 20, "Gp-U" },
7205
    { 21, "N9 for roaming" },
7206
    { 22, "Iu-U" },
7207
    { 23, "N9 for data forwarding" },
7208
    { 24, "Sxa-U" },
7209
    { 25, "Sxb-U" },
7210
    { 26, "Sxc-U" },
7211
    { 27, "N4-U" },
7212
    { 28, "SGW/UPF GTP-U interface for UL data forwarding" },
7213
    { 29, "N6mb/Nmb9" },
7214
    { 30, "N3mb" },
7215
    { 31, "N19mb" },
7216
    { 0, NULL }
7217
};
7218
7219
static void
7220
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_)
7221
1
{
7222
1
    unsigned offset = 0;
7223
1
    uint32_t tgpp_interface_type;
7224
7225
    /* Octet 5    Spare Node ID Type*/
7226
1
    proto_tree_add_item(tree, hf_pfcp_spare_h1, tvb, offset, 1, ENC_BIG_ENDIAN);
7227
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_tgpp_interface_type, tvb, offset, 1, ENC_BIG_ENDIAN, &tgpp_interface_type);
7228
1
    proto_item_append_text(item, "%s: ", val_to_str_const(tgpp_interface_type, pfcp_tgpp_interface_type_vals, "Unknown"));
7229
1
    offset++;
7230
7231
1
    if (offset < length) {
7232
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7233
1
    }
7234
7235
1
}
7236
7237
/*
7238
 * 8.2.119   PFCPSRReq-Flags
7239
 */
7240
static void
7241
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_)
7242
1
{
7243
1
    unsigned offset = 0;
7244
7245
1
    static int * const pfcp_pfcpsrreq_flags[] = {
7246
1
        &hf_pfcp_spare_b7_b1,
7247
1
        &hf_pfcp_pfcpsrreq_flags_b0_psdbu,
7248
1
        NULL
7249
1
    };
7250
    /* Octet 5  Spare   Spare   Spare   Spare   Spare   Spare   Spare   PSDBU */
7251
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsrreq_flags, ENC_BIG_ENDIAN);
7252
1
    offset += 1;
7253
7254
1
    if (offset < length) {
7255
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7256
1
    }
7257
7258
1
}
7259
7260
/*
7261
 * 8.2.120   PFCPAUReq-Flags
7262
 */
7263
static void
7264
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_)
7265
3
{
7266
3
    unsigned offset = 0;
7267
7268
3
    static int * const pfcp_pfcpaureq_flags[] = {
7269
3
        &hf_pfcp_spare_b7_b1,
7270
3
        &hf_pfcp_pfcpaureq_flags_b0_parps,
7271
3
        NULL
7272
3
    };
7273
    /* Octet 5  Spare   Spare   Spare   Spare   Spare   Spare   Spare   PSDBU */
7274
3
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpaureq_flags, ENC_BIG_ENDIAN);
7275
3
    offset += 1;
7276
7277
3
    if (offset < length) {
7278
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7279
3
    }
7280
7281
3
}
7282
7283
/*
7284
 * 8.2.121   Activation Time
7285
 */
7286
static void
7287
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_)
7288
1
{
7289
1
    unsigned offset = 0;
7290
1
    char *time_str;
7291
7292
    /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
7293
     * format as defined in section 6 of IETF RFC 5905
7294
     */
7295
7296
1
    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);
7297
1
    proto_item_append_text(item, "%s", time_str);
7298
1
    offset += 4;
7299
7300
1
    if (offset < length) {
7301
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7302
1
    }
7303
1
}
7304
7305
/*
7306
 * 8.2.122   Deactivation Time
7307
 */
7308
static void
7309
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_)
7310
0
{
7311
0
    unsigned offset = 0;
7312
0
    char *time_str;
7313
7314
    /* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
7315
     * format as defined in section 6 of IETF RFC 5905
7316
     */
7317
7318
0
    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);
7319
0
    proto_item_append_text(item, "%s", time_str);
7320
0
    offset += 4;
7321
7322
0
    if (offset < length) {
7323
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7324
0
    }
7325
0
}
7326
7327
/*
7328
 * 8.2.123   MAR ID
7329
 */
7330
7331
static void
7332
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)
7333
3
{
7334
3
    unsigned offset = 0;
7335
7336
3
    offset = decode_pfcp_mar_id(tvb, pinfo, tree, item, offset, args);
7337
7338
3
    if (offset < length) {
7339
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7340
3
    }
7341
3
}
7342
7343
/*
7344
 * 8.2.124    Steering Functionality
7345
 */
7346
static const value_string pfcp_steering_functionality_vals[] = {
7347
    { 0, "ATSSS-LL" },
7348
    { 1, "MPTCP" },
7349
    { 0, NULL }
7350
};
7351
7352
static void
7353
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_)
7354
2
{
7355
2
    unsigned offset = 0;
7356
2
    uint32_t value;
7357
    /* Octet 5  Steering Functionality Value
7358
    * The Steering Functionality shall be encoded as a 4 bits binary
7359
    */
7360
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_steering_functionality, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
7361
2
    offset++;
7362
7363
2
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_steering_functionality_vals, "Unknown"));
7364
7365
2
    if (offset < length) {
7366
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7367
2
    }
7368
2
}
7369
7370
/*
7371
 * 8.2.125    Steering Mode
7372
 */
7373
static const value_string pfcp_steering_mode_vals[] = {
7374
    { 0, "Active-Standby" },
7375
    { 1, "Smallest Delay" },
7376
    { 2, "Load Balancing" },
7377
    { 3, "Priority-based" },
7378
    { 4, "Redundant" },
7379
    { 0, NULL }
7380
};
7381
7382
static void
7383
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_)
7384
1
{
7385
1
    unsigned offset = 0;
7386
1
    uint32_t value;
7387
    /* Octet 5  Steering Mode Value
7388
    * The Steering Mode shall be encoded as a 4 bits binary
7389
    */
7390
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_steering_mode, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
7391
1
    offset++;
7392
7393
1
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_steering_mode_vals, "Unknown"));
7394
7395
1
    if (offset < length) {
7396
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7397
1
    }
7398
1
}
7399
7400
/*
7401
 * 8.2.126   Weight
7402
 */
7403
static void
7404
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_)
7405
1
{
7406
1
    uint32_t value;
7407
    /* Octet 5  Weight */
7408
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_weight, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
7409
7410
1
    proto_item_append_text(item, "%u", value);
7411
7412
1
}
7413
7414
/*
7415
 * 8.2.127    Priority
7416
 */
7417
static const value_string pfcp_priority_vals[] = {
7418
    { 0, "Active" },
7419
    { 1, "Standby" },
7420
    { 2, "No Standby" },
7421
    { 3, "High" },
7422
    { 4, "Low" },
7423
    { 5, "Primary" },
7424
    { 6, "Secondary" },
7425
    { 0, NULL }
7426
};
7427
7428
static void
7429
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_)
7430
1
{
7431
1
    unsigned offset = 0;
7432
1
    uint32_t value;
7433
    /* Octet 5  Priority Value
7434
    * The Priority shall be encoded as a 4 bits binary.
7435
    */
7436
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_priority, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
7437
1
    offset++;
7438
7439
1
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_priority_vals, "Unknown"));
7440
7441
1
    if (offset < length) {
7442
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7443
1
    }
7444
1
}
7445
7446
/*
7447
 * 8.2.128   UE IP address Pool Identity
7448
 */
7449
static void
7450
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_)
7451
1
{
7452
1
    unsigned offset = 0;
7453
1
    uint32_t pool_length;
7454
7455
    /* Octet 7 to "k" UE IP address Pool Identity
7456
    * The UE IP address Pool Identity field shall be encoded as an OctetString
7457
    * (see the Framed-Ipv6-Pool and Framed-Pool in clause 12.6.3 of 3GPP TS 29.561).
7458
    */
7459
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_ue_ip_address_pool_length, tvb, 0, 2, ENC_BIG_ENDIAN, &pool_length);
7460
1
    offset += 2;
7461
7462
1
    proto_tree_add_item(tree, hf_pfcp_ue_ip_address_pool_identity, tvb, offset, pool_length, ENC_NA);
7463
1
    offset += pool_length;
7464
7465
1
    if (offset < length) {
7466
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7467
0
    }
7468
1
}
7469
7470
/*
7471
 * 8.2.129   Alternative SMF IP Address
7472
 */
7473
static void
7474
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_)
7475
2
{
7476
2
    unsigned offset = 0;
7477
2
    uint64_t alternative_smf_ip_address_flags;
7478
7479
2
    static int * const pfcp_alternative_smf_ip_address_flags[] = {
7480
2
        &hf_pfcp_spare_b7_b2,
7481
2
        &hf_pfcp_alternative_smf_ip_address_flags_ppe,
7482
2
        &hf_pfcp_b1_v4,
7483
2
        &hf_pfcp_b0_v6,
7484
2
        NULL
7485
2
    };
7486
    /* Octet 5  Spare   PPE   V4  V6 */
7487
2
    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);
7488
2
    offset += 1;
7489
7490
    /* IPv4 address (if present) */
7491
2
    if (alternative_smf_ip_address_flags & 0x2) {
7492
1
        proto_tree_add_item(tree, hf_pfcp_alternative_smf_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
7493
1
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
7494
1
        offset += 4;
7495
1
    }
7496
    /* IPv6 address (if present) */
7497
2
    if (alternative_smf_ip_address_flags & 0x1) {
7498
0
        proto_tree_add_item(tree, hf_pfcp_alternative_smf_ip_address_ipv6, tvb, offset, 16, ENC_NA);
7499
0
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7500
0
        offset += 16;
7501
0
    }
7502
7503
2
    if (offset < length) {
7504
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7505
2
    }
7506
2
}
7507
7508
/*
7509
 * 8.2.130   Packet Replication and Detection Carry-On Information
7510
 */
7511
static void
7512
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_)
7513
0
{
7514
0
    unsigned offset = 0;
7515
7516
0
    static int * const pfcp_packet_replication_and_detection_carry_on_information_flags[] = {
7517
0
        &hf_pfcp_spare_b7_b4,
7518
0
        &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b3_dcaroni,
7519
0
        &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b2_prin6i,
7520
0
        &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b1_prin19i,
7521
0
        &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b0_priueai,
7522
0
        NULL
7523
0
    };
7524
    /* Octet 5  Spare   Spare   Spare   Spare   DCARONI   PRIN6I   PRIN19I   PRIUEAI */
7525
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_packet_replication_and_detection_carry_on_information_flags, ENC_BIG_ENDIAN);
7526
0
    offset += 1;
7527
7528
0
    if (offset < length) {
7529
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7530
0
    }
7531
0
}
7532
7533
/*
7534
 * 8.2.131   SMF Set ID
7535
 */
7536
static void
7537
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_)
7538
5
{
7539
5
    unsigned offset = 0;
7540
7541
    /* Octet 5  Spare */
7542
5
    proto_tree_add_item(tree, hf_pfcp_spare, tvb, offset, 1, ENC_BIG_ENDIAN);
7543
5
    offset++;
7544
7545
    /* 6 to m  FQDN */
7546
5
    offset = decode_pfcp_fqdn(tvb, pinfo, tree, item, offset, length);
7547
7548
5
    if (offset < length) {
7549
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7550
0
    }
7551
5
}
7552
7553
/*
7554
 * 8.2.132   Quota Validity Time
7555
 */
7556
static void
7557
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_)
7558
1
{
7559
1
    unsigned offset = 0;
7560
1
    unsigned value;
7561
1
    nstime_t quvti;
7562
1
    proto_item *pi;
7563
7564
    /* The Quota Validity Time value shall be encoded as an Unsigned32 binary integer value. */
7565
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_validity_time_value, tvb, offset, 4, ENC_BIG_ENDIAN, &value);
7566
1
    offset += 4;
7567
7568
1
    proto_item_append_text(item, "%u", value);
7569
7570
1
    nstime_copy(&quvti, &(pinfo->abs_ts));
7571
1
    quvti.secs += value;
7572
1
    pi = proto_tree_add_time(tree, hf_pfcp_validity_time_str, tvb, 0, 0, &quvti);
7573
1
    proto_item_set_generated(pi);
7574
7575
1
    if (offset < length) {
7576
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7577
1
    }
7578
1
}
7579
7580
/*
7581
 * 8.2.133   Number of Reports
7582
 */
7583
static void
7584
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_)
7585
0
{
7586
0
    unsigned value;
7587
7588
    /* Number of Reports, an Unsigned16 binary integer value excluding the first value "0". */
7589
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_number_of_reports, tvb, 0, length, ENC_BIG_ENDIAN, &value);
7590
0
    proto_item_append_text(item, "%u", value);
7591
0
}
7592
7593
/*
7594
 * 8.2.134   PFCPASRsp-Flags
7595
 */
7596
static void
7597
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_)
7598
0
{
7599
0
    unsigned offset = 0;
7600
7601
0
    static int * const pfcp_pfcpasrsp_flags_flags[] = {
7602
0
        &hf_pfcp_spare_b7_b2,
7603
0
        &hf_pfcp_pfcpasrsp_flags_flags_b1_uupsi,
7604
0
        &hf_pfcp_pfcpasrsp_flags_flags_b0_psrei,
7605
0
        NULL
7606
0
    };
7607
    /* Octet 5  Spare   UUPSI   PSREI */
7608
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpasrsp_flags_flags, ENC_BIG_ENDIAN);
7609
0
    offset += 1;
7610
7611
0
    if (offset < length) {
7612
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7613
0
    }
7614
0
}
7615
7616
/*
7617
 * 8.2.135   CP PFCP Entity IP Address
7618
 */
7619
static void
7620
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_)
7621
1
{
7622
1
    unsigned offset = 0;
7623
1
    uint64_t cp_pfcp_entity_ip_address_flags;
7624
7625
1
    static int * const pfcp_cp_pfcp_entity_ip_address_flags[] = {
7626
1
        &hf_pfcp_spare_b7_b2,
7627
1
        &hf_pfcp_b1_v4,
7628
1
        &hf_pfcp_b0_v6,
7629
1
        NULL
7630
1
    };
7631
    /* Octet 5  Spare   V4  V6 */
7632
1
    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);
7633
1
    offset += 1;
7634
7635
    /* IPv4 address (if present) */
7636
1
    if ((cp_pfcp_entity_ip_address_flags & 0x2)) {
7637
0
        proto_tree_add_item(tree, hf_pfcp_cp_pfcp_entity_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
7638
0
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
7639
0
        offset += 4;
7640
0
    }
7641
    /* IPv6 address (if present) */
7642
1
    if ((cp_pfcp_entity_ip_address_flags & 0x1)) {
7643
1
        proto_tree_add_item(tree, hf_pfcp_cp_pfcp_entity_ip_address_ipv6, tvb, offset, 16, ENC_NA);
7644
1
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7645
1
        offset += 16;
7646
1
    }
7647
7648
1
    if (offset < length) {
7649
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7650
1
    }
7651
1
}
7652
7653
/*
7654
 * 8.2.136   PFCPSEReq-Flags
7655
 */
7656
static void
7657
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_)
7658
1
{
7659
1
    unsigned offset = 0;
7660
7661
1
    static int * const pfcp_pfcpsereq_flags_flags[] = {
7662
1
        &hf_pfcp_spare_b7_b3,
7663
1
        &hf_pfcp_pfcpsereq_flags_flags_b2_hrsbom,
7664
1
        &hf_pfcp_pfcpsereq_flags_flags_b1_sumpc,
7665
1
        &hf_pfcp_pfcpsereq_flags_flags_b0_resti,
7666
1
        NULL
7667
1
    };
7668
    /* Octet 5  Spare   HRSBOM  SUMPC   RESTI */
7669
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsereq_flags_flags, ENC_BIG_ENDIAN);
7670
1
    offset += 1;
7671
7672
1
    if (offset < length) {
7673
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7674
1
    }
7675
1
}
7676
7677
/*
7678
 * 8.2.137   IP Multicast Address
7679
 */
7680
static void
7681
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_)
7682
3
{
7683
3
    unsigned offset = 0;
7684
3
    uint64_t ip_multicast_address_flags;
7685
7686
3
    static int * const pfcp_ip_multicast_address_flags[] = {
7687
3
        &hf_pfcp_spare_b7_b4,
7688
3
        &hf_pfcp_ip_multicast_address_flags_b3_any,
7689
3
        &hf_pfcp_ip_multicast_address_flags_b2_range,
7690
3
        &hf_pfcp_b1_v4,
7691
3
        &hf_pfcp_b0_v6,
7692
3
        NULL
7693
3
    };
7694
    /* Octet 5  Spare   A(Any)   R(Range)   V4  V6 */
7695
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_ip_multicast_address_flags, ENC_BIG_ENDIAN, &ip_multicast_address_flags);
7696
3
    offset += 1;
7697
7698
    /* Any: If this bit is set to "1", this indicates any IP multicast address; in this case, no IP address field shall be included. */
7699
3
    if (!(ip_multicast_address_flags & 0x8)) {
7700
        /* IPv4 address (if present) */
7701
3
        if ((ip_multicast_address_flags & 0x2)) {
7702
1
            proto_tree_add_item(tree, hf_pfcp_ip_multicast_address_start_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
7703
1
            offset += 4;
7704
1
        }
7705
        /* IPv6 address (if present) */
7706
3
        if ((ip_multicast_address_flags & 0x1)) {
7707
1
            proto_tree_add_item(tree, hf_pfcp_ip_multicast_address_start_ipv6, tvb, offset, 16, ENC_NA);
7708
1
            offset += 16;
7709
1
        }
7710
        /* Range */
7711
3
        if ((ip_multicast_address_flags & 0x4)) {
7712
            /* IPv4 address (if present) */
7713
2
            if ((ip_multicast_address_flags & 0x2)) {
7714
0
                proto_tree_add_item(tree, hf_pfcp_ip_multicast_address_end_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
7715
0
                offset += 4;
7716
0
            }
7717
            /* IPv6 address (if present) */
7718
2
            if ((ip_multicast_address_flags & 0x1)) {
7719
1
                proto_tree_add_item(tree, hf_pfcp_ip_multicast_address_end_ipv6, tvb, offset, 16, ENC_NA);
7720
1
                offset += 16;
7721
1
            }
7722
2
        }
7723
3
    }
7724
7725
3
    if (offset < length) {
7726
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7727
3
    }
7728
3
}
7729
7730
/*
7731
 * 8.2.138   Source IP Address
7732
 */
7733
static void
7734
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_)
7735
2
{
7736
2
    unsigned offset = 0;
7737
2
    uint64_t source_ip_address_flags;
7738
7739
2
    static int * const pfcp_source_ip_address_flags[] = {
7740
2
        &hf_pfcp_spare_b7_b3,
7741
2
        &hf_pfcp_source_ip_address_flags_b2_mpl,
7742
2
        &hf_pfcp_b1_v4,
7743
2
        &hf_pfcp_b0_v6,
7744
2
        NULL
7745
2
    };
7746
    /* Octet 5  Spare   V4  V6 */
7747
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_source_ip_address_flags, ENC_BIG_ENDIAN, &source_ip_address_flags);
7748
2
    offset += 1;
7749
7750
    /* IPv4 address (if present) */
7751
2
    if ((source_ip_address_flags & 0x2)) {
7752
0
        proto_tree_add_item(tree, hf_pfcp_source_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
7753
0
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
7754
0
        offset += 4;
7755
0
    }
7756
    /* IPv6 address (if present) */
7757
2
    if ((source_ip_address_flags & 0x1)) {
7758
0
        proto_tree_add_item(tree, hf_pfcp_source_ip_address_ipv6, tvb, offset, 16, ENC_NA);
7759
0
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7760
0
        offset += 16;
7761
0
    }
7762
    /* Mask/Prefix Length (if present) */
7763
2
    if ((source_ip_address_flags & 0x4)) {
7764
1
        proto_tree_add_item(tree, hf_pfcp_source_ip_address_mask_prefix_lengt, tvb, offset, 1, ENC_NA);
7765
1
        proto_item_append_text(item, ", Mask/Prefix length %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
7766
1
        offset += 1;
7767
1
    }
7768
7769
7770
2
    if (offset < length) {
7771
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7772
2
    }
7773
2
}
7774
7775
/*
7776
 * 8.2.139   Packet Rate Status
7777
 */
7778
static void
7779
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_)
7780
3
{
7781
3
    unsigned offset = 0;
7782
3
    uint64_t flags_val;
7783
7784
3
    static int * const pfcp_packet_rate_status_flags[] = {
7785
3
        &hf_pfcp_spare_b7_b3,
7786
3
        &hf_pfcp_packet_rate_status_flags_b2_apr,
7787
3
        &hf_pfcp_packet_rate_status_flags_b1_dl,
7788
3
        &hf_pfcp_packet_rate_status_flags_b0_ul,
7789
3
        NULL
7790
3
    };
7791
    /* Octet 5  Spare   APR   DL   UL*/
7792
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_packet_rate_status_flags, ENC_BIG_ENDIAN, &flags_val);
7793
3
    offset += 1;
7794
7795
7796
    /* Number of Remaining Uplink Packets Allowed */
7797
3
    if ((flags_val & 0x1)) {
7798
2
        proto_tree_add_item(tree, hf_pfcp_packet_rate_status_ul, tvb, offset, 2, ENC_BIG_ENDIAN);
7799
2
        offset += 2;
7800
7801
2
        if ((flags_val & 0x4)) {
7802
1
            proto_tree_add_item(tree, hf_pfcp_packet_rate_status_apr_ul, tvb, offset, 2, ENC_BIG_ENDIAN);
7803
1
            offset += 2;
7804
1
        }
7805
2
    }
7806
    /* Number of Remaining Downlink Packets Allowed */
7807
3
    if ((flags_val & 0x2)) {
7808
2
        proto_tree_add_item(tree, hf_pfcp_packet_rate_status_dl, tvb, offset, 2, ENC_BIG_ENDIAN);
7809
2
        offset += 2;
7810
7811
        /* Additional number of Remaining Downlink Packets Allowed */
7812
2
        if ((flags_val & 0x4)) {
7813
2
            proto_tree_add_item(tree, hf_pfcp_packet_rate_status_apr_dl, tvb, offset, 2, ENC_BIG_ENDIAN);
7814
2
            offset += 2;
7815
2
        }
7816
2
    }
7817
    /* Rate Control Status Validity Time */
7818
3
    if (offset < length) {
7819
3
        proto_tree_add_item(tree, hf_pfcp_packet_rate_status_validity_time, tvb, offset, 8, ENC_BIG_ENDIAN);
7820
3
        offset += 8;
7821
3
    }
7822
7823
3
    if (offset < length) {
7824
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7825
2
    }
7826
3
}
7827
7828
/*
7829
 * 8.2.140   Create Bridge/Router Info
7830
 */
7831
static void
7832
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_)
7833
2
{
7834
2
    unsigned offset = 0;
7835
7836
2
    static int * const pfcp_create_bridge_router_info_flags[] = {
7837
2
        &hf_pfcp_spare_b7_b2,
7838
2
        &hf_pfcp_create_bridge_router_info_flags_b1_rii,
7839
2
        &hf_pfcp_create_bridge_router_info_flags_b0_bii,
7840
2
        NULL
7841
2
    };
7842
    /* Octet 5  Spare   RII     BII */
7843
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_create_bridge_router_info_flags, ENC_BIG_ENDIAN);
7844
2
    offset += 1;
7845
7846
2
    if (offset < length) {
7847
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7848
2
    }
7849
2
}
7850
7851
/*
7852
 * 8.2.141   Port Number
7853
 */
7854
static void
7855
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_)
7856
1
{
7857
1
    unsigned value;
7858
7859
    /* The Port Number shall contain one Port Number value */
7860
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_port_number, tvb, 0, length, ENC_BIG_ENDIAN, &value);
7861
1
    proto_item_append_text(item, "%u", value);
7862
1
}
7863
7864
/*
7865
 * 8.2.142   NW-TT Port Number
7866
 */
7867
static void
7868
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_)
7869
1
{
7870
1
    unsigned value;
7871
7872
    /* The NW-TT Port Number shall contain one Port Number value */
7873
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nw_tt_port_number, tvb, 0, length, ENC_BIG_ENDIAN, &value);
7874
1
    proto_item_append_text(item, "%u", value);
7875
1
}
7876
7877
/*
7878
 * 8.2.143   5GS User Plane Node ID
7879
 */
7880
static void
7881
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_)
7882
2
{
7883
2
    unsigned offset = 0;
7884
2
    uint64_t flags_val;
7885
7886
2
    static int * const pfcp_5gs_user_plane_node_id_flags[] = {
7887
2
        &hf_pfcp_spare_b7_b4,
7888
2
        &hf_pfcp_5gs_user_plane_node_id_flags_b0_bid,
7889
2
        NULL
7890
2
    };
7891
    /* Octet 5  Spare   BID */
7892
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_5gs_user_plane_node_id_flags, ENC_BIG_ENDIAN, &flags_val);
7893
2
    offset += 1;
7894
7895
    // Bit 1 – BID: If this bit is set to "1", then the Use Plane value field shall be present,
7896
    // The Bridge ID value is defined in IEEE.802.1Q clause 14.2.5 and value shall be encoded as an Unisigned64 binary integer.
7897
2
    if ((flags_val & 0x1)) {
7898
1
        proto_tree_add_item(tree, hf_pfcp_5gs_user_plane_node_id_value, tvb, offset, 8, ENC_BIG_ENDIAN);
7899
1
        offset += 8;
7900
1
    }
7901
7902
2
    if (offset < length) {
7903
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
7904
2
    }
7905
2
}
7906
7907
/*
7908
 * 8.2.144   Port Management Information Container
7909
 */
7910
static void
7911
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_)
7912
1
{
7913
    /* Oct 5 The Port Management Information field shall be encoded as an Octet String. */
7914
1
    proto_tree_add_item(tree, hf_pfcp_port_management_information, tvb, 0, length, ENC_NA);
7915
1
}
7916
7917
/*
7918
 * 8.2.145   Requested Clock Drift Information
7919
 */
7920
static void
7921
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_)
7922
1
{
7923
1
    unsigned offset = 0;
7924
7925
1
    static int * const pfcp_requested_clock_drift_control_information_flags[] = {
7926
1
        &hf_pfcp_spare_b7_b2,
7927
1
        &hf_pfcp_requested_clock_drift_control_information_flags_b1_rrcr,
7928
1
        &hf_pfcp_requested_clock_drift_control_information_flags_b0_rrto,
7929
1
        NULL
7930
1
    };
7931
    /* Octet 5  Spare   BII */
7932
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_requested_clock_drift_control_information_flags, ENC_BIG_ENDIAN);
7933
1
    offset += 1;
7934
7935
1
    if (offset < length) {
7936
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7937
1
    }
7938
1
}
7939
7940
/*
7941
 * 8.2.146  Time Domain Number
7942
 */
7943
static void
7944
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_)
7945
0
{
7946
0
    unsigned offset = 0;
7947
0
    unsigned value;
7948
7949
    /* Oct 5 The TSN Time Domain Number value field shall be encoded as a binary integer value. */
7950
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_time_domain_number_value, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
7951
0
    offset++;
7952
7953
0
    proto_item_append_text(item, "%u", value);
7954
7955
0
    if (offset < length) {
7956
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7957
0
    }
7958
0
}
7959
7960
/*
7961
 * 8.2.147   Time Offset Threshold
7962
 */
7963
static void
7964
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_)
7965
1
{
7966
1
    unsigned offset = 0;
7967
7968
    /* 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. */
7969
1
    proto_tree_add_item(tree, hf_pfcp_time_offset_threshold, tvb, offset, 8, ENC_BIG_ENDIAN);
7970
1
    offset += 8;
7971
7972
1
    if (offset < length) {
7973
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7974
1
    }
7975
1
}
7976
7977
/*
7978
 * 8.2.148   Cumulative rateRatio Threshold
7979
 */
7980
static void
7981
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_)
7982
0
{
7983
0
    unsigned offset = 0;
7984
7985
    /* 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)". */
7986
0
    proto_tree_add_item(tree, hf_pfcp_cumulative_rate_ratio_threshold, tvb, offset, 4, ENC_BIG_ENDIAN);
7987
0
    offset += 4;
7988
7989
0
    if (offset < length) {
7990
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
7991
0
    }
7992
0
}
7993
7994
/*
7995
 * 8.2.149   Time Offset Measurement
7996
 */
7997
static void
7998
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_)
7999
2
{
8000
2
    unsigned offset = 0;
8001
8002
    /* 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. */
8003
2
    proto_tree_add_item(tree, hf_pfcp_time_offset_measurement, tvb, offset, 8, ENC_BIG_ENDIAN);
8004
2
    offset += 8;
8005
8006
2
    if (offset < length) {
8007
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8008
1
    }
8009
2
}
8010
8011
/*
8012
 * 8.2.150   Cumulative rateRatio Measurement
8013
 */
8014
static void
8015
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_)
8016
0
{
8017
0
    unsigned offset = 0;
8018
8019
    /* 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)".  */
8020
0
    proto_tree_add_item(tree, hf_pfcp_cumulative_rate_ratio_measurement, tvb, offset, 4, ENC_BIG_ENDIAN);
8021
0
    offset += 4;
8022
8023
0
    if (offset < length) {
8024
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8025
0
    }
8026
0
}
8027
8028
/*
8029
 * 8.2.151   SRR ID
8030
 */
8031
8032
static void
8033
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)
8034
0
{
8035
0
    unsigned offset = 0;
8036
8037
0
    offset = decode_pfcp_srr_id(tvb, pinfo, tree, item, offset, args);
8038
8039
0
    if (offset < length) {
8040
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8041
0
    }
8042
0
}
8043
8044
/*
8045
 * 8.2.152   Requested Access Availability Information
8046
 */
8047
static void
8048
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_)
8049
0
{
8050
0
    unsigned offset = 0;
8051
8052
0
    static int * const pfcp_requested_access_availability_control_information_flags[] = {
8053
0
        &hf_pfcp_spare_b7_b1,
8054
0
        &hf_pfcp_requested_access_availability_control_information_flags_b0_rrca,
8055
0
        NULL
8056
0
    };
8057
    /* Octet 5  Spare   RRCA */
8058
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_requested_access_availability_control_information_flags, ENC_BIG_ENDIAN);
8059
0
    offset += 1;
8060
8061
0
    if (offset < length) {
8062
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8063
0
    }
8064
0
}
8065
8066
/*
8067
 * 8.2.153   Access Availability Information
8068
 */
8069
static const value_string pfcp_availability_status_vals[] = {
8070
    { 0, "Access has become unavailable" },
8071
    { 1, "Access has become available" },
8072
    { 0, NULL }
8073
};
8074
static const value_string pfcp_availability_type_vals[] = {
8075
    { 0, "3GPP access type" },
8076
    { 1, "Non-3GPP access type" },
8077
    { 0, NULL }
8078
};
8079
8080
static void
8081
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_)
8082
1
{
8083
1
    unsigned offset = 0;
8084
8085
    /* Octet 5 */
8086
    /* Availability Status */
8087
1
    proto_tree_add_item(tree, hf_pfcp_availability_status, tvb, offset, 1, ENC_BIG_ENDIAN);
8088
8089
    /* Access Type  */
8090
1
    proto_tree_add_item(tree, hf_pfcp_availability_type, tvb, offset, 1, ENC_BIG_ENDIAN);
8091
1
    offset++;
8092
8093
1
    if (offset < length) {
8094
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8095
1
    }
8096
1
}
8097
8098
/*
8099
 * 8.2.154   MPTCP Control Information
8100
 */
8101
static void
8102
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_)
8103
1
{
8104
1
    unsigned offset = 0;
8105
8106
1
    static int * const pfcp_mptcp_control_information_flags[] = {
8107
1
        &hf_pfcp_spare_b7_b1,
8108
1
        &hf_pfcp_mptcp_control_information_flags_b0_tci,
8109
1
        NULL
8110
1
    };
8111
    /* Octet 5  Spare   RRCA */
8112
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mptcp_control_information_flags, ENC_BIG_ENDIAN);
8113
1
    offset += 1;
8114
8115
1
    if (offset < length) {
8116
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8117
1
    }
8118
1
}
8119
8120
/*
8121
 * 8.2.155   ATSSS-LL Control Information
8122
 */
8123
static void
8124
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_)
8125
0
{
8126
0
    unsigned offset = 0;
8127
8128
0
    static int * const pfcp_atsss_ll_control_information_flags[] = {
8129
0
        &hf_pfcp_spare_b7_b1,
8130
0
        &hf_pfcp_atsss_ll_control_information_flags_b0_lli,
8131
0
        NULL
8132
0
    };
8133
    /* Octet 5  Spare   RRCA */
8134
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_atsss_ll_control_information_flags, ENC_BIG_ENDIAN);
8135
0
    offset += 1;
8136
8137
8138
0
    if (offset < length) {
8139
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8140
0
    }
8141
0
}
8142
8143
/*
8144
 * 8.2.156   PMF Control Information
8145
 */
8146
static void
8147
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_)
8148
1
{
8149
1
    unsigned offset = 0;
8150
1
    uint64_t flags;
8151
1
    uint32_t value, i;
8152
8153
1
    static int * const pfcp_pmf_control_information_flags[] = {
8154
1
        &hf_pfcp_spare_b7_b3,
8155
1
        &hf_pfcp_pmf_control_information_flags_b2_pqpm,
8156
1
        &hf_pfcp_pmf_control_information_flags_b1_drtti,
8157
1
        &hf_pfcp_pmf_control_information_flags_b0_pmfi,
8158
1
        NULL
8159
1
    };
8160
    /* Octet 5  Spare   PQPM   DRTTI   RRCA */
8161
1
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_pmf_control_information_flags, ENC_BIG_ENDIAN, &flags);
8162
1
    offset += 1;
8163
8164
    /* QFI */
8165
1
    if ((flags & 0x4)) {
8166
        /* 6   Number of QFI  */
8167
1
        proto_tree_add_item_ret_uint(tree, hf_pfcp_pmf_control_information_number_of_qfi, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
8168
1
        offset += 1;
8169
8170
        /* 7 to (7+p+1) QFI  */
8171
6
        for (i = 0; i < value; i++)
8172
5
        {
8173
5
            offset = decode_pfcp_qfi(tvb, pinfo, tree, item, offset);
8174
5
        }
8175
1
    }
8176
8177
1
    if (offset < length) {
8178
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8179
1
    }
8180
1
}
8181
8182
/*
8183
 * 8.2.157   MPTCP Address Information
8184
 */
8185
static void
8186
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_)
8187
3
{
8188
3
    unsigned offset = 0;
8189
3
    uint64_t mptcp_address_flags;
8190
8191
3
    static int * const pfcp_mptcp_ip_address_information_flags[] = {
8192
3
        &hf_pfcp_spare_b7_b2,
8193
3
        &hf_pfcp_mptcp_address_information_flags_b1_v6,
8194
3
        &hf_pfcp_mptcp_address_information_flags_b0_v4,
8195
3
        NULL
8196
3
    };
8197
    /* Octet 5  Spare   V6  V4 */
8198
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mptcp_ip_address_information_flags, ENC_BIG_ENDIAN, &mptcp_address_flags);
8199
3
    offset += 1;
8200
8201
    /* Octet 6  MPTCP Proxy Type */
8202
3
    proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_type, tvb, offset, 1, ENC_NA);
8203
3
    offset++;
8204
8205
    /* Octet 7 to 8  MPTCP Proxy Port */
8206
3
    proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_port, tvb, offset, 2, ENC_BIG_ENDIAN);
8207
3
    offset += 2;
8208
8209
    /* MPTCP Proxy IPv4 address (if present) */
8210
3
    if ((mptcp_address_flags & 0x1)) {
8211
1
        proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
8212
1
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
8213
1
        offset += 4;
8214
1
    }
8215
    /* MPTCP Proxy IPv6 address (if present) */
8216
3
    if ((mptcp_address_flags & 0x2)) {
8217
0
        proto_tree_add_item(tree, hf_pfcp_mptcp_proxy_ip_address_ipv6, tvb, offset, 16, ENC_NA);
8218
0
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
8219
0
        offset += 16;
8220
0
    }
8221
8222
3
    if (offset < length) {
8223
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8224
2
    }
8225
3
}
8226
8227
/*
8228
 * 8.2.158   Link-Specific Multipath IP Address
8229
 */
8230
static void
8231
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_)
8232
4
{
8233
4
    unsigned offset = 0;
8234
4
    uint64_t link_specific_multipath_ip_address_flags;
8235
8236
4
    static int * const pfcp_link_specific_multipath_ip_address_flags[] = {
8237
4
        &hf_pfcp_spare_b7_b4,
8238
4
        &hf_pfcp_link_specific_multipath_ip_address_flags_b3_nv6,
8239
4
        &hf_pfcp_link_specific_multipath_ip_address_flags_b2_nv4,
8240
4
        &hf_pfcp_link_specific_multipath_ip_address_flags_b1_v6,
8241
4
        &hf_pfcp_link_specific_multipath_ip_address_flags_b0_v4,
8242
4
        NULL
8243
4
    };
8244
    /* Octet 5  Spare  NV6  NV4  V6  V4 */
8245
4
    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);
8246
4
    offset += 1;
8247
8248
    /* Link-Specific Multipath IPv4 Address for 3GPP Access (if present) */
8249
4
    if ((link_specific_multipath_ip_address_flags & 0x1)) {
8250
0
        proto_tree_add_item(tree, hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
8251
0
        offset += 4;
8252
0
    }
8253
    /* Link-Specific Multipath IPv6 Address for 3GPP Access (if present) */
8254
4
    if ((link_specific_multipath_ip_address_flags & 0x2)) {
8255
1
        proto_tree_add_item(tree, hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv6, tvb, offset, 16, ENC_NA);
8256
1
        offset += 16;
8257
1
    }
8258
8259
    /* Link-Specific Multipath IPv4 Address for Non-3GPP Access (if present) */
8260
4
    if ((link_specific_multipath_ip_address_flags & 0x1)) {
8261
0
        proto_tree_add_item(tree, hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
8262
0
        offset += 4;
8263
0
    }
8264
    /* Link-Specific Multipath IPv6 Address for Non-3GPP Access (if present) */
8265
4
    if ((link_specific_multipath_ip_address_flags & 0x2)) {
8266
0
        proto_tree_add_item(tree, hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv6, tvb, offset, 16, ENC_NA);
8267
0
        offset += 16;
8268
0
    }
8269
4
    if (offset < length) {
8270
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8271
1
    }
8272
4
}
8273
8274
/*
8275
 * 8.2.159   PMF Address Information
8276
 */
8277
static void
8278
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_)
8279
7
{
8280
7
    unsigned offset = 0;
8281
7
    uint64_t pmf_address_information_flags;
8282
8283
7
    static int * const pfcp_pmf_address_information_flags[] = {
8284
7
        &hf_pfcp_spare_b7_b3,
8285
7
        &hf_pfcp_pmf_address_information_flags_b2_mac,
8286
7
        &hf_pfcp_pmf_address_information_flags_b1_v6,
8287
7
        &hf_pfcp_pmf_address_information_flags_b0_v4,
8288
7
        NULL
8289
7
    };
8290
    /* Octet 5  Spare   MAC V6  V4 */
8291
7
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_pmf_address_information_flags, ENC_BIG_ENDIAN, &pmf_address_information_flags);
8292
7
    offset += 1;
8293
8294
    /* p to (p+3) PMF IPv4 address (if present) */
8295
7
    if ((pmf_address_information_flags & 0x1)) {
8296
3
        proto_tree_add_item(tree, hf_pfcp_pmf_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
8297
3
        offset += 4;
8298
3
    }
8299
    /* q to (q+15) PMF IPv6 address (if present) */
8300
7
    if ((pmf_address_information_flags & 0x2)) {
8301
3
        proto_tree_add_item(tree, hf_pfcp_pmf_address_ipv6, tvb, offset, 16, ENC_NA);
8302
3
        offset += 16;
8303
3
    }
8304
    /* r to (r+1) PMF Port for 3GPP */
8305
7
    proto_tree_add_item(tree, hf_pfcp_pmf_port_3gpp, tvb, offset, 2, ENC_BIG_ENDIAN);
8306
7
    offset += 2;
8307
8308
    /* s to (s+1) PMF Port for Non-3GPP */
8309
7
    proto_tree_add_item(tree, hf_pfcp_pmf_port_non3gpp, tvb, offset, 2, ENC_BIG_ENDIAN);
8310
7
    offset += 2;
8311
8312
    /* t to (t+5) PMF MAC address for 3GPP access (if present)*/
8313
7
    if ((pmf_address_information_flags & 0x4)) {
8314
3
        proto_tree_add_item(tree, hf_pfcp_pmf_mac_address_3gpp, tvb, offset, 6, ENC_NA);
8315
3
        offset += 6;
8316
8317
        /* u to (u+5) PMF MAC address for Non-3GPP access (if present)*/
8318
3
        proto_tree_add_item(tree, hf_pfcp_pmf_mac_address_non3gpp, tvb, offset, 6, ENC_NA);
8319
3
        offset += 6;
8320
3
    }
8321
8322
7
    if (offset < length) {
8323
7
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8324
7
    }
8325
7
}
8326
8327
/*
8328
 * 8.2.160   ATSSS-LL Information
8329
 */
8330
static void
8331
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_)
8332
1
{
8333
1
    unsigned offset = 0;
8334
8335
1
    static int * const pfcp_atsss_ll_information_flags[] = {
8336
1
        &hf_pfcp_spare_b7_b1,
8337
1
        &hf_pfcp_atsss_ll_information_flags_b0_lli,
8338
1
        NULL
8339
1
    };
8340
    /* Octet 5  Spare   LLI */
8341
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_atsss_ll_information_flags, ENC_BIG_ENDIAN);
8342
1
    offset += 1;
8343
8344
1
    if (offset < length) {
8345
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8346
1
    }
8347
1
}
8348
8349
/*
8350
 * 8.2.161   Data Network Access Identifier
8351
 */
8352
static void
8353
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_)
8354
0
{
8355
0
    unsigned offset = 0;
8356
8357
    /* Octet 5 to (n+4) Data Network Access Identifier
8358
    * The Data Network Access Identifier field shall be encoded as an OctetString
8359
    */
8360
0
    proto_tree_add_item(tree, hf_pfcp_data_network_access_identifier, tvb, offset, length, ENC_NA);
8361
0
}
8362
8363
/*
8364
 * 8.2.162   Average Packet Delay
8365
 */
8366
static void
8367
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_)
8368
0
{
8369
0
    unsigned offset = 0;
8370
8371
    /* Octet 5 to 8 Delay Value in milliseconds */
8372
0
    proto_tree_add_item(tree, hf_pfcp_packet_delay_milliseconds, tvb, offset, 4, ENC_BIG_ENDIAN);
8373
0
    offset += 4;
8374
8375
0
    if (offset < length) {
8376
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8377
0
    }
8378
0
}
8379
8380
/*
8381
 * 8.2.163   Minimum Packet Delay
8382
 */
8383
static void
8384
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_)
8385
2
{
8386
2
    unsigned offset = 0;
8387
8388
    /* Octet 5 to 8 Delay Value in milliseconds */
8389
2
    proto_tree_add_item(tree, hf_pfcp_packet_delay_milliseconds, tvb, offset, 4, ENC_BIG_ENDIAN);
8390
2
    offset += 4;
8391
8392
2
    if (offset < length) {
8393
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8394
1
    }
8395
2
}
8396
8397
/*
8398
 * 8.2.164   Maximum Packet Delay
8399
 */
8400
static void
8401
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_)
8402
1
{
8403
1
    unsigned offset = 0;
8404
8405
    /* Octet 5 to 8 Delay Value in milliseconds */
8406
1
    proto_tree_add_item(tree, hf_pfcp_packet_delay_milliseconds, tvb, offset, 4, ENC_BIG_ENDIAN);
8407
1
    offset += 4;
8408
8409
1
    if (offset < length) {
8410
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8411
1
    }
8412
1
}
8413
8414
/*
8415
 * 8.2.165   QoS Report Trigger
8416
 */
8417
static void
8418
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_)
8419
1
{
8420
1
    unsigned offset = 0;
8421
8422
1
    static int * const pfcp_qos_report_trigger_flags[] = {
8423
1
        &hf_pfcp_spare_b7_b3,
8424
1
        &hf_pfcp_qos_report_trigger_flags_b2_ire,
8425
1
        &hf_pfcp_qos_report_trigger_flags_b1_thr,
8426
1
        &hf_pfcp_qos_report_trigger_flags_b0_per,
8427
1
        NULL
8428
1
    };
8429
    /* Octet 5  Spare   IRE THR PER */
8430
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qos_report_trigger_flags, ENC_BIG_ENDIAN);
8431
1
    offset += 1;
8432
8433
1
    if (offset < length) {
8434
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8435
1
    }
8436
1
}
8437
8438
/*
8439
 * 8.2.166   GTP-U Path Interface Type
8440
 */
8441
static void
8442
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_)
8443
1
{
8444
1
    unsigned offset = 0;
8445
8446
1
    static int * const pfcp_gtp_u_path_interface_type_flags[] = {
8447
1
        &hf_pfcp_spare_b7_b2,
8448
1
        &hf_pfcp_gtp_u_path_interface_type_flags_b1_n3,
8449
1
        &hf_pfcp_gtp_u_path_interface_type_flags_b0_n9,
8450
1
        NULL
8451
1
    };
8452
    /* Octet 5  Spare   N3  N9 */
8453
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_gtp_u_path_interface_type_flags, ENC_BIG_ENDIAN);
8454
1
    offset += 1;
8455
8456
1
    if (offset < length) {
8457
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8458
1
    }
8459
1
}
8460
8461
/*
8462
 * 8.2.167   Requested QoS Monitoring
8463
 */
8464
static void
8465
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_)
8466
1
{
8467
1
    unsigned offset = 0;
8468
8469
1
    static int * const pfcp_requested_qos_monitoring_flags[] = {
8470
1
        &hf_pfcp_requested_qos_monitoring_flags_b7_ulpr,
8471
1
        &hf_pfcp_requested_qos_monitoring_flags_b6_dlpr,
8472
1
        &hf_pfcp_requested_qos_monitoring_flags_b5_ulci,
8473
1
        &hf_pfcp_requested_qos_monitoring_flags_b4_dlci,
8474
1
        &hf_pfcp_requested_qos_monitoring_flags_b3_gtpupm,
8475
1
        &hf_pfcp_requested_qos_monitoring_flags_b2_rppd,
8476
1
        &hf_pfcp_requested_qos_monitoring_flags_b1_ulpd,
8477
1
        &hf_pfcp_requested_qos_monitoring_flags_b0_dlpd,
8478
1
        NULL
8479
1
    };
8480
    /* Octet 5  ULPR    DLPR   ULCI    DLCI    GTPUPM   RPPD  UlPD  DLPD */
8481
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_requested_qos_monitoring_flags, ENC_BIG_ENDIAN);
8482
1
    offset += 1;
8483
8484
1
    if (offset < length) {
8485
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8486
1
    }
8487
1
}
8488
8489
/*
8490
 * 8.2.168   Reporting Frequency
8491
 */
8492
static void
8493
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_)
8494
1
{
8495
1
    unsigned offset = 0;
8496
8497
1
    static int * const pfcp_reporting_frequency_flags[] = {
8498
1
        &hf_pfcp_spare_b7_b3,
8499
1
        &hf_pfcp_reporting_frequency_flags_b2_sesrl,
8500
1
        &hf_pfcp_reporting_frequency_flags_b1_perio,
8501
1
        &hf_pfcp_reporting_frequency_flags_b0_evett,
8502
1
        NULL
8503
1
    };
8504
    /* Octet 5  Spare   RP  Ul  DL */
8505
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_frequency_flags, ENC_BIG_ENDIAN);
8506
1
    offset += 1;
8507
8508
1
    if (offset < length) {
8509
0
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8510
0
    }
8511
1
}
8512
8513
/*
8514
 * 8.2.169   Packet Delay Thresholds
8515
 */
8516
static void
8517
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_)
8518
3
{
8519
3
    unsigned offset = 0;
8520
3
    uint64_t packet_delay_thresholds_flags;
8521
8522
3
    static int * const pfcp_packet_delay_thresholds_flags[] = {
8523
3
        &hf_pfcp_spare_b7_b3,
8524
3
        &hf_pfcp_packet_delay_thresholds_flags_b2_rp,
8525
3
        &hf_pfcp_packet_delay_thresholds_flags_b1_ul,
8526
3
        &hf_pfcp_packet_delay_thresholds_flags_b0_dl,
8527
3
        NULL
8528
3
    };
8529
    /* Octet 5  Spare   RP  Ul  DL */
8530
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_packet_delay_thresholds_flags, ENC_BIG_ENDIAN, &packet_delay_thresholds_flags);
8531
3
    offset += 1;
8532
8533
    /* m to (m+3) Downlink packet delay threshold */
8534
3
    if ((packet_delay_thresholds_flags & 0x1)) {
8535
1
        proto_tree_add_item(tree, hf_pfcp_packet_delay_thresholds_downlink, tvb, offset, 4, ENC_BIG_ENDIAN);
8536
1
        offset += 4;
8537
1
    }
8538
8539
    /* p to (p+3) Uplink packet delay threshold */
8540
3
    if ((packet_delay_thresholds_flags & 0x2)) {
8541
2
        proto_tree_add_item(tree, hf_pfcp_packet_delay_thresholds_uplink, tvb, offset, 4, ENC_BIG_ENDIAN);
8542
2
        offset += 4;
8543
2
    }
8544
8545
    /* q to (q+3) Round trip packet delay threshold */
8546
3
    if ((packet_delay_thresholds_flags & 0x4)) {
8547
1
        proto_tree_add_item(tree, hf_pfcp_packet_delay_thresholds_roundtrip, tvb, offset, 4, ENC_BIG_ENDIAN);
8548
1
        offset += 4;
8549
1
    }
8550
8551
3
    if (offset < length) {
8552
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8553
1
    }
8554
3
}
8555
8556
/*
8557
 * 8.2.170   Minimum Wait Time
8558
 */
8559
static void
8560
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_)
8561
1
{
8562
1
    unsigned offset = 0;
8563
8564
    /* Octet 5 to 8     Minimum Wait Time */
8565
1
    proto_tree_add_item(tree, hf_pfcp_minimum_wait_time_seconds, tvb, offset, 4, ENC_BIG_ENDIAN);
8566
1
    offset += 4;
8567
8568
1
    if (offset < length) {
8569
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8570
1
    }
8571
1
}
8572
8573
/*
8574
 * 8.2.171   QoS Monitoring Measurement
8575
 */
8576
static void
8577
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_)
8578
2
{
8579
2
    unsigned offset = 0;
8580
2
    uint64_t qos_monitoring_measurement_flags;
8581
8582
2
    static int * const pfcp_qos_monitoring_measurement_flags[] = {
8583
2
        &hf_pfcp_qos_monitoring_measurement_flags_b7_uldr,
8584
2
        &hf_pfcp_qos_monitoring_measurement_flags_b6_dldr,
8585
2
        &hf_pfcp_qos_monitoring_measurement_flags_b5_ulci,
8586
2
        &hf_pfcp_qos_monitoring_measurement_flags_b4_dlci,
8587
2
        &hf_pfcp_qos_monitoring_measurement_flags_b3_plmf,
8588
2
        &hf_pfcp_qos_monitoring_measurement_flags_b2_rppd,
8589
2
        &hf_pfcp_qos_monitoring_measurement_flags_b1_ulpd,
8590
2
        &hf_pfcp_qos_monitoring_measurement_flags_b0_dlpd,
8591
2
        NULL
8592
2
    };
8593
    /* Octet 5  ULDR  DLDR  ULCI  DLCI  PLMF  RPPD  ULPD  DLPD */
8594
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_qos_monitoring_measurement_flags, ENC_BIG_ENDIAN, &qos_monitoring_measurement_flags);
8595
2
    offset += 1;
8596
8597
    /* m to (m+3) Downlink packet delay threshold */
8598
2
    if ((qos_monitoring_measurement_flags & 0x1)) {
8599
0
        proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_downlink_packet_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8600
0
        offset += 4;
8601
0
    }
8602
8603
    /* p to (p+3) Uplink packet delay threshold */
8604
2
    if ((qos_monitoring_measurement_flags & 0x2)) {
8605
0
        proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_uplink_packet_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
8606
0
        offset += 4;
8607
0
    }
8608
8609
    /* q to (q+3) Round trip packet delay threshold */
8610
2
    if ((qos_monitoring_measurement_flags & 0x4)) {
8611
1
        proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_roundtrip, tvb, offset, 4, ENC_BIG_ENDIAN);
8612
1
        offset += 4;
8613
1
    }
8614
8615
    /* r Downlink Congestion information  */
8616
2
    if ((qos_monitoring_measurement_flags & 0x10)) {
8617
0
        proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_downlink_congestion_information, tvb, offset, 1, ENC_BIG_ENDIAN);
8618
0
        offset += 1;
8619
0
    }
8620
8621
    /* r Uplink Congestion information  */
8622
2
    if ((qos_monitoring_measurement_flags & 0x20)) {
8623
0
        proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_uplink_congestion_information, tvb, offset, 1, ENC_BIG_ENDIAN);
8624
0
        offset += 1;
8625
0
    }
8626
8627
    /* m to (m+3) Downlink packet rate */
8628
2
    if ((qos_monitoring_measurement_flags & 0x40)) {
8629
0
        proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_downlink_packet_rate, tvb, offset, 4, ENC_BIG_ENDIAN);
8630
0
        offset += 4;
8631
0
    }
8632
8633
    /* p to (p+3) Uplink packet rate */
8634
2
    if ((qos_monitoring_measurement_flags & 0x80)) {
8635
0
        proto_tree_add_item(tree, hf_pfcp_qos_monitoring_measurement_uplink_packet_rate, tvb, offset, 4, ENC_BIG_ENDIAN);
8636
0
        offset += 4;
8637
0
    }
8638
2
    if (offset < length) {
8639
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8640
1
    }
8641
2
}
8642
8643
/*
8644
 * 8.2.172   MT-EDT Control Information
8645
 */
8646
static void
8647
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_)
8648
1
{
8649
1
    unsigned offset = 0;
8650
8651
1
    static int * const pfcp_mt_edt_control_information_flags[] = {
8652
1
        &hf_pfcp_spare_b7_b1,
8653
1
        &hf_pfcp_mt_edt_control_information_flags_b0_rdsi,
8654
1
        NULL
8655
1
    };
8656
    /* Octet 5  Spare   RDSI */
8657
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mt_edt_control_information_flags, ENC_BIG_ENDIAN);
8658
1
    offset += 1;
8659
8660
1
    if (offset < length) {
8661
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8662
1
    }
8663
1
}
8664
8665
/*
8666
 * 8.2.173   DL Data Packets Size
8667
 */
8668
static void
8669
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_)
8670
1
{
8671
1
    unsigned offset = 0;
8672
8673
    /* Oct 5 to 6 DL Data Packets Size  */
8674
1
    proto_tree_add_item(tree, hf_pfcp_dl_data_packets_size, tvb, offset, 2, ENC_BIG_ENDIAN);
8675
1
    offset += 2;
8676
8677
1
    if (offset < length) {
8678
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
8679
1
    }
8680
1
}
8681
8682
/*
8683
 * 8.2.174   QER Control Indications
8684
 */
8685
static void
8686
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_)
8687
1
{
8688
1
    unsigned offset = 0;
8689
8690
1
    static int * const pfcp_qer_control_indications_o5_flags[] = {
8691
1
        &hf_pfcp_spare_b7_b1,
8692
1
        &hf_pfcp_qer_control_indications_o5_b0_rcsr,
8693
1
        NULL
8694
1
    };
8695
    /* Octet 5  Spare    RCSR */
8696
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qer_control_indications_o5_flags, ENC_BIG_ENDIAN);
8697
1
    offset++;
8698
8699
1
    if (offset < length) {
8700
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8701
1
    }
8702
8703
1
}
8704
8705
/*
8706
 * 8.2.175   NF Instance ID
8707
 */
8708
static void
8709
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_)
8710
1
{
8711
1
    unsigned offset = 0;
8712
8713
    /* Octet 5 to 20    NF Instance ID */
8714
1
    proto_tree_add_item(tree, hf_pfcp_nf_instance_id, tvb, offset, length, ENC_BIG_ENDIAN);
8715
1
}
8716
8717
/*
8718
 * 8.2.176   S-NSSAI
8719
 */
8720
static void
8721
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_)
8722
14
{
8723
14
    unsigned offset = 0;
8724
8725
    /* Octet 5    SST */
8726
14
    proto_tree_add_item(tree, hf_pfcp_s_nssai_sst, tvb, offset, 1, ENC_NA);
8727
14
    offset++;
8728
8729
    /* Octet 6 to 8    SD */
8730
14
    proto_tree_add_item(tree, hf_pfcp_s_nssai_sd, tvb, offset, 3, ENC_NA);
8731
14
    offset += 3;
8732
8733
14
    if (offset < length) {
8734
14
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8735
14
    }
8736
14
}
8737
8738
/*
8739
 * 8.2.177    IP version
8740
 */
8741
static void
8742
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_)
8743
1
{
8744
1
    unsigned offset = 0;
8745
8746
1
    static int * const pfcp_ip_version_flags[] = {
8747
1
        &hf_pfcp_spare_b7_b2,
8748
1
        &hf_pfcp_ip_version_flags_b1_v6,
8749
1
        &hf_pfcp_ip_version_flags_b0_v4,
8750
1
        NULL
8751
1
    };
8752
    /* Octet 5  Spare  V6  V4 */
8753
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_ip_version_flags, ENC_BIG_ENDIAN);
8754
1
    offset += 1;
8755
8756
1
    if (offset < length) {
8757
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8758
1
    }
8759
1
}
8760
8761
/*
8762
 * 8.2.178   PFCPASReq-Flags
8763
 */
8764
static void
8765
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_)
8766
2
{
8767
2
    unsigned offset = 0;
8768
8769
2
    static int * const pfcp_pfcpasreq_flags_flags[] = {
8770
2
        &hf_pfcp_spare_b7_b1,
8771
2
        &hf_pfcp_pfcpasreq_flags_flags_b0_uupsi,
8772
2
        NULL
8773
2
    };
8774
    /* Octet 5  Spare   UUPSI */
8775
2
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpasreq_flags_flags, ENC_BIG_ENDIAN);
8776
2
    offset += 1;
8777
8778
2
    if (offset < length) {
8779
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8780
1
    }
8781
2
}
8782
8783
/*
8784
 * 8.2.179   Data Status
8785
 */
8786
static void
8787
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_)
8788
1
{
8789
1
    unsigned offset = 0;
8790
8791
1
    static int * const pfcp_data_status_flags[] = {
8792
1
        &hf_pfcp_spare_b7_b2,
8793
1
        &hf_pfcp_data_status_flags_b1_buff,
8794
1
        &hf_pfcp_data_status_flags_b0_drop,
8795
1
        NULL
8796
1
    };
8797
    /* Octet 5  Spare   BUFF    DROP */
8798
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_data_status_flags, ENC_BIG_ENDIAN);
8799
1
    offset += 1;
8800
8801
1
    if (offset < length) {
8802
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8803
1
    }
8804
1
}
8805
8806
/*
8807
 * 8.2.180   RDS Configuration Information
8808
 */
8809
static void
8810
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_)
8811
1
{
8812
1
    unsigned offset = 0;
8813
8814
1
    static int * const pfcp_rds_configuration_information_flags[] = {
8815
1
        &hf_pfcp_spare_b7_b1,
8816
1
        &hf_pfcp_rds_configuration_information_flags_b0_rds,
8817
1
        NULL
8818
1
    };
8819
    /* Octet 5  Spare   RDS */
8820
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_rds_configuration_information_flags, ENC_BIG_ENDIAN);
8821
1
    offset += 1;
8822
8823
1
    if (offset < length) {
8824
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8825
1
    }
8826
1
}
8827
8828
/*
8829
 * 8.2.181   Multipath Application Indication
8830
 */
8831
static void
8832
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_)
8833
1
{
8834
1
    unsigned offset = 0;
8835
8836
1
    static int * const pfcp_multipath_application_indication_flags[] = {
8837
1
        &hf_pfcp_spare_b7_b2,
8838
1
        &hf_pfcp_multipath_application_indication_flags_b1_mqai,
8839
1
        &hf_pfcp_multipath_application_indication_flags_b0_mtai,
8840
1
        NULL
8841
1
    };
8842
    /* Octet 5  Spare   MQAI   MTAI */
8843
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_multipath_application_indication_flags, ENC_BIG_ENDIAN);
8844
1
    offset += 1;
8845
8846
1
    if (offset < length) {
8847
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8848
1
    }
8849
1
}
8850
8851
/*
8852
 * 8.2.182   User Plane Node Management Information Container
8853
 */
8854
static void
8855
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_)
8856
1
{
8857
1
    unsigned offset = 0;
8858
    /* Octet 5 to (n+4) User Plane Node Management Information Container
8859
    * The User Plane Node Management Information Container field shall be encoded as an OctetString.
8860
    */
8861
1
    proto_tree_add_item(tree, hf_pfcp_user_plane_node_management_information_container, tvb, offset, length, ENC_NA);
8862
1
}
8863
8864
/*
8865
 * 8.2.183   Number of UE IP Addresses
8866
 */
8867
static void
8868
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_)
8869
1
{
8870
1
    unsigned offset = 0;
8871
1
    uint64_t number_of_ue_ip_addresses_flags;
8872
8873
1
    static int * const pfcp_number_of_ue_ip_addresses_flags[] = {
8874
1
        &hf_pfcp_spare_b7_b2,
8875
1
        &hf_pfcp_number_of_ue_ip_addresses_b1_ipv6,
8876
1
        &hf_pfcp_number_of_ue_ip_addresses_b0_ipv4,
8877
1
        NULL
8878
1
    };
8879
    /* Octet 5  Spare   Spare   Spare   Spare   Spare   Spare   IPv6  IPv4*/
8880
1
    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);
8881
1
    offset += 1;
8882
8883
    /* a to (a+3)  Number of UE IPv4 Addresses */
8884
1
    if ((number_of_ue_ip_addresses_flags & 0x1) == 1) {
8885
1
        proto_tree_add_item(tree, hf_pfcp_number_of_ue_ip_addresses_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
8886
1
        offset += 4;
8887
1
    }
8888
    /* b to (b+3)  Number of UE IPv6 Addresses */
8889
1
    if ((number_of_ue_ip_addresses_flags & 0x2) == 2) {
8890
1
        proto_tree_add_item(tree, hf_pfcp_number_of_ue_ip_addresses_ipv6, tvb, offset, 4, ENC_BIG_ENDIAN);
8891
1
        offset += 4;
8892
1
    }
8893
8894
1
    if (offset < length) {
8895
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8896
1
    }
8897
1
}
8898
8899
/*
8900
 * 8.2.184   Validity Timer
8901
 */
8902
static void
8903
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_)
8904
0
{
8905
0
    unsigned offset = 0;
8906
0
    uint32_t value;
8907
    /* Octet 5 to 6    Validity Timer
8908
    * The Validity Timer value shall be encoded as an Unsigned16 binary integer value. It contains a duration in seconds
8909
    */
8910
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_validity_timer, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
8911
0
    offset += 2;
8912
8913
0
    proto_item_append_text(item, "%u s", value);
8914
8915
0
    if (offset < length) {
8916
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8917
0
    }
8918
8919
0
}
8920
8921
/*
8922
 * 8.2.185   Offending IE Information
8923
 */
8924
static void
8925
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_)
8926
2
{
8927
2
    unsigned offset = 0;
8928
2
    uint32_t value;
8929
8930
    /* Octet 5 to 6 Type of the offending IE */
8931
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_offending_ie, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
8932
2
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_ie_type, "Unknown"));
8933
2
    offset += 2;
8934
8935
    /* Octets 7 to (n+4) shall contain the value of the offending IE that caused the failure */
8936
2
    proto_tree_add_item(tree, hf_pfcp_offending_ie_value, tvb, offset, length - offset, ENC_NA);
8937
2
}
8938
8939
/*
8940
 * 8.2.186    RAT Type
8941
 */
8942
static const value_string pfcp_rattype_vals[] = {
8943
    { 0, "Reserved" },
8944
    { 1, "UTRAN" },
8945
    { 2, "GERAN" },
8946
    { 3, "WLAN" },
8947
    { 4, "GAN" },
8948
    { 5, "HSPA Evolution" },
8949
    { 6, "EUTRAN (WB-E-UTRAN)" },
8950
    { 7, "Virtual" },
8951
    { 8, "EUTRAN-NB-IoT" },
8952
    { 9, "LTE-M" },
8953
    { 10, "NR" },
8954
    { 11, "WB-E-UTRAN (LEO)" },
8955
    { 12, "WB-E-UTRAN (MEO)" },
8956
    { 13, "WB-E-UTRAN (GEO)" },
8957
    { 14, "WB-E-UTRAN (OTHERSAT)" },
8958
    { 15, "EUTRAN-NB-IoT (LEO)" },
8959
    { 16, "EUTRAN-NB-IoT (MEO)" },
8960
    { 17, "EUTRAN-NB-IoT (GEO)" },
8961
    { 18, "EUTRAN-NB-IoT (OTHERSAT)" },
8962
    { 19, "LTE-M (LEO)" },
8963
    { 20, "LTE-M (MEO)" },
8964
    { 21, "LTE-M (GEO)" },
8965
    { 22, "LTE-M (OTHERSAT)" },
8966
    { 23, "NR (LEO)" },
8967
    { 24, "NR (MEO)" },
8968
    { 25, "NR (GEO)" },
8969
    { 26, "NR (OTHERSAT)" },
8970
    { 27, "NR-REDCAP" },
8971
    { 28, "NR-EREDCAP" },
8972
    { 0, NULL }
8973
};
8974
8975
static void
8976
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_)
8977
1
{
8978
1
    unsigned offset = 0;
8979
1
    uint32_t value;
8980
    /* Octet 5  RAT Type  */
8981
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_rattype, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
8982
1
    offset++;
8983
8984
1
    proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_rattype_vals, "Unknown"));
8985
8986
1
    if (offset < length) {
8987
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
8988
1
    }
8989
1
}
8990
8991
/*
8992
 * 8.2.187    L2TP User Authentication
8993
 */
8994
static void
8995
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_)
8996
4
{
8997
4
    unsigned offset = 0;
8998
4
    uint64_t l2tp_user_authentication_flags;
8999
4
    uint32_t l2tp_length;
9000
9001
4
    static int * const pfcp_l2tp_user_authentication_flags[] = {
9002
4
        &hf_pfcp_spare_b7_b4,
9003
4
        &hf_pfcp_l2tp_user_authentication_b3_pai,
9004
4
        &hf_pfcp_l2tp_user_authentication_b2_par,
9005
4
        &hf_pfcp_l2tp_user_authentication_b1_pac,
9006
4
        &hf_pfcp_l2tp_user_authentication_b0_pan,
9007
4
        NULL
9008
4
    };
9009
9010
    /* Octet 5-6 Proxy Authen Type Value */
9011
4
    proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_type_value, tvb, offset, 2, ENC_BIG_ENDIAN);
9012
4
    offset += 2;
9013
9014
    /* Octet 7  Spare   PAI   PAR   PAC  PAN */
9015
4
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_l2tp_user_authentication_flags, ENC_BIG_ENDIAN, &l2tp_user_authentication_flags);
9016
4
    offset += 1;
9017
9018
    /* Proxy Authen Name */
9019
4
    if ((l2tp_user_authentication_flags & 0x1)) {
9020
3
        proto_tree_add_item_ret_uint(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_name_len, tvb, offset, 1, ENC_BIG_ENDIAN, &l2tp_length);
9021
3
        offset += 1;
9022
3
        proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_name, tvb, offset, l2tp_length, ENC_ASCII);
9023
3
        offset += l2tp_length;
9024
3
    }
9025
9026
    /* Proxy Authen Challenge */
9027
4
    if ((l2tp_user_authentication_flags & 0x2)) {
9028
1
        proto_tree_add_item_ret_uint(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_challenge_len, tvb, offset, 1, ENC_BIG_ENDIAN, &l2tp_length);
9029
1
        offset += 1;
9030
1
        proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_challenge, tvb, offset, l2tp_length, ENC_ASCII);
9031
1
        offset += l2tp_length;
9032
1
    }
9033
9034
    /* Proxy Authen Response */
9035
4
    if ((l2tp_user_authentication_flags & 0x4)) {
9036
0
        proto_tree_add_item_ret_uint(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_response_len, tvb, offset, 1, ENC_BIG_ENDIAN, &l2tp_length);
9037
0
        offset += 1;
9038
0
        proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_response, tvb, offset, l2tp_length, ENC_ASCII);
9039
0
        offset += l2tp_length;
9040
0
    }
9041
9042
    /* Proxy Authen ID */
9043
4
    if ((l2tp_user_authentication_flags & 0x8)) {
9044
1
        proto_tree_add_item(tree, hf_pfcp_l2tp_user_authentication_proxy_authen_id, tvb, offset, 1, ENC_BIG_ENDIAN);
9045
1
        offset++;
9046
1
    }
9047
9048
4
    if (offset < length) {
9049
3
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9050
3
    }
9051
4
}
9052
9053
/*
9054
 * 8.2.188   LNS Address
9055
 */
9056
static void
9057
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_)
9058
0
{
9059
0
    unsigned offset = 0;
9060
9061
    /* IPv4 address */
9062
0
    if (length == 4) {
9063
0
        proto_tree_add_item(tree, hf_pfcp_lns_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
9064
0
        offset += 4;
9065
0
    }
9066
    /* IPv6 address */
9067
0
    else if (length == 16) {
9068
0
        proto_tree_add_item(tree, hf_pfcp_lns_address_ipv6, tvb, offset, 16, ENC_NA);
9069
0
        offset += 16;
9070
0
    }
9071
9072
0
    if (offset < length) {
9073
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9074
0
    }
9075
9076
0
}
9077
9078
/*
9079
 * 8.2.189   Tunnel Preference
9080
 */
9081
static void
9082
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_)
9083
1
{
9084
1
    proto_tree_add_item(tree, hf_pfcp_tunnel_preference_value, tvb, 0, length, ENC_BIG_ENDIAN);
9085
1
}
9086
9087
/*
9088
 * 8.2.190   Calling Number
9089
 */
9090
static void
9091
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_)
9092
1
{
9093
1
    proto_tree_add_item(tree, hf_pfcp_calling_number_value, tvb, 0, length, ENC_ASCII);
9094
1
}
9095
9096
/*
9097
 * 8.2.191   Called Number
9098
 */
9099
static void
9100
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_)
9101
0
{
9102
0
    proto_tree_add_item(tree, hf_pfcp_called_number_value, tvb, 0, length, ENC_ASCII);
9103
0
}
9104
9105
/*
9106
 * 8.2.192   L2TP Session Indications
9107
 */
9108
static void
9109
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_)
9110
0
{
9111
0
    unsigned offset = 0;
9112
9113
0
    static int * const pfcp_l2tp_session_indications_o5_flags[] = {
9114
0
        &hf_pfcp_spare_b7_b3,
9115
0
        &hf_pfcp_l2tp_session_indications_o5_b2_rensa,
9116
0
        &hf_pfcp_l2tp_session_indications_o5_b1_redsa,
9117
0
        &hf_pfcp_l2tp_session_indications_o5_b0_reuia,
9118
0
        NULL
9119
0
    };
9120
    /* Octet 5  Spare   spare    Spare    Spare   Spare   RENSA   REDSA   REUIA */
9121
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_l2tp_session_indications_o5_flags, ENC_BIG_ENDIAN);
9122
0
    offset++;
9123
9124
0
    if (offset < length) {
9125
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9126
0
    }
9127
9128
0
}
9129
9130
/*
9131
 * 8.2.193   DNS Server Address
9132
 */
9133
static void
9134
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_)
9135
0
{
9136
0
    unsigned offset = 0;
9137
9138
    /* IPv4 address */
9139
0
    proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
9140
0
    proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset));
9141
0
    offset += 4;
9142
9143
0
    if (offset < length) {
9144
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9145
0
    }
9146
9147
0
}
9148
9149
/*
9150
 * 8.2.194   NBNS Server Address
9151
 */
9152
static void
9153
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_)
9154
0
{
9155
0
    unsigned offset = 0;
9156
9157
    /* IPv4 address */
9158
0
    proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
9159
0
    proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset));
9160
0
    offset += 4;
9161
9162
0
    if (offset < length) {
9163
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9164
0
    }
9165
9166
0
}
9167
9168
/*
9169
 * 8.2.195   Maximum Receive Unit
9170
 */
9171
static void
9172
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_)
9173
0
{
9174
    /* Oct 5 to 6   Maximum Receive Unit */
9175
0
    proto_tree_add_item(tree, hf_pfcp_maximum_receive_unit, tvb, 0, length, ENC_BIG_ENDIAN);
9176
0
}
9177
9178
/*
9179
 * 8.2.196   Thresholds
9180
 */
9181
static void
9182
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_)
9183
3
{
9184
3
    unsigned offset = 0;
9185
3
    uint64_t flags;
9186
9187
3
    static int * const pfcp_thresholds_flags[] = {
9188
3
        &hf_pfcp_spare_b7_b2,
9189
3
        &hf_pfcp_thresholds_flags_b1_plr,
9190
3
        &hf_pfcp_thresholds_flags_b0_rtt,
9191
3
        NULL
9192
3
    };
9193
    /* Octet 5  Spare   PLR   RTT */
9194
3
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_thresholds_flags, ENC_BIG_ENDIAN, &flags);
9195
3
    offset += 1;
9196
9197
    /* RTT */
9198
3
    if ((flags & 0x1)) {
9199
        /* m to (m+1)   RTT  */
9200
1
        proto_tree_add_item(tree, hf_pfcp_thresholds_rtt, tvb, offset, 2, ENC_BIG_ENDIAN);
9201
1
        offset += 2;
9202
1
    }
9203
9204
    /* PLR */
9205
3
    if ((flags & 0x2)) {
9206
        /* m to (m+1)   RTT  */
9207
1
        proto_tree_add_item(tree, hf_pfcp_thresholds_plr, tvb, offset, 1, ENC_BIG_ENDIAN);
9208
1
        offset++;
9209
1
    }
9210
9211
3
    if (offset < length) {
9212
3
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
9213
3
    }
9214
3
}
9215
9216
/*
9217
 * 8.2.197   Steering Mode Indicator
9218
 */
9219
static void
9220
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_)
9221
1
{
9222
1
    unsigned offset = 0;
9223
9224
1
    static int * const pfcp_l2tp_steering_mode_indications_o5_flags[] = {
9225
1
        &hf_pfcp_spare_b7_b2,
9226
1
        &hf_pfcp_l2tp_steering_mode_indications_o5_b1_ueai,
9227
1
        &hf_pfcp_l2tp_steering_mode_indications_o5_b0_albi,
9228
1
        NULL
9229
1
    };
9230
    /* Octet 5  Spare   spare    Spare    Spare   Spare   Spare   UEAI   ALBI */
9231
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_l2tp_steering_mode_indications_o5_flags, ENC_BIG_ENDIAN);
9232
1
    offset++;
9233
9234
1
    if (offset < length) {
9235
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9236
1
    }
9237
9238
1
}
9239
9240
/*
9241
 * 8.2.198    Group ID
9242
 */
9243
static void
9244
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_)
9245
0
{
9246
    /* Octet 5 to (n+4) Group ID */
9247
0
    proto_tree_add_item(tree, hf_pfcp_group_id, tvb, 0, length, ENC_UTF_8);
9248
0
}
9249
9250
/*
9251
 * 8.2.199   CP IP Address
9252
 */
9253
static void
9254
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_)
9255
1
{
9256
1
    unsigned offset = 0;
9257
1
    uint64_t cp_ip_address_flags;
9258
9259
1
    static int * const pfcp_cp_ip_address_flags[] = {
9260
1
        &hf_pfcp_spare_b7_b2,
9261
1
        &hf_pfcp_b1_v4,
9262
1
        &hf_pfcp_b0_v6,
9263
1
        NULL
9264
1
    };
9265
    /* Octet 5  Spare   V4  V6 */
9266
1
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_cp_ip_address_flags, ENC_BIG_ENDIAN, &cp_ip_address_flags);
9267
1
    offset += 1;
9268
9269
    /* IPv4 address (if present) */
9270
1
    if (cp_ip_address_flags & 0x2) {
9271
0
        proto_tree_add_item(tree, hf_pfcp_cp_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
9272
0
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
9273
0
        offset += 4;
9274
0
    }
9275
    /* IPv6 address (if present) */
9276
1
    if (cp_ip_address_flags & 0x1) {
9277
0
        proto_tree_add_item(tree, hf_pfcp_cp_ip_address_ipv6, tvb, offset, 16, ENC_NA);
9278
0
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
9279
0
        offset += 16;
9280
0
    }
9281
9282
1
    if (offset < length) {
9283
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9284
1
    }
9285
1
}
9286
9287
/*
9288
 * 8.2.200   IP Address and Port Number Replacement
9289
 */
9290
static void
9291
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_)
9292
4
{
9293
4
    unsigned offset = 0;
9294
4
    uint64_t ip_address_and_port_number_replacement_flags;
9295
9296
4
    static int * const pfcp_ip_address_and_port_number_replacement_flags[] = {
9297
4
        &hf_pfcp_spare_b7,
9298
4
        &hf_pfcp_ip_address_and_port_number_replacement_flag_b6_umn6rs,
9299
4
        &hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn,
9300
4
        &hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6,
9301
4
        &hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4,
9302
4
        &hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn,
9303
4
        &hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6,
9304
4
        &hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4,
9305
4
        NULL
9306
4
    };
9307
    /* Octet 5  Spare  UMN6RS   SPN    SIPV6   SIPV4   DPN     V6      V4*/
9308
4
    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);
9309
4
    offset += 1;
9310
9311
    /* Destination IPv4 address (if present)*/
9312
4
    if ((ip_address_and_port_number_replacement_flags & 0x1)) {
9313
3
        proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
9314
3
        offset += 4;
9315
3
    }
9316
    /* Destination IPv6 address (if present)*/
9317
4
    if ((ip_address_and_port_number_replacement_flags & 0x2)) {
9318
1
        proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6, tvb, offset, 16, ENC_NA);
9319
1
        offset += 16;
9320
1
    }
9321
    /* Destination Port Number (if present)*/
9322
4
    if ((ip_address_and_port_number_replacement_flags & 0x4)) {
9323
2
        proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_port, tvb, offset, 2, ENC_BIG_ENDIAN);
9324
2
        offset += 2;
9325
2
    }
9326
    /* Source IPv4 address (if present)*/
9327
4
    if ((ip_address_and_port_number_replacement_flags & 0x8)) {
9328
2
        proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
9329
2
        offset += 4;
9330
2
    }
9331
    /* Source IPv6 address (if present)*/
9332
4
    if ((ip_address_and_port_number_replacement_flags & 0x10)) {
9333
2
        proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_ipv6, tvb, offset, 16, ENC_NA);
9334
2
        offset += 16;
9335
2
    }
9336
    /* Source Port Number (if present)*/
9337
4
    if ((ip_address_and_port_number_replacement_flags & 0x20)) {
9338
2
        proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_port, tvb, offset, 2, ENC_BIG_ENDIAN);
9339
2
        offset += 2;
9340
2
    }
9341
9342
4
    if (offset < length) {
9343
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9344
2
    }
9345
4
}
9346
9347
/*
9348
 * 8.2.201    DNS Query/Response Filter
9349
 */
9350
static void
9351
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_)
9352
0
{
9353
0
    unsigned offset = 0;
9354
0
    uint32_t dns_query_length;
9355
9356
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_dns_query_filter_pattern_len, tvb, offset, 2, ENC_BIG_ENDIAN, &dns_query_length);
9357
0
    offset += 2;
9358
0
    proto_tree_add_item(tree, hf_pfcp_dns_query_filter_pattern, tvb, offset, dns_query_length, ENC_ASCII);
9359
0
    offset += dns_query_length;
9360
9361
0
    if (offset < length) {
9362
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9363
0
    }
9364
0
}
9365
9366
/*
9367
 * 8.2.202    Event Notification URI
9368
 */
9369
static void
9370
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_)
9371
1
{
9372
1
    proto_tree_add_item(tree, hf_pfcp_event_notification_uri, tvb, 0, length, ENC_ASCII);
9373
1
}
9374
9375
9376
/*
9377
 * 8.2.203   Notification Correlation ID
9378
 */
9379
static void
9380
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_)
9381
1
{
9382
1
    uint32_t value;
9383
    /* 5 to n+4   Notification Correlation ID value */
9384
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_notification_correlation_id, tvb, 0, 4, ENC_BIG_ENDIAN, &value);
9385
1
    proto_item_append_text(item, "%u", value);
9386
1
}
9387
9388
/*
9389
 * 8.2.204   Reporting Flags
9390
 */
9391
static void
9392
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_)
9393
0
{
9394
0
    unsigned offset = 0;
9395
9396
0
    static int * const pfcp_reporting_flags_o5_flags[] = {
9397
0
        &hf_pfcp_spare_b7_b1,
9398
0
        &hf_pfcp_reporting_flags_o5_b0_dupl,
9399
0
        NULL
9400
0
    };
9401
    /* Octet 5 Spare   DUPL */
9402
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_flags_o5_flags, ENC_BIG_ENDIAN);
9403
0
    offset++;
9404
9405
0
    if (offset == length) {
9406
0
        return;
9407
0
    }
9408
9409
0
    if (offset < length) {
9410
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9411
0
    }
9412
0
}
9413
9414
/*
9415
 * 8.2.205   Predefined Rules Name
9416
 */
9417
static void
9418
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_)
9419
1
{
9420
1
    unsigned offset = 0;
9421
    /* Octet 5 to (n+4) Predefined Rules Name
9422
    * The Predefined Rules Name field shall be encoded as an OctetString
9423
    */
9424
1
    proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA);
9425
1
}
9426
9427
/*
9428
 * 8.2.206   MBS Session Identifier
9429
 */
9430
static void
9431
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_)
9432
2
{
9433
2
    unsigned offset = 0;
9434
2
    uint64_t mbs_session_identifier_flags;
9435
9436
2
    static int * const pfcp_mbs_session_identifier_flags[] = {
9437
2
        &hf_pfcp_spare_b7_b3,
9438
2
        &hf_pfcp_mbs_session_identifier_flag_b2_nidi,
9439
2
        &hf_pfcp_mbs_session_identifier_flag_b1_ssmi,
9440
2
        &hf_pfcp_mbs_session_identifier_flag_b0_tmgi,
9441
2
        NULL
9442
2
    };
9443
    /* Octet 5  Spare   NIDI     SMI      TMGI */
9444
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mbs_session_identifier_flags, ENC_BIG_ENDIAN, &mbs_session_identifier_flags);
9445
2
    offset += 1;
9446
9447
    /* TMGI (if present)*/
9448
2
    if ((mbs_session_identifier_flags & 0x1)) {
9449
1
        proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_tmgi, tvb, offset, 6, ENC_NA);
9450
1
        offset += 6;
9451
1
    }
9452
    /* SSMI (if present)*/
9453
2
    if ((mbs_session_identifier_flags & 0x2)) {
9454
2
        uint32_t source_address_type;
9455
2
        uint32_t source_address_length;
9456
9457
        /* Source Address Type && Length */
9458
2
        proto_tree_add_item_ret_uint(tree, hf_pfcp_mbs_session_identifier_source_address_type, tvb, offset, 1, ENC_BIG_ENDIAN, &source_address_type);
9459
2
        proto_tree_add_item_ret_uint(tree, hf_pfcp_mbs_session_identifier_source_address_length, tvb, offset, 1, ENC_BIG_ENDIAN, &source_address_length);
9460
2
        offset++;
9461
9462
        /* Source IPv4 address (if present) */
9463
2
        if (source_address_type == 0) {
9464
1
            proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_source_address_ipv4, tvb, offset, source_address_length, ENC_BIG_ENDIAN);
9465
1
            offset += source_address_length;
9466
1
        }
9467
        /* Source IPv6 address (if present) */
9468
2
        if (source_address_type == 1) {
9469
1
            proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_source_address_ipv6, tvb, offset, source_address_length, ENC_NA);
9470
1
            offset += source_address_length;
9471
1
        }
9472
2
    }
9473
    /* NIDI (if present)*/
9474
2
    if ((mbs_session_identifier_flags & 0x4)) {
9475
1
        proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_nidi, tvb, offset, 5, ENC_NA);
9476
1
        return;
9477
1
    }
9478
9479
1
    if (offset < length) {
9480
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9481
1
    }
9482
1
}
9483
9484
/*
9485
 * 8.2.207   Multicast Transport Information
9486
 */
9487
static void
9488
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_)
9489
2
{
9490
2
    unsigned offset = 0;
9491
2
    uint32_t distribution_address_type;
9492
2
    uint32_t distribution_address_length;
9493
2
    uint32_t source_address_type;
9494
2
    uint32_t source_address_length;
9495
9496
    /* Oct 5 Spare */
9497
2
    proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
9498
2
    offset++;
9499
9500
    /* Oct 6 to 9 Common Tunnel Endpoint Identifier */
9501
2
    proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_endpoint_identifier, tvb, offset, 4, ENC_BIG_ENDIAN);
9502
2
    offset+=4;
9503
9504
    /* Oct 10 Distribution Address Type && Length */
9505
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_distribution_address_type, tvb, offset, 1, ENC_BIG_ENDIAN, &distribution_address_type);
9506
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_distribution_address_length, tvb, offset, 1, ENC_BIG_ENDIAN, &distribution_address_length);
9507
2
    offset++;
9508
9509
    /* Distribution IPv4 address (if present) */
9510
2
    if (distribution_address_type == 0) {
9511
1
        proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_distribution_address_ipv4, tvb, offset, distribution_address_length, ENC_BIG_ENDIAN);
9512
1
        offset += distribution_address_length;
9513
1
    }
9514
    /* Distribution IPv6 address (if present) */
9515
2
    if (distribution_address_type == 1) {
9516
0
        proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_distribution_address_ipv6, tvb, offset, distribution_address_length, ENC_NA);
9517
0
        offset += distribution_address_length;
9518
0
    }
9519
9520
    /* Source Address Type && Length */
9521
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_source_address_type, tvb, offset, 1, ENC_BIG_ENDIAN, &source_address_type);
9522
2
    proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_source_address_length, tvb, offset, 1, ENC_BIG_ENDIAN, &source_address_length);
9523
2
    offset++;
9524
9525
    /* Source IPv4 address (if present) */
9526
2
    if (source_address_type == 0) {
9527
0
        proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_source_address_ipv4, tvb, offset, source_address_length, ENC_BIG_ENDIAN);
9528
0
        offset += source_address_length;
9529
0
    }
9530
    /* Source IPv6 address (if present) */
9531
2
    if (source_address_type == 1) {
9532
0
        proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_source_address_ipv6, tvb, offset, source_address_length, ENC_NA);
9533
0
        offset += source_address_length;
9534
0
    }
9535
9536
2
    if (offset < length) {
9537
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9538
2
    }
9539
2
}
9540
9541
/*
9542
 * 8.2.208   MBSN4mbReq-Flags
9543
 */
9544
static void
9545
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_)
9546
0
{
9547
0
    unsigned offset = 0;
9548
9549
0
    static int * const pfcp_mbsn4mbreq_flags_o5_flags[] = {
9550
0
        &hf_pfcp_spare_b7_b2,
9551
0
        &hf_pfcp_mbsn4mbreq_flags_o5_b2_mbs_resti,
9552
0
        &hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm,
9553
0
        &hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm,
9554
0
        NULL
9555
0
    };
9556
    /* Octet 5 Spare    MBS RESTI   JMBSSM   PLLSSM */
9557
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mbsn4mbreq_flags_o5_flags, ENC_BIG_ENDIAN);
9558
0
    offset++;
9559
9560
0
    if (offset == length) {
9561
0
        return;
9562
0
    }
9563
9564
0
    if (offset < length) {
9565
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9566
0
    }
9567
0
}
9568
9569
/*
9570
 * 8.2.209    Local Ingress Tunnel
9571
 */
9572
static void
9573
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_)
9574
1
{
9575
1
    unsigned offset = 0;
9576
1
    uint64_t local_ingress_tunnel_flags_val;
9577
9578
1
    static int * const pfcp_local_ingress_tunnel_flags[] = {
9579
1
        &hf_pfcp_spare_b7_b3,
9580
1
        &hf_pfcp_local_ingress_tunnel_flags_b2_ch,
9581
1
        &hf_pfcp_local_ingress_tunnel_flags_b1_v6,
9582
1
        &hf_pfcp_local_ingress_tunnel_flags_b0_v4,
9583
1
        NULL
9584
1
    };
9585
    /* Octet 5  Spare  CH  V6  V4*/
9586
1
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_local_ingress_tunnel_flags, ENC_BIG_ENDIAN, &local_ingress_tunnel_flags_val);
9587
1
    offset += 1;
9588
9589
    /* 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 */
9590
1
    if ((local_ingress_tunnel_flags_val & 0x4) != 4) {
9591
        /* UDP PPort */
9592
0
        proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_udp_port, tvb, offset, 2, ENC_BIG_ENDIAN);
9593
0
        offset += 2;
9594
9595
0
        if ((local_ingress_tunnel_flags_val & 0x1) == 1) {
9596
            /* IPv4 address */
9597
0
            proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
9598
0
            offset += 4;
9599
0
        }
9600
0
        if ((local_ingress_tunnel_flags_val & 0x2) == 2) {
9601
            /* IPv6 address */
9602
0
            proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_ipv6, tvb, offset, 16, ENC_NA);
9603
0
            offset += 16;
9604
0
        }
9605
0
    }
9606
1
    if (offset < length) {
9607
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9608
1
    }
9609
9610
1
}
9611
9612
/*
9613
 * 8.2.210   MBS Unicast Parameters ID
9614
 */
9615
static void
9616
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_)
9617
0
{
9618
0
    uint32_t value;
9619
    /* Octet 5 to 6 MBS Unicast Parameters ID */
9620
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_mbs_unicast_parameters_id, tvb, 0, 2, ENC_BIG_ENDIAN, &value);
9621
0
    proto_item_append_text(item, "%u", value);
9622
0
}
9623
9624
/*
9625
 * 8.2.211   MBSN4Resp-Flags
9626
 */
9627
static void
9628
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_)
9629
0
{
9630
0
    unsigned offset = 0;
9631
9632
0
    static int * const pfcp_mbsn4resp_flags_o5_flags[] = {
9633
0
        &hf_pfcp_spare_b7_b3,
9634
0
        &hf_pfcp_mbsn4resp_flags_o5_b2_n19dtr,
9635
0
        &hf_pfcp_mbsn4resp_flags_o5_b1_jmti,
9636
0
        &hf_pfcp_mbsn4resp_flags_o5_b0_nn19dt,
9637
0
        NULL
9638
0
    };
9639
    /* Octet 5  Spare   spare    Spare    Spare   Spare   N19DTR   JMTI   NN19DT */
9640
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mbsn4resp_flags_o5_flags, ENC_BIG_ENDIAN);
9641
0
    offset++;
9642
9643
0
    if (offset < length) {
9644
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9645
0
    }
9646
9647
0
}
9648
9649
/*
9650
 * 8.2.212   Tunnel Password
9651
 */
9652
static void
9653
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_)
9654
0
{;
9655
    /* Octet 5 to (n+4) Tunnel Password value */
9656
0
    proto_tree_add_item(tree, hf_pfcp_tunnel_password_value, tvb, 0, -1, ENC_UTF_8);
9657
0
}
9658
9659
/*
9660
 * 8.2.213   Area Session ID
9661
 */
9662
static void
9663
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_)
9664
1
{;
9665
1
    uint32_t value;
9666
1
    proto_tree_add_item_ret_uint(tree, hf_pfcp_area_session_id_value, tvb, 0, 2, ENC_BIG_ENDIAN, &value);
9667
1
    proto_item_append_text(item, "%u", value);
9668
1
}
9669
9670
/*
9671
 * 8.2.214   DSCP to PPI Mapping Information
9672
 */
9673
static void
9674
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_)
9675
1
{
9676
1
    unsigned offset = 0;
9677
1
    int dscp_values = 0;
9678
9679
    /* Octet 5  Paging Policy Indicator (PPI)
9680
    * 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
9681
    */
9682
1
    proto_tree_add_item(tree, hf_pfcp_dscp_to_ppi_mapping_info_ppi_value, tvb, offset, 1, ENC_BIG_ENDIAN);
9683
1
    offset++;
9684
9685
63
    while (offset < length) {
9686
63
        proto_tree_add_item(tree, hf_pfcp_dscp_to_ppi_mapping_info_dscp_value, tvb, offset, 1, ENC_BIG_ENDIAN);
9687
63
        offset++;
9688
63
        dscp_values++;
9689
9690
        /* no more than 63 DSCP values */
9691
63
        if(dscp_values >= 63) {
9692
1
            break;
9693
1
        }
9694
63
    }
9695
9696
1
    if (offset < length) {
9697
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9698
1
    }
9699
1
}
9700
9701
/*
9702
 * 8.2.215   PFCPSDRsp-Flags
9703
 */
9704
static void
9705
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_)
9706
0
{
9707
0
    unsigned offset = 0;
9708
9709
0
    static int * const pfcp_pfcpsdrsp_flags[] = {
9710
0
        &hf_pfcp_spare_b7_b1,
9711
0
        &hf_pfcp_pfcpsdrsp_flags_b0_puru,
9712
0
        NULL
9713
0
    };
9714
    /* Octet 5  Spare   PURU */
9715
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_pfcpsdrsp_flags, ENC_BIG_ENDIAN);
9716
0
    offset += 1;
9717
9718
0
    if (offset < length) {
9719
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9720
0
    }
9721
0
}
9722
9723
/*
9724
 * 8.2.216   QER Indications
9725
 */
9726
static void
9727
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_)
9728
0
{
9729
0
    unsigned offset = 0;
9730
9731
0
    static int * const pfcp_qer_indications_flags[] = {
9732
0
        &hf_pfcp_spare_b7_b6,
9733
0
        &hf_pfcp_qer_indications_flags_b5_tnbmi,
9734
0
        &hf_pfcp_qer_indications_flags_b4_dbsmi,
9735
0
        &hf_pfcp_qer_indications_flags_b3_pdusm,
9736
0
        &hf_pfcp_qer_indications_flags_b2_eml4s,
9737
0
        &hf_pfcp_qer_indications_flags_b1_edbmi,
9738
0
        &hf_pfcp_qer_indications_flags_b0_iqfis,
9739
0
        NULL
9740
0
    };
9741
    /* Octet 5  Spare   TNBMI   DBSMI   PDUSM   EML4S   EDBMI   IQFISN */
9742
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_qer_indications_flags, ENC_BIG_ENDIAN);
9743
0
    offset += 1;
9744
9745
0
    if (offset < length) {
9746
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9747
0
    }
9748
0
}
9749
9750
/*
9751
 * 8.2.217   Vendor-Specific Node Report Type
9752
 */
9753
static void
9754
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_)
9755
0
{
9756
0
    unsigned offset = 0;
9757
9758
    /* Octet 5 to 6  Enterprise ID   */
9759
0
    proto_tree_add_item(tree, hf_pfcp_enterprise_id, tvb, offset, 2, ENC_BIG_ENDIAN);
9760
0
    offset += 2;
9761
9762
0
    static int * const pfcp_vendor_specific_node_report_type_flags[] = {
9763
0
        &hf_pfcp_spare_b7,
9764
0
        &hf_pfcp_spare_b6,
9765
0
        &hf_pfcp_spare_b5,
9766
0
        &hf_pfcp_spare_b4,
9767
0
        &hf_pfcp_spare_b3,
9768
0
        &hf_pfcp_spare_b2,
9769
0
        &hf_pfcp_spare_b1,
9770
0
        &hf_pfcp_spare_b0,
9771
0
        NULL
9772
0
    };
9773
    /* Octet 5  Spare   */
9774
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_vendor_specific_node_report_type_flags, ENC_BIG_ENDIAN);
9775
0
    offset += 1;
9776
9777
0
    if (offset < length) {
9778
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9779
0
    }
9780
0
}
9781
9782
/*
9783
 * 8.2.218   Configured Time Domain
9784
 */
9785
static void
9786
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_)
9787
1
{
9788
1
    unsigned offset = 0;
9789
9790
1
    static int * const pfcp_configured_time_domain_flags[] = {
9791
1
        &hf_pfcp_spare_b7_b1,
9792
1
        &hf_pfcp_configured_time_domain_flags_b0_ctdi,
9793
1
        NULL
9794
1
    };
9795
    /* Octet 5  Spare   CTDI */
9796
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_configured_time_domain_flags, ENC_BIG_ENDIAN);
9797
1
    offset += 1;
9798
9799
1
    if (offset < length) {
9800
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9801
1
    }
9802
1
}
9803
9804
/*
9805
 * 8.2.219    Metadata
9806
 */
9807
static void
9808
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_)
9809
0
{
9810
0
    unsigned offset = 0;
9811
9812
    /* Octet 5 to (n+4) Metadata
9813
    * 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
9814
    */
9815
0
    proto_tree_add_item(tree, hf_pfcp_metadata, tvb, offset, length, ENC_NA);
9816
9817
0
    tvbuff_t* bin_tvb = base64_tvb_to_new_tvb(tvb, offset, length);
9818
0
    int bin_tvb_length = tvb_reported_length(bin_tvb);
9819
0
    add_new_data_source(pinfo, bin_tvb, "Base64 decoded");
9820
0
    proto_tree_add_item(tree, hf_pfcp_metadata_binary_metadata, bin_tvb, 0, bin_tvb_length, ENC_NA);
9821
0
}
9822
9823
/*
9824
 * 8.2.220   Traffic Parameter Threshold
9825
 */
9826
static void
9827
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_)
9828
0
{
9829
0
    unsigned offset = 0;
9830
0
    uint64_t traffic_parameter_threshold_flags;
9831
9832
0
    static int * const pfcp_traffic_parameter_threshold_flags[] = {
9833
0
        &hf_pfcp_spare_b7_b1,
9834
0
        &hf_pfcp_traffic_parameter_threshold_flags_b0_dl,
9835
0
        NULL
9836
0
    };
9837
    /* Octet 5  Spare   DL */
9838
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_traffic_parameter_threshold_flags, ENC_BIG_ENDIAN, &traffic_parameter_threshold_flags);
9839
0
    offset += 1;
9840
9841
    /* Octet 6 to 9 Downlink N6 Jitter threshold (if present)*/
9842
0
    if ((traffic_parameter_threshold_flags & 0x1)) {
9843
0
        proto_tree_add_item(tree, hf_pfcp_traffic_parameter_threshold_downlink_n6_jitter_threshold, tvb, offset, 4, ENC_BIG_ENDIAN);
9844
0
        offset += 4;
9845
0
    }
9846
9847
0
    if (offset < length) {
9848
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9849
0
    }
9850
0
}
9851
9852
/*
9853
 * 8.2.221   DL Periodicity
9854
 */
9855
static void
9856
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_)
9857
1
{
9858
1
    unsigned offset = 0;
9859
9860
    // Octet 5 Spare Octet
9861
1
    proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
9862
1
    offset += 1;
9863
9864
    /* Octet 6 to 9 DL Periodicity */
9865
1
    proto_tree_add_item(tree, hf_pfcp_dl_periodicity_value, tvb, offset, 4, ENC_BIG_ENDIAN);
9866
1
    offset += 4;
9867
9868
1
    if (offset < length) {
9869
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9870
0
    }
9871
1
}
9872
9873
/*
9874
 * 8.2.222   N6 Jitter Measurement
9875
 */
9876
static void
9877
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_)
9878
0
{
9879
0
    unsigned offset = 0;
9880
0
    uint64_t n6_jitter_measurement_flags;
9881
9882
0
    static int * const pfcp_n6_jitter_measurement_flags[] = {
9883
0
        &hf_pfcp_spare_b7_b1,
9884
0
        &hf_pfcp_n6_jitter_measurement_flags_b0_dl,
9885
0
        NULL
9886
0
    };
9887
    /* Octet 5  Spare   DL */
9888
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_n6_jitter_measurement_flags, ENC_BIG_ENDIAN, &n6_jitter_measurement_flags);
9889
0
    offset += 1;
9890
9891
0
    if ((n6_jitter_measurement_flags & 0x1)) {
9892
        /* Octet 6 to 9 DL Periodicity */
9893
0
        proto_tree_add_item(tree, hf_pfcp_n6_jitter_measurement_dl_periodicity, tvb, offset, 4, ENC_BIG_ENDIAN);
9894
0
        offset += 4;
9895
9896
        /* Octet 10 to 13 Lower DL Jitter Measurement */
9897
0
        proto_tree_add_item(tree, hf_pfcp_n6_jitter_measurement_lower_dl_jitter_measurement, tvb, offset, 4, ENC_BIG_ENDIAN);
9898
0
        offset += 4;
9899
9900
        /* Octet 14 to 17 Higher DL Jitter Measurement */
9901
0
        proto_tree_add_item(tree, hf_pfcp_n6_jitter_measurement_higher_dl_jitter_measurement, tvb, offset, 4, ENC_BIG_ENDIAN);
9902
0
        offset += 4;
9903
0
    }
9904
9905
0
    if (offset < length) {
9906
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9907
0
    }
9908
0
}
9909
9910
/*
9911
 * 8.2.223   Traffic Parameter Measurement Indication
9912
 */
9913
static void
9914
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_)
9915
1
{
9916
1
    unsigned offset = 0;
9917
9918
1
    static int * const pfcp_traffic_parameter_measurement_indication_flags[] = {
9919
1
        &hf_pfcp_spare_b7_b3,
9920
1
        &hf_pfcp_traffic_parameter_measurement_indication_flags_b2_n6jmi,
9921
1
        &hf_pfcp_traffic_parameter_measurement_indication_flags_b1_dlpmi,
9922
1
        &hf_pfcp_traffic_parameter_measurement_indication_flags_b0_ulpmi,
9923
1
        NULL
9924
1
    };
9925
    /* Octet 5  Spare   N6JMI   DLPMI   ULPMI */
9926
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_traffic_parameter_measurement_indication_flags, ENC_BIG_ENDIAN);
9927
1
    offset += 1;
9928
9929
1
    if (offset < length) {
9930
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9931
1
    }
9932
1
}
9933
9934
/*
9935
 * 8.2.224   UL Periodicity
9936
 */
9937
static void
9938
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_)
9939
0
{
9940
0
    unsigned offset = 0;
9941
9942
    // Octet 5 Spare Octet
9943
0
    proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
9944
0
    offset += 1;
9945
9946
    /* Octet 6 to 9 DL Periodicity */
9947
0
    proto_tree_add_item(tree, hf_pfcp_ul_periodicity_value, tvb, offset, 4, ENC_BIG_ENDIAN);
9948
0
    offset += 4;
9949
9950
0
    if (offset < length) {
9951
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9952
0
    }
9953
0
}
9954
9955
/*
9956
 * 8.2.225   MPQUIC Control Information
9957
 */
9958
static void
9959
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_)
9960
1
{
9961
1
    unsigned offset = 0;
9962
9963
1
    static int * const pfcp_mpquic_control_information_flags[] = {
9964
1
        &hf_pfcp_spare_b7_b3,
9965
1
        &hf_pfcp_mpquic_control_information_flags_b2_ceth,
9966
1
        &hf_pfcp_mpquic_control_information_flags_b1_cip,
9967
1
        &hf_pfcp_mpquic_control_information_flags_b0_cupd,
9968
1
        NULL
9969
1
    };
9970
    /* Octet 5  Spare   CETH   CIP   CUDP */
9971
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mpquic_control_information_flags, ENC_BIG_ENDIAN);
9972
1
    offset += 1;
9973
9974
1
    if (offset < length) {
9975
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
9976
1
    }
9977
1
}
9978
9979
/*
9980
 * 8.2.226   MPQUIC Address Information
9981
 */
9982
static const value_string pfcp_mpquic_address_information_type_vals[] = {
9983
    { 1, "Transport converter, used only if the proxy type is MPTCP" },
9984
    { 2, "Connect-UDP, used only if the proxy type is MPQUIC" },
9985
    { 0, NULL }
9986
};
9987
9988
static void
9989
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_)
9990
0
{
9991
0
    unsigned offset = 0;
9992
0
    uint64_t mpquic_address_information_flags;
9993
9994
0
    static int * const pfcp_mpquic_address_information_flags[] = {
9995
0
        &hf_pfcp_spare_b7_b1,
9996
0
        &hf_pfcp_mpquic_address_information_flags_b1_v6,
9997
0
        &hf_pfcp_mpquic_address_information_flags_b0_v4,
9998
0
        NULL
9999
0
    };
10000
    /* Octet 5  Spare   V6  V4 */
10001
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_mpquic_address_information_flags, ENC_BIG_ENDIAN, &mpquic_address_information_flags);
10002
0
    offset += 1;
10003
10004
    /* 6 MPQUIC Proxy Type */
10005
0
    proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_type, tvb, offset, 1, ENC_BIG_ENDIAN);
10006
0
    offset += 1;
10007
10008
    /* 7 MPQUIC Proxy Port */
10009
0
    proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_port, tvb, offset, 2, ENC_BIG_ENDIAN);
10010
0
    offset += 2;
10011
10012
    /* p to (p+3) MPQUIC Proxy IPv4 address (if present) */
10013
0
    if ((mpquic_address_information_flags & 0x1)) {
10014
0
        proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10015
0
        offset += 4;
10016
0
    }
10017
    /* q to (q+15) MPQUIC Proxy IPv6 address (if present) */
10018
0
    if ((mpquic_address_information_flags & 0x2)) {
10019
0
        proto_tree_add_item(tree, hf_pfcp_mpquic_address_information_address_ipv6, tvb, offset, 16, ENC_NA);
10020
0
        offset += 16;
10021
0
    }
10022
10023
0
    if (offset < length) {
10024
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10025
0
    }
10026
0
}
10027
10028
/*
10029
 * 8.2.227   Transport Mode
10030
 */
10031
static const value_string pfcp_transport_mode_type_vals[] = {
10032
    { 0, "Datagram mode 1" },
10033
    { 1, "Datagram mode 2" },
10034
    { 2, "Stream mode" },
10035
    { 0, NULL }
10036
};
10037
10038
static void
10039
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_)
10040
1
{
10041
1
    unsigned offset = 0;
10042
10043
    /* 5 Transport Mode Value */
10044
1
    proto_tree_add_item(tree, hf_pfcp_transport_mode_value, tvb, offset, 1, ENC_BIG_ENDIAN);
10045
1
    offset += 1;
10046
10047
1
    if (offset < length) {
10048
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10049
1
    }
10050
1
}
10051
10052
/*
10053
 * 8.2.228   Protocol Description
10054
 */
10055
static void
10056
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_)
10057
0
{
10058
0
    unsigned offset = 0;
10059
10060
0
    static int * const pfcp_protocol_description_flags[] = {
10061
0
        &hf_pfcp_spare_b7_b3,
10062
0
        &hf_pfcp_protocol_description_flags_b2_srtp,
10063
0
        &hf_pfcp_protocol_description_flags_b1_rtp,
10064
0
        &hf_pfcp_protocol_description_flags_b0_h264,
10065
0
        NULL
10066
0
    };
10067
    /* Octet 5  Spare   SRTP    RTP     H264 */
10068
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_protocol_description_flags, ENC_BIG_ENDIAN);
10069
0
    offset += 1;
10070
10071
0
    if (offset < length) {
10072
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10073
0
    }
10074
0
}
10075
10076
/*
10077
 * 8.2.229   Reporting Suggestion Info
10078
 */
10079
static const value_string pfcp_reporting_urgency_type_vals[] = {
10080
    { 0, "Delay tolerant" },
10081
    { 1, "Non delay tolerant" },
10082
    { 0, NULL }
10083
};
10084
10085
static void
10086
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_)
10087
0
{
10088
0
    unsigned offset = 0;
10089
0
    uint32_t value;
10090
10091
    /* 5 Reporting Urgency value */
10092
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_reporting_suggestion_info_reporting_urgency_value, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
10093
0
    offset += 1;
10094
10095
    /* 6-9 Reporting Time Info */
10096
0
    if (value == 0) {
10097
0
        proto_tree_add_item(tree, hf_pfcp_reporting_suggestion_info_reporting_time_info, tvb, offset, 4, ENC_BIG_ENDIAN);
10098
0
        offset += 4;
10099
0
    }
10100
10101
0
    if (offset < length) {
10102
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10103
0
    }
10104
0
}
10105
10106
/*
10107
 * 8.2.230   TL-Container
10108
 */
10109
static void
10110
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_)
10111
1
{
10112
1
    unsigned offset = 0;
10113
    /* Octet 5 to (n+4) TL-Container
10114
    * The TL-Container Information field shall be encoded as an Octet String.
10115
    * It shall encode a Get or Set Request or Response message defined in 3GPP TS 29.585.
10116
    */
10117
1
    proto_tree_add_item(tree, hf_pfcp_tl_container, tvb, offset, length, ENC_NA);
10118
1
}
10119
10120
/*
10121
 * 8.2.231   Measurement Indication
10122
 */
10123
static void
10124
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_)
10125
0
{
10126
0
    unsigned offset = 0;
10127
10128
0
    static int * const pfcp_measurement_indication_flags[] = {
10129
0
        &hf_pfcp_spare_b7_b1,
10130
0
        &hf_pfcp_measurement_indication_flags_b0_dqfi,
10131
0
        NULL
10132
0
    };
10133
    /* Octet 5  Spare   DQFI */
10134
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_measurement_indication_flags, ENC_BIG_ENDIAN);
10135
0
    offset += 1;
10136
10137
0
    if (offset < length) {
10138
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10139
0
    }
10140
0
}
10141
10142
/*
10143
 * 8.2.232   HPLMN S-NSSAI
10144
 */
10145
static void
10146
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_)
10147
0
{
10148
0
    unsigned offset = 0;
10149
10150
    /* 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. */
10151
    /* Octet 5 SST */
10152
0
    proto_tree_add_item(tree, hf_pfcp_hplmn_s_nssai_sst, tvb, offset, 1, ENC_NA);
10153
0
    offset += 1;
10154
10155
    /* Octet 6-8 SD */
10156
0
    proto_tree_add_item(tree, hf_pfcp_hplmn_s_nssai_sd, tvb, offset, 3, ENC_NA);
10157
0
}
10158
10159
/*
10160
 * 8.2.233   Media Transport Protocol
10161
 */
10162
static const value_string pfcp_media_transport_protocol_vals[] = {
10163
    { 0, "Unspecified" },
10164
    { 1, "RTP (Real-time Transport Protocol)" },
10165
    { 2, "SRTP (Secure Real-Time Protocol)" },
10166
    { 0, NULL }
10167
};
10168
10169
static void
10170
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_)
10171
1
{
10172
1
    unsigned offset = 0;
10173
10174
    /* 5 Media Transport Protocol */
10175
1
    proto_tree_add_item(tree, hf_pfcp_media_transport_protocol, tvb, offset, 1, ENC_BIG_ENDIAN);
10176
1
    offset += 1;
10177
10178
1
    if (offset < length) {
10179
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10180
1
    }
10181
1
}
10182
10183
/*
10184
 * 8.2.234   RTP Header Extension Type
10185
 */
10186
static const value_string pfcp_rtp_header_extension_type_vals[] = {
10187
    { 1, "RTP Header Extension for PDU Set Marking" },
10188
    { 0, NULL }
10189
};
10190
10191
static void
10192
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_)
10193
0
{
10194
    /* Octet 5 RTP Header Extension Type */
10195
0
    proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_type, tvb, 0, length, ENC_NA);
10196
0
}
10197
10198
/*
10199
 * 8.2.235   RTP Header Extension ID
10200
 */
10201
static void
10202
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_)
10203
0
{
10204
    /* Octet 5 RTP Header Extension ID */
10205
0
    proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_id, tvb, 0, length, ENC_NA);
10206
0
}
10207
10208
/*
10209
 * 8.2.236   RTP Payload Type
10210
 */
10211
static void
10212
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_)
10213
0
{
10214
    /* Octet 5 RTP Payload Type */
10215
0
    proto_tree_add_item(tree, hf_pfcp_rtp_payload_type, tvb, 0, length, ENC_NA);
10216
0
}
10217
10218
/*
10219
 * 8.2.237   RTP Payload Format
10220
 */
10221
static const value_string pfcp_rtp_payload_format_vals[] = {
10222
    { 1, "RTP Header Extension for PDU Set Marking" },
10223
    { 0, NULL }
10224
};
10225
10226
static void
10227
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_)
10228
0
{
10229
    /* Octet 5 RTP Payload Format */
10230
0
    proto_tree_add_item(tree, hf_pfcp_rtp_payload_format, tvb, 0, length, ENC_NA);
10231
0
}
10232
10233
/*
10234
 * 8.2.238   Extended DL Buffering Notification Policy
10235
 */
10236
static void
10237
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_)
10238
1
{
10239
1
    unsigned offset = 0;
10240
10241
1
    static int * const pfcp_extended_dl_buffering_notification_policy_flags[] = {
10242
1
        &hf_pfcp_spare_b7_b1,
10243
1
        &hf_pfcp_extended_dl_buffering_notification_policy_flags_b0_edbn,
10244
1
        NULL
10245
1
    };
10246
    /* Octet 5  Spare   EDBN */
10247
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_extended_dl_buffering_notification_policy_flags, ENC_BIG_ENDIAN);
10248
1
    offset += 1;
10249
10250
1
    if (offset < length) {
10251
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10252
1
    }
10253
1
}
10254
10255
/*
10256
 * 8.2.239   MT-SDT Control Information
10257
 */
10258
static void
10259
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_)
10260
0
{
10261
0
    unsigned offset = 0;
10262
10263
0
    static int * const pfcp_mt_sdt_control_information_flags[] = {
10264
0
        &hf_pfcp_spare_b7_b1,
10265
0
        &hf_pfcp_mt_sdt_control_information_flags_b0_rdsi,
10266
0
        NULL
10267
0
    };
10268
    /* Octet 5  Spare   RDSI */
10269
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mt_sdt_control_information_flags, ENC_BIG_ENDIAN);
10270
0
    offset += 1;
10271
10272
0
    if (offset < length) {
10273
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10274
0
    }
10275
0
}
10276
10277
/*
10278
 * 8.2.240   Reporting Thresholds
10279
 */
10280
static void
10281
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_)
10282
1
{
10283
1
    unsigned offset = 0;
10284
1
    uint64_t reporting_thresholds_flags;
10285
10286
1
    static int * const pfcp_reporting_thresholds_flags[] = {
10287
1
        &hf_pfcp_spare_b7_b4,
10288
1
        &hf_pfcp_reporting_thresholds_flags_b3_uldr,
10289
1
        &hf_pfcp_reporting_thresholds_flags_b2_dldr,
10290
1
        &hf_pfcp_reporting_thresholds_flags_b1_ulci,
10291
1
        &hf_pfcp_reporting_thresholds_flags_b0_dlci,
10292
1
        NULL
10293
1
    };
10294
    /* Octet 5  Spare   RP  Ul  DL */
10295
1
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_reporting_thresholds_flags, ENC_BIG_ENDIAN, &reporting_thresholds_flags);
10296
1
    offset += 1;
10297
10298
    /* m to (m+1) DL Congestion information threshold */
10299
1
    if ((reporting_thresholds_flags & 0x1)) {
10300
0
        proto_tree_add_item(tree, hf_pfcp_reporting_thresholds_dl_congestion_information_threshold, tvb, offset, 1, ENC_BIG_ENDIAN);
10301
0
        offset += 1;
10302
0
    }
10303
10304
    /* p to (p+1) UL Congestion information threshold */
10305
1
    if ((reporting_thresholds_flags & 0x2)) {
10306
0
        proto_tree_add_item(tree, hf_pfcp_reporting_thresholds_ul_congestion_information_threshold, tvb, offset, 1, ENC_BIG_ENDIAN);
10307
0
        offset += 1;
10308
0
    }
10309
10310
    /* q to (q+4) DL Data Rate threshold */
10311
1
    if ((reporting_thresholds_flags & 0x4)) {
10312
0
        proto_tree_add_item(tree, hf_pfcp_reporting_thresholds_dl_data_rate_threshold, tvb, offset, 4, ENC_BIG_ENDIAN);
10313
0
        offset += 4;
10314
10315
        /* r to (r+4) UL Data Rate threshold */
10316
0
        proto_tree_add_item(tree, hf_pfcp_reporting_thresholds_ul_data_rate_threshold, tvb, offset, 4, ENC_BIG_ENDIAN);
10317
0
        offset += 4;
10318
0
    }
10319
10320
1
    if (offset < length) {
10321
1
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
10322
1
    }
10323
1
}
10324
10325
/*
10326
 * 8.2.241   RTP Header Extension Additional Information
10327
 */
10328
static const value_string pfcp_rtp_header_extension_additional_information_type_vals[] = {
10329
    { 1, "1-byte (short) format in used" },
10330
    { 2, "2-byte (long) format in used" },
10331
    { 0, NULL }
10332
};
10333
10334
static void
10335
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_)
10336
1
{
10337
1
    unsigned offset = 0;
10338
1
    uint64_t rtp_header_extension_additional_information_flags;
10339
10340
1
    static int * const pfcp_rtp_header_extension_additional_information_flags[] = {
10341
1
        &hf_pfcp_spare_b7_b3,
10342
1
        &hf_pfcp_rtp_header_extension_additional_information_flags_b2_npdsi,
10343
1
        &hf_pfcp_rtp_header_extension_additional_information_flags_b1_pssai,
10344
1
        &hf_pfcp_rtp_header_extension_additional_information_flags_b0_fi,
10345
1
        NULL
10346
1
    };
10347
    /* Octet 5  Spare   NPDSI   PSSAI   FI */
10348
1
    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);
10349
1
    offset += 1;
10350
10351
    /* Octet 6 */
10352
    /* PSSA */
10353
1
    if ((rtp_header_extension_additional_information_flags & 0x2)) {
10354
1
        proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_additional_information_pssa, tvb, offset, 1, ENC_BIG_ENDIAN);
10355
1
    }
10356
    /* Format */
10357
1
    if ((rtp_header_extension_additional_information_flags & 0x1)) {
10358
0
        proto_tree_add_item(tree, hf_pfcp_rtp_header_extension_additional_information_format, tvb, offset, 1, ENC_BIG_ENDIAN);
10359
0
    }
10360
1
    offset += 1;
10361
10362
1
    if (offset < length) {
10363
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10364
1
    }
10365
1
}
10366
10367
/*
10368
 * 8.2.242   Mapped N6 IP Address
10369
 */
10370
static void
10371
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_)
10372
2
{
10373
2
    unsigned offset = 0;
10374
2
    uint64_t mapped_n6_ip_address_flags;
10375
10376
2
    static int * const pfcp_mapped_n6_ip_address_flags[] = {
10377
2
        &hf_pfcp_spare_b7_b2,
10378
2
        &hf_pfcp_mapped_n6_ip_address_b0_chv4,
10379
2
        &hf_pfcp_mapped_n6_ip_address_b1_v4,
10380
2
        NULL
10381
2
    };
10382
    /* Octet 5  Spare   V4 */
10383
2
    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);
10384
2
    offset += 1;
10385
10386
    /* IPv4 address (if present) */
10387
2
    if ((mapped_n6_ip_address_flags & 0x2)) {
10388
1
        proto_tree_add_item(tree, hf_pfcp_mapped_n6_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10389
1
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
10390
1
        offset += 4;
10391
1
    }
10392
10393
2
    if (offset < length) {
10394
2
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10395
2
    }
10396
2
}
10397
10398
/*
10399
 * 8.2.243   N6 Routing Information
10400
 */
10401
static void
10402
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_)
10403
2
{
10404
2
    unsigned offset = 0;
10405
2
    uint64_t n6_routing_information_flags;
10406
10407
2
    static int * const pfcp_n6_routing_information_flags[] = {
10408
2
        &hf_pfcp_spare_b7_b6,
10409
2
        &hf_pfcp_n6_routing_information_flag_b5_dpo,
10410
2
        &hf_pfcp_n6_routing_information_flag_b4_dipv6,
10411
2
        &hf_pfcp_n6_routing_information_flag_b3_dipv4,
10412
2
        &hf_pfcp_n6_routing_information_flag_b2_spo,
10413
2
        &hf_pfcp_n6_routing_information_flag_b1_sipv6,
10414
2
        &hf_pfcp_n6_routing_information_flag_b0_sipv4,
10415
2
        NULL
10416
2
    };
10417
    /* Octet 5  Spare  DPO    DIPV6   DIPV4   SPO     SIPV6      SIPV4*/
10418
2
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_n6_routing_information_flags, ENC_BIG_ENDIAN, &n6_routing_information_flags);
10419
2
    offset += 1;
10420
10421
    /* Source IPv4 address (if present)*/
10422
2
    if ((n6_routing_information_flags & 0x1)) {
10423
2
        proto_tree_add_item(tree, hf_pfcp_n6_routing_information_source_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10424
2
        offset += 4;
10425
2
    }
10426
    /* Source IPv6 address (if present)*/
10427
2
    if ((n6_routing_information_flags & 0x2)) {
10428
1
        proto_tree_add_item(tree, hf_pfcp_n6_routing_information_source_ipv6, tvb, offset, 16, ENC_NA);
10429
1
        offset += 16;
10430
1
    }
10431
    /* Source Port Number (if present)*/
10432
2
    if ((n6_routing_information_flags & 0x4)) {
10433
2
        proto_tree_add_item(tree, hf_pfcp_n6_routing_information_source_port, tvb, offset, 2, ENC_BIG_ENDIAN);
10434
2
        offset += 2;
10435
2
    }
10436
    /* Destination IPv4 address (if present)*/
10437
2
    if ((n6_routing_information_flags & 0x8)) {
10438
1
        proto_tree_add_item(tree, hf_pfcp_n6_routing_information_destination_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10439
1
        offset += 4;
10440
1
    }
10441
    /* Destination IPv6 address (if present)*/
10442
2
    if ((n6_routing_information_flags & 0x10)) {
10443
1
        proto_tree_add_item(tree, hf_pfcp_n6_routing_information_destination_ipv6, tvb, offset, 16, ENC_NA);
10444
1
        offset += 16;
10445
1
    }
10446
    /* Destination Port Number (if present)*/
10447
2
    if ((n6_routing_information_flags & 0x20)) {
10448
0
        proto_tree_add_item(tree, hf_pfcp_n6_routing_information_destination_port, tvb, offset, 2, ENC_BIG_ENDIAN);
10449
0
        offset += 2;
10450
0
    }
10451
10452
2
    if (offset < length) {
10453
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10454
1
    }
10455
2
}
10456
10457
/*
10458
 * 8.2.244    URI
10459
 */
10460
static void
10461
dissect_pfcp_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_)
10462
1
{
10463
1
    proto_tree_add_item(tree, hf_pfcp_uri, tvb, 0, length, ENC_ASCII);
10464
1
}
10465
10466
/*
10467
 * 8.2.245   UE Level Measurements Configuration
10468
 */
10469
static const value_string pfcp_ue_level_measurements_configuration_job_type_vals[] = {
10470
    { 1, "5GC UE Level Measurements only" },
10471
    { 2, "Trace and 5GC UE Level Measurements" },
10472
    { 0, NULL }
10473
};
10474
static const value_string pfcp_ue_level_measurements_configuration_measurement_type_vals[] = {
10475
    { 1, "Average DL packet delay between PSA UPF and UE for a QoS flow" },
10476
    { 2, "Average UL packet delay between PSA UPF and UE for a QoS flow (excluding D1)" },
10477
    { 3, "Average UL packet delay between PSA UPF and UE for a QoS flow (including D1)" },
10478
    { 4, "Average UL packet delay between PSA UPF and NG-RAN for a QoS flow" },
10479
    { 5, "Average DL packet delay between PSA UPF and NG-RAN for a QoS flow" },
10480
    { 0, NULL }
10481
};
10482
10483
static void
10484
dissect_pfcp_ue_level_measurements_configuration(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_)
10485
4
{
10486
4
    unsigned offset = 0;
10487
4
    uint32_t value, i;
10488
10489
    /* 5   Job Type  */
10490
4
    proto_tree_add_item(tree, hf_pfcp_ue_level_measurements_configuration_job_type, tvb, offset, 1, ENC_BIG_ENDIAN);
10491
4
    offset += 1;
10492
10493
    /* 6   Number of Measurement Types  */
10494
4
    proto_tree_add_item_ret_uint(tree, hf_pfcp_ue_level_measurements_configuration_number_of_measurement, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
10495
4
    offset += 1;
10496
10497
    /* 7+k-1 Measurement Type value  */
10498
255
    for (i = 0; i < value; i++)
10499
251
    {
10500
251
        proto_tree_add_item(tree, hf_pfcp_ue_level_measurements_configuration_measurement_type, tvb, offset, 1, ENC_BIG_ENDIAN);
10501
251
        offset += 1;
10502
251
    }
10503
10504
    /* m to m+2   Time Period  */
10505
4
    proto_tree_add_item(tree, hf_pfcp_ue_level_measurements_configuration_time_period, tvb, offset, 3, ENC_BIG_ENDIAN);
10506
4
    offset += 3;
10507
10508
4
    if (offset < length) {
10509
2
        proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length);
10510
2
    }
10511
4
}
10512
10513
/*
10514
 * 8.2.246   N6 Delay Measurement Protocols
10515
 */
10516
static void
10517
dissect_pfcp_n6_delay_measurement_protocols(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_)
10518
0
{
10519
0
    unsigned offset = 0;
10520
10521
0
    static int * const pfcp_n6_delay_measurement_protocols_flags[] = {
10522
0
        &hf_pfcp_spare_b7_b4,
10523
0
        &hf_pfcp_n6_delay_measurement_protocols_b3_other,
10524
0
        &hf_pfcp_n6_delay_measurement_protocols_b2_stamp,
10525
0
        &hf_pfcp_n6_delay_measurement_protocols_b1_owamp,
10526
0
        &hf_pfcp_n6_delay_measurement_protocols_b0_twamp,
10527
0
        NULL
10528
0
    };
10529
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_n6_delay_measurement_protocols_flags, ENC_BIG_ENDIAN);
10530
0
    offset += 1;
10531
10532
0
    if (offset < length) {
10533
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10534
0
    }
10535
0
}
10536
10537
/*
10538
 * 8.2.247   N6 Delay Measurement Information
10539
 */
10540
static void
10541
dissect_pfcp_n6_delay_measurement_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_)
10542
1
{
10543
1
    unsigned offset = 0;
10544
1
    uint64_t flags;
10545
10546
1
    static int * const pfcp_n6_delay_measurement_information_flags[] = {
10547
1
        &hf_pfcp_spare_b7_b2,
10548
1
        &hf_pfcp_n6_delay_measurement_information_b1_maxd,
10549
1
        &hf_pfcp_n6_delay_measurement_information_b0_mind,
10550
1
        NULL
10551
1
    };
10552
1
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_n6_delay_measurement_information_flags, ENC_BIG_ENDIAN, &flags);
10553
1
    offset += 1;
10554
10555
    /* Average Packet Delay (always present) */
10556
1
    proto_tree_add_item(tree, hf_pfcp_n6_delay_measurement_information_avg_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
10557
1
    offset += 4;
10558
10559
    /* Minimum Packet Delay (if MIND bit set) */
10560
1
    if (flags & 0x1) {
10561
0
        proto_tree_add_item(tree, hf_pfcp_n6_delay_measurement_information_min_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
10562
0
        offset += 4;
10563
0
    }
10564
10565
    /* Maximum Packet Delay (if MAXD bit set) */
10566
1
    if (flags & 0x2) {
10567
0
        proto_tree_add_item(tree, hf_pfcp_n6_delay_measurement_information_max_delay, tvb, offset, 4, ENC_BIG_ENDIAN);
10568
0
        offset += 4;
10569
0
    }
10570
10571
1
    if (offset < length) {
10572
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10573
1
    }
10574
1
}
10575
10576
/*
10577
 * 8.2.248   Measurement Endpoint Address
10578
 */
10579
static void
10580
dissect_pfcp_measurement_endpoint_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_)
10581
0
{
10582
0
    unsigned offset = 0;
10583
0
    uint64_t flags;
10584
10585
0
    static int * const pfcp_measurement_endpoint_address[] = {
10586
0
        &hf_pfcp_spare_b7_b2,
10587
0
        &hf_pfcp_measurement_endpoint_address_b1_v6,
10588
0
        &hf_pfcp_measurement_endpoint_address_b0_v4,
10589
0
        NULL
10590
0
    };
10591
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_measurement_endpoint_address, ENC_BIG_ENDIAN, &flags);
10592
0
    offset += 1;
10593
10594
0
    if (flags & 0x1) {
10595
0
        proto_tree_add_item(tree, hf_pfcp_measurement_endpoint_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10596
0
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
10597
0
        offset += 4;
10598
0
    }
10599
0
    if (flags & 0x2) {
10600
0
        proto_tree_add_item(tree, hf_pfcp_measurement_endpoint_address_ipv6, tvb, offset, 16, ENC_NA);
10601
0
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
10602
0
        offset += 16;
10603
0
    }
10604
10605
0
    if (offset < length) {
10606
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10607
0
    }
10608
0
}
10609
10610
/*
10611
 * 8.2.249   Operator Configurable UPF Capability
10612
 */
10613
static void
10614
dissect_pfcp_operator_configurable_upf_capability(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_)
10615
0
{
10616
0
    proto_tree_add_item(tree, hf_pfcp_operator_configurable_upf_capability, tvb, 0, length, ENC_NA);
10617
0
}
10618
10619
/*
10620
 * 8.2.250   Packet Inspection functionality
10621
 */
10622
static void
10623
dissect_pfcp_packet_inspection_functionality(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_)
10624
0
{
10625
0
    unsigned offset = 0;
10626
10627
0
    static int * const pfcp_packet_inspection_functionality_flags[] = {
10628
0
        &hf_pfcp_spare_b7_b3,
10629
0
        &hf_pfcp_packet_inspection_functionality_b2_dpid,
10630
0
        &hf_pfcp_packet_inspection_functionality_b1_macd,
10631
0
        &hf_pfcp_packet_inspection_functionality_b0_ipbd,
10632
0
        NULL
10633
0
    };
10634
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_packet_inspection_functionality_flags, ENC_BIG_ENDIAN);
10635
0
    offset += 1;
10636
10637
0
    if (offset < length) {
10638
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10639
0
    }
10640
0
}
10641
10642
/*
10643
 * 8.2.251   Header Detection Reference
10644
 */
10645
static void
10646
dissect_pfcp_header_detection_reference(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_)
10647
0
{
10648
0
    proto_tree_add_item(tree, hf_pfcp_header_detection_reference, tvb, 0, length, ENC_NA);
10649
0
}
10650
10651
/*
10652
 * 8.2.252   Header Detection Support Information
10653
 */
10654
static void
10655
dissect_pfcp_header_detection_support_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_)
10656
0
{
10657
0
    proto_tree_add_item(tree, hf_pfcp_header_detection_support_information, tvb, 0, length, ENC_NA);
10658
0
}
10659
10660
/*
10661
 * 8.2.253   Reporting Endpoint ID
10662
 */
10663
static void
10664
dissect_pfcp_reporting_endpoint_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_)
10665
0
{
10666
0
    uint32_t value;
10667
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_reporting_endpoint_id, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
10668
0
    proto_item_append_text(item, ": %u", value);
10669
0
}
10670
10671
/*
10672
 * 8.2.254   Header Handling Control Reference
10673
 */
10674
static void
10675
dissect_pfcp_header_handling_control_reference(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_)
10676
0
{
10677
0
    proto_tree_add_item(tree, hf_pfcp_header_handling_control_reference, tvb, 0, length, ENC_NA);
10678
0
}
10679
10680
/*
10681
 * 8.2.255   Header Handling Action
10682
 */
10683
static const value_string pfcp_header_handling_action_vals[] = {
10684
    { 0, "DETECT" },
10685
    { 1, "REMOVE" },
10686
    { 2, "REPLACE" },
10687
    { 3, "INSERT" },
10688
    { 0, NULL }
10689
};
10690
10691
static void
10692
dissect_pfcp_header_handling_action(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_)
10693
0
{
10694
0
    uint32_t value;
10695
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_header_handling_action, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
10696
0
    proto_item_append_text(item, ": %s", val_to_str_const(value, pfcp_header_handling_action_vals, "Unknown"));
10697
0
}
10698
10699
/*
10700
 * 8.2.256   Header Information
10701
 */
10702
static void
10703
dissect_pfcp_header_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_)
10704
0
{
10705
0
    proto_tree_add_item(tree, hf_pfcp_header_information, tvb, 0, length, ENC_NA);
10706
0
}
10707
10708
/*
10709
 * 8.2.257   Header Value
10710
 */
10711
static void
10712
dissect_pfcp_header_value(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_)
10713
1
{
10714
1
    proto_tree_add_item(tree, hf_pfcp_header_value, tvb, 0, length, ENC_NA);
10715
1
}
10716
10717
/*
10718
 * 8.2.258   Header Handling Condition
10719
 */
10720
static const value_string pfcp_header_handling_condition_vals[] = {
10721
    { 0, "EVERY_MATCH" },
10722
    { 1, "FIRST_MATCH_ONLY" },
10723
    { 0, NULL }
10724
};
10725
10726
static void
10727
dissect_pfcp_header_handling_condition(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_)
10728
0
{
10729
0
    uint32_t value;
10730
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_header_handling_condition, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
10731
0
    proto_item_append_text(item, ": %s", val_to_str_const(value, pfcp_header_handling_condition_vals, "Unknown"));
10732
0
}
10733
10734
/*
10735
 * 8.2.259   Header Handling Control ID
10736
 */
10737
static void
10738
dissect_pfcp_header_handling_control_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_)
10739
0
{
10740
0
    uint32_t value;
10741
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_header_handling_control_id, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
10742
0
    proto_item_append_text(item, ": %u", value);
10743
0
}
10744
10745
/*
10746
 * 8.2.260   Header Handling Control Rule ID
10747
 */
10748
static void
10749
dissect_pfcp_header_handling_control_rule_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_)
10750
0
{
10751
0
    uint32_t value;
10752
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_header_handling_control_rule_id, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
10753
0
    proto_item_append_text(item, ": %u", value);
10754
0
}
10755
10756
/*
10757
 * 8.2.261   On-path N6 Connection Information
10758
 */
10759
static const value_string pfcp_on_path_n6_connection_information_signaling_method_vals[] = {
10760
    { 0, "Unspecified" },
10761
    { 1, "Connect-UDP" },
10762
    { 0, NULL }
10763
};
10764
10765
static void
10766
dissect_pfcp_on_path_n6_connection_information(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_)
10767
0
{
10768
0
    unsigned offset = 0;
10769
0
    uint64_t flags;
10770
10771
0
    static int * const pfcp_on_path_n6_connection_information_flags[] = {
10772
0
        &hf_pfcp_spare_b7_b6,
10773
0
        &hf_pfcp_on_path_n6_connection_information_flags_b5_pn,
10774
0
        &hf_pfcp_on_path_n6_connection_information_flags_b4_v6,
10775
0
        &hf_pfcp_on_path_n6_connection_information_flags_b3_v4,
10776
0
        &hf_pfcp_on_path_n6_connection_information_signaling_method,
10777
0
        NULL
10778
0
    };
10779
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_on_path_n6_connection_information_flags, ENC_BIG_ENDIAN, &flags);
10780
0
    offset += 1;
10781
10782
0
    if (flags & 0x08) {
10783
0
        proto_tree_add_item(tree, hf_pfcp_on_path_n6_connection_information_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10784
0
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
10785
0
        offset += 4;
10786
0
    }
10787
0
    if (flags & 0x10) {
10788
0
        proto_tree_add_item(tree, hf_pfcp_on_path_n6_connection_information_ipv6, tvb, offset, 16, ENC_NA);
10789
0
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
10790
0
        offset += 16;
10791
0
    }
10792
0
    if (flags & 0x20) {
10793
0
        proto_tree_add_item(tree, hf_pfcp_on_path_n6_connection_information_port, tvb, offset, 2, ENC_BIG_ENDIAN);
10794
0
        offset += 2;
10795
0
    }
10796
10797
0
    if (offset < length) {
10798
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10799
0
    }
10800
0
}
10801
10802
/*
10803
 * 8.2.262   Measurement Reporting Type
10804
 */
10805
static void
10806
dissect_pfcp_measurement_reporting_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_)
10807
0
{
10808
0
    unsigned offset = 0;
10809
10810
0
    static int * const pfcp_measurement_reporting_type_flags[] = {
10811
0
        &hf_pfcp_spare_b7_b3,
10812
0
        &hf_pfcp_measurement_reporting_type_b2_ire,
10813
0
        &hf_pfcp_measurement_reporting_type_b1_evt,
10814
0
        &hf_pfcp_measurement_reporting_type_b0_per,
10815
0
        NULL
10816
0
    };
10817
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_measurement_reporting_type_flags, ENC_BIG_ENDIAN);
10818
0
    offset += 1;
10819
10820
0
    if (offset < length) {
10821
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10822
0
    }
10823
0
}
10824
10825
/*
10826
 * 8.2.263   N6 Delay Measurement Failure Information
10827
 */
10828
static const value_string pfcp_n6_delay_measurement_failure_cause_vals[] = {
10829
    { 0, "Unspecified" },
10830
    { 1, "Connection Establishment Failure" },
10831
    { 2, "Connection Lost" },
10832
    { 3, "Authentication Failure" },
10833
    { 0, NULL }
10834
};
10835
10836
static void
10837
dissect_pfcp_n6_delay_measurement_failure_information(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_)
10838
0
{
10839
0
    unsigned offset = 0;
10840
0
    uint32_t value;
10841
10842
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_n6_delay_measurement_failure_cause, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
10843
0
    proto_item_append_text(item, ": %s", val_to_str_const(value, pfcp_n6_delay_measurement_failure_cause_vals, "Unknown"));
10844
0
    offset += 1;
10845
10846
0
    if (offset < length) {
10847
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10848
0
    }
10849
0
}
10850
10851
/*
10852
 * 8.2.264   N6 Delay Measurement Control Information ID
10853
 */
10854
static void
10855
dissect_pfcp_n6_delay_measurement_control_information_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_)
10856
0
{
10857
0
    uint32_t value;
10858
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_n6_delay_measurement_control_information_id, tvb, 0, 2, ENC_BIG_ENDIAN, &value);
10859
0
    proto_item_append_text(item, ": %u", value);
10860
0
}
10861
10862
/*
10863
 * 8.2.265   Measurement Endpoint Port Number
10864
 */
10865
static void
10866
dissect_pfcp_measurement_endpoint_port_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_)
10867
0
{
10868
0
    uint32_t value;
10869
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_measurement_endpoint_port_number, tvb, 0, 2, ENC_BIG_ENDIAN, &value);
10870
0
    proto_item_append_text(item, ": %u", value);
10871
0
}
10872
10873
/*
10874
 * 8.2.266   Header Handling Reporting Indication
10875
 */
10876
static void
10877
dissect_pfcp_header_handling_reporting_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_)
10878
0
{
10879
0
    unsigned offset = 0;
10880
10881
0
    static int * const pfcp_header_handling_reporting_indication_flags[] = {
10882
0
        &hf_pfcp_spare_b7_b1,
10883
0
        &hf_pfcp_header_handling_reporting_indication_b0_otri,
10884
0
        NULL
10885
0
    };
10886
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_header_handling_reporting_indication_flags, ENC_BIG_ENDIAN);
10887
0
    offset += 1;
10888
10889
0
    if (offset < length) {
10890
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10891
0
    }
10892
0
}
10893
10894
/*
10895
 * 8.2.267   SMF Change Reason
10896
 */
10897
static void
10898
dissect_pfcp_smf_change_reason(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_)
10899
0
{
10900
0
    unsigned offset = 0;
10901
10902
0
    static int * const pfcp_smf_change_reason_flags[] = {
10903
0
        &hf_pfcp_spare_b7_b3,
10904
0
        &hf_pfcp_smf_change_reason_b2_mpsai,
10905
0
        &hf_pfcp_smf_change_reason_b1_mpssf,
10906
0
        &hf_pfcp_smf_change_reason_b0_mpsnr,
10907
0
        NULL
10908
0
    };
10909
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_smf_change_reason_flags, ENC_BIG_ENDIAN);
10910
0
    offset += 1;
10911
10912
0
    if (offset < length) {
10913
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10914
0
    }
10915
0
}
10916
10917
/*
10918
 * 8.2.268   PDU Set Importance
10919
 */
10920
static void
10921
dissect_pfcp_pdu_set_importance(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_)
10922
0
{
10923
0
    unsigned offset = 0;
10924
10925
0
    proto_tree_add_item(tree, hf_pfcp_pdu_set_importance_psi0_7, tvb, offset, 1, ENC_BIG_ENDIAN);
10926
0
    offset += 1;
10927
10928
0
    if (offset < length) {
10929
0
        proto_tree_add_item(tree, hf_pfcp_pdu_set_importance_psi8_15, tvb, offset, 1, ENC_BIG_ENDIAN);
10930
0
        offset += 1;
10931
0
    }
10932
10933
0
    if (offset < length) {
10934
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10935
0
    }
10936
0
}
10937
10938
/*
10939
 * 8.2.269   MoQ Control Information
10940
 */
10941
static void
10942
dissect_pfcp_moq_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_)
10943
0
{
10944
0
    unsigned offset = 0;
10945
10946
0
    static int * const pfcp_moq_control_information_flags[] = {
10947
0
        &hf_pfcp_spare_b7_b2,
10948
0
        &hf_pfcp_moq_control_information_b1_mqrai,
10949
0
        &hf_pfcp_moq_control_information_b0_mqrei,
10950
0
        NULL
10951
0
    };
10952
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_moq_control_information_flags, ENC_BIG_ENDIAN);
10953
0
    offset += 1;
10954
10955
0
    if (offset < length) {
10956
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10957
0
    }
10958
0
}
10959
10960
/*
10961
 * 8.2.270   MoQ Relay IP Address
10962
 */
10963
static void
10964
dissect_pfcp_moq_relay_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_)
10965
0
{
10966
0
    unsigned offset = 0;
10967
0
    uint64_t flags;
10968
10969
0
    static int * const pfcp_moq_relay_ip_address_flags[] = {
10970
0
        &hf_pfcp_spare_b7_b2,
10971
0
        &hf_pfcp_moq_relay_ip_address_flags_b1_v4,
10972
0
        &hf_pfcp_moq_relay_ip_address_flags_b0_v6,
10973
0
        NULL
10974
0
    };
10975
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pfcp_moq_relay_ip_address_flags, ENC_BIG_ENDIAN, &flags);
10976
0
    offset += 1;
10977
10978
0
    if (flags & 0x01) {
10979
0
        proto_tree_add_item(tree, hf_pfcp_moq_relay_ip_address_ipv6, tvb, offset, 16, ENC_NA);
10980
0
        proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(pinfo->pool, tvb, offset));
10981
0
        offset += 16;
10982
0
    }
10983
0
    if (flags & 0x02) {
10984
0
        proto_tree_add_item(tree, hf_pfcp_moq_relay_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
10985
0
        proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(pinfo->pool, tvb, offset));
10986
0
        offset += 4;
10987
0
    }
10988
10989
0
    if (offset < length) {
10990
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
10991
0
    }
10992
0
}
10993
10994
/*
10995
 * 8.2.271   Media Related Information Transfer Info
10996
 */
10997
static const value_string pfcp_media_related_information_transfer_info_vals[] = {
10998
    { 0, "Unspecified" },
10999
    { 1, "UDP Option (of outer UDP datagram)" },
11000
    { 0, NULL }
11001
};
11002
11003
static void
11004
dissect_pfcp_media_related_information_transfer_info(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_)
11005
0
{
11006
0
    unsigned offset = 0;
11007
0
    uint32_t value;
11008
11009
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_media_related_information_transfer_info, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
11010
0
    proto_item_append_text(item, ": %s", val_to_str_const(value, pfcp_media_related_information_transfer_info_vals, "Unknown"));
11011
0
    offset += 1;
11012
11013
0
    if (offset < length) {
11014
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11015
0
    }
11016
0
}
11017
11018
/*
11019
 * 8.2.272   Reporting Control Information
11020
 */
11021
static void
11022
dissect_pfcp_reporting_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_)
11023
1
{
11024
1
    unsigned offset = 0;
11025
11026
1
    static int * const pfcp_reporting_control_information_flags[] = {
11027
1
        &hf_pfcp_spare_b7_b1,
11028
1
        &hf_pfcp_reporting_control_information_b0_uelm,
11029
1
        NULL
11030
1
    };
11031
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_control_information_flags, ENC_BIG_ENDIAN);
11032
1
    offset += 1;
11033
11034
1
    if (offset < length) {
11035
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11036
1
    }
11037
1
}
11038
11039
/*
11040
 * 8.2.273   Security Mode (STAMP)
11041
 */
11042
static void
11043
dissect_pfcp_security_mode_stamp(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_)
11044
0
{
11045
0
    unsigned offset = 0;
11046
11047
0
    static int * const pfcp_security_mode_stamp_flags[] = {
11048
0
        &hf_pfcp_spare_b7_b2,
11049
0
        &hf_pfcp_security_mode_stamp_b1_conp,
11050
0
        &hf_pfcp_security_mode_stamp_b0_intp,
11051
0
        NULL
11052
0
    };
11053
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_security_mode_stamp_flags, ENC_BIG_ENDIAN);
11054
0
    offset += 1;
11055
11056
0
    if (offset < length) {
11057
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11058
0
    }
11059
0
}
11060
11061
/*
11062
 * 8.2.274   HMAC Key (STAMP)
11063
 */
11064
static void
11065
dissect_pfcp_hmac_key_stamp(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_)
11066
0
{
11067
0
    proto_tree_add_item(tree, hf_pfcp_hmac_key_stamp, tvb, 0, length, ENC_NA);
11068
0
}
11069
11070
/*
11071
 * 8.2.275   Security Mode (OWAMP or TWAMP)
11072
 */
11073
static void
11074
dissect_pfcp_security_mode_owamp_or_twamp(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_)
11075
0
{
11076
0
    proto_tree_add_item(tree, hf_pfcp_security_mode_owamp_or_twamp, tvb, 0, 4, ENC_BIG_ENDIAN);
11077
0
}
11078
11079
/*
11080
 * 8.2.276   Key ID and Shared Secret (OWAMP or TWAMP)
11081
 */
11082
static void
11083
dissect_pfcp_key_id_and_shared_secret_owamp_or_twamp(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_)
11084
0
{
11085
0
    unsigned offset = 0;
11086
0
    uint32_t key_id_len, secret_len;
11087
11088
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_key_id_and_shared_secret_key_id_length, tvb, offset, 2, ENC_BIG_ENDIAN, &key_id_len);
11089
0
    offset += 2;
11090
11091
0
    proto_tree_add_item(tree, hf_pfcp_key_id_and_shared_secret_key_id, tvb, offset, key_id_len, ENC_UTF_8);
11092
0
    offset += key_id_len;
11093
11094
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_key_id_and_shared_secret_shared_secret_length, tvb, offset, 2, ENC_BIG_ENDIAN, &secret_len);
11095
0
    offset += 2;
11096
11097
0
    proto_tree_add_item(tree, hf_pfcp_key_id_and_shared_secret_shared_secret, tvb, offset, secret_len, ENC_UTF_8);
11098
0
    offset += secret_len;
11099
11100
0
    if (offset < length) {
11101
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11102
0
    }
11103
0
}
11104
11105
/*
11106
 * 8.2.277   Remaining Data Reporting Indication
11107
 */
11108
static const value_string pfcp_remaining_data_reporting_indication_vals[] = {
11109
    { 0, "Discard the collected data" },
11110
    { 1, "Send the collected data to the consumer" },
11111
    { 0, NULL }
11112
};
11113
11114
static void
11115
dissect_pfcp_remaining_data_reporting_indication(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_)
11116
0
{
11117
0
    unsigned offset = 0;
11118
0
    uint32_t value;
11119
11120
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_remaining_data_reporting_indication, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
11121
0
    proto_item_append_text(item, ": %s", val_to_str_const(value, pfcp_remaining_data_reporting_indication_vals, "Unknown"));
11122
0
    offset += 1;
11123
11124
0
    if (offset < length) {
11125
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11126
0
    }
11127
0
}
11128
11129
/*
11130
 * 8.2.278   Expedited Transfer Indication
11131
 */
11132
static void
11133
dissect_pfcp_expedited_transfer_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_)
11134
1
{
11135
1
    unsigned offset = 0;
11136
11137
1
    static int * const pfcp_expedited_transfer_indication_flags[] = {
11138
1
        &hf_pfcp_spare_b7_b2,
11139
1
        &hf_pfcp_expedited_transfer_indication_b1_false,
11140
1
        &hf_pfcp_expedited_transfer_indication_b0_true,
11141
1
        NULL
11142
1
    };
11143
1
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_expedited_transfer_indication_flags, ENC_BIG_ENDIAN);
11144
1
    offset += 1;
11145
11146
1
    if (offset < length) {
11147
1
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11148
1
    }
11149
1
}
11150
11151
/*
11152
 * 8.2.279   Session Reflector Mode (STAMP)
11153
 */
11154
static const true_false_string pfcp_session_reflector_mode_stamp_tfs = {
11155
    "Stateful",
11156
    "Stateless"
11157
};
11158
11159
static void
11160
dissect_pfcp_session_reflector_mode_stamp(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_)
11161
0
{
11162
0
    unsigned offset = 0;
11163
11164
0
    static int * const pfcp_session_reflector_mode_stamp_flags[] = {
11165
0
        &hf_pfcp_spare_b7_b1,
11166
0
        &hf_pfcp_session_reflector_mode_stamp_b0_srm,
11167
0
        NULL
11168
0
    };
11169
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_session_reflector_mode_stamp_flags, ENC_BIG_ENDIAN);
11170
0
    offset += 1;
11171
11172
0
    if (offset < length) {
11173
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11174
0
    }
11175
0
}
11176
11177
/*
11178
 * 8.2.280   Transport Level Marking Indications
11179
 */
11180
static void
11181
dissect_pfcp_transport_level_marking_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_)
11182
0
{
11183
0
    unsigned offset = 0;
11184
11185
0
    static int * const pfcp_transport_level_marking_indications_flags[] = {
11186
0
        &hf_pfcp_spare_b7_b1,
11187
0
        &hf_pfcp_transport_level_marking_indications_b0_tlmip,
11188
0
        NULL
11189
0
    };
11190
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_transport_level_marking_indications_flags, ENC_BIG_ENDIAN);
11191
0
    offset += 1;
11192
11193
0
    if (offset < length) {
11194
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11195
0
    }
11196
0
}
11197
11198
/*
11199
 * 8.2.281   Binding Indication
11200
 */
11201
static void
11202
dissect_pfcp_binding_indication(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_)
11203
0
{
11204
0
    proto_tree_add_item(tree, hf_pfcp_binding_indication, tvb, 0, length, ENC_NA);
11205
0
}
11206
11207
/*
11208
 * 8.2.282   PDU Set Importance for N6-unmarked PDUs
11209
 */
11210
static void
11211
dissect_pfcp_pdu_set_importance_for_n6_unmarked_pdus(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_)
11212
0
{
11213
0
    unsigned offset = 0;
11214
0
    uint32_t value;
11215
11216
0
    static int * const pdu_set_importance_for_n6_unmarked_pdus_flags[] = {
11217
0
        &hf_pfcp_pdu_set_importance_for_n6_unmarked_pdus_spare,
11218
0
        &hf_pfcp_pdu_set_importance_for_n6_unmarked_pdus_psi_value,
11219
0
        NULL
11220
0
    };
11221
11222
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 1, pdu_set_importance_for_n6_unmarked_pdus_flags, ENC_BIG_ENDIAN, NULL);
11223
0
    value = tvb_get_uint8(tvb, offset) & 0x0f;
11224
0
    proto_item_append_text(item, "%u", value);
11225
0
    offset += 1;
11226
11227
0
    if (offset < length) {
11228
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset);
11229
0
    }
11230
0
}
11231
11232
static pfcp_msg_hash_t *
11233
pfcp_match_response(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, unsigned seq_nr, unsigned msgtype, pfcp_conv_info_t *pfcp_info, uint8_t last_cause)
11234
204
{
11235
204
    pfcp_msg_hash_t   pcr, *pcrp = NULL;
11236
204
    uint32_t session;
11237
11238
204
    pcr.seq_nr = seq_nr;
11239
204
    pcr.req_time = pinfo->abs_ts;
11240
11241
204
    if (PFCP_MSG_IS_REQUEST(msgtype)) {
11242
74
        pcr.is_request = true;
11243
74
        pcr.req_frame = pinfo->num;
11244
74
        pcr.rep_frame = 0;
11245
130
    } else if (PFCP_MSG_IS_RESPONSE(msgtype)) {
11246
37
        pcr.is_request = false;
11247
37
        pcr.req_frame = 0;
11248
37
        pcr.rep_frame = pinfo->num;
11249
93
    } else {
11250
93
        pcr.is_request = false;
11251
93
        pcr.req_frame = 0;
11252
93
        pcr.rep_frame = 0;
11253
93
    }
11254
11255
204
    pcrp = (pfcp_msg_hash_t *)wmem_map_lookup(pfcp_info->matched, &pcr);
11256
11257
204
    if (pcrp) {
11258
0
        pcrp->is_request = pcr.is_request;
11259
204
    } else {
11260
        /* no match, let's try to make one */
11261
204
        if (PFCP_MSG_IS_REQUEST(msgtype)) {
11262
74
            pcr.seq_nr = seq_nr;
11263
11264
74
            pcrp = (pfcp_msg_hash_t *)wmem_map_remove(pfcp_info->unmatched, &pcr);
11265
11266
            /* if we can't reuse the old one, grab a new chunk */
11267
74
            if (!pcrp) {
11268
47
                pcrp = wmem_new(wmem_file_scope(), pfcp_msg_hash_t);
11269
47
            }
11270
74
            pcrp->seq_nr = seq_nr;
11271
74
            pcrp->req_frame = pinfo->num;
11272
74
            pcrp->req_time = pinfo->abs_ts;
11273
74
            pcrp->rep_frame = 0;
11274
74
            pcrp->msgtype = msgtype;
11275
74
            pcrp->is_request = true;
11276
74
            wmem_map_insert(pfcp_info->unmatched, pcrp, pcrp);
11277
74
            return NULL;
11278
130
        } else if (PFCP_MSG_IS_RESPONSE(msgtype)) {
11279
37
            pcr.seq_nr = seq_nr;
11280
37
            pcrp = (pfcp_msg_hash_t *)wmem_map_lookup(pfcp_info->unmatched, &pcr);
11281
11282
37
            if (pcrp) {
11283
5
                if (!pcrp->rep_frame) {
11284
5
                    wmem_map_remove(pfcp_info->unmatched, pcrp);
11285
5
                    pcrp->rep_frame = pinfo->num;
11286
5
                    pcrp->is_request = false;
11287
5
                    wmem_map_insert(pfcp_info->matched, pcrp, pcrp);
11288
5
                }
11289
5
            }
11290
37
        }
11291
204
    }
11292
11293
    /* we have found a match */
11294
130
    if (pcrp) {
11295
5
        proto_item *it;
11296
11297
5
        if (pcrp->is_request) {
11298
0
            it = proto_tree_add_uint(tree, hf_pfcp_response_in, tvb, 0, 0, pcrp->rep_frame);
11299
0
            proto_item_set_generated(it);
11300
5
        } else {
11301
5
            nstime_t ns;
11302
11303
5
            it = proto_tree_add_uint(tree, hf_pfcp_response_to, tvb, 0, 0, pcrp->req_frame);
11304
5
            proto_item_set_generated(it);
11305
5
            nstime_delta(&ns, &pinfo->abs_ts, &pcrp->req_time);
11306
5
            it = proto_tree_add_time(tree, hf_pfcp_response_time, tvb, 0, 0, &ns);
11307
5
            proto_item_set_generated(it);
11308
5
            if (g_pfcp_session && !PINFO_FD_VISITED(pinfo)) {
11309
                /* PFCP session */
11310
                /* If it's not already in the list */
11311
0
                session = GPOINTER_TO_UINT(wmem_map_lookup(pfcp_session_table, GUINT_TO_POINTER(pinfo->num)));
11312
0
                if (!session) {
11313
0
                    session = GPOINTER_TO_UINT(wmem_map_lookup(pfcp_session_table, GUINT_TO_POINTER(pcrp->req_frame)));
11314
0
                    if (session) {
11315
0
                        pfcp_add_session(pinfo->num, session);
11316
0
                    }
11317
0
                }
11318
11319
0
                if (!pfcp_is_cause_accepted(last_cause)){
11320
                    /* If the cause is not accepted then we have to remove all the session information about its corresponding request */
11321
0
                    pfcp_remove_frame_info(pcrp->req_frame);
11322
0
                }
11323
0
            }
11324
5
        }
11325
5
    }
11326
130
    return pcrp;
11327
204
}
11328
11329
/* 7.2.3.3  Grouped Information Elements */
11330
11331
static void
11332
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)
11333
81
{
11334
81
    proto_item_append_text(item, "[Grouped IE]");
11335
81
    dissect_pfcp_ies_common(tvb, pinfo, tree, 0, length, message_type, args);
11336
81
}
11337
11338
// wrapper around dissect_pfcp_grouped_ie with the dissector_t prototype
11339
static int
11340
dissect_pfcp_grouped_ie_wrapper(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11341
0
{
11342
0
    pfcp_sub_dis_t *pfcp_sub_dis_info = (pfcp_sub_dis_t *)data;
11343
11344
0
    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);
11345
11346
0
    return tvb_reported_length(tvb);
11347
0
}
11348
11349
static void
11350
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)
11351
15
{
11352
15
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11353
15
    proto_item_append_text(item, ": PDR ID: %u", args->last_rule_ids.pdr);
11354
15
}
11355
11356
static void
11357
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)
11358
2
{
11359
2
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11360
2
    proto_item_append_text(item, ": FAR ID: %s %u",
11361
2
                        tfs_get_string((args->last_rule_ids.far & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11362
2
                        (args->last_rule_ids.far & 0x7fffffff));
11363
2
}
11364
11365
static void
11366
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)
11367
1
{
11368
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11369
1
    proto_item_append_text(item, ": URR ID: %s %u",
11370
1
                        tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11371
1
                        (args->last_rule_ids.urr & 0x7fffffff));
11372
1
}
11373
11374
static void
11375
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)
11376
3
{
11377
3
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11378
3
    proto_item_append_text(item, ": QER ID: %s %u",
11379
3
                        tfs_get_string((args->last_rule_ids.qer & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11380
3
                        (args->last_rule_ids.qer & 0x7fffffff));
11381
3
}
11382
11383
static void
11384
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)
11385
1
{
11386
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11387
1
    proto_item_append_text(item, ": PDR ID: %u", args->last_rule_ids.pdr);
11388
1
}
11389
11390
static void
11391
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)
11392
3
{
11393
3
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11394
3
    proto_item_append_text(item, ": PDR ID: %u", args->last_rule_ids.pdr);
11395
3
}
11396
11397
static void
11398
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)
11399
1
{
11400
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11401
1
    proto_item_append_text(item, ": FAR ID: %s %u",
11402
1
                        tfs_get_string((args->last_rule_ids.far & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11403
1
                        (args->last_rule_ids.far & 0x7fffffff));
11404
1
}
11405
11406
static void
11407
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)
11408
3
{
11409
3
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11410
3
    proto_item_append_text(item, ": BAR ID: %u", args->last_rule_ids.bar);
11411
3
}
11412
11413
static void
11414
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)
11415
3
{
11416
3
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11417
3
    proto_item_append_text(item, ": URR ID: %s %u",
11418
3
                        tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11419
3
                        (args->last_rule_ids.urr & 0x7fffffff));
11420
3
}
11421
11422
static void
11423
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)
11424
1
{
11425
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11426
1
    proto_item_append_text(item, ": QER ID: %s %u",
11427
1
                        tfs_get_string((args->last_rule_ids.qer & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11428
1
                        (args->last_rule_ids.qer & 0x7fffffff));
11429
1
}
11430
11431
static void
11432
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)
11433
3
{
11434
3
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11435
3
    proto_item_append_text(item, ": PDR ID: %u", args->last_rule_ids.pdr);
11436
3
}
11437
11438
static void
11439
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)
11440
1
{
11441
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11442
1
    proto_item_append_text(item, ": FAR ID: %s %u",
11443
1
                        tfs_get_string((args->last_rule_ids.far & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11444
1
                        (args->last_rule_ids.far & 0x7fffffff));
11445
1
}
11446
11447
static void
11448
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)
11449
1
{
11450
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11451
1
    proto_item_append_text(item, ": URR ID: %s %u",
11452
1
                        tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11453
1
                        (args->last_rule_ids.urr & 0x7fffffff));
11454
1
}
11455
11456
static void
11457
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)
11458
1
{
11459
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11460
1
    proto_item_append_text(item, ": QER ID: %s %u",
11461
1
                        tfs_get_string((args->last_rule_ids.qer & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11462
1
                        (args->last_rule_ids.qer & 0x7fffffff));
11463
1
}
11464
11465
static void
11466
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)
11467
1
{
11468
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11469
1
    proto_item_append_text(item, ": URR ID: %s %u",
11470
1
                        tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11471
1
                        (args->last_rule_ids.urr & 0x7fffffff));
11472
1
}
11473
11474
static void
11475
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)
11476
3
{
11477
3
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11478
3
    proto_item_append_text(item, ": URR ID: %s %u",
11479
3
                        tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11480
3
                        (args->last_rule_ids.urr & 0x7fffffff));
11481
3
}
11482
11483
static void
11484
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)
11485
1
{
11486
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11487
1
    proto_item_append_text(item, ": URR ID: %s %u",
11488
1
                        tfs_get_string((args->last_rule_ids.urr & 0x80000000), &pfcp_id_predef_dynamic_tfs),
11489
1
                        (args->last_rule_ids.urr & 0x7fffffff));
11490
1
}
11491
11492
static void
11493
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)
11494
2
{
11495
2
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11496
2
    proto_item_append_text(item, ": BAR ID: %u", args->last_rule_ids.bar);
11497
2
}
11498
11499
static void
11500
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)
11501
1
{
11502
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11503
1
    proto_item_append_text(item, ": BAR ID: %u", args->last_rule_ids.bar);
11504
1
}
11505
11506
static void
11507
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)
11508
1
{
11509
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11510
1
    proto_item_append_text(item, ": BAR ID: %u", args->last_rule_ids.bar);
11511
1
}
11512
11513
static void
11514
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)
11515
1
{
11516
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11517
1
    proto_item_append_text(item, ": MAR ID: %u", args->last_rule_ids.mar);
11518
1
}
11519
11520
static void
11521
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)
11522
0
{
11523
0
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11524
0
    proto_item_append_text(item, ": MAR ID: %u", args->last_rule_ids.mar);
11525
0
}
11526
11527
static void
11528
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)
11529
1
{
11530
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11531
1
    proto_item_append_text(item, ": MAR ID: %u", args->last_rule_ids.mar);
11532
1
}
11533
11534
static void
11535
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)
11536
1
{
11537
1
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11538
1
    proto_item_append_text(item, ": SRR ID: %u", args->last_rule_ids.srr);
11539
1
}
11540
11541
static void
11542
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)
11543
2
{
11544
2
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11545
2
    proto_item_append_text(item, ": SRR ID: %u", args->last_rule_ids.srr);
11546
2
}
11547
11548
static void
11549
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)
11550
2
{
11551
2
    dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, args);
11552
2
    proto_item_append_text(item, ": SRR ID: %u", args->last_rule_ids.srr);
11553
2
}
11554
11555
static void
11556
dissect_pfcp_ie_not_decoded(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, uint16_t length _U_, uint8_t message_type _U_, pfcp_session_args_t *args _U_)
11557
0
{
11558
0
    proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, 0);
11559
0
}
11560
11561
/* Array of functions to dissect IEs
11562
* (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
11563
*/
11564
typedef struct _pfcp_ie {
11565
    void(*decode) (tvbuff_t *, packet_info *, proto_tree *, proto_item *, uint16_t, uint8_t, pfcp_session_args_t *);
11566
} pfcp_ie_t;
11567
11568
static const pfcp_ie_t pfcp_ies[] = {
11569
/*      0 */    { dissect_pfcp_reserved },
11570
/*      1 */    { dissect_pfcp_create_pdr },                                    /* Create PDR                                       Extendable / Table 7.5.2.2-1 */
11571
/*      2 */    { dissect_pfcp_grouped_ie },                                    /* PDI                                              Extendable / Table 7.5.2.2-2 */
11572
/*      3 */    { dissect_pfcp_create_far },                                    /* Create FAR                                       Extendable / Table 7.5.2.3-1 */
11573
/*      4 */    { dissect_pfcp_grouped_ie },                                    /* Forwarding Parameters                            Extendable / Table 7.5.2.3-2 */
11574
/*      5 */    { dissect_pfcp_grouped_ie },                                    /* Duplicating Parameters                           Extendable / Table 7.5.2.3-3 */
11575
/*      6 */    { dissect_pfcp_create_urr },                                    /* Create URR                                       Extendable / Table 7.5.2.4-1 */
11576
/*      7 */    { dissect_pfcp_create_qer },                                    /* Create QER                                       Extendable / Table 7.5.2.5-1 */
11577
/*      8 */    { dissect_pfcp_created_pdr },                                   /* Created PDR                                      Extendable / Table 7.5.3.2-1 */
11578
/*      9 */    { dissect_pfcp_update_pdr },                                    /* Update PDR                                       Extendable / Table 7.5.4.2-1 */
11579
/*     10 */    { dissect_pfcp_update_far },                                    /* Update FAR                                       Extendable / Table 7.5.4.3-1 */
11580
/*     11 */    { dissect_pfcp_grouped_ie },                                    /* Update Forwarding Parameters                     Extendable / Table 7.5.4.3-2 */
11581
/*     12 */    { dissect_pfcp_update_bar },                                    /* Update BAR (PFCP Session Report Response)        Extendable / Table 7.5.9.2-1 */
11582
/*     13 */    { dissect_pfcp_update_urr },                                    /* Update URR                                       Extendable / Table 7.5.4.4 */
11583
/*     14 */    { dissect_pfcp_update_qer },                                    /* Update QER                                       Extendable / Table 7.5.4.5 */
11584
/*     15 */    { dissect_pfcp_remove_pdr },                                    /* Remove PDR                                       Extendable / Table 7.5.4.6 */
11585
/*     16 */    { dissect_pfcp_remove_far },                                    /* Remove FAR                                       Extendable / Table 7.5.4.7 */
11586
/*     17 */    { dissect_pfcp_remove_urr },                                    /* Remove URR                                       Extendable / Table 7.5.4.8 */
11587
/*     18 */    { dissect_pfcp_remove_qer },                                    /* Remove QER                                       Extendable / Table 7.5.4.9 */
11588
/*     19 */    { dissect_pfcp_cause },                                         /* Cause                                            Fixed / Subclause 8.2.1 */
11589
/*     20 */    { dissect_pfcp_source_interface },                              /* Source Interface                                 Extendable / Subclause 8.2.2 */
11590
/*     21 */    { dissect_pfcp_f_teid },                                        /* F-TEID                                           Extendable / Subclause 8.2.3 */
11591
/*     22 */    { dissect_pfcp_network_instance },                              /* Network Instance                                 Variable Length / Subclause 8.2.4 */
11592
/*     23 */    { dissect_pfcp_sdf_filter },                                    /* SDF Filter                                       Extendable / Subclause 8.2.5 */
11593
/*     24 */    { dissect_pfcp_application_id },                                /* Application ID                                   Variable Length / Subclause 8.2.6 */
11594
/*     25 */    { dissect_pfcp_gate_status },                                   /* Gate Status                                     Extendable / Subclause 8.2.7 */
11595
/*     26 */    { dissect_pfcp_mbr },                                           /* MBR                                             Extendable / Subclause 8.2.8 */
11596
/*     27 */    { dissect_pfcp_gbr },                                           /* GBR                                             Extendable / Subclause 8.2.9 */
11597
/*     28 */    { dissect_pfcp_qer_correlation_id },                            /* QER Correlation ID                              Extendable / Subclause 8.2.10 */
11598
/*     29 */    { dissect_pfcp_precedence },                                    /* Precedence                                      Extendable / Subclause 8.2.11 */
11599
/*     30 */    { dissect_pfcp_transport_level_marking },                       /* Transport Level Marking                         Extendable / Subclause 8.2.12 */
11600
/*     31 */    { dissect_pfcp_volume_threshold },                              /* Volume Threshold                                Extendable /Subclause 8.2.13 */
11601
/*     32 */    { dissect_pfcp_time_threshold },                                /* Time Threshold                                  Extendable /Subclause 8.2.14 */
11602
/*     33 */    { dissect_pfcp_monitoring_time },                               /* Monitoring Time                                 Extendable /Subclause 8.2.15 */
11603
/*     34 */    { dissect_pfcp_subseq_volume_threshold },                       /* Subsequent Volume Threshold                     Extendable /Subclause 8.2.16 */
11604
/*     35 */    { dissect_pfcp_subsequent_time_threshold },                     /* Subsequent Time Threshold                       Extendable /Subclause 8.2.17 */
11605
/*     36 */    { dissect_pfcp_inactivity_detection_time },                     /* Inactivity Detection Time                       Extendable /Subclause 8.2.18 */
11606
/*     37 */    { dissect_pfcp_reporting_triggers },                            /* Reporting Triggers                              Extendable /Subclause 8.2.19 */
11607
/*     38 */    { dissect_pfcp_redirect_information },                          /* Redirect Information                            Extendable /Subclause 8.2.20 */
11608
/*     39 */    { dissect_pfcp_report_type },                                   /* Report Type                                     Extendable / Subclause 8.2.21 */
11609
/*     40 */    { dissect_pfcp_offending_ie },                                  /* Offending IE                                    Fixed / Subclause 8.2.22 */
11610
/*     41 */    { dissect_pfcp_forwarding_policy },                             /* Forwarding Policy                               Extendable / Subclause 8.2.23 */
11611
/*     42 */    { dissect_pfcp_destination_interface },                         /* Destination Interface                           Extendable / Subclause 8.2.24 */
11612
/*     43 */    { dissect_pfcp_up_function_features },                          /* UP Function Features                            Extendable / Subclause 8.2.25 */
11613
/*     44 */    { dissect_pfcp_apply_action },                                  /* Apply Action                                    Extendable / Subclause 8.2.26 */
11614
/*     45 */    { dissect_pfcp_dl_data_service_inf },                           /* Downlink Data Service Information               Extendable / Subclause 8.2.27 */
11615
/*     46 */    { dissect_pfcp_dl_data_notification_delay },                    /* Downlink Data Notification Delay                Extendable / Subclause 8.2.28 */
11616
/*     47 */    { dissect_pfcp_dl_buffering_dur },                              /* DL Buffering Duration                           Extendable / Subclause 8.2.29 */
11617
/*     48 */    { dissect_pfcp_dl_buffering_suggested_packet_count },           /* DL Buffering Suggested Packet Count             Variable / Subclause 8.2.30 */
11618
/*     49 */    { dissect_pfcp_pfcpsmreq_flags },                               /* PFCPSMReq-Flags                                 Extendable / Subclause 8.2.31 */
11619
/*     50 */    { dissect_pfcp_pfcpsrrsp_flags },                               /* PFCPSRRsp-Flags                                 Extendable / Subclause 8.2.32 */
11620
/*     51 */    { dissect_pfcp_grouped_ie },                                    /* Load Control Information                        Extendable / Table 7.5.3.3-1 */
11621
/*     52 */    { dissect_pfcp_sequence_number },                               /* Sequence Number                                 Fixed Length / Subclause 8.2.33 */
11622
/*     53 */    { dissect_pfcp_metric },                                        /* Metric                                          Fixed Length / Subclause 8.2.34 */
11623
/*     54 */    { dissect_pfcp_grouped_ie },                                    /* Overload Control Information                    Extendable / Table 7.5.3.4-1 */
11624
/*     55 */    { dissect_pfcp_timer },                                         /* Timer                                           Extendable / Subclause 8.2 35 */
11625
/*     56 */    { dissect_pfcp_pdr_id },                                        /* PDR ID                                          Extendable / Subclause 8.2 36 */
11626
/*     57 */    { dissect_pfcp_f_seid },                                        /* F-SEID                                          Extendable / Subclause 8.2 37 */
11627
/*     58 */    { dissect_pfcp_grouped_ie },                                    /* Application ID's PFDs                           Extendable / Table 7.4.3.1-2 */
11628
/*     59 */    { dissect_pfcp_grouped_ie },                                    /* PFD context                                     Extendable / Table 7.4.3.1-3 */
11629
/*     60 */    { dissect_pfcp_node_id },                                       /* Node ID                                         Extendable / Subclause 8.2.38 */
11630
/*     61 */    { dissect_pfcp_pfd_contents },                                  /* PFD contents                                    Extendable / Subclause 8.2.39 */
11631
/*     62 */    { dissect_pfcp_measurement_method },                            /* Measurement Method                              Extendable / Subclause 8.2.40 */
11632
/*     63 */    { dissect_pfcp_usage_report_trigger },                          /* Usage Report Trigger                            Extendable / Subclause 8.2.41 */
11633
/*     64 */    { dissect_pfcp_measurement_period },                            /* Measurement Period                              Extendable / Subclause 8.2.42 */
11634
/*     65 */    { dissect_pfcp_fq_csid },                                       /* FQ-CSID                                         Extendable / Subclause 8.2.43 */
11635
/*     66 */    { dissect_pfcp_volume_measurement },                            /* Volume Measurement                              Extendable / Subclause 8.2.44 */
11636
/*     67 */    { dissect_pfcp_duration_measurement },                          /* Duration Measurement                            Extendable / Subclause 8.2.45 */
11637
/*     68 */    { dissect_pfcp_grouped_ie },                                    /* Application Detection Information               Extendable / Table 7.5.8.3-2 */
11638
/*     69 */    { dissect_pfcp_time_of_first_packet },                          /* Time of First Packet                            Extendable / Subclause 8.2.46 */
11639
/*     70 */    { dissect_pfcp_time_of_last_packet },                           /* Time of Last Packet                             Extendable / Subclause 8.2.47 */
11640
/*     71 */    { dissect_pfcp_quota_holding_time },                            /* Quota Holding Time                              Extendable / Subclause 8.2.48 */
11641
/*     72 */    { dissect_pfcp_dropped_dl_traffic_threshold },                  /* Dropped DL Traffic Threshold                    Extendable / Subclause 8.2.49 */
11642
/*     73 */    { dissect_pfcp_volume_quota },                                  /* Volume Quota                                    Extendable / Subclause 8.2.50 */
11643
/*     74 */    { dissect_pfcp_time_quota },                                    /* Time Quota                                      Extendable / Subclause 8.2.51 */
11644
/*     75 */    { dissect_pfcp_start_time },                                    /* Start Time                                      Extendable / Subclause 8.2.52 */
11645
/*     76 */    { dissect_pfcp_end_time },                                      /* End Time                                        Extendable / Subclause 8.2.53 */
11646
/*     77 */    { dissect_pfcp_grouped_ie },                                    /* Query URR                                       Extendable / Table 7.5.4.10-1 */
11647
/*     78 */    { dissect_pfcp_usage_report_smr },                              /* Usage Report (Session Modification Response) Extendable / Table 7.5.5.2-1 */
11648
/*     79 */    { dissect_pfcp_usage_report_sdr },                              /* Usage Report (Session Deletion Response)        Extendable / Table 7.5.7.2-1 */
11649
/*     80 */    { dissect_pfcp_usage_report_srr },                              /* Usage Report (Session Report Request)           Extendable / Table 7.5.8.3-1 */
11650
/*     81 */    { dissect_pfcp_urr_id },                                        /* URR ID                                          Extendable / Subclause 8.2.54 */
11651
/*     82 */    { dissect_pfcp_linked_urr_id },                                 /* Linked URR ID                                   Extendable / Subclause 8.2.55 */
11652
/*     83 */    { dissect_pfcp_grouped_ie },                                    /* Downlink Data Report                            Extendable / Table 7.5.8.2-1 */
11653
/*     84 */    { dissect_pfcp_outer_header_creation },                         /* Outer Header Creation                           Extendable / Subclause 8.2.56 */
11654
/*     85 */    { dissect_pfcp_create_bar },                                    /* Create BAR                                      Extendable / Table 7.5.2.6-1 */
11655
/*     86 */    { dissect_pfcp_update_bar_smr },                                /* Update BAR (Session Modification Request)       Extendable / Table 7.5.4.11-1 */
11656
/*     87 */    { dissect_pfcp_remove_bar },                                    /* Remove BAR                                      Extendable / Table 7.5.4.12-1 */
11657
/*     88 */    { dissect_pfcp_bar_id },                                        /* BAR ID                                          Extendable / Subclause 8.2.57 */
11658
/*     89 */    { dissect_pfcp_cp_function_features },                          /* CP Function Features                            Extendable / Subclause 8.2.58 */
11659
/*     90 */    { dissect_pfcp_usage_information },                             /* Usage Information                               Extendable / Subclause 8.2.59 */
11660
/*     91 */    { dissect_pfcp_application_instance_id },                       /* Application Instance ID                         Variable Length / Subclause 8.2.60 */
11661
/*     92 */    { dissect_pfcp_flow_inf },                                      /* Flow Information                                Extendable / Subclause 8.2.61 */
11662
/*     93 */    { dissect_pfcp_ue_ip_address },                                 /* UE IP Address                                   Extendable / Subclause 8.2.62 */
11663
/*     94 */    { dissect_pfcp_packet_rate },                                   /* Packet Rate                                     Extendable / Subclause 8.2.63 */
11664
/*     95 */    { dissect_pfcp_outer_hdr_rem },                                 /* Outer Header Removal                            Extendable / Subclause 8.2.64 */
11665
/*     96 */    { dissect_pfcp_recovery_time_stamp },                           /* Recovery Time Stamp                             Extendable / Subclause 8.2.65 */
11666
/*     97 */    { dissect_pfcp_dl_flow_level_marking },                         /* DL Flow Level Marking                           Extendable / Subclause 8.2.66 */
11667
/*     98 */    { dissect_pfcp_header_enrichment },                             /* Header Enrichment                               Extendable / Subclause 8.2.67 */
11668
/*     99 */    { dissect_pfcp_grouped_ie },                                    /* Error Indication Report                         Extendable / Table 7.5.8.4-1 */
11669
/*    100 */    { dissect_pfcp_measurement_info },                              /* Measurement Information                         Extendable / Subclause 8.2.68 */
11670
/*    101 */    { dissect_pfcp_node_report_type },                              /* Node Report Type                                Extendable / Subclause 8.2.69 */
11671
/*    102 */    { dissect_pfcp_grouped_ie },                                    /* User Plane Path Failure Report                  Extendable / Table 7.4.5.1.2-1 */
11672
/*    103 */    { dissect_pfcp_remote_gtp_u_peer },                             /* Remote GTP-U Peer                               Extendable / Subclause 8.2.70 */
11673
/*    104 */    { dissect_pfcp_ur_seqn },                                       /* UR-SEQN                                         Fixed Length / Subclause 8.2.71 */
11674
/*    105 */    { dissect_pfcp_grouped_ie },                                    /* Update Duplicating Parameters                   Extendable / Table 7.5.4.3-3 */
11675
/*    106 */    { dissect_pfcp_act_predef_rules },                              /* Activate Predefined Rules                       Variable Length / Subclause 8.2.72 */
11676
/*    107 */    { dissect_pfcp_deact_predef_rules },                            /* Deactivate Predefined Rules                     Variable Length / Subclause 8.2.73 */
11677
/*    108 */    { dissect_pfcp_far_id },                                        /* FAR ID                                          Extendable / Subclause 8.2.74 */
11678
/*    109 */    { dissect_pfcp_qer_id },                                        /* QER ID                                          Extendable / Subclause 8.2.75 */
11679
/*    110 */    { dissect_pfcp_oci_flags },                                     /* OCI Flags                                       Extendable / Subclause 8.2.76 */
11680
/*    111 */    { dissect_pfcp_pfcp_assoc_rel_req },                            /* PFCP Association Release Request                Extendable / Subclause 8.2.77 */
11681
/*    112 */    { dissect_pfcp_graceful_release_period },                       /* Graceful Release Period                         Extendable / Subclause 8.2.78 */
11682
/*    113 */    { dissect_pfcp_pdn_type },                                      /* PDN Type                                        Fixed Length / Subclause 8.2.79 */
11683
/*    114 */    { dissect_pfcp_failed_rule_id },                                /* Failed Rule ID                                  Extendable / Subclause 8.2.80 */
11684
/*    115 */    { dissect_pfcp_time_quota_mechanism },                          /* Time Quota Mechanism                            Extendable / Subclause 8.2.81 */
11685
/*    116 */    { dissect_pfcp_user_plane_ip_resource_infomation },             /* User Plane IP Resource Information              Extendable / Subclause 8.2.82 */
11686
/*    117 */    { dissect_pfcp_user_plane_inactivity_timer },                   /* User Plane Inactivity Timer                     Extendable / Subclause 8.2.83 */
11687
/*    118 */    { dissect_pfcp_grouped_ie },                                    /* Aggregated URRs                                 Extendable / Table 7.5.2.4-2 */
11688
/*    119 */    { dissect_pfcp_multiplier },                                    /* Multiplier                                      Fixed Length / Subclause 8.2.84 */
11689
/*    120 */    { dissect_pfcp_aggregated_urr_id_ie },                          /* Aggregated URR ID IE                            Fixed Length / Subclause 8.2.85 */
11690
/*    121 */    { dissect_pfcp_subsequent_volume_quota },                       /* Subsequent Volume Quota                         Extendable / Subclause 8.2.86 */
11691
/*    122 */    { dissect_pfcp_subsequent_time_quota },                         /* Subsequent Time Quota                           Extendable / Subclause 8.2.87 */
11692
/*    123 */    { dissect_pfcp_rqi },                                           /* RQI                                             Extendable / Subclause 8.2.88 */
11693
/*    124 */    { dissect_pfcp_qfi },                                           /* QFI                                             Extendable / Subclause 8.2.89 */
11694
/*    125 */    { dissect_pfcp_query_urr_reference },                           /* Query URR Reference                             Extendable / Subclause 8.2.90 */
11695
/*    126 */    { dissect_pfcp_additional_usage_reports_information },          /* Additional Usage Reports Information            Extendable /  Subclause 8.2.91 */
11696
/*    127 */    { dissect_pfcp_grouped_ie },                                    /* Create Traffic Endpoint                         Extendable / Table 7.5.2.7 */
11697
/*    128 */    { dissect_pfcp_grouped_ie },                                    /* Created Traffic Endpoint                        Extendable / Table 7.5.3.5 */
11698
/*    129 */    { dissect_pfcp_grouped_ie },                                    /* Update Traffic Endpoint                         Extendable / Table 7.5.4.13 */
11699
/*    130 */    { dissect_pfcp_grouped_ie },                                    /* Remove Traffic Endpoint                         Extendable / Table 7.5.4.14 */
11700
/*    131 */    { dissect_pfcp_traffic_endpoint_id },                           /* Traffic Endpoint ID                             Extendable / Subclause 8.2.92 */
11701
/*    132 */    { dissect_pfcp_grouped_ie },                                    /* Ethernet Packet Filter IE                       Extendable / Table 7.5.2.2-3 */
11702
/*    133 */    { dissect_pfcp_mac_address },                                   /* MAC address                                     Extendable / Subclause 8.2.93 */
11703
/*    134 */    { dissect_pfcp_c_tag },                                         /* C-TAG                                           Extendable / Subclause 8.2.94 */
11704
/*    135 */    { dissect_pfcp_s_tag },                                         /* S-TAG                                           Extendable / Subclause 8.2.95 */
11705
/*    136 */    { dissect_pfcp_ethertype },                                     /* Ethertype                                       Extendable / Subclause 8.2.96 */
11706
/*    137 */    { dissect_pfcp_proxying },                                      /* Proxying                                        Extendable / Subclause 8.2.97 */
11707
/*    138 */    { dissect_pfcp_ethertype_filter_id },                           /* Ethernet Filter ID                              Extendable / Subclause 8.2.98 */
11708
/*    139 */    { dissect_pfcp_ethernet_filter_properties },                    /* Ethernet Filter Properties                      Extendable / Subclause 8.2.99  */
11709
/*    140 */    { dissect_pfcp_suggested_buffering_packets_count },             /* Suggested Buffering Packets Count               Extendable / Subclause 8.2.100  */
11710
/*    141 */    { dissect_pfcp_user_id },                                       /* User ID                                         Extendable / Subclause 8.2.101  */
11711
/*    142 */    { dissect_pfcp_ethernet_pdu_session_information },              /* Ethernet PDU Session Information                Extendable / Subclause 8.2.102  */
11712
/*    143 */    { dissect_pfcp_grouped_ie },                                    /* Ethernet Traffic Information                    Extendable / Table 7.5.8.3-3  */
11713
/*    144 */    { dissect_pfcp_mac_addresses_detected },                        /* MAC Addresses Detected                          Extendable / Subclause 8.2.103  */
11714
/*    145 */    { dissect_pfcp_mac_addresses_removed },                         /* MAC Addresses Removed                           Extendable / Subclause 8.2.104  */
11715
/*    146 */    { dissect_pfcp_ethernet_inactivity_timer },                     /* Ethernet Inactivity Timer                       Extendable / Subclause 8.2.105  */
11716
/*    147 */    { dissect_pfcp_grouped_ie },                                    /* Additional Monitoring Time                      Extendable / Table 7.5.2.4-3  */
11717
/*    148 */    { dissect_pfcp_event_quota },                                   /* Event Quota                                     Extendable / Subclause 8.2.112  */
11718
/*    149 */    { dissect_pfcp_event_threshold },                               /* Event Threshold                                 Extendable / Subclause 8.2.113  */
11719
/*    150 */    { dissect_pfcp_subsequent_event_quota },                        /* Subsequent Event Quota                          Extendable / Subclause 8.2.106  */
11720
/*    151 */    { dissect_pfcp_subsequent_event_threshold },                    /* Subsequent Event Threshold                      Extendable / Subclause 8.2.107  */
11721
/*    152 */    { dissect_pfcp_trace_information },                             /* Trace Information                               Extendable / Subclause 8.2.108  */
11722
/*    153 */    { dissect_pfcp_framed_route },                                  /* Framed-Route                                    Variable Length / Subclause 8.2.109  */
11723
/*    154 */    { dissect_pfcp_framed_routing },                                /* Framed-Routing                                  Fixed Length / Subclause 8.2.110  */
11724
/*    155 */    { dissect_pfcp_framed_ipv6_route },                             /* Framed-IPv6-Route                               Variable Length / Subclause 8.2.111  */
11725
/*    156 */    { dissect_pfcp_time_stamp },                                    /* Time Stamp                                      Extendable / Subclause 8.2.114  */
11726
/*    157 */    { dissect_pfcp_averaging_window },                              /* Averaging Window                                Extendable / Subclause 8.2.115  */
11727
/*    158 */    { dissect_pfcp_paging_policy_indicator },                       /* Paging Policy Indicator                         Extendable / Subclause 8.2.116  */
11728
/*    159 */    { dissect_pfcp_apn_dnn },                                       /* APN/DNN                                         Variable Length / Subclause 8.2.117  */
11729
/*    160 */    { dissect_pfcp_tgpp_interface_type },                           /* 3GPP Interface Type                             Extendable / Subclause 8.2.118  */
11730
/*    161 */    { dissect_pfcp_pfcpsrreq_flags },                               /* PFCPSRReq-Flags                                 Extendable / Subclause 8.2.119  */
11731
/*    162 */    { dissect_pfcp_pfcpaureq_flags },                               /* PFCPAUReq-Flags                                 Extendable / Subclause 8.2.120  */
11732
/*    163 */    { dissect_pfcp_activation_time },                               /* Activation Time                                 Extendable / Subclause 8.2.121  */
11733
/*    164 */    { dissect_pfcp_deactivation_time },                             /* Deactivation Time                               Extendable / Subclause 8.2.122  */
11734
/*    165 */    { dissect_pfcp_create_mar },                                    /* Create MAR                                      Extendable / Table 7.5.2.8-1  */
11735
/*    166 */    { dissect_pfcp_grouped_ie },                                    /* Access Forwarding Action Information 1          Extendable / Table 7.5.2.8-2  */
11736
/*    167 */    { dissect_pfcp_grouped_ie },                                    /* Access Forwarding Action Information 2          Extendable / Table 7.5.2.8-3  */
11737
/*    168 */    { dissect_pfcp_remove_mar },                                    /* Remove MAR                                      Extendable / Table 7.5.4.15-1*/
11738
/*    169 */    { dissect_pfcp_update_mar },                                    /* Update MAR                                      Extendable / Table 7.5.4.16-1 */
11739
/*    170 */    { dissect_pfcp_mar_id },                                        /* MAR ID                                          Extendable / Subclause 8.2.123  */
11740
/*    171 */    { dissect_pfcp_steering_functionality },                        /* Steering Functionality                          Extendable / Subclause 8.2.124  */
11741
/*    172 */    { dissect_pfcp_steering_mode },                                 /* Steering Mode                                   Extendable / Subclause 8.2.125  */
11742
/*    173 */    { dissect_pfcp_weight },                                        /* Weight                                          Fixed / Clause 8.2.126  */
11743
/*    174 */    { dissect_pfcp_priority },                                      /* Priority                                        Extendable / Subclause 8.2.127  */
11744
/*    175 */    { dissect_pfcp_grouped_ie },                                    /* Update Access Forwarding Action Information 1   Extendable / Table 7.5.4.16-2  */
11745
/*    176 */    { dissect_pfcp_grouped_ie },                                    /* Update Access Forwarding Action Information 2   Extendable / Table 7.5.4.16-3  */
11746
/*    177 */    { dissect_pfcp_ue_ip_address_pool_identity },                   /* UE IP address Pool Identity                     Variable Length / Clause 8.2.128  */
11747
/*    178 */    { dissect_pfcp_alternative_smf_ip_address },                    /* Alternative SMF IP Address                      Extendable / Clause 8.2.129  */
11748
/*    179 */    { dissect_pfcp_packet_replication_and_detection_carry_on_information }, /* Packet Replication and Detection Carry-On Information     Extendable / Clause 8.2.130  */
11749
/*    180 */    { dissect_pfcp_smf_set_id },                                    /* SMF Set ID                                      Extendable / Clause 8.2.131  */
11750
/*    181 */    { dissect_pfcp_quota_validity_time },                           /* Quota Validity Time                             Extendable / Clause 8.2.132  */
11751
/*    182 */    { dissect_pfcp_number_of_reports },                             /* Number of Reports                               Fixed / Clause 8.2.133  */
11752
/*    183 */    { dissect_pfcp_grouped_ie },                                    /* PFCP Session Retention Information (within PFCP Association Setup Request)  Extendable / Table 7.4.4.1-2  */
11753
/*    184 */    { dissect_pfcp_pfcpasrsp_flags },                               /* PFCPASRsp-Flags                                 Extendable / Clause 8.2.134  */
11754
/*    185 */    { dissect_pfcp_cp_pfcp_entity_ip_address },                     /* CP PFCP Entity IP Address                       Extendable / Clause 8.2.135  */
11755
/*    186 */    { dissect_pfcp_pfcpsereq_flags },                               /* PFCPSEReq-Flags                                 Extendable / Clause 8.2.136  */
11756
/*    187 */    { dissect_pfcp_grouped_ie },                                    /* User Plane Path Recovery Report                 Extendable / Table 7.4.5.1.3-1  */
11757
/*    188 */    { dissect_pfcp_grouped_ie },                                    /* IP Multicast Addressing Info within PFCP Session Establishment Request  Extendable / Clause 7.5.2.2-4  */
11758
/*    189 */    { dissect_pfcp_grouped_ie },                                    /* Join IP Multicast Information IE within Usage Report    Extendable / Table 7.5.8.3-4  */
11759
/*    190 */    { dissect_pfcp_grouped_ie },                                    /* Leave IP Multicast Information IE within Usage Report   Extendable / Table 7.5.8.3-5  */
11760
/*    191 */    { dissect_pfcp_ip_multicast_address },                          /* IP Multicast Address                            Extendable / Clause 8.2.137  */
11761
/*    192 */    { dissect_pfcp_source_ip_address },                             /* Source IP Address                               Extendable / Clause 8.2.138  */
11762
/*    193 */    { dissect_pfcp_packet_rate_status },                            /* Packet Rate Status                              Extendable / Clause 8.2.139  */
11763
/*    194 */    { dissect_pfcp_create_bridge_router_info },                     /* Create Bridge/Router Info                       Extendable / Clause 8.2.140  */
11764
/*    195 */    { dissect_pfcp_grouped_ie },                                    /* Created Bridge/Router Info                      Extendable / Table 7.5.3.6-1  */
11765
/*    196 */    { dissect_pfcp_port_number },                                   /* Port Number                                     Fixed Length / Clause 8.2.141  */
11766
/*    197 */    { dissect_pfcp_nw_tt_port_number },                             /* NW-TT Port Number                               Fixed Length / Clause 8.2.142  */
11767
/*    198 */    { dissect_pfcp_5gs_user_plane_node_id },                        /* 5GS User Plane Node ID                          Extendable / Clause 8.2.143  */
11768
/*    199 */    { dissect_pfcp_grouped_ie },                                    /* TSC Management Information IE within PFCP Session Modification Request  Extendable / Table 7.5.4.18-1  */
11769
/*    200 */    { dissect_pfcp_grouped_ie },                                    /* TSC Management Information IE within PFCP Session Modification Response Extendable / Table 7.5.5.3-1  */
11770
/*    201 */    { dissect_pfcp_grouped_ie },                                    /* TSC Management Information IE within PFCP Session Report Request    Extendable / Table 7.5.8.5-1  */
11771
/*    202 */    { dissect_pfcp_port_management_information_container },         /* Port Management Information Container           Variable Length / Clause 8.2.144  */
11772
/*    203 */    { dissect_pfcp_grouped_ie },                                    /* Clock Drift Control Information                 Extendable / Table 7.4.4.1.2-1  */
11773
/*    204 */    { dissect_pfcp_requested_clock_drift_control_information },     /* Requested Clock Drift Information               Extendable / Clause 8.2.145  */
11774
/*    205 */    { dissect_pfcp_grouped_ie },                                    /* Clock Drift Report                              Extendable / Table 7.4.5.1.4-1  */
11775
/*    206 */    { dissect_pfcp_time_domain_number  },                           /* Time Domain Number                               Extendable / Clause 8.2.146  */
11776
/*    207 */    { dissect_pfcp_time_offset_threshold },                         /* Time Offset Threshold                           Extendable / Clause 8.2.147  */
11777
/*    208 */    { dissect_pfcp_cumulative_rate_ratio_threshold },               /* Cumulative rateRatio Threshold                  Extendable / Clause 8.2.148  */
11778
/*    209 */    { dissect_pfcp_time_offset_measurement },                       /* Time Offset Measurement                         Extendable / Clause 8.2.149  */
11779
/*    210 */    { dissect_pfcp_cumulative_rate_ratio_measurement },             /* Cumulative rateRatio Measurement                Extendable / Clause 8.2.150  */
11780
/*    211 */    { dissect_pfcp_remove_srr },                                    /* Remove SRR                                      Extendable/ Table 7.5.4.19-1  */
11781
/*    212 */    { dissect_pfcp_create_srr },                                    /* Create SRR                                      Extendable/ Table 7.5.2.9-1  */
11782
/*    213 */    { dissect_pfcp_update_srr },                                    /* Update SRR                                      Extendable/ Table 7.5.4.21-1  */
11783
/*    214 */    { dissect_pfcp_grouped_ie },                                    /* Session Report                                  Extendable / Table 7.5.8.7-1  */
11784
/*    215 */    { dissect_pfcp_srr_id },                                        /* SRR ID                                          Extendable / Clause 8.2.151  */
11785
/*    216 */    { dissect_pfcp_grouped_ie },                                    /* Access Availability Control Information         Extendable / Table 7.5.2.9-2  */
11786
/*    217 */    { dissect_pfcp_requested_access_availability_control_information }, /* Requested Access Availability Information       Extendable / Clause 8.2.152  */
11787
/*    218 */    { dissect_pfcp_grouped_ie },                                    /* Access Availability Report                      Extendable / Table 7.5.8.6-2  */
11788
/*    219 */    { dissect_pfcp_access_availability_information },               /* Access Availability Information                 Extendable / Clause 8.2.153  */
11789
/*    220 */    { dissect_pfcp_grouped_ie },                                    /* Provide ATSSS Control Information               Extendable / Table 7.5.2.10-1  */
11790
/*    221 */    { dissect_pfcp_grouped_ie },                                    /* ATSSS Control Parameters                        Extendable / Table 7.5.3.7-1  */
11791
/*    222 */    { dissect_pfcp_mptcp_control_information },                     /* MPTCP Control Information                       Extendable / Clause 8.2.154  */
11792
/*    223 */    { dissect_pfcp_atsss_ll_control_information },                  /* ATSSS-LL Control Information                    Extendable / Clause 8.2.155  */
11793
/*    224 */    { dissect_pfcp_pmf_control_information },                       /* PMF Control Information                         Extendable / Clause 8.2.156  */
11794
/*    225 */    { dissect_pfcp_grouped_ie },                                    /* MPTCP Parameters                                Extendable / Table 7.5.3.7-2  */
11795
/*    226 */    { dissect_pfcp_grouped_ie },                                    /* ATSSS-LL Parameters                             Extendable / Table 7.5.3.7-3  */
11796
/*    227 */    { dissect_pfcp_grouped_ie },                                    /* PMF Parameters                                  Extendable / Table 7.5.3.7-4  */
11797
/*    228 */    { dissect_pfcp_mptcp_address_information },                     /* MPTCP Address Information                       Extendable / Clause 8.2.157  */
11798
/*    229 */    { dissect_pfcp_link_specific_multipath_ip_address },            /* Link-Specific Multipath IP Address              Extendable / Clause 8.2.158  */
11799
/*    230 */    { dissect_pfcp_pmf_address_information },                       /* PMF Address Information                         Extendable / Clause 8.2.159  */
11800
/*    231 */    { dissect_pfcp_atsss_ll_information },                          /* ATSSS-LL Information                            Extendable / Clause 8.2.160  */
11801
/*    232 */    { dissect_pfcp_data_network_access_identifier },                /* Data Network Access Identifier                  Variable Length / Clause 8.2.161  */
11802
/*    233 */    { dissect_pfcp_grouped_ie },                                    /* UE IP address Pool Information                  Extendable / Table 7.4.4.1-3  */
11803
/*    234 */    { dissect_pfcp_average_packet_delay },                          /* Average Packet Delay                            Extendable / Clause 8.2.162  */
11804
/*    235 */    { dissect_pfcp_minimum_packet_delay },                          /* Minimum Packet Delay                            Extendable / Clause 8.2.163  */
11805
/*    236 */    { dissect_pfcp_maximum_packet_delay },                          /* Maximum Packet Delay                            Extendable / Clause 8.2.164  */
11806
/*    237 */    { dissect_pfcp_qos_report_trigger },                            /* QoS Report Trigger                              Extendable / Clause 8.2.165  */
11807
/*    238 */    { dissect_pfcp_grouped_ie },                                    /* GTP-U Path QoS Control Information              Extendable / Table 7.4.4.1.3-1  */
11808
/*    239 */    { dissect_pfcp_grouped_ie },                                    /* GTP-U Path QoS Report (PFCP Node Report Request)    Extendable / Table 7.4.5.1.5-1  */
11809
/*    240 */    { dissect_pfcp_grouped_ie },                                    /* QoS Information in GTP-U Path QoS Report        Extendable / Table 7.4.5.1.6-1  */
11810
/*    241 */    { dissect_pfcp_gtp_u_path_interface_type },                     /* GTP-U Path Interface Type                       Extendable / Clause 8.2.166  */
11811
/*    242 */    { dissect_pfcp_grouped_ie },                                    /* QoS Monitoring per QoS flow Control Information Extendable / Table 7.5.2.9-3  */
11812
/*    243 */    { dissect_pfcp_requested_qos_monitoring },                      /* Requested QoS Monitoring                        Extendable / Clause 8.2.167  */
11813
/*    244 */    { dissect_pfcp_reporting_frequency },                           /* Reporting Frequency                             Extendable / Clause 8.2.168  */
11814
/*    245 */    { dissect_pfcp_packet_delay_thresholds },                       /* Packet Delay Thresholds                         Extendable / Clause 8.2.169  */
11815
/*    246 */    { dissect_pfcp_minimum_wait_time },                             /* Minimum Wait Time                               Extendable / Clause 8.2.170  */
11816
/*    247 */    { dissect_pfcp_grouped_ie },                                    /* QoS Monitoring Report                           Extendable / Table 7.5.8.6-3  */
11817
/*    248 */    { dissect_pfcp_qos_monitoring_measurement },                    /* QoS Monitoring Measurement                      Extendable / Clause 8.2.171  */
11818
/*    249 */    { dissect_pfcp_mt_edt_control_information },                    /* MT-EDT Control Information                      Extendable / Clause 8.2.172  */
11819
/*    250 */    { dissect_pfcp_dl_data_packets_size },                          /* DL Data Packets Size                            Extendable / Clause 8.2.173  */
11820
/*    251 */    { dissect_pfcp_qer_control_indications },                       /* QER Control Indications                         Extendable / Clause 8.2.174  */
11821
/*    252 */    { dissect_pfcp_grouped_ie },                                    /* Packet Rate Status Report IE within PFCP Session Deletion Response     Extendable / Table 7.5.7.1-2  */
11822
/*    253 */    { dissect_pfcp_nf_instance_id },                                /* NF Instance ID                                  Extendable / Clause 8.2.175  */
11823
/*    254 */    { dissect_pfcp_grouped_ie },                                    /* Ethernet Context Information within PFCP Session Modification Request     Extendable / Table 7.5.4.21-1  */
11824
/*    255 */    { dissect_pfcp_grouped_ie },                                    /* Redundant Transmission Detection Parameters               Extendable / Table 7.5.2.2-5  */
11825
/*    256 */    { dissect_pfcp_grouped_ie },                                    /* Updated PDR IE within PFCP Session Modification Response     Extendable / Table 7.5.5.5-1  */
11826
/*    257 */    { dissect_pfcp_s_nssai },                                       /* S-NSSAI                                         Fixed Length / Clause 8.2.176 */
11827
/*    258 */    { dissect_pfcp_ip_version },                                    /* IP version                                      Extendable / Clause 8.2.177 */
11828
/*    259 */    { dissect_pfcp_pfcpasreq_flags },                               /* PFCPASReq-Flags                                 Extendable / Clause 8.2.178 */
11829
/*    260 */    { dissect_pfcp_data_status },                                   /* Data Status                                     Extendable / Clause 8.2.179 */
11830
/*    261 */    { dissect_pfcp_grouped_ie },                                    /* Provide RDS Configuration Information IE within PFCP Session Establishment Request   Extendable / Table 7.5.2.11-1  */
11831
/*    262 */    { dissect_pfcp_rds_configuration_information },                 /* RDS Configuration Information                   Extendable / Clause 8.2.180  */
11832
/*    263 */    { dissect_pfcp_grouped_ie },                                    /* Query Packet Rate Status IE within PFCP Session Modification Request      Extendable / Table 7.5.4.22-1  */
11833
/*    264 */    { dissect_pfcp_grouped_ie },                                    /* Query Packet Rate Status Report IE within PFCP Session Modification Response      Extendable / Table 7.5.5.4-1  */
11834
/*    265 */    { dissect_pfcp_multipath_application_indication },                  /* Multipath Applicable Indication                 Extendable / Clause 8.2.181 */
11835
/*    266 */    { dissect_pfcp_user_plane_node_management_information_container }, /* User Plane Node Management Information Container         Variable Length / Clause 8.2.182 */
11836
/*    267 */    { dissect_pfcp_grouped_ie },                                    /* UE IP Address Usage Information IE within PFCP Association Update Request         Extendable / Table 7.4.4.3.1-1 */
11837
/*    268 */    { dissect_pfcp_number_of_ue_ip_addresses },                     /* Number of UE IP Addresses                       Variable Length / Clause 8.2.183 */
11838
/*    269 */    { dissect_pfcp_validity_timer },                                /* Validity Timer                                  Variable Length / Clause 8.2.183 */
11839
/*    270 */    { dissect_pfcp_grouped_ie },                                    /* Redundant Transmission Forward Parameters       Variable Length / Clause 8.2.184  */
11840
/*    271 */    { dissect_pfcp_grouped_ie },                                    /* Transport Delay Reporting IE in Create PDR IE   Extendable / Table 7.5.2.2-6 */
11841
/*    272 */    { dissect_pfcp_grouped_ie },                                    /* Partial Failure Information within PFCP Session Establishment Response      Extendable / Table 7.5.3.1-2 */
11842
/*    273 */    { dissect_pfcp_grouped_ie },                                    /* Partial Failure Information within PFCP Session Modification Response      Extendable / Table 7.5.5.1-2 */
11843
/*    274 */    { dissect_pfcp_offending_ie_information },                      /* Offending IE Information                        Variable Length / Clause 8.2.185 */
11844
/*    275 */    { dissect_pfcp_rattype },                                       /* RAT Type                                        Variable Length / Clause 8.2.186 */
11845
/*    276 */    { dissect_pfcp_grouped_ie },                                    /* L2TP Tunnel Information                         Extendable / Table 7.5.2.1-2  */
11846
/*    277 */    { dissect_pfcp_grouped_ie },                                    /* L2TP Session Information within PFCP Session Establishment Request     Extendable / Table 7.5.2.1-3  */
11847
/*    278 */    { dissect_pfcp_l2tp_user_authentication },                      /* L2TP User Authentication                        Variable Length / Clause 8.2.187 */
11848
/*    279 */    { dissect_pfcp_grouped_ie },                                    /* L2TP Session Information within PFCP Session Establishment Response     Extendable / Table 7.5.3.1-3  */
11849
/*    280 */    { dissect_pfcp_lns_address },                                   /* LNS Address                                     Variable Length / Clause 8.2.188 */
11850
/*    281 */    { dissect_pfcp_tunnel_preference },                             /* Tunnel Preference                               Fixed / Clause 8.2.189 */
11851
/*    282 */    { dissect_pfcp_calling_number },                                /* Calling Number                                  Variable Length / Clause 8.2.190 */
11852
/*    283 */    { dissect_pfcp_called_number },                                 /* Called Number                                   Variable Length / Clause 8.2.191 */
11853
/*    284 */    { dissect_pfcp_l2tp_session_indications },                      /* L2TP Session Indications                        Extendable / Clause 8.2.192 */
11854
/*    285 */    { dissect_pfcp_dns_sever_address },                             /* DNS Server Address                              Variable Length / Clause 8.2.193 */
11855
/*    286 */    { dissect_pfcp_nbns_sever_address },                            /* NBNS Server Address                             Variable Length / Clause 8.2.194 */
11856
/*    287 */    { dissect_pfcp_maximum_receive_unit },                          /* Maximum Receive Unit                            Fixed / Clause 8.2.195 */
11857
/*    288 */    { dissect_pfcp_thresholds },                                    /* Thresholds                                      Variable Length / Clause 8.2.196 */
11858
/*    289 */    { dissect_pfcp_steering_mode_indications },                     /* Steering Mode Indicator                         Extendable / Clause 8.2.197 */
11859
/*    290 */    { dissect_pfcp_grouped_ie },                                    /* PFCP Session Change Info                        Extendable / Table 7.4.7.1-2  */
11860
/*    291 */    { dissect_pfcp_group_id },                                      /* Group ID                                        Fixed / Clause 8.2.198 */
11861
/*    292 */    { dissect_pfcp_cp_ip_address },                                 /* CP IP Address                                   Variable Length / Clause 8.2.199 */
11862
/*    293 */    { dissect_pfcp_ip_address_and_port_number_replacement },        /* IP Address and Port Number Replacement          Variable Length / Clause 8.2.200 */
11863
/*    294 */    { dissect_pfcp_dns_query_response_filter },                     /* DNS Query/Response Filter                       Variable Length / Clause 8.2.201 */
11864
/*    295 */    { dissect_pfcp_grouped_ie },                                    /* Direct Reporting Information                    Extendable / Table 7.5.2.9-4  */
11865
/*    296 */    { dissect_pfcp_event_notification_uri },                        /* Event Notification URI                          Variable Length / Clause 8.2.202 */
11866
/*    297 */    { dissect_pfcp_notification_correlation_id },                   /* Notification Correlation ID                     Fixed / Clause 8.2.203 */
11867
/*    298 */    { dissect_pfcp_reporting_flags },                               /* Reporting Flags                                 Extendable / Clause 8.2.204 */
11868
/*    299 */    { dissect_pfcp_predefined_rules_name },                         /* Predefined Rules Name                           Variable Length / Clause 8.2.205 */
11869
/*    300 */    { dissect_pfcp_grouped_ie },                                    /* MBS Session N4mb Control Information            Extendable / Table 7.5.2.1-5 */
11870
/*    301 */    { dissect_pfcp_grouped_ie },                                    /* MBS Multicast Parameters                        Extendable / Table 7.5.2.3-5 */
11871
/*    302 */    { dissect_pfcp_grouped_ie },                                    /* Added MBS Unicast Parameters IE in Create FAR    Extendable / Table 7.5.2.3-6 */
11872
/*    303 */    { dissect_pfcp_grouped_ie },                                    /* MBS Session N4mb Information                    Extendable / Table 7.5.3.1-4 */
11873
/*    304 */    { dissect_pfcp_grouped_ie },                                    /* Remove MBS Unicast Parameters IE in Update FAR  Extendable / Table 7.5.4.3-4 */
11874
/*    305 */    { dissect_pfcp_mbs_session_identifier },                        /* MBS Session Identifier                          Variable Length / Clause 8.2.206 */
11875
/*    306 */    { dissect_pfcp_multicast_transport_information },               /* Multicast Transport Information                 Variable Length / Clause 8.2.207 */
11876
/*    307 */    { dissect_pfcp_mbsn4mbreq_flags },                              /* MBSN4mbReq Flags                                Extendable / Clause 8.2.208 */
11877
/*    308 */    { dissect_pfcp_local_ingress_tunnel },                          /* Local Ingress Tunnel                            Extendable / Clause 8.2.209 */
11878
/*    309 */    { dissect_pfcp_mbs_unicast_parameters_id },                     /* MBS Unicast Parameters ID                       Extendable / Clause 8.2.210 */
11879
/*    310 */    { dissect_pfcp_grouped_ie },                                    /* MBS Session N4 Control Information IE within PFCP Session Establishment Request      Extendable / Table 7.5.2.1-6 */
11880
/*    311 */    { dissect_pfcp_grouped_ie },                                    /* MBS Session N4 Control Information IE within PFCP Session Establishment Response      Extendable / Table 7.5.3.1-5 */
11881
/*    312 */    { dissect_pfcp_mbsn4resp_flags },                               /* MBSN4Resp-Flags                                 Extendable / Clause 8.2.211 */
11882
/*    313 */    { dissect_pfcp_tunnel_password },                               /* Tunnel Password                                 Variable Length / Clause 8.2.212 */
11883
/*    314 */    { dissect_pfcp_area_session_id },                               /* Area Session ID                                 Fixed / Clause 8.2.213 */
11884
/*    315 */    { dissect_pfcp_grouped_ie },                                    /* Peer UP Restart Report IE within PFCP Node Report Request      Extendable / Table 7.4.5.1-7 */
11885
/*    316 */    { dissect_pfcp_grouped_ie },                                    /* DSCP to PPI Control Information IE within PFCP Session Establishment Request      Extendable / Table 7.5.2.1-6 */
11886
/*    317 */    { dissect_pfcp_dscp_to_ppi_mapping_information },               /* DSCP to PPI Mapping Information                 Extendable / Clause 8.2.214 */
11887
/*    318 */    { dissect_pfcp_pfcpsdrsp_flags },                               /* PFCPSDRsp-Flags                                 Extendable / Clause 8.2.215 */
11888
/*    319 */    { dissect_pfcp_qer_indications },                               /* QER Indications                                 Extendable / Clause 8.2.216 */
11889
/*    320 */    { dissect_pfcp_vendor_specific_node_report_type },              /* Vendor-Specific Node Report Type                Extendable / Clause 8.2.217 */
11890
/*    321 */    { dissect_pfcp_configured_time_domain },                        /* Configured Time Domain                          Extendable / Clause 8.2.218 */
11891
/*    322 */    { dissect_pfcp_metadata },                                      /* Metadata                                        Variable Length / Clause 8.2.219 */
11892
/*    323 */    { dissect_pfcp_grouped_ie },                                    /* Traffic Parameter Measurement Control Information    Extendable / Table 7.5.2.9-5 */
11893
/*    324 */    { dissect_pfcp_grouped_ie },                                    /* Traffic Parameter Measurement Report             Extendable / Table 7.5.8.6-4 */
11894
/*    325 */    { dissect_pfcp_traffic_parameter_threshold },                   /* Traffic Parameter Threshold                      Extendable / Clause 8.2.220 */
11895
/*    326 */    { dissect_pfcp_dl_periodicity },                                /* DL Periodicity                                   Extendable / Clause 8.2.221 */
11896
/*    327 */    { dissect_pfcp_n6_jitter_measurement },                         /* N6 Jitter Measurement                            Extendable / Clause 8.2.222 */
11897
/*    328 */    { dissect_pfcp_traffic_parameter_measurement_indication },      /* Traffic Parameter Measurement Indication         Extendable / Clause 8.2.223 */
11898
/*    329 */    { dissect_pfcp_ul_periodicity },                                /* UL Periodicity                                   Extendable / Clause 8.2.224 */
11899
/*    330 */    { dissect_pfcp_mpquic_control_information },                    /* MPQUIC Control Information                       Extendable / Clause 8.2.225 */
11900
/*    331 */    { dissect_pfcp_grouped_ie },                                    /* MPQUIC Parameters                                Extendable / Table 7.5.3.7-5 */
11901
/*    332 */    { dissect_pfcp_mpquic_address_information },                    /* MPQUIC Address Information                       Extendable / Clause 8.2.226 */
11902
/*    333 */    { dissect_pfcp_transport_mode },                                /* Transport Mode                                   Extendable / Clause 8.2.227 */
11903
/*    334 */    { dissect_pfcp_protocol_description },                          /* Protocol Description                             Extendable / Table 7.5.2.2-7 */
11904
/*    335 */    { dissect_pfcp_reporting_suggestion_info },                     /* Reporting Suggestion Info                        Extendable / Clause 8.2.229 */
11905
/*    336 */    { dissect_pfcp_tl_container },                                  /* TL-Container                                     Variable Length / Clause 8.2.230 */
11906
/*    337 */    { dissect_pfcp_measurement_indication },                        /* Measurement Indication                           Extendable / Clause 8.2.231 */
11907
/*    338 */    { dissect_pfcp_hplmn_s_nssai },                                 /* HPLMN S-NSSAI                                    Fixed Length / Clause 8.2.232 */
11908
/*    339 */    { dissect_pfcp_media_transport_protocol },                      /* Media Transport Protocol                         Extendable / Clause 8.2.233 */
11909
/*    340 */    { dissect_pfcp_grouped_ie },                                    /* RTP Header Extension Information                 Extendable / Table 7.5.2.2-8 */
11910
/*    341 */    { dissect_pfcp_grouped_ie },                                    /* RTP Payload Information                          Extendable / Table 7.5.2.2-9 */
11911
/*    342 */    { dissect_pfcp_rtp_header_extension_type },                     /* RTP Header Extension Type                        Fixed Length / Clause 8.2.234 */
11912
/*    343 */    { dissect_pfcp_rtp_header_extension_id },                       /* RTP Header Extension ID                          Fixed Length / Clause 8.2.235 */
11913
/*    344 */    { dissect_pfcp_rtp_payload_type },                              /* RTP Payload Type                                 Fixed Length / Clause 8.2.236 */
11914
/*    345 */    { dissect_pfcp_rtp_payload_format },                            /* RTP Payload Format                               Fixed Length / Clause 8.2.237 */
11915
/*    346 */    { dissect_pfcp_extended_dl_buffering_notification_policy },     /* Extended DL Buffering Notification Policy      Extendable / Clause 8.2.238 */
11916
/*    347 */    { dissect_pfcp_mt_sdt_control_information },                    /* MT-SDT Control Information                     Extendable / Clause 8.2.239 */
11917
/*    348 */    { dissect_pfcp_reporting_thresholds },                          /* Reporting Thresholds                             Extendable / Clause 8.2.240 */
11918
/*    349 */    { dissect_pfcp_rtp_header_extension_additional_information },   /* RTP Header Extension Additional Information      Extendable / Clause 8.2.241 */
11919
/*    350 */    { dissect_pfcp_mapped_n6_ip_address },                          /* Mapped N6 IP Address                             Extendable / Clause 8.2.242 */
11920
/*    351 */    { dissect_pfcp_n6_routing_information },                        /* N6 Routing Information                           Extendable / Clause 8.2.243 */
11921
/*    352 */    { dissect_pfcp_uri },                                           /* URI                                              Variable Length / Clause 8.2.244 */
11922
/*    353 */    { dissect_pfcp_ue_level_measurements_configuration },           /* UE Level Measurements Configuration              Extendable / Clause 8.2.245 */
11923
/*    354 */    { dissect_pfcp_n6_delay_measurement_protocols },                /* N6 Delay Measurement Protocols                   Extendable / Clause 8.2.246 */
11924
/*    355 */    { dissect_pfcp_grouped_ie },                                    /* N6 Delay Measurement Control Information         Extendable / Table 7.4.4.1.4-1 */
11925
/*    356 */    { dissect_pfcp_grouped_ie },                                    /* N6 Delay Measurement Report (PFCP Node Report Request)   Extendable / Table 7.4.5.1.8-1 */
11926
/*    357 */    { dissect_pfcp_n6_delay_measurement_information },              /* N6 Delay Measurement Information                 Extendable / Clause 8.2.247 */
11927
/*    358 */    { dissect_pfcp_measurement_endpoint_address },                  /* Measurement Endpoint Address                     Extendable / Clause 8.2.248 */
11928
/*    359 */    { dissect_pfcp_operator_configurable_upf_capability },          /* Operator Configurable UPF Capability             Variable / Clause 8.2.249 */
11929
/*    360 */    { dissect_pfcp_packet_inspection_functionality },               /* Packet Inspection functionality                  Extendable / Clause 8.2.250 */
11930
/*    361 */    { dissect_pfcp_grouped_ie },                                    /* Header Handling Control Rule                     Extendable / Table 7.5.2.3-7 */
11931
/*    362 */    { dissect_pfcp_grouped_ie },                                    /* Header Handling Reporting Control Info           Extendable / Table 7.5.2.3-8 */
11932
/*    363 */    { dissect_pfcp_grouped_ie },                                    /* Header Handling Control information              Extendable / Table  7.5.2.3-9 */
11933
/*    364 */    { dissect_pfcp_header_detection_reference },                    /* Header Detection Reference                       Variable Length / Clause 8.2.251 */
11934
/*    365 */    { dissect_pfcp_header_detection_support_information },           /* Header Detection Support Information             Variable Length / Clause 8.2.252 */
11935
/*    366 */    { dissect_pfcp_reporting_endpoint_id },                         /* Reporting Endpoint ID                            Fixed / Clause 8.2.253 */
11936
/*    367 */    { dissect_pfcp_header_handling_control_reference },             /* Header Handling Control Reference                Variable Length / Clause 8.2.254 */
11937
/*    368 */    { dissect_pfcp_header_handling_action },                        /* Header Handling Action                           Fixed Length / Clause 8.2.255 */
11938
/*    369 */    { dissect_pfcp_header_information },                            /* Header Information                               Variable Length / Clause 8.2.256 */
11939
/*    370 */    { dissect_pfcp_header_value },                                  /* Header Value                                     Variable Length / Clause 8.2.257 */
11940
/*    371 */    { dissect_pfcp_header_handling_condition },                     /* Header Handling Condition                         Fixed / Clause 8.2.258 */
11941
/*    372 */    { dissect_pfcp_header_handling_control_id },                    /* Header Handling Control ID                        Fixed / Clause 8.2.259 */
11942
/*    373 */    { dissect_pfcp_header_handling_control_rule_id },               /* Header Handling Control Rule ID                   Fixed / Clause 8.2.260 */
11943
/*    374 */    { dissect_pfcp_on_path_n6_connection_information },             /* On-path N6 Connection Information                Extendable / Clause 8.2.261 */
11944
/*    375 */    { dissect_pfcp_measurement_reporting_type },                    /* Measurement Reporting Type                        Extendable / Clause 8.2.262 */
11945
/*    376 */    { dissect_pfcp_n6_delay_measurement_failure_information },      /* N6 Delay Measurement Failure Information          Extendable / Clause 8.2.263 */
11946
/*    377 */    { dissect_pfcp_n6_delay_measurement_control_information_id },   /* N6 Delay Measurement Control Information ID      Fixed / Clause 8.2.264 */
11947
/*    378 */    { dissect_pfcp_grouped_ie },                                    /* Protocol Specific Configuration Parameters       Extendable / Table 7.4.4.1.4-2 */
11948
/*    379 */    { dissect_pfcp_measurement_endpoint_port_number },              /* Measurement Endpoint Port Number                 Fixed Length / Clause 8.2.265 */
11949
/*    380 */    { dissect_pfcp_header_handling_reporting_indication },          /* Header Handling Reporting Indication              Extendable / Clause 8.2.266 */
11950
/*    381 */    { dissect_pfcp_ie_not_decoded },                                /* Can be used */
11951
/*    382 */    { dissect_pfcp_smf_change_reason },                             /* SMF Change Reason                                Extendable / Clause 8.2.267 */
11952
/*    383 */    { dissect_pfcp_grouped_ie },                                    /* Extended Transport Level Marking                 Extendable / Table 7.5.2.3-10 */
11953
/*    384 */    { dissect_pfcp_pdu_set_importance },                            /* PDU Set Importance                               Fixed / Clause 8.2.268 */
11954
/*    385 */    { dissect_pfcp_moq_control_information },                       /* MoQ Control Information                          Extendable / Clause 8.2.269 */
11955
/*    386 */    { dissect_pfcp_grouped_ie },                                    /* MoQ Information                                  Extendable / Table 7.3.5.1-6 */
11956
/*    387 */    { dissect_pfcp_moq_relay_ip_address },                          /* MoQ Relay IP Address                             Extendable / Clause 8.2.270 */
11957
/*    388 */    { dissect_pfcp_media_related_information_transfer_info },       /* Media Related Information Transfer Info           Extendable / Clause 8.2.271 */
11958
/*    389 */    { dissect_pfcp_reporting_control_information },                 /* Reporting Control Information                    Extendable / Clause 8.2.272 */
11959
/*    390 */    { dissect_pfcp_security_mode_stamp },                           /* Security Mode (STAMP)                            Fixed / Clause 8.2.273 */
11960
/*    391 */    { dissect_pfcp_hmac_key_stamp },                                /* HMAC Key (STAMP)                                 Variable Length / Clause 8.2.274 */
11961
/*    392 */    { dissect_pfcp_security_mode_owamp_or_twamp },                  /* Security Mode (OWAMP or TWAMP)                   Fixed / Clause 8.2.275 */
11962
/*    393 */    { dissect_pfcp_key_id_and_shared_secret_owamp_or_twamp },       /* Key ID and Shared Secret (OWAMP or TWAMP)        Extendable / Clause 8.2.276 */
11963
/*    394 */    { dissect_pfcp_remaining_data_reporting_indication },           /* Remaining Data Reporting Indication              Extendable / Clause 8.2.277 */
11964
/*    395 */    { dissect_pfcp_expedited_transfer_indication },                 /* Expedited Transfer Indication                    Fixed / Clause 8.2.278 */
11965
/*    396 */    { dissect_pfcp_session_reflector_mode_stamp },                  /* Session Reflector Mode (STAMP)                   Fixed / Clause 8.2.279 */
11966
/*    397 */    { dissect_pfcp_grouped_ie },                                    /* PFD Partial Failure Information                  Extendable / Table 7.4.3.2-2 */
11967
/*    398 */    { dissect_pfcp_transport_level_marking_indications },           /* Transport Level Marking Indications              Fixed / Clause 8.2.280 */
11968
/*    399 */    { dissect_pfcp_grouped_ie },                                    /* Redundant N3/N9 Transmission Information         Extendable / Table 7.5.8.6-5 */
11969
/*    400 */    { dissect_pfcp_grouped_ie },                                    /* Local N3/N9 Tunnel Information                   Extendable / Table 7.5.8.6-6 */
11970
/*    401 */    { dissect_pfcp_grouped_ie },                                    /* Remote N3/N9 Tunnel Information                  Extendable / Table 7.5.8.6-7 */
11971
/*    402 */    { dissect_pfcp_binding_indication },                            /* Binding Indication                               Variable / Clause 8.2.281 */
11972
/*    403 */    { dissect_pfcp_pdu_set_importance_for_n6_unmarked_pdus },       /* PDU Set Importance for N6-unmarked PDUs           Fixed / Clause 8.2.282 */
11973
//404 to 32767 Spare. For future use.
11974
//32768 to 65535 Vendor-specific IEs.
11975
    { NULL },                                                        /* End of List */
11976
};
11977
11978
8.14k
#define NUM_PFCP_IES array_length(pfcp_ies)
11979
/* Set up the array to hold "etts" for each IE*/
11980
static int ett_pfcp_elem[NUM_PFCP_IES-1];
11981
11982
typedef struct pfcp_generic_ie {
11983
    uint16_t    enterprise_id; // 0 for non-vendor-IE
11984
    uint16_t    ie_type;
11985
    const char* name;
11986
    dissector_t dissector;
11987
    int         ett;
11988
} pfcp_generic_ie_t;
11989
11990
static unsigned
11991
dissect_pfcp_unknown_enterprise_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
11992
77
{
11993
77
    proto_tree_add_item(tree, hf_pfcp_enterprise_data, tvb, 0, -1, ENC_NA);
11994
77
    proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_not_decoded_null, tvb, 0);
11995
11996
77
    return tvb_reported_length(tvb);
11997
77
}
11998
11999
// Generic-IE dissector which wraps the actual data-dissector and which overwrites the
12000
// default tree-type and tree-text.
12001
static int
12002
dissect_pfcp_generic_ie_cb(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data, void *cb)
12003
0
{
12004
0
    const pfcp_generic_ie_t* ie_info = cb;
12005
0
    proto_item* item = proto_tree_get_parent(tree);
12006
12007
    // Overwrite the generic-IE subtree with our per-IE subtree
12008
0
    if (ie_info->ett != -1) {
12009
0
        tree = proto_item_add_subtree(item, ie_info->ett);
12010
0
    }
12011
12012
    // Overwrite generic text with per-IE text
12013
0
    if (ie_info->name != NULL) {
12014
0
        if (ie_info->enterprise_id == 0) {
12015
0
            proto_item_set_text(item, "%s", ie_info->name);
12016
0
        } else {
12017
0
            const char* enterprise_name = try_enterprises_lookup(ie_info->enterprise_id);
12018
0
            if (enterprise_name != NULL) {
12019
0
                proto_item_set_text(item, "%s (%s)", ie_info->name, enterprise_name);
12020
0
            } else {
12021
0
                proto_item_set_text(item, "%s (Unknown enterprise %u)", ie_info->name, ie_info->enterprise_id);
12022
0
            }
12023
0
        }
12024
0
    }
12025
12026
    // Run dissector
12027
0
    return ie_info->dissector(tvb, pinfo, tree, data);
12028
0
}
12029
12030
static int
12031
dissect_pfcp_generic_enterprise_ie(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data, void *cb)
12032
78
{
12033
    // Add a subtree, using the generic IE ett.
12034
    // A per-IE subdissector can later overwrite this ett to have an ett per IE.
12035
78
    proto_item* item;
12036
78
    tree = proto_tree_add_subtree(tree, tvb, 0, -1, ett_pfcp_unknown_enterprise_ie, &item, NULL);
12037
12038
    // Add the generic header.
12039
78
    uint32_t ie_type, ie_len, enterprise_id;
12040
78
    proto_tree_add_item_ret_uint(tree, hf_pfcp2_enterprise_ie, tvb, 0, 2, ENC_BIG_ENDIAN, &ie_type);
12041
78
    proto_tree_add_item_ret_uint(tree, hf_pfcp2_ie_len,        tvb, 2, 2, ENC_BIG_ENDIAN, &ie_len);
12042
78
    proto_tree_add_item_ret_uint(tree, hf_pfcp_enterprise_id,  tvb, 4, 2, ENC_BIG_ENDIAN, &enterprise_id);
12043
12044
    // Item text
12045
78
    const char* enterprise_name = try_enterprises_lookup(enterprise_id);
12046
78
    if (enterprise_name != NULL) {
12047
78
        proto_item_set_text(item, "Unknown IE %u (%s)", ie_type, enterprise_name);
12048
78
    } else {
12049
0
        proto_item_set_text(item, "Unknown IE %u (Unknown enterprise %u)", ie_type, enterprise_id);
12050
0
    }
12051
12052
    // Length field is already checked to be big enough by accessing tvb[4:6].
12053
    // This tvb was created with length derived from the length-field.
12054
78
    DISSECTOR_ASSERT(ie_len >= 2);
12055
78
    const unsigned data_len = ie_len - 2;
12056
78
    if (data_len == 0)
12057
1
    {
12058
        /*
12059
        * 5.6.3    Modifying the Rules of an Existing PFCP Session
12060
        *
12061
        * Updating the Rule including the IEs to be removed with a null length,
12062
        * e.g. by including the Update URR IE in the PFCP Session Modification Request
12063
        * with the IE(s) to be removed with a null length.
12064
        */
12065
1
        proto_item_append_text(item, " [IE to be removed]");
12066
77
    } else  {
12067
        // Run the specific IE-dissector only on the "body" of the IE.
12068
77
        tvbuff_t* data_tvb = tvb_new_subset_length(tvb, 6, data_len);
12069
12070
77
        dissector_table_t ie_table = cb;
12071
77
        unsigned offset = 0;
12072
77
        if (ie_table == NULL)
12073
76
        {
12074
            // No IE-table is given so no specific decoding can be performed
12075
76
            offset = dissect_pfcp_unknown_enterprise_ie(data_tvb, pinfo, tree, data);
12076
76
        } else {
12077
            // A dissector-table is provided from which an IE-specific dissector can be looked up
12078
1
            offset = dissector_try_uint_with_data(ie_table, ie_type, data_tvb, pinfo, tree, false, data);
12079
12080
            // Fallback to unknown-ie dissector
12081
1
            if (offset == 0) {
12082
1
                offset = dissect_pfcp_unknown_enterprise_ie(data_tvb, pinfo, tree, data);
12083
1
            }
12084
1
        }
12085
12086
        // If not all data from the IE is decoded (possible when IE has been extended since last update of dissector),
12087
        // add an expert-info warning about the undecoded data.
12088
77
        if ( offset < data_len)
12089
0
        {
12090
0
            proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_data_not_decoded, data_tvb, offset);
12091
0
        }
12092
77
    }
12093
12094
78
    return tvb_reported_length(tvb);
12095
78
}
12096
12097
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)
12098
60
{
12099
    // Register a tree-type for each IE and store it in the ie-struct
12100
60
    int** ie_refs = (int** )wmem_alloc(wmem_epan_scope(), (sizeof(int*) * num_ies));
12101
2.23k
    for (unsigned i = 0; i < num_ies; i++) {
12102
2.17k
        ies[i].ett = -1;
12103
2.17k
        ie_refs[i] = &ies[i].ett;
12104
2.17k
    }
12105
60
    proto_register_subtree_array(ie_refs, num_ies);
12106
12107
    // Create a table that will contain all IEs for this vendor
12108
60
    dissector_table_t table = register_dissector_table(table_name, ui_name, proto_pfcp, FT_UINT16, BASE_DEC);
12109
12110
    // Register a dissector per IE-type
12111
2.23k
    for (unsigned i = 0; i < num_ies; i++) {
12112
2.17k
        dissector_add_uint(table_name, ies[i].ie_type, create_dissector_handle_with_data(dissect_pfcp_generic_ie_cb, -1, &ies[i]));
12113
2.17k
    }
12114
12115
    // Register a dissector using the generic enterprise-dissector
12116
60
    dissector_handle_t handle = register_dissector_with_data(dissector_name, dissect_pfcp_generic_enterprise_ie, proto_pfcp, table);
12117
60
    dissector_add_uint("pfcp.enterprise_ies", enterprise_id, handle);
12118
60
}
12119
12120
static void
12121
dissect_pfcp_ies_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, unsigned offset, uint16_t length, uint8_t message_type, pfcp_session_args_t *args)
12122
534
{
12123
534
    proto_tree *ie_tree;
12124
534
    proto_item *ti;
12125
534
    tvbuff_t   *ie_tvb;
12126
534
    uint16_t type, length_ie;
12127
534
    uint16_t enterprise_id;
12128
534
    pfcp_sub_dis_t *pfcp_sub_dis_inf = wmem_new0(pinfo->pool, pfcp_sub_dis_t);
12129
12130
534
    pfcp_sub_dis_inf->message_type = message_type;
12131
534
    pfcp_sub_dis_inf->args = args;
12132
12133
    /* 8.1.1    Information Element Format */
12134
    /*
12135
    Octets      8   7   6   5   4   3   2   1
12136
    1 to 2      Type = xxx (decimal)
12137
    3 to 4      Length = n
12138
    p to (p+1)  Enterprise ID
12139
    k to (n+4)  IE specific data or content of a grouped IE
12140
12141
    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.
12142
    If Bit 8 of Octet 1 is set, this indicates that the IE is defined by a vendor and the Enterprise ID is present
12143
    identified by the Enterprise ID
12144
    */
12145
12146
    /*Enterprise ID : if the IE type value is within the range of 32768 to 65535,
12147
     * this field shall contain the IANA - assigned "SMI Network Management Private Enterprise Codes"
12148
     * value of the vendor defining the IE.
12149
     */
12150
    /* Length: this field contains the length of the IE excluding the first four octets, which are common for all IEs */
12151
12152
    /* Process the IEs*/
12153
2.05k
    while (offset < length) {
12154
        /* Octet 1 -2 */
12155
1.52k
        type = tvb_get_ntohs(tvb, offset);
12156
1.52k
        length_ie = tvb_get_ntohs(tvb, offset + 2);
12157
12158
1.52k
        if ((type & 0x8000) == 0x8000 ) {
12159
81
            enterprise_id = tvb_get_ntohs(tvb, offset + 4);
12160
81
            ie_tvb = tvb_new_subset_length(tvb, offset, length_ie + 4);
12161
12162
            // Find a per-vendor dissector or fallback to the generic-enterprise-dissector without IE-table.
12163
81
            if (!dissector_try_uint_with_data(pfcp_enterprise_ies_dissector_table, enterprise_id, ie_tvb, pinfo, tree, false, pfcp_sub_dis_inf)) {
12164
77
                dissect_pfcp_generic_enterprise_ie(ie_tvb, pinfo, tree, pfcp_sub_dis_inf, NULL);
12165
77
            }
12166
81
            offset += (4 + length_ie);
12167
1.43k
        } else {
12168
1.43k
            int tmp_ett;
12169
1.43k
            if (type < (NUM_PFCP_IES - 1)) {
12170
1.21k
                tmp_ett = ett_pfcp_elem[type];
12171
1.21k
            } else {
12172
224
                tmp_ett = ett_pfcp_ie;
12173
224
            }
12174
1.43k
            ie_tree = proto_tree_add_subtree_format(tree, tvb, offset, 4 + length_ie, tmp_ett, &ti, "%s : ",
12175
1.43k
                val_to_str_ext_const(type, &pfcp_ie_type_ext, "Unknown"));
12176
12177
1.43k
            proto_tree_add_item(ie_tree, hf_pfcp2_ie, tvb, offset, 2, ENC_BIG_ENDIAN);
12178
1.43k
            offset += 2;
12179
1.43k
            proto_tree_add_item(ie_tree, hf_pfcp2_ie_len, tvb, offset, 2, ENC_BIG_ENDIAN);
12180
1.43k
            offset += 2;
12181
12182
            /*
12183
            * 5.6.3    Modifying the Rules of an Existing PFCP Session
12184
            *
12185
            * Updating the Rule including the IEs to be removed with a null length,
12186
            * e.g. by including the Update URR IE in the PFCP Session Modification Request
12187
            * with the IE(s) to be removed with a null length.
12188
            */
12189
1.43k
            if( length_ie == 0 ) {
12190
806
                proto_item_append_text(ti, "[IE to be removed]");
12191
806
            } else {
12192
633
                if (type < (NUM_PFCP_IES -1)) {
12193
465
                    ie_tvb = tvb_new_subset_length(tvb, offset, length_ie);
12194
465
                    if(pfcp_ies[type].decode){
12195
465
                        (*pfcp_ies[type].decode) (ie_tvb, pinfo, ie_tree, ti, length_ie, message_type, args);
12196
465
                    } else {
12197
                        /* NULL function pointer, we have no decoding function*/
12198
0
                        proto_tree_add_expert(ie_tree, pinfo, &ei_pfcp_ie_not_decoded_null, tvb, offset, length_ie);
12199
0
                    }
12200
465
                } else {
12201
                    /* IE id outside of array, We have no decoding function for it */
12202
168
                    proto_tree_add_expert(ie_tree, pinfo, &ei_pfcp_ie_not_decoded_too_large, tvb, offset, length_ie);
12203
168
                }
12204
633
            }
12205
1.43k
            offset += length_ie;
12206
1.43k
        }
12207
1.52k
    }
12208
534
}
12209
12210
static unsigned
12211
dissect_pfcp_message(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree)
12212
461
{
12213
461
    proto_item          *item;
12214
461
    proto_tree          *sub_tree;
12215
461
    unsigned             offset = 0;
12216
461
    uint64_t             pfcp_flags;
12217
461
    uint8_t              message_type, cause_aux;
12218
461
    uint32_t             length;
12219
461
    uint32_t             length_total;
12220
461
    uint32_t             seq_no = 0;
12221
461
    conversation_t      *conversation;
12222
461
    pfcp_conv_info_t    *pfcp_info;
12223
461
    pfcp_session_args_t *args = NULL;
12224
461
    pfcp_msg_hash_t     *pcrp = NULL;
12225
461
    pfcp_hdr_t          *pfcp_hdr = NULL;
12226
12227
461
    static int * const pfcp_hdr_flags[] = {
12228
461
        &hf_pfcp_version,
12229
461
        &hf_pfcp_spare_b4,
12230
461
        &hf_pfcp_spare_b3,
12231
461
        &hf_pfcp_fo_flag,
12232
461
        &hf_pfcp_mp_flag,
12233
461
        &hf_pfcp_s_flag,
12234
461
        NULL
12235
461
    };
12236
12237
461
    pfcp_hdr = wmem_new0(pinfo->pool, pfcp_hdr_t);
12238
12239
    /* Setting the SEID to invalid to indicate that the SEID is not present for this packet */
12240
461
    pfcp_hdr->seid = PFCP_SEID_INVALID;
12241
12242
461
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "PFCP");
12243
461
    col_clear(pinfo->cinfo, COL_INFO);
12244
12245
461
    message_type = tvb_get_uint8(tvb, 1);
12246
461
    col_set_str(pinfo->cinfo, COL_INFO, val_to_str_ext_const(message_type, &pfcp_message_type_ext, "Unknown"));
12247
12248
461
    args = wmem_new0(pinfo->pool, pfcp_session_args_t);
12249
461
    args->last_cause = 1;                                         /* It stores the last cause decoded. Cause accepted by default */
12250
461
    if (g_pfcp_session) {
12251
        /* We create the auxiliary lists */
12252
0
        args->seid_list = wmem_list_new(pinfo->pool);
12253
0
        args->ip_list = wmem_list_new(pinfo->pool);
12254
0
    }
12255
12256
    /* Do we have a conversation for this connection? */
12257
461
    conversation = find_or_create_conversation(pinfo);
12258
12259
    /* Do we already know this conversation? */
12260
461
    pfcp_info = (pfcp_conv_info_t *)conversation_get_proto_data(conversation, proto_pfcp);
12261
461
    if (pfcp_info == NULL) {
12262
        /* No. Attach that information to the conversation,
12263
        * and add it to the list of information structures.
12264
        */
12265
117
        pfcp_info = wmem_new(wmem_file_scope(), pfcp_conv_info_t);
12266
        /* Request/response matching tables */
12267
117
        pfcp_info->matched = wmem_map_new(wmem_file_scope(), pfcp_sn_hash, pfcp_sn_equal_matched);
12268
117
        pfcp_info->unmatched = wmem_map_new(wmem_file_scope(), pfcp_sn_hash, pfcp_sn_equal_unmatched);
12269
12270
117
        conversation_add_proto_data(conversation, proto_pfcp, pfcp_info);
12271
117
    }
12272
12273
461
    item = proto_tree_add_item(tree, proto_pfcp, tvb, 0, -1, ENC_NA);
12274
461
    sub_tree = proto_item_add_subtree(item, ett_pfcp);
12275
12276
    /* 7.2.2    Message Header */
12277
    /*
12278
        Octet     8     7     6     5     4     3     2     1
12279
          1    | Version        |Spare|Spare|  FO  |  MP  |  S  |
12280
          2    |        Message Type                            |
12281
          3    |        Message Length (1st Octet)              |
12282
          4    |        Message Length (2nd Octet)              |
12283
        m to   | If S flag is set to 1, then SEID shall be      |
12284
        k(m+7) | placed into octets 5-12. Otherwise, SEID field |
12285
               | is not present at all.                         |
12286
        n to   | Sequence Number                                |
12287
        (n+2)  |                                                |
12288
        (n+3)  |         Spare                                  |
12289
12290
    */
12291
    /* Octet 1 */
12292
461
    proto_tree_add_bitmask_with_flags_ret_uint64(sub_tree, tvb, offset, hf_pfcp_hdr_flags,
12293
461
        ett_pfcp_flags, pfcp_hdr_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT, &pfcp_flags);
12294
461
    offset += 1;
12295
12296
    /* Octet 2 Message Type */
12297
461
    pfcp_hdr->message = tvb_get_uint8(tvb, offset);
12298
461
    proto_tree_add_uint(sub_tree, hf_pfcp_msg_type, tvb, offset, 1, pfcp_hdr->message);
12299
461
    offset += 1;
12300
12301
    /* Octet 3 - 4 Message Length */
12302
461
    proto_tree_add_item_ret_uint(sub_tree, hf_pfcp_msg_length, tvb, offset, 2, ENC_BIG_ENDIAN, &length);
12303
461
    offset += 2;
12304
12305
    /* length of the message in octets plus the excluded mandatory part of the PFCP header (the first 4 octets) */
12306
461
    length_total = (length + 4);
12307
12308
461
    if ((pfcp_flags & 0x1) == 1) {
12309
        /* If S flag is set to 1, then SEID shall be placed into octets 5-12*/
12310
        /* Session Endpoint Identifier 8 Octets */
12311
157
        pfcp_hdr->seid = tvb_get_ntohi64(tvb, offset);
12312
157
        proto_tree_add_uint64(sub_tree, hf_pfcp_seid, tvb, offset, 8, pfcp_hdr->seid);
12313
157
        offset += 8;
12314
157
    }
12315
    /* 7.2.2.2    PFCP Header for Node Related Messages */
12316
    /*
12317
        Octet     8     7     6     5     4     3     2     1
12318
          1    | Version        |Spare|Spare| FO=0 | MP=0 | S=0 |
12319
          2    |        Message Type                            |
12320
          3    |        Message Length (1st Octet)              |
12321
          4    |        Message Length (2nd Octet)              |
12322
          5    |        Sequence Number (1st Octet)             |
12323
          6    |        Sequence Number (2nd Octet)             |
12324
          7    |        Sequence Number (3rd Octet)             |
12325
          8    |             Spare                              |
12326
    */
12327
461
    proto_tree_add_item_ret_uint(sub_tree, hf_pfcp_seqno, tvb, offset, 3, ENC_BIG_ENDIAN, &seq_no);
12328
461
    offset += 3;
12329
12330
461
    if ((pfcp_flags & 0x2) == 0x2) {
12331
        /* If the "MP" flag is set to "1", then bits 8 to 5 of octet 16 shall indicate the message priority.*/
12332
159
        proto_tree_add_item(sub_tree, hf_pfcp_mp, tvb, offset, 1, ENC_BIG_ENDIAN);
12333
159
        proto_tree_add_item(sub_tree, hf_pfcp_spare_h0, tvb, offset, 1, ENC_BIG_ENDIAN);
12334
302
    } else {
12335
302
        proto_tree_add_item(sub_tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
12336
302
    }
12337
461
    offset++;
12338
12339
    /* Dissect the IEs in the message */
12340
461
    dissect_pfcp_ies_common(tvb, pinfo, sub_tree, offset, length_total, message_type, args);
12341
12342
    /* Use sequence number to track Req/Resp pairs */
12343
461
    cause_aux = 16; /* Cause accepted by default. Only used when no session tracking enabled */
12344
461
    if (g_pfcp_session && !PINFO_FD_VISITED(pinfo)) {
12345
        /* We insert the lists inside the table*/
12346
0
        pfcp_fill_map(args->seid_list, args->ip_list, pinfo->num);
12347
0
        cause_aux = args->last_cause;
12348
0
    }
12349
461
    pcrp = pfcp_match_response(tvb, pinfo, sub_tree, seq_no, message_type, pfcp_info, cause_aux);
12350
461
    if (pcrp) {
12351
5
        tap_queue_packet(pfcp_tap, pinfo, pcrp);
12352
5
    }
12353
461
    if (g_pfcp_session) {
12354
0
        pfcp_track_session(tvb, pinfo, sub_tree, pfcp_hdr, args);
12355
0
    }
12356
12357
461
    return length_total;
12358
461
}
12359
12360
static int
12361
dissect_pfcp(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void *data _U_)
12362
396
{
12363
396
    unsigned    offset = 0;
12364
396
    unsigned    length = tvb_reported_length(tvb);
12365
12366
    /* 7.2.1A   PFCP messages bundled in one UDP/IP packet */
12367
    /* Each bundled PFCP message shall contain its PFCP message header and may */
12368
    /* contain subsequent information element(s) dependent on the type of message. */
12369
396
    do
12370
462
    {
12371
        /* The first octet of header, Bit 3 represents the "FO" (Follow On) flag. */
12372
        /* If the "FO" flag is set to "1", then another PFCP message follows in the UDP/IP packet */
12373
462
        bool follow_on = (tvb_get_uint8(tvb, offset) & 0x04);
12374
12375
        /* length of the message in octets plus the excluded mandatory part of the PFCP header (the first 4 octets) */
12376
462
        uint16_t message_length = (tvb_get_uint16(tvb, (offset + 2), ENC_BIG_ENDIAN) + 4);
12377
12378
462
        tvbuff_t *message_tvb = tvb_new_subset_length(tvb, offset, message_length);
12379
462
        offset += dissect_pfcp_message(message_tvb, pinfo, tree);
12380
12381
        /* Lets warn of faulty FO flag */
12382
462
        if (follow_on) {
12383
55
            if ((length - offset) == 0) {
12384
1
                proto_tree_add_expert_format_remaining(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, "Follow ON flag set but no data left for following message");
12385
1
            }
12386
407
        } else {
12387
407
            if ((length - offset) > 0) {
12388
148
                proto_tree_add_expert_format_remaining(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, "Data left for following message but Follow ON flag is not set");
12389
148
            }
12390
407
        }
12391
462
    } while (length > offset);
12392
12393
396
    return length;
12394
396
}
12395
12396
/* Enterprise IE decoding Broadband Forum
12397
 *
12398
 * TR-459: Control and User Plane Separation for a disaggregated BNG
12399
 */
12400
12401
/*
12402
 * TR-459:   6.6.1 BBF UP Function Features
12403
 * TR-459.2: 6.5.1 BBF UP Function Features
12404
 * TR-459.3: Table 1: BBF UP Function Features for Multicast
12405
 */
12406
static int
12407
dissect_pfcp_enterprise_bbf_up_function_features(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12408
0
{
12409
0
    unsigned offset = 0;
12410
12411
0
    static int * const pfcp_bbf_up_function_features_o7_flags[] = {
12412
0
        &hf_pfcp_bbf_up_function_features_o7_b7_nat_up,
12413
0
        &hf_pfcp_bbf_up_function_features_o7_b6_nat_cp,
12414
0
        &hf_pfcp_bbf_up_function_features_o7_b5_iptv,
12415
0
        &hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload,
12416
0
        &hf_pfcp_bbf_up_function_features_o7_b3_lns,
12417
0
        &hf_pfcp_bbf_up_function_features_o7_b2_lac,
12418
0
        &hf_pfcp_bbf_up_function_features_o7_b1_ipoe,
12419
0
        &hf_pfcp_bbf_up_function_features_o7_b0_pppoe,
12420
0
        NULL
12421
0
    };
12422
12423
    // Octet 8 Spare Octet
12424
0
    proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
12425
0
    offset += 1;
12426
12427
    // Octet 9 Spare Octet
12428
0
    proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
12429
0
    offset += 1;
12430
12431
    // Octet 10 Spare Octet
12432
0
    proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
12433
0
    offset += 1;
12434
12435
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_up_function_features_o7_flags, ENC_BIG_ENDIAN);
12436
0
    offset += 1;
12437
12438
0
    return offset;
12439
0
}
12440
12441
/*
12442
 * TR-459: 6.6.2 Logical Port
12443
 */
12444
static int
12445
dissect_pfcp_enterprise_bbf_logical_port(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
12446
0
{
12447
    /* Octet 7 to (n+4) logical-port-id */
12448
0
    if (tvb_ascii_isprint_remaining(tvb, 0))
12449
0
    {
12450
0
        const uint8_t* string_value;
12451
0
        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);
12452
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
12453
0
    }
12454
0
    else
12455
0
    {
12456
0
        proto_tree_add_item(tree, hf_pfcp_bbf_logical_port_id, tvb, 0, -1, ENC_NA);
12457
0
    }
12458
12459
0
    return tvb_reported_length(tvb);
12460
0
}
12461
12462
/*
12463
 * TR-459i2: 6.9.3 BBF Outer Header Creation
12464
 */
12465
static int
12466
dissect_pfcp_enterprise_bbf_outer_header_creation(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12467
0
{
12468
0
    unsigned offset = 0;
12469
0
    uint64_t value;
12470
12471
0
    static int * const outer_hdr_desc[] = {
12472
0
        &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b4_ppp,
12473
0
        &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b3_l2tp,
12474
0
        &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b2_traffic_endpoint,
12475
0
        &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b1_crp_nsh,
12476
0
        &hf_pfcp_bbf_outer_hdr_creation_desc_spare,
12477
0
        NULL
12478
0
    };
12479
12480
    /* Octet 7-8  Outer Header Creation Description */
12481
0
    proto_tree_add_bitmask_list_ret_uint64(tree, tvb, offset, 2, outer_hdr_desc, ENC_BIG_ENDIAN, &value);
12482
0
    offset += 2;
12483
12484
0
    if ((value & 0x0400) != 0) {
12485
        /* Octet 9 to 10  Tunnel ID */
12486
0
        proto_tree_add_item(tree, hf_pfcp_bbf_outer_hdr_creation_tunnel_id, tvb, offset, 2, ENC_BIG_ENDIAN);
12487
0
        offset += 2;
12488
12489
        /* Octet 10 to 11  Session ID */
12490
0
        proto_tree_add_item(tree, hf_pfcp_bbf_outer_hdr_creation_session_id, tvb, offset, 2, ENC_BIG_ENDIAN);
12491
0
        offset += 2;
12492
0
    }
12493
12494
0
    return offset;
12495
0
}
12496
12497
/*
12498
 * TR-459: 6.6.4 BBF Outer Header Removal
12499
 */
12500
12501
static const value_string pfcp_bbf_out_hdr_desc_vals[] = {
12502
    { 1, "Ethernet " },
12503
    { 2, "PPPoE/Ethernet " },
12504
    { 3, "PPP/PPPoE/Ethernet " },
12505
    { 4, "L2TP " },
12506
    { 5, "PPP/L2TP " },
12507
    { 0, NULL }
12508
};
12509
12510
static int
12511
dissect_pfcp_enterprise_bbf_outer_header_removal(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12512
0
{
12513
0
    unsigned offset = 0;
12514
0
    uint32_t value;
12515
12516
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_out_hdr_desc, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
12517
0
    offset++;
12518
0
    proto_item_append_text(proto_tree_get_parent(tree), "%s", val_to_str_const(value, pfcp_bbf_out_hdr_desc_vals, "Unknown"));
12519
12520
0
    return offset;
12521
0
}
12522
12523
/*
12524
 * TR-459: 6.6.5 PPPoE Session ID
12525
 */
12526
static int
12527
dissect_pfcp_enterprise_bbf_pppoe_session_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12528
0
{
12529
0
    unsigned offset = 0;
12530
0
    uint32_t value;
12531
12532
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_pppoe_session_id, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
12533
0
    offset += 2;
12534
0
    proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
12535
12536
0
    return offset;
12537
0
}
12538
12539
/*
12540
 * TR-459: 6.6.6 PPP Protocol
12541
 */
12542
static int
12543
dissect_pfcp_enterprise_bbf_ppp_protocol(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12544
0
{
12545
0
    unsigned offset = 0;
12546
0
    uint64_t bbf_ppp_flags_val;
12547
12548
0
    static int * const pfcp_bbf_ppp_protocol_flags[] = {
12549
0
        &hf_pfcp_spare_b7_b3,
12550
0
        &hf_pfcp_bbf_ppp_protocol_b2_control,
12551
0
        &hf_pfcp_bbf_ppp_protocol_b1_data,
12552
0
        &hf_pfcp_bbf_ppp_protocol_b0_specific,
12553
0
        NULL
12554
0
    };
12555
    /* Octet 5   control   data    specific D */
12556
0
    proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_bbf_ppp_protocol_flags,
12557
0
        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);
12558
0
    offset += 1;
12559
12560
0
    if ((bbf_ppp_flags_val & 0x01) == 1)
12561
0
    {
12562
        /* Octet 8 and 9    protocol */
12563
0
        proto_tree_add_item(tree, hf_pfcp_bbf_ppp_protocol, tvb, offset, 2, ENC_BIG_ENDIAN);
12564
0
        offset += 2;
12565
0
    }
12566
12567
0
    return offset;
12568
0
}
12569
12570
/*
12571
 * TR-459: 6.6.7 Verification Timers
12572
 */
12573
static int
12574
dissect_pfcp_enterprise_bbf_verification_timers(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12575
0
{
12576
0
    unsigned offset = 0;
12577
12578
0
    proto_tree_add_item(tree, hf_pfcp_bbf_verification_timer_interval, tvb, offset, 2, ENC_BIG_ENDIAN);
12579
0
    offset += 2;
12580
12581
0
    proto_tree_add_item(tree, hf_pfcp_bbf_verification_timer_count, tvb, offset, 1, ENC_BIG_ENDIAN);
12582
0
    offset += 1;
12583
12584
0
    return offset;
12585
0
}
12586
12587
/*
12588
 * TR-459i3: 6.9.8 LCP Magic Number
12589
 */
12590
static int
12591
dissect_pfcp_enterprise_bbf_ppp_lcp_magic_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12592
0
{
12593
0
    unsigned offset = 0;
12594
12595
0
    proto_tree_add_item(tree, hf_pfcp_bbf_ppp_lcp_magic_number_tx, tvb, offset, 4, ENC_BIG_ENDIAN);
12596
0
    offset += 4;
12597
12598
0
    if (tvb_reported_length_remaining(tvb, offset) >= 4)
12599
0
    {
12600
0
        proto_tree_add_item(tree, hf_pfcp_bbf_ppp_lcp_magic_number_rx, tvb, offset, 4, ENC_BIG_ENDIAN);
12601
0
        offset += 4;
12602
0
    }
12603
12604
0
    return offset;
12605
0
}
12606
12607
/*
12608
 * TR-459: 6.6.9 MTU
12609
 */
12610
static int
12611
dissect_pfcp_enterprise_bbf_mtu(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12612
0
{
12613
0
    unsigned offset = 0;
12614
0
    uint32_t value;
12615
12616
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_mtu, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
12617
0
    offset += 2;
12618
0
    proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
12619
12620
0
    return offset;
12621
0
}
12622
12623
/*
12624
 * TR-459: 6.6.10 L2TP Tunnel Endpoint
12625
 */
12626
static int
12627
dissect_pfcp_enterprise_bbf_l2tp_tunnel_endpoint(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12628
0
{
12629
0
    unsigned offset = 0;
12630
0
    uint64_t bbf_l2tp_endp_flags_val;
12631
12632
0
    static int * const pfcp_bbf_l2tp_endp_flags[] = {
12633
0
        &hf_pfcp_spare_b7_b3,
12634
0
        &hf_pfcp_bbf_l2tp_endp_flags_b2_ch,
12635
0
        &hf_pfcp_bbf_l2tp_endp_flags_b1_v6,
12636
0
        &hf_pfcp_bbf_l2tp_endp_flags_b0_v4,
12637
0
        NULL
12638
0
    };
12639
    /* Octet 5   CH    v4    v6 */
12640
0
    proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_bbf_l2tp_endp_flags,
12641
0
        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);
12642
0
    offset += 1;
12643
12644
0
    proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_tunnel_id, tvb, offset, 2, ENC_BIG_ENDIAN);
12645
0
    offset += 2;
12646
12647
0
    proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
12648
0
    offset += 4;
12649
12650
0
    proto_tree_add_item(tree, hf_pfcp_bbf_l2tp_endp_id_ipv6, tvb, offset, 16, ENC_NA);
12651
0
    offset += 16;
12652
12653
0
    return offset;
12654
0
}
12655
12656
/*
12657
 * TR-459: 6.6.11 L2TP Session ID
12658
 */
12659
static int
12660
dissect_pfcp_enterprise_bbf_l2tp_session_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12661
0
{
12662
0
    unsigned offset = 0;
12663
0
    uint32_t value;
12664
12665
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_l2tp_session_id, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
12666
0
    offset += 2;
12667
0
    proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
12668
12669
0
    return offset;
12670
0
}
12671
12672
12673
/*
12674
 * TR-459: 6.6.12 L2TP Type
12675
 */
12676
12677
static const true_false_string pfcp_bbf_l2tp_type_b0_t_tfs = {
12678
    "control",
12679
    "data"
12680
};
12681
12682
static int
12683
dissect_pfcp_enterprise_bbf_l2tp_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12684
0
{
12685
0
    unsigned offset = 0;
12686
12687
0
    static int * const pfcp_bbf_l2tp_type_flags[] = {
12688
0
        &hf_pfcp_spare_b7_b1,
12689
0
        &hf_pfcp_bbf_l2tp_type_flags_b0_t,
12690
0
        NULL
12691
0
    };
12692
    /* Octet 7   T */
12693
0
    proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_pfcp_bbf_l2tp_type_flags,
12694
0
        ett_pfcp_bbf_l2tp_type_flags, pfcp_bbf_l2tp_type_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS);
12695
0
    offset += 1;
12696
12697
0
    return offset;
12698
0
}
12699
12700
/*
12701
 * TR-459.3: Figure 6: BBF Multicast Flags Information Element
12702
 */
12703
static int
12704
dissect_pfcp_enterprise_bbf_multicast_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12705
0
{
12706
0
    unsigned offset = 0;
12707
12708
0
    static int * const pfcp_bbf_multicast_flags[] = {
12709
0
        &hf_pfcp_spare_b7_b2,
12710
0
        &hf_pfcp_bbf_multicast_flags_o7_b1_routeralertoff,
12711
0
        &hf_pfcp_bbf_multicast_flags_o7_b0_fastleave,
12712
0
        NULL
12713
0
    };
12714
12715
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_multicast_flags, ENC_BIG_ENDIAN);
12716
0
    offset += 1;
12717
12718
0
    return offset;
12719
0
}
12720
12721
/*
12722
 * TR-459.3: Figure 7: BBF Multicast Query Parameters Information Element
12723
 */
12724
static int
12725
dissect_pfcp_enterprise_bbf_multicast_query_parameters(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12726
0
{
12727
0
    unsigned offset = 0;
12728
12729
0
    proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_robustness, tvb, offset, 1, ENC_BIG_ENDIAN);
12730
0
    offset += 1;
12731
12732
0
    proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_query_interval, tvb, offset, 2, ENC_BIG_ENDIAN);
12733
0
    offset += 2;
12734
12735
0
    proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_query_response_interval, tvb, offset, 2, ENC_BIG_ENDIAN);
12736
0
    offset += 2;
12737
12738
0
    proto_tree_add_item(tree, hf_pfcp_bbf_multicast_query_param_group_query_interval, tvb, offset, 2, ENC_BIG_ENDIAN);
12739
0
    offset += 2;
12740
12741
0
    return offset;
12742
0
}
12743
12744
/*
12745
 * TR-459.3: Figure 8: BBF Multicast Group Limit Information Element
12746
 */
12747
static int
12748
dissect_pfcp_enterprise_bbf_multicast_group_limit(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12749
0
{
12750
0
    unsigned offset = 0;
12751
0
    uint32_t value;
12752
12753
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_multicast_group_limit_max_joins, tvb, offset, 2, ENC_BIG_ENDIAN, &value);
12754
0
    offset += 2;
12755
0
    proto_item_append_text(proto_tree_get_parent(tree), "%u", value);
12756
12757
0
    return offset;
12758
0
}
12759
12760
/*
12761
 * TR-459.2: 6.5.5 BBF Apply Action IE
12762
 */
12763
static int
12764
dissect_pfcp_enterprise_bbf_apply_action(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12765
0
{
12766
0
    unsigned offset = 0;
12767
12768
0
    static int * const pfcp_bbf_apply_action_flags[] = {
12769
0
        &hf_pfcp_spare_b7_b1,
12770
0
        &hf_pfcp_bbf_apply_action_flags_b0_nat,
12771
0
        NULL
12772
0
    };
12773
12774
0
    proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_bbf_apply_action_flags, ENC_BIG_ENDIAN);
12775
0
    offset += 1;
12776
12777
0
    return offset;
12778
0
}
12779
12780
/*
12781
 * TR-459.2: 6.5.6 BBF NAT External Port Range
12782
 */
12783
static int
12784
dissect_pfcp_enterprise_bbf_nat_external_port_range(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12785
0
{
12786
0
    int     offset = 0;
12787
0
    uint32_t start, end;
12788
12789
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_nat_external_port_range_start, tvb, offset, 2, ENC_BIG_ENDIAN, &start);
12790
0
    offset += 2;
12791
12792
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_nat_external_port_range_end, tvb, offset, 2, ENC_BIG_ENDIAN, &end);
12793
0
    offset += 2;
12794
12795
0
    proto_item_append_text(proto_tree_get_parent(tree), ": %u:%u", start, end);
12796
12797
0
    return offset;
12798
0
}
12799
12800
/*
12801
 * TR-459.2: 6.5.7 BBF NAT port forward
12802
 */
12803
static int
12804
dissect_pfcp_enterprise_bbf_nat_port_forward(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
12805
0
{
12806
0
    int     offset = 0;
12807
0
    unsigned   length = tvb_reported_length(tvb);
12808
12809
0
    while ((unsigned)offset < length) {
12810
0
        uint32_t in, out, protocol;
12811
0
        proto_item *li;
12812
0
        proto_tree *lt;
12813
12814
0
        li = proto_tree_add_item(tree, hf_pfcp_bbf_nat_port_forward, tvb, offset, 9, ENC_NA);
12815
0
        lt = proto_item_add_subtree(li, ett_pfcp_bbf_nat_port_forward_list);
12816
12817
0
        proto_tree_add_item(lt, hf_pfcp_bbf_nat_port_forward_inside_ip, tvb, offset, 4, ENC_BIG_ENDIAN);
12818
0
        offset += 4;
12819
12820
0
        proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_inside_port, tvb, offset, 2, ENC_BIG_ENDIAN, &in);
12821
0
        offset += 2;
12822
12823
0
        proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_outside_port, tvb, offset, 2, ENC_BIG_ENDIAN, &out);
12824
0
        offset += 2;
12825
12826
0
        proto_tree_add_item_ret_uint(lt, hf_pfcp_bbf_nat_port_forward_protocol, tvb, offset, 1, ENC_BIG_ENDIAN, &protocol);
12827
0
        offset += 1;
12828
12829
0
        proto_item_append_text(li, ": proto=%s: %s:%u -> %u", val_to_str_ext_const(protocol, &ipproto_val_ext, "Unknown"),
12830
0
                               tvb_ip_to_str(pinfo->pool, tvb, 0), in, out);
12831
0
    }
12832
12833
0
    return offset;
12834
0
}
12835
12836
/*
12837
 * TR 459.2: 6.5.3 BBF Report Trigger
12838
 */
12839
static const value_string pfcp_bbf_reporting_trigger_vals[] = {
12840
12841
    { 0, "reserved" },
12842
    { 1, "DBNG-UP allocated NAT blocks" },
12843
    { 0, NULL }
12844
};
12845
12846
static int
12847
dissect_pfcp_enterprise_bbf_reporting_trigger(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12848
0
{
12849
0
    unsigned offset = 0;
12850
0
    uint32_t value;
12851
12852
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_reporting_trigger, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
12853
0
    offset += 1;
12854
0
    proto_item_append_text(proto_tree_get_parent(tree), "%s", val_to_str_const(value, pfcp_bbf_reporting_trigger_vals, "Unknown"));
12855
12856
0
    return offset;
12857
0
}
12858
12859
/*
12860
 * TR 459.2: 6.5.8 BBF Dynamic NAT Block Port Range
12861
 */
12862
static int
12863
dissect_pfcp_enterprise_bbf_dynamic_nat_block_port_range(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12864
0
{
12865
0
    unsigned offset = 0;
12866
0
    uint32_t start, end;
12867
12868
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_dynamic_nat_block_port_range_start_port, tvb, offset, 2, ENC_BIG_ENDIAN, &start);
12869
0
    offset += 2;
12870
12871
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_dynamic_nat_block_port_range_end_port, tvb, offset, 2, ENC_BIG_ENDIAN, &end);
12872
0
    offset += 2;
12873
12874
0
    proto_item_append_text(proto_tree_get_parent(tree), "%u:%u", start, end);
12875
12876
0
    return offset;
12877
0
}
12878
12879
/*
12880
 * TR 459.2: 6.5.9 BBF Event Time Stamp
12881
 */
12882
static int
12883
dissect_pfcp_enterprise_bbf_event_time_stamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_)
12884
0
{
12885
0
    unsigned offset = 0;
12886
0
    char *time_str;
12887
12888
0
    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);
12889
0
    offset += 8;
12890
0
    proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
12891
12892
0
    return offset;
12893
0
}
12894
12895
static const value_string pfcp_bbf_direction_vals[] = {
12896
    {0, "Input/Ingress/Upstream" },
12897
    {1, "Output/Egress/Downstream" },
12898
    {0, NULL}
12899
};
12900
12901
/*
12902
 * TR 459i2: 6.9.13 BBF Direction IE
12903
 */
12904
static int
12905
dissect_pfcp_enterprise_bbf_direction(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12906
0
{
12907
0
    uint32_t value;
12908
12909
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_direction, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
12910
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_direction_vals, "Unknown"));
12911
12912
0
    return 1;
12913
0
}
12914
12915
static const value_string pfcp_bbf_family_vals[] = {
12916
    {0, "IPv4" },
12917
    {1, "IPv6" },
12918
    {2, "IPv46" },
12919
    {3, "L2eth" },
12920
    {0, NULL}
12921
};
12922
12923
/*
12924
 * TR 459i2: 6.9.14 BBF Family IE
12925
 */
12926
static int
12927
dissect_pfcp_enterprise_bbf_family(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12928
0
{
12929
0
    uint32_t value;
12930
12931
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_family, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
12932
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_family_vals, "Unknown"));
12933
12934
0
    return 1;
12935
0
}
12936
12937
/*
12938
 * TR 459i2: 6.9.15 BBF SGRP Identifier
12939
 */
12940
static int
12941
dissect_pfcp_enterprise_bbf_sgrp_identifier(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12942
0
{
12943
0
    uint32_t value;
12944
12945
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_sgrp_identifier, tvb, 0, 4, ENC_BIG_ENDIAN, &value);
12946
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %d", value);
12947
12948
0
    return 4;
12949
0
}
12950
12951
static const value_string pfcp_bbf_sgrp_state_vals[] = {
12952
    {0, "(reserved)" },
12953
    {1, "Active" },
12954
    {2, "Backup" },
12955
    {3, "Track Logical Port" },
12956
    {0, NULL}
12957
};
12958
12959
/*
12960
 * TR 459i2: 6.9.16 BBF SGRP State
12961
 */
12962
static int
12963
dissect_pfcp_enterprise_bbf_sgrp_state(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12964
0
{
12965
0
    uint32_t value;
12966
12967
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_sgrp_state, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
12968
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_sgrp_state_vals, "Unknown"));
12969
12970
0
    return 1;
12971
0
}
12972
12973
/*
12974
 * TR 459i2: 6.9.17 BBF SGRP Flags
12975
 */
12976
static int
12977
dissect_pfcp_enterprise_bbf_sgrp_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
12978
0
{
12979
0
    static int * const flags[] = {
12980
0
        &hf_pfcp_spare_b7_b2,
12981
0
        &hf_pfcp_bbf_sgrp_flags_b1_psa,
12982
0
        &hf_pfcp_bbf_sgrp_flags_b0_ras,
12983
0
        NULL
12984
0
    };
12985
12986
0
    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);
12987
12988
0
    return 1;
12989
0
}
12990
12991
static const value_string pfcp_bbf_operational_condition_vals[] = {
12992
    {0, "Up" },
12993
    {1, "Down" },
12994
    {2, "Not ready" },
12995
    {0, NULL}
12996
};
12997
12998
/*
12999
 * TR 459i2: 6.9.18 BBF Operational Condition IE
13000
 */
13001
static int
13002
dissect_pfcp_enterprise_bbf_operational_condition(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13003
0
{
13004
0
    uint32_t value;
13005
13006
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_operational_condition, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
13007
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_operational_condition_vals, "Unknown"));
13008
13009
0
    return 1;
13010
0
}
13011
13012
/*
13013
 * TR 459i2: 6.9.19 BBF IPv4 Prefix
13014
 */
13015
static int
13016
dissect_pfcp_enterprise_bbf_ipv4_prefix(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13017
0
{
13018
0
    uint32_t prefix_len;
13019
13020
0
    proto_tree_add_item(tree, hf_pfcp_bbf_ipv4_prefix, tvb, 0, 4, ENC_BIG_ENDIAN);
13021
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_ipv4_prefix_length, tvb, 4, 1, ENC_BIG_ENDIAN, &prefix_len);
13022
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s/%d", tvb_ip_to_str(pinfo->pool, tvb, 0), prefix_len);
13023
13024
0
    return 5;
13025
0
}
13026
13027
/*
13028
 * TR 459i2: 6.9.20 BBF IPv6 Prefix
13029
 */
13030
static int
13031
dissect_pfcp_enterprise_bbf_ipv6_prefix(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13032
0
{
13033
0
    uint32_t prefix_len;
13034
13035
0
    proto_tree_add_item(tree, hf_pfcp_bbf_ipv6_prefix, tvb, 0, 16, ENC_NA);
13036
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_ipv6_prefix_length, tvb, 16, 1, ENC_BIG_ENDIAN, &prefix_len);
13037
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s/%d", tvb_ip6_to_str(pinfo->pool, tvb, 0), prefix_len);
13038
13039
0
    return 17;
13040
0
}
13041
13042
static const value_string pfcp_bbf_prefix_tag_usage_vals[] = {
13043
    {0, "(reserved)" },
13044
    {1, "Active SGRP" },
13045
    {2, "Standby SGRP" },
13046
    {0, NULL}
13047
};
13048
13049
/*
13050
 * TR 459i2: 6.9.21 BBF Prefix Tag
13051
 */
13052
static int
13053
dissect_pfcp_enterprise_bbf_prefix_tag(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13054
0
{
13055
0
    uint32_t value;
13056
0
    unsigned offset = 0;
13057
13058
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_prefix_tag_usage, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
13059
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_prefix_tag_usage_vals, "Unknown"));
13060
0
    offset += 1;
13061
13062
0
    if (tvb_reported_length(tvb) > 1)
13063
0
    {
13064
0
        uint32_t tag;
13065
13066
0
        proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_prefix_tag, tvb, offset, 4, ENC_BIG_ENDIAN, &tag);
13067
0
        proto_item_append_text(proto_tree_get_parent(tree), " : %d", tag);
13068
0
        offset += 4;
13069
0
    }
13070
13071
0
    return offset;
13072
0
}
13073
13074
static const value_string pfcp_bbf_error_code_vals[] = {
13075
    {0x0000, "Reserved"},
13076
    {0x0001, "SGRP programming error because of resource exhaustion"},
13077
    {0x0002, "SGRP programming error because of configuration mismatch or incomplete"},
13078
    {0x0003, "SGRP programming error related to vMAC"},
13079
    {0x0004, "SGRP Partial state is not supported on DBNG-UP"},
13080
    {0x0005, "SGRP Track logical port is not supported by DBNG-UP"},
13081
    {0x0006, "ACL name not found"},
13082
    {0x0007, "Prefix programming error because of resource exhaustion"},
13083
    {0x0008, "Prefix programming error because of configuration mismatch or incomplete"},
13084
    {0x0009, "Prefix's Network Instance not found"},
13085
    {0x000a, "Prefix Active Tag matching not found"},
13086
    {0x000b, "Prefix Backup Tag matching not found"},
13087
    {0x000c, "Prefix's SGRP ID not found"},
13088
    {0x000d, "Prefix not found (on prefix modify or prefix delete)"},
13089
    {0x000e, "Prefix in use (when SGRP delete is performed before prefix delete)"},
13090
    {0xffff, "Other error"},
13091
    {0, NULL}
13092
};
13093
13094
/*
13095
 * TR 459i2: 6.9.22 BBF Error Code
13096
 */
13097
static int
13098
dissect_pfcp_enterprise_bbf_error_code(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13099
0
{
13100
0
    uint32_t value;
13101
13102
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_error_code, tvb, 0, 2, ENC_BIG_ENDIAN, &value);
13103
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_error_code_vals, "Unknown"));
13104
13105
0
    return 2;
13106
0
}
13107
13108
/*
13109
 * TR 459i2: 6.9.23 BBF Error Message
13110
 */
13111
static int
13112
dissect_pfcp_enterprise_bbf_error_message(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13113
0
{
13114
0
    proto_tree_add_item(tree, hf_pfcp_bbf_error_message, tvb, 0, tvb_reported_length(tvb), ENC_ASCII);
13115
13116
0
    return tvb_reported_length(tvb);
13117
0
}
13118
13119
/*
13120
 * TR 459i2: 6.9.24 BBF Maximum ACL Chain Length
13121
 */
13122
static int
13123
dissect_pfcp_enterprise_bbf_maximum_acl_chain_length(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13124
0
{
13125
0
    uint32_t value;
13126
13127
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_maximum_acl_chain_length, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
13128
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %d", value);
13129
13130
0
    return 1;
13131
0
}
13132
13133
/*
13134
 * TR 459i2: 6.9.25 BBF Forwarding Capability
13135
 */
13136
static int
13137
dissect_pfcp_enterprise_bbf_forwarding_capability(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13138
0
{
13139
0
    uint32_t value;
13140
13141
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_forwarding_capability, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
13142
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %d%%", value);
13143
13144
0
    return 1;
13145
0
}
13146
13147
static const value_string pfcp_bbf_connectivity_status_vals[] = {
13148
    {0, "(reserved)" },
13149
    {1, "Connected" },
13150
    {2, "Isolated" },
13151
    {0, NULL}
13152
};
13153
13154
/*
13155
 * TR 459i2: 6.9.26 BBF Connectivity Status
13156
 */
13157
static int
13158
dissect_pfcp_enterprise_bbf_connectivity_status(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13159
0
{
13160
0
    uint32_t value;
13161
13162
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_bbf_connectivity_status, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
13163
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(value, pfcp_bbf_connectivity_status_vals, "Unknown"));
13164
13165
0
    return 1;
13166
0
}
13167
13168
/*
13169
 * TR 459i2: 6.9.27 Vendor-Specific Node Report Type
13170
 */
13171
static int
13172
dissect_pfcp_enterprise_bbf_vendor_specific_node_report_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13173
0
{
13174
0
    static int * const flags[] = {
13175
0
        &hf_pfcp_spare_b7_b3,
13176
0
        &hf_pfcp_bbf_vendor_specific_node_report_type_b2_nir,
13177
0
        &hf_pfcp_bbf_vendor_specific_node_report_type_b1_sgr,
13178
0
        &hf_pfcp_bbf_vendor_specific_node_report_type_b0_lpr,
13179
0
        NULL
13180
0
    };
13181
13182
0
    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);
13183
13184
0
    return 1;
13185
0
}
13186
13187
/*
13188
 * TR 459i2: 6.9.28 BBF C-Tag Range
13189
 */
13190
static int
13191
dissect_pfcp_enterprise_bbf_ctag_range(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13192
0
{
13193
0
    static const crumb_spec_t start_crumbs[] = {
13194
0
        {  0, 8 },
13195
0
        { 12, 4 },
13196
0
        {  0, 0 },
13197
0
    };
13198
0
    static const crumb_spec_t end_crumbs[] = {
13199
0
        { 0, 4 },
13200
0
        { 8, 8 },
13201
0
        { 0, 0 },
13202
0
    };
13203
13204
0
    uint64_t start, end;
13205
13206
0
    proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_bbf_ctag_range_start, tvb, 0, start_crumbs, &start);
13207
0
    proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_bbf_ctag_range_end, tvb, 8, end_crumbs, &end);
13208
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %" PRIu64 "-%" PRIu64, start, end);
13209
13210
0
    return 3;
13211
0
}
13212
13213
/*
13214
 * TR 459i2: 6.9.29 BBF S-Tag Range
13215
 */
13216
static int
13217
dissect_pfcp_enterprise_bbf_stag_range(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void* data _U_)
13218
0
{
13219
0
    static const crumb_spec_t start_crumbs[] = {
13220
0
        {  0, 8 },
13221
0
        { 12, 4 },
13222
0
        {  0, 0 },
13223
0
    };
13224
0
    static const crumb_spec_t end_crumbs[] = {
13225
0
        { 0, 4 },
13226
0
        { 8, 8 },
13227
0
        { 0, 0 },
13228
0
    };
13229
13230
0
    uint64_t start, end;
13231
13232
0
    proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_bbf_stag_range_start, tvb, 0, start_crumbs, &start);
13233
0
    proto_tree_add_split_bits_item_ret_val(tree, hf_pfcp_bbf_stag_range_end, tvb, 8, end_crumbs, &end);
13234
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %" PRIu64 "-%" PRIu64, start, end);
13235
13236
0
    return 3;
13237
0
}
13238
13239
static pfcp_generic_ie_t pfcp_bbf_ies[] = {
13240
    /* TR-459 */
13241
    { VENDOR_BROADBAND_FORUM, 32768 , "UP Function Features"                     , dissect_pfcp_enterprise_bbf_up_function_features  , -1} ,
13242
    { VENDOR_BROADBAND_FORUM, 32769 , "Logical Port"                             , dissect_pfcp_enterprise_bbf_logical_port          , -1} ,
13243
    { VENDOR_BROADBAND_FORUM, 32770 , "Outer Header Creation"                    , dissect_pfcp_enterprise_bbf_outer_header_creation , -1} ,
13244
    { VENDOR_BROADBAND_FORUM, 32771 , "Outer Header Removal"                     , dissect_pfcp_enterprise_bbf_outer_header_removal  , -1} ,
13245
    { VENDOR_BROADBAND_FORUM, 32772 , "PPPoE Session ID"                         , dissect_pfcp_enterprise_bbf_pppoe_session_id      , -1} ,
13246
    { VENDOR_BROADBAND_FORUM, 32773 , "PPP protocol"                             , dissect_pfcp_enterprise_bbf_ppp_protocol          , -1} ,
13247
    { VENDOR_BROADBAND_FORUM, 32774 , "Verification Timers"                      , dissect_pfcp_enterprise_bbf_verification_timers   , -1} ,
13248
    { VENDOR_BROADBAND_FORUM, 32775 , "PPP LCP Magic Number"                     , dissect_pfcp_enterprise_bbf_ppp_lcp_magic_number  , -1} ,
13249
    { VENDOR_BROADBAND_FORUM, 32776 , "MTU"                                      , dissect_pfcp_enterprise_bbf_mtu                   , -1} ,
13250
    { VENDOR_BROADBAND_FORUM, 32777 , "L2TP Tunnel Endpoint"                     , dissect_pfcp_enterprise_bbf_l2tp_tunnel_endpoint  , -1} ,
13251
    { VENDOR_BROADBAND_FORUM, 32778 , "L2TP Session ID"                          , dissect_pfcp_enterprise_bbf_l2tp_session_id       , -1} ,
13252
    { VENDOR_BROADBAND_FORUM, 32779 , "L2TP Type"                                , dissect_pfcp_enterprise_bbf_l2tp_type             , -1} ,
13253
    { VENDOR_BROADBAND_FORUM, 32780 , "PPP LCP Connectivity"                     , dissect_pfcp_grouped_ie_wrapper                   , -1} ,
13254
    { VENDOR_BROADBAND_FORUM, 32781 , "L2TP Tunnel"                              , dissect_pfcp_grouped_ie_wrapper                   , -1} ,
13255
    /* TR-459.3 */
13256
    { VENDOR_BROADBAND_FORUM, 32782 , "BBF Multicast Flags"                      , dissect_pfcp_enterprise_bbf_multicast_flags            , -1} ,
13257
    { VENDOR_BROADBAND_FORUM, 32783 , "BBF Multicast Query Parameters"           , dissect_pfcp_enterprise_bbf_multicast_query_parameters , -1} ,
13258
    { VENDOR_BROADBAND_FORUM, 32784 , "BBF Multicast Group Limit"                , dissect_pfcp_enterprise_bbf_multicast_group_limit      , -1} ,
13259
    { VENDOR_BROADBAND_FORUM, 32785 , "BBF Multicast Protocol Control"           , dissect_pfcp_grouped_ie_wrapper                        , -1} ,
13260
    /* TR-459.2 */
13261
    { VENDOR_BROADBAND_FORUM, 32787 , "BBF Apply Action"                         , dissect_pfcp_enterprise_bbf_apply_action                 , -1} ,
13262
    { VENDOR_BROADBAND_FORUM, 32788 , "BBF NAT External Port Range"              , dissect_pfcp_enterprise_bbf_nat_external_port_range      , -1} ,
13263
    { VENDOR_BROADBAND_FORUM, 32789 , "BBF NAT Port Forward"                     , dissect_pfcp_enterprise_bbf_nat_port_forward             , -1} ,
13264
    { VENDOR_BROADBAND_FORUM, 32790 , "BBF Report Trigger"                       , dissect_pfcp_enterprise_bbf_reporting_trigger            , -1} ,
13265
    { VENDOR_BROADBAND_FORUM, 32791 , "BBF Dynamic NAT Block Port Range"         , dissect_pfcp_enterprise_bbf_dynamic_nat_block_port_range , -1} ,
13266
    { VENDOR_BROADBAND_FORUM, 32792 , "BBF Event Time Stamp"                     , dissect_pfcp_enterprise_bbf_event_time_stamp             , -1} ,
13267
    /* TR-459i2 */
13268
    { VENDOR_BROADBAND_FORUM, 32793 , "Node Info Create"                         , dissect_pfcp_grouped_ie_wrapper , -1} ,
13269
    { VENDOR_BROADBAND_FORUM, 32794 , "Node Info Modify"                         , dissect_pfcp_grouped_ie_wrapper , -1} ,
13270
    { VENDOR_BROADBAND_FORUM, 32795 , "Node Info Delete"                         , dissect_pfcp_grouped_ie_wrapper , -1} ,
13271
    { VENDOR_BROADBAND_FORUM, 32796 , "Logical Port Report"                      , dissect_pfcp_grouped_ie_wrapper , -1} ,
13272
    { VENDOR_BROADBAND_FORUM, 32797 , "SGRP Notification Report"                 , dissect_pfcp_grouped_ie_wrapper , -1} ,
13273
    { VENDOR_BROADBAND_FORUM, 32798 , "Network Instance Report"                  , dissect_pfcp_grouped_ie_wrapper , -1} ,
13274
    { VENDOR_BROADBAND_FORUM, 32799 , "SGRP Error"                               , dissect_pfcp_grouped_ie_wrapper , -1} ,
13275
    { VENDOR_BROADBAND_FORUM, 32800 , "SGRP"                                     , dissect_pfcp_grouped_ie_wrapper , -1} ,
13276
    { VENDOR_BROADBAND_FORUM, 32801 , "UP Subscriber Prefix"                     , dissect_pfcp_grouped_ie_wrapper , -1} ,
13277
    { VENDOR_BROADBAND_FORUM, 32802 , "ACL"                                      , dissect_pfcp_grouped_ie_wrapper , -1} ,
13278
    { VENDOR_BROADBAND_FORUM, 32803 , "Direction"                                , dissect_pfcp_enterprise_bbf_direction , -1} ,
13279
    { VENDOR_BROADBAND_FORUM, 32804 , "Family"                                   , dissect_pfcp_enterprise_bbf_family , -1} ,
13280
    { VENDOR_BROADBAND_FORUM, 32806 , "SGRP Identifier"                          , dissect_pfcp_enterprise_bbf_sgrp_identifier , -1} ,
13281
    { VENDOR_BROADBAND_FORUM, 32807 , "SGRP State"                               , dissect_pfcp_enterprise_bbf_sgrp_state , -1} ,
13282
    { VENDOR_BROADBAND_FORUM, 32808 , "SGRP Flags"                               , dissect_pfcp_enterprise_bbf_sgrp_flags , -1} ,
13283
    { VENDOR_BROADBAND_FORUM, 32809 , "Operational Condition"                    , dissect_pfcp_enterprise_bbf_operational_condition , -1} ,
13284
    { VENDOR_BROADBAND_FORUM, 32810 , "IPv4 Prefix"                              , dissect_pfcp_enterprise_bbf_ipv4_prefix, -1} ,
13285
    { VENDOR_BROADBAND_FORUM, 32811 , "IPv6 Prefix"                              , dissect_pfcp_enterprise_bbf_ipv6_prefix, -1} ,
13286
    { VENDOR_BROADBAND_FORUM, 32812 , "Prefix Tag"                               , dissect_pfcp_enterprise_bbf_prefix_tag, -1} ,
13287
    { VENDOR_BROADBAND_FORUM, 32813 , "Error Code"                               , dissect_pfcp_enterprise_bbf_error_code , -1} ,
13288
    { VENDOR_BROADBAND_FORUM, 32814 , "Error Message"                            , dissect_pfcp_enterprise_bbf_error_message , -1} ,
13289
    { VENDOR_BROADBAND_FORUM, 32815 , "Maximum ACL Chain Length"                 , dissect_pfcp_enterprise_bbf_maximum_acl_chain_length , -1} ,
13290
    { VENDOR_BROADBAND_FORUM, 32816 , "Forwarding Capability"                    , dissect_pfcp_enterprise_bbf_forwarding_capability , -1} ,
13291
    { VENDOR_BROADBAND_FORUM, 32817 , "Connectivity Status"                      , dissect_pfcp_enterprise_bbf_connectivity_status , -1} ,
13292
    { VENDOR_BROADBAND_FORUM, 32818 , "Vendor-Specific Node Report Type"         , dissect_pfcp_enterprise_bbf_vendor_specific_node_report_type , -1} ,
13293
    { VENDOR_BROADBAND_FORUM, 32819 , "Prefix Error"                             , dissect_pfcp_grouped_ie_wrapper , -1} ,
13294
    { VENDOR_BROADBAND_FORUM, 32820 , "C-Tag Range"                              , dissect_pfcp_enterprise_bbf_ctag_range , -1} ,
13295
    { VENDOR_BROADBAND_FORUM, 32821 , "S-Tag Range"                              , dissect_pfcp_enterprise_bbf_stag_range , -1} ,
13296
};
13297
13298
/* Enterprise IE decoding Travelping */
13299
13300
static int
13301
dissect_pfcp_enterprise_travelping_packet_measurement(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13302
0
{
13303
0
    unsigned offset = 0;
13304
0
    uint64_t flags;
13305
13306
0
    static int * const pfcp_enterprise_travelping_packet_measurement_flags[] = {
13307
0
        &hf_pfcp_spare_b7_b3,
13308
0
        &hf_pfcp_enterprise_travelping_packet_measurement_b2_dlnop,
13309
0
        &hf_pfcp_enterprise_travelping_packet_measurement_b1_ulnop,
13310
0
        &hf_pfcp_enterprise_travelping_packet_measurement_b0_tonop,
13311
0
        NULL
13312
0
    };
13313
13314
0
    proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_enterprise_travelping_packet_measurement,
13315
0
        ett_pfcp_enterprise_travelping_packet_measurement, pfcp_enterprise_travelping_packet_measurement_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT, &flags);
13316
0
    offset += 1;
13317
13318
0
    if ((flags & 0x1)) {
13319
0
        proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_tonop, tvb, offset, 8, ENC_BIG_ENDIAN);
13320
0
        offset += 8;
13321
0
    }
13322
0
    if ((flags & 0x2)) {
13323
0
        proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_ulnop, tvb, offset, 8, ENC_BIG_ENDIAN);
13324
0
        offset += 8;
13325
0
    }
13326
0
    if ((flags & 0x4)) {
13327
0
        proto_tree_add_item(tree, hf_pfcp_travelping_pkt_meas_dlnop, tvb, offset, 8, ENC_BIG_ENDIAN);
13328
0
        offset += 8;
13329
0
    }
13330
13331
0
    return offset;
13332
0
}
13333
13334
static int
13335
dissect_pfcp_enterprise_travelping_build_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13336
0
{
13337
    /* Octet 7 to (n+4) Travelping Build Id */
13338
0
    if (tvb_ascii_isprint_remaining(tvb, 0))
13339
0
    {
13340
0
        const uint8_t* string_value;
13341
0
        proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_build_id_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
13342
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
13343
0
    }
13344
0
    else
13345
0
    {
13346
0
        proto_tree_add_item(tree, hf_pfcp_travelping_build_id, tvb, 0, -1, ENC_NA);
13347
0
    }
13348
13349
0
    return tvb_reported_length(tvb);
13350
0
}
13351
13352
static int
13353
dissect_pfcp_enterprise_travelping_now(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13354
0
{
13355
0
    unsigned offset = 0;
13356
0
    char *time_str;
13357
13358
0
    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);
13359
0
    offset += 8;
13360
13361
0
    proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
13362
13363
0
    return offset;
13364
0
}
13365
13366
static int
13367
dissect_pfcp_enterprise_travelping_start(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13368
0
{
13369
0
    unsigned offset = 0;
13370
0
    char *time_str;
13371
13372
0
    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);
13373
0
    offset += 8;
13374
13375
0
    proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
13376
13377
0
    return offset;
13378
0
}
13379
13380
static int
13381
dissect_pfcp_enterprise_travelping_stop(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13382
0
{
13383
0
    unsigned offset = 0;
13384
0
    char *time_str;
13385
13386
0
    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);
13387
0
    offset += 8;
13388
13389
0
    proto_item_append_text(proto_tree_get_parent(tree), "%s", time_str);
13390
13391
0
    return offset;
13392
0
}
13393
13394
static int
13395
dissect_pfcp_enterprise_travelping_error_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13396
0
{
13397
    /* Octet 7 to (n+4) Travelping Error Message */
13398
0
    if (tvb_ascii_isprint_remaining(tvb, 0))
13399
0
    {
13400
0
        const uint8_t* string_value;
13401
0
        proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_error_message_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
13402
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
13403
0
    }
13404
0
    else
13405
0
    {
13406
0
        proto_tree_add_item(tree, hf_pfcp_travelping_error_message, tvb, 0, -1, ENC_NA);
13407
0
    }
13408
13409
0
    return tvb_reported_length(tvb);
13410
0
}
13411
13412
static int
13413
dissect_pfcp_enterprise_travelping_file_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13414
0
{
13415
    /* Octet 7 to (n+4) Travelping Error Message */
13416
0
    if (tvb_ascii_isprint_remaining(tvb, 0))
13417
0
    {
13418
0
        const uint8_t* string_value;
13419
0
        proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_file_name_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
13420
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
13421
0
    }
13422
0
    else
13423
0
    {
13424
0
        proto_tree_add_item(tree, hf_pfcp_travelping_file_name, tvb, 0, -1, ENC_NA);
13425
0
    }
13426
13427
0
    return tvb_reported_length(tvb);
13428
0
}
13429
13430
static int
13431
dissect_pfcp_enterprise_travelping_line_number(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13432
0
{
13433
0
    unsigned offset = 0;
13434
0
    uint32_t line_number;
13435
13436
    /* Octet 7 to 10 Travelping Line Number */
13437
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_travelping_line_number, tvb, offset, 4, ENC_BIG_ENDIAN, &line_number);
13438
0
    offset += 4;
13439
13440
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %u", line_number);
13441
13442
0
    return offset;
13443
0
}
13444
13445
static int
13446
dissect_pfcp_enterprise_travelping_ipfix_policy(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13447
0
{
13448
    /* Octet 7 to (n+4) Travelping IPFIX Policy */
13449
0
    if (tvb_ascii_isprint_remaining(tvb, 0))
13450
0
    {
13451
0
        const uint8_t* string_value;
13452
0
        proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_ipfix_policy_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
13453
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
13454
0
    }
13455
0
    else
13456
0
    {
13457
0
        proto_tree_add_item(tree, hf_pfcp_travelping_ipfix_policy, tvb, 0, -1, ENC_NA);
13458
0
    }
13459
13460
0
    return tvb_reported_length(tvb);
13461
0
}
13462
13463
static int
13464
dissect_pfcp_enterprise_travelping_trace_parent(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13465
0
{
13466
    /* Octet 7 to (n+4) Travelping Trace Parent */
13467
0
    if (tvb_ascii_isprint_remaining(tvb, 0))
13468
0
    {
13469
0
        const uint8_t* string_value;
13470
0
        proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_trace_parent_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
13471
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
13472
0
    }
13473
0
    else
13474
0
    {
13475
0
        proto_tree_add_item(tree, hf_pfcp_travelping_trace_parent, tvb, 0, -1, ENC_NA);
13476
0
    }
13477
13478
0
    return tvb_reported_length(tvb);
13479
0
}
13480
13481
static int
13482
dissect_pfcp_enterprise_travelping_trace_state(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13483
0
{
13484
    /* Octet 7 to (n+4) Travelping Trace State */
13485
0
    if (tvb_ascii_isprint_remaining(tvb, 0))
13486
0
    {
13487
0
        const uint8_t* string_value;
13488
0
        proto_tree_add_item_ret_string(tree, hf_pfcp_travelping_trace_state_str, tvb, 0, -1, ENC_ASCII | ENC_NA, pinfo->pool, &string_value);
13489
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s", string_value);
13490
0
    }
13491
0
    else
13492
0
    {
13493
0
        proto_tree_add_item(tree, hf_pfcp_travelping_trace_state, tvb, 0, -1, ENC_NA);
13494
0
    }
13495
13496
0
    return tvb_reported_length(tvb);
13497
0
}
13498
13499
13500
static pfcp_generic_ie_t pfcp_travelping_ies[] = {
13501
    { VENDOR_TRAVELPING, 32769 , "Packet Measurement"                , dissect_pfcp_enterprise_travelping_packet_measurement , -1} ,
13502
    { VENDOR_TRAVELPING, 32770 , "Build Id"                          , dissect_pfcp_enterprise_travelping_build_id           , -1} ,
13503
    { VENDOR_TRAVELPING, 32771 , "Now"                               , dissect_pfcp_enterprise_travelping_now                , -1} ,
13504
    { VENDOR_TRAVELPING, 32772 , "Start"                             , dissect_pfcp_enterprise_travelping_start              , -1} ,
13505
    { VENDOR_TRAVELPING, 32773 , "Stop"                              , dissect_pfcp_enterprise_travelping_stop               , -1} ,
13506
    { VENDOR_TRAVELPING, 32774 , "Error Report"                      , dissect_pfcp_grouped_ie_wrapper                       , -1} ,
13507
    { VENDOR_TRAVELPING, 32775 , "Error Message"                     , dissect_pfcp_enterprise_travelping_error_message      , -1} ,
13508
    { VENDOR_TRAVELPING, 32776 , "File Name"                         , dissect_pfcp_enterprise_travelping_file_name          , -1} ,
13509
    { VENDOR_TRAVELPING, 32777 , "Line Number"                       , dissect_pfcp_enterprise_travelping_line_number        , -1} ,
13510
    { VENDOR_TRAVELPING, 32778 , "Created NAT Binding"               , dissect_pfcp_grouped_ie_wrapper                       , -1} ,
13511
    { VENDOR_TRAVELPING, 32779 , "IPFIX Policy"                      , dissect_pfcp_enterprise_travelping_ipfix_policy       , -1} ,
13512
    { VENDOR_TRAVELPING, 32780 , "Trace Information"                 , dissect_pfcp_grouped_ie_wrapper                       , -1} ,
13513
    { VENDOR_TRAVELPING, 32781 , "Trace Parent"                      , dissect_pfcp_enterprise_travelping_trace_parent       , -1} ,
13514
    { VENDOR_TRAVELPING, 32782 , "Trace State"                       , dissect_pfcp_enterprise_travelping_trace_state        , -1} ,
13515
};
13516
13517
/****************************** Juniper Networks ******************************/
13518
13519
static int
13520
dissect_pfcp_jnpr_cp_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13521
0
{
13522
0
    unsigned len = tvb_reported_length(tvb);
13523
13524
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_cp_id_opaque_string, tvb, 0, len, ENC_ASCII);
13525
13526
0
    return len;
13527
0
}
13528
13529
static int
13530
dissect_pfcp_jnpr_filter_var(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13531
0
{
13532
0
    unsigned offset = 0;
13533
0
    uint32_t filter_len;
13534
13535
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_jnpr_filter_length, tvb, offset, 2, ENC_BIG_ENDIAN, &filter_len);
13536
0
    offset += 2;
13537
13538
0
    if (filter_len > 0 && (offset + filter_len) <= tvb_reported_length(tvb)) {
13539
0
        proto_tree_add_item(tree, hf_pfcp_jnpr_filter_data, tvb, offset, filter_len, ENC_NA);
13540
0
    }
13541
13542
0
    return tvb_reported_length(tvb);
13543
0
}
13544
13545
static int dissect_pfcp_jnpr_filter_service_object(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13546
0
{
13547
0
    unsigned offset = 0;
13548
0
    uint32_t filter_data_len;
13549
13550
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_jnpr_filter_service_info_len, tvb, offset, 2, ENC_BIG_ENDIAN, &filter_data_len);
13551
0
    offset+=2;
13552
13553
0
    if (filter_data_len > 0 && (offset + filter_data_len) <= tvb_reported_length(tvb)) {
13554
0
        proto_tree_add_item(tree, hf_pfcp_jnpr_filter_service_info_data, tvb, offset, filter_data_len, ENC_NA);
13555
0
    }
13556
13557
0
    return tvb_reported_length(tvb);
13558
0
}
13559
13560
static int dissect_pfcp_jnpr_sgrp_name(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13561
0
{
13562
0
    unsigned sgrp_name_len = tvb_reported_length(tvb);
13563
13564
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_sgrp_name, tvb, 0, sgrp_name_len, ENC_ASCII);
13565
13566
0
    return sgrp_name_len;
13567
0
}
13568
13569
static int dissect_pfcp_jnpr_logical_port_address_list(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13570
0
{
13571
0
    unsigned data_len = tvb_reported_length(tvb);
13572
13573
0
    for(unsigned offset = 0; offset + 4 <= data_len; offset += 4) {
13574
0
        proto_tree_add_item(tree, hf_pfcp_jnpr_logical_port_address, tvb, offset, 4, ENC_BIG_ENDIAN);
13575
0
    }
13576
13577
0
    return data_len;
13578
0
}
13579
13580
static int dissect_pfcp_jnpr_compute_limit_exceeded(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13581
0
{
13582
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_compute_limit_exceeded, tvb, 0, 1, ENC_NA);
13583
0
    return tvb_reported_length(tvb);
13584
0
}
13585
13586
static int dissect_pfcp_jnpr_accounting_type_final(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13587
0
{
13588
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_final_stats, tvb, 0, 1, ENC_NA);
13589
0
    return tvb_reported_length(tvb);
13590
13591
0
}
13592
13593
static int dissect_pfcp_jnpr_error_event(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13594
0
{
13595
0
    unsigned data_len = tvb_reported_length(tvb);
13596
13597
0
    uint32_t error_event_id;
13598
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_jnpr_error_event_id, tvb, 0, 4, ENC_BIG_ENDIAN, &error_event_id);
13599
13600
0
    if (data_len >= 6) {
13601
0
        uint32_t error_event_len;
13602
0
        proto_tree_add_item_ret_uint(tree, hf_pfcp_jnpr_error_event_len, tvb, 4, 2, ENC_BIG_ENDIAN, &error_event_len);
13603
13604
0
        if (error_event_len > 0 && data_len >= (6 + error_event_len)) {
13605
0
            proto_tree_add_item(tree, hf_pfcp_jnpr_error_event_desc, tvb, 6, error_event_len, ENC_ASCII);
13606
0
        }
13607
0
    }
13608
13609
0
    return data_len;
13610
0
}
13611
13612
static int dissect_pfcp_jnpr_mcast_service_object(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13613
0
{
13614
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_mcast_flags, tvb, 0, 1, ENC_NA);
13615
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_mcast_group_threshold, tvb, 1, 1, ENC_BIG_ENDIAN);
13616
13617
0
    return tvb_reported_length(tvb);
13618
0
}
13619
13620
static int dissect_pfcp_jnpr_dbng_inet_tcp_addr(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13621
0
{
13622
0
    proto_item *ti = proto_tree_add_item(tree, hf_pfcp_jnpr_src_ip_ie_group, tvb, 0, 9, ENC_NA);
13623
0
    proto_tree *subtree = proto_item_add_subtree(ti, ett_pfcp_jnpr);
13624
13625
0
    proto_tree_add_item(subtree, hf_pfcp_jnpr_nested_ie_type, tvb, 0, 2, ENC_BIG_ENDIAN);
13626
0
    proto_tree_add_item(subtree, hf_pfcp_jnpr_nested_ie_len, tvb, 2, 2, ENC_BIG_ENDIAN);
13627
0
    proto_tree_add_item(subtree, hf_pfcp_jnpr_source_ip_spare, tvb, 4, 1, ENC_BIG_ENDIAN);
13628
0
    proto_tree_add_item(subtree, hf_pfcp_jnpr_source_ip, tvb, 5, 4, ENC_BIG_ENDIAN);
13629
13630
0
    return tvb_reported_length(tvb);
13631
0
}
13632
13633
static int dissect_pfcp_jnpr_cpri_port_info(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13634
0
{
13635
0
    unsigned len = tvb_reported_length(tvb);
13636
13637
0
    if (len >= 2)  proto_tree_add_item(tree, hf_pfcp_jnpr_hi_prio_port,       tvb, 0,  2, ENC_BIG_ENDIAN);
13638
0
    if (len >= 4)  proto_tree_add_item(tree, hf_pfcp_jnpr_med_hi_prio_port,   tvb, 2,  2, ENC_BIG_ENDIAN);
13639
0
    if (len >= 6)  proto_tree_add_item(tree, hf_pfcp_jnpr_med_prio_port,      tvb, 4,  2, ENC_BIG_ENDIAN);
13640
0
    if (len >= 8)  proto_tree_add_item(tree, hf_pfcp_jnpr_med_low_prio_port,  tvb, 6,  2, ENC_BIG_ENDIAN);
13641
0
    if (len >= 10) proto_tree_add_item(tree, hf_pfcp_jnpr_low_prio_port,      tvb, 8,  2, ENC_BIG_ENDIAN);
13642
0
    if (len >= 12) proto_tree_add_item(tree, hf_pfcp_jnpr_accounting_port,    tvb, 10, 2, ENC_BIG_ENDIAN);
13643
0
    if (len >= 14) proto_tree_add_item(tree, hf_pfcp_jnpr_session_port,       tvb, 12, 2, ENC_BIG_ENDIAN);
13644
13645
0
    return len;
13646
0
}
13647
13648
static int dissect_pfcp_jnpr_cos_forwarding_class(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13649
0
{
13650
0
    unsigned offset = 0;
13651
0
    uint32_t info_len;
13652
0
    unsigned len = tvb_reported_length(tvb);
13653
13654
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_jnpr_cos_fwd_len, tvb, offset, 2, ENC_BIG_ENDIAN, &info_len);
13655
0
    offset += 2;
13656
13657
0
    if (info_len > 0 && (offset + info_len) <= len) {
13658
0
        proto_tree_add_item(tree, hf_pfcp_jnpr_cos_fwd_data, tvb, offset, info_len, ENC_NA);
13659
0
    }
13660
13661
0
    return len;
13662
0
}
13663
13664
static int dissect_pfcp_jnpr_port_network_instance_delete(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13665
0
{
13666
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_delete_flag, tvb, 0, 1, ENC_BIG_ENDIAN);
13667
13668
0
    return tvb_reported_length(tvb);
13669
0
}
13670
13671
static int dissect_pfcp_jnpr_hierarchical_schedule(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13672
0
{
13673
0
    uint32_t max_levels;
13674
13675
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_ih_flag, tvb, 0, 1, ENC_BIG_ENDIAN);
13676
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_jnpr_max_hierarchy_levels, tvb, 1, 1, ENC_BIG_ENDIAN, &max_levels);
13677
13678
0
    return tvb_reported_length(tvb);
13679
0
}
13680
13681
static int dissect_pfcp_jnpr_li_source_port(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13682
0
{
13683
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_li_source_port, tvb, 0, 2, ENC_BIG_ENDIAN);
13684
0
    return tvb_reported_length(tvb);
13685
0
}
13686
13687
static int dissect_pfcp_jnpr_li_service_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13688
0
{
13689
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_li_service_id, tvb, 0, 4, ENC_BIG_ENDIAN);
13690
0
    return tvb_reported_length(tvb);
13691
0
}
13692
13693
static int dissect_pfcp_jnpr_li_md_header(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13694
0
{
13695
0
    unsigned length = tvb_reported_length(tvb);
13696
13697
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_li_md_header, tvb, 0, length, ENC_NA);
13698
13699
0
    return length;
13700
0
}
13701
13702
static int dissect_pfcp_jnpr_address_qualifier(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13703
0
{
13704
0
    static int * const addr_qualifier_flags[] = {
13705
0
        &hf_pfcp_jnpr_addr_primary,
13706
0
        &hf_pfcp_jnpr_addr_preferred,
13707
0
        NULL
13708
0
    };
13709
13710
0
    proto_tree_add_bitmask_with_flags(tree, tvb, 0, hf_pfcp_jnpr_address_qualifier, ett_pfcp_jnpr, addr_qualifier_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT);
13711
13712
0
    return tvb_reported_length(tvb);
13713
0
}
13714
13715
static int dissect_pfcp_jnpr_operation_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13716
0
{
13717
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_operation_type, tvb, 0, 1, ENC_BIG_ENDIAN);
13718
13719
0
    return tvb_reported_length(tvb);
13720
0
}
13721
13722
static int dissect_pfcp_jnpr_targeted_distribution(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13723
0
{
13724
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_targeted_distribution_weight, tvb, 0, 2, ENC_BIG_ENDIAN);
13725
13726
0
    return tvb_reported_length(tvb);
13727
0
}
13728
13729
static int dissect_pfcp_jnpr_remote_l2tp_tunnel_endpoint(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13730
0
{
13731
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_l2tp_flag, tvb, 0, 1, ENC_BIG_ENDIAN);
13732
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_l2tp_tunnel_id, tvb, 1, 2, ENC_BIG_ENDIAN);
13733
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_l2tp_src_port, tvb, 3, 2, ENC_BIG_ENDIAN);
13734
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_l2tp_dst_port, tvb, 5, 2, ENC_BIG_ENDIAN);
13735
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_l2tp_tos_reflect, tvb, 7, 1, ENC_BIG_ENDIAN);
13736
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_l2tp_is_lns, tvb, 8, 1, ENC_BIG_ENDIAN);
13737
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_l2tp_ipv4, tvb, 9, 4, ENC_BIG_ENDIAN);
13738
0
    proto_tree_add_item(tree, hf_pfcp_jnpr_l2tp_tunnel_index, tvb, 13, 4, ENC_BIG_ENDIAN);
13739
13740
0
    return tvb_reported_length(tvb);
13741
0
}
13742
13743
13744
static pfcp_generic_ie_t pfcp_jnpr_ies[] = {
13745
    { VENDOR_JUNIPER, 32905 , "CPRI Port Info"                      , dissect_pfcp_jnpr_cpri_port_info, -1 } ,
13746
    { VENDOR_JUNIPER, 32910 , "Filter Service Object"               , dissect_pfcp_jnpr_filter_service_object, -1 } ,
13747
    { VENDOR_JUNIPER, 32911 , "Error Event Report"                  , dissect_pfcp_jnpr_error_event, -1 } ,
13748
    { VENDOR_JUNIPER, 32912 , "Filter Variable"                     , dissect_pfcp_jnpr_filter_var, -1 } ,
13749
    { VENDOR_JUNIPER, 32915 , "Compute Limit Exceeded"              , dissect_pfcp_jnpr_compute_limit_exceeded, -1 } ,
13750
    { VENDOR_JUNIPER, 32917 , "Accounting Type Final"               , dissect_pfcp_jnpr_accounting_type_final, -1 } ,
13751
    { VENDOR_JUNIPER, 32918 , "Multicast Service Object"            , dissect_pfcp_jnpr_mcast_service_object, -1 } ,
13752
    { VENDOR_JUNIPER, 32919 , "SGRP Name"                           , dissect_pfcp_jnpr_sgrp_name, -1 } ,
13753
    { VENDOR_JUNIPER, 32921 , "Logical Port Address List"           , dissect_pfcp_jnpr_logical_port_address_list, -1 } ,
13754
    { VENDOR_JUNIPER, 32922 , "Port Network Instance Delete"        , dissect_pfcp_jnpr_port_network_instance_delete, -1 } ,
13755
    { VENDOR_JUNIPER, 32925 , "Network Instance Port Address List"  , dissect_pfcp_grouped_ie_wrapper, -1 } ,
13756
    { VENDOR_JUNIPER, 32926 , "Network Instance Address"            , dissect_pfcp_grouped_ie_wrapper, -1 } ,
13757
    { VENDOR_JUNIPER, 32927 , "Address Qualifier"                   , dissect_pfcp_jnpr_address_qualifier, -1 } ,
13758
    { VENDOR_JUNIPER, 32928 , "Address Operation Type"              , dissect_pfcp_jnpr_operation_type, -1 } ,
13759
    { VENDOR_JUNIPER, 32929 , "DBNG INET TCP Address"               , dissect_pfcp_jnpr_dbng_inet_tcp_addr, -1 } ,
13760
    { VENDOR_JUNIPER, 32930 , "COS Forwarding Class Info"           , dissect_pfcp_jnpr_cos_forwarding_class, -1 } ,
13761
    { VENDOR_JUNIPER, 32931 , "Lawful Intercept"                    , dissect_pfcp_grouped_ie_wrapper, -1 },
13762
    { VENDOR_JUNIPER, 32932 , "Source Port"                         , dissect_pfcp_jnpr_li_source_port, -1 },
13763
    { VENDOR_JUNIPER, 32933 , "Service ID"                          , dissect_pfcp_jnpr_li_service_id, -1 },
13764
    { VENDOR_JUNIPER, 32934 , "MD Header Contents"                  , dissect_pfcp_jnpr_li_md_header, -1 },
13765
    { VENDOR_JUNIPER, 32937 , "Targeted Distribution"               , dissect_pfcp_jnpr_targeted_distribution, -1 },
13766
    { VENDOR_JUNIPER, 32938 , "Remote L2TP Tunnel Endpoint"         , dissect_pfcp_jnpr_remote_l2tp_tunnel_endpoint, -1 },
13767
    { VENDOR_JUNIPER, 32940 , "Hierarchical Schedule"               , dissect_pfcp_jnpr_hierarchical_schedule, -1 } ,
13768
    { VENDOR_JUNIPER, 32941 , "L2TP"                                , dissect_pfcp_grouped_ie_wrapper, -1 } ,
13769
    { VENDOR_JUNIPER, 32943 , "CP ID"                               , dissect_pfcp_jnpr_cp_id, -1 } ,
13770
};
13771
13772
/************************************ Nokia ***********************************/
13773
13774
static int dissect_pfcp_nokia_sap_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13775
0
{
13776
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_sap_template);
13777
0
}
13778
13779
static int dissect_pfcp_nokia_group_if_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13780
0
{
13781
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_group_iface_template);
13782
0
}
13783
13784
static int dissect_pfcp_nokia_session_state_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13785
0
{
13786
0
    uint64_t value;
13787
13788
0
    proto_tree_add_item_ret_uint64(tree, hf_pfcp_nokia_session_state_id, tvb, 0, 8, ENC_BIG_ENDIAN, &value);
13789
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %" PRIu64, value);
13790
13791
0
    return 8;
13792
0
}
13793
13794
static const true_false_string tfs_nokia_detailed_stats_ie = { "Egress", "Ingress" };
13795
static const true_false_string tfs_nokia_detailed_stats_qp = { "Policer", "Queue" };
13796
static const val64_string nokia_detailed_stats_length_values[] = {
13797
    {0, "Not present"},
13798
    {1, "4 bytes"},
13799
    {2, "8 bytes"},
13800
    {3, "Invalid"},
13801
    {0, NULL}
13802
};
13803
13804
static int dissect_pfcp_nokia_detailed_statistics(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13805
0
{
13806
0
    static const value_string ingress_queue_names[] = {
13807
0
        { 1, "HighPktsOffered"},
13808
0
        { 2, "HighPktsDropped"},
13809
0
        { 3, "LowPktsOffered"},
13810
0
        { 4, "LowPktsDropped"},
13811
0
        { 5, "HighOctetsOffered"},
13812
0
        { 6, "HighOctetsDropped"},
13813
0
        { 7, "LowOctetsOffered"},
13814
0
        { 8, "LowOctetsDropped"},
13815
0
        { 9, "UncolouredPktsOffered"},
13816
0
        {10, "UncolouredOctetsOffered"},
13817
0
        {11, "McastManagedPktsOffered"},
13818
0
        {12, "McastManagedOctetsOffered"},
13819
0
        {13, "InProfilePktsForwarded"},
13820
0
        {14, "OutOfProfilePktsForwarded"},
13821
0
        {15, "InProfileOctetsForwarded"},
13822
0
        {16, "OutOfProfileOctetsForwarded"},
13823
0
        { 0, NULL},
13824
0
    };
13825
0
    static const value_string egress_queue_names[] = {
13826
0
        { 1, "InProfilePktsForwarded"},
13827
0
        { 2, "InProfilePktsDropped"},
13828
0
        { 3, "OutOfProfilePktsForwarded"},
13829
0
        { 4, "OutOfProfilePktsDropped"},
13830
0
        { 5, "InProfileOctetsForwarded"},
13831
0
        { 6, "InProfileOctetsDropped"},
13832
0
        { 7, "OutOfProfileOctetsForwarded"},
13833
0
        { 8, "OutOfProfileOctetsDropped"},
13834
0
        { 9, "ExceedProfilePktsForwarded"},
13835
0
        {10, "ExceedProfilePktsDropped"},
13836
0
        {11, "ExceedProfileOctetsForwarded"},
13837
0
        {12, "ExceedProfileOctetsDropped"},
13838
0
        { 0, NULL},
13839
0
    };
13840
0
    static const value_string policer_names[] = {
13841
0
        { 1, "HighPktsOffered"},
13842
0
        { 2, "HighPktsDropped"},
13843
0
        { 3, "LowPktsOffered"},
13844
0
        { 4, "LowPktsDropped"},
13845
0
        { 5, "HighOctetsOffered"},
13846
0
        { 6, "HighOctetsDropped"},
13847
0
        { 7, "LowOctetsOffered"},
13848
0
        { 8, "LowOctetsDropped"},
13849
0
        { 9, "UncolouredPktsOffered"},
13850
0
        {10, "UncolouredOctetsOffered"},
13851
0
        {11, "InProfilePktsForwarded"},
13852
0
        {12, "OutOfProfilePktsForwarded"},
13853
0
        {13, "InProfileOctetsForwarded"},
13854
0
        {14, "OutOfProfileOctetsForwarded"},
13855
0
        {15, "ExceedProfilePktsOffered"},
13856
0
        {16, "ExceedProfilePktsDropped"},
13857
0
        {17, "ExceedProfilePktsForwarded"},
13858
0
        {18, "ExceedProfileOctetsOffered"},
13859
0
        {19, "ExceedProfileOctetsDropped"},
13860
0
        {20, "ExceedProfileOctetsForwarded"},
13861
0
        {21, "InPlusProfilePktsOffered"},
13862
0
        {22, "InPlusProfilePktsDropped"},
13863
0
        {23, "InPlusProfilePktsForwarded"},
13864
0
        {24, "InPlusProfileOctetsOffered"},
13865
0
        {25, "InPlusProfileOctetsDropped"},
13866
0
        {26, "InPlusProfileOctetsForwarded"},
13867
0
        { 0, NULL},
13868
0
    };
13869
13870
0
    unsigned offset = 0;
13871
0
    static int * const key[] = {
13872
0
        &hf_pfcp_nokia_detailed_stats_key_direction,
13873
0
        &hf_pfcp_nokia_detailed_stats_key_type,
13874
0
        &hf_pfcp_nokia_detailed_stats_key_object_id,
13875
0
        &hf_pfcp_nokia_detailed_stats_key_stat_mode,
13876
0
        NULL
13877
0
    };
13878
13879
0
    uint64_t flags;
13880
0
    proto_tree_add_bitmask_with_flags_ret_uint64(
13881
0
        tree, tvb, offset, hf_pfcp_nokia_detailed_stats_key,
13882
0
        ett_pfcp_nokia_detailed_stats_key, key,
13883
0
        ENC_BIG_ENDIAN, 0, &flags
13884
0
    );
13885
0
    const bool flags_egress  = !!(flags & 0x80000000);
13886
0
    const bool flags_policer = !!(flags & 0x40000000);
13887
0
    offset += 4;
13888
13889
0
    proto_item* bitmap_item;
13890
0
    proto_tree* bitmap_tree = proto_tree_add_subtree_format(tree, tvb, offset, 8, ett_pfcp_nokia_detailed_stats_bitmap, &bitmap_item, "Counter info");
13891
0
    uint64_t bitmap = tvb_get_ntoh64(tvb, offset);
13892
0
    const int bitmap_offset = offset;
13893
0
    offset += 8;
13894
13895
0
    int num = 0;
13896
0
    for (int i = 0; bitmap != 0; bitmap <<= 8, i += 4)
13897
0
    {
13898
0
        uint8_t mappedbyte = (bitmap >> 56) & 0xff;
13899
0
        if (mappedbyte == 0) continue;
13900
13901
0
        for (int j = 1; mappedbyte != 0; mappedbyte >>= 2, j++)
13902
0
        {
13903
0
           const uint8_t bits = mappedbyte & 0x03;
13904
0
           int counter_index = i + j;
13905
0
           if (bits == 0) continue;
13906
13907
0
           const value_string* names = flags_policer ? policer_names : flags_egress ? egress_queue_names : ingress_queue_names;
13908
0
           const char* counter_name = val_to_str(pinfo->pool, counter_index, names, "Counter %u");
13909
13910
0
           const int bit_offset = 8 * (bitmap_offset + i/4 + 1) - 2 * j;
13911
0
           proto_item* it = proto_tree_add_bits_item(bitmap_tree, hf_pfcp_nokia_detailed_stats_bitmap_item, tvb, bit_offset, 2, ENC_BIG_ENDIAN);
13912
0
           proto_item_append_text(it, " - %s (%u) ", counter_name, counter_index);
13913
0
           if (bits == 3)
13914
0
           {
13915
0
               proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, bitmap_offset, 8);
13916
0
               break;
13917
0
           }
13918
13919
0
           const int len = bits == 1 ? 4 : 8;
13920
13921
0
           if (offset > 0 && (unsigned) offset + len > tvb_reported_length(tvb))
13922
0
           {
13923
0
               proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, offset, tvb_reported_length(tvb) - offset);
13924
0
               break;
13925
0
           }
13926
13927
0
           uint64_t octets;
13928
0
           it = proto_tree_add_item_ret_uint64(tree, hf_pfcp_nokia_detailed_stats_octets, tvb, offset, len, ENC_BIG_ENDIAN, &octets);
13929
0
           proto_item_set_text(it, "%s: %" PRIu64, counter_name, octets);
13930
13931
0
           num++;
13932
0
           offset += len;
13933
0
       }
13934
0
    }
13935
13936
0
    if (num == 0)
13937
0
    {
13938
0
        proto_item_append_text(bitmap_item, " (empty)");
13939
0
    }
13940
13941
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %u %s %s counter%s (object %u mode %u)",
13942
0
                           num, flags_egress ? "egress" : "ingress", flags_policer ? "policer" : "queue", num == 1 ? "" : "s",
13943
0
                           (int) (flags >> 16) & 0x3f, (int) flags & 0x1f);
13944
13945
0
    return offset;
13946
0
}
13947
13948
static int dissect_pfcp_nokia_detailed_error(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13949
0
{
13950
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_detailed_error);
13951
0
}
13952
13953
static int dissect_pfcp_nokia_qos_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
13954
0
{
13955
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_qos_override);
13956
0
}
13957
13958
static int dissect_pfcp_nokia_measurement_information(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13959
0
{
13960
0
    static int * const flags[] = {
13961
0
        &hf_pfcp_spare_b7_b1,
13962
0
        &hf_pfcp_nokia_measurement_info_b0_det,
13963
0
        NULL
13964
0
    };
13965
13966
0
    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);
13967
13968
0
    return 1;
13969
0
}
13970
13971
static int dissect_pfcp_nokia_pfpsmreq_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13972
0
{
13973
0
    static int * const flags[] = {
13974
0
        &hf_pfcp_spare_b7_b2,
13975
0
        &hf_pfcp_nokia_pfcpsmreq_flags_b1_audit,
13976
0
        &hf_pfcp_nokia_pfcpsmreq_flags_b0_abs,
13977
0
        NULL
13978
0
    };
13979
13980
0
    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);
13981
13982
0
    return 1;
13983
0
}
13984
13985
static int dissect_pfcp_nokia_cp_function_features(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
13986
0
{
13987
0
    static int * const pfcp_nokia_cp_function_features_flags[] = {
13988
0
        &hf_pfcp_nokia_cp_function_features_assoc_audit,
13989
0
        &hf_pfcp_nokia_cp_function_features_imm_l2_access_id_report,
13990
0
        &hf_pfcp_nokia_cp_function_features_cmag_c,
13991
0
        NULL,
13992
0
    };
13993
13994
0
    proto_tree_add_bitmask_list(tree, tvb, 0, 4, pfcp_nokia_cp_function_features_flags, ENC_BIG_ENDIAN);
13995
13996
0
    return 4;
13997
0
}
13998
13999
static int dissect_pfcp_nokia_up_function_features(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14000
0
{
14001
0
    static int * const pfcp_nokia_up_function_features_flags[] = {
14002
0
        &hf_pfcp_nokia_up_function_features_sssg,
14003
0
        &hf_pfcp_nokia_up_function_features_bulk_audit,
14004
0
        NULL,
14005
0
    };
14006
14007
0
    proto_tree_add_bitmask_list(tree, tvb, 0, 1, pfcp_nokia_up_function_features_flags, ENC_BIG_ENDIAN);
14008
14009
0
    return 1;
14010
0
}
14011
14012
static const value_string nokia_filter_override_type_vals[] = {
14013
    {0, "Ingress IPv4"},
14014
    {1, "Egress IPv4"},
14015
    {2, "Ingress IPv6"},
14016
    {3, "Egress IPv6"},
14017
    {0, NULL}
14018
};
14019
14020
static int dissect_pfcp_nokia_filter_override(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14021
0
{
14022
0
    uint32_t type;
14023
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_filter_override_type, tvb, 0, 1, ENC_BIG_ENDIAN, &type);
14024
14025
0
    if (tvb_reported_length(tvb) == 1)
14026
0
    {
14027
0
        proto_item_append_text(proto_tree_get_parent(tree), " : %s: <disable>", val_to_str_const(type, nokia_filter_override_type_vals, "Unknown"));
14028
0
    }
14029
0
    else
14030
0
    {
14031
0
        proto_tree_add_item(tree, hf_pfcp_nokia_filter_override_name, tvb, 1, tvb_reported_length(tvb) - 1, ENC_ASCII);
14032
14033
0
        proto_item_append_text(proto_tree_get_parent(tree), " : %s: %s",
14034
0
                val_to_str_const(type, nokia_filter_override_type_vals, "Unknown"),
14035
0
                tvb_get_string_enc(pinfo->pool, tvb, 1, tvb_reported_length(tvb) - 1, ENC_ASCII));
14036
0
    }
14037
14038
0
    return tvb_reported_length(tvb);
14039
0
}
14040
14041
static int dissect_pfcp_nokia_intermediate_destination(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14042
0
{
14043
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_intermediate_destination);
14044
0
}
14045
14046
static int dissect_pfcp_nokia_nat_isa_members(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14047
0
{
14048
0
    uint32_t num_members;
14049
14050
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_nat_isa_members, tvb, 0, 1, ENC_BIG_ENDIAN, &num_members);
14051
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %u", num_members);
14052
14053
0
    return 1;
14054
0
}
14055
14056
static int dissect_pfcp_nokia_pfcphb_flags(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14057
0
{
14058
0
    static int * const flags[] = {
14059
0
        &hf_pfcp_spare_b7_b3,
14060
0
        &hf_pfcp_nokia_pfcphb_flags_b2_aud_e,
14061
0
        &hf_pfcp_nokia_pfcphb_flags_b1_aud_s,
14062
0
        &hf_pfcp_nokia_pfcphb_flags_b0_aud_r,
14063
0
        NULL
14064
0
    };
14065
14066
0
    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);
14067
14068
0
    return 1;
14069
0
}
14070
14071
static int dissect_pfcp_nokia_l2tp_lcp_options(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14072
0
{
14073
0
    proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_lcp_request, tvb, 0, -1, ENC_NA);
14074
14075
0
    return tvb_reported_length(tvb);
14076
0
}
14077
14078
static const value_string nokia_l2tp_auth_type_vals[] = {
14079
    {0, "CHAP"},
14080
    {1, "PAP"},
14081
    {0, NULL}
14082
};
14083
14084
static int dissect_pfcp_nokia_l2tp_auth_type(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14085
0
{
14086
0
    uint32_t type;
14087
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_auth_type, tvb, 0, 1, ENC_BIG_ENDIAN, &type);
14088
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", val_to_str_const(type, nokia_l2tp_auth_type_vals, "<Unknown>"));
14089
14090
0
    return 1;
14091
0
}
14092
14093
static int dissect_pfcp_nokia_l2tp_auth_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14094
0
{
14095
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_auth_name);
14096
0
}
14097
14098
static int dissect_pfcp_nokia_l2tp_auth_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14099
0
{
14100
0
    uint32_t id;
14101
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_auth_id, tvb, 0, 1, ENC_BIG_ENDIAN, &id);
14102
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %u", id);
14103
14104
0
    return 1;
14105
0
}
14106
14107
static int dissect_pfcp_nokia_l2tp_auth_challenge(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14108
0
{
14109
0
    proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_auth_challenge, tvb, 0, -1, ENC_NA);
14110
14111
0
    return tvb_reported_length(tvb);
14112
0
}
14113
14114
static int dissect_pfcp_nokia_l2tp_auth_response(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14115
0
{
14116
0
    proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_auth_response, tvb, 0, -1, ENC_NA);
14117
14118
0
    return tvb_reported_length(tvb);
14119
0
}
14120
14121
static int dissect_pfcp_nokia_l2tp_endpoint(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14122
0
{
14123
0
    if (tvb_reported_length(tvb) == 4)
14124
0
    {
14125
0
        proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address, tvb, 0, 4, ENC_BIG_ENDIAN);
14126
0
        proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip_to_str(pinfo->pool, tvb, 0));
14127
0
    }
14128
0
    else if (tvb_reported_length(tvb) == 16)
14129
0
    {
14130
0
        proto_tree_add_item(tree, hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address, tvb, 0, 16, ENC_NA);
14131
0
        proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip6_to_str(pinfo->pool, tvb, 0));
14132
0
    }
14133
0
    else
14134
0
    {
14135
0
        proto_tree_add_expert_remaining(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0);
14136
0
    }
14137
14138
0
    return tvb_reported_length(tvb);
14139
0
}
14140
14141
static int dissect_pfcp_nokia_l2tp_client_auth_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14142
0
{
14143
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_client_auth_id);
14144
0
}
14145
14146
static int dissect_pfcp_nokia_l2tp_server_auth_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14147
0
{
14148
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_server_auth_id);
14149
0
}
14150
14151
static int dissect_pfcp_nokia_l2tp_password(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14152
0
{
14153
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_password);
14154
0
}
14155
14156
static int dissect_pfcp_nokia_l2tp_assignment_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14157
0
{
14158
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_assignment_id);
14159
0
}
14160
14161
static int dissect_pfcp_nokia_l2tp_private_group_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14162
0
{
14163
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_l2tp_private_group_id);
14164
0
}
14165
14166
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)
14167
0
{
14168
0
    unsigned offset = 0;
14169
14170
0
    uint64_t flags_present;
14171
0
    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);
14172
0
    offset += 4;
14173
14174
0
    for (int i = 0; flags[i] != NULL; i++)
14175
0
    {
14176
        // is there a corresponding field?
14177
0
        if (fields[i] == NULL) continue;
14178
14179
        // is the flag enabled?
14180
0
        header_field_info* hf = proto_registrar_get_nth(*flags[i]);
14181
0
        if ((flags_present & hf->bitmask) == 0) continue;
14182
14183
        // is the field actually there?
14184
0
        if (offset >= length)
14185
0
        {
14186
0
            proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_encoding_error, tvb, 0, length);
14187
0
            return tvb_reported_length(tvb);
14188
0
        }
14189
14190
        // all is well, add the field
14191
0
        hf = proto_registrar_get_nth(*fields[i]);
14192
0
        int len = hf->type == FT_UINT8  ? 1 :
14193
0
                  hf->type == FT_UINT24 ? 3 :
14194
0
                  hf->type == FT_UINT32 ? 4 : 0;
14195
0
        proto_tree_add_item(tree, *fields[i], tvb, offset, len, ENC_NA);
14196
0
        offset += len;
14197
0
    }
14198
14199
0
    return offset;
14200
0
}
14201
14202
static const value_string nokia_l2tp_params_algorithm_vals[] = {
14203
    {0, "Weighted Access"},
14204
    {1, "Weighted Random"},
14205
    {2, "Existing First"},
14206
    {0, NULL}
14207
};
14208
14209
static const value_string nokia_l2tp_params_avp_hiding_vals[] = {
14210
    {0, "Nothing"},
14211
    {1, "Sensitive Only"},
14212
    {2, "All"},
14213
    {0, NULL}
14214
};
14215
14216
static const value_string nokia_l2tp_params_never_always[] = {
14217
    {0, "Never"},
14218
    {1, "Always"},
14219
    {0, NULL}
14220
};
14221
14222
static const value_string nokia_l2tp_params_infinite[] = {
14223
    {0xffffff, "Infinite"},
14224
    {0, NULL}
14225
};
14226
14227
static int dissect_pfcp_nokia_l2tp_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14228
0
{
14229
0
    static int * const flags[] = {
14230
0
        &hf_pfcp_nokia_l2tp_params_flags_b24_algorithm,
14231
0
        &hf_pfcp_nokia_l2tp_params_flags_b25_avp_hiding,
14232
0
        &hf_pfcp_nokia_l2tp_params_flags_b26_challenge,
14233
0
        &hf_pfcp_nokia_l2tp_params_flags_b27_df_bit,
14234
0
        &hf_pfcp_nokia_l2tp_params_flags_b28_preference,
14235
0
        &hf_pfcp_nokia_l2tp_params_flags_b29_session_limit,
14236
0
        &hf_pfcp_nokia_l2tp_params_flags_b30_idle_timeout,
14237
0
        &hf_pfcp_nokia_l2tp_params_flags_b31_hello_interval,
14238
0
        &hf_pfcp_nokia_l2tp_params_flags_b16_destruct_timeout,
14239
0
        &hf_pfcp_nokia_l2tp_params_flags_b17_max_retries_estab,
14240
0
        &hf_pfcp_nokia_l2tp_params_flags_b18_max_retries_not_estab,
14241
0
        &hf_pfcp_nokia_l2tp_params_flags_b19_rx_window_size,
14242
0
        NULL
14243
0
    };
14244
0
    static int * const fields[] = {
14245
0
        &hf_pfcp_nokia_l2tp_params_algorithm,
14246
0
        &hf_pfcp_nokia_l2tp_params_avp_hiding,
14247
0
        &hf_pfcp_nokia_l2tp_params_challenge,
14248
0
        &hf_pfcp_nokia_l2tp_params_df_bit,
14249
0
        &hf_pfcp_nokia_l2tp_params_preference,
14250
0
        &hf_pfcp_nokia_l2tp_params_session_limit,
14251
0
        &hf_pfcp_nokia_l2tp_params_idle_timeout,
14252
0
        &hf_pfcp_nokia_l2tp_params_hello_interval,
14253
0
        &hf_pfcp_nokia_l2tp_params_destruct_timeout,
14254
0
        &hf_pfcp_nokia_l2tp_params_max_retries_estab,
14255
0
        &hf_pfcp_nokia_l2tp_params_max_retries_not_estab,
14256
0
        &hf_pfcp_nokia_l2tp_params_rx_window_size,
14257
0
        NULL
14258
0
    };
14259
14260
0
    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);
14261
0
}
14262
14263
static int dissect_pfcp_nokia_l2tp_ids(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14264
0
{
14265
0
    uint32_t local_tunnel, remote_tunnel, local_session, remote_session, call_serial_number;
14266
14267
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_local_tunnel_id  , tvb, 0, 2, ENC_BIG_ENDIAN, &local_tunnel);
14268
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_remote_tunnel_id , tvb, 2, 2, ENC_BIG_ENDIAN, &remote_tunnel);
14269
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_local_session_id , tvb, 4, 2, ENC_BIG_ENDIAN, &local_session);
14270
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_remote_session_id, tvb, 6, 2, ENC_BIG_ENDIAN, &remote_session);
14271
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_l2tp_call_serial_num  , tvb, 8, 4, ENC_BIG_ENDIAN, &call_serial_number);
14272
14273
0
    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);
14274
14275
0
    return 12;
14276
0
}
14277
14278
static int dissect_pfcp_nokia_snat_inside_ip(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14279
0
{
14280
0
    proto_tree_add_item(tree, hf_pfcp_nokia_snat_inside_ipv4_address, tvb, 0, 4, ENC_BIG_ENDIAN);
14281
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %s", tvb_ip_to_str(pinfo->pool, tvb, 0));
14282
14283
0
    return 4;
14284
0
}
14285
14286
static int dissect_pfcp_nokia_access_line_circuit_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14287
0
{
14288
0
    proto_tree_add_item(tree, hf_pfcp_nokia_access_line_circuit_id, tvb, 0, -1, ENC_NA);
14289
14290
0
    return tvb_reported_length(tvb);
14291
0
}
14292
14293
static int dissect_pfcp_nokia_access_line_remote_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14294
0
{
14295
0
    proto_tree_add_item(tree, hf_pfcp_nokia_access_line_remote_id, tvb, 0, -1, ENC_NA);
14296
14297
0
    return tvb_reported_length(tvb);
14298
0
}
14299
14300
static int dissect_pfcp_nokia_access_line_params(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14301
0
{
14302
0
    static int * const flags[] = {
14303
0
        &hf_pfcp_nokia_access_line_params_flags_b24_act_up,
14304
0
        &hf_pfcp_nokia_access_line_params_flags_b25_act_down,
14305
0
        &hf_pfcp_nokia_access_line_params_flags_b26_min_up,
14306
0
        &hf_pfcp_nokia_access_line_params_flags_b27_min_down,
14307
0
        &hf_pfcp_nokia_access_line_params_flags_b28_att_up,
14308
0
        &hf_pfcp_nokia_access_line_params_flags_b29_att_down,
14309
0
        &hf_pfcp_nokia_access_line_params_flags_b30_max_up,
14310
0
        &hf_pfcp_nokia_access_line_params_flags_b31_max_down,
14311
0
        &hf_pfcp_nokia_access_line_params_flags_b16_min_up_lp,
14312
0
        &hf_pfcp_nokia_access_line_params_flags_b17_min_down_lp,
14313
0
        &hf_pfcp_nokia_access_line_params_flags_b18_max_inter_delay_up,
14314
0
        &hf_pfcp_nokia_access_line_params_flags_b19_act_inter_delay_up,
14315
0
        &hf_pfcp_nokia_access_line_params_flags_b20_max_inter_delay_down,
14316
0
        &hf_pfcp_nokia_access_line_params_flags_b21_act_inter_delay_down,
14317
0
        &hf_pfcp_nokia_access_line_params_flags_b22_access_loop_encap,
14318
0
        &hf_pfcp_nokia_access_line_params_flags_b23_iw_session,
14319
0
        NULL
14320
0
    };
14321
0
    static int * const fields[] = {
14322
0
        &hf_pfcp_nokia_access_line_params_act_up,
14323
0
        &hf_pfcp_nokia_access_line_params_act_down,
14324
0
        &hf_pfcp_nokia_access_line_params_min_up,
14325
0
        &hf_pfcp_nokia_access_line_params_min_down,
14326
0
        &hf_pfcp_nokia_access_line_params_att_up,
14327
0
        &hf_pfcp_nokia_access_line_params_att_down,
14328
0
        &hf_pfcp_nokia_access_line_params_max_up,
14329
0
        &hf_pfcp_nokia_access_line_params_max_down,
14330
0
        &hf_pfcp_nokia_access_line_params_min_up_lp,
14331
0
        &hf_pfcp_nokia_access_line_params_min_down_lp,
14332
0
        &hf_pfcp_nokia_access_line_params_max_inter_delay_up,
14333
0
        &hf_pfcp_nokia_access_line_params_act_inter_delay_up,
14334
0
        &hf_pfcp_nokia_access_line_params_max_inter_delay_down,
14335
0
        &hf_pfcp_nokia_access_line_params_act_inter_delay_down,
14336
0
        &hf_pfcp_nokia_access_line_params_access_loop_encap,
14337
0
        NULL
14338
0
    };
14339
14340
0
    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);
14341
0
}
14342
14343
static int dissect_pfcp_nokia_acct_session_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14344
0
{
14345
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_acct_session_id);
14346
0
}
14347
14348
static int dissect_pfcp_nokia_fsg_template(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14349
0
{
14350
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_fsg_template_name);
14351
0
}
14352
14353
static int dissect_pfcp_nokia_up_profiles(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14354
0
{
14355
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_up_profile);
14356
0
}
14357
14358
static int dissect_pfcp_nokia_uli(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14359
0
{
14360
0
    return call_dissector(gtpv2_uli_handle, tvb, pinfo, tree);
14361
0
}
14362
14363
static int dissect_pfcp_nokia_default_qos_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14364
0
{
14365
0
    uint32_t id;
14366
14367
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_default_qos_id, tvb, 0, 1, ENC_BIG_ENDIAN, &id);
14368
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %u", id);
14369
14370
0
    return 1;
14371
0
}
14372
14373
static int dissect_pfcp_nokia_serving_node_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14374
0
{
14375
0
    unsigned offset = 0;
14376
0
    uint64_t serving_node_id_flags_val;
14377
0
    bool firstField = true;
14378
14379
0
    static int * const pfcp_serving_node_id_flags[] = {
14380
0
        &hf_pfcp_spare_b7_b3,
14381
0
        &hf_pfcp_nokia_serving_node_id_flg_b2_uuid,
14382
0
        &hf_pfcp_nokia_serving_node_id_flg_b1_v6,
14383
0
        &hf_pfcp_nokia_serving_node_id_flg_b0_v4,
14384
0
        NULL
14385
0
    };
14386
14387
    /* Octet 7  Spare  Spare  Spare  Spare  Spare  UUID  V6  V4 */
14388
0
    proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_nokia_serving_node_id_flags,
14389
0
        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);
14390
0
    offset++;
14391
14392
    /* The following flags are coded within Octet 5:
14393
     * Bit 1 - V4: If this bit is set to "1", then the IPv4 address field shall be present,
14394
     *         otherwise the IPv4 address field shall not be present.
14395
     * Bit 2 - V6: If this bit is set to "1", then the IPv6 address field shall be present,
14396
     *         otherwise the IPv6 address field shall not be present.
14397
     * Bit 3 - UUID: If this bit is set to "1", then the UUID field shall be present,
14398
     *         otherwise the UUID field shall not be present.
14399
     */
14400
0
    if (serving_node_id_flags_val & 0x1) {
14401
        /* 0 to 3    IPv4 address */
14402
0
        proto_tree_add_item(tree, hf_pfcp_nokia_serving_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
14403
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s IPv4 %s", firstField ? " :" : ",", tvb_ip_to_str(pinfo->pool, tvb, offset));
14404
0
        firstField = false;
14405
0
        offset += 4;
14406
0
    }
14407
0
    if (serving_node_id_flags_val & 0x2) {
14408
        /* m to (m+15)   IPv6 address */
14409
0
        proto_tree_add_item(tree, hf_pfcp_nokia_serving_node_id_ipv6, tvb, offset, 16, ENC_NA);
14410
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s IPv6 %s", firstField ? " :" : ",", tvb_ip6_to_str(pinfo->pool, tvb, offset));
14411
0
        firstField = false;
14412
0
        offset += 16;
14413
0
    }
14414
0
    if (serving_node_id_flags_val & 0x4) {
14415
        /* p to (p+15)   UUID */
14416
0
        e_guid_t guid;
14417
14418
0
        proto_tree_add_item(tree, hf_pfcp_nokia_serving_node_id_uuid, tvb, offset, 16, ENC_BIG_ENDIAN);
14419
0
        tvb_get_guid(tvb, offset, &guid, ENC_BIG_ENDIAN);
14420
0
        proto_item_append_text(proto_tree_get_parent(tree), "%s UUID %s", firstField ? " :" : ",", guid_to_str(pinfo->pool, &guid));
14421
0
        offset += 16;
14422
0
    }
14423
14424
0
    return offset;
14425
0
}
14426
14427
static int dissect_pfcp_nokia_pcc_rule_name(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14428
0
{
14429
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_pcc_rule_name);
14430
0
}
14431
14432
static int dissect_pfcp_nokia_calltrace_profile(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14433
0
{
14434
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_calltrace_profile);
14435
0
}
14436
14437
static int dissect_pfcp_nokia_custom_charging_group(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
14438
0
{
14439
0
    return dissect_pfcp_string_ie(tvb, pinfo, tree, hf_pfcp_nokia_custom_charging_group);
14440
0
}
14441
14442
static int dissect_pfcp_nokia_lpt_present(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14443
0
{
14444
0
    static int * const flags[] = {
14445
0
        &hf_pfcp_spare_b7_b1,
14446
0
        &hf_pfcp_nokia_lpt_present_b0,
14447
0
        NULL
14448
0
    };
14449
14450
0
    proto_tree_add_bitmask_list(tree, tvb, 0, 1, flags, ENC_BIG_ENDIAN);
14451
14452
0
    return 1;
14453
0
}
14454
14455
static int dissect_pfcp_nokia_content_filtering_policy_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14456
0
{
14457
0
    uint32_t id;
14458
14459
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_content_filtering_policy_id, tvb, 0, 4, ENC_BIG_ENDIAN, &id);
14460
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %u", id);
14461
14462
0
    return 4;
14463
0
}
14464
14465
static int
14466
dissect_pfcp_nokia_dropped_volume_measurement(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14467
0
{
14468
0
    unsigned offset = 0;
14469
0
    uint64_t flags;
14470
14471
0
    static int * const ie_flags[] = {
14472
0
        &hf_pfcp_spare_b7_b6,
14473
0
        &hf_pfcp_nokia_dropped_volume_measurement_b5_dlnop,
14474
0
        &hf_pfcp_nokia_dropped_volume_measurement_b4_ulnop,
14475
0
        &hf_pfcp_nokia_dropped_volume_measurement_b3_tonop,
14476
0
        &hf_pfcp_nokia_dropped_volume_measurement_b2_dlvol,
14477
0
        &hf_pfcp_nokia_dropped_volume_measurement_b1_ulvol,
14478
0
        &hf_pfcp_nokia_dropped_volume_measurement_b0_tovol,
14479
0
        NULL
14480
0
    };
14481
    /* Octet 5  Spare   DLNOP   ULNOP   TONOP   DLVOL   ULVOL   TOVOL*/
14482
0
    proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_nokia_dropped_volume_measurement,
14483
0
        ett_pfcp_nokia_dropped_volume_measurement, ie_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT, &flags);
14484
0
    offset += 1;
14485
14486
0
    if ((flags & 0x1)) {
14487
        /* m to (m+7)   Total Volume */
14488
0
        proto_tree_add_item(tree, hf_pfcp_nokia_drop_vol_meas_tovol, tvb, offset, 8, ENC_BIG_ENDIAN);
14489
0
        offset += 8;
14490
0
    }
14491
0
    if ((flags & 0x2)) {
14492
        /* p to (p+7)   Uplink Volume */
14493
0
        proto_tree_add_item(tree, hf_pfcp_nokia_drop_vol_meas_ulvol, tvb, offset, 8, ENC_BIG_ENDIAN);
14494
0
        offset += 8;
14495
0
    }
14496
0
    if ((flags & 0x4)) {
14497
        /*q to (q+7)    Downlink Volume */
14498
0
        proto_tree_add_item(tree, hf_pfcp_nokia_drop_vol_meas_dlvol, tvb, offset, 8, ENC_BIG_ENDIAN);
14499
0
        offset += 8;
14500
0
    }
14501
0
    if ((flags & 0x8)) {
14502
        /* r to (r+7)   Total Number of Packets */
14503
0
        proto_tree_add_item(tree, hf_pfcp_nokia_drop_vol_meas_tonop, tvb, offset, 8, ENC_BIG_ENDIAN);
14504
0
        offset += 8;
14505
0
    }
14506
0
    if ((flags & 0x10)) {
14507
        /* s to (s+7)   Uplink Number of Packets */
14508
0
        proto_tree_add_item(tree, hf_pfcp_nokia_drop_vol_meas_ulnop, tvb, offset, 8, ENC_BIG_ENDIAN);
14509
0
        offset += 8;
14510
0
    }
14511
0
    if ((flags & 0x20)) {
14512
        /*t to (t+7)    Downlink Number of Packets */
14513
0
        proto_tree_add_item(tree, hf_pfcp_nokia_drop_vol_meas_dlnop, tvb, offset, 8, ENC_BIG_ENDIAN);
14514
0
        offset += 8;
14515
0
    }
14516
14517
0
    return offset;
14518
0
}
14519
14520
static int
14521
dissect_pfcp_nokia_health_report_interval(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14522
0
{
14523
0
    uint32_t interval;
14524
14525
0
    proto_tree_add_item_ret_uint(tree, hf_pfcp_nokia_health_report_interval, tvb, 0, 4, ENC_BIG_ENDIAN, &interval);
14526
0
    proto_item_append_text(proto_tree_get_parent(tree), " : %us", interval);
14527
14528
0
    return 4;
14529
0
}
14530
14531
static int dissect_pfcp_nokia_ipv6_lla(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14532
0
{
14533
0
    ws_in6_addr lla = {0};
14534
14535
0
    lla.bytes[0] = 0xfe;
14536
0
    lla.bytes[1] = 0x80;
14537
0
    for (unsigned i = 0; i < 8; i++) {
14538
0
        lla.bytes[8 + i] = tvb_get_uint8(tvb, i);
14539
0
    }
14540
14541
0
    proto_tree_add_ipv6(tree, hf_pfcp_nokia_ipv6_lla, tvb, 0, 8, &lla);
14542
14543
0
    return 8;
14544
0
}
14545
14546
static int dissect_pfcp_nokia_periodic_shcv(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, void *data _U_)
14547
0
{
14548
0
    proto_tree_add_item(tree, hf_pfcp_nokia_periodic_shcv_duration, tvb, 0, 3, ENC_BIG_ENDIAN);
14549
0
    proto_tree_add_item(tree, hf_pfcp_nokia_periodic_shcv_retry_count, tvb, 3, 1, ENC_BIG_ENDIAN);
14550
0
    proto_tree_add_item(tree, hf_pfcp_nokia_periodic_shcv_timeout, tvb, 4, 1, ENC_BIG_ENDIAN);
14551
14552
0
    return 5;
14553
0
}
14554
14555
static pfcp_generic_ie_t pfcp_nokia_ies[] = {
14556
    {VENDOR_NOKIA, 32774, "UP Aggregate Route",                dissect_pfcp_grouped_ie_wrapper, -1},
14557
    {VENDOR_NOKIA, 32775, "SAP Template",                      dissect_pfcp_nokia_sap_template, -1},
14558
    {VENDOR_NOKIA, 32776, "Group Interface Template",          dissect_pfcp_nokia_group_if_template, -1},
14559
    {VENDOR_NOKIA, 32777, "State Id",                          dissect_pfcp_nokia_session_state_id, -1},
14560
    {VENDOR_NOKIA, 32778, "Detailed Statistics",               dissect_pfcp_nokia_detailed_statistics, -1},
14561
    {VENDOR_NOKIA, 32779, "Detailed Error",                    dissect_pfcp_nokia_detailed_error, -1},
14562
    {VENDOR_NOKIA, 32780, "Qos Override",                      dissect_pfcp_nokia_qos_override, -1},
14563
    {VENDOR_NOKIA, 32781, "Measurement Information",           dissect_pfcp_nokia_measurement_information, -1},
14564
    {VENDOR_NOKIA, 32783, "PFCPSMReq-Flags",                   dissect_pfcp_nokia_pfpsmreq_flags, -1},
14565
    {VENDOR_NOKIA, 32786, "CP Function Features",              dissect_pfcp_nokia_cp_function_features, -1},
14566
    {VENDOR_NOKIA, 32787, "UP Function Features",              dissect_pfcp_nokia_up_function_features, -1},
14567
    {VENDOR_NOKIA, 32788, "Create Filter Override",            dissect_pfcp_nokia_filter_override, -1},
14568
    {VENDOR_NOKIA, 32789, "Delete Filter Override",            dissect_pfcp_nokia_filter_override, -1},
14569
    {VENDOR_NOKIA, 32790, "Intermediate Destination",          dissect_pfcp_nokia_intermediate_destination, -1},
14570
    {VENDOR_NOKIA, 32791, "NAT ISA Members",                   dissect_pfcp_nokia_nat_isa_members, -1},
14571
    {VENDOR_NOKIA, 32797, "PFCPHB-Flags",                      dissect_pfcp_nokia_pfcphb_flags, -1},
14572
    {VENDOR_NOKIA, 32800, "L2TP First Rx LCP Conf Request",    dissect_pfcp_nokia_l2tp_lcp_options, -1},
14573
    {VENDOR_NOKIA, 32801, "L2TP Last Tx LCP Conf Request",     dissect_pfcp_nokia_l2tp_lcp_options, -1},
14574
    {VENDOR_NOKIA, 32802, "L2TP Last Rx LCP Conf Request",     dissect_pfcp_nokia_l2tp_lcp_options, -1},
14575
    {VENDOR_NOKIA, 32803, "L2TP Auth Type",                    dissect_pfcp_nokia_l2tp_auth_type, -1},
14576
    {VENDOR_NOKIA, 32804, "L2TP Auth Name",                    dissect_pfcp_nokia_l2tp_auth_name, -1},
14577
    {VENDOR_NOKIA, 32805, "L2TP Auth Id",                      dissect_pfcp_nokia_l2tp_auth_id, -1},
14578
    {VENDOR_NOKIA, 32806, "L2TP Auth Challenge",               dissect_pfcp_nokia_l2tp_auth_challenge, -1},
14579
    {VENDOR_NOKIA, 32807, "L2TP Auth Response",                dissect_pfcp_nokia_l2tp_auth_response, -1},
14580
    {VENDOR_NOKIA, 32808, "L2TP Tunnel",                       dissect_pfcp_grouped_ie_wrapper, -1},
14581
    {VENDOR_NOKIA, 32809, "L2TP Client Endpoint",              dissect_pfcp_nokia_l2tp_endpoint, -1},
14582
    {VENDOR_NOKIA, 32810, "L2TP Server Endpoint",              dissect_pfcp_nokia_l2tp_endpoint, -1},
14583
    {VENDOR_NOKIA, 32811, "L2TP Client Auth Id",               dissect_pfcp_nokia_l2tp_client_auth_id, -1},
14584
    {VENDOR_NOKIA, 32812, "L2TP Server Auth Id",               dissect_pfcp_nokia_l2tp_server_auth_id, -1},
14585
    {VENDOR_NOKIA, 32813, "L2TP Password",                     dissect_pfcp_nokia_l2tp_password, -1},
14586
    {VENDOR_NOKIA, 32814, "L2TP Assignment Id",                dissect_pfcp_nokia_l2tp_assignment_id, -1},
14587
    {VENDOR_NOKIA, 32815, "L2TP Private Group Id",             dissect_pfcp_nokia_l2tp_private_group_id, -1},
14588
    {VENDOR_NOKIA, 32816, "L2TP Parameters",                   dissect_pfcp_nokia_l2tp_parameters, -1},
14589
    {VENDOR_NOKIA, 32817, "L2TP Ids",                          dissect_pfcp_nokia_l2tp_ids, -1},
14590
    {VENDOR_NOKIA, 32819, "SNAT Inside IP",                    dissect_pfcp_nokia_snat_inside_ip, -1},
14591
    {VENDOR_NOKIA, 32820, "Access Line Circuit Id",            dissect_pfcp_nokia_access_line_circuit_id, -1},
14592
    {VENDOR_NOKIA, 32821, "Access Line Remote Id",             dissect_pfcp_nokia_access_line_remote_id, -1},
14593
    {VENDOR_NOKIA, 32822, "Access Line Params",                dissect_pfcp_nokia_access_line_params, -1},
14594
    {VENDOR_NOKIA, 32823, "Accounting Session Id",             dissect_pfcp_nokia_acct_session_id, -1},
14595
    {VENDOR_NOKIA, 32830, "FSG Template",                      dissect_pfcp_nokia_fsg_template, -1},
14596
    {VENDOR_NOKIA, 32832, "UP Profiles",                       dissect_pfcp_nokia_up_profiles, -1},
14597
    {VENDOR_NOKIA, 32833, "User Location Information",         dissect_pfcp_nokia_uli, -1},
14598
    {VENDOR_NOKIA, 32834, "Default Qos Id",                    dissect_pfcp_nokia_default_qos_id, -1},
14599
    {VENDOR_NOKIA, 32835, "Serving Node Id",                   dissect_pfcp_nokia_serving_node_id, -1},
14600
    {VENDOR_NOKIA, 32836, "PCC Rule Name",                     dissect_pfcp_nokia_pcc_rule_name, -1},
14601
    {VENDOR_NOKIA, 32837, "Calltrace Profile",                 dissect_pfcp_nokia_calltrace_profile, -1},
14602
    {VENDOR_NOKIA, 32838, "Custom Charging Group",             dissect_pfcp_nokia_custom_charging_group, -1},
14603
    {VENDOR_NOKIA, 32839, "LPT Present",                       dissect_pfcp_nokia_lpt_present, -1},
14604
    {VENDOR_NOKIA, 32840, "Content Filtering Policy Id",       dissect_pfcp_nokia_content_filtering_policy_id, -1},
14605
    {VENDOR_NOKIA, 32841, "Dropped Volume Measurement",        dissect_pfcp_nokia_dropped_volume_measurement, -1},
14606
    {VENDOR_NOKIA, 32842, "Health Report Interval",            dissect_pfcp_nokia_health_report_interval, -1},
14607
    {VENDOR_NOKIA, 32852, "IPv6 LLA",                          dissect_pfcp_nokia_ipv6_lla, -1},
14608
    {VENDOR_NOKIA, 32853, "SHCV",                              dissect_pfcp_grouped_ie_wrapper, -1},
14609
    {VENDOR_NOKIA, 32854, "Periodic SHCV",                     dissect_pfcp_nokia_periodic_shcv, -1},
14610
};
14611
14612
static void
14613
pfcp_init(void)
14614
15
{
14615
15
    pfcp_session_count = 1;
14616
15
    pfcp_session_table = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), g_direct_hash, g_direct_equal);
14617
15
    pfcp_session_imsi = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), g_direct_hash, g_direct_equal);
14618
15
    pfcp_frame_map = wmem_map_new_autoreset(wmem_epan_scope(), wmem_file_scope(), pfcp_info_hash, pfcp_info_equal);
14619
15
}
14620
14621
void
14622
proto_register_pfcp(void)
14623
15
{
14624
14625
15
    static hf_register_info hf_pfcp[] = {
14626
14627
15
        { &hf_pfcp_msg_type,
14628
15
        { "Message Type", "pfcp.msg_type",
14629
15
        FT_UINT8, BASE_DEC | BASE_EXT_STRING, &pfcp_message_type_ext, 0x0,
14630
15
        NULL, HFILL }
14631
15
        },
14632
15
        { &hf_pfcp_msg_length,
14633
15
        { "Length", "pfcp.length",
14634
15
        FT_UINT16, BASE_DEC, NULL, 0x0,
14635
15
        NULL, HFILL }
14636
15
        },
14637
15
        { &hf_pfcp_hdr_flags,
14638
15
        { "Flags", "pfcp.flags",
14639
15
        FT_UINT8, BASE_HEX, NULL, 0x0,
14640
15
        NULL, HFILL }
14641
15
        },
14642
15
        { &hf_pfcp_version,
14643
15
        { "Version", "pfcp.version",
14644
15
        FT_UINT8, BASE_DEC, NULL, 0xe0,
14645
15
        NULL, HFILL }
14646
15
        },
14647
15
        { &hf_pfcp_fo_flag,
14648
15
        { "Follow On (FO)", "pfcp.fo_flag",
14649
15
        FT_BOOLEAN, 8, NULL, 0x04,
14650
15
        NULL, HFILL }
14651
15
        },
14652
15
        { &hf_pfcp_mp_flag,
14653
15
        { "Message Priority (MP)", "pfcp.mp_flag",
14654
15
        FT_BOOLEAN, 8, NULL, 0x02,
14655
15
        NULL, HFILL }
14656
15
        },
14657
15
        { &hf_pfcp_s_flag,
14658
15
        { "SEID (S)", "pfcp.s",
14659
15
        FT_BOOLEAN, 8, NULL, 0x01,
14660
15
        NULL, HFILL }
14661
15
        },
14662
15
        { &hf_pfcp_spare_b0,
14663
15
        { "Spare", "pfcp.spare_b0",
14664
15
        FT_UINT8, BASE_DEC, NULL, 0x01,
14665
15
        NULL, HFILL }
14666
15
        },
14667
15
        { &hf_pfcp_spare_b1,
14668
15
        { "Spare", "pfcp.spare_b1",
14669
15
        FT_UINT8, BASE_DEC, NULL, 0x02,
14670
15
        NULL, HFILL }
14671
15
        },
14672
15
        { &hf_pfcp_spare_b2,
14673
15
        { "Spare", "pfcp.spare_b2",
14674
15
        FT_UINT8, BASE_DEC, NULL, 0x04,
14675
15
        NULL, HFILL }
14676
15
        },
14677
15
        { &hf_pfcp_spare_b3,
14678
15
        { "Spare", "pfcp.spare_b3",
14679
15
        FT_UINT8, BASE_DEC, NULL, 0x08,
14680
15
        NULL, HFILL }
14681
15
        },
14682
15
        { &hf_pfcp_spare_b4,
14683
15
        { "Spare", "pfcp.spare_b4",
14684
15
        FT_UINT8, BASE_DEC, NULL, 0x10,
14685
15
        NULL, HFILL }
14686
15
        },
14687
15
        { &hf_pfcp_spare_b5,
14688
15
        { "Spare", "pfcp.spare_b5",
14689
15
        FT_UINT8, BASE_DEC, NULL, 0x20,
14690
15
        NULL, HFILL }
14691
15
        },
14692
15
        { &hf_pfcp_spare_b6,
14693
15
        { "Spare", "pfcp.spare_b6",
14694
15
        FT_UINT8, BASE_DEC, NULL, 0x40,
14695
15
        NULL, HFILL }
14696
15
        },
14697
15
        { &hf_pfcp_spare_b7,
14698
15
        { "Spare", "pfcp.spare_b7",
14699
15
        FT_UINT8, BASE_DEC, NULL, 0x80,
14700
15
        NULL, HFILL }
14701
15
        },
14702
15
        { &hf_pfcp_spare_b7_b6,
14703
15
        { "Spare", "pfcp.spare_b7_b6",
14704
15
        FT_UINT8, BASE_DEC, NULL, 0xc0,
14705
15
        NULL, HFILL }
14706
15
        },
14707
15
        { &hf_pfcp_spare_b7_b5,
14708
15
        { "Spare", "pfcp.spare_b7_b5",
14709
15
        FT_UINT8, BASE_DEC, NULL, 0xe0,
14710
15
        NULL, HFILL }
14711
15
        },
14712
15
        { &hf_pfcp_spare_b7_b4,
14713
15
        { "Spare", "pfcp.spare_b7_b4",
14714
15
        FT_UINT8, BASE_DEC, NULL, 0xf0,
14715
15
        NULL, HFILL }
14716
15
        },
14717
15
        { &hf_pfcp_spare_b7_b3,
14718
15
        { "Spare", "pfcp.spare_b7_b3",
14719
15
        FT_UINT8, BASE_DEC, NULL, 0xf8,
14720
15
        NULL, HFILL }
14721
15
        },
14722
15
        { &hf_pfcp_spare_b7_b2,
14723
15
        { "Spare", "pfcp.spare_b7_b2",
14724
15
        FT_UINT8, BASE_DEC, NULL, 0xfc,
14725
15
        NULL, HFILL }
14726
15
        },
14727
15
        { &hf_pfcp_spare_b7_b1,
14728
15
        { "Spare", "pfcp.spare_b7_b1",
14729
15
        FT_UINT8, BASE_DEC, NULL, 0xfe,
14730
15
        NULL, HFILL }
14731
15
        },
14732
15
        { &hf_pfcp_spare_oct,
14733
15
        { "Spare", "pfcp.spare_oct",
14734
15
        FT_UINT8, BASE_DEC, NULL, 0x0,
14735
15
        NULL, HFILL }
14736
15
        },
14737
15
        { &hf_pfcp_spare_h0,
14738
15
        { "Spare", "pfcp.spare_h0",
14739
15
        FT_UINT8, BASE_DEC, NULL, 0x0f,
14740
15
        NULL, HFILL }
14741
15
        },
14742
15
        { &hf_pfcp_spare_h1,
14743
15
        { "Spare", "pfcp.spare_h1",
14744
15
        FT_UINT8, BASE_DEC, NULL, 0xf0,
14745
15
        NULL, HFILL }
14746
15
        },
14747
15
        { &hf_pfcp_spare,
14748
15
        { "Spare", "pfcp.spare",
14749
15
        FT_UINT8, BASE_DEC, NULL, 0x0,
14750
15
        NULL, HFILL }
14751
15
        },
14752
15
        { &hf_pfcp_seid,
14753
15
        { "SEID", "pfcp.seid",
14754
15
        FT_UINT64, BASE_HEX, NULL, 0x0,
14755
15
        NULL, HFILL }
14756
15
        },
14757
15
        { &hf_pfcp_seqno,
14758
15
        { "Sequence Number", "pfcp.seqno",
14759
15
        FT_UINT24, BASE_DEC, NULL, 0x0,
14760
15
        NULL, HFILL }
14761
15
        },
14762
15
        { &hf_pfcp_response_in,
14763
15
        { "Response In", "pfcp.response_in",
14764
15
        FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
14765
15
        "The response to this PFCP request is in this frame", HFILL }
14766
15
        },
14767
15
        { &hf_pfcp_response_to,
14768
15
        { "Response To", "pfcp.response_to",
14769
15
        FT_FRAMENUM, BASE_NONE, FRAMENUM_TYPE(FT_FRAMENUM_RESPONSE), 0x0,
14770
15
        "This is a response to the PFCP request in this frame", HFILL }
14771
15
        },
14772
15
        { &hf_pfcp_response_time,
14773
15
        { "Response Time", "pfcp.response_time",
14774
15
        FT_RELATIVE_TIME, BASE_NONE, NULL, 0x0,
14775
15
        "The time between the Request and the Response", HFILL }
14776
15
        },
14777
15
        { &hf_pfcp_session,
14778
15
        { "Session", "pfcp.session",
14779
15
        FT_UINT32, BASE_DEC, NULL, 0,
14780
15
        NULL, HFILL }
14781
15
        },
14782
15
        { &hf_pfcp_mp,
14783
15
        { "Message Priority", "pfcp.mp",
14784
15
        FT_UINT24, BASE_DEC, NULL, 0xf0,
14785
15
        NULL, HFILL }
14786
15
        },
14787
15
        { &hf_pfcp_enterprise_id,
14788
15
        { "Enterprise ID",    "pfcp.enterprise_id",
14789
15
        FT_UINT16, BASE_ENTERPRISES, STRINGS_ENTERPRISES,
14790
15
        0x0, NULL, HFILL } },
14791
15
        { &hf_pfcp_enterprise_data,
14792
15
        { "Enterprise IE Data",    "pfcp.enterprise_ie_data",
14793
15
            FT_BYTES, BASE_NONE, NULL, 0,
14794
15
            NULL, HFILL }
14795
15
        },
14796
15
        { &hf_pfcp2_ie,
14797
15
        { "IE Type", "pfcp.ie_type",
14798
15
        FT_UINT16, BASE_DEC | BASE_EXT_STRING, &pfcp_ie_type_ext, 0x0,
14799
15
        NULL, HFILL }
14800
15
        },
14801
15
        { &hf_pfcp2_enterprise_ie,
14802
15
        { "Enterprise specific IE Type", "pfcp.enterprise_ie",
14803
15
        FT_UINT16, BASE_DEC, NULL, 0x0,
14804
15
        NULL, HFILL }
14805
15
        },
14806
15
        { &hf_pfcp2_ie_len,
14807
15
        { "IE Length", "pfcp.ie_len",
14808
15
        FT_UINT16, BASE_DEC, NULL, 0x0,
14809
15
        NULL, HFILL }
14810
15
        },
14811
15
        { &hf_pfcp_recovery_time_stamp,
14812
15
        { "Recovery Time Stamp", "pfcp.recovery_time_stamp",
14813
15
        FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
14814
15
        NULL, HFILL }
14815
15
        },
14816
15
        { &hf_pfcp2_cause,
14817
15
        { "Cause", "pfcp.cause",
14818
15
        FT_UINT8, BASE_DEC, VALS(pfcp_cause_vals), 0x0,
14819
15
        NULL, HFILL }
14820
15
        },
14821
15
        { &hf_pfcp_node_id_type,
14822
15
        { "Address Type", "pfcp.node_id_type",
14823
15
            FT_UINT8, BASE_DEC, VALS(pfcp_node_id_type_vals), 0x0f,
14824
15
            NULL, HFILL }
14825
15
        },
14826
15
        { &hf_pfcp_node_id_ipv4,
14827
15
        { "IPv4", "pfcp.node_id_ipv4",
14828
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
14829
15
            NULL, HFILL }
14830
15
        },
14831
15
        { &hf_pfcp_node_id_ipv6,
14832
15
        { "IPv6", "pfcp.node_id_ipv6",
14833
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
14834
15
            NULL, HFILL }
14835
15
        },
14836
15
        { &hf_pfcp_node_id_fqdn,
14837
15
        { "FQDN", "pfcp.node_id_fqdn",
14838
15
            FT_STRING, BASE_NONE, NULL, 0x0,
14839
15
            NULL, HFILL }
14840
15
        },
14841
15
        { &hf_pfcp_b0_v6,
14842
15
        { "V6 (IPv6)", "pfcp.f_seid_flags.v6",
14843
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
14844
15
            NULL, HFILL }
14845
15
        },
14846
15
        { &hf_pfcp_b1_v4,
14847
15
        { "V4 (IPv4)", "pfcp.f_seid_flags.v4",
14848
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
14849
15
            NULL, HFILL }
14850
15
        },
14851
15
        { &hf_pfcp_f_seid_ipv4,
14852
15
        { "IPv4 address", "pfcp.f_seid.ipv4",
14853
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
14854
15
            NULL, HFILL }
14855
15
        },
14856
15
        { &hf_pfcp_f_seid_ipv6,
14857
15
        { "IPv6 address", "pfcp.f_seid.ipv6",
14858
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
14859
15
            NULL, HFILL }
14860
15
        },
14861
15
        { &hf_pfcp_pdr_id,
14862
15
        { "Rule ID", "pfcp.pdr_id",
14863
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
14864
15
            NULL, HFILL }
14865
15
        },
14866
15
        { &hf_pfcp_precedence,
14867
15
        { "Precedence", "pfcp.precedence",
14868
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
14869
15
            NULL, HFILL }
14870
15
        },
14871
15
        { &hf_pfcp_source_interface,
14872
15
        { "Source Interface", "pfcp.source_interface",
14873
15
            FT_UINT8, BASE_DEC, VALS(pfcp_source_interface_vals), 0x0f,
14874
15
            NULL, HFILL }
14875
15
        },
14876
15
        { &hf_pfcp_fteid_flg_spare,
14877
15
        { "Spare", "pfcp.fteid_flg.spare",
14878
15
            FT_UINT8, BASE_DEC, NULL, 0xf0,
14879
15
            NULL, HFILL }
14880
15
        },
14881
15
        { &hf_pfcp_fteid_flg_b3_ch_id,
14882
15
        { "CHID (CHOOSE_ID)", "pfcp.f_teid_flags.ch_id",
14883
15
            FT_BOOLEAN, 8, NULL, 0x08,
14884
15
            NULL, HFILL }
14885
15
        },
14886
15
        { &hf_pfcp_fteid_flg_b2_ch,
14887
15
        { "CH (CHOOSE)", "pfcp.f_teid_flags.ch",
14888
15
            FT_BOOLEAN, 8, NULL, 0x04,
14889
15
            NULL, HFILL }
14890
15
        },
14891
15
        { &hf_pfcp_fteid_flg_b1_v6,
14892
15
        { "V6 (IPv6)", "pfcp.f_teid_flags.v6",
14893
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
14894
15
            NULL, HFILL }
14895
15
        },
14896
15
        { &hf_pfcp_fteid_flg_b0_v4,
14897
15
        { "V4 (IPv4)", "pfcp.f_teid_flags.v4",
14898
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
14899
15
            NULL, HFILL }
14900
15
        },
14901
15
        { &hf_pfcp_f_teid_ch_id,
14902
15
        { "Choose Id", "pfcp.f_teid.choose_id",
14903
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
14904
15
            NULL, HFILL }
14905
15
        },
14906
15
        { &hf_pfcp_f_teid_teid,
14907
15
        { "TEID", "pfcp.f_teid.teid",
14908
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
14909
15
            NULL, HFILL }
14910
15
        },
14911
15
        { &hf_pfcp_f_teid_ipv4,
14912
15
        { "IPv4 address", "pfcp.f_teid.ipv4_addr",
14913
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
14914
15
            NULL, HFILL }
14915
15
        },
14916
15
        { &hf_pfcp_f_teid_ipv6,
14917
15
        { "IPv6 address", "pfcp.f_teid.ipv6_addr",
14918
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
14919
15
            NULL, HFILL }
14920
15
        },
14921
15
        { &hf_pfcp_network_instance,
14922
15
        { "Network Instance", "pfcp.network_instance",
14923
15
            FT_STRING, BASE_NONE, NULL, 0x0,
14924
15
            NULL, HFILL }
14925
15
        },
14926
15
        { &hf_pfcp_pdn_type,
14927
15
        { "PDN Type", "pfcp.pdn_type",
14928
15
            FT_UINT8, BASE_DEC, VALS(pfcp_pdn_type_vals), 0x7,
14929
15
            NULL, HFILL }
14930
15
        },
14931
15
        { &hf_pfcp_multiplier_value_digits,
14932
15
        { "Value Digits", "pfcp.multiplier.value_digits",
14933
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
14934
15
            NULL, HFILL }
14935
15
        },
14936
15
        { &hf_pfcp_multiplier_exponent,
14937
15
        { "Exponent", "pfcp.multiplier.exponent",
14938
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
14939
15
            NULL, HFILL }
14940
15
        },
14941
15
        { &hf_pfcp_failed_rule_id_type,
14942
15
        { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
14943
15
            FT_UINT8, BASE_DEC, VALS(pfcp_failed_rule_id_type_vals), 0x7,
14944
15
            NULL, HFILL }
14945
15
        },
14946
15
        { &hf_pfcp_time_quota_mechanism_bti_type,
14947
15
        { "Base Time Interval Type", "pfcp.time_quota_mechanism_bti_type",
14948
15
            FT_UINT8, BASE_DEC, VALS(pfcp_time_quota_mechanism_bti_type_vals), 0x3,
14949
15
            NULL, HFILL }
14950
15
        },
14951
15
        { &hf_pfcp_time_quota_mechanism_bti,
14952
15
        { "Base Time Interval", "pfcp.time_quota_mechanism_bti",
14953
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
14954
15
            NULL, HFILL }
14955
15
        },
14956
15
        { &hf_pfcp_ue_ip_address_flag_b0_v6,
14957
15
        { "V6 (IPv6)", "pfcp.ue_ip_address_flag.v6",
14958
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
14959
15
            NULL, HFILL }
14960
15
        },
14961
15
        { &hf_pfcp_ue_ip_address_flag_b1_v4,
14962
15
        { "V4 (IPv4)", "pfcp.ue_ip_address_flag.v4",
14963
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
14964
15
            NULL, HFILL }
14965
15
        },
14966
15
        { &hf_pfcp_ue_ip_address_flag_b2_sd,
14967
15
        { "S/D", "pfcp.ue_ip_address_flag.sd",
14968
15
            FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x04,
14969
15
            NULL, HFILL }
14970
15
        },
14971
15
        { &hf_pfcp_ue_ip_address_flag_b3_v6d,
14972
15
        { "IPv6D", "pfcp.ue_ip_address_flag.v6d",
14973
15
            FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x08,
14974
15
            NULL, HFILL }
14975
15
        },
14976
15
        { &hf_pfcp_ue_ip_address_flag_b4_chv4,
14977
15
        { "CHV4", "pfcp.ue_ip_address_flag.chv4",
14978
15
            FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x10,
14979
15
            NULL, HFILL }
14980
15
        },
14981
15
        { &hf_pfcp_ue_ip_address_flag_b5_chv6,
14982
15
        { "CHV6", "pfcp.ue_ip_address_flag.chv6",
14983
15
            FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x20,
14984
15
            NULL, HFILL }
14985
15
        },
14986
15
        { &hf_pfcp_ue_ip_address_flag_b6_v6pl,
14987
15
        { "IPV6PL", "pfcp.ue_ip_address_flag.v6pl",
14988
15
            FT_BOOLEAN, 8, TFS(&pfcp_ue_ip_add_sd_flag_vals), 0x40,
14989
15
            NULL, HFILL }
14990
15
        },
14991
15
        { &hf_pfcp_ue_ip_addr_ipv4,
14992
15
        { "IPv4 address", "pfcp.ue_ip_addr_ipv4",
14993
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
14994
15
            NULL, HFILL }
14995
15
        },
14996
15
        { &hf_pfcp_ue_ip_add_ipv6,
14997
15
        { "IPv6 address", "pfcp.ue_ip_addr_ipv6",
14998
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
14999
15
            NULL, HFILL }
15000
15
        },
15001
15
        { &hf_pfcp_ue_ip_add_ipv6_prefix_delegation_bits,
15002
15
        { "IPv6 Prefix Delegation Bits", "pfcp.ue_ip_addr_ipv6_prefix",
15003
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
15004
15
            NULL, HFILL }
15005
15
        },
15006
15
        { &hf_pfcp_ue_ip_add_ipv6_prefix_length,
15007
15
        { "IPv6 Prefix Length", "pfcp.ue_ip_addr_ipv6_prefix_length",
15008
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
15009
15
            NULL, HFILL }
15010
15
        },
15011
15
        { &hf_pfcp_application_id,
15012
15
        { "Application Identifier", "pfcp.application_id",
15013
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
15014
15
            NULL, HFILL }
15015
15
        },
15016
15
        { &hf_pfcp_application_id_str,
15017
15
        { "Application Identifier", "pfcp.application_id_str",
15018
15
            FT_STRING, BASE_NONE, NULL, 0x0,
15019
15
            NULL, HFILL }
15020
15
        },
15021
15
        { &hf_pfcp_sdf_filter_flags_b0_fd,
15022
15
        { "FD (Flow Description)", "pfcp.sdf_filter.fd",
15023
15
            FT_BOOLEAN, 8, NULL, 0x01,
15024
15
            NULL, HFILL }
15025
15
        },
15026
15
        { &hf_pfcp_sdf_filter_flags_b1_ttc,
15027
15
        { "TTC (ToS Traffic Class)", "pfcp.sdf_filter.ttc",
15028
15
            FT_BOOLEAN, 8, NULL, 0x02,
15029
15
            NULL, HFILL }
15030
15
        },
15031
15
        { &hf_pfcp_sdf_filter_flags_b2_spi,
15032
15
        { "SPI (Security Parameter Index)", "pfcp.sdf_filter.spi",
15033
15
            FT_BOOLEAN, 8, NULL, 0x04,
15034
15
            NULL, HFILL }
15035
15
        },
15036
15
        { &hf_pfcp_sdf_filter_flags_b3_fl,
15037
15
        { "FL (Flow Label)", "pfcp.sdf_filter.fl",
15038
15
            FT_BOOLEAN, 8, NULL, 0x08,
15039
15
            NULL, HFILL }
15040
15
        },
15041
15
        { &hf_pfcp_sdf_filter_flags_b4_bid,
15042
15
        { "BID (Bidirectional SDF Filter)", "pfcp.sdf_filter.bid",
15043
15
            FT_BOOLEAN, 8, NULL, 0x10,
15044
15
            NULL, HFILL }
15045
15
        },
15046
15
        { &hf_pfcp_flow_desc_len,
15047
15
        { "Length of Flow Description", "pfcp.flow_desc_len",
15048
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
15049
15
            NULL, HFILL }
15050
15
        },
15051
15
        { &hf_pfcp_flow_desc,
15052
15
        { "Flow Description", "pfcp.flow_desc",
15053
15
            FT_STRING, BASE_NONE, NULL, 0x0,
15054
15
            NULL, HFILL }
15055
15
        },
15056
15
        { &hf_pfcp_traffic_class,
15057
15
        { "ToS Traffic Class", "pfcp.traffic_class",
15058
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
15059
15
            NULL, HFILL }
15060
15
        },
15061
15
        { &hf_pfcp_traffic_mask,
15062
15
        { "Mask field", "pfcp.traffic_mask",
15063
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
15064
15
            NULL, HFILL }
15065
15
        },
15066
15
        { &hf_pfcp_traffic_dscp,
15067
15
            {"DSCP", "pfcp.traffic_dscp",
15068
15
            FT_STRING, BASE_NONE, NULL, 0x0,
15069
15
            NULL, HFILL}
15070
15
        },
15071
15
        { &hf_pfcp_spi,
15072
15
        { "Security Parameter Index", "pfcp.spi",
15073
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
15074
15
            NULL, HFILL }
15075
15
        },
15076
15
        { &hf_pfcp_flow_label_spare_bit,
15077
15
        { "Spare bit", "pfcp.flow_label_spare_bit",
15078
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
15079
15
            NULL, HFILL }
15080
15
        },
15081
15
        { &hf_pfcp_flow_label,
15082
15
        { "Flow Label", "pfcp.flow_label",
15083
15
            FT_UINT24, BASE_HEX, NULL, 0x0FFFFF,
15084
15
            NULL, HFILL }
15085
15
        },
15086
15
        { &hf_pfcp_sdf_filter_id,
15087
15
        { "SDF Filter ID", "pfcp.sdf_filter_id",
15088
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15089
15
            NULL, HFILL }
15090
15
        },
15091
15092
15
        { &hf_pfcp_out_hdr_desc,
15093
15
        { "Outer Header Removal Description", "pfcp.out_hdr_desc",
15094
15
            FT_UINT8, BASE_DEC, VALS(pfcp_out_hdr_desc_vals), 0x0,
15095
15
            NULL, HFILL }
15096
15
        },
15097
15
        { &hf_pfcp_gtpu_ext_hdr_del_b0_pdu_sess_cont,
15098
15
        { "PDU Session Container to be deleted", "pfcp.gtpu_ext_hdr_del.pdu_sess_cont",
15099
15
            FT_BOOLEAN, 8, NULL, 0x01,
15100
15
            NULL, HFILL }
15101
15
        },
15102
15
        { &hf_pfcp_far_id_flg,
15103
15
        { "Allocation type", "pfcp.far_id_flg",
15104
15
            FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs), 0x80000000,
15105
15
            NULL, HFILL }
15106
15
        },
15107
15
        { &hf_pfcp_far_id,
15108
15
        { "FAR ID", "pfcp.far_id",
15109
15
            FT_UINT32, BASE_DEC, NULL, 0x7fffffff,
15110
15
            NULL, HFILL }
15111
15
        },
15112
15
        { &hf_pfcp_urr_id_flg,
15113
15
        { "Allocation type", "pfcp.urr_id_flg",
15114
15
            FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs), 0x80000000,
15115
15
            NULL, HFILL }
15116
15
        },
15117
15
        { &hf_pfcp_urr_id,
15118
15
        { "URR ID", "pfcp.urr_id",
15119
15
            FT_UINT32, BASE_DEC, NULL, 0x7fffffff,
15120
15
            NULL, HFILL }
15121
15
        },
15122
15
        { &hf_pfcp_qer_id_flg,
15123
15
        { "Allocation type", "pfcp.qer_id_flg",
15124
15
            FT_BOOLEAN, 32, TFS(&pfcp_id_predef_dynamic_tfs), 0x80000000,
15125
15
            NULL, HFILL }
15126
15
        },
15127
15
        { &hf_pfcp_qer_id,
15128
15
        { "QER ID", "pfcp.qer_id",
15129
15
            FT_UINT32, BASE_DEC, NULL, 0x7fffffff,
15130
15
            NULL, HFILL }
15131
15
        },
15132
15
        { &hf_pfcp_predef_rules_name,
15133
15
        { "Predefined Rules Name", "pfcp.predef_rules_name",
15134
15
            FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
15135
15
            NULL, HFILL }
15136
15
        },
15137
15
        { &hf_pfcp_apply_action_flags_o5_b0_drop,
15138
15
        { "DROP (Drop)", "pfcp.apply_action.drop",
15139
15
            FT_BOOLEAN, 8, NULL, 0x01,
15140
15
            NULL, HFILL }
15141
15
        },
15142
15
        { &hf_pfcp_apply_action_flags_o5_b1_forw,
15143
15
        { "FORW (Forward)", "pfcp.apply_action.forw",
15144
15
            FT_BOOLEAN, 8, NULL, 0x02,
15145
15
            NULL, HFILL }
15146
15
        },
15147
15
        { &hf_pfcp_apply_action_flags_o5_b2_buff,
15148
15
        { "BUFF (Buffer)", "pfcp.apply_action.buff",
15149
15
            FT_BOOLEAN, 8, NULL, 0x04,
15150
15
            NULL, HFILL }
15151
15
        },
15152
15
        { &hf_pfcp_apply_action_flags_o5_b3_nocp,
15153
15
        { "NOCP (Notify the CP function)", "pfcp.apply_action.nocp",
15154
15
            FT_BOOLEAN, 8, NULL, 0x08,
15155
15
            NULL, HFILL }
15156
15
        },
15157
15
        { &hf_pfcp_apply_action_flags_o5_b4_dupl,
15158
15
        { "DUPL (Duplicate)", "pfcp.apply_action.dupl",
15159
15
            FT_BOOLEAN, 8, NULL, 0x10,
15160
15
            NULL, HFILL }
15161
15
        },
15162
15
        { &hf_pfcp_apply_action_flags_o5_b5_ipma,
15163
15
        { "IPMA (IP Multicast Accept)", "pfcp.apply_action.ipma",
15164
15
            FT_BOOLEAN, 8, NULL, 0x20,
15165
15
            NULL, HFILL }
15166
15
        },
15167
15
        { &hf_pfcp_apply_action_flags_o5_b6_ipmd,
15168
15
        { "IPMD (IP Multicast Deny)", "pfcp.apply_action.ipmd",
15169
15
            FT_BOOLEAN, 8, NULL, 0x40,
15170
15
            NULL, HFILL }
15171
15
        },
15172
15
        { &hf_pfcp_apply_action_flags_o5_b7_dfrt,
15173
15
        { "DFRT (Duplicate for Redundant Transmission)", "pfcp.apply_action.dfrt",
15174
15
            FT_BOOLEAN, 8, NULL, 0x80,
15175
15
            NULL, HFILL }
15176
15
        },
15177
15
        { &hf_pfcp_apply_action_flags_o6_b0_edrt,
15178
15
        { "EDRT (Eliminate Duplicate Packets for Redundant Transmission)", "pfcp.apply_action.edrt",
15179
15
            FT_BOOLEAN, 8, NULL, 0x01,
15180
15
            NULL, HFILL }
15181
15
        },
15182
15
        { &hf_pfcp_apply_action_flags_o6_b1_bdpn,
15183
15
        { "BDPN (Buffered Downlink Packet Notification)", "pfcp.apply_action.bdpn",
15184
15
            FT_BOOLEAN, 8, NULL, 0x02,
15185
15
            NULL, HFILL }
15186
15
        },
15187
15
        { &hf_pfcp_apply_action_flags_o6_b2_ddpn,
15188
15
        { "DDPN (Discarded Downlink Packet Notification)", "pfcp.apply_action.ddpn",
15189
15
            FT_BOOLEAN, 8, NULL, 0x04,
15190
15
            NULL, HFILL }
15191
15
        },
15192
15
        { &hf_pfcp_apply_action_flags_o6_b3_fssm,
15193
15
        { "FSSM (Forward packets to lower layer SSM)", "pfcp.apply_action.fssm",
15194
15
            FT_BOOLEAN, 8, NULL, 0x08,
15195
15
            NULL, HFILL }
15196
15
        },
15197
15
        { &hf_pfcp_apply_action_flags_o6_b4_mbsu,
15198
15
        { "MBSU (Forward and replicate MBS data using Unicast transport)", "pfcp.apply_action.mbsu",
15199
15
            FT_BOOLEAN, 8, NULL, 0x10,
15200
15
            NULL, HFILL }
15201
15
        },
15202
15203
15
        { &hf_pfcp_bar_id,
15204
15
        { "BAR ID", "pfcp.bar_id",
15205
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
15206
15
            NULL, HFILL }
15207
15
        },
15208
15
        { &hf_pfcp_fq_csid_node_id_type,
15209
15
        { "FQ-CSID Node-ID Type", "pfcp.fq_csid_node_id_type",
15210
15
            FT_UINT8, BASE_DEC, VALS(pfcp_fq_csid_node_id_type_vals), 0xf0,
15211
15
            NULL, HFILL }
15212
15
        },
15213
15
        { &hf_pfcp_num_csid,
15214
15
        { "Number of CSID", "pfcp.num_csid",
15215
15
            FT_UINT8, BASE_DEC, NULL, 0x0f,
15216
15
            NULL, HFILL }
15217
15
        },
15218
15
        { &hf_pfcp_fq_csid_node_id_ipv4,
15219
15
        { "Node-Address", "pfcp.q_csid_node_id.ipv4",
15220
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
15221
15
            NULL, HFILL }
15222
15
        },
15223
15
        { &hf_pfcp_fq_csid_node_id_ipv6,
15224
15
        { "Node-Address", "pfcp.q_csid_node_id.ipv6",
15225
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
15226
15
            NULL, HFILL }
15227
15
        },
15228
15
        { &hf_pfcp_fq_csid_node_id_mcc_mnc,
15229
15
        { "Node-Address MCC MNC", "pfcp.q_csid_node_id.mcc_mnc",
15230
15
            FT_UINT32, BASE_DEC, NULL, 0xfffff000,
15231
15
            NULL, HFILL }
15232
15
        },
15233
15
        { &hf_pfcp_fq_csid_node_id_int,
15234
15
        { "Node-Address Number", "pfcp.q_csid_node_id.int",
15235
15
            FT_UINT32, BASE_DEC, NULL, 0x00000fff,
15236
15
            NULL, HFILL }
15237
15
        },
15238
15
        { &hf_pfcp_fq_csid,
15239
15
        { "PDN Connection Set Identifier (CSID)", "pfcp.csid",
15240
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
15241
15
            NULL, HFILL }
15242
15
        },
15243
15
        { &hf_pfcp_fq_csid_node_type,
15244
15
        { "Node Type", "pfcp.fq_csid_node_type",
15245
15
            FT_UINT8, BASE_DEC, VALS(pfcp_fq_csid_node_type_vals), 0x0f,
15246
15
            NULL, HFILL }
15247
15
        },
15248
15
        { &hf_pfcp_measurement_period,
15249
15
        { "Measurement Period", "pfcp.measurement_period",
15250
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15251
15
            NULL, HFILL }
15252
15
        },
15253
15
        { &hf_pfcp_duration_measurement,
15254
15
        { "Duration", "pfcp.duration_measurement",
15255
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15256
15
            NULL, HFILL }
15257
15
        },
15258
15
        { &hf_pfcp_time_of_first_packet,
15259
15
        { "Time of First Packet", "pfcp.time_of_first_packet",
15260
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15261
15
            NULL, HFILL }
15262
15
        },
15263
15
        { &hf_pfcp_time_of_last_packet,
15264
15
        { "Time of Last Packet", "pfcp.time_of_last_packet",
15265
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15266
15
            NULL, HFILL }
15267
15
        },
15268
15
        { &hf_pfcp_dst_interface,
15269
15
        { "Interface", "pfcp.dst_interface",
15270
15
            FT_UINT8, BASE_DEC, VALS(pfcp_dst_interface_vals), 0x0f,
15271
15
            NULL, HFILL }
15272
15
        },
15273
15
        { &hf_pfcp_redirect_address_type,
15274
15
        { "Redirect Address Type", "pfcp.redirect_address_type",
15275
15
            FT_UINT8, BASE_DEC, VALS(pfcp_redirect_address_type_vals), 0x0f,
15276
15
            NULL, HFILL }
15277
15
        },
15278
15
        { &hf_pfcp_redirect_server_addr_len,
15279
15
        { "Redirect Server Address Length", "pfcp.redirect_server_addr_len",
15280
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
15281
15
            NULL, HFILL }
15282
15
        },
15283
15
        { &hf_pfcp_redirect_server_address,
15284
15
        { "Redirect Server Address", "pfcp.redirect_server_address",
15285
15
            FT_STRING, BASE_NONE, NULL, 0x0,
15286
15
            NULL, HFILL }
15287
15
        },
15288
15
        { &hf_pfcp_other_redirect_server_addr_len,
15289
15
        { "Other Redirect Server Address Length", "pfcp.other_redirect_server_addr_len",
15290
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
15291
15
            NULL, HFILL }
15292
15
        },
15293
15
        { &hf_pfcp_other_redirect_server_address,
15294
15
        { "Other Redirect Server Address", "pfcp.other_redirect_server_address",
15295
15
            FT_STRING, BASE_NONE, NULL, 0x0,
15296
15
            NULL, HFILL }
15297
15
        },
15298
15
        { &hf_pfcp_redirect_port,
15299
15
        { "Redirect Port", "pfcp.redirect_port",
15300
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
15301
15
            NULL, HFILL }
15302
15
        },
15303
15
        { &hf_pfcp_outer_hdr_desc_o5_b0_gtp_udp_ipv4,
15304
15
        { "GTP-U/UDP/IPv4", "pfcp.pfcp_outer_hdr_desc.gtpu_udp_ipv4",
15305
15
            FT_BOOLEAN, 16, NULL, 0x0100,
15306
15
            NULL, HFILL }
15307
15
        },
15308
15
        { &hf_pfcp_outer_hdr_desc_o5_b1_gtp_udp_ipv6,
15309
15
        { "GTP-U/UDP/IPv6", "pfcp.pfcp_outer_hdr_desc.gtpu_udp_ipv6",
15310
15
            FT_BOOLEAN, 16, NULL, 0x0200,
15311
15
            NULL, HFILL }
15312
15
        },
15313
15
        { &hf_pfcp_outer_hdr_desc_o5_b2_udp_ipv4,
15314
15
        { "UDP/IPv4", "pfcp.pfcp_outer_hdr_desc.udp_ipv4",
15315
15
            FT_BOOLEAN, 16, NULL, 0x0400,
15316
15
            NULL, HFILL }
15317
15
        },
15318
15
        { &hf_pfcp_outer_hdr_desc_o5_b3_udp_ipv6,
15319
15
        { "UDP/IPv6", "pfcp.pfcp_outer_hdr_desc.udp_ipv6",
15320
15
            FT_BOOLEAN, 16, NULL, 0x0800,
15321
15
            NULL, HFILL }
15322
15
        },
15323
15
        { &hf_pfcp_outer_hdr_desc_o5_b4_ipv4,
15324
15
        { "IPv4", "pfcp.pfcp_outer_hdr_desc.ipv4",
15325
15
            FT_BOOLEAN, 16, NULL, 0x1000,
15326
15
            NULL, HFILL }
15327
15
        },
15328
15
        { &hf_pfcp_outer_hdr_desc_o5_b5_ipv6,
15329
15
        { "IPv6", "pfcp.pfcp_outer_hdr_desc.ipv6",
15330
15
            FT_BOOLEAN, 16, NULL, 0x2000,
15331
15
            NULL, HFILL }
15332
15
        },
15333
15
        { &hf_pfcp_outer_hdr_desc_o5_b6_ctag,
15334
15
        { "C-TAG", "pfcp.pfcp_outer_hdr_desc.ctag",
15335
15
            FT_BOOLEAN, 16, NULL, 0x4000,
15336
15
            NULL, HFILL }
15337
15
        },
15338
15
        { &hf_pfcp_outer_hdr_desc_o5_b7_stag,
15339
15
        { "S-TAG", "pfcp.pfcp_outer_hdr_desc.stag",
15340
15
            FT_BOOLEAN, 16, NULL, 0x8000,
15341
15
            NULL, HFILL }
15342
15
        },
15343
15
        { &hf_pfcp_outer_hdr_desc_o6_b0_n19,
15344
15
        { "N19 Indication", "pfcp.pfcp_outer_hdr_desc.n19",
15345
15
            FT_BOOLEAN, 16, NULL, 0x0001,
15346
15
            NULL, HFILL }
15347
15
        },
15348
15
        { &hf_pfcp_outer_hdr_desc_o6_b1_n6,
15349
15
        { "N6 Indication", "pfcp.pfcp_outer_hdr_desc.n6",
15350
15
            FT_BOOLEAN, 16, NULL, 0x0002,
15351
15
            NULL, HFILL }
15352
15
        },
15353
15
        { &hf_pfcp_outer_hdr_desc_o6_b2_ssm_cteid,
15354
15
        { "Low Layer SSM and C-TEID", "pfcp.pfcp_outer_hdr_desc.ssm_cteid",
15355
15
            FT_BOOLEAN, 16, NULL, 0x0004,
15356
15
            NULL, HFILL }
15357
15
        },
15358
15
        { &hf_pfcp_outer_hdr_desc_o6_spare,
15359
15
        { "Spare", "pfcp.pfcp_outer_hdr_desc.spare",
15360
15
            FT_UINT16, BASE_DEC, NULL, 0x00f8,
15361
15
            NULL, HFILL }
15362
15
        },
15363
15
        { &hf_pfcp_outer_hdr_creation_teid,
15364
15
        { "TEID", "pfcp.outer_hdr_creation.teid",
15365
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
15366
15
            NULL, HFILL }
15367
15
        },
15368
15
        { &hf_pfcp_outer_hdr_creation_ipv4,
15369
15
        { "IPv4 Address", "pfcp.outer_hdr_creation.ipv4",
15370
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
15371
15
            NULL, HFILL }
15372
15
        },
15373
15
        { &hf_pfcp_outer_hdr_creation_ipv6,
15374
15
        { "IPv6 Address", "pfcp.outer_hdr_creation.ipv6",
15375
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
15376
15
            NULL, HFILL }
15377
15
        },
15378
15
        { &hf_pfcp_outer_hdr_creation_port,
15379
15
        { "Port Number", "pfcp.outer_hdr_creation.port",
15380
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
15381
15
            NULL, HFILL }
15382
15
        },
15383
15
        { &hf_pfcp_time_threshold,
15384
15
        { "Time Threshold", "pfcp.time_threshold",
15385
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15386
15
            NULL, HFILL }
15387
15
        },
15388
15
        { &hf_pfcp_forwarding_policy_id_len,
15389
15
        { "Forwarding Policy Identifier Length", "pfcp.forwarding_policy_id_len",
15390
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
15391
15
            NULL, HFILL }
15392
15
        },
15393
15
        { &hf_pfcp_forwarding_policy_id,
15394
15
        { "Forwarding Policy Identifier", "pfcp.forwarding_policy_id",
15395
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
15396
15
            NULL, HFILL }
15397
15
        },
15398
15
        { &hf_pfcp_measurement_method_flags_b0_durat,
15399
15
        { "DURAT (Duration)", "pfcp.measurement_method_flags.durat",
15400
15
            FT_BOOLEAN, 8, NULL, 0x01,
15401
15
            NULL, HFILL }
15402
15
        },
15403
15
        { &hf_pfcp_measurement_method_flags_b1_volume,
15404
15
        { "VOLUM (Volume)", "pfcp.measurement_method_flags.volume",
15405
15
            FT_BOOLEAN, 8, NULL, 0x02,
15406
15
            NULL, HFILL }
15407
15
        },
15408
15
        { &hf_pfcp_measurement_method_flags_b2_event,
15409
15
        { "EVENT (Event)", "pfcp.measurement_method_flags.event",
15410
15
            FT_BOOLEAN, 8, NULL, 0x04,
15411
15
            NULL, HFILL }
15412
15
        },
15413
15
        { &hf_pfcp_subsequent_time_threshold,
15414
15
        { "Subsequent Time Threshold", "pfcp.subsequent_time_threshold",
15415
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15416
15
            NULL, HFILL }
15417
15
        },
15418
15
        { &hf_pfcp_inactivity_detection_time,
15419
15
        { "Inactivity Detection Time", "pfcp.inactivity_detection_time",
15420
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15421
15
            NULL, HFILL }
15422
15
        },
15423
15
        { &hf_pfcp_monitoring_time,
15424
15
        { "Monitoring Time", "pfcp.monitoring_time",
15425
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15426
15
            NULL, HFILL }
15427
15
        },
15428
15
        { &hf_pfcp_reporting_triggers_o5_b0_perio,
15429
15
        { "PERIO (Periodic Reporting)", "pfcp.reporting_triggers_flags.perio",
15430
15
            FT_BOOLEAN, 8, NULL, 0x01,
15431
15
            NULL, HFILL }
15432
15
        },
15433
15
        { &hf_pfcp_reporting_triggers_o5_b1_volth,
15434
15
        { "VOLTH (Volume Threshold)", "pfcp.reporting_triggers_flags.volth",
15435
15
            FT_BOOLEAN, 8, NULL, 0x02,
15436
15
            NULL, HFILL }
15437
15
        },
15438
15
        { &hf_pfcp_reporting_triggers_o5_b2_timth,
15439
15
        { "TIMTH (Time Threshold)", "pfcp.reporting_triggers_flags.timth",
15440
15
            FT_BOOLEAN, 8, NULL, 0x04,
15441
15
            NULL, HFILL }
15442
15
        },
15443
15
        { &hf_pfcp_reporting_triggers_o5_b3_quhti,
15444
15
        { "QUHTI (Quota Holding Time)", "pfcp.reporting_triggers_flags.quhti",
15445
15
            FT_BOOLEAN, 8, NULL, 0x08,
15446
15
            NULL, HFILL }
15447
15
        },
15448
15
        { &hf_pfcp_reporting_triggers_o5_b4_start,
15449
15
        { "START (Start of Traffic)", "pfcp.reporting_triggers_flags.start",
15450
15
            FT_BOOLEAN, 8, NULL, 0x10,
15451
15
            NULL, HFILL }
15452
15
        },
15453
15
        { &hf_pfcp_reporting_triggers_o5_b5_stopt,
15454
15
        { "STOPT (Stop of Traffic)", "pfcp.reporting_triggers_flags.stopt",
15455
15
            FT_BOOLEAN, 8, NULL, 0x20,
15456
15
            NULL, HFILL }
15457
15
        },
15458
15
        { &hf_pfcp_reporting_triggers_o5_b6_droth,
15459
15
        { "DROTH (Dropped DL Traffic Threshold)", "pfcp.reporting_triggers_flags.droth",
15460
15
            FT_BOOLEAN, 8, NULL, 0x40,
15461
15
            NULL, HFILL }
15462
15
        },
15463
15
        { &hf_pfcp_reporting_triggers_o5_b7_liusa,
15464
15
        { "LIUSA (Linked Usage Reporting)", "pfcp.reporting_triggers_flags.liusa",
15465
15
            FT_BOOLEAN, 8, NULL, 0x80,
15466
15
            NULL, HFILL }
15467
15
        },
15468
15
        { &hf_pfcp_reporting_triggers_o6_b0_volqu,
15469
15
        { "VOLQU (Volume Quota)", "pfcp.reporting_triggers_flags.volqu",
15470
15
            FT_BOOLEAN, 8, NULL, 0x01,
15471
15
            NULL, HFILL }
15472
15
        },
15473
15
        { &hf_pfcp_reporting_triggers_o6_b1_timqu,
15474
15
        { "TIMQU (Time Quota)", "pfcp.reporting_triggers_flags.timqu",
15475
15
            FT_BOOLEAN, 8, NULL, 0x02,
15476
15
            NULL, HFILL }
15477
15
        },
15478
15
        { &hf_pfcp_reporting_triggers_o6_b2_envcl,
15479
15
        { "ENVCL (Envelope Closure)", "pfcp.reporting_triggers_flags.envcl",
15480
15
            FT_BOOLEAN, 8, NULL, 0x04,
15481
15
            NULL, HFILL }
15482
15
        },
15483
15
        { &hf_pfcp_reporting_triggers_o6_b3_macar,
15484
15
        { "MACAR (MAC Addresses Reporting)", "pfcp.reporting_triggers_flags.macar",
15485
15
            FT_BOOLEAN, 8, NULL, 0x08,
15486
15
            NULL, HFILL }
15487
15
        },
15488
15
        { &hf_pfcp_reporting_triggers_o6_b4_eveth,
15489
15
        { "EVETH (Event Threshold)", "pfcp.reporting_triggers_flags.eveth",
15490
15
            FT_BOOLEAN, 8, NULL, 0x10,
15491
15
            NULL, HFILL }
15492
15
        },
15493
15
        { &hf_pfcp_reporting_triggers_o6_b5_evequ,
15494
15
        { "EVEQU (Event Quota)", "pfcp.reporting_triggers_flags.evequ",
15495
15
            FT_BOOLEAN, 8, NULL, 0x20,
15496
15
            NULL, HFILL }
15497
15
        },
15498
15
        { &hf_pfcp_reporting_triggers_o6_b6_ipmjl,
15499
15
        { "IPMJL (IP Multicast Join/Leave)", "pfcp.reporting_triggers_flags.ipmjl",
15500
15
            FT_BOOLEAN, 8, NULL, 0x40,
15501
15
            NULL, HFILL }
15502
15
        },
15503
15
        { &hf_pfcp_reporting_triggers_o6_b7_quvti,
15504
15
        { "QUVTI (Quota Validity Time)", "pfcp.reporting_triggers_flags.quvti",
15505
15
            FT_BOOLEAN, 8, NULL, 0x80,
15506
15
            NULL, HFILL }
15507
15
        },
15508
15
        { &hf_pfcp_reporting_triggers_o7_b0_reemr,
15509
15
        { "REEMR (REport the End Marker Reception)", "pfcp.reporting_triggers_flags.reemr",
15510
15
            FT_BOOLEAN, 8, NULL, 0x01,
15511
15
            NULL, HFILL }
15512
15
        },
15513
15
        { &hf_pfcp_reporting_triggers_o7_b1_upint,
15514
15
        { "UPINT (User Plane Inactivity Timer)", "pfcp.reporting_triggers_flags.upint",
15515
15
            FT_BOOLEAN, 8, NULL, 0x02,
15516
15
            NULL, HFILL }
15517
15
        },
15518
15
        { &hf_pfcp_usage_report_trigger_o7_b0_evequ,
15519
15
        { "EVEQU (Event Quota)", "pfcp.usage_report_trigger_flags.evequ",
15520
15
            FT_BOOLEAN, 8, NULL, 0x01,
15521
15
            NULL, HFILL }
15522
15
        },
15523
15
        { &hf_pfcp_usage_report_trigger_o7_b1_tebur,
15524
15
        { "TEBUR (Termination By UP function Report)", "pfcp.usage_report_trigger_flags.tebur",
15525
15
            FT_BOOLEAN, 8, NULL, 0x02,
15526
15
            NULL, HFILL }
15527
15
        },
15528
15
        { &hf_pfcp_usage_report_trigger_o7_b2_ipmjl,
15529
15
        { "IPMJL (IP Multicast Join/Leave)", "pfcp.usage_report_trigger_flags.ipmjl",
15530
15
            FT_BOOLEAN, 8, NULL, 0x04,
15531
15
            NULL, HFILL }
15532
15
        },
15533
15
        { &hf_pfcp_usage_report_trigger_o7_b3_quvti,
15534
15
        { "QUVTI (Quota Validity Time)", "pfcp.usage_report_trigger_flags.quvti",
15535
15
            FT_BOOLEAN, 8, NULL, 0x08,
15536
15
            NULL, HFILL }
15537
15
        },
15538
15
        { &hf_pfcp_usage_report_trigger_o7_b4_emrre,
15539
15
        { "EMRRE (End Marker Reception REport)", "pfcp.usage_report_trigger_flags.emrre",
15540
15
            FT_BOOLEAN, 8, NULL, 0x10,
15541
15
            NULL, HFILL }
15542
15
        },
15543
15
        { &hf_pfcp_usage_report_trigger_o7_b5_upint,
15544
15
        { "UPINT (User Plane Inactivity Timer)", "pfcp.usage_report_trigger_flags.upint",
15545
15
            FT_BOOLEAN, 8, NULL, 0x20,
15546
15
            NULL, HFILL }
15547
15
        },
15548
15
        { &hf_pfcp_usage_report_trigger_o6_b0_volqu,
15549
15
        { "VOLQU (Volume Quota)", "pfcp.usage_report_trigger_flags.volqu",
15550
15
            FT_BOOLEAN, 8, NULL, 0x01,
15551
15
            NULL, HFILL }
15552
15
        },
15553
15
        { &hf_pfcp_usage_report_trigger_o6_b1_timqu,
15554
15
        { "TIMQU (Time Quota)", "pfcp.usage_report_trigger_flags.timqu",
15555
15
            FT_BOOLEAN, 8, NULL, 0x02,
15556
15
            NULL, HFILL }
15557
15
        },
15558
15
        { &hf_pfcp_usage_report_trigger_o6_b2_liusa,
15559
15
        { "LIUSA (Linked Usage Reporting)", "pfcp.usage_report_trigger_flags.liusa",
15560
15
            FT_BOOLEAN, 8, NULL, 0x04,
15561
15
            NULL, HFILL }
15562
15
        },
15563
15
        { &hf_pfcp_usage_report_trigger_o6_b3_termr,
15564
15
        { "TERMR (Termination Report)", "pfcp.usage_report_trigger.term",
15565
15
            FT_BOOLEAN, 8, NULL, 0x08,
15566
15
            NULL, HFILL }
15567
15
        },
15568
15
        { &hf_pfcp_usage_report_trigger_o6_b4_monit,
15569
15
        { "MONIT (Monitoring Time)", "pfcp.usage_report_trigger.monit",
15570
15
            FT_BOOLEAN, 8, NULL, 0x10,
15571
15
            NULL, HFILL }
15572
15
        },
15573
15
        { &hf_pfcp_usage_report_trigger_o6_b5_envcl,
15574
15
        { "ENVCL (Envelope Closure)", "pfcp.usage_report_trigger_flags.envcl",
15575
15
            FT_BOOLEAN, 8, NULL, 0x20,
15576
15
            NULL, HFILL }
15577
15
        },
15578
15
        { &hf_pfcp_usage_report_trigger_o6_b7_eveth,
15579
15
        { "EVETH (Event Threshold)", "pfcp.usage_report_trigger_flags.eveth",
15580
15
            FT_BOOLEAN, 8, NULL, 0x80,
15581
15
            NULL, HFILL }
15582
15
        },
15583
15
        { &hf_pfcp_usage_report_trigger_o6_b6_macar,
15584
15
        { "MACAR (MAC Addresses Reporting)", "pfcp.usage_report_trigger_flags.macar",
15585
15
            FT_BOOLEAN, 8, NULL, 0x40,
15586
15
            NULL, HFILL }
15587
15
        },
15588
15
        { &hf_pfcp_usage_report_trigger_o5_b0_perio,
15589
15
        { "PERIO (Periodic Reporting)", "pfcp.usage_report_trigger_flags.perio",
15590
15
            FT_BOOLEAN, 8, NULL, 0x01,
15591
15
            NULL, HFILL }
15592
15
        },
15593
15
        { &hf_pfcp_usage_report_trigger_o5_b1_volth,
15594
15
        { "VOLTH (Volume Threshold)", "pfcp.usage_report_trigger_flags.volth",
15595
15
            FT_BOOLEAN, 8, NULL, 0x02,
15596
15
            NULL, HFILL }
15597
15
        },
15598
15
        { &hf_pfcp_usage_report_trigger_o5_b2_timth,
15599
15
        { "TIMTH (Time Threshold)", "pfcp.usage_report_trigger_flags.timth",
15600
15
            FT_BOOLEAN, 8, NULL, 0x04,
15601
15
            NULL, HFILL }
15602
15
        },
15603
15
        { &hf_pfcp_usage_report_trigger_o5_b3_quhti,
15604
15
        { "QUHTI (Quota Holding Time)", "pfcp.usage_report_trigger_flags.quhti",
15605
15
            FT_BOOLEAN, 8, NULL, 0x08,
15606
15
            NULL, HFILL }
15607
15
        },
15608
15
        { &hf_pfcp_usage_report_trigger_o5_b4_start,
15609
15
        { "START (Start of Traffic)", "pfcp.usage_report_trigger_flags.start",
15610
15
            FT_BOOLEAN, 8, NULL, 0x10,
15611
15
            NULL, HFILL }
15612
15
        },
15613
15
        { &hf_pfcp_usage_report_trigger_o5_b5_stopt,
15614
15
        { "STOPT (Stop of Traffic)", "pfcp.usage_report_trigger_flags.stopt",
15615
15
            FT_BOOLEAN, 8, NULL, 0x20,
15616
15
            NULL, HFILL }
15617
15
        },
15618
15
        { &hf_pfcp_usage_report_trigger_o5_b6_droth,
15619
15
        { "DROTH (Dropped DL Traffic Threshold)", "pfcp.usage_report_trigger_flags.droth",
15620
15
            FT_BOOLEAN, 8, NULL, 0x40,
15621
15
            NULL, HFILL }
15622
15
        },
15623
15
        { &hf_pfcp_usage_report_trigger_o5_b7_immer,
15624
15
        { "IMMER (Immediate Report)", "pfcp.usage_report_trigger.immer",
15625
15
            FT_BOOLEAN, 8, NULL, 0x80,
15626
15
            NULL, HFILL }
15627
15
        },
15628
15629
15
        { &hf_pfcp_volume_threshold_b0_tovol,
15630
15
        { "TOVOL", "pfcp.volume_threshold_flags.tovol",
15631
15
            FT_BOOLEAN, 8, NULL, 0x01,
15632
15
            NULL, HFILL }
15633
15
        },
15634
15
        { &hf_pfcp_volume_threshold_b1_ulvol,
15635
15
        { "ULVOL", "pfcp.volume_threshold_flags.ulvol",
15636
15
            FT_BOOLEAN, 8, NULL, 0x02,
15637
15
            NULL, HFILL }
15638
15
        },
15639
15
        { &hf_pfcp_volume_threshold_b2_dlvol,
15640
15
        { "DLVOL", "pfcp.volume_threshold_flags.dlvol",
15641
15
            FT_BOOLEAN, 8, NULL, 0x04,
15642
15
            NULL, HFILL }
15643
15
        },
15644
15
        { &hf_pfcp_volume_threshold_tovol,
15645
15
        { "Total Volume", "pfcp.volume_threshold.tovol",
15646
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15647
15
            NULL, HFILL }
15648
15
        },
15649
15
        { &hf_pfcp_volume_threshold_ulvol,
15650
15
        { "Uplink Volume", "pfcp.volume_threshold.ulvol",
15651
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15652
15
            NULL, HFILL }
15653
15
        },
15654
15
        { &hf_pfcp_volume_threshold_dlvol,
15655
15
        { "Downlink Volume", "pfcp.volume_threshold.dlvol",
15656
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15657
15
            NULL, HFILL }
15658
15
        },
15659
15
        { &hf_pfcp_volume_quota_b0_tovol,
15660
15
        { "TOVOL", "pfcp.volume_quota_flags.tovol",
15661
15
            FT_BOOLEAN, 8, NULL, 0x01,
15662
15
            NULL, HFILL }
15663
15
        },
15664
15
        { &hf_pfcp_volume_quota_b1_ulvol,
15665
15
        { "ULVOL", "pfcp.volume_quota_flags.ulvol",
15666
15
            FT_BOOLEAN, 8, NULL, 0x02,
15667
15
            NULL, HFILL }
15668
15
        },
15669
15
        { &hf_pfcp_volume_quota_b2_dlvol,
15670
15
        { "DLVOL", "pfcp.volume_quota_flags.dlvol",
15671
15
            FT_BOOLEAN, 8, NULL, 0x04,
15672
15
            NULL, HFILL }
15673
15
        },
15674
15
        { &hf_pfcp_volume_quota_tovol,
15675
15
        { "Total Volume", "pfcp.volume_quota.tovol",
15676
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15677
15
            NULL, HFILL }
15678
15
        },
15679
15
        { &hf_pfcp_volume_quota_ulvol,
15680
15
        { "Uplink Volume", "pfcp.volume_quota.ulvol",
15681
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15682
15
            NULL, HFILL }
15683
15
        },
15684
15
        { &hf_pfcp_volume_quota_dlvol,
15685
15
        { "Downlink Volume", "pfcp.volume_quota.dlvol",
15686
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15687
15
            NULL, HFILL }
15688
15
        },
15689
15
        { &hf_pfcp_subseq_volume_threshold_b0_tovol,
15690
15
        { "TOVOL", "pfcp.subseq_volume_threshold.tovol_flg",
15691
15
            FT_BOOLEAN, 8, NULL, 0x01,
15692
15
            NULL, HFILL }
15693
15
        },
15694
15
        { &hf_pfcp_subseq_volume_threshold_b1_ulvol,
15695
15
        { "ULVOL", "pfcp.subseq_volume_threshold.ulvol_flg",
15696
15
            FT_BOOLEAN, 8, NULL, 0x02,
15697
15
            NULL, HFILL }
15698
15
        },
15699
15
        { &hf_pfcp_subseq_volume_threshold_b2_dlvol,
15700
15
        { "DLVOL", "pfcp.subseq_volume_threshold.dlvol_flg",
15701
15
            FT_BOOLEAN, 8, NULL, 0x04,
15702
15
            NULL, HFILL }
15703
15
        },
15704
15
        { &hf_pfcp_subseq_volume_threshold_tovol,
15705
15
        { "Total Volume", "pfcp.subseq_volume_threshold.tovol",
15706
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15707
15
            NULL, HFILL }
15708
15
        },
15709
15
        { &hf_pfcp_subseq_volume_threshold_ulvol,
15710
15
        { "Uplink Volume", "pfcp.subseq_volume_threshold.ulvol",
15711
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15712
15
            NULL, HFILL }
15713
15
        },
15714
15
        { &hf_pfcp_subseq_volume_threshold_dlvol,
15715
15
        { "Downlink Volume", "pfcp.subseq_volume_threshold.dlvol",
15716
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15717
15
            NULL, HFILL }
15718
15
        },
15719
15
        { &hf_pfcp_time_quota,
15720
15
        { "Time Quota", "pfcp.time_quota",
15721
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15722
15
            NULL, HFILL }
15723
15
        },
15724
15
        { &hf_pfcp_start_time,
15725
15
        { "Start Time", "pfcp.start_time",
15726
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15727
15
            NULL, HFILL }
15728
15
        },
15729
15
        { &hf_pfcp_end_time,
15730
15
        { "End Time", "pfcp.end_time",
15731
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
15732
15
            NULL, HFILL }
15733
15
        },
15734
15
        { &hf_pfcp_quota_holding_time,
15735
15
        { "Quota Holding Time", "pfcp.quota_holding_time",
15736
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15737
15
            NULL, HFILL }
15738
15
        },
15739
15
        { &hf_pfcp_dropped_dl_traffic_threshold_b0_dlpa,
15740
15
        { "DLPA", "pfcp.dropped_dl_traffic_threshold.dlpa_flg",
15741
15
            FT_BOOLEAN, 8, NULL, 0x01,
15742
15
            NULL, HFILL }
15743
15
        },
15744
15
        { &hf_pfcp_dropped_dl_traffic_threshold_b1_dlby,
15745
15
        { "DLBY", "pfcp.dropped_dl_traffic_threshold.dlby_flg",
15746
15
            FT_BOOLEAN, 8, NULL, 0x02,
15747
15
            NULL, HFILL }
15748
15
        },
15749
15
        { &hf_pfcp_downlink_packets,
15750
15
        { "Downlink Packets", "pfcp.downlink_packets",
15751
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15752
15
            NULL, HFILL }
15753
15
        },
15754
15
        { &hf_pfcp_bytes_downlink_data,
15755
15
        { "Bytes of Downlink Data", "pfcp.bytes_downlink_data",
15756
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
15757
15
            NULL, HFILL }
15758
15
        },
15759
15
        { &hf_pfcp_qer_correlation_id,
15760
15
        { "QER Correlation ID", "pfcp.qer_correlation_id",
15761
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
15762
15
            NULL, HFILL }
15763
15
        },
15764
15
        { &hf_pfcp_gate_status_b0b1_dlgate,
15765
15
        { "DL Gate", "pfcp.gate_status.dlgate",
15766
15
            FT_UINT8, BASE_DEC, VALS(pfcp_gate_status_vals), 0x03,
15767
15
            NULL, HFILL }
15768
15
        },
15769
15
        { &hf_pfcp_gate_status_b3b2_ulgate,
15770
15
        { "UL Gate", "pfcp.gate_status.ulgate",
15771
15
            FT_UINT8, BASE_DEC, VALS(pfcp_gate_status_vals), 0x0c,
15772
15
            NULL, HFILL }
15773
15
        },
15774
15
        { &hf_pfcp_ul_mbr,
15775
15
        { "UL MBR", "pfcp.ul_mbr",
15776
15
            FT_UINT40, BASE_DEC, NULL, 0x0,
15777
15
            NULL, HFILL }
15778
15
        },
15779
15
        { &hf_pfcp_dl_mbr,
15780
15
        { "DL MBR", "pfcp.dl_mbr",
15781
15
            FT_UINT40, BASE_DEC, NULL, 0x0,
15782
15
            NULL, HFILL }
15783
15
        },
15784
15
        { &hf_pfcp_ul_gbr,
15785
15
        { "UL GBR", "pfcp.ul_gbr",
15786
15
            FT_UINT40, BASE_DEC, NULL, 0x0,
15787
15
            NULL, HFILL }
15788
15
        },
15789
15
        { &hf_pfcp_dl_gbr,
15790
15
        { "DL GBR", "pfcp.dl_gbr",
15791
15
            FT_UINT40, BASE_DEC, NULL, 0x0,
15792
15
            NULL, HFILL }
15793
15
        },
15794
15
        { &hf_pfcp_report_type_b6_uisr,
15795
15
        { "UISR (UP Initiated Session Request)", "pfcp.report_type.uisr",
15796
15
            FT_BOOLEAN, 8, NULL, 0x40,
15797
15
            NULL, HFILL }
15798
15
        },
15799
15
        { &hf_pfcp_report_type_b5_sesr,
15800
15
        { "SESR (Session Report)", "pfcp.report_type.sesr",
15801
15
            FT_BOOLEAN, 8, NULL, 0x20,
15802
15
            NULL, HFILL }
15803
15
        },
15804
15
        { &hf_pfcp_report_type_b4_tmir,
15805
15
        { "TMIR (TSC Management Information Report)", "pfcp.report_type.tmir",
15806
15
            FT_BOOLEAN, 8, NULL, 0x10,
15807
15
            NULL, HFILL }
15808
15
        },
15809
15
        { &hf_pfcp_report_type_b3_upir,
15810
15
        { "UPIR (User Plane Inactivity Report)", "pfcp.report_type.upir",
15811
15
            FT_BOOLEAN, 8, NULL, 0x08,
15812
15
            NULL, HFILL }
15813
15
        },
15814
15
        { &hf_pfcp_report_type_b2_erir,
15815
15
        { "ERIR (Error Indication Report)", "pfcp.report_type.erir",
15816
15
            FT_BOOLEAN, 8, NULL, 0x04,
15817
15
            NULL, HFILL }
15818
15
        },
15819
15
        { &hf_pfcp_report_type_b1_usar,
15820
15
        { "USAR (Usage Report)", "pfcp.report_type.usar",
15821
15
            FT_BOOLEAN, 8, NULL, 0x02,
15822
15
            NULL, HFILL }
15823
15
        },
15824
15
        { &hf_pfcp_report_type_b0_dldr,
15825
15
        { "DLDR (Downlink Data Report)", "pfcp.report_type.dldr",
15826
15
            FT_BOOLEAN, 8, NULL, 0x01,
15827
15
            NULL, HFILL }
15828
15
        },
15829
15
        { &hf_pfcp_offending_ie,
15830
15
        { "Type of the offending IE", "pfcp.offending_ie",
15831
15
            FT_UINT16, BASE_DEC | BASE_EXT_STRING, &pfcp_ie_type_ext, 0x0,
15832
15
            NULL, HFILL }
15833
15
        },
15834
15
        { &hf_pfcp_offending_ie_value,
15835
15
        { "Value of the offending IE", "pfcp.offending_ie_value",
15836
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
15837
15
            NULL, HFILL }
15838
15
        },
15839
15840
15
        { &hf_pfcp_up_function_features_o5_b0_bucp,
15841
15
        { "BUCP", "pfcp.up_function_features.bucp",
15842
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15843
15
            "Downlink Data Buffering in CP function", HFILL }
15844
15
        },
15845
15
        { &hf_pfcp_up_function_features_o5_b1_ddnd,
15846
15
        { "DDND", "pfcp.up_function_features.ddnd",
15847
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15848
15
            "Buffering parameter 'Downlink Data Notification Delay", HFILL }
15849
15
        },
15850
15
        { &hf_pfcp_up_function_features_o5_b2_dlbd,
15851
15
        { "DLBD", "pfcp.up_function_features.dlbd",
15852
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15853
15
            NULL, HFILL }
15854
15
        },
15855
15
        { &hf_pfcp_up_function_features_o5_b3_trst,
15856
15
        { "TRST", "pfcp.up_function_features.trst",
15857
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
15858
15
            "Traffic Steering", HFILL }
15859
15
        },
15860
15
        { &hf_pfcp_up_function_features_o5_b4_ftup,
15861
15
        { "FTUP", "pfcp.up_function_features.ftup",
15862
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
15863
15
            "F-TEID allocation / release in the UP function", HFILL }
15864
15
        },
15865
15
        { &hf_pfcp_up_function_features_o5_b5_pfdm,
15866
15
        { "PFDM", "pfcp.up_function_features.pfdm",
15867
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
15868
15
            "PFD Management procedure", HFILL }
15869
15
        },
15870
15
        { &hf_pfcp_up_function_features_o5_b6_heeu,
15871
15
        { "HEEU", "pfcp.up_function_features.heeu",
15872
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
15873
15
            "Header Enrichment of Uplink traffic", HFILL }
15874
15
        },
15875
15
        { &hf_pfcp_up_function_features_o5_b7_treu,
15876
15
        { "TREU", "pfcp.up_function_features.treu",
15877
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
15878
15
            "Traffic Redirection Enforcement in the UP function", HFILL }
15879
15
        },
15880
15
        { &hf_pfcp_up_function_features_o6_b0_empu,
15881
15
        { "EMPU", "pfcp.up_function_features.empu",
15882
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15883
15
            "Sending of End Marker packets", HFILL }
15884
15
        },
15885
15
        { &hf_pfcp_up_function_features_o6_b1_pdiu,
15886
15
        { "PDIU", "pfcp.up_function_features.pdiu",
15887
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15888
15
            "Support of PDI optimised signalling", HFILL }
15889
15
        },
15890
15
        { &hf_pfcp_up_function_features_o6_b2_udbc,
15891
15
        { "UDBC", "pfcp.up_function_features.udbc",
15892
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15893
15
            "Support of UL/DL Buffering Control", HFILL }
15894
15
        },
15895
15
        { &hf_pfcp_up_function_features_o6_b3_quoac,
15896
15
        { "QUOAC", "pfcp.up_function_features.quoac",
15897
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
15898
15
            "The UP function supports being provisioned with the Quota Action to apply when reaching quotas", HFILL }
15899
15
        },
15900
15
        { &hf_pfcp_up_function_features_o6_b4_trace,
15901
15
        { "TRACE", "pfcp.up_function_features.trace",
15902
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
15903
15
            "The UP function supports Trace", HFILL }
15904
15
        },
15905
15
        { &hf_pfcp_up_function_features_o6_b5_frrt,
15906
15
        { "FRRT", "pfcp.up_function_features.frrt",
15907
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
15908
15
            "The UP function supports Framed Routing", HFILL }
15909
15
        },
15910
15
        { &hf_pfcp_up_function_features_o6_b6_pfde,
15911
15
        { "PFDE", "pfcp.up_function_features.pfde",
15912
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
15913
15
            "The UP function supports a PFD Contents including a property with multiple values", HFILL }
15914
15
        },
15915
15
        { &hf_pfcp_up_function_features_o6_b7_epfar,
15916
15
        { "EPFAR", "pfcp.up_function_features.epfar",
15917
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
15918
15
            "The UP function supports the Enhanced PFCP Association Release feature", HFILL }
15919
15
        },
15920
15
        { &hf_pfcp_up_function_features_o7_b0_dpdra,
15921
15
        { "DPDRA", "pfcp.up_function_features.dpdra",
15922
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15923
15
            "The UP function supports Deferred PDR Activation or Deactivation", HFILL }
15924
15
        },
15925
15
        { &hf_pfcp_up_function_features_o7_b1_adpdp,
15926
15
        { "ADPDP", "pfcp.up_function_features.adpdp",
15927
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15928
15
            "The UP function supports the Activation and Deactivation of Pre-defined PDRs", HFILL }
15929
15
        },
15930
15
        { &hf_pfcp_up_function_features_o7_b2_ueip,
15931
15
        { "UEIP", "pfcp.up_function_features.ueip",
15932
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15933
15
            "The UP function supports allocating UE IP addresses or prefixes", HFILL }
15934
15
        },
15935
15
        { &hf_pfcp_up_function_features_o7_b3_sset,
15936
15
        { "SSET", "pfcp.up_function_features.sset",
15937
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
15938
15
            "UP function support of PFCP sessions successively controlled by different SMFs of a same SMF", HFILL }
15939
15
        },
15940
15
        { &hf_pfcp_up_function_features_o7_b4_mnop,
15941
15
        { "MNOP", "pfcp.up_function_features.mnop",
15942
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
15943
15
            "UPF supports measurement of number of packets which is instructed with the flag 'Measurement of Number of Packets' in a URR", HFILL }
15944
15
        },
15945
15
        { &hf_pfcp_up_function_features_o7_b5_mte_n4,
15946
15
        { "MTE N4", "pfcp.up_function_features.mte_n4",
15947
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
15948
15
            "UPF supports multiple instances of Traffic Endpoint IDs in a PDI", HFILL }
15949
15
        },
15950
15
        { &hf_pfcp_up_function_features_o7_b6_bundl,
15951
15
        { "BUNDL", "pfcp.up_function_features.bundl",
15952
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
15953
15
            "PFCP messages bundling", HFILL }
15954
15
        },
15955
15
        { &hf_pfcp_up_function_features_o7_b7_gcom,
15956
15
        { "GCOM", "pfcp.up_function_features.gcom",
15957
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
15958
15
            "UPF support of 5G VN Group Communication", HFILL }
15959
15
        },
15960
15
        { &hf_pfcp_up_function_features_o8_b0_mpas,
15961
15
        { "MPAS", "pfcp.up_function_features.mpas",
15962
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
15963
15
            "UPF support for multiple PFCP associations to the SMFs in an SMF set", HFILL }
15964
15
        },
15965
15
        { &hf_pfcp_up_function_features_o8_b1_rttl,
15966
15
        { "RTTL", "pfcp.up_function_features.rttl",
15967
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
15968
15
            "The UP function supports redundant transmission at transport layer", HFILL }
15969
15
        },
15970
15
        { &hf_pfcp_up_function_features_o8_b2_vtime,
15971
15
        { "VTIME", "pfcp.up_function_features.vtime",
15972
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
15973
15
            "UPF support of quota validity time feature", HFILL }
15974
15
        },
15975
15
        { &hf_pfcp_up_function_features_o8_b3_norp,
15976
15
        { "NORP", "pfcp.up_function_features.norp",
15977
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
15978
15
            "UP function support of Number of Reports", HFILL }
15979
15
        },
15980
15
        { &hf_pfcp_up_function_features_o8_b4_iptv,
15981
15
        { "IPTV", "pfcp.up_function_features.iptv",
15982
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
15983
15
            "UPF support of IPTV service", HFILL }
15984
15
        },
15985
15
        { &hf_pfcp_up_function_features_o8_b5_ip6pl,
15986
15
        { "IP6PL", "pfcp.up_function_features.ip6pl",
15987
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
15988
15
            "UPF supports UE IPv6 address(es) allocation with IPv6 prefix length other than default /64", HFILL }
15989
15
        },
15990
15
        { &hf_pfcp_up_function_features_o8_b6_tsn,
15991
15
        { "TSN", "pfcp.up_function_features.tsn",
15992
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
15993
15
            "Integration of 5GS into a TSN data network is supported by the UPF", HFILL }
15994
15
        },
15995
15
        { &hf_pfcp_up_function_features_o8_b7_mptcp,
15996
15
        { "MPTCP", "pfcp.up_function_features.mptcp",
15997
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
15998
15
            "UPF support of MPTCP Proxy functionality", HFILL }
15999
15
        },
16000
15
        { &hf_pfcp_up_function_features_o9_b0_atsss_ll,
16001
15
        { "ATSSS-LL", "pfcp.up_function_features.atsss_ll",
16002
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16003
15
            "UPF support of ATSSS-LLL steering functionality", HFILL }
16004
15
        },
16005
15
        { &hf_pfcp_up_function_features_o9_b1_qfqm,
16006
15
        { "QFQM", "pfcp.up_function_features.qfqm",
16007
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16008
15
            "UPF support of per QoS flow per UE QoS monitoring for packet delay", HFILL }
16009
15
        },
16010
15
        { &hf_pfcp_up_function_features_o9_b2_gpqm,
16011
15
        { "GPQM", "pfcp.up_function_features.gpqm",
16012
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16013
15
            "UPF support of per GTP-U Path QoS monitoring", HFILL }
16014
15
        },
16015
15
        { &hf_pfcp_up_function_features_o9_b3_mt_edt,
16016
15
        { "MT-EDT", "pfcp.up_function_features.mtedt",
16017
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16018
15
            "SGW-U support of reporting the size of DL Data Packets", HFILL }
16019
15
        },
16020
15
        { &hf_pfcp_up_function_features_o9_b4_ciot,
16021
15
        { "CIOT", "pfcp.up_function_features.ciot",
16022
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16023
15
            "UPF support of CIoT feature", HFILL }
16024
15
        },
16025
15
        { &hf_pfcp_up_function_features_o9_b5_ethar,
16026
15
        { "ETHAR", "pfcp.up_function_features.ethar",
16027
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16028
15
            "UPF support of Ethernet PDU Session Anchor Relocation", HFILL }
16029
15
        },
16030
15
        { &hf_pfcp_up_function_features_o9_b6_ddds,
16031
15
        { "DDDS", "pfcp.up_function_features.ddds",
16032
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16033
15
            "UPF support of reporting of the first buffered / discarded data for downlink", HFILL }
16034
15
        },
16035
15
        { &hf_pfcp_up_function_features_o9_b7_rds,
16036
15
        { "RDS", "pfcp.up_function_features.rds",
16037
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16038
15
            "UP function support of Reliable Data Service", HFILL }
16039
15
        },
16040
15
        { &hf_pfcp_up_function_features_o10_b0_rttwp,
16041
15
        { "RTTWP", "pfcp.up_function_features.rttwp",
16042
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16043
15
            "UPF support of RTT measurement towards the UE without PMF", HFILL }
16044
15
        },
16045
15
        { &hf_pfcp_up_function_features_o10_b1_quasf,
16046
15
        { "QUASF", "pfcp.up_function_features.quasf",
16047
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16048
15
            "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 }
16049
15
        },
16050
15
        { &hf_pfcp_up_function_features_o10_b2_nspoc,
16051
15
        { "NSPOC", "pfcp.up_function_features.nspoc",
16052
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16053
15
            "UP function supports notifying start of Pause of Charging via user plane", HFILL }
16054
15
        },
16055
15
        { &hf_pfcp_up_function_features_o10_b3_l2tp,
16056
15
        { "L2TP", "pfcp.up_function_features.l2tp",
16057
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16058
15
            "UP function supports L2TP", HFILL }
16059
15
        },
16060
15
        { &hf_pfcp_up_function_features_o10_b4_upber,
16061
15
        { "UPBER", "pfcp.up_function_features.upber",
16062
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16063
15
            "UP function supports the uplink packet buffering during EAS relocation", HFILL }
16064
15
        },
16065
15
        { &hf_pfcp_up_function_features_o10_b5_resps,
16066
15
        { "RESPS", "pfcp.up_function_features.resps",
16067
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16068
15
            "UP function supports Restoration of PFCP Session association", HFILL }
16069
15
        },
16070
15
        { &hf_pfcp_up_function_features_o10_b6_iprep,
16071
15
        { "IPREP", "pfcp.up_function_features.iprep",
16072
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16073
15
            "UP function supports IP Address and Port number replacement", HFILL }
16074
15
        },
16075
15
        { &hf_pfcp_up_function_features_o10_b7_dnsts,
16076
15
        { "DNSTS", "pfcp.up_function_features.dnsts",
16077
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16078
15
            "UP function support DNS Traffic Steering based on FQDN in the DNS Query message", HFILL }
16079
15
        },
16080
15
        { &hf_pfcp_up_function_features_o11_b0_drqos,
16081
15
        { "DRQOS", "pfcp.up_function_features.drqos",
16082
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16083
15
            "UP function supports Direct Reporting of QoS monitoring events to Local NEF or AF", HFILL }
16084
15
        },
16085
15
        { &hf_pfcp_up_function_features_o11_b1_mbsn4,
16086
15
        { "MBSN4", "pfcp.up_function_features.mbsn4",
16087
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16088
15
            "UPF supports sending MBS multicast session data to associated PDU sessions using 5GC individual delivery", HFILL }
16089
15
        },
16090
15
        { &hf_pfcp_up_function_features_o11_b2_psuprm,
16091
15
        { "MBSN4", "pfcp.up_function_features.mbsn4",
16092
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16093
15
            "UP function supports Per Slice UP Resource Management", HFILL }
16094
15
        },
16095
15
        { &hf_pfcp_up_function_features_o11_b3_eppi,
16096
15
        { "EPPI", "pfcp.up_function_features.eppi",
16097
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16098
15
            "UP function supports Enhanced Provisioning of Paging Policy Indicator", HFILL }
16099
15
        },
16100
15
        { &hf_pfcp_up_function_features_o11_b4_ratp,
16101
15
        { "RATP", "pfcp.up_function_features.ratp",
16102
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16103
15
            "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 }
16104
15
        },
16105
15
        { &hf_pfcp_up_function_features_o11_b5_upidp,
16106
15
        { "UPIDP", "pfcp.up_function_features.upidp",
16107
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16108
15
            "UP function supports User Plane Inactivity Detection and reporting per PDR", HFILL }
16109
15
        },
16110
15
        { &hf_pfcp_up_function_features_o11_b6_afsfc,
16111
15
        { "AFSFC", "pfcp.up_function_features.afsfc",
16112
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16113
15
            "UP function supports inserting metadata when Application Function influence on Service Function Chaining", HFILL }
16114
15
        },
16115
15
        { &hf_pfcp_up_function_features_o11_b7_mpquic,
16116
15
        { "MPQUIC", "pfcp.up_function_features.mpquic",
16117
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16118
15
            "UPF support of MPQUIC Proxy functionality", HFILL }
16119
15
        },
16120
15
        { &hf_pfcp_up_function_features_o12_b0_redsm,
16121
15
        { "REDSM", "pfcp.up_function_features.redsm",
16122
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16123
15
            "UP function supports the Redundant Steering Mode", HFILL }
16124
15
        },
16125
15
        { &hf_pfcp_up_function_features_o12_b1_dbdm,
16126
15
        { "DBDM", "pfcp.up_function_features.dbdm",
16127
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16128
15
            "The buffering parameters 'DL Buffering Duration' and 'DL Buffering Suggested Packet Count' in PFCP Session Modification Request are supported by the UP function", HFILL }
16129
15
        },
16130
15
        { &hf_pfcp_up_function_features_o12_b2_tscts,
16131
15
        { "TSCTS", "pfcp.up_function_features.tscts",
16132
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16133
15
            "AF requested support of Time Synchronization and/or Time Sensitive Communication is supported by the UP function", HFILL }
16134
15
        },
16135
15
        { &hf_pfcp_up_function_features_o12_b3_drtsc,
16136
15
        { "DRTSC", "pfcp.up_function_features.drtsc",
16137
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16138
15
            "UP function supports Direct Reporting of TSC management information events to TSN AF or TSCTSF", HFILL }
16139
15
        },
16140
15
        { &hf_pfcp_up_function_features_o12_b4_n6jedb,
16141
15
        { "N6JEDB", "pfcp.up_function_features.n6jedb",
16142
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16143
15
            "UPF support of N6 Jitter, DL Periodicity and UL Periodicity Measurement and Reporting, and End of Data Burst marking", HFILL }
16144
15
        },
16145
15
        { &hf_pfcp_up_function_features_o12_b5_qmcon,
16146
15
        { "QMCON", "pfcp.up_function_features.qmcon",
16147
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16148
15
            "UPF support of QoS monitoring of Congestion information", HFILL }
16149
15
        },
16150
15
        { &hf_pfcp_up_function_features_o12_b6_detnet,
16151
15
        { "DETNET", "pfcp.up_function_features.detnet",
16152
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16153
15
            "Deterministic Networking is supported by the UP function", HFILL }
16154
15
        },
16155
15
        { &hf_pfcp_up_function_features_o12_b7_eml4s,
16156
15
        { "EML4S", "pfcp.up_function_features.eml4s",
16157
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16158
15
            "UP function supports ECN Marking for L4S", HFILL }
16159
15
        },
16160
15
        { &hf_pfcp_up_function_features_o13_b0_pdusm,
16161
15
        { "PDUSM", "pfcp.up_function_features.pdusm",
16162
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16163
15
            "UP function supports PDU Set Marking", HFILL }
16164
15
        },
16165
15
        { &hf_pfcp_up_function_features_o13_b1_cntl,
16166
15
        { "CN-TL", "pfcp.up_function_features.cntl",
16167
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16168
15
            "UPF support of the TSN Talker and Listener (TL) functionality", HFILL }
16169
15
        },
16170
15
        { &hf_pfcp_up_function_features_o13_b2_qmdrm,
16171
15
        { "QMDRM", "pfcp.up_function_features.qmdrm",
16172
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16173
15
            "UPF support of QoS monitoring of Data Rate Measurement", HFILL }
16174
15
        },
16175
15
        { &hf_pfcp_up_function_features_o13_b3_edbnc,
16176
15
        { "EDBNC", "pfcp.up_function_features.edbnc",
16177
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16178
15
            "UP function supports Extended DL Buffering Notification Control", HFILL }
16179
15
        },
16180
15
        { &hf_pfcp_up_function_features_o13_b4_mtsdt,
16181
15
        { "MT-SDT", "pfcp.up_function_features.mtsdt",
16182
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16183
15
            "UPF support of reporting the size of DL Data Packets per QoS flow", HFILL }
16184
15
        },
16185
15
        { &hf_pfcp_up_function_features_o13_b5_upsbies,
16186
15
        { "UPSBIES", "pfcp.up_function_features.upsbies",
16187
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16188
15
            "UPF support of event subscription via Service Based Interface", HFILL }
16189
15
        },
16190
15
        { &hf_pfcp_up_function_features_o13_b7_un6tu,
16191
15
        { "UN6TU", "pfcp.up_function_features.un6tu",
16192
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16193
15
            "UPF supports to allocate a mapped N6 IP address and perform IP replacement", HFILL }
16194
15
        },
16195
15
        { &hf_pfcp_up_function_features_o13_b6_umn6ip,
16196
15
        { "UMN6IP", "pfcp.up_function_features.umn6ip",
16197
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16198
15
            "UPF supports N6 tunnelling using N6 routing information", HFILL }
16199
15
        },
16200
15
        { &hf_pfcp_up_function_features_o14_b0_mbsch,
16201
15
        { "MBSCH", "pfcp.up_function_features.mbsch",
16202
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16203
15
            "MB-UPF support of MBS charging", HFILL }
16204
15
        },
16205
15
        { &hf_pfcp_up_function_features_o14_b1_un6dm,
16206
15
        { "UN6DM", "pfcp.up_function_features.un6dm",
16207
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16208
15
            "UPF support of N6 delay measurement", HFILL }
16209
15
        },
16210
15
        { &hf_pfcp_up_function_features_o14_b2_natpub,
16211
15
        { "NATPUB", "pfcp.up_function_features.natpub",
16212
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16213
15
            "UPF supports the NAT information exposure", HFILL }
16214
15
        },
16215
15
        { &hf_pfcp_up_function_features_o14_b3_ushph,
16216
15
        { "USHPH", "pfcp.up_function_features.ushph",
16217
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16218
15
            "UPF support of handling of headers", HFILL }
16219
15
        },
16220
15
        { &hf_pfcp_up_function_features_o14_b4_mpquic_ip,
16221
15
        { "MPQUIC-IP", "pfcp.up_function_features.mpquic_ip",
16222
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16223
15
            "UPF support of MPQUIC-IP steering functionality", HFILL }
16224
15
        },
16225
15
        { &hf_pfcp_up_function_features_o14_b5_mpquic_e,
16226
15
        { "MPQUIC-E", "pfcp.up_function_features.mpquic_e",
16227
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16228
15
            "UPF support of MPQUIC-E steering functionality", HFILL }
16229
15
        },
16230
15
        { &hf_pfcp_up_function_features_o14_b6_dyntr,
16231
15
        { "DYNTR", "pfcp.up_function_features.dyntr",
16232
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16233
15
            "UPF support of dynamically changing traffic characteristics", HFILL }
16234
15
        },
16235
15
        { &hf_pfcp_up_function_features_o14_b7_muxmf,
16236
15
        { "MUXMF", "pfcp.up_function_features.muxmf",
16237
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16238
15
            "UPF support of differentiated QoS handling for multiplexed media flows", HFILL }
16239
15
        },
16240
16241
15
        { &hf_pfcp_up_function_features_o15_b0_conudp,
16242
15
        { "CONUDP", "pfcp.up_function_features.conudp",
16243
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16244
15
            "UPF support of connect-UDP", HFILL }
16245
15
        },
16246
15
        { &hf_pfcp_up_function_features_o15_b1_moq,
16247
15
        { "MOQ", "pfcp.up_function_features.moq",
16248
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16249
15
            "UP function support of MoQ", HFILL }
16250
15
        },
16251
15
        { &hf_pfcp_up_function_features_o15_b2_ulm,
16252
15
        { "ULM", "pfcp.up_function_features.ulm",
16253
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16254
15
            "UE Level measurement", HFILL }
16255
15
        },
16256
15
        { &hf_pfcp_up_function_features_o15_b3_psitlm,
16257
15
        { "PSITLM", "pfcp.up_function_features.psitlm",
16258
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16259
15
            "UP function support of PDU Set Importance based Transport Level Marking", HFILL }
16260
15
        },
16261
15
        { &hf_pfcp_up_function_features_o15_b4_udpopt,
16262
15
        { "UDPOPT", "pfcp.up_function_features.udpopt",
16263
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16264
15
            "UPF support of UDP Option", HFILL }
16265
15
        },
16266
15
        { &hf_pfcp_up_function_features_o15_b5_qmabr,
16267
15
        { "QMABR", "pfcp.up_function_features.qmabr",
16268
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16269
15
            "UPF support of available bitrate monitoring", HFILL }
16270
15
        },
16271
15
        { &hf_pfcp_up_function_features_o15_b6_papfd,
16272
15
        { "PAPFD", "pfcp.up_function_features.papfd",
16273
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16274
15
            "UP function support of partial PFD provisioning failure", HFILL }
16275
15
        },
16276
16277
15
        { &hf_pfcp_sequence_number,
16278
15
        { "Sequence Number", "pfcp.sequence_number",
16279
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
16280
15
            NULL, HFILL }
16281
15
        },
16282
15
        { &hf_pfcp_metric,
16283
15
        { "Metric", "pfcp.metric",
16284
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
16285
15
            NULL, HFILL }
16286
15
        },
16287
15
        { &hf_pfcp_timer_unit,
16288
15
        { "Timer unit", "pfcp.timer_unit",
16289
15
            FT_UINT8, BASE_DEC, VALS(pfcp_timer_unit_vals), 0xe0,
16290
15
            NULL, HFILL }
16291
15
        },
16292
15
        { &hf_pfcp_timer_value,
16293
15
        { "Timer value", "pfcp.timer_value",
16294
15
            FT_UINT8, BASE_DEC, NULL, 0x1f,
16295
15
            NULL, HFILL }
16296
15
        },
16297
15
        { &hf_pfcp_volume_measurement_b0_tovol,
16298
15
        { "TOVOL", "pfcp.volume_measurement_flags.tovol",
16299
15
            FT_BOOLEAN, 8, NULL, 0x01,
16300
15
            NULL, HFILL }
16301
15
        },
16302
15
        { &hf_pfcp_volume_measurement_b1_ulvol,
16303
15
        { "ULVOL", "pfcp.volume_measurement_flags.ulvol",
16304
15
            FT_BOOLEAN, 8, NULL, 0x02,
16305
15
            NULL, HFILL }
16306
15
        },
16307
15
        { &hf_pfcp_volume_measurement_b2_dlvol,
16308
15
        { "DLVOL", "pfcp.volume_measurement_flags.dlvol",
16309
15
            FT_BOOLEAN, 8, NULL, 0x04,
16310
15
            NULL, HFILL }
16311
15
        },
16312
15
        { &hf_pfcp_volume_measurement_b3_tonop,
16313
15
        { "TONOP", "pfcp.volume_measurement_flags.tonop",
16314
15
            FT_BOOLEAN, 8, NULL, 0x08,
16315
15
            NULL, HFILL }
16316
15
        },
16317
15
        { &hf_pfcp_volume_measurement_b4_ulnop,
16318
15
        { "ULNOP", "pfcp.volume_measurement_flags.ulnop",
16319
15
            FT_BOOLEAN, 8, NULL, 0x10,
16320
15
            NULL, HFILL }
16321
15
        },
16322
15
        { &hf_pfcp_volume_measurement_b5_dlnop,
16323
15
        { "DLNOP", "pfcp.volume_measurement_flags.dlnops",
16324
15
            FT_BOOLEAN, 8, NULL, 0x20,
16325
15
            NULL, HFILL }
16326
15
        },
16327
15
        { &hf_pfcp_vol_meas_tovol,
16328
15
        { "Total Volume", "pfcp.volume_measurement.tovol",
16329
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16330
15
            NULL, HFILL }
16331
15
        },
16332
15
        { &hf_pfcp_vol_meas_ulvol,
16333
15
        { "Uplink Volume", "pfcp.volume_measurement.ulvol",
16334
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16335
15
            NULL, HFILL }
16336
15
        },
16337
15
        { &hf_pfcp_vol_meas_dlvol,
16338
15
        { "Downlink Volume", "pfcp.volume_measurement.dlvol",
16339
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16340
15
            NULL, HFILL }
16341
15
        },
16342
15
        { &hf_pfcp_vol_meas_tonop,
16343
15
        { "Total Number of Packets", "pfcp.volume_measurement.tonop",
16344
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16345
15
            NULL, HFILL }
16346
15
        },
16347
15
        { &hf_pfcp_vol_meas_ulnop,
16348
15
        { "Uplink Number of Packets", "pfcp.volume_measurement.ulnop",
16349
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16350
15
            NULL, HFILL }
16351
15
        },
16352
15
        { &hf_pfcp_vol_meas_dlnop,
16353
15
        { "Downlink Number of Packets", "pfcp.volume_measurement.dlnop",
16354
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16355
15
            NULL, HFILL }
16356
15
        },
16357
15
        { &hf_pfcp_cp_function_features_o5_b0_load,
16358
15
        { "LOAD", "pfcp.cp_function_features.load",
16359
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16360
15
            "Load Control", HFILL }
16361
15
        },
16362
15
        { &hf_pfcp_cp_function_features_o5_b1_ovrl,
16363
15
        { "OVRL", "pfcp.cp_function_features.ovrl",
16364
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16365
15
            "Overload Control", HFILL }
16366
15
        },
16367
15
        { &hf_pfcp_cp_function_features_o5_b2_epfar,
16368
15
        { "EPFAR", "pfcp.cp_function_features.epfar",
16369
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16370
15
            "The CP function supports the Enhanced PFCP Association Release feature", HFILL }
16371
15
        },
16372
15
        { &hf_pfcp_cp_function_features_o5_b3_sset,
16373
15
        { "SSET", "pfcp.cp_function_features.sset",
16374
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
16375
15
            "SMF support of PFCP sessions successively controlled by different SMFs of a same SMF Set", HFILL }
16376
15
        },
16377
15
        { &hf_pfcp_cp_function_features_o5_b4_bundl,
16378
15
        { "BUNDL", "pfcp.cp_function_features.bundl",
16379
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
16380
15
            "PFCP messages bundling", HFILL }
16381
15
        },
16382
15
        { &hf_pfcp_cp_function_features_o5_b5_mpas,
16383
15
        { "MPAS", "pfcp.cp_function_features.mpas",
16384
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
16385
15
            "SMF support for multiple PFCP associations from an SMF set to a single UPF", HFILL }
16386
15
        },
16387
15
        { &hf_pfcp_cp_function_features_o5_b6_ardr,
16388
15
        { "ARDR", "pfcp.cp_function_features.ardr",
16389
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
16390
15
            "CP function supports Additional Usage Reports in the PFCP Session Deletion Response", HFILL }
16391
15
        },
16392
15
        { &hf_pfcp_cp_function_features_o5_b7_uiaur,
16393
15
        { "UIAUR", "pfcp.cp_function_features.uiaur",
16394
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
16395
15
            "CP function supports the UE IP Address Usage Reporting feature", HFILL }
16396
15
        },
16397
15
        { &hf_pfcp_cp_function_features_o6_b0_psucc,
16398
15
        { "PSUCC", "pfcp.cp_function_features.psucc",
16399
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
16400
15
            "CP function supports PFCP session establishment or modification with Partial Success", HFILL }
16401
15
        },
16402
15
        { &hf_pfcp_cp_function_features_o6_b1_rpgur,
16403
15
        { "RPGUR", "pfcp.cp_function_features.rpgur",
16404
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
16405
15
            "CP function supports the Peer GTP-U Entity Restart Reporting", HFILL }
16406
15
        },
16407
15
        { &hf_pfcp_cp_function_features_o6_b2_papfd,
16408
15
        { "PAPFD", "pfcp.cp_function_features.papfd",
16409
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
16410
15
            "CP function supports partial PFD provisioning failure", HFILL }
16411
15
        },
16412
16413
15
        { &hf_pfcp_usage_information_b0_bef,
16414
15
        { "BEF (Before)", "pfcp.usage_information.bef",
16415
15
            FT_BOOLEAN, 8, NULL, 0x01,
16416
15
            NULL, HFILL }
16417
15
        },
16418
15
        { &hf_pfcp_usage_information_b1_aft,
16419
15
        { "AFT (After)", "pfcp.usage_information.aft",
16420
15
            FT_BOOLEAN, 8, NULL, 0x02,
16421
15
            NULL, HFILL }
16422
15
        },
16423
15
        { &hf_pfcp_usage_information_b2_uae,
16424
15
        { "UAE (Usage After Enforcement)", "pfcp.usage_information.uae",
16425
15
            FT_BOOLEAN, 8, NULL, 0x04,
16426
15
            NULL, HFILL }
16427
15
        },
16428
15
        { &hf_pfcp_usage_information_b3_ube,
16429
15
        { "UBE (Usage Before Enforcement)", "pfcp.usage_information.ube",
16430
15
            FT_BOOLEAN, 8, NULL, 0x08,
16431
15
            NULL, HFILL }
16432
15
        },
16433
15
        { &hf_pfcp_application_instance_id,
16434
15
        { "Application Instance Identifier", "pfcp.application_instance_id",
16435
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
16436
15
            NULL, HFILL }
16437
15
        },
16438
15
        { &hf_pfcp_application_instance_id_str,
16439
15
        { "Application Instance Identifier", "pfcp.application_instance_id_str",
16440
15
            FT_STRING, BASE_NONE, NULL, 0x0,
16441
15
            NULL, HFILL }
16442
15
        },
16443
15
        { &hf_pfcp_flow_dir,
16444
15
        { "Flow Direction", "pfcp.flow_dir",
16445
15
            FT_UINT8, BASE_DEC, VALS(pfcp_flow_dir_vals), 0x07,
16446
15
            NULL, HFILL }
16447
15
        },
16448
15
        { &hf_pfcp_packet_rate_b0_ulpr,
16449
15
        { "ULPR (Uplink Packet Rate)", "pfcp.packet_rate.ulpr",
16450
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16451
15
            NULL, HFILL }
16452
15
        },
16453
15
        { &hf_pfcp_packet_rate_b1_dlpr,
16454
15
        { "DLPR (Downlink Packet Rate)", "pfcp.packet_rate.dlpr",
16455
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16456
15
            NULL, HFILL }
16457
15
        },
16458
15
        { &hf_pfcp_packet_rate_b2_aprc,
16459
15
        { "APRC (Additional Packet Rate Control)", "pfcp.packet_rate.aprc",
16460
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16461
15
            NULL, HFILL }
16462
15
        },
16463
15
        { &hf_pfcp_ul_time_unit,
16464
15
        { "Uplink Time Unit", "pfcp.ul_time_unit",
16465
15
            FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals), 0x07,
16466
15
            NULL, HFILL }
16467
15
        },
16468
15
        { &hf_pfcp_max_ul_pr,
16469
15
        { "Maximum Uplink Packet Rate", "pfcp.max_ul_pr",
16470
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16471
15
            NULL, HFILL }
16472
15
        },
16473
15
        { &hf_pfcp_dl_time_unit,
16474
15
        { "Downlink Time Unit", "pfcp.dl_time_unit",
16475
15
            FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals), 0x07,
16476
15
            NULL, HFILL }
16477
15
        },
16478
15
        { &hf_pfcp_max_dl_pr,
16479
15
        { "Maximum Downlink Packet Rate", "pfcp.max_dl_pr",
16480
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16481
15
            NULL, HFILL }
16482
15
        },
16483
15
        { &hf_pfcp_a_ul_time_unit,
16484
15
        { "Additional Uplink Time Unit", "pfcp.a_ul_time_unit",
16485
15
            FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals), 0x07,
16486
15
            NULL, HFILL }
16487
15
        },
16488
15
        { &hf_pfcp_a_max_ul_pr,
16489
15
        { "Additional Maximum Uplink Packet Rate", "pfcp.a_max_ul_pr",
16490
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16491
15
            NULL, HFILL }
16492
15
        },
16493
15
        { &hf_pfcp_a_dl_time_unit,
16494
15
        { "Additional Downlink Time Unit", "pfcp.a_dl_time_unit",
16495
15
            FT_UINT8, BASE_DEC, VALS(pfcp_pr_time_unit_vals), 0x07,
16496
15
            NULL, HFILL }
16497
15
        },
16498
15
        { &hf_pfcp_a_max_dl_pr,
16499
15
        { "Additional Maximum Downlink Packet Rate", "pfcp.a_max_dl_pr",
16500
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16501
15
            NULL, HFILL }
16502
15
        },
16503
15
        { &hf_pfcp_dl_flow_level_marking_b0_ttc,
16504
15
        { "TTC (ToS/Traffic Class)", "pfcp.dl_flow_level_marking.ttc",
16505
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16506
15
            NULL, HFILL }
16507
15
        },
16508
15
        { &hf_pfcp_dl_flow_level_marking_b1_sci,
16509
15
        { "SCI(Service Class Indicator)", "pfcp.dl_flow_level_marking.sci",
16510
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16511
15
            NULL, HFILL }
16512
15
        },
16513
15
        { &hf_pfcp_sci,
16514
15
        { "Service Class Indicator", "pfcp.sci",
16515
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
16516
15
            NULL, HFILL }
16517
15
        },
16518
15
        { &hf_pfcp_dl_data_notification_delay,
16519
15
        { "Delay Value", "pfcp.dl_data_notification_delay",
16520
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
16521
15
            "Delay Value in integer multiples of 50 millisecs, or zero", HFILL }
16522
15
        },
16523
15
        { &hf_pfcp_packet_count,
16524
15
        { "Packet Count", "pfcp.packet_count",
16525
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16526
15
            NULL, HFILL }
16527
15
        },
16528
15
        { &hf_pfcp_dl_data_service_inf_b0_ppi,
16529
15
        { "PPI(Paging Policy Indication)", "pfcp.dl_data_service_inf.ppi",
16530
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16531
15
            NULL, HFILL }
16532
15
        },
16533
15
        { &hf_pfcp_dl_data_service_inf_b1_qfii,
16534
15
        { "QFII(QoS Flow Identifier)", "pfcp.dl_data_service_inf.qfii",
16535
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16536
15
            NULL, HFILL }
16537
15
        },
16538
15
        { &hf_pfcp_dl_data_service_inf_b2_dlpsi,
16539
15
        { "DLPSI(DL Packet Size Indication)", "pfcp.dl_data_service_inf.dlpsi",
16540
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16541
15
            NULL, HFILL }
16542
15
        },
16543
15
        { &hf_pfcp_paging_policy_indication,
16544
15
        { "Paging Policy Indication", "pfcp.dl_data_service_inf.paging_policy_indication",
16545
15
            FT_UINT16, BASE_DEC, NULL, 0x7f,
16546
15
            NULL, HFILL }
16547
15
        },
16548
15
        { &hf_pfcp_dldatapacketsize,
16549
15
        { "DL Data Packet Size", "pfcp.dl_data_service_inf.dlpacketsize",
16550
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16551
15
            NULL, HFILL }
16552
15
        },
16553
15
        { &hf_pfcp_pfcpsmreq_flags_b0_drobu,
16554
15
        { "DROBU (Drop Buffered Packets)", "pfcp.smreq_flags.drobu",
16555
15
            FT_BOOLEAN, 8, NULL, 0x01,
16556
15
            NULL, HFILL }
16557
15
        },
16558
15
        { &hf_pfcp_pfcpsmreq_flags_b1_sndem,
16559
15
        { "SNDEM (Send End Marker Packets)", "pfcp.smreq_flags.sndem",
16560
15
            FT_BOOLEAN, 8, NULL, 0x02,
16561
15
            NULL, HFILL }
16562
15
        },
16563
15
        { &hf_pfcp_pfcpsmreq_flags_b2_qaurr,
16564
15
        { "QAURR (Query All URRs)", "pfcp.smreq_flags.qaurr",
16565
15
            FT_BOOLEAN, 8, NULL, 0x04,
16566
15
            NULL, HFILL }
16567
15
        },
16568
15
        { &hf_pfcp_pfcpsmreq_flags_b3_sumpc,
16569
15
        { "SUMPC (Stop of Usage Measurement to Pause Charging)", "pfcp.smreq_flags.sumpc",
16570
15
            FT_BOOLEAN, 8, NULL, 0x08,
16571
15
            NULL, HFILL }
16572
15
        },
16573
15
        { &hf_pfcp_pfcpsmreq_flags_b4_rumuc,
16574
15
        { "RUMUC (Resume of Usage Measurement to Un-pause of Charging)", "pfcp.smreq_flags.rumuc",
16575
15
            FT_BOOLEAN, 8, NULL, 0x10,
16576
15
            NULL, HFILL }
16577
15
        },
16578
15
        { &hf_pfcp_pfcpsmreq_flags_b5_deteid,
16579
15
        { "DETEID (Delete All DL N3mb and/or N19mb F-TEIDs)", "pfcp.smreq_flags.deteid",
16580
15
            FT_BOOLEAN, 8, NULL, 0x20,
16581
15
            NULL, HFILL }
16582
15
        },
16583
15
        { &hf_pfcp_pfcpsmreq_flags_b6_hrsbom,
16584
15
        { "HRSBOM (HR-SBO Mode)", "pfcp.smreq_flags.hrsbom",
16585
15
            FT_BOOLEAN, 8, NULL, 0x40,
16586
15
            NULL, HFILL }
16587
15
        },
16588
15
        { &hf_pfcp_pfcpsrrsp_flags_b0_drobu,
16589
15
        { "DROBU (Drop Buffered Packets)", "pfcp.srrsp_flags.drobu",
16590
15
            FT_BOOLEAN, 8, NULL, 0x01,
16591
15
            NULL, HFILL }
16592
15
        },
16593
15
        { &hf_pfcp_pfd_contents_flags_b0_fd,
16594
15
        { "FD (Flow Description)", "pfcp.pfd_contents_flags.fd",
16595
15
            FT_BOOLEAN, 8, NULL, 0x01,
16596
15
            NULL, HFILL }
16597
15
        },
16598
15
        { &hf_pfcp_pfd_contents_flags_b1_url,
16599
15
        { "URL (URL)", "pfcp.pfd_contents_flags.url",
16600
15
            FT_BOOLEAN, 8, NULL, 0x02,
16601
15
            NULL, HFILL }
16602
15
        },
16603
15
        { &hf_pfcp_pfd_contents_flags_b2_dn,
16604
15
        { "DN (Domain Name)", "pfcp.pfd_contents_flags.dn",
16605
15
            FT_BOOLEAN, 8, NULL, 0x04,
16606
15
            NULL, HFILL }
16607
15
        },
16608
15
        { &hf_pfcp_pfd_contents_flags_b3_cp,
16609
15
        { "CP (Custom PFD Content)", "pfcp.pfd_contents_flags.cp",
16610
15
            FT_BOOLEAN, 8, NULL, 0x08,
16611
15
            NULL, HFILL }
16612
15
        },
16613
15
        { &hf_pfcp_pfd_contents_flags_b4_dnp,
16614
15
        { "DNP (Domain Name Protocol)", "pfcp.pfd_contents_flags.dnp",
16615
15
            FT_BOOLEAN, 8, NULL, 0x10,
16616
15
            NULL, HFILL }
16617
15
        },
16618
15
        { &hf_pfcp_pfd_contents_flags_b5_afd,
16619
15
        { "AFD (Additional Flow Description)", "pfcp.pfd_contents_flags.afd",
16620
15
            FT_BOOLEAN, 8, NULL, 0x20,
16621
15
            NULL, HFILL }
16622
15
        },
16623
15
        { &hf_pfcp_pfd_contents_flags_b6_aurl,
16624
15
        { "AURL (Additional URL)", "pfcp.pfd_contents_flags.aurl",
16625
15
            FT_BOOLEAN, 8, NULL, 0x40,
16626
15
            NULL, HFILL }
16627
15
        },
16628
15
        { &hf_pfcp_pfd_contents_flags_b7_adnp,
16629
15
        { "ADNP (Additional Domain Name and Domain Name Protocol)", "pfcp.pfd_contents_flags.adnp",
16630
15
            FT_BOOLEAN, 8, NULL, 0x80,
16631
15
            NULL, HFILL }
16632
15
        },
16633
15
        { &hf_pfcp_url_len,
16634
15
        { "Length of URL", "pfcp.url_len",
16635
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16636
15
            NULL, HFILL }
16637
15
        },
16638
15
        { &hf_pfcp_url,
16639
15
        { "URL", "pfcp.url",
16640
15
            FT_STRING, BASE_NONE, NULL, 0x0,
16641
15
            NULL, HFILL }
16642
15
        },
16643
15
        { &hf_pfcp_dn_len,
16644
15
        { "Length of Domain Name", "pfcp.dn_len",
16645
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16646
15
            NULL, HFILL }
16647
15
        },
16648
15
        { &hf_pfcp_dn,
16649
15
        { "Domain Name", "pfcp.dn",
16650
15
            FT_STRING, BASE_NONE, NULL, 0x0,
16651
15
            NULL, HFILL }
16652
15
        },
16653
15
        { &hf_pfcp_cp_len,
16654
15
        { "Length of Custom PFD Content", "pfcp.cp_len",
16655
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16656
15
            NULL, HFILL }
16657
15
        },
16658
15
        { &hf_pfcp_cp,
16659
15
        { "Custom PFD Content", "pfcp.cp",
16660
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
16661
15
            NULL, HFILL }
16662
15
        },
16663
15
        { &hf_pfcp_dnp_len,
16664
15
        { "Length of Domain Name Protocol", "pfcp.dnp_len",
16665
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16666
15
            NULL, HFILL }
16667
15
        },
16668
15
        { &hf_pfcp_dnp,
16669
15
        { "Domain Name Protocol", "pfcp.dnp",
16670
15
            FT_STRING, BASE_NONE, NULL, 0x0,
16671
15
            NULL, HFILL }
16672
15
        },
16673
15
        { &hf_pfcp_afd_len,
16674
15
        { "Length of Additional Flow Description", "pfcp.adf_len",
16675
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16676
15
            NULL, HFILL }
16677
15
        },
16678
15
        { &hf_pfcp_aurl_len,
16679
15
        { "Length of Additional URL", "pfcp.aurl_len",
16680
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16681
15
            NULL, HFILL }
16682
15
        },
16683
15
        { &hf_pfcp_adnp_len,
16684
15
        { "Length of Additional Domain Name and Domain Name Protocol", "pfcp.adnp_len",
16685
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
16686
15
            NULL, HFILL }
16687
15
        },
16688
15
        { &hf_pfcp_header_type,
16689
15
        { "Header Type", "pfcp.header_type",
16690
15
            FT_UINT8, BASE_DEC, VALS(pfcp_header_type_vals), 0x1f,
16691
15
            NULL, HFILL }
16692
15
        },
16693
15
        { &hf_pfcp_hf_len,
16694
15
        { "Length of Header Field Name", "pfcp.hf_len",
16695
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
16696
15
            NULL, HFILL }
16697
15
        },
16698
15
        { &hf_pfcp_hf_name,
16699
15
        { "Header Field Name", "pfcp.hf_name",
16700
15
            FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
16701
15
            NULL, HFILL }
16702
15
        },
16703
15
        { &hf_pfcp_hf_val_len,
16704
15
        { "Length of Header Field Value", "pfcp.hf_val_len",
16705
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
16706
15
            NULL, HFILL }
16707
15
        },
16708
15
        { &hf_pfcp_hf_val,
16709
15
        { "Header Field Value", "pfcp.hf_val",
16710
15
            FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
16711
15
            NULL, HFILL }
16712
15
        },
16713
16714
15
        { &hf_pfcp_measurement_info_b0_mbqe,
16715
15
        { "MBQE (Measurement Before QoS Enforcement)", "pfcp.measurement_info.fd",
16716
15
            FT_BOOLEAN, 8, NULL, 0x01,
16717
15
            NULL, HFILL }
16718
15
        },
16719
15
        { &hf_pfcp_measurement_info_b1_inam,
16720
15
        { "INAM (Inactive Measurement)", "pfcp.measurement_info.inam",
16721
15
            FT_BOOLEAN, 8, NULL, 0x02,
16722
15
            NULL, HFILL }
16723
15
        },
16724
15
        { &hf_pfcp_measurement_info_b2_radi,
16725
15
        { "RADI (Reduced Application Detection Information)", "pfcp.measurement_info.radi",
16726
15
            FT_BOOLEAN, 8, NULL, 0x04,
16727
15
            NULL, HFILL }
16728
15
        },
16729
15
        { &hf_pfcp_measurement_info_b3_istm,
16730
15
        { "ISTM (Immediate Start Time Metering)", "pfcp.measurement_info.istm",
16731
15
            FT_BOOLEAN, 8, NULL, 0x08,
16732
15
            NULL, HFILL }
16733
15
        },
16734
15
        { &hf_pfcp_measurement_info_b4_mnop,
16735
15
        { "MNOP (Measurement of Number of Packets)", "pfcp.measurement_info.mnop",
16736
15
            FT_BOOLEAN, 8, NULL, 0x10,
16737
15
            NULL, HFILL }
16738
15
        },
16739
15
        { &hf_pfcp_measurement_info_b5_sspoc,
16740
15
        { "SSPOC (Send Start Pause of Charging)", "pfcp.measurement_info.sspoc",
16741
15
            FT_BOOLEAN, 8, NULL, 0x20,
16742
15
            NULL, HFILL }
16743
15
        },
16744
15
        { &hf_pfcp_measurement_info_b6_aspoc,
16745
15
        { "ASPOC (Applicable for Start Pause of Charging)", "pfcp.measurement_info.aspoc",
16746
15
            FT_BOOLEAN, 8, NULL, 0x40,
16747
15
            NULL, HFILL }
16748
15
        },
16749
15
        { &hf_pfcp_measurement_info_b7_ciam,
16750
15
        { "CIAM (Control of Inactive Measurement)", "pfcp.measurement_info.ciam",
16751
15
            FT_BOOLEAN, 8, NULL, 0x80,
16752
15
            NULL, HFILL }
16753
15
        },
16754
15
        { &hf_pfcp_node_report_type_b0_upfr,
16755
15
        { "UPFR (User Plane Path Failure Report)", "pfcp.node_report_type.upfr",
16756
15
            FT_BOOLEAN, 8, NULL, 0x01,
16757
15
            NULL, HFILL }
16758
15
        },
16759
15
        { &hf_pfcp_node_report_type_b1_uprr,
16760
15
        { "UPRR (User Plane Path Recovery Report)", "pfcp.node_report_type.uprr",
16761
15
            FT_BOOLEAN, 8, NULL, 0x02,
16762
15
            NULL, HFILL }
16763
15
        },
16764
15
        { &hf_pfcp_node_report_type_b2_ckdr,
16765
15
        { "CKDR (Clock Drift Report)", "pfcp.node_report_type.ckdr",
16766
15
            FT_BOOLEAN, 8, NULL, 0x04,
16767
15
            NULL, HFILL }
16768
15
        },
16769
15
        { &hf_pfcp_node_report_type_b3_gpqr,
16770
15
        { "GPQR (GTP-U Path QoS Report)", "pfcp.node_report_type.gpqr",
16771
15
            FT_BOOLEAN, 8, NULL, 0x08,
16772
15
            NULL, HFILL }
16773
15
        },
16774
15
        { &hf_pfcp_node_report_type_b4_purr,
16775
15
        { "PURR (peer GTP-U entity Restart Report)", "pfcp.node_report_type.purr",
16776
15
            FT_BOOLEAN, 8, NULL, 0x10,
16777
15
            NULL, HFILL }
16778
15
        },
16779
15
        { &hf_pfcp_node_report_type_b5_vsr,
16780
15
        { "VSR (Vendor-Specific Report)", "pfcp.node_report_type.pvsrurr",
16781
15
            FT_BOOLEAN, 8, NULL, 0x20,
16782
15
            NULL, HFILL }
16783
15
        },
16784
15
        { &hf_pfcp_node_report_type_b6_n6dr,
16785
15
        { "N6DR (N6 Delay Measurement Report)", "pfcp.node_report_type.n6dr",
16786
15
            FT_BOOLEAN, 8, NULL, 0x40,
16787
15
            NULL, HFILL }
16788
15
        },
16789
16790
15
        { &hf_pfcp_remote_gtp_u_peer_flags_b0_v6,
16791
15
        { "V6 (IPv6)", "pfcp.remote_gtp_u_peer.flags.v6",
16792
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16793
15
            NULL, HFILL }
16794
15
        },
16795
15
        { &hf_pfcp_remote_gtp_u_peer_flags_b1_v4,
16796
15
        { "V4 (IPv4)", "pfcp.remote_gtp_u_peer.flags.v4",
16797
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16798
15
            NULL, HFILL }
16799
15
        },
16800
15
        { &hf_pfcp_remote_gtp_u_peer_flags_b2_di,
16801
15
        { "DI (Destination Interface)", "pfcp.remote_gtp_u_peer.flags.di",
16802
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16803
15
            NULL, HFILL }
16804
15
        },
16805
15
        { &hf_pfcp_remote_gtp_u_peer_flags_b3_ni,
16806
15
        { "NI (Network Instance)", "pfcp.remote_gtp_u_peer.flags.ni",
16807
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
16808
15
            NULL, HFILL }
16809
15
        },
16810
15
        { &hf_pfcp_remote_gtp_u_peer_flags_b4_rts,
16811
15
        { "RTS (Recovery Timestamp)", "pfcp.remote_gtp_u_peer.flags.rts",
16812
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
16813
15
            NULL, HFILL }
16814
15
        },
16815
15
        { &hf_pfcp_remote_gtp_u_peer_ipv4,
16816
15
        { "IPv4 address", "pfcp.remote_gtp_u_peer.ipv4",
16817
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
16818
15
            NULL, HFILL }
16819
15
        },
16820
15
        { &hf_pfcp_remote_gtp_u_peer_ipv6,
16821
15
        { "IPv6 address", "pfcp.remote_gtp_u_peer.ipv6",
16822
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
16823
15
            NULL, HFILL }
16824
15
        },
16825
15
        { &hf_pfcp_remote_gtp_u_peer_length_di,
16826
15
        { "Length of Destination Interface field", "pfcp.remote_gtp_u_peer.length_di",
16827
15
            FT_UINT16, BASE_DEC, NULL, 0,
16828
15
            NULL, HFILL }
16829
15
        },
16830
15
        { &hf_pfcp_remote_gtp_u_peer_length_ni,
16831
15
        { "Length of Network Instance field", "pfcp.remote_gtp_u_peer.length_ni",
16832
15
            FT_UINT16, BASE_DEC, NULL, 0,
16833
15
            NULL, HFILL }
16834
15
        },
16835
15
        { &hf_pfcp_remote_gtp_u_peer_time_stamp,
16836
15
        { "Time Stamp", "pfcp.remote_gtp_u_peer.time_stamp",
16837
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
16838
15
            NULL, HFILL }
16839
15
        },
16840
15
        { &hf_pfcp_ur_seqn,
16841
15
        { "UR-SEQN", "pfcp.ur_seqn",
16842
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
16843
15
            NULL, HFILL }
16844
15
        },
16845
15
        { &hf_pfcp_oci_flags_b0_aoci,
16846
15
        { "AOCI: Associate OCI with Node ID", "pfcp.oci_flags.aoci",
16847
15
            FT_BOOLEAN, 8, NULL, 0x01,
16848
15
            NULL, HFILL }
16849
15
        },
16850
15
        { &hf_pfcp_pfcp_assoc_rel_req_b0_sarr,
16851
15
        { "SARR (PFCP Association Release Request)", "pfcp.assoc_rel_req.sarr",
16852
15
            FT_BOOLEAN, 8, NULL, 0x01,
16853
15
            NULL, HFILL }
16854
15
        },
16855
15
        { &hf_pfcp_pfcp_assoc_rel_req_b1_urss,
16856
15
        { "URSS (non-zero Usage Reports for the affected PFCP Sessions Sent)", "pfcp.assoc_rel_req.urss",
16857
15
            FT_BOOLEAN, 8, NULL, 0x02,
16858
15
            NULL, HFILL }
16859
15
        },
16860
15
        { &hf_pfcp_upiri_flg_b6_assosi,
16861
15
        { "ASSOSI (Associated Source Instance)", "pfcp.upiri_flags.assosi",
16862
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x40,
16863
15
            NULL, HFILL }
16864
15
        },
16865
15
        { &hf_pfcp_upiri_flg_b5_assoni,
16866
15
        { "ASSONI (Associated Network Instance)", "pfcp.upiri_flags.assoni",
16867
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
16868
15
            NULL, HFILL }
16869
15
        },
16870
15
        { &hf_pfcp_upiri_flg_b2b4_teidri,
16871
15
        { "TEIDRI (TEID Range Indication)", "pfcp.upiri_flags.teidri",
16872
15
            FT_UINT8, BASE_HEX, NULL, 0x1c,
16873
15
            NULL, HFILL }
16874
15
        },
16875
15
        { &hf_pfcp_upiri_flags_b1_v6,
16876
15
        { "V6 (IPv6)", "pfcp.upiri_flags.v6",
16877
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16878
15
            NULL, HFILL }
16879
15
        },
16880
15
        { &hf_pfcp_upiri_flags_b0_v4,
16881
15
        { "V4 (IPv4)", "pfcp.upiri_flags.v4",
16882
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16883
15
            NULL, HFILL }
16884
15
        },
16885
15
        { &hf_pfcp_upiri_teidri,
16886
15
        { "TEID Range Indication", "pfcp.upiri.teidri",
16887
15
            FT_UINT8, BASE_DEC, NULL, 0x1C,
16888
15
            NULL, HFILL }
16889
15
        },
16890
15
        { &hf_pfcp_upiri_teid_range,
16891
15
        { "TEID", "pfcp.upiri.teid_range",
16892
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
16893
15
            NULL, HFILL }
16894
15
        },
16895
15
        { &hf_pfcp_upiri_ipv4,
16896
15
        { "IPv4 address", "pfcp.upiri.ipv4_addr",
16897
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
16898
15
            NULL, HFILL }
16899
15
        },
16900
15
        { &hf_pfcp_upiri_ipv6,
16901
15
        { "IPv6 address", "pfcp.upiri.ipv6_addr",
16902
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
16903
15
            NULL, HFILL }
16904
15
        },
16905
15
        { &hf_pfcp_user_plane_inactivity_timer,
16906
15
        { "User Plane Inactivity Timer", "pfcp.user_plane_inactivity_time",
16907
15
            FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0,
16908
15
            NULL, HFILL }
16909
15
        },
16910
16911
15
        { &hf_pfcp_subsequent_volume_quota_b0_tovol,
16912
15
        { "TOVOL", "pfcp.subsequent_volume_quota_flags.tovol",
16913
15
            FT_BOOLEAN, 8, NULL, 0x01,
16914
15
            NULL, HFILL }
16915
15
        },
16916
15
        { &hf_pfcp_subsequent_volume_quota_b1_ulvol,
16917
15
        { "ULVOL", "pfcp.subsequent_volume_quota_flags.ulvol",
16918
15
            FT_BOOLEAN, 8, NULL, 0x02,
16919
15
            NULL, HFILL }
16920
15
        },
16921
15
        { &hf_pfcp_subsequent_volume_quota_b2_dlvol,
16922
15
        { "DLVOL", "pfcp.subsequent_volume_quota_flags.dlvol",
16923
15
            FT_BOOLEAN, 8, NULL, 0x04,
16924
15
            NULL, HFILL }
16925
15
        },
16926
15
        { &hf_pfcp_subsequent_volume_quota_tovol,
16927
15
        { "Total Volume", "pfcp.subsequent_volume_quota.tovol",
16928
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16929
15
            NULL, HFILL }
16930
15
        },
16931
15
        { &hf_pfcp_subsequent_volume_quota_ulvol,
16932
15
        { "Uplink Volume", "pfcp.subsequent_volume_quota.ulvol",
16933
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16934
15
            NULL, HFILL }
16935
15
        },
16936
15
        { &hf_pfcp_subsequent_volume_quota_dlvol,
16937
15
        { "Downlink Volume", "pfcp.subsequent_volume_quota.dlvol",
16938
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
16939
15
            NULL, HFILL }
16940
15
        },
16941
16942
15
        { &hf_pfcp_subsequent_time_quota,
16943
15
        { "Subsequent Time Quota", "pfcp.subsequent_time_quota",
16944
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
16945
15
            NULL, HFILL }
16946
15
        },
16947
15
        { &hf_pfcp_rqi_flag,
16948
15
        { "RQI", "pfcp.rqi_flag",
16949
15
            FT_BOOLEAN, 8, NULL, 0x01,
16950
15
            NULL, HFILL }
16951
15
        },
16952
15
        { &hf_pfcp_qfi,
16953
15
        { "QFI", "pfcp.qfi_value",
16954
15
            FT_UINT8, BASE_HEX, NULL, 0x3f,
16955
15
            NULL, HFILL }
16956
15
        },
16957
15
        { &hf_pfcp_query_urr_reference,
16958
15
        { "Query URR Reference", "pfcp.query_urr_reference",
16959
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
16960
15
            NULL, HFILL }
16961
15
        },
16962
16963
15
        { &hf_pfcp_additional_usage_reports_information_b15_auri,
16964
15
        { "AURI (Additional Usage Reports Indication)", "pfcp.additional_usage_reports_information_auri",
16965
15
            FT_BOOLEAN, 16, NULL, 0x8000,
16966
15
            NULL, HFILL }
16967
15
        },
16968
15
        { &hf_pfcp_additional_usage_reports_information_b14_b0_number_value,
16969
15
        { "Number of Additional Usage Reports value", "pfcp.additional_usage_reports_information_value",
16970
15
            FT_UINT16, BASE_DEC, NULL, 0x7FFF,
16971
15
            NULL, HFILL }
16972
15
        },
16973
15
        { &hf_pfcp_traffic_endpoint_id,
16974
15
        { "Traffic Endpoint ID", "pfcp.traffic_endpoint_id",
16975
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
16976
15
            NULL, HFILL }
16977
15
        },
16978
16979
15
        { &hf_pfcp_mac_address_flags_b0_sour,
16980
15
        { "SOUR", "pfcp.mac_address.flags.sour",
16981
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
16982
15
            NULL, HFILL }
16983
15
        },
16984
15
        { &hf_pfcp_mac_address_flags_b1_dest,
16985
15
        { "DEST", "pfcp.mac_address.flags.dest",
16986
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
16987
15
            NULL, HFILL }
16988
15
        },
16989
15
        { &hf_pfcp_mac_address_flags_b2_usou,
16990
15
        { "USUO", "pfcp.mac_address.flags.usuo",
16991
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
16992
15
            NULL, HFILL }
16993
15
        },
16994
15
        { &hf_pfcp_mac_address_flags_b3_udes,
16995
15
        { "UDES", "pfcp.mac_address.flags.udes",
16996
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
16997
15
            NULL, HFILL }
16998
15
        },
16999
15
        { &hf_pfcp_mac_address_source_mac_address,
17000
15
        { "Source MAC Address", "pfcp.mac_address.sour",
17001
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17002
15
            NULL, HFILL }
17003
15
        },
17004
15
        { &hf_pfcp_mac_address_dest_mac_address,
17005
15
        { "Destination MAC Address", "pfcp.mac_address.dest",
17006
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17007
15
            NULL, HFILL }
17008
15
        },
17009
15
        { &hf_pfcp_mac_address_upper_source_mac_address,
17010
15
        { "Upper Source MAC Address", "pfcp.mac_address.usou",
17011
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17012
15
            NULL, HFILL }
17013
15
        },
17014
15
        { &hf_pfcp_mac_address_upper_dest_mac_address,
17015
15
        { "Upper Destination MAC Address", "pfcp.mac_address.udes",
17016
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17017
15
            NULL, HFILL }
17018
15
        },
17019
17020
15
        { &hf_pfcp_c_tag_flags_b0_pcp,
17021
15
        { "PCP", "pfcp.c_tag.flags.pcp",
17022
15
            FT_BOOLEAN, 8, NULL, 0x01,
17023
15
            "Priority code point", HFILL }
17024
15
        },
17025
15
        { &hf_pfcp_c_tag_flags_b1_dei,
17026
15
        { "DEI", "pfcp.c_tag.flags.dei",
17027
15
            FT_BOOLEAN, 8, NULL, 0x02,
17028
15
            "Drop eligible indicator", HFILL }
17029
15
        },
17030
15
        { &hf_pfcp_c_tag_flags_b2_vid,
17031
15
        { "VID", "pfcp.c_tag.flags.vid",
17032
15
            FT_BOOLEAN, 8, NULL, 0x04,
17033
15
            "VLAN identifier", HFILL }
17034
15
        },
17035
15
        { &hf_pfcp_c_tag_cvid,
17036
15
        { "C-VID", "pfcp.c_tag.cvid",
17037
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
17038
15
            NULL, HFILL }
17039
15
        },
17040
15
        { &hf_pfcp_c_tag_dei_flag,
17041
15
        { "Drop eligible indicator (DEI)", "pfcp.c_tag.dei_flag",
17042
15
            FT_BOOLEAN, 8, TFS(&tfs_eligible_ineligible), 0x08,
17043
15
            NULL, HFILL }
17044
15
        },
17045
15
        { &hf_pfcp_c_tag_pcp_value,
17046
15
        { "Priority code point (PCP)", "pfcp.c_tag.pcp",
17047
15
            FT_UINT8, BASE_DEC, VALS(pfcp_vlan_tag_pcp_vals), 0x07,
17048
15
            NULL, HFILL }
17049
15
        },
17050
17051
15
        { &hf_pfcp_s_tag_flags_b0_pcp,
17052
15
        { "PCP", "pfcp.s_tag.flags.pcp",
17053
15
            FT_BOOLEAN, 8, NULL, 0x01,
17054
15
            "Priority code point", HFILL }
17055
15
        },
17056
15
        { &hf_pfcp_s_tag_flags_b1_dei,
17057
15
        { "DEI", "pfcp.s_tag.flags.dei",
17058
15
            FT_BOOLEAN, 8, NULL, 0x02,
17059
15
            "Drop eligible indicator", HFILL }
17060
15
        },
17061
15
        { &hf_pfcp_s_tag_flags_b2_vid,
17062
15
        { "VID", "pfcp.s_tag.flags.vid",
17063
15
            FT_BOOLEAN, 8, NULL, 0x04,
17064
15
            "VLAN identifier", HFILL }
17065
15
        },
17066
15
        { &hf_pfcp_s_tag_svid,
17067
15
        { "S-VID", "pfcp.s_tag.svid",
17068
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
17069
15
            NULL, HFILL }
17070
15
        },
17071
15
        { &hf_pfcp_s_tag_dei_flag,
17072
15
        { "Drop eligible indicator (DEI)", "pfcp.s_tag.dei_flag",
17073
15
            FT_BOOLEAN, 8, TFS(&tfs_eligible_ineligible), 0x08,
17074
15
            NULL, HFILL }
17075
15
        },
17076
15
        { &hf_pfcp_s_tag_pcp_value,
17077
15
        { "Priority code point (PCP)", "pfcp.s_tag.pcp",
17078
15
            FT_UINT8, BASE_DEC, VALS(pfcp_vlan_tag_pcp_vals), 0x07,
17079
15
            NULL, HFILL }
17080
15
        },
17081
17082
15
        { &hf_pfcp_ethertype,
17083
15
        { "Ethertype", "pfcp.ethertype",
17084
15
            FT_UINT16, BASE_HEX, VALS(etype_vals), 0x0,
17085
15
            NULL, HFILL }
17086
15
        },
17087
17088
15
        { &hf_pfcp_proxying_flags_b0_arp,
17089
15
        { "ARP", "pfcp.proxying.flags.arp",
17090
15
            FT_BOOLEAN, 8, NULL, 0x01,
17091
15
            NULL, HFILL }
17092
15
        },
17093
15
        { &hf_pfcp_proxying_flags_b1_ins,
17094
15
        { "INS", "pfcp.proxying.flags.ins",
17095
15
            FT_BOOLEAN, 8, NULL, 0x02,
17096
15
            NULL, HFILL }
17097
15
        },
17098
17099
15
        { &hf_pfcp_ethertype_filter_id,
17100
15
        { "Ethertype Filter ID", "pfcp.ethertype_filter_id",
17101
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
17102
15
            NULL, HFILL }
17103
15
        },
17104
17105
15
        { &hf_pfcp_ethertype_filter_properties_flags_b0_bide,
17106
15
        { "BIDE", "pfcp.ethertype_filter_properties.flags.bide",
17107
15
            FT_BOOLEAN, 8, NULL, 0x01,
17108
15
            NULL, HFILL }
17109
15
        },
17110
17111
15
        { &hf_pfcp_suggested_buffering_packets_count_packet_count,
17112
15
        { "Packet count", "pfcp.suggested_buffering_packets_count.packet_count",
17113
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17114
15
            NULL, HFILL }
17115
15
        },
17116
17117
15
        { &hf_pfcp_user_id_flags_b0_imsif,
17118
15
        { "IMSIF", "pfcp.user_id.flags.imsif",
17119
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17120
15
            NULL, HFILL }
17121
15
        },
17122
15
        { &hf_pfcp_user_id_flags_b1_imeif,
17123
15
        { "IMEIF", "pfcp.user_id.flags.imeif",
17124
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17125
15
            NULL, HFILL }
17126
15
        },
17127
15
        { &hf_pfcp_user_id_flags_b2_msisdnf,
17128
15
        { "MSISDNF", "pfcp.user_id.flags.msisdnf",
17129
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17130
15
            NULL, HFILL }
17131
15
        },
17132
15
        { &hf_pfcp_user_id_flags_b3_naif,
17133
15
        { "NAIF", "pfcp.user_id.flags.naif",
17134
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
17135
15
            NULL, HFILL }
17136
15
        },
17137
15
        { &hf_pfcp_user_id_flags_b4_supif,
17138
15
        { "SUPIF", "pfcp.user_id.flags.supif",
17139
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
17140
15
            NULL, HFILL }
17141
15
        },
17142
15
        { &hf_pfcp_user_id_flags_b5_gpsif,
17143
15
        { "GPSIF", "pfcp.user_id.flags.gpsif",
17144
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
17145
15
            NULL, HFILL }
17146
15
        },
17147
15
        { &hf_pfcp_user_id_flags_b6_peif,
17148
15
        { "PEIF", "pfcp.user_id.flags.peif",
17149
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x40,
17150
15
            NULL, HFILL }
17151
15
        },
17152
17153
15
        { &hf_pfcp_user_id_length_of_imsi,
17154
15
        { "Length of IMSI", "pfcp.user_id.length_of_imsi",
17155
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17156
15
            NULL, HFILL }
17157
15
        },
17158
15
        { &hf_pfcp_user_id_length_of_imei,
17159
15
        { "Length of IMEI", "pfcp.user_id.length_of_imei",
17160
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17161
15
            NULL, HFILL }
17162
15
        },
17163
15
        { &hf_pfcp_user_id_imei,
17164
15
        { "IMEI", "pfcp.user_id.imei",
17165
15
            FT_STRING, BASE_NONE, NULL, 0,
17166
15
            NULL, HFILL }
17167
15
        },
17168
15
        { &hf_pfcp_user_id_length_of_msisdn,
17169
15
        { "Length of MSISDN", "pfcp.user_id.length_of_msisdn",
17170
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17171
15
            NULL, HFILL }
17172
15
        },
17173
15
        { &hf_pfcp_user_id_length_of_nai,
17174
15
        { "Length of NAI", "pfcp.user_id.length_of_nai",
17175
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17176
15
            NULL, HFILL }
17177
15
        },
17178
15
        { &hf_pfcp_user_id_nai,
17179
15
        { "NAI", "pfcp.user_id.nai",
17180
15
            FT_STRING, BASE_NONE, NULL, 0x0,
17181
15
            NULL, HFILL }
17182
15
        },
17183
15
        { &hf_pfcp_user_id_length_of_supi,
17184
15
        { "Length of SUPI", "pfcp.user_id.length_of_supi",
17185
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17186
15
            NULL, HFILL }
17187
15
        },
17188
15
        { &hf_pfcp_user_id_supi,
17189
15
        { "SUPI", "pfcp.user_id.supi",
17190
15
            FT_STRING, BASE_NONE, NULL, 0x0,
17191
15
            NULL, HFILL }
17192
15
        },
17193
15
        { &hf_pfcp_user_id_length_of_gpsi,
17194
15
        { "Length of GPSI", "pfcp.user_id.length_of_gpsi",
17195
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17196
15
            NULL, HFILL }
17197
15
        },
17198
15
        { &hf_pfcp_user_id_gpsi,
17199
15
        { "GPSI", "pfcp.user_id.gpsi",
17200
15
            FT_STRING, BASE_NONE, NULL, 0x0,
17201
15
            NULL, HFILL }
17202
15
        },
17203
15
        { &hf_pfcp_user_id_length_of_pei,
17204
15
        { "Length of PEI", "pfcp.user_id.length_of_pei",
17205
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17206
15
            NULL, HFILL }
17207
15
        },
17208
15
        { &hf_pfcp_user_id_pei,
17209
15
        { "PEI", "pfcp.user_id.pei",
17210
15
            FT_STRING, BASE_NONE, NULL, 0x0,
17211
15
            NULL, HFILL }
17212
15
        },
17213
17214
15
        { &hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi,
17215
15
        { "IMSIF", "pfcp.ethernet_pdu_session_information.flags.ethi",
17216
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17217
15
            NULL, HFILL }
17218
15
        },
17219
17220
15
        { &hf_pfcp_mac_addresses_detected_number_of_mac_addresses,
17221
15
        { "Number of MAC addresses", "pfcp.mac_addresses_detected.number_of_mac_addresses",
17222
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17223
15
            NULL, HFILL }
17224
15
        },
17225
15
        { &hf_pfcp_mac_addresses_detected_mac_address,
17226
15
        { "MAC Address", "pfcp.mac_addresses_detected.mac_address",
17227
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17228
15
            NULL, HFILL }
17229
15
        },
17230
15
        { &hf_pfcp_mac_addresses_detected_length_of_ctag,
17231
15
        { "Length of C-TAG", "pfcp.mac_addresses_detected.length_of_ctag",
17232
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17233
15
            NULL, HFILL }
17234
15
        },
17235
15
        { &hf_pfcp_mac_addresses_detected_length_of_stag,
17236
15
        { "Length of S-TAG", "pfcp.mac_addresses_detected.length_of_stag",
17237
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17238
15
            NULL, HFILL }
17239
15
        },
17240
17241
15
        { &hf_pfcp_mac_addresses_removed_number_of_mac_addresses,
17242
15
        { "Number of MAC addresses", "pfcp.mac_addresses_removed.number_of_mac_address",
17243
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17244
15
            NULL, HFILL }
17245
15
        },
17246
15
        { &hf_pfcp_mac_addresses_removed_mac_address,
17247
15
        { "MAC Address", "pfcp.mac_addresses_removed.mac_addresses",
17248
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17249
15
            NULL, HFILL }
17250
15
        },
17251
15
        { &hf_pfcp_mac_addresses_removed_length_of_ctag,
17252
15
        { "Length of C-TAG", "pfcp.mac_addresses_removed.length_of_ctag",
17253
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17254
15
            NULL, HFILL }
17255
15
        },
17256
15
        { &hf_pfcp_mac_addresses_removed_length_of_stag,
17257
15
        { "Length of S-TAG", "pfcp.mac_addresses_removed.length_of_stag",
17258
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17259
15
            NULL, HFILL }
17260
15
        },
17261
17262
15
        { &hf_pfcp_ethernet_inactivity_timer,
17263
15
        { "Ethernet Inactivity Timer", "pfcp.ethernet",
17264
15
            FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0,
17265
15
            NULL, HFILL }
17266
15
        },
17267
17268
15
        { &hf_pfcp_subsequent_event_quota,
17269
15
        { "Subsequent Event Quota", "pfcp.subsequent_event_quota",
17270
15
            FT_UINT32, BASE_DEC, NULL, 0,
17271
15
            NULL, HFILL }
17272
15
        },
17273
17274
15
        { &hf_pfcp_subsequent_event_threshold,
17275
15
        { "Subsequent Event Threshold", "pfcp.subsequent_event_threshold",
17276
15
            FT_UINT32, BASE_DEC, NULL, 0,
17277
15
            NULL, HFILL }
17278
15
        },
17279
17280
15
        { &hf_pfcp_trace_information_trace_id,
17281
15
        { "Trace ID", "pfcp.trace_information.traceid",
17282
15
            FT_UINT24, BASE_DEC, NULL, 0,
17283
15
            NULL, HFILL }
17284
15
        },
17285
15
        { &hf_pfcp_trace_information_length_trigger_events,
17286
15
        { "Length of Trigger Events", "pfcp.trace_information.length_trigger_events",
17287
15
            FT_UINT8, BASE_DEC, NULL, 0,
17288
15
            NULL, HFILL }
17289
15
        },
17290
15
        { &hf_pfcp_trace_information_trigger_events,
17291
15
        { "Trigger Events", "pfcp.trace_information.trigger_events",
17292
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17293
15
            NULL, HFILL }
17294
15
        },
17295
15
        { &hf_pfcp_trace_information_session_trace_depth,
17296
15
        { "Session Trace Depth", "pfcp.trace_information.session_trace_depth",
17297
15
            FT_UINT8, BASE_DEC, NULL, 0,
17298
15
            NULL, HFILL }
17299
15
        },
17300
15
        { &hf_pfcp_trace_information_length_list_interfaces,
17301
15
        { "Length of List of Interfaces", "pfcp.trace_information.length_list_interfaces",
17302
15
            FT_UINT8, BASE_DEC, NULL, 0,
17303
15
            NULL, HFILL }
17304
15
        },
17305
15
        { &hf_pfcp_trace_information_list_interfaces,
17306
15
        { "List of Interfaces", "pfcp.trace_information.list_interfaces",
17307
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17308
15
            NULL, HFILL }
17309
15
        },
17310
15
        { &hf_pfcp_trace_information_length_ipaddress,
17311
15
        { "Length of IP Address", "pfcp.trace_information.length_ipaddress",
17312
15
            FT_UINT8, BASE_DEC, NULL, 0,
17313
15
            NULL, HFILL }
17314
15
        },
17315
15
        { &hf_pfcp_trace_information_ipv4,
17316
15
        { "IP Address of Trace Collection Entity", "pfcp.trace_information.ipv4",
17317
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17318
15
            NULL, HFILL }
17319
15
        },
17320
15
        { &hf_pfcp_trace_information_ipv6,
17321
15
        { "IP Address of Trace Collection Entity", "pfcp.trace_information.ipv6",
17322
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17323
15
            NULL, HFILL }
17324
15
        },
17325
17326
15
        { &hf_pfcp_framed_route,
17327
15
        { "Framed-Route", "pfcp.framed_route",
17328
15
            FT_STRING, BASE_NONE, NULL, 0x0,
17329
15
            NULL, HFILL }
17330
15
        },
17331
15
        { &hf_pfcp_framed_routing,
17332
15
        { "Framed-Routing", "pfcp.framed_routing",
17333
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17334
15
            NULL, HFILL }
17335
15
        },
17336
15
        { &hf_pfcp_framed_ipv6_route,
17337
15
        { "Framed-IPv6-Route", "pfcp.framed_ipv6_route",
17338
15
            FT_STRING, BASE_NONE, NULL, 0x0,
17339
15
            NULL, HFILL }
17340
15
        },
17341
17342
15
        { &hf_pfcp_event_quota,
17343
15
        { "Event Quota", "pfcp.event_quota",
17344
15
            FT_UINT32, BASE_DEC, NULL, 0,
17345
15
            NULL, HFILL }
17346
15
        },
17347
17348
15
        { &hf_pfcp_event_threshold,
17349
15
        { "Event Threshold", "pfcp.event_threshold",
17350
15
            FT_UINT32, BASE_DEC, NULL, 0,
17351
15
            NULL, HFILL }
17352
15
        },
17353
17354
15
        { &hf_pfcp_time_stamp,
17355
15
        { "Time Stamp", "pfcp.time_stamp",
17356
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
17357
15
            NULL, HFILL }
17358
15
        },
17359
17360
15
        { &hf_pfcp_averaging_window,
17361
15
        { "Averaging Window", "pfcp.averaging_window",
17362
15
            FT_UINT32, BASE_DEC, NULL, 0,
17363
15
            NULL, HFILL }
17364
15
        },
17365
17366
15
        { &hf_pfcp_paging_policy_indicator,
17367
15
        { "Paging Policy Indicator (PPI)", "pfcp.ppi",
17368
15
            FT_UINT8, BASE_DEC, NULL, 0x7,
17369
15
            NULL, HFILL }
17370
15
        },
17371
15
        { &hf_pfcp_apn_dnn,
17372
15
        { "APN/DNN", "pfcp.apn_dnn",
17373
15
            FT_STRING, BASE_NONE, NULL, 0x0,
17374
15
            NULL, HFILL }
17375
15
        },
17376
15
        { &hf_pfcp_tgpp_interface_type,
17377
15
        { "3GPP Interface Type", "pfcp.tgpp_interface_type",
17378
15
            FT_UINT8, BASE_DEC, VALS(pfcp_tgpp_interface_type_vals), 0x3f,
17379
15
            NULL, HFILL }
17380
15
        },
17381
17382
15
        { &hf_pfcp_pfcpsrreq_flags_b0_psdbu,
17383
15
        { "PSDBU (PFCP Session Deleted By the UP function)", "pfcp.srreq_flags.psdbu",
17384
15
            FT_BOOLEAN, 8, NULL, 0x01,
17385
15
            NULL, HFILL }
17386
15
        },
17387
17388
15
        { &hf_pfcp_pfcpaureq_flags_b0_parps,
17389
15
        { "PARPBS (PFCP Association Release Preparation Start)", "pfcp.aureq_flags.parps",
17390
15
            FT_BOOLEAN, 8, NULL, 0x01,
17391
15
            NULL, HFILL }
17392
15
        },
17393
17394
15
        { &hf_pfcp_activation_time,
17395
15
        { "Activation Time", "pfcp.activation_time",
17396
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
17397
15
            NULL, HFILL }
17398
15
        },
17399
15
        { &hf_pfcp_deactivation_time,
17400
15
        { "Deactivation Time", "pfcp.deactivation_time",
17401
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0,
17402
15
            NULL, HFILL }
17403
15
        },
17404
17405
15
        { &hf_pfcp_mar_id,
17406
15
        { "MAR ID", "pfcp.mar_id",
17407
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17408
15
            NULL, HFILL }
17409
15
        },
17410
17411
15
        { &hf_pfcp_steering_functionality,
17412
15
        { "Steering Functionality", "pfcp.steering_functionality",
17413
15
            FT_UINT8, BASE_DEC, VALS(pfcp_steering_functionality_vals), 0xF,
17414
15
            NULL, HFILL }
17415
15
        },
17416
15
        { &hf_pfcp_steering_mode,
17417
15
        { "Steering Mode", "pfcp.steering_mode",
17418
15
            FT_UINT8, BASE_DEC, VALS(pfcp_steering_mode_vals), 0xF,
17419
15
            NULL, HFILL }
17420
15
        },
17421
17422
15
        { &hf_pfcp_weight,
17423
15
        { "Weight", "pfcp.weight",
17424
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17425
15
            NULL, HFILL }
17426
15
        },
17427
15
        { &hf_pfcp_priority,
17428
15
        { "Priority", "pfcp.priority",
17429
15
            FT_UINT8, BASE_DEC, VALS(pfcp_priority_vals), 0xF,
17430
15
            NULL, HFILL }
17431
15
        },
17432
17433
15
        { &hf_pfcp_ue_ip_address_pool_length,
17434
15
        { "UE IP address Pool Identity Length", "pfcp.ue_ip_address_pool_length",
17435
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17436
15
            NULL, HFILL }
17437
15
        },
17438
15
        { &hf_pfcp_ue_ip_address_pool_identity,
17439
15
        { "UE IP address Pool Identity", "pfcp.ue_ip_address_pool_identity",
17440
15
            FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
17441
15
            NULL, HFILL }
17442
15
        },
17443
17444
15
        { &hf_pfcp_alternative_smf_ip_address_flags_ppe,
17445
15
        { "PPE (Preferred PFCP Entity)", "pfcp.alternative_smf_ip_address_flags.ppe",
17446
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17447
15
            NULL, HFILL }
17448
15
        },
17449
15
        { &hf_pfcp_alternative_smf_ip_address_ipv4,
17450
15
        { "IPv4 address", "pfcp.alternative_smf_ip_address.ipv4",
17451
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17452
15
            NULL, HFILL }
17453
15
        },
17454
15
        { &hf_pfcp_alternative_smf_ip_address_ipv6,
17455
15
        { "IPv6 address", "pfcp.alternative_smf_ip_address.ipv6",
17456
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17457
15
            NULL, HFILL }
17458
15
        },
17459
17460
15
        { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b0_priueai,
17461
15
        { "PRIUEAI (Packet Replication Information – UE/PDU Session Address Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.priueai",
17462
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17463
15
            NULL, HFILL }
17464
15
        },
17465
15
        { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b1_prin19i,
17466
15
        { "PRIN19I (Packet Replication Information - N19 Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.prin19i",
17467
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17468
15
            NULL, HFILL }
17469
15
        },
17470
15
        { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b2_prin6i,
17471
15
        { "PRIN6I (Packet Replication Information - N6 Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.prin6i",
17472
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17473
15
            NULL, HFILL }
17474
15
        },
17475
15
        { &hf_pfcp_packet_replication_and_detection_carry_on_information_flags_b3_dcaroni,
17476
15
        { "DCARONI (Detection Carry-On Indication)", "pfcp.packet_replication_and_detection_carry_on_information.flags.dcaroni",
17477
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
17478
15
            NULL, HFILL }
17479
15
        },
17480
17481
15
        { &hf_pfcp_validity_time_value,
17482
15
        { "Validity Time value", "pfcp.validity_time_value",
17483
15
            FT_UINT32, BASE_DEC|BASE_UNIT_STRING, UNS(&units_seconds), 0x0,
17484
15
            NULL, HFILL }
17485
15
        },
17486
15
        { &hf_pfcp_validity_time_str,
17487
15
        { "Validity Time", "pfcp.validity_time",
17488
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
17489
15
            NULL, HFILL }
17490
15
        },
17491
17492
15
        { &hf_pfcp_number_of_reports,
17493
15
        { "Number of Reports", "pfcp.number_of_reports",
17494
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17495
15
            NULL, HFILL }
17496
15
        },
17497
17498
15
        { &hf_pfcp_pfcpasrsp_flags_flags_b0_psrei,
17499
15
        { "PSREI (PFCP Session Retained Indication)", "pfcp.asrsp_flags.flags.psrei",
17500
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17501
15
            NULL, HFILL }
17502
15
        },
17503
15
        { &hf_pfcp_pfcpasrsp_flags_flags_b1_uupsi,
17504
15
        { "UUPSI (UPF configured for IPUPS indication)", "pfcp.asrsp_flags.flags.uupsi",
17505
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17506
15
            NULL, HFILL }
17507
15
        },
17508
17509
15
        { &hf_pfcp_cp_pfcp_entity_ip_address_ipv4,
17510
15
        { "IPv4 address", "pfcp.cp_pfcp_entity_ip_address.ipv4",
17511
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17512
15
            NULL, HFILL }
17513
15
        },
17514
15
        { &hf_pfcp_cp_pfcp_entity_ip_address_ipv6,
17515
15
        { "IPv6 address", "pfcp.cp_pfcp_entity_ip_address.ipv6",
17516
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17517
15
            NULL, HFILL }
17518
15
        },
17519
17520
15
        { &hf_pfcp_pfcpsereq_flags_flags_b0_resti,
17521
15
        { "RESTI (Restoration Indication)", "pfcp.sereq_flags.flags.resti",
17522
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17523
15
            NULL, HFILL }
17524
15
        },
17525
15
        { &hf_pfcp_pfcpsereq_flags_flags_b1_sumpc,
17526
15
        { "SUMPC (Stop of Measurement of Pause of Charging)", "pfcp.sereq_flags.flags.sumpc",
17527
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17528
15
            NULL, HFILL }
17529
15
        },
17530
15
        { &hf_pfcp_pfcpsereq_flags_flags_b2_hrsbom,
17531
15
        { "HRSBOM (HR-SBO Mode)", "pfcp.sereq_flags.flags.hrsbom",
17532
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17533
15
            NULL, HFILL }
17534
15
        },
17535
17536
15
        { &hf_pfcp_ip_multicast_address_flags_b2_range,
17537
15
        { "RANGE", "pfcp.ip_multicast_address.flags.range",
17538
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17539
15
            NULL, HFILL }
17540
15
        },
17541
15
        { &hf_pfcp_ip_multicast_address_flags_b3_any,
17542
15
        { "ANY", "pfcp.ip_multicast_address.flags.any",
17543
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
17544
15
            NULL, HFILL }
17545
15
        },
17546
15
        { &hf_pfcp_ip_multicast_address_start_ipv4,
17547
15
        { "(Start) IPv4 address", "pfcp.ip_multicast_address.start_ipv4",
17548
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17549
15
            NULL, HFILL }
17550
15
        },
17551
15
        { &hf_pfcp_ip_multicast_address_start_ipv6,
17552
15
        { "(Start) IPv6 address", "pfcp.ip_multicast_address.start_ipv6",
17553
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17554
15
            NULL, HFILL }
17555
15
        },
17556
15
        { &hf_pfcp_ip_multicast_address_end_ipv4,
17557
15
        { "(End) IPv4 address", "pfcp.ip_multicast_address.end_ipv4",
17558
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17559
15
            NULL, HFILL }
17560
15
        },
17561
15
        { &hf_pfcp_ip_multicast_address_end_ipv6,
17562
15
        { "(End) IPv6 address", "pfcp.ip_multicast_address.end_ipv6",
17563
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17564
15
            NULL, HFILL }
17565
15
        },
17566
17567
15
        { &hf_pfcp_source_ip_address_flags_b2_mpl,
17568
15
        { "MPL (Mask/Prefix Length)", "pfcp.source_ip_address.flags.mpl",
17569
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17570
15
            NULL, HFILL }
17571
15
        },
17572
15
        { &hf_pfcp_source_ip_address_ipv4,
17573
15
        { "IPv4 address", "pfcp.source_ip_address.ipv4",
17574
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17575
15
            NULL, HFILL }
17576
15
        },
17577
15
        { &hf_pfcp_source_ip_address_ipv6,
17578
15
        { "IPv6 address", "pfcp.source_ip_address.ipv6",
17579
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17580
15
            NULL, HFILL }
17581
15
        },
17582
15
        { &hf_pfcp_source_ip_address_mask_prefix_lengt,
17583
15
        { "Mask/Prefix Length", "pfcp.source_ip_address.mpl",
17584
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17585
15
            NULL, HFILL }
17586
15
        },
17587
17588
15
        { &hf_pfcp_packet_rate_status_flags_b0_ul,
17589
15
        { "UL", "pfcp.packet_rate_status.flags.ul",
17590
15
            FT_BOOLEAN, 8, NULL, 0x01,
17591
15
            NULL, HFILL }
17592
15
        },
17593
15
        { &hf_pfcp_packet_rate_status_flags_b1_dl,
17594
15
        { "DL", "pfcp.packet_rate_status.flags.dl",
17595
15
            FT_BOOLEAN, 8, NULL, 0x02,
17596
15
            NULL, HFILL }
17597
15
        },
17598
15
        { &hf_pfcp_packet_rate_status_flags_b2_apr,
17599
15
        { "APR", "pfcp.packet_rate_status.flags.apr",
17600
15
            FT_BOOLEAN, 8, NULL, 0x04,
17601
15
            NULL, HFILL }
17602
15
        },
17603
15
        { &hf_pfcp_packet_rate_status_ul,
17604
15
        { "UL (remaining uplink packet limit)", "pfcp.packet_rate_status.tovol",
17605
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17606
15
            NULL, HFILL }
17607
15
        },
17608
15
        { &hf_pfcp_packet_rate_status_dl,
17609
15
        { "DL (remaining downlink packet limit)", "pfcp.packet_rate_status.ulvol",
17610
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17611
15
            NULL, HFILL }
17612
15
        },
17613
15
        { &hf_pfcp_packet_rate_status_apr_ul,
17614
15
        { "Additional UL (remaining uplink packet limit)", "pfcp.packet_rate_status.apr_tovol",
17615
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17616
15
            NULL, HFILL }
17617
15
        },
17618
15
        { &hf_pfcp_packet_rate_status_apr_dl,
17619
15
        { "Additional DL (remaining downlink packet limit)", "pfcp.packet_rate_status.apr_ulvol",
17620
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17621
15
            NULL, HFILL }
17622
15
        },
17623
15
        { &hf_pfcp_packet_rate_status_validity_time,
17624
15
        { "Rate Status Validity Time value", "pfcp.packet_rate_status.validity_time",
17625
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
17626
15
            NULL, HFILL }
17627
15
        },
17628
17629
15
        { &hf_pfcp_create_bridge_router_info_flags_b0_bii,
17630
15
        { "BII (Bridge Information Indication)", "pfcp.create_bridge_router_info.flags.bii",
17631
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17632
15
            NULL, HFILL }
17633
15
        },
17634
15
        { &hf_pfcp_create_bridge_router_info_flags_b1_rii,
17635
15
        { "RII (Router Information Indication)", "pfcp.create_bridge_router_info.flags.rii",
17636
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17637
15
            NULL, HFILL }
17638
15
        },
17639
17640
15
        { &hf_pfcp_port_number,
17641
15
        { "Port Number value", "pfcp.port_number.value",
17642
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
17643
15
            NULL, HFILL }
17644
15
        },
17645
17646
15
        { &hf_pfcp_nw_tt_port_number,
17647
15
        { "NW-TT Port Number value", "pfcp.nw_tt_port_number.value",
17648
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
17649
15
            NULL, HFILL }
17650
15
        },
17651
17652
15
        { &hf_pfcp_5gs_user_plane_node_id_flags_b0_bid,
17653
15
        { "BID", "pfcp.5gs_user_plane_node_id.flags.sour",
17654
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17655
15
            NULL, HFILL }
17656
15
        },
17657
15
        { &hf_pfcp_5gs_user_plane_node_id_value,
17658
15
        { "Use Plane Node value", "pfcp.5gs_user_plane_node_id.value",
17659
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
17660
15
            NULL, HFILL }
17661
15
        },
17662
17663
15
        { &hf_pfcp_port_management_information,
17664
15
        { "Port Management Information", "pfcp.port_management_information",
17665
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17666
15
            NULL, HFILL }
17667
15
        },
17668
17669
15
        { &hf_pfcp_requested_clock_drift_control_information_flags_b0_rrto,
17670
15
        { "RRTO (Request to Report Time Offset)", "pfcp.requested_clock_drift_control_information.flags.rrto",
17671
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17672
15
            NULL, HFILL }
17673
15
        },
17674
15
        { &hf_pfcp_requested_clock_drift_control_information_flags_b1_rrcr,
17675
15
        { "RRCR (Request to Report Cumulative RateRatio)", "pfcp.requested_clock_drift_control_information.flags.rrcr",
17676
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17677
15
            NULL, HFILL }
17678
15
        },
17679
17680
15
        { &hf_pfcp_time_domain_number_value,
17681
15
        { "Time Domain Number value", "pfcp.time_domain_number_value",
17682
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17683
15
            NULL, HFILL }
17684
15
        },
17685
17686
15
        { &hf_pfcp_time_offset_threshold,
17687
15
        { "Time Offset Threshold", "pfcp.time_offset_threshold",
17688
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
17689
15
            NULL, HFILL }
17690
15
        },
17691
17692
15
        { &hf_pfcp_cumulative_rate_ratio_threshold,
17693
15
        { "Cumulative rateRatio Threshold", "pfcp.cumulative_rate_ratio_threshold",
17694
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
17695
15
            NULL, HFILL }
17696
15
        },
17697
17698
17699
15
        { &hf_pfcp_time_offset_measurement,
17700
15
        { "Time Offset Measurement", "pfcp.time_offset_measurement",
17701
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
17702
15
            NULL, HFILL }
17703
15
        },
17704
17705
15
        { &hf_pfcp_cumulative_rate_ratio_measurement,
17706
15
        { "Cumulative rateRatio Measurement", "pfcp.cumulative_rate_ratio_measurement",
17707
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
17708
15
            NULL, HFILL }
17709
15
        },
17710
17711
15
        { &hf_pfcp_srr_id,
17712
15
        { "SRR ID value", "pfcp.srr_id_value",
17713
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17714
15
            NULL, HFILL }
17715
15
        },
17716
17717
15
        { &hf_pfcp_requested_access_availability_control_information_flags_b0_rrca,
17718
15
        { "RRCA (Request to Report Change in Access availability)", "pfcp.requested_access_availability_control_information.flags.rrca",
17719
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17720
15
            NULL, HFILL }
17721
15
        },
17722
17723
15
        { &hf_pfcp_availability_type,
17724
15
        { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
17725
15
            FT_UINT8, BASE_DEC, VALS(pfcp_availability_status_vals), 0xC,
17726
15
            NULL, HFILL }
17727
15
        },
17728
15
        { &hf_pfcp_availability_status,
17729
15
        { "Failed Rule ID Type", "pfcp.failed_rule_id_type",
17730
15
            FT_UINT8, BASE_DEC, VALS(pfcp_availability_type_vals), 0x3,
17731
15
            NULL, HFILL }
17732
15
        },
17733
17734
15
        { &hf_pfcp_mptcp_control_information_flags_b0_tci,
17735
15
        { "TCI (Transport Converter Indication)", "pfcp.mptcp_control_information.flags.tci",
17736
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17737
15
            NULL, HFILL }
17738
15
        },
17739
17740
15
        { &hf_pfcp_atsss_ll_control_information_flags_b0_lli,
17741
15
        { "LLI: ATSSS-LL steering functionality is required", "pfcp.atsss_ll_control_information.flags.lli",
17742
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17743
15
            NULL, HFILL }
17744
15
        },
17745
17746
15
        { &hf_pfcp_pmf_control_information_flags_b0_pmfi,
17747
15
        { "PMFI (PMF functionality is required)", "pfcp.pmf_control_information.flags.pmfi",
17748
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17749
15
            NULL, HFILL }
17750
15
        },
17751
15
        { &hf_pfcp_pmf_control_information_flags_b1_drtti,
17752
15
        { "DRTTI (Disallow PMF RTT Indication)", "pfcp.pmf_control_information.flags.drtti",
17753
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17754
15
            NULL, HFILL }
17755
15
        },
17756
15
        { &hf_pfcp_pmf_control_information_flags_b2_pqpm,
17757
15
        { "PQPM (Per Qos flow Performance Measurement indication)", "pfcp.pmf_control_information.flags.pqpm",
17758
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17759
15
            NULL, HFILL }
17760
15
        },
17761
15
        { &hf_pfcp_pmf_control_information_number_of_qfi,
17762
15
        { "Number of QFI", "pfcp.pmf_control_information.number_of_qfi",
17763
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
17764
15
            NULL, HFILL }
17765
15
        },
17766
17767
15
        { &hf_pfcp_mptcp_address_information_flags_b0_v4,
17768
15
        { "V4", "pfcp.mptcp_ip_address_information.flags.v4",
17769
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17770
15
            NULL, HFILL }
17771
15
        },
17772
15
        { &hf_pfcp_mptcp_address_information_flags_b1_v6,
17773
15
        { "V6", "pfcp.mptcp_ip_address_information.flags.v6",
17774
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17775
15
            NULL, HFILL }
17776
15
        },
17777
15
        { &hf_pfcp_mptcp_proxy_type,
17778
15
        { "MPTCP proxy type", "pfcp.mptcp_proxy.type",
17779
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17780
15
            NULL, HFILL }
17781
15
        },
17782
15
        { &hf_pfcp_mptcp_proxy_port,
17783
15
        { "MPTCP proxy port", "pfcp.mptcp_proxy.port",
17784
15
            FT_UINT16, BASE_PT_TCP, NULL, 0x0,
17785
15
            NULL, HFILL }
17786
15
        },
17787
15
        { &hf_pfcp_mptcp_proxy_ip_address_ipv4,
17788
15
        { "MPTCP proxy IPv4 address", "pfcp.mptcp_proxy.ipv4",
17789
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17790
15
            NULL, HFILL }
17791
15
        },
17792
15
        { &hf_pfcp_mptcp_proxy_ip_address_ipv6,
17793
15
        { "MPTCP proxy IPv6 address", "pfcp.mptcp_proxy.ipv6",
17794
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17795
15
            NULL, HFILL }
17796
15
        },
17797
17798
15
        { &hf_pfcp_link_specific_multipath_ip_address_flags_b0_v4,
17799
15
        { "V4", "pfcp.link_specific_multipath_ip_address.flags.v4",
17800
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17801
15
            NULL, HFILL }
17802
15
        },
17803
15
        { &hf_pfcp_link_specific_multipath_ip_address_flags_b1_v6,
17804
15
        { "V6", "pfcp.link_specific_multipath_ip_address.flags.v6",
17805
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17806
15
            NULL, HFILL }
17807
15
        },
17808
15
        { &hf_pfcp_link_specific_multipath_ip_address_flags_b2_nv4,
17809
15
        { "NV4", "pfcp.link_specific_multipath_ip_address.flags.nv4",
17810
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17811
15
            NULL, HFILL }
17812
15
        },
17813
15
        { &hf_pfcp_link_specific_multipath_ip_address_flags_b3_nv6,
17814
15
        { "NV6", "pfcp.link_specific_multipath_ip_address.flags.nv6",
17815
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
17816
15
            NULL, HFILL }
17817
15
        },
17818
15
        { &hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv4,
17819
15
        { "Link-Specific IPv4 Address for 3GPP Access", "pfcp.link_specific_multipath_ip_address.3gpp.ipv4",
17820
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17821
15
            NULL, HFILL }
17822
15
        },
17823
15
        { &hf_pfcp_link_specific_multipath_ip_address_3gpp_ipv6,
17824
15
        { "Link-Specific IPv6 Address for 3GPP Access", "pfcp.link_specific_multipath_ip_address.3gpp.ipv6",
17825
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17826
15
            NULL, HFILL }
17827
15
        },
17828
15
        { &hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv4,
17829
15
        { "Link-Specific IPv4 Address for Non-3GPP Access", "pfcp.link_specific_multipath_ip_address.non3gpp.ipv4",
17830
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17831
15
            NULL, HFILL }
17832
15
        },
17833
15
        { &hf_pfcp_link_specific_multipath_ip_address_non3gpp_ipv6,
17834
15
        { "Link-Specific IPv6 Address for Non-3GPP Access", "pfcp.link_specific_multipath_ip_address.non3gpp.ipv6",
17835
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17836
15
            NULL, HFILL }
17837
15
        },
17838
17839
15
        { &hf_pfcp_pmf_address_information_flags_b0_v4,
17840
15
        { "V4", "pfcp.pmf_address_information.flags.v4",
17841
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17842
15
            NULL, HFILL }
17843
15
        },
17844
15
        { &hf_pfcp_pmf_address_information_flags_b1_v6,
17845
15
        { "V6", "pfcp.pmf_address_information.flags.v6",
17846
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17847
15
            NULL, HFILL }
17848
15
        },
17849
15
        { &hf_pfcp_pmf_address_information_flags_b2_mac,
17850
15
        { "MAC", "pfcp.pmf_address_information.flags.mac",
17851
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17852
15
            NULL, HFILL }
17853
15
        },
17854
15
        { &hf_pfcp_pmf_address_ipv4,
17855
15
        { "PMF IPv4 Address", "pfcp.pmf_address_information.ipv4",
17856
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
17857
15
            NULL, HFILL }
17858
15
        },
17859
15
        { &hf_pfcp_pmf_address_ipv6,
17860
15
        { "PMF IPv6 Address", "pfcp.pmf_address_information.ipv6",
17861
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
17862
15
            NULL, HFILL }
17863
15
        },
17864
15
        { &hf_pfcp_pmf_port_3gpp,
17865
15
        { "PMF port for 3GPP", "pfcp.pmf_address_information.port_3gpp",
17866
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17867
15
            NULL, HFILL }
17868
15
        },
17869
15
        { &hf_pfcp_pmf_port_non3gpp,
17870
15
        { "PMF port for Non-3GPP", "pfcp.pmf_address_information.port_non3gpp",
17871
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
17872
15
            NULL, HFILL }
17873
15
        },
17874
15
        { &hf_pfcp_pmf_mac_address_3gpp,
17875
15
        { "MAC Address for 3GPP", "pfcp.pmf_address_information.mac_address_3gpp",
17876
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17877
15
            NULL, HFILL }
17878
15
        },
17879
15
        { &hf_pfcp_pmf_mac_address_non3gpp,
17880
15
        { "MAC Address for Non-3GPP", "pfcp.pmf_address_information.mac_address_non3gpp",
17881
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17882
15
            NULL, HFILL }
17883
15
        },
17884
17885
15
        { &hf_pfcp_atsss_ll_information_flags_b0_lli,
17886
15
        { "LLI: ATSSS-LL steering functionality have been allocated", "pfcp.atsss_ll_information.flags.lli",
17887
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17888
15
            NULL, HFILL }
17889
15
        },
17890
17891
15
        { &hf_pfcp_data_network_access_identifier,
17892
15
        { "Data Network Access Identifier", "pfcp.data_network_access_identifier",
17893
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
17894
15
            NULL, HFILL }
17895
15
        },
17896
17897
15
        { &hf_pfcp_packet_delay_milliseconds,
17898
15
        { "Delay Value in milliseconds", "pfcp.average_packet_delay.milliseconds",
17899
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
17900
15
            NULL, HFILL }
17901
15
        },
17902
17903
15
        { &hf_pfcp_qos_report_trigger_flags_b0_per,
17904
15
        { "PER (Periodic Reporting)", "pfcp.qos_report_trigger.flags.v4",
17905
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17906
15
            NULL, HFILL }
17907
15
        },
17908
15
        { &hf_pfcp_qos_report_trigger_flags_b1_thr,
17909
15
        { "THR (Event triggered based on Threshold)", "pfcp.qos_report_trigger.flags.thr",
17910
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17911
15
            NULL, HFILL }
17912
15
        },
17913
15
        { &hf_pfcp_qos_report_trigger_flags_b2_ire,
17914
15
        { "IRE (Immediate Report)", "pfcp.qos_report_trigger.flags.ire",
17915
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17916
15
            NULL, HFILL }
17917
15
        },
17918
17919
15
        { &hf_pfcp_gtp_u_path_interface_type_flags_b0_n9,
17920
15
        { "N9", "pfcp.qos_report_trigtp_u_path_interface_typegger.flags.n9",
17921
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17922
15
            NULL, HFILL }
17923
15
        },
17924
15
        { &hf_pfcp_gtp_u_path_interface_type_flags_b1_n3,
17925
15
        { "N3", "pfcp.gtp_u_path_interface_type.flags.n3",
17926
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17927
15
            NULL, HFILL }
17928
15
        },
17929
17930
15
        { &hf_pfcp_requested_qos_monitoring_flags_b0_dlpd,
17931
15
        { "DLPD (Downlink Packet Delay)", "pfcp.requested_qos_monitoring.flags.dlpd",
17932
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17933
15
            NULL, HFILL }
17934
15
        },
17935
15
        { &hf_pfcp_requested_qos_monitoring_flags_b1_ulpd,
17936
15
        { "ULPD (Uplink Packet Delay)", "pfcp.requested_qos_monitoring.flags.ulpd",
17937
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17938
15
            NULL, HFILL }
17939
15
        },
17940
15
        { &hf_pfcp_requested_qos_monitoring_flags_b2_rppd,
17941
15
        { "RPPD (Round Trip Packet Delay)", "pfcp.requested_qos_monitoring.flags.rppd",
17942
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17943
15
            NULL, HFILL }
17944
15
        },
17945
15
        { &hf_pfcp_requested_qos_monitoring_flags_b3_gtpupm,
17946
15
        { "GTPUPM (GTP-U Path Monitoring)", "pfcp.requested_qos_monitoring.flags.gtpupm",
17947
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
17948
15
            NULL, HFILL }
17949
15
        },
17950
15
        { &hf_pfcp_requested_qos_monitoring_flags_b4_dlci,
17951
15
        { "DLCI (Downlink Congestion Information)", "pfcp.requested_qos_monitoring.flags.dlci",
17952
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
17953
15
            NULL, HFILL }
17954
15
        },
17955
15
        { &hf_pfcp_requested_qos_monitoring_flags_b5_ulci,
17956
15
        { "ULCI (Uplink Congestion Information)", "pfcp.requested_qos_monitoring.flags.ulci",
17957
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
17958
15
            NULL, HFILL }
17959
15
        },
17960
15
        { &hf_pfcp_requested_qos_monitoring_flags_b6_dlpr,
17961
15
        { "DLPR (Downlink Packet Rate)", "pfcp.requested_qos_monitoring.flags.dlpr",
17962
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x40,
17963
15
            NULL, HFILL }
17964
15
        },
17965
15
        { &hf_pfcp_requested_qos_monitoring_flags_b7_ulpr,
17966
15
        { "ULPR (Uplink Packet Rate)", "pfcp.requested_qos_monitoring.flags.ulpr",
17967
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x80,
17968
15
            NULL, HFILL }
17969
15
        },
17970
17971
15
        { &hf_pfcp_reporting_frequency_flags_b0_evett,
17972
15
        { "EVETT (Event Triggered QoS monitoring reporting)", "pfcp.reporting_frequency.flags.evett",
17973
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17974
15
            NULL, HFILL }
17975
15
        },
17976
15
        { &hf_pfcp_reporting_frequency_flags_b1_perio,
17977
15
        { "PERIO (Periodic QoS monitoring reporting)", "pfcp.reporting_frequency.flags.perio",
17978
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17979
15
            NULL, HFILL }
17980
15
        },
17981
15
        { &hf_pfcp_reporting_frequency_flags_b2_sesrl,
17982
15
        { "SESRL (Session Released QoS monitoring reporting) (Deprecated in R18.1)", "pfcp.reporting_frequency.flags.sesrl",
17983
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
17984
15
            NULL, HFILL }
17985
15
        },
17986
17987
15
        { &hf_pfcp_packet_delay_thresholds_flags_b0_dl,
17988
15
        { "DL (Downlink)", "pfcp.packet_delay_thresholds.flags.dl",
17989
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
17990
15
            NULL, HFILL }
17991
15
        },
17992
15
        { &hf_pfcp_packet_delay_thresholds_flags_b1_ul,
17993
15
        { "UL (Uplink)", "pfcp.packet_delay_thresholds.flags.ul",
17994
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
17995
15
            NULL, HFILL }
17996
15
        },
17997
15
        { &hf_pfcp_packet_delay_thresholds_flags_b2_rp,
17998
15
        { "RP (Round Trip)", "pfcp.packet_delay_thresholds.flags.rp",
17999
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
18000
15
            NULL, HFILL }
18001
15
        },
18002
15
        { &hf_pfcp_packet_delay_thresholds_downlink,
18003
15
        { "Downlink packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.downlink",
18004
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18005
15
            NULL, HFILL }
18006
15
        },
18007
15
        { &hf_pfcp_packet_delay_thresholds_uplink,
18008
15
        { "Downlink packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.uplink",
18009
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18010
15
            NULL, HFILL }
18011
15
        },
18012
15
        { &hf_pfcp_packet_delay_thresholds_roundtrip,
18013
15
        { "Round trip packet delay threshold (milliseconds)", "pfcp.packet_delay_thresholds.roundtrip",
18014
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18015
15
            NULL, HFILL }
18016
15
        },
18017
18018
15
        { &hf_pfcp_minimum_wait_time_seconds,
18019
15
        { "The Minimum Wait Time (seconds)", "pfcp.minimum_wait_time.seconds",
18020
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18021
15
            NULL, HFILL }
18022
15
        },
18023
18024
15
        { &hf_pfcp_qos_monitoring_measurement_flags_b0_dlpd,
18025
15
        { "DLPD (Downlink Packet Delay)", "pfcp.qos_monitoring_measurement.flags.dlpd",
18026
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18027
15
            NULL, HFILL }
18028
15
        },
18029
15
        { &hf_pfcp_qos_monitoring_measurement_flags_b1_ulpd,
18030
15
        { "ULPD (Uplink Packet Delay)", "pfcp.qos_monitoring_measurement.flags.ulpd",
18031
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18032
15
            NULL, HFILL }
18033
15
        },
18034
15
        { &hf_pfcp_qos_monitoring_measurement_flags_b2_rppd,
18035
15
        { "RPPD (Round Trip Packet Delay)", "pfcp.qos_monitoring_measurement.flags.rppd",
18036
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
18037
15
            NULL, HFILL }
18038
15
        },
18039
15
        { &hf_pfcp_qos_monitoring_measurement_flags_b3_plmf,
18040
15
        { "PLMF (Packet Delay Measurement Failure)", "pfcp.qos_monitoring_measurement.flags.plmf",
18041
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
18042
15
            NULL, HFILL }
18043
15
        },
18044
15
        { &hf_pfcp_qos_monitoring_measurement_flags_b4_dlci,
18045
15
        { "DLCI (Downlink Congestion Info)", "pfcp.qos_monitoring_measurement.flags.dlci",
18046
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
18047
15
            NULL, HFILL }
18048
15
        },
18049
15
        { &hf_pfcp_qos_monitoring_measurement_flags_b5_ulci,
18050
15
        { "ULCI (Uplink Congestion Info)", "pfcp.qos_monitoring_measurement.flags.ulci",
18051
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
18052
15
            NULL, HFILL }
18053
15
        },
18054
15
        { &hf_pfcp_qos_monitoring_measurement_flags_b6_dldr,
18055
15
        { "DLDR (Downlink Data Rate)", "pfcp.qos_monitoring_measurement.flags.dldr",
18056
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x40,
18057
15
            NULL, HFILL }
18058
15
        },
18059
15
        { &hf_pfcp_qos_monitoring_measurement_flags_b7_uldr,
18060
15
        { "ULDR (Uplink Data Rate)", "pfcp.qos_monitoring_measurement.flags.uldr",
18061
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x80,
18062
15
            NULL, HFILL }
18063
15
        },
18064
18065
15
        { &hf_pfcp_qos_monitoring_measurement_downlink_packet_delay,
18066
15
        { "Downlink packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.downlink_packet_delay",
18067
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18068
15
            NULL, HFILL }
18069
15
        },
18070
15
        { &hf_pfcp_qos_monitoring_measurement_uplink_packet_delay,
18071
15
        { "Downlink packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.uplink_packet_delay",
18072
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18073
15
            NULL, HFILL }
18074
15
        },
18075
15
        { &hf_pfcp_qos_monitoring_measurement_roundtrip,
18076
15
        { "Round trip packet delay (milliseconds)", "pfcp.qos_monitoring_measurement.roundtrip",
18077
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18078
15
            NULL, HFILL }
18079
15
        },
18080
15
        { &hf_pfcp_qos_monitoring_measurement_downlink_congestion_information,
18081
15
        { "Downlink Congestion information", "pfcp.qos_monitoring_measurement.downlink_congestion_information",
18082
15
            FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
18083
15
            NULL, HFILL }
18084
15
        },
18085
15
        { &hf_pfcp_qos_monitoring_measurement_uplink_congestion_information,
18086
15
        { "Uplink Congestion information", "pfcp.qos_monitoring_measurement.uplink_congestion_information",
18087
15
            FT_UINT8, BASE_DEC_HEX, NULL, 0x0,
18088
15
            NULL, HFILL }
18089
15
        },
18090
15
        { &hf_pfcp_qos_monitoring_measurement_downlink_packet_rate,
18091
15
        { "Average Downlink packet rate (kilobits per second)", "pfcp.qos_monitoring_measurement.downlink_packet_rate",
18092
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18093
15
            NULL, HFILL }
18094
15
        },
18095
15
        { &hf_pfcp_qos_monitoring_measurement_uplink_packet_rate,
18096
15
        { "Average Uplink packet rate (kilobits per second)", "pfcp.qos_monitoring_measurement.uplink_packet_rate",
18097
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18098
15
            NULL, HFILL }
18099
15
        },
18100
18101
15
        { &hf_pfcp_mt_edt_control_information_flags_b0_rdsi,
18102
15
        { "RDSI (Reporting DL data packets Size Indication)", "pfcp.mt_edt_control_information.flags.rdsi",
18103
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18104
15
            NULL, HFILL }
18105
15
        },
18106
18107
15
        { &hf_pfcp_dl_data_packets_size,
18108
15
        { "DL Data Packets Size", "pfcp.dl_data_packets_size",
18109
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18110
15
            NULL, HFILL }
18111
15
        },
18112
18113
15
        { &hf_pfcp_qer_control_indications_o5_b0_rcsr,
18114
15
        { "RCSR (Rate Control Status Reporting)", "pfcp.qer_control_indications.rcsr",
18115
15
            FT_BOOLEAN, 8, NULL, 0x01,
18116
15
            NULL, HFILL }
18117
15
        },
18118
18119
15
        { &hf_pfcp_nf_instance_id,
18120
15
        { "NF Instance ID", "pfcp.nf_instance_id",
18121
15
            FT_GUID, BASE_NONE, NULL, 0x0,
18122
15
            NULL, HFILL }
18123
15
        },
18124
18125
15
        { &hf_pfcp_s_nssai_sst,
18126
15
        { "SST", "pfcp.s_nssai_sst.sst",
18127
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
18128
15
            NULL, HFILL }
18129
15
        },
18130
15
        { &hf_pfcp_s_nssai_sd,
18131
15
        { "SD", "pfcp.s_nssai_sst.sd",
18132
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
18133
15
            NULL, HFILL }
18134
15
        },
18135
18136
15
        { &hf_pfcp_ip_version_flags_b1_v6,
18137
15
        { "V6 (IPv6)", "pfcp.ip_version.v6",
18138
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18139
15
            NULL, HFILL }
18140
15
        },
18141
15
        { &hf_pfcp_ip_version_flags_b0_v4,
18142
15
        { "V4 (IPv4)", "pfcp.ip_version.v4",
18143
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18144
15
            NULL, HFILL }
18145
15
        },
18146
18147
15
        { &hf_pfcp_pfcpasreq_flags_flags_b0_uupsi,
18148
15
        { "UUPSI (UPF configured for IPUPS indication)", "pfcp.asreq_flags.flags.uupsi",
18149
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18150
15
            NULL, HFILL }
18151
15
        },
18152
18153
15
        { &hf_pfcp_data_status_flags_b0_drop,
18154
15
        { "DROP (First DL packet is discarded by UP function)", "pfcp.data_status.flags.drop",
18155
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18156
15
            NULL, HFILL }
18157
15
        },
18158
15
        { &hf_pfcp_data_status_flags_b1_buff,
18159
15
        { "BUFF (First DL packet is received and buffered by UP function)", "pfcp.data_status.flags.buff",
18160
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18161
15
            NULL, HFILL }
18162
15
        },
18163
18164
15
        { &hf_pfcp_rds_configuration_information_flags_b0_rds,
18165
15
        { "RDS (Reliable Data Service)", "pfcp.rds_configuration_information.flags.rds",
18166
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18167
15
            NULL, HFILL }
18168
15
        },
18169
18170
15
        { &hf_pfcp_multipath_application_indication_flags_b0_mtai,
18171
15
        { "MTAI (MPTCP Applicable Indication)", "pfcp.multipath_application_indication.flags.mtai",
18172
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18173
15
            NULL, HFILL }
18174
15
        },
18175
15
        { &hf_pfcp_multipath_application_indication_flags_b1_mqai,
18176
15
        { "MQAI (MPQUIC Applicable Indication)", "pfcp.multipath_application_indication.flags.mqai",
18177
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18178
15
            NULL, HFILL }
18179
15
        },
18180
18181
15
        { &hf_pfcp_user_plane_node_management_information_container,
18182
15
        { "Predefined Rules Name", "pfcp.user_plane_node_management_information_container",
18183
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
18184
15
            NULL, HFILL }
18185
15
        },
18186
18187
15
        { &hf_pfcp_number_of_ue_ip_addresses_b0_ipv4,
18188
15
        { "IPv4", "pfcp.number_of_ue_ip_addresses.v4",
18189
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18190
15
            NULL, HFILL }
18191
15
        },
18192
15
        { &hf_pfcp_number_of_ue_ip_addresses_b1_ipv6,
18193
15
        { "IPv6", "pfcp.number_of_ue_ip_addresses.v6",
18194
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18195
15
            NULL, HFILL }
18196
15
        },
18197
15
        { &hf_pfcp_number_of_ue_ip_addresses_ipv4,
18198
15
        { "Number of UE IPv4 Addresses", "pfcp.number_of_ue_ip_addresses.ipv4addresses",
18199
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18200
15
            NULL, HFILL }
18201
15
        },
18202
15
        { &hf_pfcp_number_of_ue_ip_addresses_ipv6,
18203
15
        { "Number of UE IPv6 Addresses", "pfcp.number_of_ue_ip_addresses.ipv6addresses",
18204
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18205
15
            NULL, HFILL }
18206
15
        },
18207
18208
15
        { &hf_pfcp_validity_timer,
18209
15
        { "Validity Timer", "pfcp.validity_timer",
18210
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18211
15
            NULL, HFILL }
18212
15
        },
18213
18214
15
        { &hf_pfcp_rattype,
18215
15
        { "RAT Type", "pfcp.rattype",
18216
15
            FT_UINT8, BASE_DEC, VALS(pfcp_rattype_vals), 0x0,
18217
15
            NULL, HFILL }
18218
15
        },
18219
18220
15
        { &hf_pfcp_l2tp_user_authentication_proxy_authen_type_value,
18221
15
        { "Proxy Authen Type Value", "pfcp.l2tp_user_authentication.proxy_authen_type_value",
18222
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18223
15
            NULL, HFILL }
18224
15
        },
18225
15
        { &hf_pfcp_l2tp_user_authentication_b0_pan,
18226
15
        { "PAN (Proxy Authen Name)", "pfcp.l2tp_user_authentication.flags.pan",
18227
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18228
15
            NULL, HFILL }
18229
15
        },
18230
15
        { &hf_pfcp_l2tp_user_authentication_b1_pac,
18231
15
        { "PAC (Proxy Authen Challenge)", "pfcp.l2tp_user_authentication.flags.pac",
18232
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18233
15
            NULL, HFILL }
18234
15
        },
18235
15
        { &hf_pfcp_l2tp_user_authentication_b2_par,
18236
15
        { "PAR (Proxy Authen Response)", "pfcp.l2tp_user_authentication.flags.par",
18237
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
18238
15
            NULL, HFILL }
18239
15
        },
18240
15
        { &hf_pfcp_l2tp_user_authentication_b3_pai,
18241
15
        { "PAI (Proxy Authen UD)", "pfcp.l2tp_user_authentication.flags.pai",
18242
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
18243
15
            NULL, HFILL }
18244
15
        },
18245
15
        { &hf_pfcp_l2tp_user_authentication_proxy_authen_name_len,
18246
15
        { "Proxy Authen Name Length", "pfcp.l2tp_user_authentication.pan_len",
18247
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18248
15
            NULL, HFILL }
18249
15
        },
18250
15
        { &hf_pfcp_l2tp_user_authentication_proxy_authen_name,
18251
15
        { "Proxy Authen Name", "pfcp.l2tp_user_authentication.pan",
18252
15
            FT_STRING, BASE_NONE, NULL, 0,
18253
15
            NULL, HFILL }
18254
15
        },
18255
15
        { &hf_pfcp_l2tp_user_authentication_proxy_authen_challenge_len,
18256
15
        { "Proxy Authen Challenge Length", "pfcp.l2tp_user_authentication.pac_len",
18257
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18258
15
            NULL, HFILL }
18259
15
        },
18260
15
        { &hf_pfcp_l2tp_user_authentication_proxy_authen_challenge,
18261
15
        { "Proxy Authen Challenge", "pfcp.l2tp_user_authentication.pac",
18262
15
            FT_STRING, BASE_NONE, NULL, 0,
18263
15
            NULL, HFILL }
18264
15
        },
18265
15
        { &hf_pfcp_l2tp_user_authentication_proxy_authen_response_len,
18266
15
        { "Proxy Authen Response Length", "pfcp.l2tp_user_authentication.par_len",
18267
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18268
15
            NULL, HFILL }
18269
15
        },
18270
15
        { &hf_pfcp_l2tp_user_authentication_proxy_authen_response,
18271
15
        { "Proxy Authen Response", "pfcp.l2tp_user_authentication.par",
18272
15
            FT_STRING, BASE_NONE, NULL, 0,
18273
15
            NULL, HFILL }
18274
15
        },
18275
15
        { &hf_pfcp_l2tp_user_authentication_proxy_authen_id,
18276
15
        { "Proxy Authen ID", "pfcp.l2tp_user_authentication.pai",
18277
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18278
15
            NULL, HFILL }
18279
15
        },
18280
18281
15
        { &hf_pfcp_lns_address_ipv4,
18282
15
        { "IPv4 address", "pfcp.lns_address.ipv4",
18283
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18284
15
            NULL, HFILL }
18285
15
        },
18286
15
        { &hf_pfcp_lns_address_ipv6,
18287
15
        { "IPv6 address", "pfcp.lns_address.ipv6",
18288
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18289
15
            NULL, HFILL }
18290
15
        },
18291
18292
15
        { &hf_pfcp_tunnel_preference_value,
18293
15
        { "Tunnel Preference Value", "pfcp.tunnel_preference_value",
18294
15
            FT_UINT24, BASE_DEC, NULL, 0,
18295
15
            NULL, HFILL }
18296
15
        },
18297
18298
15
        { &hf_pfcp_calling_number_value,
18299
15
        { "Calling Number Value", "pfcp.calling_number_value",
18300
15
            FT_STRING, BASE_NONE, NULL, 0,
18301
15
            NULL, HFILL }
18302
15
        },
18303
15
        { &hf_pfcp_called_number_value,
18304
15
        { "Called Number Value", "pfcp.called_number_value",
18305
15
            FT_STRING, BASE_NONE, NULL, 0,
18306
15
            NULL, HFILL }
18307
15
        },
18308
18309
15
        { &hf_pfcp_l2tp_session_indications_o5_b0_reuia,
18310
15
        { "REUIA", "pfcp.l2tp_session_indications.reuia",
18311
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
18312
15
            "Request UE IP Address", HFILL }
18313
15
        },
18314
15
        { &hf_pfcp_l2tp_session_indications_o5_b1_redsa,
18315
15
        { "REDSA", "pfcp.l2tp_session_indications.redsa",
18316
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
18317
15
            "Request DNS Server Address", HFILL }
18318
15
        },
18319
15
        { &hf_pfcp_l2tp_session_indications_o5_b2_rensa,
18320
15
        { "RENSA", "pfcp.l2tp_session_indications.rensa",
18321
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
18322
15
            "Request NBNS Server Address", HFILL }
18323
15
        },
18324
18325
15
        { &hf_pfcp_maximum_receive_unit,
18326
15
        { "Maximum Receive Unit", "pfcp.maximum_receive_unit",
18327
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18328
15
            NULL, HFILL }
18329
15
        },
18330
18331
15
        { &hf_pfcp_thresholds_flags_b0_rtt,
18332
15
        { "RTT", "pfcp.thresholds.flags.rtt",
18333
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18334
15
            NULL, HFILL }
18335
15
        },
18336
15
        { &hf_pfcp_thresholds_flags_b1_plr,
18337
15
        { "PLR (Packet Loss Rate)", "pfcp.thresholds.flags.plr",
18338
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18339
15
            NULL, HFILL }
18340
15
        },
18341
15
        { &hf_pfcp_thresholds_rtt,
18342
15
        { "RTT (in milliseconds)", "pfcp.thresholds.rtt",
18343
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18344
15
            NULL, HFILL }
18345
15
        },
18346
15
        { &hf_pfcp_thresholds_plr,
18347
15
        { "Packet Loss Rate (in percent)", "pfcp.thresholds.plr",
18348
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18349
15
            NULL, HFILL }
18350
15
        },
18351
18352
15
        { &hf_pfcp_l2tp_steering_mode_indications_o5_b0_albi,
18353
15
        { "ALBI", "pfcp.l2tp_session_indications.reuia",
18354
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
18355
15
            "Autonomous Load Balancing Indicator", HFILL }
18356
15
        },
18357
15
        { &hf_pfcp_l2tp_steering_mode_indications_o5_b1_ueai,
18358
15
        { "UEAI", "pfcp.l2tp_session_indications.redsa",
18359
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
18360
15
            "UE Assistance Indicator", HFILL }
18361
15
        },
18362
18363
15
        { &hf_pfcp_group_id,
18364
15
        { "Group ID", "pfcp.group_id",
18365
15
            FT_STRING, BASE_NONE, NULL, 0x0,
18366
15
            NULL, HFILL }
18367
15
        },
18368
18369
15
        { &hf_pfcp_cp_ip_address_ipv4,
18370
15
        { "IPv4 address", "pfcp.cp_ip_address.ipv4",
18371
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18372
15
            NULL, HFILL }
18373
15
        },
18374
15
        { &hf_pfcp_cp_ip_address_ipv6,
18375
15
        { "IPv6 address", "pfcp.cp_ip_address.ipv6",
18376
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18377
15
            NULL, HFILL }
18378
15
        },
18379
18380
15
        { &hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4,
18381
15
        { "DIPV4", "pfcp.ip_address_and_port_number_replacement.flags.dipv4",
18382
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18383
15
            NULL, HFILL }
18384
15
        },
18385
15
        { &hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6,
18386
15
        { "DIPV6", "pfcp.ip_address_and_port_number_replacement.flags.dipv6",
18387
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18388
15
            NULL, HFILL }
18389
15
        },
18390
15
        { &hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn,
18391
15
        { "DPN", "pfcp.ip_address_and_port_number_replacement.flags.dpn",
18392
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
18393
15
            NULL, HFILL }
18394
15
        },
18395
15
        { &hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4,
18396
15
        { "SIPV4", "pfcp.ip_address_and_port_number_replacement.flags.sipv4",
18397
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
18398
15
            NULL, HFILL }
18399
15
        },
18400
15
        { &hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6,
18401
15
        { "SIPV6", "pfcp.ip_address_and_port_number_replacement.flags.sipv6",
18402
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
18403
15
            NULL, HFILL }
18404
15
        },
18405
15
        { &hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn,
18406
15
        { "SPN", "pfcp.ip_address_and_port_number_replacement.flags.spn",
18407
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
18408
15
            NULL, HFILL }
18409
15
        },
18410
15
        { &hf_pfcp_ip_address_and_port_number_replacement_flag_b6_umn6rs,
18411
15
        { "UMN6RS", "pfcp.ip_address_and_port_number_replacement.flags.umn6rs",
18412
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
18413
15
            NULL, HFILL }
18414
15
        },
18415
18416
15
        { &hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4,
18417
15
        { "Destination IPv4 address", "pfcp.ip_address_and_port_number_replacement.dipv4",
18418
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18419
15
            NULL, HFILL }
18420
15
        },
18421
15
        { &hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6,
18422
15
        { "Destination IPv6 address", "pfcp.ip_address_and_port_number_replacement.dipv6",
18423
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18424
15
            NULL, HFILL }
18425
15
        },
18426
15
        { &hf_pfcp_ip_address_and_port_number_replacement_destination_port,
18427
15
        { "Destination Port Number", "pfcp.ip_address_and_port_number_replacement.dpn",
18428
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18429
15
            NULL, HFILL }
18430
15
        },
18431
15
        { &hf_pfcp_ip_address_and_port_number_replacement_source_ipv4,
18432
15
        { "Source IPv4 address", "pfcp.ip_address_and_port_number_replacement.sipv4",
18433
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18434
15
            NULL, HFILL }
18435
15
        },
18436
15
        { &hf_pfcp_ip_address_and_port_number_replacement_source_ipv6,
18437
15
        { "Source IPv6 address", "pfcp.ip_address_and_port_number_replacement.sipv6",
18438
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18439
15
            NULL, HFILL }
18440
15
        },
18441
15
        { &hf_pfcp_ip_address_and_port_number_replacement_source_port,
18442
15
        { "Source Port Number", "pfcp.ip_address_and_port_number_replacement.spn",
18443
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18444
15
            NULL, HFILL }
18445
15
        },
18446
18447
15
        { &hf_pfcp_dns_query_filter_pattern_len,
18448
15
        { "DNS Query Filter Pattern Length", "pfcp.dns_query_filter.pattern_len",
18449
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18450
15
            NULL, HFILL }
18451
15
        },
18452
15
        { &hf_pfcp_dns_query_filter_pattern,
18453
15
        { "DNS Query Filter Pattern", "pfcp.dns_query_filter.pattern",
18454
15
            FT_STRING, BASE_NONE, NULL, 0,
18455
15
            NULL, HFILL }
18456
15
        },
18457
18458
15
        { &hf_pfcp_event_notification_uri,
18459
15
        { "Event Notification URI", "pfcp.event_notification_uri",
18460
15
            FT_STRING, BASE_NONE, NULL, 0,
18461
15
            NULL, HFILL }
18462
15
        },
18463
18464
15
        { &hf_pfcp_notification_correlation_id,
18465
15
        { "QER Correlation ID", "pfcp.qer_correlation_id",
18466
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18467
15
            NULL, HFILL }
18468
15
        },
18469
18470
15
        { &hf_pfcp_reporting_flags_o5_b0_dupl,
18471
15
        { "DUPL (Duplication Notification)", "pfcp.reporting_flags.dupl",
18472
15
            FT_BOOLEAN, 8, NULL, 0x01,
18473
15
            NULL, HFILL }
18474
15
        },
18475
18476
15
        { &hf_pfcp_mbs_session_identifier_flag_b0_tmgi,
18477
15
        { "TGMI", "pfcp.session_identifier.flags.tmgi",
18478
15
            FT_BOOLEAN, 8, NULL, 0x01,
18479
15
            NULL, HFILL }
18480
15
        },
18481
15
        { &hf_pfcp_mbs_session_identifier_flag_b1_ssmi,
18482
15
        { "SSMI", "pfcp.session_identifier.flags.ssmi",
18483
15
            FT_BOOLEAN, 8, NULL, 0x02,
18484
15
            NULL, HFILL }
18485
15
        },
18486
15
        { &hf_pfcp_mbs_session_identifier_flag_b2_nidi,
18487
15
        { "NIDI", "pfcp.session_identifier.flags.nidi",
18488
15
            FT_BOOLEAN, 8, NULL, 0x04,
18489
15
            NULL, HFILL }
18490
15
        },
18491
15
        { &hf_pfcp_mbs_session_identifier_tmgi,
18492
15
          {"TMGI", "pfcp.mbs_session_identifier.tmgi",
18493
15
           FT_BYTES, BASE_NONE, NULL, 0x0,
18494
15
           NULL, HFILL}
18495
15
        },
18496
15
        { &hf_pfcp_mbs_session_identifier_source_address_type,
18497
15
        { "Source Address Type", "pfcp.mbs_session_identifier.source_address.type",
18498
15
            FT_UINT8, BASE_DEC, NULL, 0xC0,
18499
15
            NULL, HFILL }
18500
15
        },
18501
15
        { &hf_pfcp_mbs_session_identifier_source_address_length,
18502
15
        { "Source Address Length", "pfcp.mbs_session_identifier.source_address.length",
18503
15
            FT_UINT8, BASE_DEC, NULL, 0x3F,
18504
15
            NULL, HFILL }
18505
15
        },
18506
15
        { &hf_pfcp_mbs_session_identifier_source_address_ipv4,
18507
15
        { "Source IPv4 address", "pfcp.mbs_session_identifier.source_address.ipv4",
18508
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18509
15
            NULL, HFILL }
18510
15
        },
18511
15
        { &hf_pfcp_mbs_session_identifier_source_address_ipv6,
18512
15
        { "Source IPv6 address", "pfcp.mbs_session_identifier.source_address.ipv6",
18513
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18514
15
            NULL, HFILL }
18515
15
        },
18516
15
        { &hf_pfcp_mbs_session_identifier_nidi,
18517
15
          {"NIDI", "pfcp.mbs_session_identifier.nidi",
18518
15
           FT_BYTES, BASE_NONE, NULL, 0x0,
18519
15
           NULL, HFILL}
18520
15
        },
18521
18522
15
        { &hf_pfcp_multicast_transport_information_endpoint_identifier,
18523
15
        { "Common Tunnel Endpoint Identifier", "pfcp.multicast_transport_information.endpoint_identifier",
18524
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18525
15
            NULL, HFILL }
18526
15
        },
18527
15
        { &hf_pfcp_multicast_transport_information_distribution_address_type,
18528
15
        { "Distribution Address Type", "pfcp.multicast_transport_information.distribution_address.type",
18529
15
            FT_UINT8, BASE_DEC, NULL, 0xC0,
18530
15
            NULL, HFILL }
18531
15
        },
18532
15
        { &hf_pfcp_multicast_transport_information_distribution_address_length,
18533
15
        { "Distribution Address Length", "pfcp.multicast_transport_information.distribution_address.length",
18534
15
            FT_UINT8, BASE_DEC, NULL, 0x3F,
18535
15
            NULL, HFILL }
18536
15
        },
18537
15
        { &hf_pfcp_multicast_transport_information_distribution_address_ipv4,
18538
15
        { "Distribution IPv4 address", "pfcp.multicast_transport_information.distribution_address.ipv4",
18539
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18540
15
            NULL, HFILL }
18541
15
        },
18542
15
        { &hf_pfcp_multicast_transport_information_distribution_address_ipv6,
18543
15
        { "Distribution IPv6 address", "pfcp.multicast_transport_information.distribution_address.ipv6",
18544
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18545
15
            NULL, HFILL }
18546
15
        },
18547
15
        { &hf_pfcp_multicast_transport_information_source_address_type,
18548
15
        { "Source Address Type", "pfcp.multicast_transport_information.source_address.type",
18549
15
            FT_UINT8, BASE_DEC, NULL, 0xC0,
18550
15
            NULL, HFILL }
18551
15
        },
18552
15
        { &hf_pfcp_multicast_transport_information_source_address_length,
18553
15
        { "Source Address Length", "pfcp.multicast_transport_information.source_address.length",
18554
15
            FT_UINT8, BASE_DEC, NULL, 0x3F,
18555
15
            NULL, HFILL }
18556
15
        },
18557
15
        { &hf_pfcp_multicast_transport_information_source_address_ipv4,
18558
15
        { "Source IPv4 address", "pfcp.multicast_transport_information.source_address.ipv4",
18559
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18560
15
            NULL, HFILL }
18561
15
        },
18562
15
        { &hf_pfcp_multicast_transport_information_source_address_ipv6,
18563
15
        { "Source IPv6 address", "pfcp.multicast_transport_information.source_address.ipv6",
18564
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18565
15
            NULL, HFILL }
18566
15
        },
18567
18568
15
        { &hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm,
18569
15
        { "PLLSSM (Provide Lower Layer SSM)", "pfcp.reporting_flags.pllssm",
18570
15
            FT_BOOLEAN, 8, NULL, 0x01,
18571
15
            NULL, HFILL }
18572
15
        },
18573
15
        { &hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm,
18574
15
        { "JMBSSM (Join MBS Session SSM)", "pfcp.reporting_flags.jmbssm",
18575
15
            FT_BOOLEAN, 8, NULL, 0x02,
18576
15
            NULL, HFILL }
18577
15
        },
18578
15
        { &hf_pfcp_mbsn4mbreq_flags_o5_b2_mbs_resti,
18579
15
        { "MBS RESTI (MBS Restoration Indication)", "pfcp.reporting_flags.mbs_resti",
18580
15
            FT_BOOLEAN, 8, NULL, 0x04,
18581
15
            NULL, HFILL }
18582
15
        },
18583
18584
15
        { &hf_pfcp_local_ingress_tunnel_flags_b2_ch,
18585
15
        { "CH (CHOOSE)", "pfcp.local_ingress_tunnel.flags.ch",
18586
15
            FT_BOOLEAN, 8, NULL, 0x04,
18587
15
            NULL, HFILL }
18588
15
        },
18589
15
        { &hf_pfcp_local_ingress_tunnel_flags_b1_v6,
18590
15
        { "V6 (IPv6)", "pfcp.local_ingress_tunnel.flags.v6",
18591
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18592
15
            NULL, HFILL }
18593
15
        },
18594
15
        { &hf_pfcp_local_ingress_tunnel_flags_b0_v4,
18595
15
        { "V4 (IPv4)", "pfcp.local_ingress_tunnel.flags.v4",
18596
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18597
15
            NULL, HFILL }
18598
15
        },
18599
15
        { &hf_pfcp_local_ingress_tunnel_udp_port,
18600
15
        { "UDP Port", "pfcp.local_ingress_tunnel.udp",
18601
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
18602
15
            NULL, HFILL }
18603
15
        },
18604
15
        { &hf_pfcp_local_ingress_tunnel_ipv4,
18605
15
        { "IPv4 address", "pfcp.local_ingress_tunnel.ipv4",
18606
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18607
15
            NULL, HFILL }
18608
15
        },
18609
15
        { &hf_pfcp_local_ingress_tunnel_ipv6,
18610
15
        { "IPv6 address", "pfcp.local_ingress_tunnel.ipv6",
18611
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18612
15
            NULL, HFILL }
18613
15
        },
18614
18615
15
        { &hf_pfcp_mbs_unicast_parameters_id,
18616
15
        { "MBS Unicast Parameters ID value", "pfcp.mbs_unicast_parameters_id",
18617
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18618
15
            NULL, HFILL }
18619
15
        },
18620
18621
15
        { &hf_pfcp_mbsn4resp_flags_o5_b0_nn19dt,
18622
15
        { "NN19DT", "pfcp.mbsn4resp_flags.nn19dt",
18623
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
18624
15
            "New N19mb Downlink Tunnel", HFILL }
18625
15
        },
18626
15
        { &hf_pfcp_mbsn4resp_flags_o5_b1_jmti,
18627
15
        { "JMTI", "pfcp.mbsn4resp_flags.jmti",
18628
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
18629
15
            "Joined N19mb Multicast Tree Indication", HFILL }
18630
15
        },
18631
15
        { &hf_pfcp_mbsn4resp_flags_o5_b2_n19dtr,
18632
15
        { "N19DTR", "pfcp.mbsn4resp_flags.n19dtr",
18633
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
18634
15
            "N19mb Downlink Tunnel Removal", HFILL }
18635
15
        },
18636
18637
15
        { &hf_pfcp_tunnel_password_value,
18638
15
        { "Tunnel Password value", "pfcp.tunnel_password_value",
18639
15
            FT_STRING, BASE_NONE, NULL, 0x0,
18640
15
            NULL, HFILL }
18641
15
        },
18642
18643
15
        { &hf_pfcp_area_session_id_value,
18644
15
        { "Area Session ID value", "pfcp.area_session_id_value",
18645
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18646
15
            NULL, HFILL }
18647
15
        },
18648
18649
15
        { &hf_pfcp_dscp_to_ppi_mapping_info_ppi_value,
18650
15
        { "PPI value", "pfcp.dscp_to_ppi_mapping_info_ppi_value",
18651
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18652
15
            NULL, HFILL }
18653
15
        },
18654
18655
15
        { &hf_pfcp_dscp_to_ppi_mapping_info_dscp_value,
18656
15
        { "DSCP value", "pfcp.dscp_to_ppi_mapping_info_dscp_value",
18657
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18658
15
            NULL, HFILL }
18659
15
        },
18660
18661
15
        { &hf_pfcp_pfcpsdrsp_flags_b0_puru,
18662
15
        { "PURU (Pending Usage Reports Unacknowledged)", "pfcp.pfcpsdrsp_flags.puru",
18663
15
            FT_BOOLEAN, 8, NULL, 0x01,
18664
15
            NULL, HFILL }
18665
15
        },
18666
18667
15
        { &hf_pfcp_qer_indications_flags_b0_iqfis,
18668
15
        { "IQFIS (Insert DL MBS QFI SN)", "pfcp.qer_indications_flags.iqfis",
18669
15
            FT_BOOLEAN, 8, NULL, 0x01,
18670
15
            NULL, HFILL }
18671
15
        },
18672
15
        { &hf_pfcp_qer_indications_flags_b1_edbmi,
18673
15
        { "EDBMI (End Of Data Burst Marking Indication)", "pfcp.qer_indications_flags.edbmi",
18674
15
            FT_BOOLEAN, 8, NULL, 0x02,
18675
15
            NULL, HFILL }
18676
15
        },
18677
15
        { &hf_pfcp_qer_indications_flags_b2_eml4s,
18678
15
        { "EML4S (ECN Marking for L4S)", "pfcp.qer_indications_flags.eml4s",
18679
15
            FT_BOOLEAN, 8, NULL, 0x04,
18680
15
            NULL, HFILL }
18681
15
        },
18682
15
        { &hf_pfcp_qer_indications_flags_b3_pdusm,
18683
15
        { "PDUSM (PDU Set Marking)", "pfcp.qer_indications_flags.pdusm",
18684
15
            FT_BOOLEAN, 8, NULL, 0x08,
18685
15
            NULL, HFILL }
18686
15
        },
18687
15
        { &hf_pfcp_qer_indications_flags_b4_dbsmi,
18688
15
        { "DBSMI (Data Burst Size Marking Indication)", "pfcp.qer_indications_flags.dbsmi",
18689
15
            FT_BOOLEAN, 8, NULL, 0x10,
18690
15
            NULL, HFILL }
18691
15
        },
18692
15
        { &hf_pfcp_qer_indications_flags_b5_tnbmi,
18693
15
        { "TNBMI (Time to Next Burst Marking Indication)", "pfcp.qer_indications_flags.tnbmi",
18694
15
            FT_BOOLEAN, 8, NULL, 0x20,
18695
15
            NULL, HFILL }
18696
15
        },
18697
18698
15
        { &hf_pfcp_configured_time_domain_flags_b0_ctdi,
18699
15
        { "CTDI (Configured Time Domain Indicator)", "pfcp.qer_indications_flags.ctdi",
18700
15
            FT_BOOLEAN, 8, NULL, 0x01,
18701
15
            NULL, HFILL }
18702
15
        },
18703
18704
15
        { &hf_pfcp_metadata,
18705
15
        { "Metadata", "pfcp.metadata.metadata",
18706
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
18707
15
            NULL, HFILL }
18708
15
        },
18709
15
        { &hf_pfcp_metadata_binary_metadata,
18710
15
        { "Metadata - Binary data", "pfcp.metadata.binary_metadata",
18711
15
            FT_BYTES, BASE_NONE, NULL, 0x00,
18712
15
            NULL, HFILL }
18713
15
        },
18714
18715
15
        { &hf_pfcp_traffic_parameter_threshold_flags_b0_dl,
18716
15
        { "DL", "pfcp.traffic_parameter_threshold_flags.dl",
18717
15
            FT_BOOLEAN, 8, NULL, 0x01,
18718
15
            NULL, HFILL }
18719
15
        },
18720
15
        { &hf_pfcp_traffic_parameter_threshold_downlink_n6_jitter_threshold,
18721
15
        { "Downlink N6 Jitter Threshold", "pfcp.traffic_parameter_threshold.downlink_n6_jitter_threshold",
18722
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18723
15
            NULL, HFILL }
18724
15
        },
18725
18726
15
        { &hf_pfcp_dl_periodicity_value,
18727
15
        { "Dl Periodicity", "pfcp.dl_periodicity.value",
18728
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18729
15
            NULL, HFILL }
18730
15
        },
18731
18732
15
        { &hf_pfcp_n6_jitter_measurement_flags_b0_dl,
18733
15
        { "DL", "pfcp.dl_periodicity.dl",
18734
15
            FT_BOOLEAN, 8, NULL, 0x01,
18735
15
            NULL, HFILL }
18736
15
        },
18737
15
        { &hf_pfcp_n6_jitter_measurement_dl_periodicity,
18738
15
        { "DL Periodicity", "pfcp.dl_periodicity.dl_periodicity",
18739
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18740
15
            NULL, HFILL }
18741
15
        },
18742
15
        { &hf_pfcp_n6_jitter_measurement_lower_dl_jitter_measurement,
18743
15
        { "Lower DL Jitter Measurement", "pfcp.dl_periodicity.lower_dl_jitter_measurement",
18744
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18745
15
            NULL, HFILL }
18746
15
        },
18747
15
        { &hf_pfcp_n6_jitter_measurement_higher_dl_jitter_measurement,
18748
15
        { "Higher DL Jitter Measurement", "pfcp.dl_periodicity.higher_dl_jitter_measurement",
18749
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18750
15
            NULL, HFILL }
18751
15
        },
18752
18753
15
        { &hf_pfcp_traffic_parameter_measurement_indication_flags_b0_ulpmi,
18754
15
        { "ULPMI", "pfcp.traffic_parameter_measurement_indication.ulpmi",
18755
15
            FT_BOOLEAN, 8, NULL, 0x01,
18756
15
            NULL, HFILL }
18757
15
        },
18758
15
        { &hf_pfcp_traffic_parameter_measurement_indication_flags_b1_dlpmi,
18759
15
        { "DLPMI", "pfcp.traffic_parameter_measurement_indication.dlpmi",
18760
15
            FT_BOOLEAN, 8, NULL, 0x02,
18761
15
            NULL, HFILL }
18762
15
        },
18763
15
        { &hf_pfcp_traffic_parameter_measurement_indication_flags_b2_n6jmi,
18764
15
        { "N6JMI", "pfcp.traffic_parameter_measurement_indication.n6jmi",
18765
15
            FT_BOOLEAN, 8, NULL, 0x02,
18766
15
            NULL, HFILL }
18767
15
        },
18768
18769
15
        { &hf_pfcp_ul_periodicity_value,
18770
15
        { "Ul Periodicity", "pfcp.ul_periodicity.value",
18771
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18772
15
            NULL, HFILL }
18773
15
        },
18774
18775
15
        { &hf_pfcp_mpquic_control_information_flags_b0_cupd,
18776
15
        { "CUDP (CONNECT-UDP)", "pfcp.mpquic_control_information.flags.cudp",
18777
15
            FT_BOOLEAN, 8, NULL, 0x01,
18778
15
            NULL, HFILL }
18779
15
        },
18780
15
        { &hf_pfcp_mpquic_control_information_flags_b1_cip,
18781
15
        { "CIP (CONNECT-IP)", "pfcp.mpquic_control_information.flags.cip",
18782
15
            FT_BOOLEAN, 8, NULL, 0x02,
18783
15
            NULL, HFILL }
18784
15
        },
18785
15
        { &hf_pfcp_mpquic_control_information_flags_b2_ceth,
18786
15
        { "CETH (CONNECT-Ethernet)", "pfcp.mpquic_control_information.flags.ceth",
18787
15
            FT_BOOLEAN, 8, NULL, 0x04,
18788
15
            NULL, HFILL }
18789
15
        },
18790
18791
15
        { &hf_pfcp_mpquic_address_information_flags_b0_v4,
18792
15
        { "V4", "pfcp.mpquic_address_information.flags.v4",
18793
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18794
15
            NULL, HFILL }
18795
15
        },
18796
15
        { &hf_pfcp_mpquic_address_information_flags_b1_v6,
18797
15
        { "V6", "pfcp.mpquic_address_information.flags.v6",
18798
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18799
15
            NULL, HFILL }
18800
15
        },
18801
15
        { &hf_pfcp_mpquic_address_information_type,
18802
15
        { "MPQUIC Proxy Type", "pfcp.mpquic_address_information.type",
18803
15
            FT_UINT8, BASE_DEC, VALS(pfcp_mpquic_address_information_type_vals), 0x0,
18804
15
            NULL, HFILL }
18805
15
        },
18806
15
        { &hf_pfcp_mpquic_address_information_port,
18807
15
        { "MPQUIC Proxy Port", "pfcp.mpquic_address_information.port",
18808
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18809
15
            NULL, HFILL }
18810
15
        },
18811
15
        { &hf_pfcp_mpquic_address_information_address_ipv4,
18812
15
        { "MPQUIC Proxy IPv4 Address", "pfcp.mpquic_address_information.ipv4",
18813
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18814
15
            NULL, HFILL }
18815
15
        },
18816
15
        { &hf_pfcp_mpquic_address_information_address_ipv6,
18817
15
        { "MPQUIC Proxy IPv6 Address", "pfcp.mpquic_address_information.ipv6",
18818
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
18819
15
            NULL, HFILL }
18820
15
        },
18821
18822
15
        { &hf_pfcp_transport_mode_value,
18823
15
        { "Transport Mode Value", "pfcp.transport_mode.value",
18824
15
            FT_UINT8, BASE_DEC, VALS(pfcp_transport_mode_type_vals), 0x0f,
18825
15
            NULL, HFILL }
18826
15
        },
18827
18828
15
        { &hf_pfcp_protocol_description_flags_b0_h264,
18829
15
        { "H264", "pfcp.protocol_description.h264",
18830
15
            FT_BOOLEAN, 8, NULL, 0x01,
18831
15
            NULL, HFILL }
18832
15
        },
18833
15
        { &hf_pfcp_protocol_description_flags_b1_rtp,
18834
15
        { "RTP", "pfcp.protocol_description.rtp",
18835
15
            FT_BOOLEAN, 8, NULL, 0x02,
18836
15
            NULL, HFILL }
18837
15
        },
18838
15
        { &hf_pfcp_protocol_description_flags_b2_srtp,
18839
15
        { "SRTP", "pfcp.protocol_description.srtp",
18840
15
            FT_BOOLEAN, 8, NULL, 0x02,
18841
15
            NULL, HFILL }
18842
15
        },
18843
18844
15
        { &hf_pfcp_reporting_suggestion_info_reporting_urgency_value,
18845
15
        { "Reporting Urgency value", "pfcp.reporting_suggestion_info.reporting_urgency_value",
18846
15
            FT_UINT8, BASE_DEC, VALS(pfcp_reporting_urgency_type_vals), 0x0f,
18847
15
            NULL, HFILL }
18848
15
        },
18849
15
        { &hf_pfcp_reporting_suggestion_info_reporting_time_info,
18850
15
        { "Reporting Time Info", "pfcp.reporting_suggestion_info.reporting_time_info",
18851
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18852
15
            NULL, HFILL }
18853
15
        },
18854
18855
15
        { &hf_pfcp_tl_container,
18856
15
        { "TL-Container", "pfcp.tl_container",
18857
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
18858
15
            NULL, HFILL }
18859
15
        },
18860
18861
15
        { &hf_pfcp_measurement_indication_flags_b0_dqfi,
18862
15
        { "DQFI", "pfcp.measurement_indication.dqfi",
18863
15
            FT_BOOLEAN, 8, NULL, 0x01,
18864
15
            NULL, HFILL }
18865
15
        },
18866
18867
15
        { &hf_pfcp_hplmn_s_nssai_sst,
18868
15
        { "SST (Slice/Service Type)", "pfcp.hplmn_s_nssai.sst",
18869
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
18870
15
            NULL, HFILL }
18871
15
        },
18872
15
        { &hf_pfcp_hplmn_s_nssai_sd,
18873
15
        { "SD (Slice Differentiator)", "pfcp.hplmn_s_nssai.sd",
18874
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
18875
15
            NULL, HFILL }
18876
15
        },
18877
18878
15
        { &hf_pfcp_media_transport_protocol,
18879
15
        { "Media Transport Protocol", "pfcp.media_transport_protocol.media_transport_protocol_value",
18880
15
            FT_UINT8, BASE_DEC, VALS(pfcp_media_transport_protocol_vals), 0x0f,
18881
15
            NULL, HFILL }
18882
15
        },
18883
18884
15
        { &hf_pfcp_rtp_header_extension_type,
18885
15
        { "RTP Header Extension Type", "pfcp.rtp_header_extension.rtp_header_extension_type",
18886
15
            FT_UINT8, BASE_DEC, VALS(pfcp_rtp_header_extension_type_vals), 0x0,
18887
15
            NULL, HFILL }
18888
15
        },
18889
18890
15
        { &hf_pfcp_rtp_header_extension_id,
18891
15
        { "RTP Header Extension ID", "pfcp.rtp_header_extension_id.rtp_header_extension_id",
18892
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18893
15
            NULL, HFILL }
18894
15
        },
18895
18896
15
        { &hf_pfcp_rtp_payload_type,
18897
15
        { "RTP Payload Type", "pfcp.rtp_payload_type.rtp_payload_type",
18898
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
18899
15
            NULL, HFILL }
18900
15
        },
18901
18902
15
        { &hf_pfcp_rtp_payload_format,
18903
15
        { "RTP Payload Format", "pfcp.rtp_payload_format.rtp_payload_format",
18904
15
            FT_UINT8, BASE_DEC, VALS(pfcp_rtp_payload_format_vals), 0x0,
18905
15
            NULL, HFILL }
18906
15
        },
18907
18908
15
        { &hf_pfcp_extended_dl_buffering_notification_policy_flags_b0_edbn,
18909
15
        { "EDBN", "pfcp.extended_dl_buffering_notification_policy.edbn",
18910
15
            FT_BOOLEAN, 8, NULL, 0x01,
18911
15
            NULL, HFILL }
18912
15
        },
18913
18914
15
        { &hf_pfcp_mt_sdt_control_information_flags_b0_rdsi,
18915
15
        { "RDSI", "pfcp.mt_sdt_control_information.rdsi",
18916
15
            FT_BOOLEAN, 8, NULL, 0x01,
18917
15
            NULL, HFILL }
18918
15
        },
18919
18920
15
        { &hf_pfcp_reporting_thresholds_flags_b0_dlci,
18921
15
        { "DLCI", "pfcp.reporting_thresholds.flags.dlci",
18922
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18923
15
            NULL, HFILL }
18924
15
        },
18925
15
        { &hf_pfcp_reporting_thresholds_flags_b1_ulci,
18926
15
        { "ULCI", "pfcp.reporting_thresholds.flags.ulci",
18927
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18928
15
            NULL, HFILL }
18929
15
        },
18930
15
        { &hf_pfcp_reporting_thresholds_flags_b2_dldr,
18931
15
        { "DLRP", "pfcp.reporting_thresholds.flags.dlrp",
18932
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
18933
15
            NULL, HFILL }
18934
15
        },
18935
15
        { &hf_pfcp_reporting_thresholds_flags_b3_uldr,
18936
15
        { "ULRP", "pfcp.reporting_thresholds.flags.ulrp",
18937
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
18938
15
            NULL, HFILL }
18939
15
        },
18940
15
        { &hf_pfcp_reporting_thresholds_dl_congestion_information_threshold,
18941
15
        { "DL Congestion Information Threshold", "pfcp.reporting_thresholds.dl_congestion",
18942
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18943
15
            NULL, HFILL }
18944
15
        },
18945
15
        { &hf_pfcp_reporting_thresholds_ul_congestion_information_threshold,
18946
15
        { "UL Congestion Information Threshold", "pfcp.reporting_thresholds.ul_congestion",
18947
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
18948
15
            NULL, HFILL }
18949
15
        },
18950
15
        { &hf_pfcp_reporting_thresholds_dl_data_rate_threshold,
18951
15
        { "DL Data Rate threshold (kilobits)", "pfcp.reporting_thresholds.dl_data_rate",
18952
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18953
15
            NULL, HFILL }
18954
15
        },
18955
15
        { &hf_pfcp_reporting_thresholds_ul_data_rate_threshold,
18956
15
        { "UL Data Rate threshold (kilobits)", "pfcp.reporting_thresholds.ul_data_rate",
18957
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
18958
15
            NULL, HFILL }
18959
15
        },
18960
18961
15
        { &hf_pfcp_rtp_header_extension_additional_information_flags_b0_fi,
18962
15
        { "FI (Format Indication)", "pfcp.rtp_header_extension_additional_information.flags.fi",
18963
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18964
15
            NULL, HFILL }
18965
15
        },
18966
15
        { &hf_pfcp_rtp_header_extension_additional_information_flags_b1_pssai,
18967
15
        { "PSSAI (PDU Set Size Activation Indication)", "pfcp.rtp_header_extension_additional_information.flags.pssai",
18968
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18969
15
            NULL, HFILL }
18970
15
        },
18971
15
        { &hf_pfcp_rtp_header_extension_additional_information_flags_b2_npdsi,
18972
15
        { "NPDSI (Number of PDUs in the PDU Set)", "pfcp.rtp_header_extension_additional_information.flags.npdsi",
18973
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
18974
15
            NULL, HFILL }
18975
15
        },
18976
15
        { &hf_pfcp_rtp_header_extension_additional_information_pssa,
18977
15
        { "PSSA", "pfcp.rtp_header_extension_additional_information.pssa",
18978
15
            FT_UINT8, BASE_DEC, NULL, 0x4,
18979
15
            NULL, HFILL }
18980
15
        },
18981
15
        { &hf_pfcp_rtp_header_extension_additional_information_format,
18982
15
        { "Format", "pfcp.rtp_header_extension_additional_information.format",
18983
15
            FT_UINT8, BASE_DEC, VALS(pfcp_rtp_header_extension_additional_information_type_vals), 0x3,
18984
15
            NULL, HFILL }
18985
15
        },
18986
15
        { &hf_pfcp_mapped_n6_ip_address_b0_chv4,
18987
15
        { "CHV4", "pfcp.mapped_n6_ip_address.flags.chv4",
18988
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
18989
15
            NULL, HFILL }
18990
15
        },
18991
15
        { &hf_pfcp_mapped_n6_ip_address_b1_v4,
18992
15
        { "V4", "pfcp.mapped_n6_ip_address.flags.v4",
18993
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
18994
15
            NULL, HFILL }
18995
15
        },
18996
15
        { &hf_pfcp_mapped_n6_ip_address_ipv4,
18997
15
        { "IPv4 address", "pfcp.mapped_n6_ip_address.ipv4",
18998
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
18999
15
            NULL, HFILL }
19000
15
        },
19001
19002
15
        { &hf_pfcp_n6_routing_information_flag_b0_sipv4,
19003
15
        { "SIPV4", "pfcp.n6_routing_information.flags.sipv4",
19004
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
19005
15
            NULL, HFILL }
19006
15
        },
19007
15
        { &hf_pfcp_n6_routing_information_flag_b1_sipv6,
19008
15
        { "SIPV6", "pfcp.n6_routing_information.flags.sipv6",
19009
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
19010
15
            NULL, HFILL }
19011
15
        },
19012
15
        { &hf_pfcp_n6_routing_information_flag_b2_spo,
19013
15
        { "SPO", "pfcp.n6_routing_information.flags.spo",
19014
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
19015
15
            NULL, HFILL }
19016
15
        },
19017
15
        { &hf_pfcp_n6_routing_information_flag_b3_dipv4,
19018
15
        { "DIPV4", "pfcp.n6_routing_information.flags.dipv4",
19019
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
19020
15
            NULL, HFILL }
19021
15
        },
19022
15
        { &hf_pfcp_n6_routing_information_flag_b4_dipv6,
19023
15
        { "DIPV6", "pfcp.n6_routing_information.flags.dipv6",
19024
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
19025
15
            NULL, HFILL }
19026
15
        },
19027
15
        { &hf_pfcp_n6_routing_information_flag_b5_dpo,
19028
15
        { "DPO", "pfcp.n6_routing_information.flags.spn",
19029
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
19030
15
            NULL, HFILL }
19031
15
        },
19032
19033
15
        { &hf_pfcp_n6_routing_information_source_ipv4,
19034
15
        { "Source IPv4 address", "pfcp.n6_routing_information.sipv4",
19035
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
19036
15
            NULL, HFILL }
19037
15
        },
19038
15
        { &hf_pfcp_n6_routing_information_source_ipv6,
19039
15
        { "Source IPv6 address", "pfcp.n6_routing_information.sipv6",
19040
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
19041
15
            NULL, HFILL }
19042
15
        },
19043
15
        { &hf_pfcp_n6_routing_information_source_port,
19044
15
        { "Source Port Number", "pfcp.n6_routing_information.spn",
19045
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19046
15
            NULL, HFILL }
19047
15
        },
19048
15
        { &hf_pfcp_n6_routing_information_destination_ipv4,
19049
15
        { "Destination IPv4 address", "pfcp.n6_routing_information.dipv4",
19050
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
19051
15
            NULL, HFILL }
19052
15
        },
19053
15
        { &hf_pfcp_n6_routing_information_destination_ipv6,
19054
15
        { "Destination IPv6 address", "pfcp.n6_routing_information.dipv6",
19055
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
19056
15
            NULL, HFILL }
19057
15
        },
19058
15
        { &hf_pfcp_n6_routing_information_destination_port,
19059
15
        { "Destination Port Number", "pfcp.n6_routing_information.dpn",
19060
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19061
15
            NULL, HFILL }
19062
15
        },
19063
19064
15
        { &hf_pfcp_uri,
19065
15
        { "URI", "pfcp.uri",
19066
15
            FT_STRING, BASE_NONE, NULL, 0,
19067
15
            NULL, HFILL }
19068
15
        },
19069
19070
15
        { &hf_pfcp_ue_level_measurements_configuration_job_type,
19071
15
        { "Job Type", "pfcp.ue_level_measurements_configuration.job_type",
19072
15
            FT_UINT8, BASE_DEC, VALS(pfcp_ue_level_measurements_configuration_job_type_vals), 0x0,
19073
15
            NULL, HFILL }
19074
15
        },
19075
15
        { &hf_pfcp_ue_level_measurements_configuration_number_of_measurement,
19076
15
        { "Number of Measurement", "pfcp.ue_level_measurements_configuration.number_of_measurement",
19077
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19078
15
            NULL, HFILL }
19079
15
        },
19080
15
        { &hf_pfcp_ue_level_measurements_configuration_measurement_type,
19081
15
        { "Measurement Type", "pfcp.ue_level_measurements_configuration.measurement_type",
19082
15
            FT_UINT8, BASE_DEC, VALS(pfcp_ue_level_measurements_configuration_measurement_type_vals), 0x0,
19083
15
            NULL, HFILL }
19084
15
        },
19085
19086
15
        { &hf_pfcp_ue_level_measurements_configuration_time_period,
19087
15
        { "Time Period", "pfcp.ue_level_measurements_configuration.time_period",
19088
15
            FT_UINT24, BASE_DEC, NULL, 0x0,
19089
15
            NULL, HFILL }
19090
15
        },
19091
19092
15
        { &hf_pfcp_n6_delay_measurement_protocols_b0_twamp,
19093
15
        { "TWAMP", "pfcp.n6_delay_measurement_protocols.flags.twamp",
19094
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
19095
15
            NULL, HFILL }
19096
15
        },
19097
15
        { &hf_pfcp_n6_delay_measurement_protocols_b1_owamp,
19098
15
        { "OWAMP", "pfcp.n6_delay_measurement_protocols.flags.owamp",
19099
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
19100
15
            NULL, HFILL }
19101
15
        },
19102
15
        { &hf_pfcp_n6_delay_measurement_protocols_b2_stamp,
19103
15
        { "STAMP", "pfcp.n6_delay_measurement_protocols.flags.stamp",
19104
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
19105
15
            NULL, HFILL }
19106
15
        },
19107
15
        { &hf_pfcp_n6_delay_measurement_protocols_b3_other,
19108
15
        { "OTHER", "pfcp.n6_delay_measurement_protocols.flags.other",
19109
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
19110
15
            NULL, HFILL }
19111
15
        },
19112
19113
15
        { &hf_pfcp_n6_delay_measurement_information_b0_mind,
19114
15
        { "MIND (Minimum Packet Delay)", "pfcp.n6_delay_measurement_information.flags.mind",
19115
15
            FT_BOOLEAN, 8, NULL, 0x01,
19116
15
            NULL, HFILL }
19117
15
        },
19118
15
        { &hf_pfcp_n6_delay_measurement_information_b1_maxd,
19119
15
        { "MAXD (Maximum Packet Delay)", "pfcp.n6_delay_measurement_information.flags.maxd",
19120
15
            FT_BOOLEAN, 8, NULL, 0x02,
19121
15
            NULL, HFILL }
19122
15
        },
19123
15
        { &hf_pfcp_n6_delay_measurement_information_avg_delay,
19124
15
        { "Average Packet Delay (ms)", "pfcp.n6_delay_measurement_information.avg_delay",
19125
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
19126
15
            NULL, HFILL }
19127
15
        },
19128
15
        { &hf_pfcp_n6_delay_measurement_information_min_delay,
19129
15
        { "Minimum Packet Delay (ms)", "pfcp.n6_delay_measurement_information.min_delay",
19130
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
19131
15
            NULL, HFILL }
19132
15
        },
19133
15
        { &hf_pfcp_n6_delay_measurement_information_max_delay,
19134
15
        { "Maximum Packet Delay (ms)", "pfcp.n6_delay_measurement_information.max_delay",
19135
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
19136
15
            NULL, HFILL }
19137
15
        },
19138
19139
15
        { &hf_pfcp_measurement_endpoint_address_b0_v4,
19140
15
        { "V4", "pfcp.measurement_endpoint_address.flags.v4",
19141
15
            FT_BOOLEAN, 8, NULL, 0x01,
19142
15
            NULL, HFILL }
19143
15
        },
19144
15
        { &hf_pfcp_measurement_endpoint_address_b1_v6,
19145
15
        { "V6", "pfcp.measurement_endpoint_address.flags.v6",
19146
15
            FT_BOOLEAN, 8, NULL, 0x02,
19147
15
            NULL, HFILL }
19148
15
        },
19149
15
        { &hf_pfcp_measurement_endpoint_address_ipv4,
19150
15
        { "IPv4 Address", "pfcp.measurement_endpoint_address.ipv4",
19151
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
19152
15
            NULL, HFILL }
19153
15
        },
19154
15
        { &hf_pfcp_measurement_endpoint_address_ipv6,
19155
15
        { "IPv6 Address", "pfcp.measurement_endpoint_address.ipv6",
19156
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
19157
15
            NULL, HFILL }
19158
15
        },
19159
19160
15
        { &hf_pfcp_operator_configurable_upf_capability,
19161
15
        { "Operator Configurable UPF Capability", "pfcp.operator_configurable_upf_capability",
19162
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19163
15
            NULL, HFILL }
19164
15
        },
19165
19166
15
        { &hf_pfcp_packet_inspection_functionality_b0_ipbd,
19167
15
        { "IPBD (IP filter Based packet Detection)", "pfcp.packet_inspection_functionality.flags.ipbd",
19168
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
19169
15
            NULL, HFILL }
19170
15
        },
19171
15
        { &hf_pfcp_packet_inspection_functionality_b1_macd,
19172
15
        { "MACD (MAC filter based packet Detection)", "pfcp.packet_inspection_functionality.flags.macd",
19173
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
19174
15
            NULL, HFILL }
19175
15
        },
19176
15
        { &hf_pfcp_packet_inspection_functionality_b2_dpid,
19177
15
        { "DPID (Deep Packet Inspection Detection)", "pfcp.packet_inspection_functionality.flags.dpid",
19178
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
19179
15
            NULL, HFILL }
19180
15
        },
19181
19182
15
        { &hf_pfcp_header_detection_reference,
19183
15
        { "Header Detection Reference", "pfcp.header_detection_reference",
19184
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19185
15
            NULL, HFILL }
19186
15
        },
19187
19188
15
        { &hf_pfcp_header_detection_support_information,
19189
15
        { "Header Detection Support Information", "pfcp.header_detection_support_information",
19190
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19191
15
            NULL, HFILL }
19192
15
        },
19193
19194
15
        { &hf_pfcp_reporting_endpoint_id,
19195
15
        { "Reporting Endpoint ID", "pfcp.reporting_endpoint_id",
19196
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19197
15
            NULL, HFILL }
19198
15
        },
19199
19200
15
        { &hf_pfcp_header_handling_control_reference,
19201
15
        { "Header Handling Control Reference", "pfcp.header_handling_control_reference",
19202
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19203
15
            NULL, HFILL }
19204
15
        },
19205
19206
15
        { &hf_pfcp_header_handling_action,
19207
15
        { "Header Handling Action", "pfcp.header_handling_action",
19208
15
            FT_UINT8, BASE_DEC, VALS(pfcp_header_handling_action_vals), 0x0f,
19209
15
            NULL, HFILL }
19210
15
        },
19211
19212
15
        { &hf_pfcp_header_information,
19213
15
        { "Header Information", "pfcp.header_information",
19214
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19215
15
            NULL, HFILL }
19216
15
        },
19217
19218
15
        { &hf_pfcp_header_value,
19219
15
        { "Header Value", "pfcp.header_value",
19220
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19221
15
            NULL, HFILL }
19222
15
        },
19223
19224
15
        { &hf_pfcp_header_handling_condition,
19225
15
        { "Header Handling Condition", "pfcp.header_handling_condition",
19226
15
            FT_UINT8, BASE_DEC, VALS(pfcp_header_handling_condition_vals), 0x0f,
19227
15
            NULL, HFILL }
19228
15
        },
19229
19230
15
        { &hf_pfcp_header_handling_control_id,
19231
15
        { "Header Handling Control ID", "pfcp.header_handling_control_id",
19232
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19233
15
            NULL, HFILL }
19234
15
        },
19235
19236
15
        { &hf_pfcp_header_handling_control_rule_id,
19237
15
        { "Header Handling Control Rule ID", "pfcp.header_handling_control_rule_id",
19238
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19239
15
            NULL, HFILL }
19240
15
        },
19241
19242
15
        { &hf_pfcp_on_path_n6_connection_information_signaling_method,
19243
15
        { "Signaling Method", "pfcp.on_path_n6_connection_information.signaling_method",
19244
15
            FT_UINT8, BASE_DEC, VALS(pfcp_on_path_n6_connection_information_signaling_method_vals), 0x07,
19245
15
            NULL, HFILL }
19246
15
        },
19247
15
        { &hf_pfcp_on_path_n6_connection_information_flags_b3_v4,
19248
15
        { "V4", "pfcp.on_path_n6_connection_information.flags.v4",
19249
15
            FT_BOOLEAN, 8, NULL, 0x08,
19250
15
            NULL, HFILL }
19251
15
        },
19252
15
        { &hf_pfcp_on_path_n6_connection_information_flags_b4_v6,
19253
15
        { "V6", "pfcp.on_path_n6_connection_information.flags.v6",
19254
15
            FT_BOOLEAN, 8, NULL, 0x10,
19255
15
            NULL, HFILL }
19256
15
        },
19257
15
        { &hf_pfcp_on_path_n6_connection_information_flags_b5_pn,
19258
15
        { "PN (Port Number)", "pfcp.on_path_n6_connection_information.flags.pn",
19259
15
            FT_BOOLEAN, 8, NULL, 0x20,
19260
15
            NULL, HFILL }
19261
15
        },
19262
15
        { &hf_pfcp_on_path_n6_connection_information_ipv4,
19263
15
        { "Destination IPv4 Address", "pfcp.on_path_n6_connection_information.ipv4",
19264
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
19265
15
            NULL, HFILL }
19266
15
        },
19267
15
        { &hf_pfcp_on_path_n6_connection_information_ipv6,
19268
15
        { "Destination IPv6 Address", "pfcp.on_path_n6_connection_information.ipv6",
19269
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
19270
15
            NULL, HFILL }
19271
15
        },
19272
15
        { &hf_pfcp_on_path_n6_connection_information_port,
19273
15
        { "Port Number", "pfcp.on_path_n6_connection_information.port",
19274
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19275
15
            NULL, HFILL }
19276
15
        },
19277
19278
15
        { &hf_pfcp_measurement_reporting_type_b0_per,
19279
15
        { "PER (Periodic Reporting)", "pfcp.measurement_reporting_type.flags.per",
19280
15
            FT_BOOLEAN, 8, NULL, 0x01,
19281
15
            NULL, HFILL }
19282
15
        },
19283
15
        { &hf_pfcp_measurement_reporting_type_b1_evt,
19284
15
        { "EVT (Event Triggered Reporting)", "pfcp.measurement_reporting_type.flags.evt",
19285
15
            FT_BOOLEAN, 8, NULL, 0x02,
19286
15
            NULL, HFILL }
19287
15
        },
19288
15
        { &hf_pfcp_measurement_reporting_type_b2_ire,
19289
15
        { "IRE (Immediate Report)", "pfcp.measurement_reporting_type.flags.ire",
19290
15
            FT_BOOLEAN, 8, NULL, 0x04,
19291
15
            NULL, HFILL }
19292
15
        },
19293
19294
15
        { &hf_pfcp_n6_delay_measurement_failure_cause,
19295
15
        { "Failure Cause", "pfcp.n6_delay_measurement_failure_cause",
19296
15
            FT_UINT8, BASE_DEC, VALS(pfcp_n6_delay_measurement_failure_cause_vals), 0x0,
19297
15
            NULL, HFILL }
19298
15
        },
19299
19300
15
        { &hf_pfcp_n6_delay_measurement_control_information_id,
19301
15
        { "N6 Delay Measurement Control Information ID", "pfcp.n6_delay_measurement_control_information_id",
19302
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19303
15
            NULL, HFILL }
19304
15
        },
19305
19306
15
        { &hf_pfcp_measurement_endpoint_port_number,
19307
15
        { "Measurement Endpoint Port Number", "pfcp.measurement_endpoint_port_number",
19308
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19309
15
            NULL, HFILL }
19310
15
        },
19311
19312
15
        { &hf_pfcp_header_handling_reporting_indication_b0_otri,
19313
15
        { "OTRI (One Time Report Indication)", "pfcp.header_handling_reporting_indication.flags.otri",
19314
15
            FT_BOOLEAN, 8, NULL, 0x01,
19315
15
            NULL, HFILL }
19316
15
        },
19317
19318
15
        { &hf_pfcp_smf_change_reason_b0_mpsnr,
19319
15
        { "MPSNR (Move PFCP Session due to SMF not responding)", "pfcp.smf_change_reason.flags.mpsnr",
19320
15
            FT_BOOLEAN, 8, NULL, 0x01,
19321
15
            NULL, HFILL }
19322
15
        },
19323
15
        { &hf_pfcp_smf_change_reason_b1_mpssf,
19324
15
        { "MPSSF (Move PFCP Session due to SMF Failure)", "pfcp.smf_change_reason.flags.mpssf",
19325
15
            FT_BOOLEAN, 8, NULL, 0x02,
19326
15
            NULL, HFILL }
19327
15
        },
19328
15
        { &hf_pfcp_smf_change_reason_b2_mpsai,
19329
15
        { "MPSAI (Move PFCP Session As Instructed)", "pfcp.smf_change_reason.flags.mpsai",
19330
15
            FT_BOOLEAN, 8, NULL, 0x04,
19331
15
            NULL, HFILL }
19332
15
        },
19333
19334
15
        { &hf_pfcp_pdu_set_importance_psi0_7,
19335
15
        { "PDU Set Importance (PSI0-PSI7)", "pfcp.pdu_set_importance.psi0_7",
19336
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
19337
15
            NULL, HFILL }
19338
15
        },
19339
15
        { &hf_pfcp_pdu_set_importance_psi8_15,
19340
15
        { "PDU Set Importance (PSI8-PSI15)", "pfcp.pdu_set_importance.psi8_15",
19341
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
19342
15
            NULL, HFILL }
19343
15
        },
19344
19345
15
        { &hf_pfcp_moq_control_information_b0_mqrei,
19346
15
        { "MQREI (MoQ Relay Enabled Indication)", "pfcp.moq_control_information.flags.mqrei",
19347
15
            FT_BOOLEAN, 8, NULL, 0x01,
19348
15
            NULL, HFILL }
19349
15
        },
19350
15
        { &hf_pfcp_moq_control_information_b1_mqrai,
19351
15
        { "MQRAI (MoQ Relay Address Indication)", "pfcp.moq_control_information.flags.mqrai",
19352
15
            FT_BOOLEAN, 8, NULL, 0x02,
19353
15
            NULL, HFILL }
19354
15
        },
19355
19356
15
        { &hf_pfcp_moq_relay_ip_address_flags_b0_v6,
19357
15
        { "V6", "pfcp.moq_relay_ip_address.flags.v6",
19358
15
            FT_BOOLEAN, 8, NULL, 0x01,
19359
15
            NULL, HFILL }
19360
15
        },
19361
15
        { &hf_pfcp_moq_relay_ip_address_flags_b1_v4,
19362
15
        { "V4", "pfcp.moq_relay_ip_address.flags.v4",
19363
15
            FT_BOOLEAN, 8, NULL, 0x02,
19364
15
            NULL, HFILL }
19365
15
        },
19366
15
        { &hf_pfcp_moq_relay_ip_address_ipv4,
19367
15
        { "IPv4 Address", "pfcp.moq_relay_ip_address.ipv4",
19368
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
19369
15
            NULL, HFILL }
19370
15
        },
19371
15
        { &hf_pfcp_moq_relay_ip_address_ipv6,
19372
15
        { "IPv6 Address", "pfcp.moq_relay_ip_address.ipv6",
19373
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
19374
15
            NULL, HFILL }
19375
15
        },
19376
19377
15
        { &hf_pfcp_media_related_information_transfer_info,
19378
15
        { "Transferring Method", "pfcp.media_related_information_transfer_info",
19379
15
            FT_UINT8, BASE_DEC, VALS(pfcp_media_related_information_transfer_info_vals), 0x0f,
19380
15
            NULL, HFILL }
19381
15
        },
19382
19383
15
        { &hf_pfcp_reporting_control_information_b0_uelm,
19384
15
        { "UELM (UE Level Measurement)", "pfcp.reporting_control_information.flags.uelm",
19385
15
            FT_BOOLEAN, 8, NULL, 0x01,
19386
15
            NULL, HFILL }
19387
15
        },
19388
19389
15
        { &hf_pfcp_security_mode_stamp_b0_intp,
19390
15
        { "INTP (Integrity Protection)", "pfcp.security_mode_stamp.flags.intp",
19391
15
            FT_BOOLEAN, 8, NULL, 0x01,
19392
15
            NULL, HFILL }
19393
15
        },
19394
15
        { &hf_pfcp_security_mode_stamp_b1_conp,
19395
15
        { "CONP (Confidentiality Protection)", "pfcp.security_mode_stamp.flags.conp",
19396
15
            FT_BOOLEAN, 8, NULL, 0x02,
19397
15
            NULL, HFILL }
19398
15
        },
19399
19400
15
        { &hf_pfcp_hmac_key_stamp,
19401
15
        { "HMAC Key", "pfcp.hmac_key_stamp",
19402
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19403
15
            NULL, HFILL }
19404
15
        },
19405
19406
15
        { &hf_pfcp_security_mode_owamp_or_twamp,
19407
15
        { "Mode", "pfcp.security_mode_owamp_or_twamp",
19408
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
19409
15
            NULL, HFILL }
19410
15
        },
19411
19412
15
        { &hf_pfcp_key_id_and_shared_secret_key_id_length,
19413
15
        { "Length of Key ID", "pfcp.key_id_and_shared_secret.key_id_length",
19414
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19415
15
            NULL, HFILL }
19416
15
        },
19417
15
        { &hf_pfcp_key_id_and_shared_secret_key_id,
19418
15
        { "Key ID", "pfcp.key_id_and_shared_secret.key_id",
19419
15
            FT_STRING, BASE_NONE, NULL, 0x0,
19420
15
            NULL, HFILL }
19421
15
        },
19422
15
        { &hf_pfcp_key_id_and_shared_secret_shared_secret_length,
19423
15
        { "Length of Shared Secret", "pfcp.key_id_and_shared_secret.shared_secret_length",
19424
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19425
15
            NULL, HFILL }
19426
15
        },
19427
15
        { &hf_pfcp_key_id_and_shared_secret_shared_secret,
19428
15
        { "Shared Secret", "pfcp.key_id_and_shared_secret.shared_secret",
19429
15
            FT_STRING, BASE_NONE, NULL, 0x0,
19430
15
            NULL, HFILL }
19431
15
        },
19432
19433
15
        { &hf_pfcp_remaining_data_reporting_indication,
19434
15
        { "Remaining Data Reporting Indication", "pfcp.remaining_data_reporting_indication",
19435
15
            FT_UINT8, BASE_DEC, VALS(pfcp_remaining_data_reporting_indication_vals), 0x0f,
19436
15
            NULL, HFILL }
19437
15
        },
19438
19439
15
        { &hf_pfcp_expedited_transfer_indication_b0_true,
19440
15
        { "TRUE", "pfcp.expedited_transfer_indication.flags.true",
19441
15
            FT_BOOLEAN, 8, NULL, 0x01,
19442
15
            NULL, HFILL }
19443
15
        },
19444
15
        { &hf_pfcp_expedited_transfer_indication_b1_false,
19445
15
        { "FALSE", "pfcp.expedited_transfer_indication.flags.false",
19446
15
            FT_BOOLEAN, 8, NULL, 0x02,
19447
15
            NULL, HFILL }
19448
15
        },
19449
19450
15
        { &hf_pfcp_session_reflector_mode_stamp_b0_srm,
19451
15
        { "SRM (Session Reflector Mode)", "pfcp.session_reflector_mode_stamp.flags.srm",
19452
15
            FT_BOOLEAN, 8, TFS(&pfcp_session_reflector_mode_stamp_tfs), 0x01,
19453
15
            NULL, HFILL }
19454
15
        },
19455
19456
15
        { &hf_pfcp_transport_level_marking_indications_b0_tlmip,
19457
15
        { "TLMIP", "pfcp.transport_level_marking_indications.flags.tlmip",
19458
15
            FT_BOOLEAN, 8, NULL, 0x01,
19459
15
            NULL, HFILL }
19460
15
        },
19461
19462
15
        { &hf_pfcp_binding_indication,
19463
15
        { "Binding Indication", "pfcp.binding_indication",
19464
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19465
15
            NULL, HFILL }
19466
15
        },
19467
19468
15
        { &hf_pfcp_pdu_set_importance_for_n6_unmarked_pdus_spare,
19469
15
        { "Spare", "pfcp.pdu_set_importance_for_n6_unmarked_pdus.spare",
19470
15
            FT_UINT8, BASE_DEC, NULL, 0xf0,
19471
15
            NULL, HFILL }
19472
15
        },
19473
15
        { &hf_pfcp_pdu_set_importance_for_n6_unmarked_pdus_psi_value,
19474
15
        { "PSI Value", "pfcp.pdu_set_importance_for_n6_unmarked_pdus.psi_value",
19475
15
            FT_UINT8, BASE_DEC, NULL, 0x0f,
19476
15
            NULL, HFILL }
19477
15
        },
19478
19479
        /* Enterprise IEs */
19480
        /* BBF */
19481
15
        { &hf_pfcp_bbf_up_function_features_o7_b0_pppoe,
19482
15
        { "PPPoE", "pfcp.bbf.up_function_features.pppoe",
19483
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
19484
15
            "PPPoE supported in DBNG-UP function", HFILL }
19485
15
        },
19486
15
        { &hf_pfcp_bbf_up_function_features_o7_b1_ipoe,
19487
15
        { "IPoE", "pfcp.bbf.up_function_features.ipoe",
19488
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x02,
19489
15
            "IPoE supported in DBNG-UP function", HFILL }
19490
15
        },
19491
15
        { &hf_pfcp_bbf_up_function_features_o7_b2_lac,
19492
15
        { "LAC", "pfcp.bbf.up_function_features.lac",
19493
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x04,
19494
15
            "LAC function supported in DBNG-UP function", HFILL }
19495
15
        },
19496
15
        { &hf_pfcp_bbf_up_function_features_o7_b3_lns,
19497
15
        { "LNS", "pfcp.bbf.up_function_features.lns",
19498
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
19499
15
            "LNS function supported in DBNG-UP function", HFILL }
19500
15
        },
19501
15
        { &hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload,
19502
15
        { "LCP keepalive offload", "pfcp.bbf.up_function_features.lcp_keepalive_offload",
19503
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x10,
19504
15
            "PPP LCP echo supported in DBNG-UP function", HFILL }
19505
15
        },
19506
15
        { &hf_pfcp_bbf_up_function_features_o7_b5_iptv,
19507
15
        { "IPTV", "pfcp.bbf.up_function_features.iptv",
19508
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
19509
15
            "DBNG-UP support of IP Multicast", HFILL }
19510
15
        },
19511
15
        { &hf_pfcp_bbf_up_function_features_o7_b6_nat_cp,
19512
15
        { "NAT-CP", "pfcp.bbf.up_function_features.nat_cp",
19513
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
19514
15
            "NAT function supported in DBNG-CP function", HFILL }
19515
15
        },
19516
15
        { &hf_pfcp_bbf_up_function_features_o7_b7_nat_up,
19517
15
        { "NAT-UP", "pfcp.bbf.up_function_features.nat_up",
19518
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
19519
15
            "NAT function supported in DBNG-UP function", HFILL }
19520
15
        },
19521
19522
15
        { &hf_pfcp_bbf_logical_port_id,
19523
15
        { "Logical Port", "pfcp.bbf.logical_port_id",
19524
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19525
15
            NULL, HFILL }
19526
15
        },
19527
15
        { &hf_pfcp_bbf_logical_port_id_str,
19528
15
        { "Logical Port", "pfcp.bbf.logical_port_id_str",
19529
15
            FT_STRING, BASE_NONE, NULL, 0x0,
19530
15
            NULL, HFILL }
19531
15
        },
19532
19533
15
        { &hf_pfcp_bbf_outer_hdr_creation_desc_spare,
19534
15
        { "Spare", "pfcp.bbf.outer_hdr_creation.desc.spare",
19535
15
            FT_BOOLEAN, 16, NULL, 0xf0ff,
19536
15
            NULL, HFILL }
19537
15
        },
19538
15
        { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b4_ppp,
19539
15
        { "PPP", "pfcp.bbf.outer_hdr_creation.desc.ppp",
19540
15
            FT_BOOLEAN, 16, NULL, 0x0800,
19541
15
            NULL, HFILL }
19542
15
        },
19543
15
        { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b3_l2tp,
19544
15
        { "L2TP", "pfcp.bbf.outer_hdr_creation.desc.l2tp",
19545
15
            FT_BOOLEAN, 16, NULL, 0x0400,
19546
15
            NULL, HFILL }
19547
15
        },
19548
15
        { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b2_traffic_endpoint,
19549
15
        { "Traffic-Endpoint", "pfcp.bbf.outer_hdr_creation.desc.trfep",
19550
15
            FT_BOOLEAN, 16, NULL, 0x0200,
19551
15
            NULL, HFILL }
19552
15
        },
19553
15
        { &hf_pfcp_bbf_outer_hdr_creation_desc_o7_b1_crp_nsh,
19554
15
        { "CPR-NSH", "pfcp.bbf.outer_hdr_creation.desc.cpr_nsh",
19555
15
            FT_BOOLEAN, 16, NULL, 0x0100,
19556
15
            NULL, HFILL }
19557
15
        },
19558
15
        { &hf_pfcp_bbf_outer_hdr_creation_tunnel_id,
19559
15
        { "L2TP Tunnel ID", "pfcp.bbf.outer_hdr_creation.tunnel_id",
19560
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
19561
15
            NULL, HFILL }
19562
15
        },
19563
15
        { &hf_pfcp_bbf_outer_hdr_creation_session_id,
19564
15
        { "L2TP Session ID", "pfcp.bbf.outer_hdr_creation.session_id",
19565
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
19566
15
            NULL, HFILL }
19567
15
        },
19568
19569
15
        { &hf_pfcp_bbf_out_hdr_desc,
19570
15
        { "BBF Outer Header Removal Description", "pfcp.bbf.out_hdr_desc",
19571
15
            FT_UINT8, BASE_DEC, VALS(pfcp_bbf_out_hdr_desc_vals), 0x0,
19572
15
            NULL, HFILL }
19573
15
        },
19574
19575
15
        { &hf_pfcp_bbf_pppoe_session_id,
19576
15
        { "PPPoE Session ID", "pfcp.bbf.pppoe_session_id",
19577
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
19578
15
            NULL, HFILL }
19579
15
        },
19580
19581
15
        { &hf_pfcp_bbf_ppp_protocol_flags,
19582
15
        { "Flags", "pfcp.bbf.protocol_flags",
19583
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
19584
15
            NULL, HFILL }
19585
15
        },
19586
15
        { &hf_pfcp_bbf_ppp_protocol_b2_control,
19587
15
        { "control", "pfcp.bbf.protocol_flags.control",
19588
15
            FT_BOOLEAN, 8, NULL, 0x04,
19589
15
            NULL, HFILL }
19590
15
        },
19591
15
        { &hf_pfcp_bbf_ppp_protocol_b1_data,
19592
15
        { "data", "pfcp.bbf.protocol_flags.data",
19593
15
            FT_BOOLEAN, 8, NULL, 0x02,
19594
15
            NULL, HFILL }
19595
15
        },
19596
15
        { &hf_pfcp_bbf_ppp_protocol_b0_specific,
19597
15
        { "specific", "pfcp.bbf.protocol_flags.specific",
19598
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
19599
15
            NULL, HFILL }
19600
15
        },
19601
15
        { &hf_pfcp_bbf_ppp_protocol,
19602
15
        { "protocol", "pfcp.bbf.protocol_flags.protocol",
19603
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
19604
15
            NULL, HFILL }
19605
15
        },
19606
19607
15
        { &hf_pfcp_bbf_verification_timer_interval,
19608
15
        { "Interval", "pfcp.bbf.verification_timer.interval",
19609
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19610
15
            NULL, HFILL }
19611
15
        },
19612
15
        { &hf_pfcp_bbf_verification_timer_count,
19613
15
        { "Count", "pfcp.bbf.verification_timer.count",
19614
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19615
15
            NULL, HFILL }
19616
15
        },
19617
19618
15
        { &hf_pfcp_bbf_ppp_lcp_magic_number_tx,
19619
15
        { "PPP LCP Magic Number Tx", "pfcp.bbf.lcp_magic_number.tx",
19620
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
19621
15
            NULL, HFILL }
19622
15
        },
19623
15
        { &hf_pfcp_bbf_ppp_lcp_magic_number_rx,
19624
15
        { "PPP LCP Magic Number Rx", "pfcp.bbf.lcp_magic_number.rx",
19625
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
19626
15
            NULL, HFILL }
19627
15
        },
19628
19629
15
        { &hf_pfcp_bbf_mtu,
19630
15
        { "MTU", "pfcp.bbf.mtu",
19631
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19632
15
            NULL, HFILL }
19633
15
        },
19634
19635
15
        { &hf_pfcp_bbf_l2tp_endp_flags,
19636
15
        { "Flags", "pfcp.bbf.l2tp_endp_flags",
19637
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
19638
15
            NULL, HFILL }
19639
15
        },
19640
15
        { &hf_pfcp_bbf_l2tp_endp_flags_b2_ch,
19641
15
        { "CH (CHOOSE)", "pfcp.bbf.l2tp_endp_flags.ch",
19642
15
            FT_BOOLEAN, 8, NULL, 0x04,
19643
15
            NULL, HFILL }
19644
15
        },
19645
15
        { &hf_pfcp_bbf_l2tp_endp_flags_b1_v6,
19646
15
        { "V6 (IPv6)", "pfcp.bbf.l2tp_endp_flags.v6",
19647
15
            FT_BOOLEAN, 8, NULL, 0x02,
19648
15
            NULL, HFILL }
19649
15
        },
19650
15
        { &hf_pfcp_bbf_l2tp_endp_flags_b0_v4,
19651
15
        { "V4 (IPv4)", "pfcp.bbf.l2tp_endp_flags.v4",
19652
15
            FT_BOOLEAN, 8, NULL, 0x01,
19653
15
            NULL, HFILL }
19654
15
        },
19655
15
        { &hf_pfcp_bbf_l2tp_endp_id_tunnel_id,
19656
15
        { "Tunnel ID", "pfcp.bbf.l2tp_endp.tunnel_id",
19657
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
19658
15
            NULL, HFILL }
19659
15
        },
19660
15
        { &hf_pfcp_bbf_l2tp_endp_id_ipv4,
19661
15
        { "IPv4 address", "pfcp.bbf.l2tp_endp.ipv4_addr",
19662
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
19663
15
            NULL, HFILL }
19664
15
        },
19665
15
        { &hf_pfcp_bbf_l2tp_endp_id_ipv6,
19666
15
        { "IPv6 address", "pfcp.bbf.l2tp_endp.ipv6_addr",
19667
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
19668
15
            NULL, HFILL }
19669
15
        },
19670
19671
15
        { &hf_pfcp_bbf_l2tp_session_id,
19672
15
        { "L2TP Session ID", "pfcp.bbf.bbf_l2tp_session_id",
19673
15
            FT_UINT16, BASE_HEX, NULL, 0x0,
19674
15
            NULL, HFILL }
19675
15
        },
19676
19677
15
        { &hf_pfcp_bbf_l2tp_type_flags,
19678
15
        { "Flags", "pfcp.bbf.l2tp_type_flags",
19679
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
19680
15
            NULL, HFILL }
19681
15
        },
19682
15
        { &hf_pfcp_bbf_l2tp_type_flags_b0_t,
19683
15
        { "T (TYPE)", "pfcp.bbf.l2tp_type_flags.t",
19684
15
            FT_BOOLEAN, 8, TFS(&pfcp_bbf_l2tp_type_b0_t_tfs), 0x01,
19685
15
            NULL, HFILL }
19686
15
        },
19687
19688
15
        { &hf_pfcp_bbf_multicast_flags_o7_b1_routeralertoff,
19689
15
        { "ROUTERALERTOFF", "pfcp.bbf.multicast_flags.routeralertoff",
19690
15
            FT_BOOLEAN, 8, NULL, 0x01,
19691
15
            NULL, HFILL }
19692
15
        },
19693
15
        { &hf_pfcp_bbf_multicast_flags_o7_b0_fastleave,
19694
15
        { "FASTLEAVE", "pfcp.bbf.multicast_flags.fastleave",
19695
15
            FT_BOOLEAN, 8, NULL, 0x02,
19696
15
            NULL, HFILL }
19697
15
        },
19698
19699
15
        { &hf_pfcp_bbf_multicast_query_param_robustness,
19700
15
        { "Robustness count", "pfcp.bbf.multicast_query_parameters.robustness_count",
19701
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19702
15
            NULL, HFILL }
19703
15
        },
19704
15
        { &hf_pfcp_bbf_multicast_query_param_query_interval,
19705
15
        { "Query interval", "pfcp.bbf.multicast_query_parameters.query_interval",
19706
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19707
15
            NULL, HFILL }
19708
15
        },
19709
15
        { &hf_pfcp_bbf_multicast_query_param_query_response_interval,
19710
15
        { "Query response interval", "pfcp.bbf.multicast_query_parameters.query_response_interval",
19711
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19712
15
            NULL, HFILL }
19713
15
        },
19714
15
        { &hf_pfcp_bbf_multicast_query_param_group_query_interval,
19715
15
        { "Group-specific query interval", "pfcp.bbf.multicast_query_parameters.group_specific_query_interval",
19716
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19717
15
            NULL, HFILL }
19718
15
        },
19719
19720
15
        { &hf_pfcp_bbf_multicast_group_limit_max_joins,
19721
15
        { "Maximum number of concurrent (S,G) joins allowed", "pfcp.bbf.multicast_group_limit.max_joins",
19722
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19723
15
            NULL, HFILL }
19724
15
        },
19725
19726
15
        { &hf_pfcp_bbf_apply_action_flags_b0_nat,
19727
15
        { "NAT", "pfcp.bbf.apply_action_flags.nat",
19728
15
            FT_BOOLEAN, 8, NULL, 0x01,
19729
15
            NULL, HFILL }
19730
15
        },
19731
19732
15
        { &hf_pfcp_bbf_nat_external_port_range_start,
19733
15
        { "Start", "pfcp.bbf.nat_external_port_range.start",
19734
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19735
15
            NULL, HFILL }
19736
15
        },
19737
15
        { &hf_pfcp_bbf_nat_external_port_range_end,
19738
15
        { "End", "pfcp.bbf.nat_external_port_range.end",
19739
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19740
15
            NULL, HFILL }
19741
15
        },
19742
19743
15
        { &hf_pfcp_bbf_nat_port_forward,
19744
15
        { "NAT Port Forward", "pfcp.bbf.nat_port_forward",
19745
15
            FT_NONE, BASE_NONE, NULL, 0x0,
19746
15
            NULL, HFILL }
19747
15
        },
19748
15
        { &hf_pfcp_bbf_nat_port_forward_inside_ip,
19749
15
        { "Inside Address", "pfcp.bbf.nat_port_forward.inside_address",
19750
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
19751
15
            NULL, HFILL }
19752
15
        },
19753
15
        { &hf_pfcp_bbf_nat_port_forward_inside_port,
19754
15
        { "Inside Port", "pfcp.bbf.nat_port_forward.inside_port",
19755
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19756
15
            NULL, HFILL }
19757
15
        },
19758
15
        { &hf_pfcp_bbf_nat_port_forward_outside_port,
19759
15
        { "Outside Port", "pfcp.bbf.nat_port_forward.outside_port",
19760
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19761
15
            NULL, HFILL }
19762
15
        },
19763
15
        { &hf_pfcp_bbf_nat_port_forward_protocol,
19764
15
        { "Protocol", "pfcp.bbf.nat_port_forward.protocol",
19765
15
            FT_UINT8, BASE_DEC|BASE_EXT_STRING, &ipproto_val_ext, 0x0,
19766
15
            NULL , HFILL
19767
15
        }
19768
15
        },
19769
19770
15
        { &hf_pfcp_bbf_reporting_trigger,
19771
15
        { "Reporting Trigger", "pfcp.bbf.reporting_trigger",
19772
15
            FT_UINT8, BASE_DEC, VALS(pfcp_bbf_reporting_trigger_vals), 0x0,
19773
15
            NULL, HFILL }
19774
15
        },
19775
19776
15
        { &hf_pfcp_bbf_dynamic_nat_block_port_range_start_port,
19777
15
        { "Start", "pfcp.dynamic_nat_block_port_range.start",
19778
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19779
15
            NULL, HFILL }
19780
15
        },
19781
15
        { &hf_pfcp_bbf_dynamic_nat_block_port_range_end_port,
19782
15
        { "End", "pfcp.dynamic_nat_block_port_range.end",
19783
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
19784
15
            NULL, HFILL }
19785
15
        },
19786
19787
15
        { &hf_pfcp_bbf_event_time_stamp,
19788
15
          { "Event Time Stamp", "pfcp.bbf.event_time_stamp",
19789
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0x0,
19790
15
            NULL, HFILL }
19791
15
        },
19792
19793
15
        { &hf_pfcp_bbf_direction,
19794
15
        { "Direction", "pfcp.bbf.direction",
19795
15
            FT_UINT8, BASE_HEX, VALS(pfcp_bbf_direction_vals), 0x0,
19796
15
            NULL, HFILL }
19797
15
        },
19798
15
        { &hf_pfcp_bbf_family,
19799
15
        { "Family", "pfcp.bbf.family",
19800
15
            FT_UINT8, BASE_HEX, VALS(pfcp_bbf_family_vals), 0x0,
19801
15
            NULL, HFILL }
19802
15
        },
19803
15
        { &hf_pfcp_bbf_sgrp_identifier,
19804
15
        { "SGRP Identifier", "pfcp.bbf.sgrp_identifier",
19805
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
19806
15
            NULL, HFILL }
19807
15
        },
19808
15
        { &hf_pfcp_bbf_sgrp_state,
19809
15
        { "SGRP State", "pfcp.bbf.sgrp_state",
19810
15
            FT_UINT8, BASE_HEX, VALS(pfcp_bbf_sgrp_state_vals), 0x0,
19811
15
            NULL, HFILL }
19812
15
        },
19813
15
        { &hf_pfcp_bbf_sgrp_flags,
19814
15
        { "Flags", "pfcp.bbf.sgrp_flags",
19815
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
19816
15
            NULL, HFILL }
19817
15
        },
19818
15
        { &hf_pfcp_bbf_sgrp_flags_b0_ras,
19819
15
        { "RAS", "pfcp.bbf.sgrp_flags.ras",
19820
15
            FT_BOOLEAN, 8, NULL, 0x01,
19821
15
            "Route Advertisement State", HFILL }
19822
15
        },
19823
15
        { &hf_pfcp_bbf_sgrp_flags_b1_psa,
19824
15
        { "PSA", "pfcp.bbf.sgrp_flags.psa",
19825
15
            FT_BOOLEAN, 8, NULL, 0x02,
19826
15
            "Partial State Allowed", HFILL }
19827
15
        },
19828
15
        { &hf_pfcp_bbf_operational_condition,
19829
15
        { "Operational Condition", "pfcp.bbf.operational_condition",
19830
15
            FT_UINT8, BASE_HEX, VALS(pfcp_bbf_operational_condition_vals), 0x0,
19831
15
            NULL, HFILL }
19832
15
        },
19833
15
        { &hf_pfcp_bbf_ipv4_prefix,
19834
15
        { "IPv4 Prefix", "pfcp.bbf.ipv4_prefix",
19835
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
19836
15
            NULL, HFILL }
19837
15
        },
19838
15
        { &hf_pfcp_bbf_ipv4_prefix_length,
19839
15
        { "IPv4 Prefix Length", "pfcp.bbf.ipv4_prefix_length",
19840
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19841
15
            NULL, HFILL }
19842
15
        },
19843
15
        { &hf_pfcp_bbf_ipv6_prefix,
19844
15
        { "IPv6 Prefix", "pfcp.bbf.ipv6_prefix",
19845
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
19846
15
            NULL, HFILL }
19847
15
        },
19848
15
        { &hf_pfcp_bbf_ipv6_prefix_length,
19849
15
        { "IPv6 Prefix Length", "pfcp.bbf.ipv6_prefix_length",
19850
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19851
15
            NULL, HFILL }
19852
15
        },
19853
15
        { &hf_pfcp_bbf_prefix_tag_usage,
19854
15
        { "Prefix Tag Usage", "pfcp.bbf.prefix_tag_usage",
19855
15
            FT_UINT8, BASE_HEX, VALS(pfcp_bbf_prefix_tag_usage_vals), 0x0,
19856
15
            NULL, HFILL }
19857
15
        },
19858
15
        { &hf_pfcp_bbf_prefix_tag,
19859
15
        { "Prefix Tag", "pfcp.bbf.prefix_tag",
19860
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
19861
15
            NULL, HFILL }
19862
15
        },
19863
15
        { &hf_pfcp_bbf_error_code,
19864
15
        { "Error Code", "pfcp.bbf.error_code",
19865
15
            FT_UINT16, BASE_HEX, VALS(pfcp_bbf_error_code_vals), 0x0,
19866
15
            NULL, HFILL }
19867
15
        },
19868
15
        { &hf_pfcp_bbf_error_message,
19869
15
        { "Error Message", "pfcp.bbf.error_message",
19870
15
            FT_STRING, BASE_NONE, NULL, 0x0,
19871
15
            NULL, HFILL }
19872
15
        },
19873
15
        { &hf_pfcp_bbf_maximum_acl_chain_length,
19874
15
        { "Maximum ACL Chain Length", "pfcp.bbf.maximum_acl_chain_length",
19875
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
19876
15
            NULL, HFILL }
19877
15
        },
19878
15
        { &hf_pfcp_bbf_forwarding_capability,
19879
15
        { "Forwarding Capability", "pfcp.bbf.forwarding_capability",
19880
15
            FT_UINT8, BASE_DEC|BASE_UNIT_STRING, UNS(&units_percent), 0x0,
19881
15
            NULL, HFILL }
19882
15
        },
19883
15
        { &hf_pfcp_bbf_connectivity_status,
19884
15
        { "Connectivity Status", "pfcp.bbf.connectivity_status",
19885
15
            FT_UINT8, BASE_DEC, VALS(pfcp_bbf_connectivity_status_vals), 0x0,
19886
15
            NULL, HFILL }
19887
15
        },
19888
15
        { &hf_pfcp_bbf_vendor_specific_node_report_type,
19889
15
        { "Flags", "pfcp.bbf.vendor_specific_node_report_type",
19890
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
19891
15
            NULL, HFILL }
19892
15
        },
19893
15
        { &hf_pfcp_bbf_vendor_specific_node_report_type_b0_lpr,
19894
15
        { "LPR", "pfcp.bbf.vendor_specific_node_report_type.lpr",
19895
15
            FT_BOOLEAN, 8, NULL, 0x01,
19896
15
            "Logical Port Report", HFILL }
19897
15
        },
19898
15
        { &hf_pfcp_bbf_vendor_specific_node_report_type_b1_sgr,
19899
15
        { "SGR", "pfcp.bbf.vendor_specific_node_report_type.sgr",
19900
15
            FT_BOOLEAN, 8, NULL, 0x02,
19901
15
            "Subscriber Group Report", HFILL }
19902
15
        },
19903
15
        { &hf_pfcp_bbf_vendor_specific_node_report_type_b2_nir,
19904
15
        { "NIR", "pfcp.bbf.vendor_specific_node_report_type.nir",
19905
15
            FT_BOOLEAN, 8, NULL, 0x04,
19906
15
            "Network Instance Report", HFILL }
19907
15
        },
19908
15
        { &hf_pfcp_bbf_ctag_range_start,
19909
15
        { "C-Tag Range Start", "pfcp.bbf.ctag_range_start",
19910
15
            FT_UINT24, BASE_DEC, NULL, 0x0,
19911
15
            NULL, HFILL }
19912
15
        },
19913
15
        { &hf_pfcp_bbf_ctag_range_end,
19914
15
        { "C-Tag Range End", "pfcp.bbf.ctag_range_end",
19915
15
            FT_UINT24, BASE_DEC, NULL, 0x0,
19916
15
            NULL, HFILL }
19917
15
        },
19918
15
        { &hf_pfcp_bbf_stag_range_start,
19919
15
        { "S-Tag Range Start", "pfcp.bbf.stag_range_start",
19920
15
            FT_UINT24, BASE_DEC, NULL, 0x0,
19921
15
            NULL, HFILL }
19922
15
        },
19923
15
        { &hf_pfcp_bbf_stag_range_end,
19924
15
        { "S-Tag Range End", "pfcp.bbf.stag_range_end",
19925
15
            FT_UINT24, BASE_DEC, NULL, 0x0,
19926
15
            NULL, HFILL }
19927
15
        },
19928
19929
        /* Travelping */
19930
15
        { &hf_pfcp_enterprise_travelping_packet_measurement,
19931
15
        { "Flags", "pfcp.travelping.volume_measurement",
19932
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
19933
15
            NULL, HFILL }
19934
15
        },
19935
15
        { &hf_pfcp_enterprise_travelping_packet_measurement_b0_tonop,
19936
15
        { "TONOP", "pfcp.travelping.volume_measurement_flags.tonop",
19937
15
            FT_BOOLEAN, 8, NULL, 0x01,
19938
15
            NULL, HFILL }
19939
15
        },
19940
15
        { &hf_pfcp_enterprise_travelping_packet_measurement_b1_ulnop,
19941
15
        { "ULNOP", "pfcp.travelping.volume_measurement_flags.ulnop",
19942
15
            FT_BOOLEAN, 8, NULL, 0x02,
19943
15
            NULL, HFILL }
19944
15
        },
19945
15
        { &hf_pfcp_enterprise_travelping_packet_measurement_b2_dlnop,
19946
15
        { "DLNOP", "pfcp.travelping.volume_measurement_flags.dlnops",
19947
15
            FT_BOOLEAN, 8, NULL, 0x04,
19948
15
            NULL, HFILL }
19949
15
        },
19950
15
        { &hf_pfcp_travelping_pkt_meas_tonop,
19951
15
        { "Total Number of Packets", "pfcp.travelping.volume_measurement.tonop",
19952
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
19953
15
            NULL, HFILL }
19954
15
        },
19955
15
        { &hf_pfcp_travelping_pkt_meas_ulnop,
19956
15
        { "Uplink Number of Packets", "pfcp.travelping.volume_measurement.ulnop",
19957
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
19958
15
            NULL, HFILL }
19959
15
        },
19960
15
        { &hf_pfcp_travelping_pkt_meas_dlnop,
19961
15
        { "Downlink Number of Packets", "pfcp.travelping.volume_measurement.dlnop",
19962
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
19963
15
            NULL, HFILL }
19964
15
        },
19965
15
        { &hf_pfcp_travelping_build_id,
19966
15
        { "Build Identifier", "pfcp.travelping.build_id",
19967
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19968
15
            NULL, HFILL }
19969
15
        },
19970
15
        { &hf_pfcp_travelping_build_id_str,
19971
15
        { "Build Identifier", "pfcp.travelping.build_id_str",
19972
15
            FT_STRING, BASE_NONE, NULL, 0x0,
19973
15
            NULL, HFILL }
19974
15
        },
19975
15
        { &hf_pfcp_travelping_now,
19976
15
        { "Now", "pfcp.travelping.now",
19977
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_NTP_UTC, NULL, 0x0,
19978
15
            NULL, HFILL }
19979
15
        },
19980
15
        { &hf_pfcp_travelping_error_message,
19981
15
        { "Error Message", "pfcp.travelping.error_message",
19982
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19983
15
            NULL, HFILL }
19984
15
        },
19985
15
        { &hf_pfcp_travelping_error_message_str,
19986
15
        { "Error Message", "pfcp.travelping.error_message_str",
19987
15
            FT_STRING, BASE_NONE, NULL, 0x0,
19988
15
            NULL, HFILL }
19989
15
        },
19990
15
        { &hf_pfcp_travelping_file_name,
19991
15
        { "File Name", "pfcp.travelping.file_name",
19992
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
19993
15
            NULL, HFILL }
19994
15
        },
19995
15
        { &hf_pfcp_travelping_file_name_str,
19996
15
        { "File Name", "pfcp.travelping.file_name_str",
19997
15
            FT_STRING, BASE_NONE, NULL, 0x0,
19998
15
            NULL, HFILL }
19999
15
        },
20000
15
        { &hf_pfcp_travelping_line_number,
20001
15
        { "Line Number", "pfcp.travelping.line_number",
20002
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
20003
15
            NULL, HFILL }
20004
15
        },
20005
15
        { &hf_pfcp_travelping_ipfix_policy,
20006
15
        { "IPFIX Policy", "pfcp.travelping.ipfix_policy",
20007
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
20008
15
            NULL, HFILL }
20009
15
        },
20010
15
        { &hf_pfcp_travelping_ipfix_policy_str,
20011
15
        { "IPFIX Policy", "pfcp.travelping.ipfix_policy_str",
20012
15
            FT_STRING, BASE_NONE, NULL, 0x0,
20013
15
            NULL, HFILL }
20014
15
        },
20015
15
        { &hf_pfcp_travelping_trace_parent,
20016
15
        { "Trace Parent", "pfcp.travelping.trace_parent",
20017
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
20018
15
            NULL, HFILL }
20019
15
        },
20020
15
        { &hf_pfcp_travelping_trace_parent_str,
20021
15
        { "Trace Parent", "pfcp.travelping.trace_parent_str",
20022
15
            FT_STRING, BASE_NONE, NULL, 0x0,
20023
15
            NULL, HFILL }
20024
15
        },
20025
15
        { &hf_pfcp_travelping_trace_state,
20026
15
        { "Trace State", "pfcp.travelping.trace_state",
20027
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
20028
15
            NULL, HFILL }
20029
15
        },
20030
15
        { &hf_pfcp_travelping_trace_state_str,
20031
15
        { "Trace State", "pfcp.travelping.trace_state_str",
20032
15
            FT_STRING, BASE_NONE, NULL, 0x0,
20033
15
            NULL, HFILL }
20034
15
        },
20035
20036
        /* Juniper Networks */
20037
20038
15
        { &hf_pfcp_jnpr_cp_id_opaque_string,
20039
15
        { "Opaque String", "pfcp.jnpr.cp_id",
20040
15
            FT_STRING, BASE_NONE, NULL, 0x0,
20041
15
            NULL, HFILL }
20042
15
        },
20043
20044
15
        { &hf_pfcp_jnpr_filter_length,
20045
15
        { "Filter Length", "pfcp.jnpr.filter_len",
20046
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20047
15
            NULL, HFILL }
20048
15
        },
20049
20050
15
        { &hf_pfcp_jnpr_filter_data,
20051
15
        { "Filter Data", "pfcp.jnpr.filter_data",
20052
15
            FT_BYTES, BASE_SHOW_ASCII_PRINTABLE, NULL, 0x0,
20053
15
            NULL, HFILL }
20054
15
        },
20055
20056
15
        { &hf_pfcp_jnpr_filter_service_info_len,
20057
15
        { "Filter Service Info Length", "pfcp.jnpr.fsi_len",
20058
15
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
20059
15
        },
20060
20061
15
        { &hf_pfcp_jnpr_filter_service_info_data,
20062
15
        { "Filter Service Info Data", "pfcp.jnpr.fsi_data",
20063
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
20064
15
            NULL, HFILL }
20065
15
        },
20066
20067
15
        { &hf_pfcp_jnpr_sgrp_name,
20068
15
        { "SGRP Name", "pfcp.jnpr.sgrp_name",
20069
15
            FT_STRING, BASE_NONE, NULL, 0x0,
20070
15
            NULL, HFILL }
20071
15
        },
20072
20073
15
        { &hf_pfcp_jnpr_logical_port_address,
20074
15
        { "Logical Port IP Address", "pfcp.jnpr.lport_ip",
20075
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
20076
15
            NULL, HFILL }
20077
15
        },
20078
20079
15
        { &hf_pfcp_jnpr_compute_limit_exceeded,
20080
15
        { "Compute Limit Exceeded", "pfcp.jnpr.compute_limit_exceeded",
20081
15
            FT_BOOLEAN, 8, TFS(&tfs_on_off),
20082
15
            0x01, NULL, HFILL }
20083
15
        },
20084
20085
15
        { &hf_pfcp_jnpr_final_stats,
20086
15
        { "Final Stats Flag", "pfcp.jnpr.final_stats",
20087
15
            FT_UINT8, BASE_DEC, VALS(final_stats),
20088
15
            0x0, NULL, HFILL }
20089
15
        },
20090
20091
15
        { &hf_pfcp_jnpr_error_event_id,
20092
15
        { "Error Event ID", "pfcp.jnpr.error_event_id",
20093
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
20094
15
            NULL, HFILL }
20095
15
        },
20096
20097
15
        { &hf_pfcp_jnpr_error_event_len,
20098
15
        { "Error Event Length", "pfcp.jnpr.error_event_len",
20099
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20100
15
            NULL, HFILL }
20101
15
        },
20102
20103
15
        { &hf_pfcp_jnpr_error_event_desc,
20104
15
        { "Error Event Description", "pfcp.jnpr.error_event_desc",
20105
15
            FT_STRING, BASE_NONE, NULL, 0x0,
20106
15
            NULL, HFILL }
20107
15
        },
20108
20109
15
        { &hf_pfcp_jnpr_mcast_flags,
20110
15
        { "Multicast Flags", "pfcp.jnpr.mcast_flags",
20111
15
            FT_UINT8, BASE_HEX, VALS(mcast_flags_vals),
20112
15
            0x3F, NULL, HFILL }
20113
15
        },
20114
20115
15
        { &hf_pfcp_jnpr_mcast_group_threshold,
20116
15
        { "Group Threshold", "pfcp.jnpr.mcast_group_threshold",
20117
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
20118
15
            NULL, HFILL }
20119
15
        },
20120
20121
15
        { &hf_pfcp_jnpr_source_ip_spare,
20122
15
        { "Source IP Spare", "pfcp.jnpr.source_ip_spare",
20123
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
20124
15
            NULL, HFILL }
20125
15
        },
20126
20127
15
        { &hf_pfcp_jnpr_nested_ie_type,
20128
15
        { "Nested IE Type", "pfcp.jnpr.nested_ie_type",
20129
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20130
15
            NULL, HFILL }
20131
15
        },
20132
20133
15
        { &hf_pfcp_jnpr_nested_ie_len,
20134
15
        { "Nested IE Length", "pfcp.jnpr.nested_ie_len",
20135
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20136
15
            NULL, HFILL }
20137
15
        },
20138
20139
15
        { &hf_pfcp_jnpr_source_ip,
20140
15
        { "Source IP Address", "pfcp.jnpr.source_ip",
20141
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
20142
15
            NULL, HFILL }
20143
15
        },
20144
20145
15
        { &hf_pfcp_jnpr_src_ip_ie_group,
20146
15
        { "Source IP Address IE [Grouped]", "pfcp.jnpr.src_ip_ie_group",
20147
15
            FT_NONE, BASE_NONE, NULL, 0x0,
20148
15
            NULL, HFILL }
20149
15
        },
20150
20151
15
        { &hf_pfcp_jnpr_hi_prio_port,
20152
15
        { "HiPrioPortNo", "pfcp.jnpr.hi_prio_port",
20153
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20154
15
            NULL, HFILL }
20155
15
        },
20156
20157
15
        { &hf_pfcp_jnpr_med_hi_prio_port,
20158
15
        { "MedHiPrioPortNo", "pfcp.jnpr.med_hi_prio_port",
20159
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20160
15
            NULL, HFILL }
20161
15
        },
20162
20163
15
        { &hf_pfcp_jnpr_med_prio_port,
20164
15
        { "MedPrioPortNo", "pfcp.jnpr.med_prio_port",
20165
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20166
15
            NULL, HFILL }
20167
15
        },
20168
20169
15
        { &hf_pfcp_jnpr_med_low_prio_port,
20170
15
        { "MedLowPrioPortNo", "pfcp.jnpr.med_low_prio_port",
20171
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20172
15
            NULL, HFILL }
20173
15
        },
20174
20175
15
        { &hf_pfcp_jnpr_low_prio_port,
20176
15
        { "LowPrioPortNo", "pfcp.jnpr.low_prio_port",
20177
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20178
15
            NULL, HFILL }
20179
15
        },
20180
20181
15
        { &hf_pfcp_jnpr_accounting_port,
20182
15
        { "AccountingPortNo", "pfcp.jnpr.accounting_port",
20183
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20184
15
            NULL, HFILL }
20185
15
        },
20186
20187
15
        { &hf_pfcp_jnpr_session_port,
20188
15
        { "SessionPortNo", "pfcp.jnpr.session_port",
20189
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20190
15
            NULL, HFILL }
20191
15
        },
20192
20193
15
        { &hf_pfcp_jnpr_cos_fwd_len,
20194
15
        { "COS Forwarding Class Info Length", "pfcp.jnpr.cos_fwd_len",
20195
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20196
15
            NULL, HFILL }
20197
15
        },
20198
20199
15
        { &hf_pfcp_jnpr_cos_fwd_data,
20200
15
        { "COS Forwarding Class Info Data", "pfcp.jnpr.cos_fwd_data",
20201
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
20202
15
            NULL, HFILL }
20203
15
        },
20204
20205
15
        { &hf_pfcp_jnpr_delete_flag,
20206
15
        { "Delete Flag", "pfcp.jnpr.port_network_instance_delete_flag",
20207
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
20208
15
            NULL, HFILL }
20209
15
        },
20210
20211
15
        { &hf_pfcp_jnpr_ih_flag,
20212
15
        { "Implicit Hierarchy (IH)", "pfcp.jnpr.hierarchical_schedule.ih",
20213
15
            FT_BOOLEAN, 8, NULL, 0x01,
20214
15
            NULL, HFILL }
20215
15
        },
20216
20217
15
        { &hf_pfcp_jnpr_max_hierarchy_levels,
20218
15
        { "Maximum Hierarchy Levels", "pfcp.jnpr.hierarchical_schedule.levels",
20219
15
            FT_UINT8, BASE_DEC, NULL, 0x0,
20220
15
            NULL, HFILL }
20221
15
        },
20222
20223
15
        { &hf_pfcp_jnpr_li_source_port,
20224
15
        { "Source Port", "pfcp.jnpr.li.source_port",
20225
15
            FT_UINT16, BASE_DEC, NULL, 0x0,
20226
15
            NULL, HFILL }
20227
15
        },
20228
20229
15
        { &hf_pfcp_jnpr_li_service_id,
20230
15
        { "Service ID", "pfcp.jnpr.li.service_id",
20231
15
            FT_UINT32, BASE_DEC, NULL, 0x0,
20232
15
            NULL, HFILL }
20233
15
        },
20234
20235
15
        { &hf_pfcp_jnpr_li_md_header,
20236
15
        { "MD Header Contents", "pfcp.jnpr.li.md_header",
20237
15
            FT_BYTES, BASE_NONE, NULL, 0x0,
20238
15
            NULL, HFILL }
20239
15
        },
20240
20241
15
        { &hf_pfcp_jnpr_operation_type,
20242
15
        { "Operation Type", "pfcp.jnpr.operation_type",
20243
15
            FT_UINT8, BASE_DEC, VALS(op_type_vals),
20244
15
            0x0, NULL, HFILL }
20245
15
        },
20246
20247
15
        { &hf_pfcp_jnpr_address_qualifier,
20248
15
        { "Address Qualifier", "pfcp.jnpr.addr_qualifier",
20249
15
            FT_UINT8, BASE_HEX, NULL,
20250
15
            0x03, NULL, HFILL }
20251
15
        },
20252
20253
15
        { &hf_pfcp_jnpr_addr_primary,
20254
15
        { "Primary", "pfcp.jnpr.addr_qualifier.primary",
20255
15
            FT_BOOLEAN, 8, TFS(&tfs_set_notset),
20256
15
            0x01, NULL, HFILL }
20257
15
        },
20258
20259
15
        { &hf_pfcp_jnpr_addr_preferred,
20260
15
        { "Preferred", "pfcp.jnpr.addr_qualifier.preferred",
20261
15
            FT_BOOLEAN, 8, TFS(&tfs_set_notset),
20262
15
            0x02, NULL, HFILL }
20263
15
        },
20264
20265
15
        { &hf_pfcp_jnpr_targeted_distribution_weight,
20266
15
        { "Weight", "pfcp.jnpr.targeted_distribution.weight",
20267
15
            FT_UINT16, BASE_DEC, NULL,
20268
15
            0x0, NULL, HFILL }
20269
15
        },
20270
20271
15
        { &hf_pfcp_jnpr_l2tp_flag,
20272
15
        { "L2TP Flags", "pfcp.l2tp.flag",
20273
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL }
20274
15
        },
20275
20276
15
        { &hf_pfcp_jnpr_l2tp_tunnel_id,
20277
15
        { "Tunnel ID", "pfcp.l2tp.tunnel_id",
20278
15
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
20279
15
        },
20280
20281
15
        { &hf_pfcp_jnpr_l2tp_src_port,
20282
15
        { "Source Port", "pfcp.l2tp.src_port",
20283
15
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
20284
15
        },
20285
20286
15
        { &hf_pfcp_jnpr_l2tp_dst_port,
20287
15
        { "Destination Port", "pfcp.l2tp.dst_port",
20288
15
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL }
20289
15
        },
20290
20291
15
        { &hf_pfcp_jnpr_l2tp_tos_reflect,
20292
15
        { "TOS Reflect", "pfcp.l2tp.tos_reflect",
20293
15
            FT_UINT8, BASE_DEC, NULL, 0x0, NULL, HFILL }
20294
15
        },
20295
20296
15
        { &hf_pfcp_jnpr_l2tp_is_lns,
20297
15
        { "Is LNS Tunnel", "pfcp.l2tp.is_lns",
20298
15
            FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL }
20299
15
        },
20300
20301
15
        { &hf_pfcp_jnpr_l2tp_ipv4,
20302
15
        { "IPv4 Address", "pfcp.l2tp.ipv4",
20303
15
            FT_IPv4, BASE_NONE, NULL, 0x0, NULL, HFILL }
20304
15
        },
20305
20306
15
        { &hf_pfcp_jnpr_l2tp_tunnel_index,
20307
15
        { "Tunnel Index", "pfcp.l2tp.tunnel_index",
20308
15
            FT_UINT32, BASE_DEC, NULL, 0x0, NULL, HFILL }
20309
15
        },
20310
20311
        /* Nokia */
20312
20313
15
        { &hf_pfcp_nokia_sap_template,
20314
15
        { "SAP template", "pfcp.nokia.sap_template",
20315
15
            FT_STRING, BASE_NONE, NULL, 0,
20316
15
            NULL, HFILL }
20317
15
        },
20318
15
        { &hf_pfcp_nokia_group_iface_template,
20319
15
        { "Group Interface Template", "pfcp.nokia.group_if_template",
20320
15
            FT_STRING, BASE_NONE, NULL, 0,
20321
15
            NULL, HFILL }
20322
15
        },
20323
15
        { &hf_pfcp_nokia_session_state_id,
20324
15
        { "Session State Id", "pfcp.nokia.session_state_id",
20325
15
            FT_UINT64, BASE_DEC, NULL, 0,
20326
15
            NULL, HFILL }
20327
15
        },
20328
15
        { &hf_pfcp_nokia_detailed_stats_key,
20329
15
        { "Key", "pfcp.nokia.detailed_stats.key",
20330
15
            FT_UINT32, BASE_HEX, NULL, 0,
20331
15
            NULL, HFILL }
20332
15
        },
20333
15
        { &hf_pfcp_nokia_detailed_stats_key_direction,
20334
15
        { "Direction", "pfcp.nokia.detailed_stats.direction",
20335
15
            FT_BOOLEAN, 32, TFS(&tfs_nokia_detailed_stats_ie), 0x80000000,
20336
15
            NULL, HFILL }
20337
15
        },
20338
15
        { &hf_pfcp_nokia_detailed_stats_key_type,
20339
15
        { "Type", "pfcp.nokia.detailed_stats.type",
20340
15
            FT_BOOLEAN, 32, TFS(&tfs_nokia_detailed_stats_qp), 0x40000000,
20341
15
            NULL, HFILL }
20342
15
        },
20343
15
        { &hf_pfcp_nokia_detailed_stats_key_object_id,
20344
15
        { "Object id", "pfcp.nokia.detailed_stats.object_id",
20345
15
            FT_UINT32, BASE_DEC, NULL, 0x003f0000,
20346
15
            NULL, HFILL }
20347
15
        },
20348
15
        { &hf_pfcp_nokia_detailed_stats_key_stat_mode,
20349
15
        { "Stat mode", "pfcp.nokia.detailed_stats.stat_mode",
20350
15
            FT_UINT32, BASE_DEC, NULL, 0x0000001f,
20351
15
            NULL, HFILL }
20352
15
        },
20353
15
        { &hf_pfcp_nokia_detailed_stats_bitmap_item,
20354
15
        { "length", "pfcp.nokia.detailed_stats.bitmap.len",
20355
15
            FT_UINT64, BASE_DEC|BASE_VAL64_STRING, VALS64(nokia_detailed_stats_length_values), 0x0,
20356
15
            NULL, HFILL }
20357
15
        },
20358
15
        { &hf_pfcp_nokia_detailed_stats_octets,
20359
15
        { "Packets offered", "pfcp.nokia.detailed_stats.octets",
20360
15
            FT_UINT64, BASE_DEC, NULL, 0,
20361
15
            NULL, HFILL }
20362
15
        },
20363
15
        { &hf_pfcp_nokia_detailed_error,
20364
15
        { "Detailed Error", "pfcp.nokia.detailed_error",
20365
15
            FT_STRING, BASE_NONE, NULL, 0,
20366
15
            NULL, HFILL }
20367
15
        },
20368
15
        { &hf_pfcp_nokia_qos_override,
20369
15
        { "Qos Override", "pfcp.nokia.qos_override",
20370
15
            FT_STRING, BASE_NONE, NULL, 0,
20371
15
            NULL, HFILL }
20372
15
        },
20373
15
        { &hf_pfcp_nokia_measurement_info,
20374
15
        { "Flags", "pfcp.nokia.measurement_info",
20375
15
            FT_UINT8, BASE_HEX, NULL, 0,
20376
15
            NULL, HFILL }
20377
15
        },
20378
15
        { &hf_pfcp_nokia_measurement_info_b0_det,
20379
15
        { "DET (Detailed Statistics)", "pfcp.nokia.measurement_info.det",
20380
15
            FT_BOOLEAN, 8, NULL, 0x01,
20381
15
            NULL, HFILL }
20382
15
        },
20383
15
        { &hf_pfcp_nokia_pfcpsmreq_flags,
20384
15
        { "Flags", "pfcp.nokia.smreq_flags",
20385
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
20386
15
            NULL, HFILL }
20387
15
        },
20388
15
        { &hf_pfcp_nokia_pfcpsmreq_flags_b0_abs,
20389
15
        { "ABS (Absolute modification request)", "pfcp.nokia.smreq_flags.abs",
20390
15
            FT_BOOLEAN, 8, NULL, 0x01,
20391
15
            NULL, HFILL }
20392
15
        },
20393
15
        { &hf_pfcp_nokia_pfcpsmreq_flags_b1_audit,
20394
15
        { "AUD (Auditing modification message)", "pfcp.nokia.smreq_flags.audit",
20395
15
            FT_BOOLEAN, 8, NULL, 0x02,
20396
15
            NULL, HFILL }
20397
15
        },
20398
15
        { &hf_pfcp_nokia_cp_function_features_assoc_audit,
20399
15
        { "ASSOC-BULK-AUDIT", "pfcp.nokia.cp_function_features.assoc_audit",
20400
15
            FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000001,
20401
15
            NULL, HFILL }
20402
15
        },
20403
15
        { &hf_pfcp_nokia_cp_function_features_imm_l2_access_id_report,
20404
15
        { "IMM-L2-ACCESS-ID", "pfcp.nokia.cp_function_features.imm_l2_access_id_report",
20405
15
            FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000002,
20406
15
            NULL, HFILL }
20407
15
        },
20408
15
        { &hf_pfcp_nokia_cp_function_features_cmag_c,
20409
15
        { "CMAG-C", "pfcp.nokia.cp_function_features.cmag_c",
20410
15
            FT_BOOLEAN, 32, TFS(&tfs_supported_not_supported), 0x00000004,
20411
15
            NULL, HFILL }
20412
15
        },
20413
15
        { &hf_pfcp_nokia_up_function_features_bulk_audit,
20414
15
        { "BLK_AUD (Bulk Audit)", "pfcp.nokia.up_function_features.blk_aud",
20415
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
20416
15
            NULL, HFILL }
20417
15
        },
20418
15
        { &hf_pfcp_nokia_up_function_features_sssg,
20419
15
        { "SSSG (Shared Subnet Signaling)", "pfcp.nokia.up_function_features.sssg",
20420
15
            FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x08,
20421
15
            NULL, HFILL }
20422
15
        },
20423
15
        { &hf_pfcp_nokia_filter_override_type,
20424
15
        { "Filter Type", "pfcp.nokia.filter_override.type",
20425
15
            FT_UINT8, BASE_HEX, VALS(nokia_filter_override_type_vals), 0x0,
20426
15
            NULL, HFILL }
20427
15
        },
20428
15
        { &hf_pfcp_nokia_filter_override_name,
20429
15
        { "Filter Override", "pfcp.nokia.filter_override.name",
20430
15
            FT_STRING, BASE_NONE, NULL, 0,
20431
15
            NULL, HFILL }
20432
15
        },
20433
15
        { &hf_pfcp_nokia_intermediate_destination,
20434
15
        { "Intermediate Destination", "pfcp.nokia.intermediate_destination",
20435
15
            FT_STRING, BASE_NONE, NULL, 0,
20436
15
            NULL, HFILL }
20437
15
        },
20438
15
        { &hf_pfcp_nokia_nat_isa_members,
20439
15
        { "Number of ISA members", "pfcp.nokia.nat_isa_members",
20440
15
            FT_UINT8, BASE_DEC, NULL, 0,
20441
15
            NULL, HFILL }
20442
15
        },
20443
15
        { &hf_pfcp_nokia_pfcphb_flags,
20444
15
        { "Flags", "pfcp.nokia.hb_flags",
20445
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
20446
15
            NULL, HFILL }
20447
15
        },
20448
15
        { &hf_pfcp_nokia_pfcphb_flags_b0_aud_r,
20449
15
        { "AUDR (Mass Audit Request)", "pfcp.nokia.hb_flags.audr",
20450
15
            FT_BOOLEAN, 8, NULL, 0x01,
20451
15
            NULL, HFILL }
20452
15
        },
20453
15
        { &hf_pfcp_nokia_pfcphb_flags_b1_aud_s,
20454
15
        { "AUDS (Mass Audit Start)", "pfcp.nokia.hb_flags.auds",
20455
15
            FT_BOOLEAN, 8, NULL, 0x02,
20456
15
            NULL, HFILL }
20457
15
        },
20458
15
        { &hf_pfcp_nokia_pfcphb_flags_b2_aud_e,
20459
15
        { "AUDE (Mass Audit End)", "pfcp.nokia.hb_flags.aude",
20460
15
            FT_BOOLEAN, 8, NULL, 0x04,
20461
15
            NULL, HFILL }
20462
15
        },
20463
15
        { &hf_pfcp_nokia_l2tp_lcp_request,
20464
15
        { "LCP Request", "pfcp.nokia.l2tp.lcp_request",
20465
15
            FT_BYTES, BASE_NONE, NULL, 0,
20466
15
            NULL, HFILL }
20467
15
        },
20468
15
        { &hf_pfcp_nokia_l2tp_auth_type,
20469
15
        { "L2TP Auth Type", "pfcp.nokia.l2tp.auth_type",
20470
15
            FT_UINT8, BASE_HEX, VALS(nokia_l2tp_auth_type_vals), 0x0,
20471
15
            NULL, HFILL }
20472
15
        },
20473
15
        { &hf_pfcp_nokia_l2tp_auth_name,
20474
15
        { "L2TP Auth Name", "pfcp.nokia.l2tp.auth_name",
20475
15
            FT_STRING, BASE_NONE, NULL, 0,
20476
15
            NULL, HFILL }
20477
15
        },
20478
15
        { &hf_pfcp_nokia_l2tp_auth_id,
20479
15
        { "L2TP Auth Id", "pfcp.nokia.l2tp.auth_id",
20480
15
            FT_UINT8, BASE_HEX, NULL, 0,
20481
15
            NULL, HFILL }
20482
15
        },
20483
15
        { &hf_pfcp_nokia_l2tp_auth_challenge,
20484
15
        { "L2TP Auth Challenge", "pfcp.nokia.l2tp.auth_challenge",
20485
15
            FT_BYTES, BASE_NONE, NULL, 0,
20486
15
            NULL, HFILL }
20487
15
        },
20488
15
        { &hf_pfcp_nokia_l2tp_auth_response,
20489
15
        { "L2TP Auth Response", "pfcp.nokia.l2tp.auth_response",
20490
15
            FT_BYTES, BASE_NONE, NULL, 0,
20491
15
            NULL, HFILL }
20492
15
        },
20493
15
        { &hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv4_address,
20494
15
        { "L2TP IPv4 Endpoint", "pfcp.nokia.l2tp.tunnel_endpoint.ipv4_addr",
20495
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
20496
15
            NULL, HFILL }
20497
15
        },
20498
15
        { &hf_pfcp_nokia_l2tp_tunnel_endpoint_ipv6_address,
20499
15
        { "L2TP IPv6 Endpoint", "pfcp.nokia.l2tp.tunnel_endpoint.ipv6_addr",
20500
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
20501
15
            NULL, HFILL }
20502
15
        },
20503
15
        { &hf_pfcp_nokia_l2tp_client_auth_id,
20504
15
        { "L2TP Client Auth Id", "pfcp.nokia.l2tp.client_auth_id",
20505
15
            FT_STRING, BASE_NONE, NULL, 0,
20506
15
            NULL, HFILL }
20507
15
        },
20508
15
        { &hf_pfcp_nokia_l2tp_server_auth_id,
20509
15
        { "L2TP Server Auth Id", "pfcp.nokia.l2tp.server_auth_id",
20510
15
            FT_STRING, BASE_NONE, NULL, 0,
20511
15
            NULL, HFILL }
20512
15
        },
20513
15
        { &hf_pfcp_nokia_l2tp_password,
20514
15
        { "L2TP Password", "pfcp.nokia.l2tp.password",
20515
15
            FT_STRING, BASE_NONE, NULL, 0,
20516
15
            NULL, HFILL }
20517
15
        },
20518
15
        { &hf_pfcp_nokia_l2tp_assignment_id,
20519
15
        { "L2TP Assignment Id", "pfcp.nokia.l2tp.assignment_id",
20520
15
            FT_STRING, BASE_NONE, NULL, 0,
20521
15
            NULL, HFILL }
20522
15
        },
20523
15
        { &hf_pfcp_nokia_l2tp_private_group_id,
20524
15
        { "L2TP Private Group Id", "pfcp.nokia.l2tp.private_group_id",
20525
15
            FT_STRING, BASE_NONE, NULL, 0,
20526
15
            NULL, HFILL }
20527
15
        },
20528
15
        { &hf_pfcp_nokia_l2tp_tunnel_params_flags,
20529
15
        { "Flags", "pfcp.nokia.l2tp.tunnel_params.flags",
20530
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
20531
15
            NULL, HFILL }
20532
15
        },
20533
15
        { &hf_pfcp_nokia_l2tp_params_flags_b30_idle_timeout,
20534
15
        {"Idle Timeout", "pfcp.nokia.l2tp.tunnel_params.flags.idle_timeout",
20535
15
            FT_BOOLEAN, 32, NULL, 0x40000000,
20536
15
            NULL, HFILL }
20537
15
        },
20538
15
        { &hf_pfcp_nokia_l2tp_params_flags_b31_hello_interval,
20539
15
        {"Hello Interval", "pfcp.nokia.l2tp.tunnel_params.flags.hello_interval",
20540
15
            FT_BOOLEAN, 32, NULL, 0x80000000,
20541
15
            NULL, HFILL }
20542
15
        },
20543
15
        { &hf_pfcp_nokia_l2tp_params_flags_b29_session_limit,
20544
15
        {"Session Limit", "pfcp.nokia.l2tp.tunnel_params.flags.session_limit",
20545
15
            FT_BOOLEAN, 32, NULL, 0x20000000,
20546
15
            NULL, HFILL }
20547
15
        },
20548
15
        { &hf_pfcp_nokia_l2tp_params_flags_b28_preference,
20549
15
        {"Preference", "pfcp.nokia.l2tp.tunnel_params.flags.preference",
20550
15
            FT_BOOLEAN, 32, NULL, 0x10000000,
20551
15
            NULL, HFILL }
20552
15
        },
20553
15
        { &hf_pfcp_nokia_l2tp_params_flags_b27_df_bit,
20554
15
        {"DF Bit", "pfcp.nokia.l2tp.tunnel_params.flags.df_bit",
20555
15
            FT_BOOLEAN, 32, NULL, 0x08000000,
20556
15
            NULL, HFILL }
20557
15
        },
20558
15
        { &hf_pfcp_nokia_l2tp_params_flags_b26_challenge,
20559
15
        {"Challenge", "pfcp.nokia.l2tp.tunnel_params.flags.challenge",
20560
15
            FT_BOOLEAN, 32, NULL, 0x04000000,
20561
15
            NULL, HFILL }
20562
15
        },
20563
15
        { &hf_pfcp_nokia_l2tp_params_flags_b25_avp_hiding,
20564
15
        {"AVP Hiding", "pfcp.nokia.l2tp.tunnel_params.flags.avp_hiding",
20565
15
            FT_BOOLEAN, 32, NULL, 0x02000000,
20566
15
            NULL, HFILL }
20567
15
        },
20568
15
        { &hf_pfcp_nokia_l2tp_params_flags_b24_algorithm,
20569
15
        {"Algorithm", "pfcp.nokia.l2tp.tunnel_params.flags.algorithm",
20570
15
            FT_BOOLEAN, 32, NULL, 0x01000000,
20571
15
            NULL, HFILL }
20572
15
        },
20573
15
        { &hf_pfcp_nokia_l2tp_params_flags_b19_rx_window_size,
20574
15
        {"RX Window Size", "pfcp.nokia.l2tp.tunnel_params.flags.rx_window_size",
20575
15
            FT_BOOLEAN, 32, NULL, 0x00080000,
20576
15
            NULL, HFILL }
20577
15
        },
20578
15
        { &hf_pfcp_nokia_l2tp_params_flags_b18_max_retries_not_estab,
20579
15
        {"Max Retries Not Established", "pfcp.nokia.l2tp.tunnel_params.flags.max_retries_not_estab",
20580
15
            FT_BOOLEAN, 32, NULL, 0x00040000,
20581
15
            NULL, HFILL }
20582
15
        },
20583
15
        { &hf_pfcp_nokia_l2tp_params_flags_b17_max_retries_estab,
20584
15
        {"Max Retries Established", "pfcp.nokia.l2tp.tunnel_params.flags.max_retries_estab",
20585
15
            FT_BOOLEAN, 32, NULL, 0x00020000,
20586
15
            NULL, HFILL }
20587
15
        },
20588
15
        { &hf_pfcp_nokia_l2tp_params_flags_b16_destruct_timeout,
20589
15
        {"Destruct Timeout", "pfcp.nokia.l2tp.tunnel_params.flags.destruct_timeout",
20590
15
            FT_BOOLEAN, 32, NULL, 0x00010000,
20591
15
            NULL, HFILL }
20592
15
        },
20593
15
        { &hf_pfcp_nokia_l2tp_params_hello_interval,
20594
15
        {"Hello Interval", "pfcp.nokia.l2tp.tunnel_params.hello_interval",
20595
15
            FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS, VALS(nokia_l2tp_params_infinite), 0,
20596
15
            NULL, HFILL }
20597
15
        },
20598
15
        { &hf_pfcp_nokia_l2tp_params_idle_timeout,
20599
15
        {"Idle Timeout", "pfcp.nokia.l2tp.tunnel_params.idle_timeout",
20600
15
            FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS, VALS(nokia_l2tp_params_infinite), 0,
20601
15
            NULL, HFILL }
20602
15
        },
20603
15
        { &hf_pfcp_nokia_l2tp_params_session_limit,
20604
15
        {"Session Limit", "pfcp.nokia.l2tp.tunnel_params.session_limit",
20605
15
            FT_UINT24, BASE_DEC|BASE_SPECIAL_VALS, VALS(nokia_l2tp_params_infinite), 0,
20606
15
            NULL, HFILL }
20607
15
        },
20608
15
        { &hf_pfcp_nokia_l2tp_params_preference,
20609
15
        {"Preference", "pfcp.nokia.l2tp.tunnel_params.preference",
20610
15
            FT_UINT24, BASE_DEC, NULL, 0,
20611
15
            NULL, HFILL }
20612
15
        },
20613
15
        { &hf_pfcp_nokia_l2tp_params_df_bit,
20614
15
        {"DF Bit", "pfcp.nokia.l2tp.tunnel_params.df_bit",
20615
15
            FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_never_always), 0,
20616
15
            NULL, HFILL }
20617
15
        },
20618
15
        { &hf_pfcp_nokia_l2tp_params_challenge,
20619
15
        {"Challenge", "pfcp.nokia.l2tp.tunnel_params.challenge",
20620
15
            FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_never_always), 0,
20621
15
            NULL, HFILL }
20622
15
        },
20623
15
        { &hf_pfcp_nokia_l2tp_params_avp_hiding,
20624
15
        {"AVP Hiding", "pfcp.nokia.l2tp.tunnel_params.avp_hiding",
20625
15
            FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_avp_hiding_vals), 0,
20626
15
            NULL, HFILL }
20627
15
        },
20628
15
        { &hf_pfcp_nokia_l2tp_params_algorithm,
20629
15
        {"Algorithm", "pfcp.nokia.l2tp.tunnel_params.algorithm",
20630
15
            FT_UINT8, BASE_DEC, VALS(nokia_l2tp_params_algorithm_vals), 0,
20631
15
            NULL, HFILL }
20632
15
        },
20633
15
        { &hf_pfcp_nokia_l2tp_params_rx_window_size,
20634
15
        {"RX Window Size", "pfcp.nokia.l2tp.tunnel_params.rx_window_size",
20635
15
            FT_UINT24, BASE_DEC, NULL, 0,
20636
15
            NULL, HFILL }
20637
15
        },
20638
15
        { &hf_pfcp_nokia_l2tp_params_max_retries_not_estab,
20639
15
        {"Max Retries Not Estab", "pfcp.nokia.l2tp.tunnel_params.max_retries_not_estab",
20640
15
            FT_UINT24, BASE_DEC, NULL, 0,
20641
15
            NULL, HFILL }
20642
15
        },
20643
15
        { &hf_pfcp_nokia_l2tp_params_max_retries_estab,
20644
15
        {"Max Retries Estab", "pfcp.nokia.l2tp.tunnel_params.max_retries_estab",
20645
15
            FT_UINT24, BASE_DEC, NULL, 0,
20646
15
            NULL, HFILL }
20647
15
        },
20648
15
        { &hf_pfcp_nokia_l2tp_params_destruct_timeout,
20649
15
        {"Destruct Timeout", "pfcp.nokia.l2tp.tunnel_params.destruct_timeout",
20650
15
            FT_UINT24, BASE_DEC, NULL, 0,
20651
15
            NULL, HFILL }
20652
15
        },
20653
15
        { &hf_pfcp_nokia_l2tp_local_tunnel_id,
20654
15
        { "Local Tunnel Id", "pfcp.nokia.l2tp.local_tunnel_id",
20655
15
            FT_UINT16, BASE_DEC, NULL, 0,
20656
15
            NULL, HFILL }
20657
15
        },
20658
15
        { &hf_pfcp_nokia_l2tp_remote_tunnel_id,
20659
15
        { "Remote Tunnel Id", "pfcp.nokia.l2tp.remote_tunnel_id",
20660
15
            FT_UINT16, BASE_DEC, NULL, 0,
20661
15
            NULL, HFILL }
20662
15
        },
20663
15
        { &hf_pfcp_nokia_l2tp_local_session_id,
20664
15
        { "Local Session Id", "pfcp.nokia.l2tp.local_session_id",
20665
15
            FT_UINT16, BASE_DEC, NULL, 0,
20666
15
            NULL, HFILL }
20667
15
        },
20668
15
        { &hf_pfcp_nokia_l2tp_remote_session_id,
20669
15
        { "Remote Session Id", "pfcp.nokia.l2tp.remote_session_id",
20670
15
            FT_UINT16, BASE_DEC, NULL, 0,
20671
15
            NULL, HFILL }
20672
15
        },
20673
15
        { &hf_pfcp_nokia_l2tp_call_serial_num,
20674
15
        { "Call Serial Number", "pfcp.nokia.l2tp.call_serial_num",
20675
15
            FT_UINT32, BASE_DEC, NULL, 0,
20676
15
            NULL, HFILL }
20677
15
        },
20678
15
        { &hf_pfcp_nokia_snat_inside_ipv4_address,
20679
15
        { "SNAT Inside IP", "pfcp.nokia.snat_inside_ip",
20680
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
20681
15
            NULL, HFILL }
20682
15
        },
20683
15
        { &hf_pfcp_nokia_access_line_circuit_id,
20684
15
        { "Access Line Circuit Id", "pfcp.nokia.access_line.circuit_id",
20685
15
            FT_BYTES, BASE_NONE, NULL, 0,
20686
15
            NULL, HFILL }
20687
15
        },
20688
15
        { &hf_pfcp_nokia_access_line_remote_id,
20689
15
        { "Access Line Remote Id", "pfcp.nokia.access_line.remote_id",
20690
15
            FT_BYTES, BASE_NONE, NULL, 0,
20691
15
            NULL, HFILL }
20692
15
        },
20693
15
        { &hf_pfcp_nokia_access_line_params_flags,
20694
15
        { "Flags", "pfcp.nokia.access_line.params.flags",
20695
15
            FT_UINT32, BASE_HEX, NULL, 0x0,
20696
15
            NULL, HFILL }
20697
15
        },
20698
15
        { &hf_pfcp_nokia_access_line_params_flags_b24_act_up,
20699
15
        {"Act Up", "pfcp.nokia.access_line.params.flags.act_up",
20700
15
            FT_BOOLEAN, 32, NULL, 0x01000000,
20701
15
            NULL, HFILL }
20702
15
        },
20703
15
        { &hf_pfcp_nokia_access_line_params_flags_b25_act_down,
20704
15
        {"Act Down", "pfcp.nokia.access_line.params.flags.act_down",
20705
15
            FT_BOOLEAN, 32, NULL, 0x02000000,
20706
15
            NULL, HFILL }
20707
15
        },
20708
15
        { &hf_pfcp_nokia_access_line_params_flags_b26_min_up,
20709
15
        {"Min Up", "pfcp.nokia.access_line.params.flags.min_up",
20710
15
            FT_BOOLEAN, 32, NULL, 0x04000000,
20711
15
            NULL, HFILL }
20712
15
        },
20713
15
        { &hf_pfcp_nokia_access_line_params_flags_b27_min_down,
20714
15
        {"Min Down", "pfcp.nokia.access_line.params.flags.min_down",
20715
15
            FT_BOOLEAN, 32, NULL, 0x08000000,
20716
15
            NULL, HFILL }
20717
15
        },
20718
15
        { &hf_pfcp_nokia_access_line_params_flags_b28_att_up,
20719
15
        {"Att Up", "pfcp.nokia.access_line.params.flags.att_up",
20720
15
            FT_BOOLEAN, 32, NULL, 0x10000000,
20721
15
            NULL, HFILL }
20722
15
        },
20723
15
        { &hf_pfcp_nokia_access_line_params_flags_b29_att_down,
20724
15
        {"Att Down", "pfcp.nokia.access_line.params.flags.att_down",
20725
15
            FT_BOOLEAN, 32, NULL, 0x20000000,
20726
15
            NULL, HFILL }
20727
15
        },
20728
15
        { &hf_pfcp_nokia_access_line_params_flags_b30_max_up,
20729
15
        {"Max Up", "pfcp.nokia.access_line.params.flags.max_up",
20730
15
            FT_BOOLEAN, 32, NULL, 0x40000000,
20731
15
            NULL, HFILL }
20732
15
        },
20733
15
        { &hf_pfcp_nokia_access_line_params_flags_b31_max_down,
20734
15
        {"Max Down", "pfcp.nokia.access_line.params.flags.max_down",
20735
15
            FT_BOOLEAN, 32, NULL, 0x80000000,
20736
15
            NULL, HFILL }
20737
15
        },
20738
15
        { &hf_pfcp_nokia_access_line_params_flags_b16_min_up_lp,
20739
15
        {"Min Up Lp", "pfcp.nokia.access_line.params.flags.min_up_lp",
20740
15
            FT_BOOLEAN, 32, NULL, 0x00010000,
20741
15
            NULL, HFILL }
20742
15
        },
20743
15
        { &hf_pfcp_nokia_access_line_params_flags_b17_min_down_lp,
20744
15
        {"Min Down Lp", "pfcp.nokia.access_line.params.flags.min_down_lp",
20745
15
            FT_BOOLEAN, 32, NULL, 0x00020000,
20746
15
            NULL, HFILL }
20747
15
        },
20748
15
        { &hf_pfcp_nokia_access_line_params_flags_b18_max_inter_delay_up,
20749
15
        {"Max Inter Delay Up", "pfcp.nokia.access_line.params.flags.max_inter_delay_up",
20750
15
            FT_BOOLEAN, 32, NULL, 0x00040000,
20751
15
            NULL, HFILL }
20752
15
        },
20753
15
        { &hf_pfcp_nokia_access_line_params_flags_b19_act_inter_delay_up,
20754
15
        {"Act Inter Delay Up", "pfcp.nokia.access_line.params.flags.act_inter_delay_up",
20755
15
            FT_BOOLEAN, 32, NULL, 0x00080000,
20756
15
            NULL, HFILL }
20757
15
        },
20758
15
        { &hf_pfcp_nokia_access_line_params_flags_b20_max_inter_delay_down,
20759
15
        {"Max Inter Delay Down", "pfcp.nokia.access_line.params.flags.max_inter_delay_down",
20760
15
            FT_BOOLEAN, 32, NULL, 0x00100000,
20761
15
            NULL, HFILL }
20762
15
        },
20763
15
        { &hf_pfcp_nokia_access_line_params_flags_b21_act_inter_delay_down,
20764
15
        {"Act Inter Delay Down", "pfcp.nokia.access_line.params.flags.act_inter_delay_down",
20765
15
            FT_BOOLEAN, 32, NULL, 0x00200000,
20766
15
            NULL, HFILL }
20767
15
        },
20768
15
        { &hf_pfcp_nokia_access_line_params_flags_b22_access_loop_encap,
20769
15
        {"Access Loop Encap", "pfcp.nokia.access_line.params.flags.access_loop_encap",
20770
15
            FT_BOOLEAN, 32, NULL, 0x00400000,
20771
15
            NULL, HFILL }
20772
15
        },
20773
15
        { &hf_pfcp_nokia_access_line_params_flags_b23_iw_session,
20774
15
        {"IW Session", "pfcp.nokia.access_line.params.flags.iw_session",
20775
15
            FT_BOOLEAN, 32, NULL, 0x00800000,
20776
15
            NULL, HFILL }
20777
15
        },
20778
15
        { &hf_pfcp_nokia_access_line_params_act_up,
20779
15
        { "Act Up", "pfcp.nokia.access_line.params.act_up",
20780
15
            FT_UINT32, BASE_DEC, NULL, 0,
20781
15
            NULL, HFILL }
20782
15
        },
20783
15
        { &hf_pfcp_nokia_access_line_params_act_down,
20784
15
        { "Act Down", "pfcp.nokia.access_line.params.act_down",
20785
15
            FT_UINT32, BASE_DEC, NULL, 0,
20786
15
            NULL, HFILL }
20787
15
        },
20788
15
        { &hf_pfcp_nokia_access_line_params_min_up,
20789
15
        { "Min Up", "pfcp.nokia.access_line.params.min_up",
20790
15
            FT_UINT32, BASE_DEC, NULL, 0,
20791
15
            NULL, HFILL }
20792
15
        },
20793
15
        { &hf_pfcp_nokia_access_line_params_min_down,
20794
15
        { "Min Down", "pfcp.nokia.access_line.params.min_down",
20795
15
            FT_UINT32, BASE_DEC, NULL, 0,
20796
15
            NULL, HFILL }
20797
15
        },
20798
15
        { &hf_pfcp_nokia_access_line_params_att_up,
20799
15
        { "Att Up", "pfcp.nokia.access_line.params.att_up",
20800
15
            FT_UINT32, BASE_DEC, NULL, 0,
20801
15
            NULL, HFILL }
20802
15
        },
20803
15
        { &hf_pfcp_nokia_access_line_params_att_down,
20804
15
        { "Act Att Down", "pfcp.nokia.access_line.params.att_down",
20805
15
            FT_UINT32, BASE_DEC, NULL, 0,
20806
15
            NULL, HFILL }
20807
15
        },
20808
15
        { &hf_pfcp_nokia_access_line_params_max_up,
20809
15
        { "Max Up", "pfcp.nokia.access_line.params.max_up",
20810
15
            FT_UINT32, BASE_DEC, NULL, 0,
20811
15
            NULL, HFILL }
20812
15
        },
20813
15
        { &hf_pfcp_nokia_access_line_params_max_down,
20814
15
        { "Max Down", "pfcp.nokia.access_line.params.max_down",
20815
15
            FT_UINT32, BASE_DEC, NULL, 0,
20816
15
            NULL, HFILL }
20817
15
        },
20818
15
        { &hf_pfcp_nokia_access_line_params_min_up_lp,
20819
15
        { "Min Up Lp", "pfcp.nokia.access_line.params.min_up_lp",
20820
15
            FT_UINT32, BASE_DEC, NULL, 0,
20821
15
            NULL, HFILL }
20822
15
        },
20823
15
        { &hf_pfcp_nokia_access_line_params_min_down_lp,
20824
15
        { "Min Down Lp", "pfcp.nokia.access_line.params.min_down_lp",
20825
15
            FT_UINT32, BASE_DEC, NULL, 0,
20826
15
            NULL, HFILL }
20827
15
        },
20828
15
        { &hf_pfcp_nokia_access_line_params_max_inter_delay_up,
20829
15
        { "Max Inter Delay Up", "pfcp.nokia.access_line.params.max_inter_delay_up",
20830
15
            FT_UINT32, BASE_DEC, NULL, 0,
20831
15
            NULL, HFILL }
20832
15
        },
20833
15
        { &hf_pfcp_nokia_access_line_params_act_inter_delay_up,
20834
15
        { "Act Inter Delay Up", "pfcp.nokia.access_line.params.act_inter_delay_up",
20835
15
            FT_UINT32, BASE_DEC, NULL, 0,
20836
15
            NULL, HFILL }
20837
15
        },
20838
15
        { &hf_pfcp_nokia_access_line_params_max_inter_delay_down,
20839
15
        { "Max Inter Delay Down", "pfcp.nokia.access_line.params.max_inter_delay_down",
20840
15
            FT_UINT32, BASE_DEC, NULL, 0,
20841
15
            NULL, HFILL }
20842
15
        },
20843
15
        { &hf_pfcp_nokia_access_line_params_act_inter_delay_down,
20844
15
        { "Act Inter Delay Down", "pfcp.nokia.access_line.params.act_inter_delay_down",
20845
15
            FT_UINT32, BASE_DEC, NULL, 0,
20846
15
            NULL, HFILL }
20847
15
        },
20848
15
        { &hf_pfcp_nokia_access_line_params_access_loop_encap,
20849
15
        { "Access Loop Encap", "pfcp.nokia.access_line.params.access_loop_encap",
20850
15
            FT_UINT24, BASE_DEC, NULL, 0,
20851
15
            NULL, HFILL }
20852
15
        },
20853
15
        { &hf_pfcp_nokia_acct_session_id,
20854
15
        { "Accounting Session Id", "pfcp.nokia.acct_session_id",
20855
15
            FT_STRING, BASE_NONE, NULL, 0,
20856
15
            NULL, HFILL }
20857
15
        },
20858
15
        { &hf_pfcp_nokia_fsg_template_name,
20859
15
        { "FSG Template Name", "pfcp.nokia.fsg_template_name",
20860
15
            FT_STRING, BASE_NONE, NULL, 0,
20861
15
            NULL, HFILL }
20862
15
        },
20863
15
        { &hf_pfcp_nokia_up_profile,
20864
15
        { "UP Profiles", "pfcp.nokia.up_profiles",
20865
15
            FT_STRING, BASE_NONE, NULL, 0,
20866
15
        NULL, HFILL }
20867
15
        },
20868
15
        { &hf_pfcp_nokia_default_qos_id,
20869
15
        { "Default Qos Id", "pfcp.nokia.default_qos_id",
20870
15
            FT_UINT8, BASE_DEC, NULL, 0,
20871
15
            NULL, HFILL }
20872
15
        },
20873
15
        { &hf_pfcp_nokia_serving_node_id_flags,
20874
15
        { "Flags", "pfcp.nokia.serving_node_id.flags",
20875
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
20876
15
            NULL, HFILL }
20877
15
        },
20878
15
        { &hf_pfcp_nokia_serving_node_id_flg_b2_uuid,
20879
15
        { "UUID", "pfcp.nokia.serving_node_id.flags.uuid",
20880
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
20881
15
            NULL, HFILL }
20882
15
        },
20883
15
        { &hf_pfcp_nokia_serving_node_id_flg_b1_v6,
20884
15
        { "V6 (IPv6)", "pfcp.nokia.serving_node_id.flags.v6",
20885
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
20886
15
            NULL, HFILL }
20887
15
        },
20888
15
        { &hf_pfcp_nokia_serving_node_id_flg_b0_v4,
20889
15
        { "V4 (IPv4)", "pfcp.nokia.serving_node_id.flags.v4",
20890
15
            FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
20891
15
            NULL, HFILL }
20892
15
        },
20893
15
        { &hf_pfcp_nokia_serving_node_id_ipv4,
20894
15
        { "IPv4 address", "pfcp.nokia.serving_node_id.ipv4_addr",
20895
15
            FT_IPv4, BASE_NONE, NULL, 0x0,
20896
15
            NULL, HFILL }
20897
15
        },
20898
15
        { &hf_pfcp_nokia_serving_node_id_ipv6,
20899
15
        { "IPv6 address", "pfcp.nokia.serving_node_id.ipv6_addr",
20900
15
            FT_IPv6, BASE_NONE, NULL, 0x0,
20901
15
            NULL, HFILL }
20902
15
        },
20903
15
        { &hf_pfcp_nokia_serving_node_id_uuid,
20904
15
        { "UUID", "pfcp.nokia.serving_node_id.uuid",
20905
15
            FT_GUID, BASE_NONE, NULL, 0x0,
20906
15
            NULL, HFILL }
20907
15
        },
20908
15
        { &hf_pfcp_nokia_pcc_rule_name,
20909
15
        { "PCC Rule Name", "pfcp.nokia.pcc_rule_name",
20910
15
            FT_STRING, BASE_NONE, NULL, 0,
20911
15
            NULL, HFILL }
20912
15
        },
20913
15
        { &hf_pfcp_nokia_calltrace_profile,
20914
15
        { "Calltrace Profile", "pfcp.nokia.calltrace_profile",
20915
15
            FT_STRING, BASE_NONE, NULL, 0,
20916
15
            NULL, HFILL }
20917
15
        },
20918
15
        { &hf_pfcp_nokia_custom_charging_group,
20919
15
        { "Custom Charging Group", "pfcp.nokia.custom_charging_group",
20920
15
            FT_STRING, BASE_NONE, NULL, 0,
20921
15
            NULL, HFILL }
20922
15
        },
20923
15
        { &hf_pfcp_nokia_lpt_present_b0,
20924
15
        { "Logical Port Present", "pfcp.nokia.lpt_present.b0",
20925
15
            FT_BOOLEAN, 8, NULL, 0x01,
20926
15
            NULL, HFILL }
20927
15
        },
20928
15
        { &hf_pfcp_nokia_content_filtering_policy_id,
20929
15
          { "Content Filtering Policy Id", "pfcp.nokia.content_filtering_policy_id",
20930
15
            FT_UINT32, BASE_DEC, NULL, 0,
20931
15
        NULL, HFILL }
20932
15
        },
20933
15
        { &hf_pfcp_nokia_dropped_volume_measurement,
20934
15
        { "Flags", "pfcp.nokia.dropped_volume_measurement",
20935
15
            FT_UINT8, BASE_HEX, NULL, 0x0,
20936
15
            NULL, HFILL }
20937
15
        },
20938
15
        { &hf_pfcp_nokia_dropped_volume_measurement_b0_tovol,
20939
15
        { "TOVOL", "pfcp.nokia.dropped_volume_measurement_flags.tovol",
20940
15
            FT_BOOLEAN, 8, NULL, 0x01,
20941
15
            NULL, HFILL }
20942
15
        },
20943
15
        { &hf_pfcp_nokia_dropped_volume_measurement_b1_ulvol,
20944
15
        { "ULVOL", "pfcp.nokia.dropped_volume_measurement_flags.ulvol",
20945
15
            FT_BOOLEAN, 8, NULL, 0x02,
20946
15
            NULL, HFILL }
20947
15
        },
20948
15
        { &hf_pfcp_nokia_dropped_volume_measurement_b2_dlvol,
20949
15
        { "DLVOL", "pfcp.nokia.dropped_volume_measurement_flags.dlvol",
20950
15
            FT_BOOLEAN, 8, NULL, 0x04,
20951
15
            NULL, HFILL }
20952
15
        },
20953
15
        { &hf_pfcp_nokia_dropped_volume_measurement_b3_tonop,
20954
15
        { "TONOP", "pfcp.nokia.dropped_volume_measurement_flags.tonop",
20955
15
            FT_BOOLEAN, 8, NULL, 0x08,
20956
15
            NULL, HFILL }
20957
15
        },
20958
15
        { &hf_pfcp_nokia_dropped_volume_measurement_b4_ulnop,
20959
15
        { "ULNOP", "pfcp.nokia.dropped_volume_measurement_flags.ulnop",
20960
15
            FT_BOOLEAN, 8, NULL, 0x10,
20961
15
            NULL, HFILL }
20962
15
        },
20963
15
        { &hf_pfcp_nokia_dropped_volume_measurement_b5_dlnop,
20964
15
        { "DLNOP", "pfcp.nokia.dropped_volume_measurement_flags.dlnops",
20965
15
            FT_BOOLEAN, 8, NULL, 0x20,
20966
15
            NULL, HFILL }
20967
15
        },
20968
15
        { &hf_pfcp_nokia_drop_vol_meas_tovol,
20969
15
        { "Total Volume", "pfcp.nokia.dropped_volume_measurement.tovol",
20970
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
20971
15
            NULL, HFILL }
20972
15
        },
20973
15
        { &hf_pfcp_nokia_drop_vol_meas_ulvol,
20974
15
        { "Uplink Volume", "pfcp.nokia.dropped_volume_measurement.ulvol",
20975
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
20976
15
            NULL, HFILL }
20977
15
        },
20978
15
        { &hf_pfcp_nokia_drop_vol_meas_dlvol,
20979
15
        { "Downlink Volume", "pfcp.nokia.dropped_volume_measurement.dlvol",
20980
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
20981
15
            NULL, HFILL }
20982
15
        },
20983
15
        { &hf_pfcp_nokia_drop_vol_meas_tonop,
20984
15
        { "Total Number of Packets", "pfcp.nokia.dropped_volume_measurement.tonop",
20985
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
20986
15
            NULL, HFILL }
20987
15
        },
20988
15
        { &hf_pfcp_nokia_drop_vol_meas_ulnop,
20989
15
        { "Uplink Number of Packets", "pfcp.nokia.dropped_volume_measurement.ulnop",
20990
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
20991
15
            NULL, HFILL }
20992
15
        },
20993
15
        { &hf_pfcp_nokia_drop_vol_meas_dlnop,
20994
15
        { "Downlink Number of Packets", "pfcp.nokia.dropped_volume_measurement.dlnop",
20995
15
            FT_UINT64, BASE_DEC, NULL, 0x0,
20996
15
            NULL, HFILL }
20997
15
        },
20998
15
        { &hf_pfcp_nokia_health_report_interval,
20999
15
        { "Health Report Interval", "pfcp.nokia.health_report_interval",
21000
15
            FT_UINT32, BASE_DEC, NULL, 0,
21001
15
            NULL, HFILL }
21002
15
        },
21003
15
        { &hf_pfcp_nokia_ipv6_lla,
21004
15
        { "IPv6 LLA", "pfcp.nokia.ipv6_lla",
21005
15
            FT_IPv6, BASE_NONE, NULL, 0,
21006
15
            "IPv6 link-local address", HFILL }
21007
15
        },
21008
15
        { &hf_pfcp_nokia_periodic_shcv_duration,
21009
15
        { "Duration", "pfcp.nokia.periodic_shcv_duration",
21010
15
            FT_UINT24, BASE_DEC, NULL, 0,
21011
15
            NULL, HFILL }
21012
15
        },
21013
15
        { &hf_pfcp_nokia_periodic_shcv_retry_count,
21014
15
        { "Retry Count", "pfcp.nokia.periodic_shcv_retry_count",
21015
15
            FT_UINT8, BASE_DEC, NULL, 0,
21016
15
            NULL, HFILL }
21017
15
        },
21018
15
        { &hf_pfcp_nokia_periodic_shcv_timeout,
21019
15
        { "Timeout", "pfcp.nokia.periodic_shcv_timeout",
21020
15
            FT_UINT8, BASE_DEC, NULL, 0,
21021
15
            NULL, HFILL }
21022
15
        },
21023
15
    };
21024
21025
    /* Setup protocol subtree array */
21026
15
    int *ett[] = {
21027
15
        &ett_pfcp,
21028
15
        &ett_pfcp_flags,
21029
15
        &ett_pfcp_ie,
21030
15
        &ett_pfcp_unknown_enterprise_ie,
21031
15
        &ett_pfcp_grouped_ie,
21032
15
        &ett_pfcp_reporting_triggers,
21033
15
        &ett_pfcp_up_function_features,
21034
15
        &ett_pfcp_report_trigger,
21035
15
        &ett_pfcp_flow_desc,
21036
15
        &ett_pfcp_tos,
21037
15
        &ett_pfcp_spi,
21038
15
        &ett_pfcp_flow_label,
21039
15
        &ett_pfcp_sdf_filter_id,
21040
15
        &ett_pfcp_adf,
21041
15
        &ett_pfcp_aurl,
21042
15
        &ett_pfcp_adnp,
21043
        /* Travelping */
21044
15
        &ett_pfcp_enterprise_travelping_packet_measurement,
21045
15
        &ett_pfcp_enterprise_travelping_error_report,
21046
15
        &ett_pfcp_enterprise_travelping_created_nat_binding,
21047
15
        &ett_pfcp_enterprise_travelping_trace_info,
21048
        /* BBF */
21049
15
        &ett_pfcp_bbf_ppp_protocol_flags,
21050
15
        &ett_pfcp_bbf_l2tp_endp_flags,
21051
15
        &ett_pfcp_bbf_l2tp_type_flags,
21052
15
        &ett_pfcp_bbf_ppp_lcp_connectivity,
21053
15
        &ett_pfcp_bbf_l2tp_tunnel,
21054
15
        &ett_pfcp_bbf_nat_port_forward_list,
21055
15
        &ett_pfcp_bbf_sgrp_flags,
21056
15
        &ett_pfcp_bbf_vendor_specific_node_report_type,
21057
        /* Juniper Networks */
21058
15
        &ett_pfcp_jnpr,
21059
       /* Nokia */
21060
15
        &ett_pfcp_nokia_detailed_stats_key,
21061
15
        &ett_pfcp_nokia_detailed_stats_bitmap,
21062
15
        &ett_pfcp_nokia_measurement_info,
21063
15
        &ett_pfcp_nokia_pfcpsmreq_flags,
21064
15
        &ett_pfcp_nokia_pfcphb_flags,
21065
15
        &ett_pfcp_nokia_l2tp_tunnel_params_flags,
21066
15
        &ett_pfcp_nokia_access_line_params_flags,
21067
15
        &ett_pfcp_nokia_serving_node_id_flags,
21068
15
        &ett_pfcp_nokia_dropped_volume_measurement,
21069
15
    };
21070
21071
    // Each IE gets its own subtree
21072
15
    int* ie_ett[NUM_PFCP_IES - 1];
21073
6.07k
    for (unsigned i = 0; i < NUM_PFCP_IES - 1; i++) {
21074
6.06k
        ie_ett[i] = &ett_pfcp_elem[i];
21075
6.06k
    }
21076
21077
15
    static ei_register_info ei[] = {
21078
15
        { &ei_pfcp_ie_reserved,{ "pfcp.ie_id_reserved", PI_PROTOCOL, PI_ERROR, "Reserved IE value used", EXPFILL } },
21079
15
        { &ei_pfcp_ie_data_not_decoded,{ "pfcp.ie_data_not_decoded", PI_UNDECODED, PI_NOTE, "IE data not decoded by WS yet", EXPFILL } },
21080
15
        { &ei_pfcp_ie_not_decoded_null,{ "pfcp.ie_not_decoded_null", PI_UNDECODED, PI_NOTE, "IE not decoded yet", EXPFILL } },
21081
15
        { &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 } },
21082
15
        { &ei_pfcp_ie_encoding_error,{ "pfcp.ie_encoding_error", PI_PROTOCOL, PI_ERROR, "IE wrongly encoded", EXPFILL } },
21083
15
    };
21084
21085
15
    module_t *module_pfcp;
21086
15
    expert_module_t* expert_pfcp;
21087
21088
15
    proto_pfcp = proto_register_protocol("Packet Forwarding Control Protocol", "PFCP", "pfcp");
21089
15
    pfcp_handle = register_dissector("pfcp", dissect_pfcp, proto_pfcp);
21090
15
    module_pfcp = prefs_register_protocol(proto_pfcp, NULL);
21091
21092
15
    proto_register_field_array(proto_pfcp, hf_pfcp, array_length(hf_pfcp));
21093
15
    proto_register_subtree_array(ett, array_length(ett));
21094
15
    proto_register_subtree_array(ie_ett, array_length(ie_ett));
21095
15
    expert_pfcp = expert_register_protocol(proto_pfcp);
21096
15
    expert_register_field_array(expert_pfcp, ei, array_length(ei));
21097
21098
    /* Register dissector table for enterprise IE dissectors */
21099
15
    pfcp_enterprise_ies_dissector_table = register_dissector_table("pfcp.enterprise_ies", "PFCP Enterprise IEs",
21100
15
        proto_pfcp, FT_UINT32, BASE_DEC);
21101
21102
15
    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));
21103
15
    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));
21104
15
    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));
21105
15
    pfcp_register_generic_ie_dissector(VENDOR_JUNIPER, "pfcp_jnpr_ies", "pfcp.ie.jnpr", "Juniper Networks IE Type", pfcp_jnpr_ies, G_N_ELEMENTS(pfcp_jnpr_ies));
21106
21107
15
    prefs_register_bool_preference(module_pfcp, "track_pfcp_session", "Track PFCP session", "Track PFCP session", &g_pfcp_session);
21108
21109
15
    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);
21110
21111
15
    register_init_routine(pfcp_init);
21112
21113
15
    pfcp_tap = register_tap("pfcp");
21114
21115
15
    register_srt_table(proto_pfcp, NULL, 1, pfcp_stat_packet, pfcp_stat_init, NULL);
21116
15
}
21117
21118
void
21119
proto_reg_handoff_pfcp(void)
21120
15
{
21121
15
    dissector_add_uint_with_preference("udp.port", UDP_PORT_PFCP, pfcp_handle);
21122
15
    dissector_add_string("media_type", "application/vnd.3gpp.pfcp", pfcp_handle);
21123
21124
15
    gtpv2_uli_handle = find_dissector("gtpv2.uli");
21125
15
}
21126
21127
/*
21128
* Editor modelines  -  https://www.wireshark.org/tools/modelines.html
21129
*
21130
* Local variables:
21131
* c-basic-offset: 4
21132
* tab-width: 8
21133
* indent-tabs-mode: nil
21134
* End:
21135
*
21136
* vi: set shiftwidth=4 tabstop=8 expandtab:
21137
* :indentSize=4:tabSize=8:noTabs=true:
21138
*/