Thread (5 messages) 5 messages, 3 authors, 2021-01-07

Re: [dpdk-dev] [PATCH v1] net/iavf: support FDIR TCP/UDP pattern without input set

From: Ferruh Yigit <hidden>
Date: 2021-01-04 15:22:00

On 12/1/2020 8:32 AM, Yuying Zhang wrote:
This patch adds an input set refinement function to support outer
and inner TCP/UDP patterns without input set for flow director filter.
Can you please describe more what is supported now, it can be even better to 
give same samples which patter is supported now, which was not supported before?
quoted hunk ↗ jump to hunk
Signed-off-by: Yuying Zhang <redacted>
---
  drivers/net/iavf/iavf_fdir.c | 67 ++++++++++++++++++++++++++++++------
  1 file changed, 56 insertions(+), 11 deletions(-)
diff --git a/drivers/net/iavf/iavf_fdir.c b/drivers/net/iavf/iavf_fdir.c
index 7054bde0b..2c57313e4 100644
--- a/drivers/net/iavf/iavf_fdir.c
+++ b/drivers/net/iavf/iavf_fdir.c
@@ -448,9 +448,56 @@ iavf_fdir_parse_action(struct iavf_adapter *ad,
  	return 0;
  }
  
+static int
+iavf_fdir_refine_input_set(const uint64_t input_set,
+			   const uint64_t input_set_mask,
+			   struct iavf_fdir_conf *filter)
+{
+	struct virtchnl_proto_hdr *hdr, *hdr_last;
+	struct rte_flow_item_ipv4 ipv4_spec;
+	struct rte_flow_item_ipv6 ipv6_spec;
+	int last_layer;
+	uint8_t proto_id;
+
+	if (input_set & ~input_set_mask)
+		return -rte_errno;
What is the value of the 'rte_errno' at this stage, why returning it instead of 
setting it?
+	else if (input_set)
+		return 0;
+
+	last_layer = filter->add_fltr.rule_cfg.proto_hdrs.count - 1;
+	hdr_last = &filter->add_fltr.rule_cfg.proto_hdrs.proto_hdr[last_layer];
+	if (hdr_last->type == VIRTCHNL_PROTO_HDR_TCP)
+		proto_id = 6;
+	else if (hdr_last->type == VIRTCHNL_PROTO_HDR_UDP)
+		proto_id = 17;
+	else
+		return -rte_errno;
+
+	hdr = &filter->add_fltr.rule_cfg.proto_hdrs.proto_hdr[last_layer - 1];
Do we know here that 'last_layer' > 0 ?
+	switch (hdr->type) {
+	case VIRTCHNL_PROTO_HDR_IPV4:
+		VIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(hdr, IPV4, PROT);
+		memset(&ipv4_spec, 0, sizeof(ipv4_spec));
+		ipv4_spec.hdr.next_proto_id = proto_id;
+		rte_memcpy(hdr->buffer, &ipv4_spec.hdr,
+			   sizeof(ipv4_spec.hdr));
+		return 0;
+	case VIRTCHNL_PROTO_HDR_IPV6:
+		VIRTCHNL_ADD_PROTO_HDR_FIELD_BIT(hdr, IPV6, PROT);
+		memset(&ipv6_spec, 0, sizeof(ipv6_spec));
+		ipv6_spec.hdr.proto = proto_id;
+		rte_memcpy(hdr->buffer, &ipv6_spec.hdr,
+			   sizeof(ipv6_spec.hdr));
+		return 0;
+	default:
+		return -rte_errno;
+	}
+}
+
<...>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help