From: Wenjun Wu <wenjun1.wu@intel.com>
To: dev@dpdk.org, jingjing.wu@intel.com, beilei.xing@intel.com,
qi.z.zhang@intel.com
Cc: Wenjun Wu <wenjun1.wu@intel.com>
Subject: [dpdk-dev] [PATCH v1] net/iavf: support default RSS for IP fragment packet
Date: Mon, 12 Jul 2021 10:39:43 +0800 [thread overview]
Message-ID: <20210712023943.800953-1-wenjun1.wu@intel.com> (raw)
This patch adds default RSS support for IPv4 and IPv6 fragment packet.
Signed-off-by: Wenjun Wu <wenjun1.wu@intel.com>
---
drivers/net/iavf/iavf_hash.c | 60 +++++++++++++++++++++---------------
1 file changed, 36 insertions(+), 24 deletions(-)
diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index 03dae5d999..e76d094aae 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -566,6 +566,29 @@ static struct iavf_flow_parser iavf_hash_parser = {
.stage = IAVF_FLOW_STAGE_RSS,
};
+static void
+iavf_hash_add_fragment_hdr(struct virtchnl_proto_hdrs *hdrs, int layer)
+{
+ struct virtchnl_proto_hdr *hdr1;
+ struct virtchnl_proto_hdr *hdr2;
+ int i;
+
+ if (layer < 0 || layer > hdrs->count)
+ return;
+
+ /* shift headers layer */
+ for (i = hdrs->count; i >= layer; i--) {
+ hdr1 = &hdrs->proto_hdr[i];
+ hdr2 = &hdrs->proto_hdr[i - 1];
+ *hdr1 = *hdr2;
+ }
+
+ /* adding dummy fragment header */
+ hdr1 = &hdrs->proto_hdr[layer];
+ VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, IPV4_FRAG);
+ hdrs->count = ++layer;
+}
+
int
iavf_rss_hash_set(struct iavf_adapter *ad, uint64_t rss_hf, bool add)
{
@@ -580,7 +603,9 @@ iavf_rss_hash_set(struct iavf_adapter *ad, uint64_t rss_hf, bool add)
ETH_RSS_NONFRAG_IPV4_TCP | \
ETH_RSS_NONFRAG_IPV6_TCP | \
ETH_RSS_NONFRAG_IPV4_SCTP | \
- ETH_RSS_NONFRAG_IPV6_SCTP)
+ ETH_RSS_NONFRAG_IPV6_SCTP | \
+ ETH_RSS_FRAG_IPV4 | \
+ ETH_RSS_FRAG_IPV6)
rss_cfg.rss_algorithm = VIRTCHNL_RSS_ALG_TOEPLITZ_ASYMMETRIC;
if (rss_hf & ETH_RSS_IPV4) {
@@ -606,6 +631,10 @@ iavf_rss_hash_set(struct iavf_adapter *ad, uint64_t rss_hf, bool add)
if (rss_hf & ETH_RSS_IPV6) {
rss_cfg.proto_hdrs = inner_ipv6_tmplt;
iavf_add_del_rss_cfg(ad, &rss_cfg, add);
+ if (rss_hf & ETH_RSS_FRAG_IPV6) {
+ rss_cfg.proto_hdrs = outer_ipv6_frag_tmplt;
+ iavf_add_del_rss_cfg(ad, &rss_cfg, add);
+ }
}
if (rss_hf & ETH_RSS_NONFRAG_IPV6_UDP) {
@@ -623,6 +652,12 @@ iavf_rss_hash_set(struct iavf_adapter *ad, uint64_t rss_hf, bool add)
iavf_add_del_rss_cfg(ad, &rss_cfg, add);
}
+ if (rss_hf & ETH_RSS_FRAG_IPV4) {
+ rss_cfg.proto_hdrs = outer_ipv4_tmplt;
+ iavf_hash_add_fragment_hdr(&rss_cfg.proto_hdrs, 1);
+ iavf_add_del_rss_cfg(ad, &rss_cfg, add);
+ }
+
vf->rss_hf = rss_hf & IAVF_RSS_HF_ALL;
return 0;
}
@@ -737,29 +772,6 @@ do { \
REFINE_PROTO_FLD(ADD, fld_2); \
} while (0)
-static void
-iavf_hash_add_fragment_hdr(struct virtchnl_proto_hdrs *hdrs, int layer)
-{
- struct virtchnl_proto_hdr *hdr1;
- struct virtchnl_proto_hdr *hdr2;
- int i;
-
- if (layer < 0 || layer > hdrs->count)
- return;
-
- /* shift headers layer */
- for (i = hdrs->count; i >= layer; i--) {
- hdr1 = &hdrs->proto_hdr[i];
- hdr2 = &hdrs->proto_hdr[i - 1];
- *hdr1 = *hdr2;
- }
-
- /* adding dummy fragment header */
- hdr1 = &hdrs->proto_hdr[layer];
- VIRTCHNL_SET_PROTO_HDR_TYPE(hdr1, IPV4_FRAG);
- hdrs->count = ++layer;
-}
-
/* refine proto hdrs base on l2, l3, l4 rss type */
static void
iavf_refine_proto_hdrs_l234(struct virtchnl_proto_hdrs *proto_hdrs,
--
2.25.1
next reply other threads:[~2021-07-12 2:57 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-12 2:39 Wenjun Wu [this message]
2021-07-12 8:27 ` [dpdk-dev] [PATCH v2] " Wenjun Wu
2021-07-13 0:44 ` Zhang, Qi Z
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210712023943.800953-1-wenjun1.wu@intel.com \
--to=wenjun1.wu@intel.com \
--cc=beilei.xing@intel.com \
--cc=dev@dpdk.org \
--cc=jingjing.wu@intel.com \
--cc=qi.z.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).