net: add rte prefix to ESP structure
[dpdk.git] / lib / librte_ethdev / rte_flow.h
index 68bbf57..c8fa272 100644 (file)
@@ -20,7 +20,6 @@
 #include <rte_arp.h>
 #include <rte_common.h>
 #include <rte_ether.h>
-#include <rte_eth_ctrl.h>
 #include <rte_icmp.h>
 #include <rte_ip.h>
 #include <rte_sctp.h>
@@ -414,6 +413,14 @@ enum rte_flow_item_type {
         * See struct rte_flow_item_mark.
         */
        RTE_FLOW_ITEM_TYPE_MARK,
+
+       /**
+        * [META]
+        *
+        * Matches a metadata value specified in mbuf metadata field.
+        * See struct rte_flow_item_meta.
+        */
+       RTE_FLOW_ITEM_TYPE_META,
 };
 
 /**
@@ -577,8 +584,8 @@ static const struct rte_flow_item_raw rte_flow_item_raw_mask = {
  * same order as on the wire.
  */
 struct rte_flow_item_eth {
-       struct ether_addr dst; /**< Destination MAC. */
-       struct ether_addr src; /**< Source MAC. */
+       struct rte_ether_addr dst; /**< Destination MAC. */
+       struct rte_ether_addr src; /**< Source MAC. */
        rte_be16_t type; /**< EtherType or TPID. */
 };
 
