Adds support to spread packet from a single CoS to multiple queues by
configuring hashing at CoS level.

Signed-off-by: Balasubramanian Manoharan <bala.manoha...@linaro.org>
---
 include/odp/api/spec/classification.h | 45 ++++++++++++++++++++++++++++++++---
 1 file changed, 42 insertions(+), 3 deletions(-)

diff --git a/include/odp/api/spec/classification.h 
b/include/odp/api/spec/classification.h
index 0e442c7..220b029 100644
--- a/include/odp/api/spec/classification.h
+++ b/include/odp/api/spec/classification.h
@@ -126,6 +126,12 @@ typedef struct odp_cls_capability_t {
        /** Maximum number of CoS supported */
        unsigned max_cos;
 
+       /** Maximun number of queue supported per CoS */
+       unsigned max_queue_supported;
+
+       /** Protocol header combination supported for Hashing */
+       odp_pktin_hash_proto_t hash_supported;
+
        /** A Boolean to denote support of PMR range */
        odp_bool_t pmr_range_supported;
 } odp_cls_capability_t;
@@ -164,9 +170,25 @@ typedef enum {
  * Used to communicate class of service creation options
  */
 typedef struct odp_cls_cos_param {
-       odp_queue_t queue;      /**< Queue associated with CoS */
-       odp_pool_t pool;        /**< Pool associated with CoS */
-       odp_cls_drop_t drop_policy;     /**< Drop policy associated with CoS */
+       /* Minimum number of queues to be linked to this CoS.
+        * If the number is greater than 1 then hashing has to be
+        * enabled */
+       uint32_t num_queue;
+       /* Denotes whether hashing is enabled for queues in this CoS
+        * When hashing is enabled the queues are created by the implementation
+        * and application need not configure any queue to the class of service
+        */
+       odp_bool_t enable_hashing;
+       /* Protocol header fields which are included in packet input
+        * hash calculation */
+       odp_pktin_hash_proto_t hash;
+       /* If hashing is disabled, then application has to configure
+        * this queue and packets are delivered to this queue */
+       odp_queue_t queue;
+       /* Pool associated with CoS */
+       odp_pool_t pool;
+       /* Drop policy associated with CoS */
+       odp_cls_drop_t drop_policy;
 } odp_cls_cos_param_t;
 
 /**
@@ -209,6 +231,23 @@ int odp_cls_capability(odp_cls_capability_t *capability);
 odp_cos_t odp_cls_cos_create(const char *name, odp_cls_cos_param_t *param);
 
 /**
+ * Queue hash result
+ * Returns the queue within a CoS in which a particular packet will be enqueued
+ * based on the packet parameters and hash protocol field configured with the
+ * class of service.
+ *
+ * @param      cos     class of service
+ * @param      packet  Packet handle
+ *
+ * @retval             Returns the queue handle on which this packet will be
+ *                     enqueued.
+ * @retval             ODP_QUEUE_INVALID for error case
+ *
+ * @note The packet has to be updated with valid header pointers L2, L3 and L4.
+ */
+odp_queue_t odp_queue_hash_result(odp_cos_t cos, odp_packet_t packet);
+
+/**
  * Discard a class-of-service along with all its associated resources
  *
  * @param[in]  cos_id  class-of-service instance.
-- 
1.9.1

Reply via email to