From: Balasubramanian Manoharan <bala.manoha...@linaro.org>

Adds random early detection and Back pressure feature to CoS

Signed-off-by: Balasubramanian Manoharan <bala.manoha...@linaro.org>
---
/** Email created from pull request 172 (bala-manoharan:random_early_discard)
 ** https://github.com/Linaro/odp/pull/172
 ** Patch: https://github.com/Linaro/odp/pull/172.patch
 ** Base sha: 75cfc6f70d5b21d6f04082e1d03a7e677a895280
 ** Merge commit sha: 63b45c733af2661b5e33305c895876296b6c7e74
 **/
 include/odp/api/spec/classification.h | 56 +++++++++++++++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/include/odp/api/spec/classification.h 
b/include/odp/api/spec/classification.h
index 0c4a95c5f..4e6842187 100644
--- a/include/odp/api/spec/classification.h
+++ b/include/odp/api/spec/classification.h
@@ -135,6 +135,13 @@ typedef struct odp_cls_capability_t {
 
        /** A Boolean to denote support of PMR range */
        odp_bool_t pmr_range_supported;
+
+       /** Support for Random Early Detection */
+       odp_support_t random_early_detection;
+
+       /** Support for Back Pressure to the remote peer */
+       odp_support_t back_pressure;
+
 } odp_cls_capability_t;
 
 /**
@@ -206,6 +213,55 @@ typedef struct odp_cls_cos_param {
 
        /** Drop policy associated with CoS */
        odp_cls_drop_t drop_policy;
+
+       /** Random Early Detection (RED)
+        * Random Early Detection is enabled to initiate a drop probability
+        * for the incoming packet when the packets in the queue/pool reaches
+        * a specified threshold.
+        * When RED is enabled for a particular flow then further incoming
+        * packets are assigned a drop probability based on the size of the
+        * pool/queue and the drop probability becomes 100% when the queue/pool
+        * is full.
+        * RED is logically configured in the CoS and could be implemented
+        * in either pool or queue linked to the CoS depending on
+        * platform capabilities.
+        * RED is controlled using maximum and minimum threshold values
+        * which are defined as percentage of the system resource.
+        * RED is enabled when the resource limit is equal to or greater than
+        * the maximum threshold value and is disabled when resource limit
+        * is less than or equal to minimum threshold value. */
+
+       /** A boolean to enable RED
+        * When true, RED is enabled and configured with RED parameters.
+        * Otherwise, RED parameters are ignored. */
+       odp_bool_t red_enable;
+
+       /** RED parameters */
+       struct {
+               /** Threshold percentage values for RED */
+
+               /** Maximum threshold percentage for RED */
+               odp_percent_t max_threshold;
+
+               /** Minimum threshold percentage for RED */
+               odp_percent_t min_threshold;
+       } red;
+
+       /** A boolean to enable Back pressure
+        * When true, back pressure is enabled and configured with the BP
+        * parameters. Otherwise BP parameters are ignored. When back pressure
+        * is enabled for a particular flow, the HW can send back pressure
+        * information to the remote peer indicating a network congestion */
+       odp_bool_t bp_enable;
+
+       /** BP parameters */
+       struct {
+               /** Threshold percentage values for back pressure.
+                * BP is enabled when pool/queue size is equal to or greater
+                * than the backpressure threshold. BP threshold is expressed
+                * as a percentage of the pool/queue size. */
+               odp_percent_t bp_threshold;
+       } bp;
 } odp_cls_cos_param_t;
 
 /**

Reply via email to