@@ -597,8 +604,8 @@ static const struct rte_flow_item_eth rte_flow_item_eth_mask = {
  * Matches an 802.1Q/ad VLAN tag.
  *
  * The corresponding standard outer EtherType (TPID) values are
- * ETHER_TYPE_VLAN or ETHER_TYPE_QINQ. It can be overridden by the preceding
- * pattern item.
+ * RTE_ETHER_TYPE_VLAN or RTE_ETHER_TYPE_QINQ. It can be overridden by
+ * the preceding pattern item.
  */
 struct rte_flow_item_vlan {
        rte_be16_t tci; /**< Tag control information. */
@@ -761,7 +768,7 @@ static const struct rte_flow_item_vxlan rte_flow_item_vxlan_mask = {
  * Matches a E-tag header.
  *
  * The corresponding standard outer EtherType (TPID) value is
- * ETHER_TYPE_ETAG. It can be overridden by the preceding pattern item.
+ * RTE_ETHER_TYPE_ETAG. It can be overridden by the preceding pattern item.
  */
 struct rte_flow_item_e_tag {
        /**
@@ -908,7 +915,7 @@ static const struct rte_flow_item_gtp rte_flow_item_gtp_mask = {
  * Matches an ESP header.
  */
 struct rte_flow_item_esp {
-       struct esp_hdr hdr; /**< ESP header definition. */
+       struct rte_esp_hdr hdr; /**< ESP header definition. */
 };
 
 /** Default mask for RTE_FLOW_ITEM_TYPE_ESP. */
@@ -974,9 +981,9 @@ struct rte_flow_item_arp_eth_ipv4 {
        uint8_t hln; /**< Hardware address length, normally 6. */
        uint8_t pln; /**< Protocol address length, normally 4. */
        rte_be16_t op; /**< Opcode (1 for request, 2 for reply). */
-       struct ether_addr sha; /**< Sender hardware address. */
+       struct rte_ether_addr sha; /**< Sender hardware address. */
        rte_be32_t spa; /**< Sender IPv4 address. */
-       struct ether_addr tha; /**< Target hardware address. */
+       struct rte_ether_addr tha; /**< Target hardware address. */
        rte_be32_t tpa; /**< Target IPv4 address. */
 };
 
@@ -1120,7 +1127,7 @@ rte_flow_item_icmp6_nd_opt_mask = {
 struct rte_flow_item_icmp6_nd_opt_sla_eth {
        uint8_t type; /**< ND option type, normally 1. */
        uint8_t length; /**< ND option length, normally 1. */
-       struct ether_addr sla; /**< Source Ethernet LLA. */
+       struct rte_ether_addr sla; /**< Source Ethernet LLA. */
 };
 
 /** Default mask for RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_SLA_ETH. */
@@ -1145,7 +1152,7 @@ rte_flow_item_icmp6_nd_opt_sla_eth_mask = {
 struct rte_flow_item_icmp6_nd_opt_tla_eth {
        uint8_t type; /**< ND option type, normally 2. */
        uint8_t length; /**< ND option length, normally 1. */
-       struct ether_addr tla; /**< Target Ethernet LLA. */
+       struct rte_ether_addr tla; /**< Target Ethernet LLA. */
 };
 
 /** Default mask for RTE_FLOW_ITEM_TYPE_ICMP6_ND_OPT_TLA_ETH. */
@@ -1156,6 +1163,22 @@ rte_flow_item_icmp6_nd_opt_tla_eth_mask = {
 };
 #endif
 
+/**
+ * RTE_FLOW_ITEM_TYPE_META.
+ *
+ * Matches a specified metadata value.
+ */
+struct rte_flow_item_meta {
+       rte_be32_t data;
+};
+
+/** Default mask for RTE_FLOW_ITEM_TYPE_META. */
+#ifndef __cplusplus
+static const struct rte_flow_item_meta rte_flow_item_meta_mask = {
+       .data = RTE_BE32(UINT32_MAX),
+};
+#endif
+
 /**
  * @warning
  * @b EXPERIMENTAL: this structure may change without prior notice
@@ -1507,6 +1530,20 @@ enum rte_flow_action_type {
         */
        RTE_FLOW_ACTION_TYPE_NVGRE_DECAP,
 
+       /**
+        * Add outer header whose template is provided in its data buffer
+        *
+        * See struct rte_flow_action_raw_encap.
+        */
+       RTE_FLOW_ACTION_TYPE_RAW_ENCAP,
+
+       /**
+        * Remove outer header whose template is provided in its data buffer.
+        *
+        * See struct rte_flow_action_raw_decap
+        */
+       RTE_FLOW_ACTION_TYPE_RAW_DECAP,
+
        /**
         * Modify IPv4 source address in the outermost IPv4 header.
         *
@@ -1579,6 +1616,40 @@ enum rte_flow_action_type {
         * No associated configuration structure.
         */
        RTE_FLOW_ACTION_TYPE_MAC_SWAP,
+
+       /**
+        * Decrease TTL value directly
+        *
+        * No associated configuration structure.
+        */
+       RTE_FLOW_ACTION_TYPE_DEC_TTL,
+
+       /**
+        * Set TTL value
+        *
+        * See struct rte_flow_action_set_ttl
+        */
+       RTE_FLOW_ACTION_TYPE_SET_TTL,
+
+       /**
+        * Set source MAC address from matched flow.
+        *
+        * If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_ETH,
+        * the PMD should return a RTE_FLOW_ERROR_TYPE_ACTION error.
+        *
+        * See struct rte_flow_action_set_mac.
+        */
+       RTE_FLOW_ACTION_TYPE_SET_MAC_SRC,
+
+       /**
+        * Set destination MAC address from matched flow.
+        *
+        * If flow pattern does not define a valid RTE_FLOW_ITEM_TYPE_ETH,
+        * the PMD should return a RTE_FLOW_ERROR_TYPE_ACTION error.
+        *
+        * See struct rte_flow_action_set_mac.
+        */
+       RTE_FLOW_ACTION_TYPE_SET_MAC_DST,
 };
 
 /**
@@ -1666,6 +1737,16 @@ struct rte_flow_query_count {
        uint64_t bytes; /**< Number of bytes through this rule [out]. */
 };
 
+/**
+ * Hash function types.
+ */
+enum rte_eth_hash_function {
+       RTE_ETH_HASH_FUNCTION_DEFAULT = 0,
+       RTE_ETH_HASH_FUNCTION_TOEPLITZ, /**< Toeplitz */
+       RTE_ETH_HASH_FUNCTION_SIMPLE_XOR, /**< Simple XOR */
+       RTE_ETH_HASH_FUNCTION_MAX,
+};
+
 /**
  * RTE_FLOW_ACTION_TYPE_RSS
  *
@@ -1942,6 +2023,51 @@ struct rte_flow_action_nvgre_encap {
        struct rte_flow_item *definition;
 };
 
+/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_RAW_ENCAP
+ *
+ * Raw tunnel end-point encapsulation data definition.
+ *
+ * The data holds the headers definitions to be applied on the packet.
+ * The data must start with ETH header up to the tunnel item header itself.
+ * When used right after RAW_DECAP (for decapsulating L3 tunnel type for
+ * example MPLSoGRE) the data will just hold layer 2 header.
+ *
+ * The preserve parameter holds which bits in the packet the PMD is not allowed
+ * to change, this parameter can also be NULL and then the PMD is allowed
+ * to update any field.
+ *
+ * size holds the number of bytes in @p data and @p preserve.
+ */
+struct rte_flow_action_raw_encap {
+       uint8_t *data; /**< Encapsulation data. */
+       uint8_t *preserve; /**< Bit-mask of @p data to preserve on output. */
+       size_t size; /**< Size of @p data and @p preserve. */
+};
+
+/**
+ * @warning
+ * @b EXPERIMENTAL: this structure may change without prior notice
+ *
+ * RTE_FLOW_ACTION_TYPE_RAW_DECAP
+ *
+ * Raw tunnel end-point decapsulation data definition.
+ *
+ * The data holds the headers definitions to be removed from the packet.
+ * The data must start with ETH header up to the tunnel item header itself.
+ * When used right before RAW_DECAP (for encapsulating L3 tunnel type for
+ * example MPLSoGRE) the data will just hold layer 2 header.
+ *
+ * size holds the number of bytes in @p data.
+ */
+struct rte_flow_action_raw_decap {
+       uint8_t *data; /**< Encapsulation data. */
+       size_t size; /**< Size of @p data and @p preserve. */
+};
+
 /**
  * @warning
  * @b EXPERIMENTAL: this structure may change without prior notice
@@ -1987,6 +2113,24 @@ struct rte_flow_action_set_tp {
        rte_be16_t port;
 };
 
+/**
+ * RTE_FLOW_ACTION_TYPE_SET_TTL
+ *
+ * Set the TTL value directly for IPv4 or IPv6
+ */
+struct rte_flow_action_set_ttl {
+       uint8_t ttl_value;
+};
+
+/**
+ * RTE_FLOW_ACTION_TYPE_SET_MAC
+ *
+ * Set MAC address from the matched flow
+ */
+struct rte_flow_action_set_mac {
+       uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
+};
+
 /*
  * Definition of a single action.
  *