.sched_wfq_n_groups_max = 1,
.sched_wfq_weight_max = UINT32_MAX,
+ .cman_wred_packet_mode_supported = WRED_SUPPORTED,
+ .cman_wred_byte_mode_supported = 0,
.cman_head_drop_supported = 0,
.cman_wred_context_n_max = 0,
.cman_wred_context_private_n_max = 0,
.shaper_shared_n_max = 0,
.cman_head_drop_supported = 0,
+ .cman_wred_packet_mode_supported = WRED_SUPPORTED,
+ .cman_wred_byte_mode_supported = 0,
.cman_wred_context_private_supported = WRED_SUPPORTED,
.cman_wred_context_shared_n_max = 0,
{.leaf = {
.cman_head_drop_supported = 0,
+ .cman_wred_packet_mode_supported = WRED_SUPPORTED,
+ .cman_wred_byte_mode_supported = 0,
.cman_wred_context_private_supported = WRED_SUPPORTED,
.cman_wred_context_shared_n_max = 0,
} },
NULL,
rte_strerror(EINVAL));
+ /* WRED profile should be in packet mode */
+ if (profile->packet_mode == 0)
+ return -rte_tm_error_set(error,
+ ENOTSUP,
+ RTE_TM_ERROR_TYPE_WRED_PROFILE,
+ NULL,
+ rte_strerror(ENOTSUP));
+
/* min_th <= max_th, max_th > 0 */
for (color = RTE_TM_GREEN; color < RTE_TM_COLORS; color++) {
- uint16_t min_th = profile->red_params[color].min_th;
- uint16_t max_th = profile->red_params[color].max_th;
+ uint32_t min_th = profile->red_params[color].min_th;
+ uint32_t max_th = profile->red_params[color].max_th;
- if (min_th > max_th || max_th == 0)
+ if (min_th > max_th ||
+ max_th == 0 ||
+ min_th > UINT16_MAX ||
+ max_th > UINT16_MAX)
return -rte_tm_error_set(error,
EINVAL,
RTE_TM_ERROR_TYPE_WRED_PROFILE,
*/
uint32_t sched_wfq_weight_max;
+ /** WRED packet mode support. When non-zero, this parameter indicates
+ * that there is atleast 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 atleast 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.
*/
uint32_t shaper_shared_n_max;
+ /** WRED packet mode support. When non-zero, this
+ * parameter indicates that there is atleast 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 atleast 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
/** 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;
*/
struct rte_tm_red_params {
/** Minimum queue threshold */
- uint16_t min_th;
+ uint32_t min_th;
/** Maximum queue threshold */
- uint16_t max_th;
+ uint32_t max_th;
/** Inverse of packet marking probability maximum value (maxp), i.e.
* maxp_inv = 1 / maxp
* 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];
+
+ /** 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;
};
/**