test mbuf attach
[dpdk.git] / lib / librte_ethdev / rte_tm.h
index 2b25a87..f9c0cf3 100644 (file)
@@ -1,36 +1,7 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright(c) 2017 Intel Corporation.
- *   Copyright(c) 2017 Cavium.
- *   Copyright(c) 2017 NXP.
- *   All rights reserved.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in
- *       the documentation and/or other materials provided with the
- *       distribution.
- *     * Neither the name of Intel Corporation nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2017 Intel Corporation.
+ * Copyright(c) 2017 Cavium.
+ * Copyright(c) 2017 NXP.
  */
 
 #ifndef __INCLUDE_RTE_TM_H__
@@ -51,6 +22,7 @@
 #include <stdint.h>
 
 #include <rte_common.h>
+#include <rte_meter.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -115,16 +87,6 @@ extern "C" {
  */
 #define RTE_TM_NODE_LEVEL_ID_ANY                     UINT32_MAX
 
-/**
- * Color
- */
-enum rte_tm_color {
-       RTE_TM_GREEN = 0, /**< Green */
-       RTE_TM_YELLOW, /**< Yellow */
-       RTE_TM_RED, /**< Red */
-       RTE_TM_COLORS /**< Number of colors */
-};
-
 /**
  * Node statistics counter type
  */
