meter: replace color definitions
[dpdk.git] / lib / librte_pipeline / rte_table_action.h
index 73b564c..e77551c 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). */
@@ -193,7 +202,7 @@ struct rte_table_action_dscp_table_entry {
        /** Packet color. Used by the meter action as the packet input color
         * for the color aware mode of the traffic metering algorithm.
         */
-       enum rte_meter_color color;
+       enum rte_color color;
 };
 
 /** DSCP translation table. */
@@ -250,7 +259,7 @@ struct rte_table_action_mtr_tc_params {
        uint32_t meter_profile_id;
 
        /** Policer actions. */
-       enum rte_table_action_policer policer[e_RTE_METER_COLORS];
+       enum rte_table_action_policer policer[RTE_COLORS];
 };
 
 /** Meter action statistics counters per traffic class. */
@@ -259,13 +268,13 @@ struct rte_table_action_mtr_counters_tc {
         * and before the policer actions are executed. Only valid when
         * *n_packets_valid* is non-zero.
         */
-       uint64_t n_packets[e_RTE_METER_COLORS];
+       uint64_t n_packets[RTE_COLORS];
 
        /** Number of packet bytes per color at the output of the traffic
         * metering and before the policer actions are executed. Only valid when
         * *n_bytes_valid* is non-zero.
         */
-       uint64_t n_bytes[e_RTE_METER_COLORS];
+       uint64_t n_bytes[RTE_COLORS];
 
        /** When non-zero, the *n_packets* field is valid. */
        int n_packets_valid;
@@ -371,6 +380,9 @@ enum rte_table_action_encap_type {
         * Ether -> { Ether | VLAN | IP | UDP | VXLAN | Ether }
         */
        RTE_TABLE_ACTION_ENCAP_VXLAN,
+
+       /** IP -> { Ether | S-VLAN | C-VLAN | PPPoE | PPP | IP } */
+       RTE_TABLE_ACTION_ENCAP_QINQ_PPPOE,
 };
 
 /** Pre-computed Ethernet header fields for encapsulation action. */
@@ -520,6 +532,16 @@ struct rte_table_action_encap_config {
        };
 };
 
+/** QinQ_PPPoE encap paramaeters. */
+struct rte_table_encap_ether_qinq_pppoe {
+
+       /** Only valid when *type* is set to QinQ. */
+       struct rte_table_action_ether_hdr ether;
+       struct rte_table_action_vlan_hdr svlan; /**< Service VLAN header. */
+       struct rte_table_action_vlan_hdr cvlan; /**< Customer VLAN header. */
+       struct rte_table_action_pppoe_hdr pppoe; /**< PPPoE/PPP headers. */
+};
+
 /** Encap action parameters (per table rule). */
 struct rte_table_action_encap_params {
        /** Encapsulation type. */
@@ -544,6 +566,9 @@ struct rte_table_action_encap_params {
 
                /** Only valid when *type* is set to VXLAN. */
                struct rte_table_action_encap_vxlan_params vxlan;
+
+               /** Only valid when *type* is set to QinQ_PPPoE. */
+               struct rte_table_encap_ether_qinq_pppoe qinq_pppoe;
        };
 };
 
@@ -680,6 +705,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.
  */
@@ -973,6 +1103,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