diff --git a/doc/guides/nics/octeontx2.rst b/doc/guides/nics/octeontx2.rst index 5f511feb71..9a76567a81 100644 --- a/doc/guides/nics/octeontx2.rst +++ b/doc/guides/nics/octeontx2.rst @@ -268,6 +268,13 @@ Patterns: +----+--------------------------------+ | 22 | RTE_FLOW_ITEM_TYPE_ANY | +----+--------------------------------+ + | 23 | RTE_FLOW_ITEM_TYPE_GRE_KEY | + +----+--------------------------------+ + +.. note:: + + ``RTE_FLOW_ITEM_TYPE_GRE_KEY`` works only when checksum and routing + bits in the GRE header are equal to 0. Actions: diff --git a/drivers/net/octeontx2/otx2_flow_parse.c b/drivers/net/octeontx2/otx2_flow_parse.c index 6e65db8e44..6670c1a702 100644 --- a/drivers/net/octeontx2/otx2_flow_parse.c +++ b/drivers/net/octeontx2/otx2_flow_parse.c @@ -389,6 +389,7 @@ int otx2_flow_parse_ld(struct otx2_parse_state *pst) { char hw_mask[NPC_MAX_EXTRACT_DATA_LEN]; + uint32_t gre_key_mask = 0xffffffff; struct otx2_flow_item_info info; int lid, lt, lflags; int rc; @@ -450,6 +451,12 @@ otx2_flow_parse_ld(struct otx2_parse_state *pst) info.def_mask = &rte_flow_item_gre_mask; info.len = sizeof(struct rte_flow_item_gre); break; + case RTE_FLOW_ITEM_TYPE_GRE_KEY: + lt = NPC_LT_LD_GRE; + info.def_mask = &gre_key_mask; + info.len = sizeof(gre_key_mask); + info.hw_hdr_len = 4; + break; case RTE_FLOW_ITEM_TYPE_NVGRE: lt = NPC_LT_LD_GRE; lflags = NPC_F_GRE_NVGRE;