From a800675b06f91c9326063f57daaecd71098211ec Mon Sep 17 00:00:00 2001 From: Satheesh Paul Date: Wed, 27 Apr 2022 11:53:19 +0530 Subject: [PATCH] net/cnxk: support IPv6 fragment flow pattern item Support matching IPv6 fragment extension header with RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT flow pattern item. Signed-off-by: Satheesh Paul Acked-by: Jerin Jacob --- doc/guides/nics/features/cnxk.ini | 1 + doc/guides/nics/features/cnxk_vec.ini | 1 + doc/guides/nics/features/cnxk_vf.ini | 1 + drivers/common/cnxk/roc_npc.h | 1 + drivers/common/cnxk/roc_npc_parse.c | 7 +++++++ drivers/net/cnxk/cnxk_flow.c | 3 +++ 6 files changed, 14 insertions(+) diff --git a/doc/guides/nics/features/cnxk.ini b/doc/guides/nics/features/cnxk.ini index 7cac8beb61..1876fe86c7 100644 --- a/doc/guides/nics/features/cnxk.ini +++ b/doc/guides/nics/features/cnxk.ini @@ -65,6 +65,7 @@ icmp = Y ipv4 = Y ipv6 = Y ipv6_ext = Y +ipv6_frag_ext = Y mark = Y mpls = Y nvgre = Y diff --git a/doc/guides/nics/features/cnxk_vec.ini b/doc/guides/nics/features/cnxk_vec.ini index 0803bb3c29..5d0976e6ce 100644 --- a/doc/guides/nics/features/cnxk_vec.ini +++ b/doc/guides/nics/features/cnxk_vec.ini @@ -61,6 +61,7 @@ icmp = Y ipv4 = Y ipv6 = Y ipv6_ext = Y +ipv6_frag_ext = Y mark = Y mpls = Y nvgre = Y diff --git a/doc/guides/nics/features/cnxk_vf.ini b/doc/guides/nics/features/cnxk_vf.ini index ed3e231c5f..c4ee32a9ad 100644 --- a/doc/guides/nics/features/cnxk_vf.ini +++ b/doc/guides/nics/features/cnxk_vf.ini @@ -57,6 +57,7 @@ icmp = Y ipv4 = Y ipv6 = Y ipv6_ext = Y +ipv6_frag_ext = Y mark = Y mpls = Y nvgre = Y diff --git a/drivers/common/cnxk/roc_npc.h b/drivers/common/cnxk/roc_npc.h index ac985e7b31..f92c2a633c 100644 --- a/drivers/common/cnxk/roc_npc.h +++ b/drivers/common/cnxk/roc_npc.h @@ -15,6 +15,7 @@ enum roc_npc_item_type { ROC_NPC_ITEM_TYPE_E_TAG, ROC_NPC_ITEM_TYPE_IPV4, ROC_NPC_ITEM_TYPE_IPV6, + ROC_NPC_ITEM_TYPE_IPV6_FRAG_EXT, ROC_NPC_ITEM_TYPE_ARP_ETH_IPV4, ROC_NPC_ITEM_TYPE_MPLS, ROC_NPC_ITEM_TYPE_ICMP, diff --git a/drivers/common/cnxk/roc_npc_parse.c b/drivers/common/cnxk/roc_npc_parse.c index 1ce0dadfef..0748646779 100644 --- a/drivers/common/cnxk/roc_npc_parse.c +++ b/drivers/common/cnxk/roc_npc_parse.c @@ -594,6 +594,13 @@ npc_parse_lc(struct npc_parse_state *pst) info.len = pst->pattern->size; info.hw_hdr_len = 40; break; + case ROC_NPC_ITEM_TYPE_IPV6_FRAG_EXT: + lid = NPC_LID_LC; + lt = NPC_LT_LC_IP6_EXT; + flags = NPC_F_LC_U_IP6_FRAG; + info.len = pst->pattern->size; + info.hw_hdr_len = 40; + break; case ROC_NPC_ITEM_TYPE_L3_CUSTOM: lt = NPC_LT_LC_CUSTOM0; info.len = pst->pattern->size; diff --git a/drivers/net/cnxk/cnxk_flow.c b/drivers/net/cnxk/cnxk_flow.c index 645e359a57..06301b9ecb 100644 --- a/drivers/net/cnxk/cnxk_flow.c +++ b/drivers/net/cnxk/cnxk_flow.c @@ -14,6 +14,9 @@ const struct cnxk_rte_flow_term_info term[] = { sizeof(struct rte_flow_item_ipv4)}, [RTE_FLOW_ITEM_TYPE_IPV6] = {ROC_NPC_ITEM_TYPE_IPV6, sizeof(struct rte_flow_item_ipv6)}, + [RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT] = { + ROC_NPC_ITEM_TYPE_IPV6_FRAG_EXT, + sizeof(struct rte_flow_item_ipv6_frag_ext)}, [RTE_FLOW_ITEM_TYPE_ARP_ETH_IPV4] = { ROC_NPC_ITEM_TYPE_ARP_ETH_IPV4, sizeof(struct rte_flow_item_arp_eth_ipv4)}, -- 2.39.5