pfcp: Update to 3GPP TS 29.244 V16.7.0

This commit is contained in:
Joakim Karlsson 2021-07-22 13:45:01 +02:00 committed by Wireshark GitLab Utility
parent a0a9d41d13
commit 22b580b946
1 changed files with 87 additions and 29 deletions

View File

@ -10,7 +10,7 @@
* *
* SPDX-License-Identifier: GPL-2.0-or-later * SPDX-License-Identifier: GPL-2.0-or-later
* *
* Ref 3GPP TS 29.244 V16.6.0 (2020-12-11) * Ref 3GPP TS 29.244 V16.7.0 (2021-03-30)
*/ */
#include "config.h" #include "config.h"
@ -173,6 +173,7 @@ static int hf_pfcp_fq_csid_node_id_ipv6 = -1;
static int hf_pfcp_fq_csid_node_id_mcc_mnc = -1; static int hf_pfcp_fq_csid_node_id_mcc_mnc = -1;
static int hf_pfcp_fq_csid_node_id_int = -1; static int hf_pfcp_fq_csid_node_id_int = -1;
static int hf_pfcp_fq_csid = -1; static int hf_pfcp_fq_csid = -1;
static int hf_pfcp_fq_csid_node_type = -1;
static int hf_pfcp_measurement_period = -1; static int hf_pfcp_measurement_period = -1;
static int hf_pfcp_duration_measurement = -1; static int hf_pfcp_duration_measurement = -1;
static int hf_pfcp_time_of_first_packet = -1; static int hf_pfcp_time_of_first_packet = -1;
@ -1089,7 +1090,7 @@ static void dissect_pfcp_qos_monitoring_report(tvbuff_t *tvb, packet_info *pinfo
static void dissect_pfcp_packet_rate_status_report_ie_within_pfcp_session_deletion_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_packet_rate_status_report_ie_within_pfcp_session_deletion_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_ethernet_context_information_within_pfcp_session_modification_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_ethernet_context_information_within_pfcp_session_modification_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_redundant_transmission_detection_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_redundant_transmission_detection_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_updated_pdr_ie_within_pfcp_session_report_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_updated_pdr_ie_within_pfcp_session_modification_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_provide_rds_configuration_information_ie_within_pfcp_session_modification_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_provide_rds_configuration_information_ie_within_pfcp_session_modification_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_query_packet_rate_status_ie_within_pfcp_session_modification_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_query_packet_rate_status_ie_within_pfcp_session_modification_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_query_packet_rate_status_report_ie_within_pfcp_session_modification_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_query_packet_rate_status_report_ie_within_pfcp_session_modification_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args _U_);
@ -1249,7 +1250,7 @@ static value_string_ext pfcp_message_type_ext = VALUE_STRING_EXT_INIT(pfcp_messa
#define PFCP_IE_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PFCP_SESSION_DELETION_RESPONSE 252 #define PFCP_IE_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PFCP_SESSION_DELETION_RESPONSE 252
#define PCFP_IE_ETHERNET_CONTEXT_INFORMATION_WITHIN_PFCP_SESSION_MODIFICATION_REQUEST 254 #define PCFP_IE_ETHERNET_CONTEXT_INFORMATION_WITHIN_PFCP_SESSION_MODIFICATION_REQUEST 254
#define PFCP_IE_REDUNDANT_TRANSMISSION_DETECTION_PARAMETERS_IE_IN_PDI 255 #define PFCP_IE_REDUNDANT_TRANSMISSION_DETECTION_PARAMETERS_IE_IN_PDI 255
#define PFCP_IE_UPDATED_PDR_IE_WITHIN_PFCP_SESSION_REPORT_RESPONSE 256 #define PFCP_IE_UPDATED_PDR_IE_WITHIN_PFCP_SESSION_MODIFICATION_RESPONSE 256
#define PFCP_IE_PROVIDE_RDS_CONFIGURATION_INFORMATION_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 261 #define PFCP_IE_PROVIDE_RDS_CONFIGURATION_INFORMATION_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 261
#define PFCP_IE_QUERY_PACKET_RATE_STATUS_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 263 #define PFCP_IE_QUERY_PACKET_RATE_STATUS_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_REQUEST 263
#define PFCP_IE_QUERY_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_RESPONSE 264 #define PFCP_IE_QUERY_PACKET_RATE_STATUS_REPORT_IE_WITHIN_PCFP_SESSION_ESTABLISHMENT_RESPONSE 264
@ -3744,6 +3745,17 @@ static const value_string pfcp_fq_csid_node_id_type_vals[] = {
{ 0, NULL } { 0, NULL }
}; };
static const value_string pfcp_fq_csid_node_type_vals[] = {
{ 0, "MME" },
{ 1, "SGW-C" },
{ 2, "PGW-C" },
{ 3, "ePDG" },
{ 4, "TWAN" },
{ 5, "PGW-U/SGW-U" },
{ 0, NULL }
};
static void static void
dissect_pfcp_fq_csid(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_) dissect_pfcp_fq_csid(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_)
{ {
@ -3786,6 +3798,13 @@ dissect_pfcp_fq_csid(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_
offset += 2; offset += 2;
num_csid--; num_csid--;
} }
if (offset < length) {
proto_tree_add_item(tree, hf_pfcp_spare_b7_b4, tvb, offset, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(tree, hf_pfcp_fq_csid_node_type, tvb, offset, 1, ENC_BIG_ENDIAN);
offset++;
}
if (offset < length) { if (offset < length) {
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1); proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
} }
@ -5045,9 +5064,43 @@ static const value_string pfcp_failed_rule_id_type_vals[] = {
{ 2, "QER" }, { 2, "QER" },
{ 3, "URR" }, { 3, "URR" },
{ 4, "BAR" }, { 4, "BAR" },
{ 5, "MAR" },
{ 6, "SRR" },
{ 0, NULL } { 0, NULL }
}; };
/*
* 8.2.123 MAR ID
*/
static int
decode_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, gint offset)
{
guint32 mar_id;
/* Octet 5 to 6 MAR ID*/
proto_tree_add_item_ret_uint(tree, hf_pfcp_mar_id, tvb, offset, 2, ENC_BIG_ENDIAN, &mar_id);
offset += 2;
proto_item_append_text(item, "%u", mar_id);
return offset;
}
/*
* 8.2.151 SRR ID
*/
static int
decode_pfcp_srr_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, gint offset)
{
guint32 srr_id;
/* Oct 5 The SRR ID value shall be encoded as a binary integer value. */
proto_tree_add_item_ret_uint(tree, hf_pfcp_srr_id, tvb, offset, 1, ENC_BIG_ENDIAN, &srr_id);
offset += 1;
proto_item_append_text(item, "%u", srr_id);
return offset;
}
static void static void
dissect_pfcp_failed_rule_id(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_) dissect_pfcp_failed_rule_id(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_)
{ {
@ -5062,7 +5115,7 @@ dissect_pfcp_failed_rule_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t
/* 6 to p Rule ID value /* 6 to p Rule ID value
* The length and the value of the Rule ID value field shall be set as specified for the * The length and the value of the Rule ID value field shall be set as specified for the
* PDR ID, FAR ID, QER ID, URR ID and BAR ID IE types respectively. * PDR ID, FAR ID, QER ID, URR ID, BAR ID, MAR ID and SRR ID IE types respectively.
*/ */
switch (rule_type) { switch (rule_type) {
case 0: case 0:
@ -5085,6 +5138,14 @@ dissect_pfcp_failed_rule_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *t
/* BAR ID */ /* BAR ID */
offset = decode_pfcp_bar_id(tvb, pinfo, tree, item, offset); offset = decode_pfcp_bar_id(tvb, pinfo, tree, item, offset);
break; break;
case 5:
/* MAR ID */
offset = decode_pfcp_mar_id(tvb, pinfo, tree, item, offset);
break;
case 6:
/* SRR ID */
offset = decode_pfcp_srr_id(tvb, pinfo, tree, item, offset);
break;
default: default:
break; break;
} }
@ -6122,7 +6183,7 @@ static const value_string pfcp_tgpp_interface_type_vals[] = {
{ 1, "S5/S8-U" }, { 1, "S5/S8-U" },
{ 2, "S4-U" }, { 2, "S4-U" },
{ 3, "S11-U" }, { 3, "S11-U" },
{ 4, "S12-U" }, { 4, "S12" },
{ 5, "Gn/Gp-U" }, { 5, "Gn/Gp-U" },
{ 6, "S2a-U" }, { 6, "S2a-U" },
{ 7, "S2b-U" }, { 7, "S2b-U" },
@ -6133,12 +6194,20 @@ static const value_string pfcp_tgpp_interface_type_vals[] = {
{ 12, "N3 Trusted Non-3GPP Access" }, { 12, "N3 Trusted Non-3GPP Access" },
{ 13, "N3 Untrusted Non-3GPP Access" }, { 13, "N3 Untrusted Non-3GPP Access" },
{ 14, "N3 for data forwarding" }, { 14, "N3 for data forwarding" },
{ 15, "N9" }, { 15, "N9 (or N9 for non-roaming)" },
{ 16, "SGi" }, { 16, "SGi" },
{ 17, "N6" }, { 17, "N6" },
{ 18, "N19" }, { 18, "N19" },
{ 19, "S8-U" }, { 19, "S8-U" },
{ 20, "Gp-U" }, { 20, "Gp-U" },
{ 21, "N9 for roaming" },
{ 22, "Iu-U" },
{ 23, "N9 for data forwarding" },
{ 24, "Sxa-U" },
{ 25, "Sxb-U" },
{ 26, "Sxc-U" },
{ 27, "N4-U" },
{ 28, "SGW/UPF GTP-U interface for UL data forwarding" },
{ 0, NULL } { 0, NULL }
}; };
@ -6255,18 +6324,6 @@ dissect_pfcp_deactivation_time(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tr
/* /*
* 8.2.123 MAR ID * 8.2.123 MAR ID
*/ */
static int
decode_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo _U_, proto_tree *tree, proto_item *item, gint offset)
{
guint32 mar_id;
/* Octet 5 to 6 MAR ID*/
proto_tree_add_item_ret_uint(tree, hf_pfcp_mar_id, tvb, offset, 2, ENC_BIG_ENDIAN, &mar_id);
offset += 2;
proto_item_append_text(item, "%u", mar_id);
return offset;
}
static void static void
dissect_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_) dissect_pfcp_mar_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
@ -6965,20 +7022,16 @@ dissect_pfcp_cumulative_rate_ratio_measurement(tvbuff_t *tvb, packet_info *pinfo
/* /*
* 8.2.151 SRR ID * 8.2.151 SRR ID
*/ */
static void static void
dissect_pfcp_srr_id(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_) dissect_pfcp_srr_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type _U_, pfcp_session_args_t *args _U_)
{ {
int offset = 0; int offset = 0;
guint value;
/* Oct 5 The SRR ID value shall be encoded as a binary integer value. */ offset = decode_pfcp_srr_id(tvb, pinfo, tree, item, offset);
proto_tree_add_item_ret_uint(tree, hf_pfcp_srr_id, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
offset++;
proto_item_append_text(item, "%u", value);
if (offset < length) { if (offset < length) {
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, length); proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
} }
} }
@ -8099,7 +8152,7 @@ static const pfcp_ie_t pfcp_ies[] = {
/* 253 */ { dissect_pfcp_nf_instance_id }, /* NF Instance ID Extendable / Clause 8.2.175 */ /* 253 */ { dissect_pfcp_nf_instance_id }, /* NF Instance ID Extendable / Clause 8.2.175 */
/* 254 */ { dissect_pfcp_ethernet_context_information_within_pfcp_session_modification_request }, /* Ethernet Context Information within PFCP Session Modification Request Extendable / Table 7.5.4.21-1 */ /* 254 */ { dissect_pfcp_ethernet_context_information_within_pfcp_session_modification_request }, /* Ethernet Context Information within PFCP Session Modification Request Extendable / Table 7.5.4.21-1 */
/* 255 */ { dissect_pfcp_redundant_transmission_detection_parameters }, /* Redundant Transmission Detection Parameters Extendable / Table 7.5.2.2-5 */ /* 255 */ { dissect_pfcp_redundant_transmission_detection_parameters }, /* Redundant Transmission Detection Parameters Extendable / Table 7.5.2.2-5 */
/* 256 */ { dissect_pfcp_updated_pdr_ie_within_pfcp_session_report_response }, /* Updated PDR IE within PFCP Session Report Response Extendable / Table 7.5.9.3-1 */ /* 256 */ { dissect_pfcp_updated_pdr_ie_within_pfcp_session_modification_response }, /* Updated PDR IE within PFCP Session Modification Response Extendable / Table 7.5.5.5-1 */
/* 257 */ { dissect_pfcp_s_nssai }, /* S-NSSAI Fixed Length / Clause 8.2.176 */ /* 257 */ { dissect_pfcp_s_nssai }, /* S-NSSAI Fixed Length / Clause 8.2.176 */
/* 258 */ { dissect_pfcp_ip_version }, /* IP version Extendable / Clause 8.2.177 */ /* 258 */ { dissect_pfcp_ip_version }, /* IP version Extendable / Clause 8.2.177 */
/* 259 */ { dissect_pfcp_pfcpasreq_flags }, /* PFCPASReq-Flags Extendable / Clause 8.2.178 */ /* 259 */ { dissect_pfcp_pfcpasreq_flags }, /* PFCPASReq-Flags Extendable / Clause 8.2.178 */
@ -8775,9 +8828,9 @@ dissect_pfcp_redundant_transmission_detection_parameters(tvbuff_t *tvb, packet_i
} }
static void static void
dissect_pfcp_updated_pdr_ie_within_pfcp_session_report_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args) dissect_pfcp_updated_pdr_ie_within_pfcp_session_modification_response(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_UPDATED_PDR_IE_WITHIN_PFCP_SESSION_REPORT_RESPONSE], args); dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_UPDATED_PDR_IE_WITHIN_PFCP_SESSION_MODIFICATION_RESPONSE], args);
} }
static void static void
@ -10428,6 +10481,11 @@ proto_register_pfcp(void)
FT_UINT16, BASE_DEC, NULL, 0x0, FT_UINT16, BASE_DEC, NULL, 0x0,
NULL, HFILL } NULL, HFILL }
}, },
{ &hf_pfcp_fq_csid_node_type,
{ "Node Type", "pfcp.fq_csid_node_type",
FT_UINT8, BASE_DEC, VALS(pfcp_fq_csid_node_type_vals), 0x0f,
NULL, HFILL }
},
{ &hf_pfcp_measurement_period, { &hf_pfcp_measurement_period,
{ "Measurement Period", "pfcp.measurement_period", { "Measurement Period", "pfcp.measurement_period",
FT_UINT32, BASE_DEC, NULL, 0x0, FT_UINT32, BASE_DEC, NULL, 0x0,