New upstream version 18.11-rc1
[deb_dpdk.git] / lib / librte_pipeline / rte_table_action.h
index c7f751a..c960612 100644 (file)
@@ -93,6 +93,15 @@ enum rte_table_action_type {
 
        /** Timestamp. */
        RTE_TABLE_ACTION_TIME,
+
+       /** Crypto. */
+       RTE_TABLE_ACTION_SYM_CRYPTO,
+
+       /** Tag. */
+       RTE_TABLE_ACTION_TAG,
+
+       /** Packet decapsulations. */
+       RTE_TABLE_ACTION_DECAP,
 };
 
 /** Common action configuration (per table action profile). */
@@ -366,6 +375,11 @@ enum rte_table_action_encap_type {
 
        /** IP -> { Ether | PPPoE | PPP | IP } */
        RTE_TABLE_ACTION_ENCAP_PPPOE,
+
+       /** Ether -> { Ether | IP | UDP | VXLAN | Ether }
+        * Ether -> { Ether | VLAN | IP | UDP | VXLAN | Ether }
+        */
+       RTE_TABLE_ACTION_ENCAP_VXLAN,
 };
 
 /** Pre-computed Ethernet header fields for encapsulation action. */
@@ -393,6 +407,34 @@ struct rte_table_action_pppoe_hdr {
        uint16_t session_id; /**< Session ID. */
 };
 
+/** Pre-computed IPv4 header fields for encapsulation action. */
+struct rte_table_action_ipv4_header {
+       uint32_t sa; /**< Source address. */
+       uint32_t da; /**< Destination address. */
+       uint8_t dscp; /**< DiffServ Code Point (DSCP). */
+       uint8_t ttl; /**< Time To Live (TTL). */
+};
+
+/** Pre-computed IPv6 header fields for encapsulation action. */
+struct rte_table_action_ipv6_header {
+       uint8_t sa[16]; /**< Source address. */
+       uint8_t da[16]; /**< Destination address. */
+       uint32_t flow_label; /**< Flow label. */
+       uint8_t dscp; /**< DiffServ Code Point (DSCP). */
+       uint8_t hop_limit; /**< Hop Limit (HL). */
+};
+
+/** Pre-computed UDP header fields for encapsulation action. */
+struct rte_table_action_udp_header {
+       uint16_t sp; /**< Source port. */
+       uint16_t dp; /**< Destination port. */
+};
+
+/** Pre-computed VXLAN header fields for encapsulation action. */
+struct rte_table_action_vxlan_hdr {
+       uint32_t vni; /**< VXLAN Network Identifier (VNI). */
+};
+
 /** Ether encap parameters. */
 struct rte_table_action_encap_ether_params {
        struct rte_table_action_ether_hdr ether; /**< Ethernet header. */
@@ -437,6 +479,21 @@ struct rte_table_action_encap_pppoe_params {
        struct rte_table_action_pppoe_hdr pppoe; /**< PPPoE/PPP headers. */
 };
 
+/** VXLAN encap parameters. */
+struct rte_table_action_encap_vxlan_params {
+       struct rte_table_action_ether_hdr ether; /**< Ethernet header. */
+       struct rte_table_action_vlan_hdr vlan; /**< VLAN header. */
+
+       RTE_STD_C11
+       union {
+               struct rte_table_action_ipv4_header ipv4; /**< IPv4 header. */
+               struct rte_table_action_ipv6_header ipv6; /**< IPv6 header. */
+       };
+
+       struct rte_table_action_udp_header udp; /**< UDP header. */
+       struct rte_table_action_vxlan_hdr vxlan; /**< VXLAN header. */
+};
+
 /** Encap action configuration (per table action profile). */
 struct rte_table_action_encap_config {
        /** Bit mask defining the set of packet encapsulations enabled for the
@@ -446,6 +503,30 @@ struct rte_table_action_encap_config {
         * @see enum rte_table_action_encap_type
         */
        uint64_t encap_mask;
+
+       /** Encapsulation type specific configuration. */
+       RTE_STD_C11
+       union {
+               struct {
+                       /** Input packet to be encapsulated: offset within the
+                        * input packet buffer to the start of the Ethernet
+                        * frame to be encapsulated. Offset 0 points to the
+                        * first byte of the MBUF structure.
+                        */
+                       uint32_t data_offset;
+
+                       /** Encapsulation header: non-zero when encapsulation
+                        * header includes a VLAN tag, zero otherwise.
+                        */
+                       int vlan;
+
+                       /** Encapsulation header: IP version of the IP header
+                        * within the encapsulation header. Non-zero for IPv4,
+                        * zero for IPv6.
+                        */
+                       int ip_version;
+               } vxlan; /**< VXLAN specific configuration. */
+       };
 };
 
 /** Encap action parameters (per table rule). */
@@ -469,6 +550,9 @@ struct rte_table_action_encap_params {
 
                /** Only valid when *type* is set to PPPoE. */
                struct rte_table_action_encap_pppoe_params pppoe;
+
+               /** Only valid when *type* is set to VXLAN. */
+               struct rte_table_action_encap_vxlan_params vxlan;
        };
 };
 
