aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorJoakim Karlsson <oakimk@gmail.com>2021-10-12 15:31:01 +0200
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-10-13 06:02:34 +0000
commit4887894a15f5943c03db9f961d87af44c663498c (patch)
tree9ff71b175f78ce697eda91a6862f48aa7fae7864 /epan/dissectors
parenta3625ec9f6132102e32aeba4ec18e43f7c16c071 (diff)
pfcp: Update to 3GPP TS 29.244 V17.2.0
Diffstat (limited to 'epan/dissectors')
-rw-r--r--epan/dissectors/packet-pfcp.c896
1 files changed, 859 insertions, 37 deletions
diff --git a/epan/dissectors/packet-pfcp.c b/epan/dissectors/packet-pfcp.c
index 0fc8d4e3db..6027726ad0 100644
--- a/epan/dissectors/packet-pfcp.c
+++ b/epan/dissectors/packet-pfcp.c
@@ -153,6 +153,12 @@ static int hf_pfcp_qer_id = -1;
static int hf_pfcp_predef_rules_name = -1;
+
+static int hf_pfcp_apply_action_flags_o6_b4_mbsu = -1;
+static int hf_pfcp_apply_action_flags_o6_b3_fssm = -1;
+static int hf_pfcp_apply_action_flags_o6_b2_ddpn = -1;
+static int hf_pfcp_apply_action_flags_o6_b1_bdpn = -1;
+static int hf_pfcp_apply_action_flags_o6_b0_edrt = -1;
static int hf_pfcp_apply_action_flags_o5_b7_dfrt = -1;
static int hf_pfcp_apply_action_flags_o5_b6_ipmd = -1;
static int hf_pfcp_apply_action_flags_o5_b5_ipma = -1;
@@ -161,9 +167,6 @@ static int hf_pfcp_apply_action_flags_o5_b3_nocp = -1;
static int hf_pfcp_apply_action_flags_o5_b2_buff = -1;
static int hf_pfcp_apply_action_flags_o5_b1_forw = -1;
static int hf_pfcp_apply_action_flags_o5_b0_drop = -1;
-static int hf_pfcp_apply_action_flags_o6_b2_ddpn = -1;
-static int hf_pfcp_apply_action_flags_o6_b1_bdpn = -1;
-static int hf_pfcp_apply_action_flags_o6_b0_edrt = -1;
static int hf_pfcp_bar_id = -1;
static int hf_pfcp_fq_csid_node_id_type = -1;
@@ -274,6 +277,10 @@ static int hf_pfcp_report_type_b0_dldr = -1;
static int hf_pfcp_offending_ie = -1;
static int hf_pfcp_offending_ie_value = -1;
+
+static int hf_pfcp_up_function_features_o11_b0_drqos = -1;
+static int hf_pfcp_up_function_features_o10_b7_dnsts = -1;
+static int hf_pfcp_up_function_features_o10_b6_iprep = -1;
static int hf_pfcp_up_function_features_o10_b5_resps = -1;
static int hf_pfcp_up_function_features_o10_b4_upber = -1;
static int hf_pfcp_up_function_features_o10_b3_l2tp = -1;
@@ -547,6 +554,9 @@ static int hf_pfcp_ethertype_filter_properties_flags_b0_bide = -1;
static int hf_pfcp_suggested_buffering_packets_count_packet_count = -1;
static int hf_pfcp_user_id_flags = -1;
+static int hf_pfcp_user_id_flags_b6_peif = -1;
+static int hf_pfcp_user_id_flags_b5_gpsif = -1;
+static int hf_pfcp_user_id_flags_b4_supif = -1;
static int hf_pfcp_user_id_flags_b3_naif = -1;
static int hf_pfcp_user_id_flags_b2_msisdnf = -1;
static int hf_pfcp_user_id_flags_b1_imeif = -1;
@@ -557,6 +567,12 @@ static int hf_pfcp_user_id_imei = -1;
static int hf_pfcp_user_id_length_of_msisdn = -1;
static int hf_pfcp_user_id_length_of_nai = -1;
static int hf_pfcp_user_id_nai = -1;
+static int hf_pfcp_user_id_length_of_supi = -1;
+static int hf_pfcp_user_id_supi = -1;
+static int hf_pfcp_user_id_length_of_gpsi = -1;
+static int hf_pfcp_user_id_gpsi = -1;
+static int hf_pfcp_user_id_length_of_pei = -1;
+static int hf_pfcp_user_id_pei = -1;
static int hf_pfcp_ethernet_pdu_session_information_flags = -1;
static int hf_pfcp_ethernet_pdu_session_information_flags_b0_ethi = -1;
@@ -684,7 +700,7 @@ static int hf_pfcp_nw_tt_port_number = -1;
static int hf_pfcp_5gs_user_plane_node_flags = -1;
static int hf_pfcp_5gs_user_plane_node_flags_b0_bid = -1;
-static int hf_pfcp_5gs_user_plane_node_bridge_id = -1;
+static int hf_pfcp_5gs_user_plane_node_value = -1;
static int hf_pfcp_port_management_information = -1;
@@ -882,6 +898,58 @@ static int hf_pfcp_cp_ip_address_flags = -1;
static int hf_pfcp_cp_ip_address_ipv4 = -1;
static int hf_pfcp_cp_ip_address_ipv6 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_flags = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_destination_port = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_source_ipv4 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_source_ipv6 = -1;
+static int hf_pfcp_ip_address_and_port_number_replacement_source_port = -1;
+
+static int hf_pfcp_dns_query_filter_pattern_len = -1;
+static int hf_pfcp_dns_query_filter_pattern = -1;
+
+static int hf_pfcp_event_notification_uri = -1;
+
+static int hf_pfcp_notification_correlation_id = -1;
+
+static int hf_pfcp_reporting_flags_o5_b0_dupl = -1;
+
+static int hf_pfcp_mbs_session_identifier_flags = -1;
+static int hf_pfcp_mbs_session_identifier_flag_b0_tmgi = -1;
+static int hf_pfcp_mbs_session_identifier_flag_b1_ssmi = -1;
+static int hf_pfcp_mbs_session_identifier_tmgi = -1;
+static int hf_pfcp_mbs_session_identifier_ssmi = -1;
+
+static int hf_pfcp_multicast_transport_information_endpoint_identifier = -1;
+static int hf_pfcp_multicast_transport_information_distribution_address_type = -1;
+static int hf_pfcp_multicast_transport_information_distribution_address_length = -1;
+static int hf_pfcp_multicast_transport_information_distribution_address_ipv4 = -1;
+static int hf_pfcp_multicast_transport_information_distribution_address_ipv6 = -1;
+static int hf_pfcp_multicast_transport_information_source_address_type = -1;
+static int hf_pfcp_multicast_transport_information_source_address_length = -1;
+static int hf_pfcp_multicast_transport_information_source_address_ipv4 = -1;
+static int hf_pfcp_multicast_transport_information_source_address_ipv6 = -1;
+
+static int hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm = -1;
+static int hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm = -1;
+
+static int hf_pfcp_local_ingress_tunnel_flags = -1;
+static int hf_pfcp_local_ingress_tunnel_flags_b2_ch = -1;
+static int hf_pfcp_local_ingress_tunnel_flags_b1_v6 = -1;
+static int hf_pfcp_local_ingress_tunnel_flags_b0_v4 = -1;
+static int hf_pfcp_local_ingress_tunnel_udp_port = -1;
+static int hf_pfcp_local_ingress_tunnel_ipv4 = -1;
+static int hf_pfcp_local_ingress_tunnel_ipv6 = -1;
+
+static int hf_pfcp_mbs_unicast_parameters_id = -1;
+
/* Enterprise IEs */
/* BBF */
static int hf_pfcp_bbf_up_function_features_o7_b4_lcp_keepalive_offload = -1;
@@ -1022,6 +1090,9 @@ static int ett_pfcp_number_of_ue_ip_addresses_flags = -1;
static int ett_pfcp_l2tp_user_authentication_flags = -1;
static int ett_pfcp_thresholds = -1;
static int ett_pfcp_cp_ip_address_flags = -1;
+static int ett_pfcp_ip_address_and_port_number_replacement_flags = -1;
+static int ett_pfcp_mbs_session_identifier_flags = -1;
+static int ett_local_ingress_tunnel_flags = -1;
static int ett_pfcp_enterprise_travelping_error_report = -1;
@@ -1178,6 +1249,12 @@ static void dissect_pfcp_l2tp_tunnel_information(tvbuff_t *tvb, packet_info *pin
static void dissect_pfcp_l2tp_session_information_within_pfcp_session_establishment_request(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
static void dissect_pfcp_l2tp_session_information_within_pfcp_session_establishment_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
static void dissect_pfcp_pfcp_session_change_info(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
+static void dissect_pfcp_direct_reporting_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
+static void dissect_pfcp_mbs_session_n4mb_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
+static void dissect_pfcp_mbs_multicast_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
+static void dissect_pfcp_add_mbs_unicast_parameters_ie_in_create_far(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
+static void dissect_pfcp_mbs_session_n4mb_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
+static void dissect_pfcp_remove_mbs_unicast_parameters_ie_in_update_far(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
static const true_false_string pfcp_id_predef_dynamic_tfs = {
"Predefined by UP",
@@ -1347,6 +1424,12 @@ static value_string_ext pfcp_message_type_ext = VALUE_STRING_EXT_INIT(pfcp_messa
#define PFCP_IE_L2TP_SESSION_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_REQUEST 277
#define PFCP_IE_L2TP_SESSION_INFORMATION_WITHIN_PFCP_SESSION_ESTABLISHMENT_RESPONSE 279
#define PFCP_IE_PFCP_SESSION_CHANGE_INFO 290
+#define PFCP_IE_DIRECT_REPORTING_INFORMATION 295
+#define PFCP_IE_MBS_SESSION_N4MB_CONTROL_INFORMATION 300
+#define PFCP_IE_MBS_MULTICAST_PARAMETERS 301
+#define PFCP_IE_ADD_MBS_UNICAST_PARAMETERS_IE_IN_CREATE_FAR 302
+#define PFCP_IE_MBS_SESSION_N4MB_INFORMATION 300
+#define PFCP_IE_REMOVE_MBS_UNICAST_PARAMETERS_IE_IN_UPDATE_FAR 304
static const value_string pfcp_ie_type[] = {
@@ -1617,8 +1700,8 @@ static const value_string pfcp_ie_type[] = {
{ 269, "Validity Timer"}, /* Extendable / Clause 8.2.184 */
{ 270, "Redundant Transmission Forwarding Parameters"}, /* Extendable / Table 7.5.2.3-4 */
{ 271, "Transport Delay Reporting"}, /* Extendable / Table 7.5.2.2-6 */
- { 272, "Partial Failure Information within PFCP Session Establishment Response"}, /* Extendable / Table 7.5.3.1-2 */
- { 273, "Partial Failure Information within PFCP Session Modification Response"}, /* Extendable / Table 7.5.5.1-2 */
+ { 272, "Partial Failure Information"}, /* Extendable / Table 7.5.3.1-2 */
+ { 273, "Partial Failure Information within PFCP Session Modification Response (Removed in Rel 17.2.0)"}, /* Extendable / Table 7.5.5.1-2 */
{ 274, "Offending IE Information"}, /* Extendable / Clause 8.2.185 */
{ 275, "RAT Type"}, /* Extendable / Clause 8.2.186 */
{ 276, "L2TP Tunnel Information"}, /* Extendable / Table 7.5.2.1-2 */
@@ -1630,15 +1713,32 @@ static const value_string pfcp_ie_type[] = {
{ 282, "Calling Number"}, /* Variable Length / Clause 8.2.190 */
{ 283, "Called Number"}, /* Variable Length / Clause 8.2.191 */
{ 284, "L2TP Session Indications"}, /* Extendable / Clause 8.2.192 */
- { 285, "DNS Server Address"}, /* Variable Length / Clause 8.2.193 */
- { 286, "NBNS Server Address"}, /* Variable Length / Clause 8.2.194 */
- { 287, "Maximum Receive Unit"}, /* Fixed / Clause 8.2.195 */
+ { 285, "DNS Server Address"}, /* Extendable / Clause 8.2.193 */
+ { 286, "NBNS Server Address"}, /* Fixed / Clause 8.2.194 */
+ { 287, "Maximum Receive Unit"}, /* Variable Length / Clause 8.2.195 */
{ 288, "Thresholds"}, /* Variable Length / Clause 8.2.196 */
{ 289, "Steering Mode Indicator"}, /* Extendable / Clause 8.2.197 */
{ 290, "PFCP Session Change Info"}, /* Extendable / Table 7.4.7.1-2 */
{ 291, "Group ID"}, /* Fixed / Clause 8.2.198 */
- { 292, "CP IP Address"}, /* Variable Length / Clause 8.2.199 */
- //293 to 32767 Spare. For future use.
+ { 292, "CP IP Address"}, /* Extendable / Clause 8.2.199 */
+ { 293, "IP Address and Port Number Replacement"}, /* Variable Length / Clause 8.2.200 */
+ { 294, "DNS Query Filter"}, /* Variable Length / Clause 8.2.201 */
+ { 295, "Direct Reporting Information"}, /* Extendable / Table 7.5.2.9-4 */
+ { 296, "Event Notification URI"}, /* Variable Length / Clause 8.2.202 */
+ { 297, "Notification Correlation ID"}, /* Variable Length / Clause 8.2.203 */
+ { 298, "Reporting Flags"}, /* Extendable / Clause 8.2.204 */
+ { 299, "Predefined Rules Name"}, /* Variable Length / Clause 8.2.205 */
+ { 300, "MBS Session N4mb Control Information"}, /* Extendable / Table 7.5.2.1-5 */
+ { 301, "MBS Multicast Parameters"}, /* Extendable / Table 7.5.2.3-5 */
+ { 302, "Add MBS Unicast Parameters IE in Create FAR"}, /* Extendable / Table 7.5.2.3-6 */
+ { 303, "MBS Session N4mb Information"}, /* Extendable / Table 7.5.3.1-4 */
+ { 304, "Remove MBS Unicast Parameters IE in Update FAR"}, /* Extendable / Table 7.5.4.3-4 */
+ { 305, "MBS Session Identifier"}, /* Extendable Length / Clause 8.2.206 */
+ { 306, "Multicast Transport Information"}, /* Extendable Length / Clause 8.2.207 */
+ { 307, "MBSN4mbReq Flags"}, /* Extendable Length / Clause 8.2.208 */
+ { 308, "Local Ingress Tunnel"}, /* Extendable Length / Clause 8.2.209 */
+ { 309, "MBS Unicast Parameters ID"}, /* Extendable Length / Clause 8.2.210 */
+ //310 to 32767 Spare. For future use.
//32768 to 65535 Vendor-specific IEs.
{0, NULL}
};
@@ -3020,7 +3120,8 @@ dissect_pfcp_up_function_features(tvbuff_t *tvb, packet_info *pinfo, proto_tree
}
static int * const pfcp_up_function_features_o10_flags[] = {
- &hf_pfcp_spare_b7_b6,
+ &hf_pfcp_up_function_features_o10_b7_dnsts,
+ &hf_pfcp_up_function_features_o10_b6_iprep,
&hf_pfcp_up_function_features_o10_b5_resps,
&hf_pfcp_up_function_features_o10_b4_upber,
&hf_pfcp_up_function_features_o10_b3_l2tp,
@@ -3029,7 +3130,7 @@ dissect_pfcp_up_function_features(tvbuff_t *tvb, packet_info *pinfo, proto_tree
&hf_pfcp_up_function_features_o10_b0_rttwp,
NULL
};
- /* Octet 10 Spare Spare RESPS UPBER L2TP NSPOC QUOAF RTTWP */
+ /* Octet 10 DNSTS IPREP RESPS UPBER L2TP NSPOC QUOAF RTTWP */
proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o10_flags, ENC_BIG_ENDIAN);
offset += 1;
@@ -3037,6 +3138,19 @@ dissect_pfcp_up_function_features(tvbuff_t *tvb, packet_info *pinfo, proto_tree
return;
}
+ static int * const pfcp_up_function_features_o11_flags[] = {
+ &hf_pfcp_spare_b7_b1,
+ &hf_pfcp_up_function_features_o11_b0_drqos,
+ NULL
+ };
+ /* Octet 10 Spare DRQOS */
+ proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_up_function_features_o11_flags, ENC_BIG_ENDIAN);
+ offset += 1;
+
+ if (offset == length) {
+ return;
+ }
+
if (offset < length) {
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
}
@@ -3070,13 +3184,15 @@ dissect_pfcp_apply_action(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tre
}
static int * const pfcp_apply_action_o6_flags[] = {
- &hf_pfcp_spare_b7_b3,
+ &hf_pfcp_spare_b7_b5,
+ &hf_pfcp_apply_action_flags_o6_b4_mbsu,
+ &hf_pfcp_apply_action_flags_o6_b3_fssm,
&hf_pfcp_apply_action_flags_o6_b2_ddpn,
&hf_pfcp_apply_action_flags_o6_b1_bdpn,
&hf_pfcp_apply_action_flags_o6_b0_edrt,
NULL
};
- /* Octet 6 Spare DROP */
+ /* Octet 6 Spare MBSU FSSM DDPN BDPN EDRT */
proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_apply_action_o6_flags, ENC_BIG_ENDIAN);
offset += 1;
@@ -4324,6 +4440,7 @@ static const value_string pfcp_outer_hdr_desc_vals[] = {
{ 0x008000, "S-TAG " },
{ 0x010000, "N19 Indication " },
{ 0x020000, "N6 Indication " },
+ { 0x040000, "Low Layer SSM and C-TEID " },
{ 0, NULL }
};
@@ -5872,10 +5989,13 @@ static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
{
int offset = 0;
guint64 flags_val;
- guint32 length_imsi, length_imei, length_msisdn, length_nai;
+ guint32 length_imsi, length_imei, length_msisdn, length_nai, length_supi, length_gpsi, length_pei;
static int * const pfcp_user_id_flags[] = {
- &hf_pfcp_spare_b7_b3,
+ &hf_pfcp_spare_b7,
+ &hf_pfcp_user_id_flags_b6_peif,
+ &hf_pfcp_user_id_flags_b5_gpsif,
+ &hf_pfcp_user_id_flags_b4_supif,
&hf_pfcp_user_id_flags_b3_naif,
&hf_pfcp_user_id_flags_b2_msisdnf,
&hf_pfcp_user_id_flags_b1_imeif,
@@ -5888,7 +6008,7 @@ static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
offset += 1;
/* Bit 1 - IMSIF: If this bit is set to "1", then the Length of IMSI and IMSI fields shall be present */
- if ((flags_val & 0x1) == 1) {
+ if ((flags_val & 0x1)) {
/* 6 Length of IMSI */
proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_imsi, tvb, offset, 1, ENC_BIG_ENDIAN, &length_imsi);
offset += 1;
@@ -5898,7 +6018,7 @@ static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
}
/* Bit 2 - IMEIF: If this bit is set to "1", then the Length of IMEI and IMEI fields shall be present */
- if ((flags_val & 0x2) == 2) {
+ if ((flags_val & 0x2)) {
/* b Length of IMEI */
proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_imei, tvb, offset, 1, ENC_BIG_ENDIAN, &length_imei);
offset += 1;
@@ -5913,7 +6033,7 @@ static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
}
/* Bit 3 - MSIDNF: If this bit is set to "1", then the Length of MSISDN and MSISDN fields shall be present */
- if ((flags_val & 0x4) == 4) {
+ if ((flags_val & 0x4)) {
/* d Length of MSISDN */
proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_msisdn, tvb, offset, 1, ENC_BIG_ENDIAN, &length_msisdn);
offset += 1;
@@ -5923,7 +6043,7 @@ static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
}
/* Bit 4 - NAIF: If this bit is set to "1", then the Length of NAI and NAI fields shall be present */
- if ((flags_val & 0x8) == 8) {
+ if ((flags_val & 0x8)) {
/* f Length of NAI */
proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_nai, tvb, offset, 1, ENC_BIG_ENDIAN, &length_nai);
offset += 1;
@@ -5932,6 +6052,36 @@ static void dissect_pfcp_user_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
offset += length_nai;
}
+ /* Bit 5 - SUPIF: If this bit is set to "1", then the Length of SUPI and SUPI fields shall be present */
+ if ((flags_val & 0x10)) {
+ /* f Length of SUPI */
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_supi, tvb, offset, 1, ENC_BIG_ENDIAN, &length_supi);
+ offset += 1;
+ /* (f+1) to g SUPI */
+ proto_tree_add_item(tree, hf_pfcp_user_id_supi, tvb, offset, length_supi, ENC_ASCII|ENC_NA);
+ offset += length_supi;
+ }
+
+ /* Bit 6 - GPSIF: If this bit is set to "1", then the Length of GPSI and GPSI fields shall be present */
+ if ((flags_val & 0x20)) {
+ /* f Length of GPSI */
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_gpsi, tvb, offset, 1, ENC_BIG_ENDIAN, &length_gpsi);
+ offset += 1;
+ /* (f+1) to g GPSI */
+ proto_tree_add_item(tree, hf_pfcp_user_id_gpsi, tvb, offset, length_gpsi, ENC_ASCII|ENC_NA);
+ offset += length_gpsi;
+ }
+
+ /* Bit 7 - PEIF: If this bit is set to "1", then the Length of PEI and PEI fields shall be present */
+ if ((flags_val & 0x40)) {
+ /* f Length of PEI */
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_user_id_length_of_pei, tvb, offset, 1, ENC_BIG_ENDIAN, &length_pei);
+ offset += 1;
+ /* (f+1) to g PEI */
+ proto_tree_add_item(tree, hf_pfcp_user_id_pei, tvb, offset, length_pei, ENC_ASCII|ENC_NA);
+ offset += length_pei;
+ }
+
if (offset < length) {
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
}
@@ -7063,10 +7213,10 @@ dissect_pfcp_5gs_user_plane_node(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
ett_pfcp_5gs_user_plane_node, pfcp_5gs_user_plane_node_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS, &flags_val);
offset += 1;
- // Bit 1 – BID: If this bit is set to "1", then the Bridge ID value field shall be present,
+ // Bit 1 – BID: If this bit is set to "1", then the Use Plane value field shall be present,
// The Bridge ID value is defined in IEEE.802.1Q clause 14.2.5 and value shall be encoded as an Unisigned64 binary integer.
if ((flags_val & 0x1)) {
- proto_tree_add_item(tree, hf_pfcp_5gs_user_plane_node_bridge_id, tvb, offset, 6, ENC_NA);
+ proto_tree_add_item(tree, hf_pfcp_5gs_user_plane_node_value, tvb, offset, 6, ENC_NA);
offset += 6;
}
@@ -8283,7 +8433,10 @@ dissect_pfcp_dns_sever_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
{
int offset = 0;
- offset = decode_pfcp_address(tvb, pinfo, tree, item, offset, length);
+ /* IPv4 address */
+ proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset));
+ offset += 4;
if (offset < length) {
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
@@ -8299,7 +8452,10 @@ dissect_pfcp_nbns_sever_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *t
{
int offset = 0;
- offset = decode_pfcp_address(tvb, pinfo, tree, item, offset, length);
+ /* IPv4 address */
+ proto_tree_add_item(tree, hf_pfcp_node_id_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_item_append_text(item, "%s", tvb_ip_to_str(pinfo->pool, tvb, offset));
+ offset += 4;
if (offset < length) {
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
@@ -8428,6 +8584,322 @@ dissect_pfcp_cp_ip_address(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
}
}
+/*
+ * 8.2.200 IP Address and Port Number Replacement
+ */
+static void
+dissect_pfcp_ip_address_and_port_number_replacement(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ int offset = 0;
+ guint64 ip_address_and_port_number_replacement_flags;
+
+ static int * const pfcp_ip_address_and_port_number_replacement_flags[] = {
+ &hf_pfcp_spare_b7_b6,
+ &hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn,
+ &hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6,
+ &hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4,
+ &hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn,
+ &hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6,
+ &hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4,
+ NULL
+ };
+ /* Octet 5 Spare SPN SIPV6 SIPV4 DPN V6 V4*/
+ proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_ip_address_and_port_number_replacement_flags,
+ ett_pfcp_ip_address_and_port_number_replacement_flags, pfcp_ip_address_and_port_number_replacement_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS, &ip_address_and_port_number_replacement_flags);
+ offset += 1;
+
+ /* Destination IPv4 address (if present)*/
+ if ((ip_address_and_port_number_replacement_flags & 0x1)) {
+ proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+ }
+ /* Destination IPv6 address (if present)*/
+ if ((ip_address_and_port_number_replacement_flags & 0x2)) {
+ proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6, tvb, offset, 16, ENC_NA);
+ offset += 16;
+ }
+ /* Destination Port Number (if present)*/
+ if ((ip_address_and_port_number_replacement_flags & 0x4)) {
+ proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_destination_port, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ }
+ /* Source IPv4 address (if present)*/
+ if ((ip_address_and_port_number_replacement_flags & 0x8)) {
+ proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+ }
+ /* Source IPv6 address (if present)*/
+ if ((ip_address_and_port_number_replacement_flags & 0x10)) {
+ proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_ipv6, tvb, offset, 16, ENC_NA);
+ offset += 16;
+ }
+ /* Source Port Number (if present)*/
+ if ((ip_address_and_port_number_replacement_flags & 0x20)) {
+ proto_tree_add_item(tree, hf_pfcp_ip_address_and_port_number_replacement_source_port, tvb, offset, 2, ENC_NA);
+ offset += 2;
+ }
+
+ if (offset < length) {
+ proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
+ }
+}
+
+/*
+ * 8.2.201 DNS Query Filter
+ */
+static void
+dissect_pfcp_dns_query_filter(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ int offset = 0;
+ guint32 dns_query_length;
+
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_dns_query_filter_pattern_len, tvb, offset, 2, ENC_BIG_ENDIAN, &dns_query_length);
+ offset += 2;
+ proto_tree_add_item(tree, hf_pfcp_dns_query_filter_pattern, tvb, offset, dns_query_length, ENC_ASCII | ENC_NA);
+ offset += dns_query_length;
+
+ if (offset < length) {
+ proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
+ }
+}
+
+/*
+ * 8.2.202 Event Notification URI
+ */
+static void
+dissect_pfcp_event_notification_uri(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ proto_tree_add_item(tree, hf_pfcp_event_notification_uri, tvb, 0, length, ENC_ASCII | ENC_NA);
+}
+
+
+/*
+ * 8.2.203 Notification Correlation ID
+ */
+static void
+dissect_pfcp_notification_correlation_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ guint32 value;
+ /* 5 to n+4 Notification Correlation ID value */
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_notification_correlation_id, tvb, 0, 4, ENC_BIG_ENDIAN, &value);
+ proto_item_append_text(item, "%u", value);
+}
+
+/*
+ * 8.2.204 Reporting Flags
+ */
+static void
+dissect_pfcp_reporting_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ int offset = 0;
+
+ static int * const pfcp_reporting_flags_o5_flags[] = {
+ &hf_pfcp_spare_b7_b1,
+ &hf_pfcp_reporting_flags_o5_b0_dupl,
+ NULL
+ };
+ /* Octet 5 Spare DUPL */
+ proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_reporting_flags_o5_flags, ENC_BIG_ENDIAN);
+ offset++;
+
+ if (offset == length) {
+ return;
+ }
+
+ if (offset < length) {
+ proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
+ }
+}
+
+/*
+ * 8.2.205 Predefined Rules Name
+ */
+static void
+dissect_pfcp_predefined_rules_name(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ int offset = 0;
+ /* Octet 5 to (n+4) Predefined Rules Name
+ * The Predefined Rules Name field shall be encoded as an OctetString
+ */
+ proto_tree_add_item(tree, hf_pfcp_predef_rules_name, tvb, offset, length, ENC_NA);
+}
+
+/*
+ * 8.2.206 MBS Session Identifier
+ */
+static void
+dissect_pfcp_mbs_session_identifier(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ int offset = 0;
+ guint64 mbs_session_identifier_flags;
+
+ static int * const pfcp_mbs_session_identifier_flags[] = {
+ &hf_pfcp_spare_b7_b2,
+ &hf_pfcp_mbs_session_identifier_flag_b1_ssmi,
+ &hf_pfcp_mbs_session_identifier_flag_b0_tmgi,
+ NULL
+ };
+ /* Octet 5 Spare SMI TMGI */
+ proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_mbs_session_identifier_flags,
+ ett_pfcp_mbs_session_identifier_flags, pfcp_mbs_session_identifier_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS, &mbs_session_identifier_flags);
+ offset += 1;
+
+ /* TMGI (if present)*/
+ if ((mbs_session_identifier_flags & 0x1)) {
+ proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_tmgi, tvb, offset, 6, ENC_NA);
+ offset += 6;
+ }
+ /* SSMI (if present)*/
+ if ((mbs_session_identifier_flags & 0x2)) {
+ proto_tree_add_item(tree, hf_pfcp_mbs_session_identifier_ssmi, tvb, offset, -1, ENC_NA);
+ return;
+ }
+
+ if (offset < length) {
+ proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
+ }
+}
+
+/*
+ * 8.2.207 Multicast Transport Information
+ */
+static void
+dissect_pfcp_multicast_transport_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ int offset = 0;
+ guint32 distribution_address_type;
+ guint32 distribution_address_length;
+ guint32 source_address_type;
+ guint32 source_address_length;
+
+ /* Oct 5 Spare */
+ proto_tree_add_item(tree, hf_pfcp_spare_oct, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset++;
+
+ /* Oct 6 to 9 Common Tunnel Endpoint Identifer */
+ proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_endpoint_identifier, tvb, offset, 1, ENC_BIG_ENDIAN);
+ offset++;
+
+ /* Oct 10 Distribution Address Type && Length */
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_distribution_address_type, tvb, offset, 1, ENC_BIG_ENDIAN, &distribution_address_type);
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_distribution_address_length, tvb, offset, 1, ENC_BIG_ENDIAN, &distribution_address_length);
+ offset++;
+
+ /* Distribution IPv4 address (if present) */
+ if (distribution_address_type == 0) {
+ proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_distribution_address_ipv4, tvb, offset, distribution_address_length, ENC_BIG_ENDIAN);
+ offset += distribution_address_length;
+ }
+ /* Distribution IPv6 address (if present) */
+ if (distribution_address_type == 1) {
+ proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_distribution_address_ipv6, tvb, offset, distribution_address_length, ENC_NA);
+ offset += distribution_address_length;
+ }
+
+ /* Source Address Type && Length */
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_source_address_type, tvb, offset, 1, ENC_BIG_ENDIAN, &source_address_type);
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_multicast_transport_information_source_address_length, tvb, offset, 1, ENC_BIG_ENDIAN, &source_address_length);
+ offset++;
+
+ /* Source IPv4 address (if present) */
+ if (source_address_type == 0) {
+ proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_source_address_ipv4, tvb, offset, source_address_length, ENC_BIG_ENDIAN);
+ offset += source_address_length;
+ }
+ /* Source IPv6 address (if present) */
+ if (source_address_type == 1) {
+ proto_tree_add_item(tree, hf_pfcp_multicast_transport_information_source_address_ipv6, tvb, offset, source_address_length, ENC_NA);
+ offset += source_address_length;
+ }
+
+ if (offset < length) {
+ proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
+ }
+}
+
+/*
+ * 8.2.208 MBSN4mbReq-Flags
+ */
+static void
+dissect_pfcp_mbsn4mbreq_flags(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ int offset = 0;
+
+ static int * const pfcp_mbsn4mbreq_flags_o5_flags[] = {
+ &hf_pfcp_spare_b7_b2,
+ &hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm,
+ &hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm,
+ NULL
+ };
+ /* Octet 5 Spare JMBSSM PLLSSM */
+ proto_tree_add_bitmask_list(tree, tvb, offset, 1, pfcp_mbsn4mbreq_flags_o5_flags, ENC_BIG_ENDIAN);
+ offset++;
+
+ if (offset == length) {
+ return;
+ }
+
+ if (offset < length) {
+ proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
+ }
+}
+
+/*
+ * 8.2.3 Local Ingress Tunnel
+ */
+static void
+dissect_pfcp_local_ingress_tunnel(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item _U_, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ int offset = 0;
+ guint64 local_ingress_tunnel_flags_val;
+
+ static int * const pfcp_local_ingress_tunnel_flags[] = {
+ &hf_pfcp_spare_b7_b3,
+ &hf_pfcp_local_ingress_tunnel_flags_b2_ch,
+ &hf_pfcp_local_ingress_tunnel_flags_b1_v6,
+ &hf_pfcp_local_ingress_tunnel_flags_b0_v4,
+ NULL
+ };
+ /* Octet 5 Spare CH V6 V4*/
+ proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_local_ingress_tunnel_flags,
+ ett_local_ingress_tunnel_flags, pfcp_local_ingress_tunnel_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS, &local_ingress_tunnel_flags_val);
+ offset += 1;
+
+ /* 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 */
+ if ((local_ingress_tunnel_flags_val & 0x4) != 4) {
+ /* UDP PPort */
+ proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_udp_port, tvb, offset, 2, ENC_BIG_ENDIAN);
+ offset += 2;
+
+ if ((local_ingress_tunnel_flags_val & 0x1) == 1) {
+ /* IPv4 address */
+ proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
+ offset += 4;
+ }
+ if ((local_ingress_tunnel_flags_val & 0x2) == 2) {
+ /* IPv6 address */
+ proto_tree_add_item(tree, hf_pfcp_local_ingress_tunnel_ipv6, tvb, offset, 16, ENC_NA);
+ offset += 16;
+ }
+ }
+ if (offset < length) {
+ proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
+ }
+
+}
+
+/*
+ * 8.2.210 MBS Unicast Parameters ID
+ */
+static void
+dissect_pfcp_mbs_unicast_parameters_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, guint16 length _U_, guint8 message_type _U_, pfcp_session_args_t *args _U_)
+{
+ guint32 value;
+ /* Octet 5 to 6 MBS Unicast Parameters ID */
+ proto_tree_add_item_ret_uint(tree, hf_pfcp_mbs_unicast_parameters_id, tvb, 0, 2, ENC_BIG_ENDIAN, &value);
+ proto_item_append_text(item, "%u", value);
+}
+
/* Array of functions to dissect IEs
* (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args)
*/
@@ -8728,9 +9200,25 @@ static const pfcp_ie_t pfcp_ies[] = {
/* 289 */ { dissect_pfcp_steering_mode_indications }, /* Steering Mode Indicator Extendable / Clause 8.2.197 */
/* 290 */ { dissect_pfcp_pfcp_session_change_info }, /* PFCP Session Change Info Extendable / Table 7.4.7.1-2 */
/* 291 */ { dissect_pfcp_group_id }, /* Group ID Fixed / Clause 8.2.198 */
-/* 292 */ { dissect_pfcp_cp_ip_address }, /* CP IP Address Variable Length / Clause 8.2.190 */
-
-//293 to 32767 Spare. For future use.
+/* 292 */ { dissect_pfcp_cp_ip_address }, /* CP IP Address Variable Length / Clause 8.2.199 */
+/* 293 */ { dissect_pfcp_ip_address_and_port_number_replacement }, /* IP Address and Port Number Replacement Variable Length / Clause 8.2.200 */
+/* 294 */ { dissect_pfcp_dns_query_filter }, /* DNS Query Filter Variable Length / Clause 8.2.201 */
+/* 295 */ { dissect_pfcp_direct_reporting_information }, /* Direct Reporting Information Extendable / Table 7.5.2.9-4 */
+/* 296 */ { dissect_pfcp_event_notification_uri }, /* Event Notification URI Variable Length / Clause 8.2.202 */
+/* 297 */ { dissect_pfcp_notification_correlation_id }, /* Notification Correlation ID Fixed / Clause 8.2.203 */
+/* 298 */ { dissect_pfcp_reporting_flags }, /* Reporting Flags Extendable / Clause 8.2.204 */
+/* 299 */ { dissect_pfcp_predefined_rules_name }, /* Predefined Rules Name Variable Length / Clause 8.2.205 */
+/* 300 */ { dissect_pfcp_mbs_session_n4mb_control_information }, /* MBS Session N4mb Control Information Extendable / Table 7.5.2.1-5 */
+/* 301 */ { dissect_pfcp_mbs_multicast_parameters }, /* MBS Multicast Parameters Extendable / Table 7.5.2.3-5 */
+/* 302 */ { dissect_pfcp_add_mbs_unicast_parameters_ie_in_create_far }, /* Addd MBS Unicast Parameters IE in Create FAR Extendable / Table 7.5.2.3-6 */
+/* 303 */ { dissect_pfcp_mbs_session_n4mb_information }, /* MBS Session N4mb Information Extendable / Table 7.5.3.1-4 */
+/* 304 */ { dissect_pfcp_remove_mbs_unicast_parameters_ie_in_update_far },/* Remove MBS Unicast Parameters IE in Update FAR Extendable / Table 7.5.4.3-4 */
+/* 305 */ { dissect_pfcp_mbs_session_identifier }, /* MBS Session Identifier Variable Length / Clause 8.2.206 */
+/* 306 */ { dissect_pfcp_multicast_transport_information }, /* Multicast Transport Information Variable Length / Clause 8.2.207 */
+/* 307 */ { dissect_pfcp_mbsn4mbreq_flags }, /* MBSN4mbReq Flags Extendable / Clause 8.2.208 */
+/* 308 */ { dissect_pfcp_local_ingress_tunnel }, /* Local Ingress Tunnel Extendable / Clause 8.2.209 */
+/* 309 */ { dissect_pfcp_mbs_unicast_parameters_id }, /* MBS Unicast Parameters ID Extendable / Clause 8.2.210 */
+//310 to 32767 Spare. For future use.
//32768 to 65535 Vendor-specific IEs.
{ NULL }, /* End of List */
};
@@ -9521,6 +10009,43 @@ dissect_pfcp_pfcp_session_change_info(tvbuff_t *tvb, packet_info *pinfo, proto_t
}
static void
+dissect_pfcp_direct_reporting_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args)
+{
+ dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_DIRECT_REPORTING_INFORMATION], args);
+}
+
+static void
+dissect_pfcp_mbs_session_n4mb_control_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args)
+{
+ dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_MBS_SESSION_N4MB_CONTROL_INFORMATION], args);
+}
+
+static void
+dissect_pfcp_mbs_multicast_parameters(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args)
+{
+ dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_MBS_MULTICAST_PARAMETERS], args);
+}
+
+static void
+dissect_pfcp_add_mbs_unicast_parameters_ie_in_create_far(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args)
+{
+ dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_ADD_MBS_UNICAST_PARAMETERS_IE_IN_CREATE_FAR], args);
+}
+
+static void
+dissect_pfcp_mbs_session_n4mb_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args)
+{
+ dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_MBS_SESSION_N4MB_INFORMATION], args);
+}
+
+static void
+dissect_pfcp_remove_mbs_unicast_parameters_ie_in_update_far(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args)
+{
+ dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_REMOVE_MBS_UNICAST_PARAMETERS_IE_IN_UPDATE_FAR], args);
+}
+
+
+static void
dissect_pfcp_ies_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gint offset, guint16 length, guint8 message_type, pfcp_session_args_t *args)
{
proto_tree *ie_tree;
@@ -11093,6 +11618,17 @@ proto_register_pfcp(void)
FT_BOOLEAN, 8, NULL, 0x04,
NULL, HFILL }
},
+ { &hf_pfcp_apply_action_flags_o6_b3_fssm,
+ { "FSSM (Forward packets to lower layer SSM)", "pfcp.apply_action.fssm",
+ FT_BOOLEAN, 8, NULL, 0x08,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_apply_action_flags_o6_b4_mbsu,
+ { "MBSU (Forward and replicate MBS data using Unicast transport)", "pfcp.apply_action.mbsu",
+ FT_BOOLEAN, 8, NULL, 0x10,
+ NULL, HFILL }
+ },
+
{ &hf_pfcp_bar_id,
{ "BAR ID", "pfcp.bar_id",
FT_UINT8, BASE_DEC, NULL, 0x0,
@@ -11925,6 +12461,22 @@ proto_register_pfcp(void)
FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x20,
"UP function supports Restoration of PFCP Session association", HFILL }
},
+ { &hf_pfcp_up_function_features_o10_b6_iprep,
+ { "IPREP", "pfcp.up_function_features.iprep",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x40,
+ "UP function supports IP Address and Port number replacement", HFILL }
+ },
+ { &hf_pfcp_up_function_features_o10_b7_dnsts,
+ { "DNSTS", "pfcp.up_function_features.dnsts",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x80,
+ "UP function support DNS Traffic Steering based on FQDN in the DNS Query message", HFILL }
+ },
+ { &hf_pfcp_up_function_features_o11_b0_drqos,
+ { "DRQOS", "pfcp.up_function_features.drqos",
+ FT_BOOLEAN, 8, TFS(&tfs_supported_not_supported), 0x01,
+ "UP function supports Direct Reporting of QoS monitoring events to Local NEF or AF", HFILL }
+ },
+
{ &hf_pfcp_sequence_number,
{ "Sequence Number", "pfcp.sequence_number",
FT_UINT32, BASE_DEC, NULL, 0x0,
@@ -12833,6 +13385,22 @@ proto_register_pfcp(void)
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
NULL, HFILL }
},
+ { &hf_pfcp_user_id_flags_b4_supif,
+ { "SUPIF", "pfcp.user_id.flags.supif",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_user_id_flags_b5_gpsif,
+ { "GPSIF", "pfcp.user_id.flags.gpsif",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_user_id_flags_b6_peif,
+ { "PEIF", "pfcp.user_id.flags.peif",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x40,
+ NULL, HFILL }
+ },
+
{ &hf_pfcp_user_id_length_of_imsi,
{ "Length of IMSI", "pfcp.user_id.length_of_imsi",
FT_UINT8, BASE_DEC, NULL, 0x0,
@@ -12863,6 +13431,36 @@ proto_register_pfcp(void)
FT_STRING, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
+ { &hf_pfcp_user_id_length_of_supi,
+ { "Length of SUPI", "pfcp.user_id.length_of_supi",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_user_id_supi,
+ { "SUPI", "pfcp.user_id.supi",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_user_id_length_of_gpsi,
+ { "Length of GPSI", "pfcp.user_id.length_of_gpsi",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_user_id_gpsi,
+ { "GPSI", "pfcp.user_id.gpsi",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_user_id_length_of_pei,
+ { "Length of PEI", "pfcp.user_id.length_of_pei",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_user_id_pei,
+ { "PEI", "pfcp.user_id.pei",
+ FT_STRING, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
{ &hf_pfcp_ethernet_pdu_session_information_flags,
@@ -13354,8 +13952,8 @@ proto_register_pfcp(void)
FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
NULL, HFILL }
},
- { &hf_pfcp_5gs_user_plane_node_bridge_id,
- { "Bridge ID", "pfcp.5gs_user_plane_node.bridge_id",
+ { &hf_pfcp_5gs_user_plane_node_value,
+ { "Use Plane Node value", "pfcp.5gs_user_plane_node.value",
FT_BYTES, BASE_NONE, NULL, 0x0,
NULL, HFILL }
},
@@ -14139,6 +14737,227 @@ proto_register_pfcp(void)
NULL, HFILL }
},
+ { &hf_pfcp_ip_address_and_port_number_replacement_flags,
+ { "Flags", "pfcp.ip_address_and_port_number_replacement.flag",
+ FT_UINT8, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_flag_b0_v4,
+ { "DIPV4", "pfcp.ip_address_and_port_number_replacement.flag.dipv4",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_flag_b1_v6,
+ { "DIPV6", "pfcp.ip_address_and_port_number_replacement.flag.dipv6",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_flag_b2_dpn,
+ { "DPN", "pfcp.ip_address_and_port_number_replacement.flag.dpn",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x04,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_flag_b3_sipv4,
+ { "SIPV4", "pfcp.ip_address_and_port_number_replacement.flag.sipv4",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x08,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_flag_b4_sipv6,
+ { "SIPV6", "pfcp.ip_address_and_port_number_replacement.flag.sipv6",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x10,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_flag_b5_spn,
+ { "SPN", "pfcp.ip_address_and_port_number_replacement.flag.spn",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x20,
+ NULL, HFILL }
+ },
+
+ { &hf_pfcp_ip_address_and_port_number_replacement_destination_ipv4,
+ { "Destination IPv4 address", "pfcp.ip_address_and_port_number_replacement.dipv4",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_destination_ipv6,
+ { "Destination IPv6 address", "pfcp.ip_address_and_port_number_replacement.dipv6",
+ FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_destination_port,
+ { "Destination Port Number", "pfcp.ip_address_and_port_number_replacement.dpn",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_source_ipv4,
+ { "Source IPv4 address", "pfcp.ip_address_and_port_number_replacement.sipv4",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_source_ipv6,
+ { "Source IPv6 address", "pfcp.ip_address_and_port_number_replacement.sipv6",
+ FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_ip_address_and_port_number_replacement_source_port,
+ { "Source Port Number", "pfcp.ip_address_and_port_number_replacement.spn",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+
+ { &hf_pfcp_dns_query_filter_pattern_len,
+ { "DNS Query Filter Pattern Length", "pfcp.dns_query_filter.pattern_len",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_dns_query_filter_pattern,
+ { "DNS Query Filter Pattern", "pfcp.dns_query_filter.pattern",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+
+ { &hf_pfcp_event_notification_uri,
+ { "Event Notification URI", "pfcp.event_notification_uri",
+ FT_STRING, BASE_NONE, NULL, 0,
+ NULL, HFILL }
+ },
+
+ { &hf_pfcp_notification_correlation_id,
+ { "QER Correlation ID", "pfcp.qer_correlation_id",
+ FT_UINT32, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+
+ { &hf_pfcp_reporting_flags_o5_b0_dupl,
+ { "DUPL (Duplocation Notication)", "pfcp.reporting_flags.dupl",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },
+
+
+ { &hf_pfcp_mbs_session_identifier_flags,
+ { "Flags", "pfcp.cp_ip_address.flags",
+ FT_UINT8, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_mbs_session_identifier_flag_b0_tmgi,
+ { "TGMI", "pfcp.session_identifier.flag.tmgi",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },{ &hf_pfcp_mbs_session_identifier_flag_b1_ssmi,
+ { "SSMI", "pfcp.session_identifier.flag.ssmi",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_mbs_session_identifier_tmgi,
+ {"TMGI", "pfcp.mbs_session_identifier.tmgi",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}
+ },
+ { &hf_pfcp_mbs_session_identifier_ssmi,
+ {"SSMI", "pfcp.mbs_session_identifier.ssmi",
+ FT_BYTES, BASE_NONE, NULL, 0x0,
+ NULL, HFILL}
+ },
+
+ { &hf_pfcp_multicast_transport_information_endpoint_identifier,
+ { "Common Tunnel Endpoint Identifier", "pfcp.multicast_transport_information.endpoint_identifier",
+ FT_UINT8, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_multicast_transport_information_distribution_address_type,
+ { "Distribution Address Type", "pfcp.multicast_transport_information.distribution_address.type",
+ FT_UINT8, BASE_DEC, NULL, 0xC0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_multicast_transport_information_distribution_address_length,
+ { "Distribution Type", "pfcp.multicast_transport_information.distribution_address.length",
+ FT_UINT8, BASE_DEC, NULL, 0x3F,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_multicast_transport_information_distribution_address_ipv4,
+ { "Distribution IPv4 address", "pfcp.multicast_transport_information.distribution_address.ipv4",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_multicast_transport_information_distribution_address_ipv6,
+ { "Distribution IPv6 address", "pfcp.multicast_transport_information.distribution_address.ipv6",
+ FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_multicast_transport_information_source_address_type,
+ { "Source Address Type", "pfcp.multicast_transport_information.distribution_address.type",
+ FT_UINT8, BASE_DEC, NULL, 0xC0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_multicast_transport_information_source_address_length,
+ { "Source Address Type", "pfcp.multicast_transport_information.distribution_address.length",
+ FT_UINT8, BASE_DEC, NULL, 0x3F,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_multicast_transport_information_source_address_ipv4,
+ { "Source IPv4 address", "pfcp.multicast_transport_information.distribution_address.ipv4",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_multicast_transport_information_source_address_ipv6,
+ { "Source IPv6 address", "pfcp.multicast_transport_information.distribution_address.ipv6",
+ FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+
+ { &hf_pfcp_mbsn4mbreq_flags_o5_b0_pllssm,
+ { "PLLSSM (Provide Lower Layer SSM)", "pfcp.reporting_flags.pllssm",
+ FT_BOOLEAN, 8, NULL, 0x01,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_mbsn4mbreq_flags_o5_b1_jmbssm,
+ { "JMBSSM (Join MBS Session SSM)", "pfcp.reporting_flags.jmbssm",
+ FT_BOOLEAN, 8, NULL, 0x02,
+ NULL, HFILL }
+ },
+
+
+ { &hf_pfcp_local_ingress_tunnel_flags,
+ { "Flags", "pfcp.local_ingress_tunnel.flags",
+ FT_UINT8, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_local_ingress_tunnel_flags_b2_ch,
+ { "CH (CHOOSE)", "pfcp.local_ingress_tunnel.flags.ch",
+ FT_BOOLEAN, 8, NULL, 0x04,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_local_ingress_tunnel_flags_b1_v6,
+ { "V6 (IPv6)", "pfcp.local_ingress_tunnel.flags.v6",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x02,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_local_ingress_tunnel_flags_b0_v4,
+ { "V4 (IPv4)", "pfcp.local_ingress_tunnel.flags.v4",
+ FT_BOOLEAN, 8, TFS(&tfs_present_not_present), 0x01,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_local_ingress_tunnel_udp_port,
+ { "UDP Port", "pfcp.local_ingress_tunnel.udp",
+ FT_UINT32, BASE_HEX, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_local_ingress_tunnel_ipv4,
+ { "IPv4 address", "pfcp.local_ingress_tunnel.ipv4",
+ FT_IPv4, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+ { &hf_pfcp_local_ingress_tunnel_ipv6,
+ { "IPv6 address", "pfcp.local_ingress_tunnel.ipv6",
+ FT_IPv6, BASE_NONE, NULL, 0x0,
+ NULL, HFILL }
+ },
+
+ { &hf_pfcp_mbs_unicast_parameters_id,
+ { "MBS Unicast Parameters ID value", "pfcp.mbs_unicast_parameters_id",
+ FT_UINT16, BASE_DEC, NULL, 0x0,
+ NULL, HFILL }
+ },
/* Enterprise IEs */
/* BBF */
@@ -14358,7 +15177,7 @@ proto_register_pfcp(void)
};
/* Setup protocol subtree array */
-#define NUM_INDIVIDUAL_ELEMS_PFCP 90
+#define NUM_INDIVIDUAL_ELEMS_PFCP 93
gint *ett[NUM_INDIVIDUAL_ELEMS_PFCP +
(NUM_PFCP_IES - 1) +
(NUM_PFCP_ENTERPRISE_BBF_IES - 1) +
@@ -14448,15 +15267,18 @@ proto_register_pfcp(void)
ett[81] = &ett_pfcp_l2tp_user_authentication_flags;
ett[82] = &ett_pfcp_thresholds;
ett[83] = &ett_pfcp_cp_ip_address_flags;
+ ett[84] = &ett_pfcp_ip_address_and_port_number_replacement_flags;
+ ett[85] = &ett_pfcp_mbs_session_identifier_flags;
+ ett[86] = &ett_local_ingress_tunnel_flags;
/* Enterprise */
/* Travelping */
- ett[84] = &ett_pfcp_enterprise_travelping_error_report;
+ ett[87] = &ett_pfcp_enterprise_travelping_error_report;
/* BBF */
- ett[85] = &ett_pfcp_bbf_ppp_protocol_flags;
- ett[86] = &ett_pfcp_bbf_l2tp_endp_flags;
- ett[87] = &ett_pfcp_bbf_l2tp_type_flags;
- ett[88] = &ett_pfcp_bbf_ppp_lcp_connectivity;
- ett[89] = &ett_pfcp_bbf_l2tp_tunnel;
+ ett[88] = &ett_pfcp_bbf_ppp_protocol_flags;
+ ett[89] = &ett_pfcp_bbf_l2tp_endp_flags;
+ ett[90] = &ett_pfcp_bbf_l2tp_type_flags;
+ ett[91] = &ett_pfcp_bbf_ppp_lcp_connectivity;
+ ett[92] = &ett_pfcp_bbf_l2tp_tunnel;
static ei_register_info ei[] = {
{ &ei_pfcp_ie_reserved,{ "pfcp.ie_id_reserved", PI_PROTOCOL, PI_ERROR, "Reserved IE value used", EXPFILL } },