Regards,
Bala

On 6 April 2017 at 00:53, Brian Brooks <brian.bro...@linaro.org> wrote:
> On Fri, Dec 9, 2016 at 5:54 AM, Balasubramanian Manoharan
> <bala.manoha...@linaro.org> wrote:
>> 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;
>
> I like this idea and think it is critical for supporting
> implementations that can handle lots of queues. What I don't quite
> understand is how it relates to the rest of the Classification
> functionality. For example, I would like all packets coming from the
> physical interface to be hashed/parsed according to "hash_supported"
> and then assigned to their respective queues. I would then like to
> schedule from those queues. That is all. Is this possible? What
> priority and synchronization will those queues have?

This could be done by adding this configuration to the default Cos in
the pktio interface.
Currently there is hashing support with pktio interface but that will
distribute the packet to odp_pktin_queue_t
and the packets have to be received using odp_pktin_recv() function.

All the queues belonging to the single queue group will have the same
priority and synchronisation.


>
>>         /** 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