From: Long Wu <long...@corigine.com>

Add support for RSS parsing SCTP packets, including ipv4/ipv6 SCTP
and ipv4/ipv6 tunnel SCTP packets.

Signed-off-by: Long Wu <long...@corigine.com>
Reviewed-by: Chaoyong He <chaoyong...@corigine.com>
Reviewed-by: Niklas Söderlund <niklas.soderl...@corigine.com>
---
 drivers/net/nfp/nfp_common.c | 16 +++++++++++++++-
 drivers/net/nfp/nfp_ctrl.h   |  4 ++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c
index a1e37ada11..cfc38db65a 100644
--- a/drivers/net/nfp/nfp_common.c
+++ b/drivers/net/nfp/nfp_common.c
@@ -930,9 +930,11 @@ nfp_net_infos_get(struct rte_eth_dev *dev, struct 
rte_eth_dev_info *dev_info)
                dev_info->flow_type_rss_offloads = RTE_ETH_RSS_IPV4 |
                                                   RTE_ETH_RSS_NONFRAG_IPV4_TCP 
|
                                                   RTE_ETH_RSS_NONFRAG_IPV4_UDP 
|
+                                                  
RTE_ETH_RSS_NONFRAG_IPV4_SCTP |
                                                   RTE_ETH_RSS_IPV6 |
                                                   RTE_ETH_RSS_NONFRAG_IPV6_TCP 
|
-                                                  RTE_ETH_RSS_NONFRAG_IPV6_UDP;
+                                                  RTE_ETH_RSS_NONFRAG_IPV6_UDP 
|
+                                                  
RTE_ETH_RSS_NONFRAG_IPV6_SCTP;
 
                dev_info->reta_size = NFP_NET_CFG_RSS_ITBL_SZ;
                dev_info->hash_key_size = NFP_NET_CFG_RSS_KEY_SZ;
@@ -1336,6 +1338,9 @@ nfp_net_rss_hash_write(struct rte_eth_dev *dev,
        if (rss_hf & RTE_ETH_RSS_NONFRAG_IPV4_UDP)
                cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV4_UDP;
 
+       if (rss_hf & RTE_ETH_RSS_NONFRAG_IPV4_SCTP)
+               cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV4_SCTP;
+
        if (rss_hf & RTE_ETH_RSS_IPV6)
                cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV6;
 
@@ -1345,6 +1350,9 @@ nfp_net_rss_hash_write(struct rte_eth_dev *dev,
        if (rss_hf & RTE_ETH_RSS_NONFRAG_IPV6_UDP)
                cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV6_UDP;
 
+       if (rss_hf & RTE_ETH_RSS_NONFRAG_IPV6_SCTP)
+               cfg_rss_ctrl |= NFP_NET_CFG_RSS_IPV6_SCTP;
+
        cfg_rss_ctrl |= NFP_NET_CFG_RSS_MASK;
        cfg_rss_ctrl |= NFP_NET_CFG_RSS_TOEPLITZ;
 
@@ -1429,6 +1437,12 @@ nfp_net_rss_hash_conf_get(struct rte_eth_dev *dev,
        if (cfg_rss_ctrl & NFP_NET_CFG_RSS_IPV6)
                rss_hf |= RTE_ETH_RSS_NONFRAG_IPV4_UDP | 
RTE_ETH_RSS_NONFRAG_IPV6_UDP;
 
+       if (cfg_rss_ctrl & NFP_NET_CFG_RSS_IPV4_SCTP)
+               rss_hf |= RTE_ETH_RSS_NONFRAG_IPV4_SCTP;
+
+       if (cfg_rss_ctrl & NFP_NET_CFG_RSS_IPV6_SCTP)
+               rss_hf |= RTE_ETH_RSS_NONFRAG_IPV6_SCTP;
+
        /* Propagate current RSS hash functions to caller */
        rss_conf->rss_hf = rss_hf;
 
diff --git a/drivers/net/nfp/nfp_ctrl.h b/drivers/net/nfp/nfp_ctrl.h
index bdc39f8974..75e4458a1b 100644
--- a/drivers/net/nfp/nfp_ctrl.h
+++ b/drivers/net/nfp/nfp_ctrl.h
@@ -56,6 +56,8 @@
 #define NFP_NET_RSS_IPV4_UDP            7
 #define NFP_NET_RSS_IPV6_UDP            8
 #define NFP_NET_RSS_IPV6_EX_UDP         9
+#define NFP_NET_RSS_IPV4_SCTP           10
+#define NFP_NET_RSS_IPV6_SCTP           11
 
 /*
  * @NFP_NET_TXR_MAX:         Maximum number of TX rings
@@ -236,6 +238,8 @@
 #define   NFP_NET_CFG_RSS_IPV4_UDP        (1 << 11) /* RSS for IPv4/UDP */
 #define   NFP_NET_CFG_RSS_IPV6_TCP        (1 << 12) /* RSS for IPv6/TCP */
 #define   NFP_NET_CFG_RSS_IPV6_UDP        (1 << 13) /* RSS for IPv6/UDP */
+#define   NFP_NET_CFG_RSS_IPV4_SCTP       (1 << 14) /* RSS for IPv4/SCTP */
+#define   NFP_NET_CFG_RSS_IPV6_SCTP       (1 << 15) /* RSS for IPv6/SCTP */
 #define   NFP_NET_CFG_RSS_TOEPLITZ        (1 << 24) /* Use Toeplitz hash */
 #define NFP_NET_CFG_RSS_KEY             (NFP_NET_CFG_RSS_BASE + 0x4)
 #define NFP_NET_CFG_RSS_KEY_SZ          0x28
-- 
2.29.3

Reply via email to