@@ -179,12 +141,12 @@ struct rte_tm_node_stats {
                /** Number of packets dropped by current leaf node per each
                 * color.
                 */
-               uint64_t n_pkts_dropped[RTE_TM_COLORS];
+               uint64_t n_pkts_dropped[RTE_COLORS];
 
                /** Number of bytes dropped by current leaf node per each
                 * color.
                 */
-               uint64_t n_bytes_dropped[RTE_TM_COLORS];
+               uint64_t n_bytes_dropped[RTE_COLORS];
 
                /** Number of packets currently waiting in the packet queue of
                 * current leaf node.
@@ -377,6 +339,22 @@ struct rte_tm_capabilities {
         */
        uint32_t sched_wfq_weight_max;
 
+       /** WRED packet mode support. When non-zero, this parameter indicates
+        * that there is at least one leaf node that supports the WRED packet
+        * mode, which might not be true for all the leaf nodes. In packet
+        * mode, the WRED thresholds specify the queue length in packets, as
+        * opposed to bytes.
+        */
+       int cman_wred_packet_mode_supported;
+
+       /** WRED byte mode support. When non-zero, this parameter indicates that
+        * there is at least one leaf node that supports the WRED byte mode,
+        * which might not be true for all the leaf nodes. In byte mode, the
+        * WRED thresholds specify the queue length in bytes, as opposed to
+        * packets.
+        */
+       int cman_wred_byte_mode_supported;
+
        /** Head drop algorithm support. When non-zero, this parameter
         * indicates that there is at least one leaf node that supports the head
         * drop algorithm, which might not be true for all the leaf nodes.
@@ -419,16 +397,16 @@ struct rte_tm_capabilities {
        uint32_t cman_wred_context_shared_n_contexts_per_node_max;
 
        /** Support for VLAN DEI packet marking (per color). */
-       int mark_vlan_dei_supported[RTE_TM_COLORS];
+       int mark_vlan_dei_supported[RTE_COLORS];
 
        /** Support for IPv4/IPv6 ECN marking of TCP packets (per color). */
-       int mark_ip_ecn_tcp_supported[RTE_TM_COLORS];
+       int mark_ip_ecn_tcp_supported[RTE_COLORS];
 
        /** Support for IPv4/IPv6 ECN marking of SCTP packets (per color). */
-       int mark_ip_ecn_sctp_supported[RTE_TM_COLORS];
+       int mark_ip_ecn_sctp_supported[RTE_COLORS];
 
        /** Support for IPv4/IPv6 DSCP packet marking (per color). */
-       int mark_ip_dscp_supported[RTE_TM_COLORS];
+       int mark_ip_dscp_supported[RTE_COLORS];
 
        /** Set of supported dynamic update operations.
         * @see enum rte_tm_dynamic_update_type
@@ -628,6 +606,24 @@ struct rte_tm_level_capabilities {
                         */
                        uint32_t shaper_shared_n_max;
 
+                       /** WRED packet mode support. When non-zero, this
+                        * parameter indicates that there is at least one leaf
+                        * node on this level that supports the WRED packet
+                        * mode, which might not be true for all the leaf
+                        * nodes. In packet mode, the WRED thresholds specify
+                        * the queue length in packets, as opposed to bytes.
+                        */
+                       int cman_wred_packet_mode_supported;
+
+                       /** WRED byte mode support. When non-zero, this
+                        * parameter indicates that there is at least one leaf
+                        * node on this level that supports the WRED byte mode,
+                        * which might not be true for all the leaf nodes. In
+                        * byte mode, the WRED thresholds specify the queue
+                        * length in bytes, as opposed to packets.
+                        */
+                       int cman_wred_byte_mode_supported;
+
                        /** Head drop algorithm support. When non-zero, this
                         * parameter indicates that there is at least one leaf
                         * node on this level that supports the head drop
@@ -743,6 +739,12 @@ struct rte_tm_node_capabilities {
 
                /** Items valid only for leaf nodes. */
                struct {
+                       /** WRED packet mode support for current node. */
+                       int cman_wred_packet_mode_supported;
+
+                       /** WRED byte mode support for current node. */
+                       int cman_wred_byte_mode_supported;
+
                        /** Head drop algorithm support for current node. */
                        int cman_head_drop_supported;
 
@@ -791,10 +793,10 @@ enum rte_tm_cman_mode {
  */
 struct rte_tm_red_params {
        /** Minimum queue threshold */
-       uint16_t min_th;
+       uint64_t min_th;
 
        /** Maximum queue threshold */
-       uint16_t max_th;
+       uint64_t max_th;
 
        /** Inverse of packet marking probability maximum value (maxp), i.e.
         * maxp_inv = 1 / maxp
@@ -815,10 +817,19 @@ struct rte_tm_red_params {
  * WRED context is used to perform congestion management for a single leaf
  * node, while a shared WRED context is used to perform congestion management
  * for a group of leaf nodes.
+ *
+ * @see struct rte_tm_capabilities::cman_wred_packet_mode_supported
+ * @see struct rte_tm_capabilities::cman_wred_byte_mode_supported
  */
 struct rte_tm_wred_params {
        /** One set of RED parameters per packet color */
-       struct rte_tm_red_params red_params[RTE_TM_COLORS];
+       struct rte_tm_red_params red_params[RTE_COLORS];
+
+       /** When non-zero, the *min_th* and *max_th* thresholds are specified
+        * in packets (WRED packet mode). When zero, the *min_th* and *max_th*
+        * thresholds are specified in bytes (WRED byte mode)
+        */
+       int packet_mode;
 };
 
 /**
@@ -1520,6 +1531,10 @@ rte_tm_hierarchy_commit(uint16_t port_id,
 /**
  * Traffic manager node parent update
  *
+ * This function may be used to move a node and its children to a different
+ * parent.  Additionally, if the new parent is the same as the current parent,
+ * this function will update the priority/weight of an existing node.
+ *
  * Restriction for root node: its parent cannot be changed.
  *
  * This function can only be called after the rte_tm_hierarchy_commit()
@@ -1643,7 +1658,7 @@ rte_tm_node_stats_update(uint16_t port_id,
  * @param[in] port_id
  *   The port identifier of the Ethernet device.
  * @param[in] node_id
- *   Node ID. Needs to be valid leaf node ID.
+ *   Node ID. Needs to be valid non-leaf node ID.
  * @param[in] wfq_weight_mode
  *   WFQ weight mode for each SP priority. When NULL, it indicates that WFQ is
  *   to be used for all priorities. When non-NULL, it points to a pre-allocated