@@ -605,6 +689,111 @@ struct rte_table_action_time_params {
        uint64_t time;
 };
 
+/**
+ * RTE_TABLE_ACTION_CRYPTO
+ */
+#ifndef RTE_TABLE_ACTION_SYM_CRYPTO_IV_SIZE_MAX
+#define RTE_TABLE_ACTION_SYM_CRYPTO_IV_SIZE_MAX                (16)
+#endif
+
+#ifndef RTE_TABLE_ACTION_SYM_CRYPTO_AAD_SIZE_MAX
+#define RTE_TABLE_ACTION_SYM_CRYPTO_AAD_SIZE_MAX       (16)
+#endif
+
+#ifndef RTE_TABLE_ACTION_SYM_CRYPTO_IV_OFFSET
+#define RTE_TABLE_ACTION_SYM_CRYPTO_IV_OFFSET                          \
+       (sizeof(struct rte_crypto_op) + sizeof(struct rte_crypto_sym_op))
+#endif
+
+/** Common action structure to store the data's value, length, and offset */
+struct rte_table_action_vlo {
+       uint8_t *val;
+       uint32_t length;
+       uint32_t offset;
+};
+
+/** Symmetric crypto action configuration (per table action profile). */
+struct rte_table_action_sym_crypto_config {
+       /** Target Cryptodev ID. */
+       uint8_t cryptodev_id;
+
+       /**
+        * Offset to rte_crypto_op structure within the input packet buffer.
+        * Offset 0 points to the first byte of the MBUF structure.
+        */
+       uint32_t op_offset;
+
+       /** The mempool for creating cryptodev sessions. */
+       struct rte_mempool *mp_create;
+
+       /** The mempool for initializing cryptodev sessions. */
+       struct rte_mempool *mp_init;
+};
+
+/** Symmetric Crypto action parameters (per table rule). */
+struct rte_table_action_sym_crypto_params {
+
+       /** Xform pointer contains all relevant information */
+       struct rte_crypto_sym_xform *xform;
+
+       /**
+        * Offset within the input packet buffer to the first byte of data
+        * to be processed by the crypto unit. Offset 0 points to the first
+        * byte of the MBUF structure.
+        */
+       uint32_t data_offset;
+
+       union {
+               struct {
+                       /** Cipher iv data. */
+                       struct rte_table_action_vlo cipher_iv;
+
+                       /** Cipher iv data. */
+                       struct rte_table_action_vlo cipher_iv_update;
+
+                       /** Auth iv data. */
+                       struct rte_table_action_vlo auth_iv;
+
+                       /** Auth iv data. */
+                       struct rte_table_action_vlo auth_iv_update;
+
+               } cipher_auth;
+
+               struct {
+                       /** AEAD AAD data. */
+                       struct rte_table_action_vlo aad;
+
+                       /** AEAD iv data. */
+                       struct rte_table_action_vlo iv;
+
+                       /** AEAD AAD data. */
+                       struct rte_table_action_vlo aad_update;
+
+                       /** AEAD iv data. */
+                       struct rte_table_action_vlo iv_update;
+
+               } aead;
+       };
+};
+
+/**
+ * RTE_TABLE_ACTION_TAG
+ */
+/** Tag action parameters (per table rule). */
+struct rte_table_action_tag_params {
+       /** Tag to be attached to the input packet. */
+       uint32_t tag;
+};
+
+/**
+ * RTE_TABLE_ACTION_DECAP
+ */
+/** Decap action parameters (per table rule). */
+struct rte_table_action_decap_params {
+       /** Number of bytes to be removed from the start of the packet. */
+       uint16_t n;
+};
+
 /**
  * Table action profile.
  */
@@ -898,6 +1087,20 @@ rte_table_action_time_read(struct rte_table_action *action,
        void *data,
        uint64_t *timestamp);
 
+/**
+ * Table action cryptodev symmetric session get.
+ *
+ * @param[in] action
+ *   Handle to table action object (needs to be valid).
+ * @param[in] data
+ *   Data byte array (typically table rule data) with sym crypto action.
+ * @return
+ *   The pointer to the session on success, NULL otherwise.
+ */
+struct rte_cryptodev_sym_session *__rte_experimental
+rte_table_action_crypto_sym_session_get(struct rte_table_action *action,
+       void *data);
+
 #ifdef __cplusplus
 }
 #endif