@@ -97,6 +97,7 @@ static const struct rte_flow_desc_data rte_flow_desc_item[] = {
MK_FLOW_ITEM(L2TPV3OIP, sizeof(struct rte_flow_item_l2tpv3oip)),
MK_FLOW_ITEM(PFCP, sizeof(struct rte_flow_item_pfcp)),
MK_FLOW_ITEM(ECPRI, sizeof(struct rte_flow_item_ecpri)),
+ MK_FLOW_ITEM(GENEVE_OPT, sizeof(struct rte_flow_item_geneve_opt)),
};
/** Generate flow_action[] entry. */
@@ -543,6 +543,14 @@ enum rte_flow_item_type {
* See struct rte_flow_item_ipv6_frag_ext.
*/
RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT,
+
+ /**
+ * Matches Geneve Variable Length Option
+ *
+ * See struct rte_flow_item_geneve_opt
+ */
+ RTE_FLOW_ITEM_TYPE_GENEVE_OPT,
+
};
/**
@@ -1627,6 +1635,25 @@ static const struct rte_flow_item_ecpri rte_flow_item_ecpri_mask = {
};
#endif
+/**
+ * RTE_FLOW_ITEM_TYPE_GENEVE_OPT
+ *
+ * Matches a GENEVE Variable Length Option
+ */
+struct rte_flow_item_geneve_opt {
+ rte_be16_t option_class;
+ uint8_t option_type;
+ uint8_t option_len;
+ uint32_t *data;
+};
+
+/** Default mask for RTE_FLOW_ITEM_TYPE_GENEVE_OPT. */
+#ifndef __cplusplus
+static const struct rte_flow_item_geneve_opt
+rte_flow_item_geneve_opt_mask = {
+ .option_type = 0xff,
+};
+#endif
/**
* Matching pattern item definition.
*