Add support for PPP over L2TPv2 over UDP over outer ipv6 protocol
RSS Hash based on inner IP src/dst address and TCP/UDP src/dst port.

Signed-off-by: Jie Wang <jie1x.w...@intel.com>
---
 drivers/net/iavf/iavf_generic_flow.c | 64 ++++++++++++++++++++++++++++
 drivers/net/iavf/iavf_generic_flow.h |  6 +++
 drivers/net/iavf/iavf_hash.c         |  6 +++
 3 files changed, 76 insertions(+)

diff --git a/drivers/net/iavf/iavf_generic_flow.c 
b/drivers/net/iavf/iavf_generic_flow.c
index ab2f91c57c..33ec57f8bc 100644
--- a/drivers/net/iavf/iavf_generic_flow.c
+++ b/drivers/net/iavf/iavf_generic_flow.c
@@ -1676,6 +1676,70 @@ enum rte_flow_item_type 
iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_tcp[] = {
        RTE_FLOW_ITEM_TYPE_END,
 };
 
+enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4[] = {
+       RTE_FLOW_ITEM_TYPE_ETH,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_UDP,
+       RTE_FLOW_ITEM_TYPE_L2TPV2,
+       RTE_FLOW_ITEM_TYPE_PPP,
+       RTE_FLOW_ITEM_TYPE_IPV4,
+       RTE_FLOW_ITEM_TYPE_END,
+};
+
+enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6[] = {
+       RTE_FLOW_ITEM_TYPE_ETH,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_UDP,
+       RTE_FLOW_ITEM_TYPE_L2TPV2,
+       RTE_FLOW_ITEM_TYPE_PPP,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_END,
+};
+
+enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_udp[] = {
+       RTE_FLOW_ITEM_TYPE_ETH,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_UDP,
+       RTE_FLOW_ITEM_TYPE_L2TPV2,
+       RTE_FLOW_ITEM_TYPE_PPP,
+       RTE_FLOW_ITEM_TYPE_IPV4,
+       RTE_FLOW_ITEM_TYPE_UDP,
+       RTE_FLOW_ITEM_TYPE_END,
+};
+
+enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_tcp[] = {
+       RTE_FLOW_ITEM_TYPE_ETH,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_UDP,
+       RTE_FLOW_ITEM_TYPE_L2TPV2,
+       RTE_FLOW_ITEM_TYPE_PPP,
+       RTE_FLOW_ITEM_TYPE_IPV4,
+       RTE_FLOW_ITEM_TYPE_TCP,
+       RTE_FLOW_ITEM_TYPE_END,
+};
+
+enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_udp[] = {
+       RTE_FLOW_ITEM_TYPE_ETH,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_UDP,
+       RTE_FLOW_ITEM_TYPE_L2TPV2,
+       RTE_FLOW_ITEM_TYPE_PPP,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_UDP,
+       RTE_FLOW_ITEM_TYPE_END,
+};
+
+enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_tcp[] = {
+       RTE_FLOW_ITEM_TYPE_ETH,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_UDP,
+       RTE_FLOW_ITEM_TYPE_L2TPV2,
+       RTE_FLOW_ITEM_TYPE_PPP,
+       RTE_FLOW_ITEM_TYPE_IPV6,
+       RTE_FLOW_ITEM_TYPE_TCP,
+       RTE_FLOW_ITEM_TYPE_END,
+};
+
 
 
 typedef struct iavf_flow_engine * (*parse_engine_t)(struct iavf_adapter *ad,
diff --git a/drivers/net/iavf/iavf_generic_flow.h 
b/drivers/net/iavf/iavf_generic_flow.h
index c976b60c79..f2b54e1944 100644
--- a/drivers/net/iavf/iavf_generic_flow.h
+++ b/drivers/net/iavf/iavf_generic_flow.h
@@ -417,6 +417,12 @@ extern enum rte_flow_item_type 
iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_udp[];
 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_tcp[];
 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_udp[];
 extern enum rte_flow_item_type iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_tcp[];
+extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4[];
+extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6[];
+extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_udp[];
+extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_tcp[];
+extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_udp[];
+extern enum rte_flow_item_type iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_tcp[];
 
 
 extern const struct rte_flow_ops iavf_flow_ops;
diff --git a/drivers/net/iavf/iavf_hash.c b/drivers/net/iavf/iavf_hash.c
index e725326d5c..b240c22b5a 100644
--- a/drivers/net/iavf/iavf_hash.c
+++ b/drivers/net/iavf/iavf_hash.c
@@ -543,6 +543,9 @@ static struct iavf_pattern_match_item 
iavf_hash_pattern_list[] = {
        {iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4,     
IAVF_RSS_TYPE_INNER_IPV4,       &udp_l2tpv2_ppp_ipv4_tmplt},
        {iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_udp, 
IAVF_RSS_TYPE_INNER_IPV4_UDP,   &udp_l2tpv2_ppp_ipv4_udp_tmplt},
        {iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv4_tcp, 
IAVF_RSS_TYPE_INNER_IPV4_TCP,   &udp_l2tpv2_ppp_ipv4_tcp_tmplt},
+       {iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4,     
IAVF_RSS_TYPE_INNER_IPV4,       &udp_l2tpv2_ppp_ipv4_tmplt},
+       {iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_udp, 
IAVF_RSS_TYPE_INNER_IPV4_UDP,   &udp_l2tpv2_ppp_ipv4_udp_tmplt},
+       {iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv4_tcp, 
IAVF_RSS_TYPE_INNER_IPV4_TCP,   &udp_l2tpv2_ppp_ipv4_tcp_tmplt},
 
        /* IPv6 */
        {iavf_pattern_eth_ipv6,                         
IAVF_RSS_TYPE_OUTER_IPV6,       &outer_ipv6_tmplt},
@@ -607,6 +610,9 @@ static struct iavf_pattern_match_item 
iavf_hash_pattern_list[] = {
        {iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6,     
IAVF_RSS_TYPE_INNER_IPV6,       &udp_l2tpv2_ppp_ipv6_tmplt},
        {iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_udp, 
IAVF_RSS_TYPE_INNER_IPV6_UDP,   &udp_l2tpv2_ppp_ipv6_udp_tmplt},
        {iavf_pattern_eth_ipv4_udp_l2tpv2_ppp_ipv6_tcp, 
IAVF_RSS_TYPE_INNER_IPV6_TCP,   &udp_l2tpv2_ppp_ipv6_tcp_tmplt},
+       {iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6,     
IAVF_RSS_TYPE_INNER_IPV6,       &udp_l2tpv2_ppp_ipv6_tmplt},
+       {iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_udp, 
IAVF_RSS_TYPE_INNER_IPV6_UDP,   &udp_l2tpv2_ppp_ipv6_udp_tmplt},
+       {iavf_pattern_eth_ipv6_udp_l2tpv2_ppp_ipv6_tcp, 
IAVF_RSS_TYPE_INNER_IPV6_TCP,   &udp_l2tpv2_ppp_ipv6_tcp_tmplt},
 
 };
 
-- 
2.25.1

Reply via email to