pfcp: Update to 3GPP TS 29.244 V16.0.0
Change-Id: I92427cc5c5a2574faf2a592cd8ef5df90028229a Reviewed-on: https://code.wireshark.org/review/33864 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
parent
1f52712444
commit
59b133c35e
|
@ -522,6 +522,30 @@ static int hf_pfcp_apn_dnn = -1;
|
||||||
|
|
||||||
static int hf_pfcp_tgpp_interface_type = -1;
|
static int hf_pfcp_tgpp_interface_type = -1;
|
||||||
|
|
||||||
|
static int hf_pfcp_pfcpsrreq_flags = -1;
|
||||||
|
static int hf_pfcp_pfcpsrreq_flags_b0_psdbu = -1;
|
||||||
|
|
||||||
|
static int hf_pfcp_pfcpaureq_flags = -1;
|
||||||
|
static int hf_pfcp_pfcpaureq_flags_b0_parps = -1;
|
||||||
|
|
||||||
|
static int hf_pfcp_activation_time = -1;
|
||||||
|
static int hf_pfcp_deactivation_time = -1;
|
||||||
|
|
||||||
|
static int hf_pfcp_mar_id = -1;
|
||||||
|
|
||||||
|
static int hf_pfcp_steering_functionality = -1;
|
||||||
|
static int hf_pfcp_steering_mode = -1;
|
||||||
|
|
||||||
|
static int hf_pfcp_weight = -1;
|
||||||
|
static int hf_pfcp_priority = -1;
|
||||||
|
|
||||||
|
static int hf_pfcp_ue_ip_address_pool_identity = -1;
|
||||||
|
|
||||||
|
static int hf_pfcp_pfcp_alternative_smf_ip_address_flags = -1;
|
||||||
|
static int hf_pfcp_alternative_smf_ip_address_ipv4 = -1;
|
||||||
|
static int hf_pfcp_alternative_smf_ip_address_ipv6 = -1;
|
||||||
|
|
||||||
|
|
||||||
static int ett_pfcp = -1;
|
static int ett_pfcp = -1;
|
||||||
static int ett_pfcp_flags = -1;
|
static int ett_pfcp_flags = -1;
|
||||||
static int ett_pfcp_ie = -1;
|
static int ett_pfcp_ie = -1;
|
||||||
|
@ -574,6 +598,10 @@ static int ett_pfcp_ethernet_pdu_session_information = -1;
|
||||||
static int ett_pfcp_adf = -1;
|
static int ett_pfcp_adf = -1;
|
||||||
static int ett_pfcp_aurl = -1;
|
static int ett_pfcp_aurl = -1;
|
||||||
static int ett_pfcp_adnp = -1;
|
static int ett_pfcp_adnp = -1;
|
||||||
|
static int ett_pfcp_pfcpsrreq = -1;
|
||||||
|
static int ett_pfcp_pfcpaureq = -1;
|
||||||
|
static int ett_pfcp_alternative_smf_ip_address_flags = -1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static expert_field ei_pfcp_ie_reserved = EI_INIT;
|
static expert_field ei_pfcp_ie_reserved = EI_INIT;
|
||||||
|
@ -656,6 +684,13 @@ static void dissect_pfcp_remove_traffic_endpoint(tvbuff_t *tvb, packet_info *pin
|
||||||
static void dissect_pfcp_ethernet_packet_filter(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_packet_filter(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_traffic_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_ethernet_traffic_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_additional_monitoring_time(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_additional_monitoring_time(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_create_mar(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_update_mar(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_mar(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_access_forwarding_action_information_1(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_access_forwarding_action_information_2(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_update_access_forwarding_action_information_1(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_update_access_forwarding_action_information_2(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 = {
|
static const true_false_string pfcp_id_predef_dynamic_tfs = {
|
||||||
"Predefined by UP",
|
"Predefined by UP",
|
||||||
|
@ -771,6 +806,14 @@ static value_string_ext pfcp_message_type_ext = VALUE_STRING_EXT_INIT(pfcp_messa
|
||||||
#define PFCP_IE_EVENT_INFORMATION 148
|
#define PFCP_IE_EVENT_INFORMATION 148
|
||||||
#define PFCP_IE_EVENT_REPORTING 149
|
#define PFCP_IE_EVENT_REPORTING 149
|
||||||
|
|
||||||
|
#define PFCP_IE_CREATE_MAR 165
|
||||||
|
#define PFCP_IE_ACCESS_FORWARDING_ACTION_INORMATION_1 166
|
||||||
|
#define PFCP_IE_ACCESS_FORWARDING_ACTION_INORMATION_2 167
|
||||||
|
#define PFCP_IE_REMOVE_MAR 168
|
||||||
|
#define PFCP_IE_UPDATE_MAR 169
|
||||||
|
#define PFCP_IE_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_1 175
|
||||||
|
#define PFCP_IE_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_2 176
|
||||||
|
|
||||||
static const value_string pfcp_ie_type[] = {
|
static const value_string pfcp_ie_type[] = {
|
||||||
|
|
||||||
{ 0, "Reserved"},
|
{ 0, "Reserved"},
|
||||||
|
@ -934,7 +977,20 @@ static const value_string pfcp_ie_type[] = {
|
||||||
{ 158, "Paging Policy Indicator"}, /* Extendable / Subclause 8.2.116 */
|
{ 158, "Paging Policy Indicator"}, /* Extendable / Subclause 8.2.116 */
|
||||||
{ 159, "APN/DNN"}, /* Variable Length / Subclause 8.2.117 */
|
{ 159, "APN/DNN"}, /* Variable Length / Subclause 8.2.117 */
|
||||||
{ 160, "3GPP Interface Type"}, /* Extendable / Subclause 8.2.118 */
|
{ 160, "3GPP Interface Type"}, /* Extendable / Subclause 8.2.118 */
|
||||||
//161 to 32767 Spare. For future use.
|
{ 161, "PFCPSRReq-Flags"}, /* ExtendableClause 8.2.119 */
|
||||||
|
{ 162, "PFCPAUReq-Flags"}, /* ExtendableClause 8.2.120 */
|
||||||
|
{ 163, "Activation Time"}, /* Extendable Clause 8.2.121 */
|
||||||
|
{ 164, "Deactivation Time"}, /* Extendable Clause 8.2.122 */
|
||||||
|
{ 165, "Create MAR"}, /* Extendable / Table 7.5.2.8-1 */
|
||||||
|
{ 166, "Access Forwarding Action Information 1"}, /* Extendable / Table 7.5.2.8-2 */
|
||||||
|
{ 167, "Access Forwarding Action Information 2"}, /* Extendable / Table 7.5.2.8-3 */
|
||||||
|
{ 168, "Remove MAR"}, /* Extendable / Table 7.5.2.15-1 */
|
||||||
|
{ 169, "Update MAR"}, /* Extendable / Table 7.5.2.15-2 */
|
||||||
|
{ 175, "Update Access Forwarding Action Information 1"}, /* Fixed / Clause 8.2.126 */
|
||||||
|
{ 176, "Update Access Forwarding Action Information 2"}, /* Extendable / Clause 8.2.127 */
|
||||||
|
{ 177, "UE IP address Pool Identity"}, /* Variable Length / Clause 8.2.128 */
|
||||||
|
{ 178, "Alternative SMF IP Address"}, /* Extendable / Clause 8.2.129 */
|
||||||
|
//179 to 32767 Spare. For future use.
|
||||||
//32768 to 65535 Vendor-specific IEs.
|
//32768 to 65535 Vendor-specific IEs.
|
||||||
{0, NULL}
|
{0, NULL}
|
||||||
};
|
};
|
||||||
|
@ -2059,11 +2115,11 @@ dissect_pfcp_redirect_information(tvbuff_t *tvb, packet_info *pinfo, proto_tree
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* p-(p+1) Other Redirect Server Address Length=b */
|
/* p-(p+1) Other Redirect Server Address Length=b */
|
||||||
proto_tree_add_item_ret_uint(tree, hf_pfcp_redirect_server_addr_len, tvb, offset, 2, ENC_BIG_ENDIAN, &addr_len);
|
proto_tree_add_item_ret_uint(tree, hf_pfcp_other_redirect_server_addr_len, tvb, offset, 2, ENC_BIG_ENDIAN, &addr_len);
|
||||||
offset+=2;
|
offset+=2;
|
||||||
|
|
||||||
/* (p+2)-(p+2+b-1) Other Redirect Server Address */
|
/* (p+2)-(p+2+b-1) Other Redirect Server Address */
|
||||||
proto_tree_add_item(tree, hf_pfcp_redirect_server_address, tvb, offset, addr_len, ENC_UTF_8 | ENC_NA);
|
proto_tree_add_item(tree, hf_pfcp_other_redirect_server_address, tvb, offset, addr_len, ENC_UTF_8 | ENC_NA);
|
||||||
offset += addr_len;
|
offset += addr_len;
|
||||||
|
|
||||||
if (offset < length) {
|
if (offset < length) {
|
||||||
|
@ -5309,6 +5365,279 @@ dissect_pfcp_tgpp_interface_type(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.119 PFCPSRReq-Flags
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dissect_pfcp_pfcpsrreq_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 const int * pfcp_pfcpsrreq_flags[] = {
|
||||||
|
&hf_pfcp_spare_b7_b1,
|
||||||
|
&hf_pfcp_pfcpsrreq_flags_b0_psdbu,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
/* Octet 5 Spare Spare Spare Spare Spare Spare Spare PSDBU */
|
||||||
|
proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_pfcp_pfcpsrreq_flags,
|
||||||
|
ett_pfcp_pfcpsrreq, pfcp_pfcpsrreq_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT);
|
||||||
|
offset += 1;
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.120 PFCPAUReq-Flags
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dissect_pfcp_pfcpaureq_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 const int * pfcp_pfcpaureq_flags[] = {
|
||||||
|
&hf_pfcp_spare_b7_b1,
|
||||||
|
&hf_pfcp_pfcpaureq_flags_b0_parps,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
/* Octet 5 Spare Spare Spare Spare Spare Spare Spare PSDBU */
|
||||||
|
proto_tree_add_bitmask_with_flags(tree, tvb, offset, hf_pfcp_pfcpaureq_flags,
|
||||||
|
ett_pfcp_pfcpaureq, pfcp_pfcpaureq_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT);
|
||||||
|
offset += 1;
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.121 Activation Time
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dissect_pfcp_activation_time(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;
|
||||||
|
const gchar *time_str;
|
||||||
|
|
||||||
|
/* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
|
||||||
|
* format as defined in section 6 of IETF RFC 5905
|
||||||
|
*/
|
||||||
|
|
||||||
|
time_str = tvb_ntp_fmt_ts_sec(tvb, 0);
|
||||||
|
proto_tree_add_string(tree, hf_pfcp_activation_time, tvb, offset, 4, time_str);
|
||||||
|
proto_item_append_text(item, "%s", time_str);
|
||||||
|
offset += 4;
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.122 Dectivation Time
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dissect_pfcp_deactivation_time(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;
|
||||||
|
const gchar *time_str;
|
||||||
|
|
||||||
|
/* Octets 5 to 8 shall be encoded in the same format as the first four octets of the 64-bit timestamp
|
||||||
|
* format as defined in section 6 of IETF RFC 5905
|
||||||
|
*/
|
||||||
|
|
||||||
|
time_str = tvb_ntp_fmt_ts_sec(tvb, 0);
|
||||||
|
proto_tree_add_string(tree, hf_pfcp_deactivation_time, tvb, offset, 4, time_str);
|
||||||
|
proto_item_append_text(item, "%s", time_str);
|
||||||
|
offset += 4;
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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
|
||||||
|
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_)
|
||||||
|
{
|
||||||
|
int offset = 0;
|
||||||
|
|
||||||
|
offset = decode_pfcp_mar_id(tvb, pinfo, tree, item, offset);
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.124 Steering Functionality
|
||||||
|
*/
|
||||||
|
static const value_string pfcp_steering_functionality_vals[] = {
|
||||||
|
{ 0, "ATSSS-LL" },
|
||||||
|
{ 1, "MPTCP" },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_steering_functionality(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 value;
|
||||||
|
/* Octet 5 Steering Functionality Value
|
||||||
|
* The Steering Functionality shall be encoded as a 4 bits binary
|
||||||
|
*/
|
||||||
|
proto_tree_add_item_ret_uint(tree, hf_pfcp_steering_functionality, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
|
||||||
|
offset++;
|
||||||
|
|
||||||
|
proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_steering_functionality_vals, "Unknown"));
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.125 Steering Mode
|
||||||
|
*/
|
||||||
|
static const value_string pfcp_steering_mode_vals[] = {
|
||||||
|
{ 0, "Active-Standby" },
|
||||||
|
{ 1, "Smallest Delay" },
|
||||||
|
{ 2, "Load Balancing" },
|
||||||
|
{ 3, "Priority-based" },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_steering_mode(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 value;
|
||||||
|
/* Octet 5 Steering Mode Value
|
||||||
|
* The Steering Mode shall be encoded as a 4 bits binary
|
||||||
|
*/
|
||||||
|
proto_tree_add_item_ret_uint(tree, hf_pfcp_steering_mode, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
|
||||||
|
offset++;
|
||||||
|
|
||||||
|
proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_steering_mode_vals, "Unknown"));
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.126 Weight
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dissect_pfcp_weight(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 Weight */
|
||||||
|
proto_tree_add_item_ret_uint(tree, hf_pfcp_weight, tvb, 0, 1, ENC_BIG_ENDIAN, &value);
|
||||||
|
|
||||||
|
proto_item_append_text(item, "%u", value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.127 Priority
|
||||||
|
*/
|
||||||
|
static const value_string pfcp_priority_vals[] = {
|
||||||
|
{ 0, "Active" },
|
||||||
|
{ 1, "Standby" },
|
||||||
|
{ 2, "High" },
|
||||||
|
{ 3, "Low" },
|
||||||
|
{ 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_priority(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 value;
|
||||||
|
/* Octet 5 Priority Value
|
||||||
|
* The Priority shall be encoded as a 4 bits binary.
|
||||||
|
*/
|
||||||
|
proto_tree_add_item_ret_uint(tree, hf_pfcp_priority, tvb, offset, 1, ENC_BIG_ENDIAN, &value);
|
||||||
|
offset++;
|
||||||
|
|
||||||
|
proto_item_append_text(item, "%s", val_to_str_const(value, pfcp_priority_vals, "Unknown"));
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.128 UE IP address Pool Identity
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dissect_pfcp_ue_ip_address_pool_identity(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) UE IP address Pool Identity
|
||||||
|
* The UE IP address Pool Identity field shall be encoded as an OctetString
|
||||||
|
* (see the Framed-Ipv6-Pool and Framed-Pool in clause 12.6.3 of 3GPP TS 29.561).
|
||||||
|
*/
|
||||||
|
proto_tree_add_item(tree, hf_pfcp_ue_ip_address_pool_identity, tvb, offset, length, ENC_NA);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 8.2.129 Alternative SMF IP Address
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
dissect_pfcp_alternative_smf_ip_address(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;
|
||||||
|
guint64 alternative_smf_ip_address_flags;
|
||||||
|
|
||||||
|
static const int * pfcp_alternative_smf_ip_address_flags[] = {
|
||||||
|
&hf_pfcp_spare_b7_b2,
|
||||||
|
&hf_pfcp_b1_v4,
|
||||||
|
&hf_pfcp_b0_v6,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
/* Octet 5 Spare V4 V6 */
|
||||||
|
proto_tree_add_bitmask_with_flags_ret_uint64(tree, tvb, offset, hf_pfcp_pfcp_alternative_smf_ip_address_flags,
|
||||||
|
ett_pfcp_alternative_smf_ip_address_flags, pfcp_alternative_smf_ip_address_flags, ENC_BIG_ENDIAN, BMT_NO_FALSE | BMT_NO_INT | BMT_NO_TFS, &alternative_smf_ip_address_flags);
|
||||||
|
offset += 1;
|
||||||
|
|
||||||
|
/* IPv4 address (if present) */
|
||||||
|
if (alternative_smf_ip_address_flags & 0x2) {
|
||||||
|
proto_tree_add_item(tree, hf_pfcp_alternative_smf_ip_address_ipv4, tvb, offset, 4, ENC_BIG_ENDIAN);
|
||||||
|
proto_item_append_text(item, ", IPv4 %s", tvb_ip_to_str(tvb, offset));
|
||||||
|
offset += 4;
|
||||||
|
}
|
||||||
|
/* IPv6 address (if present) */
|
||||||
|
if (alternative_smf_ip_address_flags & 0x1) {
|
||||||
|
proto_tree_add_item(tree, hf_pfcp_alternative_smf_ip_address_ipv6, tvb, offset, 16, ENC_NA);
|
||||||
|
proto_item_append_text(item, ", IPv6 %s", tvb_ip6_to_str(tvb, offset));
|
||||||
|
offset += 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset < length) {
|
||||||
|
proto_tree_add_expert(tree, pinfo, &ei_pfcp_ie_data_not_decoded, tvb, offset, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Array of functions to dissect IEs
|
/* 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)
|
* (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, proto_item *item, guint16 length, guint8 message_type, pfcp_session_args_t *args)
|
||||||
*/
|
*/
|
||||||
|
@ -5478,7 +5807,25 @@ static const pfcp_ie_t pfcp_ies[] = {
|
||||||
/* 158 */ { dissect_pfcp_paging_policy_indicator }, /* Paging Policy Indicator Extendable / Subclause 8.2.116 */
|
/* 158 */ { dissect_pfcp_paging_policy_indicator }, /* Paging Policy Indicator Extendable / Subclause 8.2.116 */
|
||||||
/* 159 */ { dissect_pfcp_apn_dnn }, /* APN/DNN Variable Length / Subclause 8.2.117 */
|
/* 159 */ { dissect_pfcp_apn_dnn }, /* APN/DNN Variable Length / Subclause 8.2.117 */
|
||||||
/* 160 */ { dissect_pfcp_tgpp_interface_type }, /* 3GPP Interface Type Extendable / Subclause 8.2.118 */
|
/* 160 */ { dissect_pfcp_tgpp_interface_type }, /* 3GPP Interface Type Extendable / Subclause 8.2.118 */
|
||||||
//161 to 32767 Spare. For future use.
|
/* 161 */ { dissect_pfcp_pfcpsrreq_flags }, /* PFCPSRReq-Flags Extendable / Subclause 8.2.119 */
|
||||||
|
/* 162 */ { dissect_pfcp_pfcpaureq_flags }, /* PFCPAUReq-Flags Extendable / Subclause 8.2.120 */
|
||||||
|
/* 163 */ { dissect_pfcp_activation_time }, /* Activation Time Extendable / Subclause 8.2.121 */
|
||||||
|
/* 164 */ { dissect_pfcp_deactivation_time }, /* Deactivation Time Extendable / Subclause 8.2.122 */
|
||||||
|
/* 165 */ { dissect_pfcp_create_mar }, /* Create MAR Extendable / Table 7.5.2.8-1 */
|
||||||
|
/* 166 */ { dissect_pfcp_access_forwarding_action_information_1 }, /* Access Forwarding Action Information 1 Extendable / Table 7.5.2.8-2 */
|
||||||
|
/* 167 */ { dissect_pfcp_access_forwarding_action_information_2 }, /* Access Forwarding Action Information 2 Extendable / Table 7.5.2.8-3 */
|
||||||
|
/* 168 */ { dissect_pfcp_remove_mar }, /* Remove MAR Extendable / Table 7.5.4.15-1*/
|
||||||
|
/* 169 */ { dissect_pfcp_update_mar }, /* Update MAR Extendable / Table 7.5.4.16-1 */
|
||||||
|
/* 170 */ { dissect_pfcp_mar_id }, /* MAR ID Extendable / Subclause 8.2.123 */
|
||||||
|
/* 171 */ { dissect_pfcp_steering_functionality }, /* Steering Functionality Extendable / Subclause 8.2.124 */
|
||||||
|
/* 172 */ { dissect_pfcp_steering_mode }, /* Steering Mode Extendable / Subclause 8.2.125 */
|
||||||
|
/* 173 */ { dissect_pfcp_weight }, /* Weight Fixed / Clause 8.2.126 */
|
||||||
|
/* 174 */ { dissect_pfcp_priority }, /* Priority Extendable / Subclause 8.2.127 */
|
||||||
|
/* 175 */ { dissect_pfcp_update_access_forwarding_action_information_1 }, /* Update Access Forwarding Action Information 1 Extendable / Table 7.5.4.16-2 */
|
||||||
|
/* 176 */ { dissect_pfcp_update_access_forwarding_action_information_2 }, /* Update Access Forwarding Action Information 2 Extendable / Table 7.5.4.16-3 */
|
||||||
|
/* 177 */ { dissect_pfcp_ue_ip_address_pool_identity }, /* UE IP address Pool Identity Variable Length / Clause 8.2.128 */
|
||||||
|
/* 178 */ { dissect_pfcp_alternative_smf_ip_address }, /* Alternative SMF IP Address Extendable / Clause 8.2.129 */
|
||||||
|
//179 to 32767 Spare. For future use.
|
||||||
//32768 to 65535 Vendor-specific IEs.
|
//32768 to 65535 Vendor-specific IEs.
|
||||||
{ NULL }, /* End of List */
|
{ NULL }, /* End of List */
|
||||||
};
|
};
|
||||||
|
@ -5908,6 +6255,48 @@ dissect_pfcp_additional_monitoring_time(tvbuff_t *tvb, packet_info *pinfo, proto
|
||||||
dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_ADDITIONAL_MONITORING_TIME], args);
|
dissect_pfcp_grouped_ie(tvb, pinfo, tree, item, length, message_type, ett_pfcp_elem[PFCP_IE_ADDITIONAL_MONITORING_TIME], args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_create_mar(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_CREATE_MAR], args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_access_forwarding_action_information_1(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_ACCESS_FORWARDING_ACTION_INORMATION_1], args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_access_forwarding_action_information_2(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_ACCESS_FORWARDING_ACTION_INORMATION_2], args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_update_mar(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_UPDATE_MAR], args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_remove_mar(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_MAR], args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_update_access_forwarding_action_information_1(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_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_1], args);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dissect_pfcp_update_access_forwarding_action_information_2(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_UPDATE_ACCESS_FORWARDING_ACTION_INORMATION_2], args);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dissect_pfcp_ies_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gint offset, guint8 message_type, pfcp_session_args_t *args)
|
dissect_pfcp_ies_common(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, gint offset, guint8 message_type, pfcp_session_args_t *args)
|
||||||
{
|
{
|
||||||
|
@ -8349,10 +8738,94 @@ proto_register_pfcp(void)
|
||||||
FT_UINT8, BASE_DEC, VALS(pfcp_tgpp_interface_type_vals), 0x3f,
|
FT_UINT8, BASE_DEC, VALS(pfcp_tgpp_interface_type_vals), 0x3f,
|
||||||
NULL, HFILL }
|
NULL, HFILL }
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ &hf_pfcp_pfcpsrreq_flags,
|
||||||
|
{ "Flags", "pfcp.srreq_flags",
|
||||||
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
{ &hf_pfcp_pfcpsrreq_flags_b0_psdbu,
|
||||||
|
{ "PSDBU (PFCP Session Deleted By the UP function)", "pfcp.srreq_flags.psdbu",
|
||||||
|
FT_BOOLEAN, 8, NULL, 0x01,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
|
||||||
|
{ &hf_pfcp_pfcpaureq_flags,
|
||||||
|
{ "Flags", "pfcp.aureq_flags",
|
||||||
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
{ &hf_pfcp_pfcpaureq_flags_b0_parps,
|
||||||
|
{ "PARPBS (PFCP Association Release Preparation Start)", "pfcp.aureq_flags.parps",
|
||||||
|
FT_BOOLEAN, 8, NULL, 0x01,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
|
||||||
|
{ &hf_pfcp_activation_time,
|
||||||
|
{ "Activation Time", "pfcp.activation_time",
|
||||||
|
FT_STRING, BASE_NONE, NULL, 0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
{ &hf_pfcp_deactivation_time,
|
||||||
|
{ "Dectivation Time", "pfcp.deactivation_time",
|
||||||
|
FT_STRING, BASE_NONE, NULL, 0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
|
||||||
|
{ &hf_pfcp_mar_id,
|
||||||
|
{ "MAR ID", "pfcp.mar_id",
|
||||||
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
|
||||||
|
{ &hf_pfcp_steering_functionality,
|
||||||
|
{ "Steering Functionality", "pfcp.steering_functionality",
|
||||||
|
FT_UINT8, BASE_DEC, VALS(pfcp_steering_functionality_vals), 0xF,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
{ &hf_pfcp_steering_mode,
|
||||||
|
{ "Steering Mode", "pfcp.steering_mode",
|
||||||
|
FT_UINT8, BASE_DEC, VALS(pfcp_steering_mode_vals), 0xF,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
|
||||||
|
{ &hf_pfcp_weight,
|
||||||
|
{ "Weight", "pfcp.weight",
|
||||||
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
{ &hf_pfcp_priority,
|
||||||
|
{ "Priority", "pfcp.priority",
|
||||||
|
FT_UINT8, BASE_DEC, VALS(pfcp_priority_vals), 0xF,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
|
||||||
|
{ &hf_pfcp_ue_ip_address_pool_identity,
|
||||||
|
{ "UE IP address Pool Identity", "pfcp.ue_ip_address_pool_identity",
|
||||||
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{ &hf_pfcp_pfcp_alternative_smf_ip_address_flags,
|
||||||
|
{ "Flags", "pfcp.alternative_smf_ip_address",
|
||||||
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
{ &hf_pfcp_alternative_smf_ip_address_ipv4,
|
||||||
|
{ "IPv4 address", "pfcp.alternative_smf_ip_address.ipv4",
|
||||||
|
FT_IPv4, BASE_NONE, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
|
{ &hf_pfcp_alternative_smf_ip_address_ipv6,
|
||||||
|
{ "IPv6 address", "pfcp.alternative_smf_ip_address.ipv6",
|
||||||
|
FT_IPv6, BASE_NONE, NULL, 0x0,
|
||||||
|
NULL, HFILL }
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Setup protocol subtree array */
|
/* Setup protocol subtree array */
|
||||||
#define NUM_INDIVIDUAL_ELEMS_PFCP 52
|
#define NUM_INDIVIDUAL_ELEMS_PFCP 55
|
||||||
gint *ett[NUM_INDIVIDUAL_ELEMS_PFCP +
|
gint *ett[NUM_INDIVIDUAL_ELEMS_PFCP +
|
||||||
(NUM_PFCP_IES - 1)];
|
(NUM_PFCP_IES - 1)];
|
||||||
|
|
||||||
|
@ -8408,6 +8881,9 @@ proto_register_pfcp(void)
|
||||||
ett[49] = &ett_pfcp_adf;
|
ett[49] = &ett_pfcp_adf;
|
||||||
ett[50] = &ett_pfcp_aurl;
|
ett[50] = &ett_pfcp_aurl;
|
||||||
ett[51] = &ett_pfcp_adnp;
|
ett[51] = &ett_pfcp_adnp;
|
||||||
|
ett[52] = &ett_pfcp_pfcpsrreq;
|
||||||
|
ett[53] = &ett_pfcp_pfcpaureq;
|
||||||
|
ett[54] = &ett_pfcp_alternative_smf_ip_address_flags;
|
||||||
|
|
||||||
|
|
||||||
static ei_register_info ei[] = {
|
static ei_register_info ei[] = {
|
||||||
|
|
Loading…
Reference in New Issue