Agreed. But this odp_cls_cos_create() API change is not just a rename
and it modifies the parameters to CoS create and hence it was better
to do this in a separate review process.

Regards,
Bala

On 17 December 2015 at 17:56, Bill Fischofer <bill.fischo...@linaro.org> wrote:
> If we want to split this into multiple patches for review convenience that's
> fine. I'd just like to be sure that we don't have a series of API breaks for
> 1.6, 1.7, etc.  Best to do that all at once on a release boundary.
>
> On Thu, Dec 17, 2015 at 6:25 AM, Bala Manoharan <bala.manoha...@linaro.org>
> wrote:
>>
>> On 17 December 2015 at 17:31, Bill Fischofer <bill.fischo...@linaro.org>
>> wrote:
>> > Ok, then the patch should be reworked to do this.  No point in dragging
>> > out
>> > the process through a series of disruptive changes.
>>
>> Yes. The ultimate goal is to add this prefix to all existing APIs.
>> This patch only adds a new api and it was better to add the new API
>> with the latest convention.
>>
>> I will post a separate patch which renames all the existing
>> classification APIs with the prefix odp_cls_xxx
>>
>> Regards,
>> Bala
>> >
>> > On Thu, Dec 17, 2015 at 5:56 AM, Savolainen, Petri (Nokia - FI/Espoo)
>> > <petri.savolai...@nokia.com> wrote:
>> >>
>> >> Yes, that’s the end goal of this process. All classification API calls,
>> >> types, defines, … are prefixed with odp_cls_.
>> >>
>> >>
>> >>
>> >> -Petri
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> From: EXT Bill Fischofer [mailto:bill.fischo...@linaro.org]
>> >> Sent: Thursday, December 17, 2015 1:54 PM
>> >>
>> >>
>> >> To: Savolainen, Petri (Nokia - FI/Espoo)
>> >> Cc: Bala Manoharan; LNG ODP Mailman List
>> >> Subject: Re: [lng-odp] [API-NEXT/PATCHv2 1/6] api: classification: add
>> >> class of serivce create api
>> >>
>> >>
>> >>
>> >> Fair enough, but then it seems we then need to add the odp_cls prefix
>> >> to a
>> >> lot more APIs and typedefs in the existing classification.h to be fully
>> >> consistent.  Right now there's a confusing mix of those that do and do
>> >> not
>> >> have this prefix.
>> >>
>> >>
>> >>
>> >> On Thu, Dec 17, 2015 at 5:49 AM, Savolainen, Petri (Nokia - FI/Espoo)
>> >> <petri.savolai...@nokia.com> wrote:
>> >>
>> >>
>> >>
>> >> What e.g. scheduler or TM would do with a odp_cos_t which is associated
>> >> with queue, pool and drop_policy?
>> >>
>> >>
>> >>
>> >> typedef struct odp_cls_cos_param {
>> >>        odp_queue_t queue;      /**< Queue associated with CoS */
>> >>        odp_pool_t pool;        /**< Pool associated with CoS */
>> >>        odp_drop_e drop_policy; /**< Drop policy associated with CoS */
>> >> } odp_cls_cos_param_t;
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> Scheduler (odp_queue_t) has its own priority scheduling and so does TM.
>> >> Cos_param.queue has meaning only when packet enters the system and is
>> >> stored
>> >> first time to the queue. After that packet QoS (or CoS) is defined by a
>> >> chain of queues, scheduling, application processing and TM. The initial
>> >> input queue, pool or packet input drop policy does not matter in later
>> >> stages. So this CoS (and those parameters) are significant only for the
>> >> classifier. This CoS specification end when classifier does enqueue or
>> >> drop
>> >> the packet.
>> >>
>> >>
>> >>
>> >> Sure, if entire ODP API level CoS property is specified later, we can
>> >> use
>> >> odp_cos_t for that but currently that’s not the case.
>> >>
>> >>
>> >>
>> >> DPI PMR would be very different from classification PMRs. DPI API would
>> >> deal with regular expressions, etc language to express multitude of
>> >> different combinations of possible packet payload … whereas packet
>> >> input
>> >> classification is shallow/fixed packet inspection on predefined header
>> >> fields (to keep it fast).
>> >>
>> >>
>> >>
>> >> -Petri
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> From: EXT Bill Fischofer [mailto:bill.fischo...@linaro.org]
>> >> Sent: Thursday, December 17, 2015 1:27 PM
>> >> To: Savolainen, Petri (Nokia - FI/Espoo)
>> >> Cc: Bala Manoharan; LNG ODP Mailman List
>> >>
>> >>
>> >> Subject: Re: [lng-odp] [API-NEXT/PATCHv2 1/6] api: classification: add
>> >> class of serivce create api
>> >>
>> >>
>> >>
>> >> I agree with that general convention, however a class of service is a
>> >> first class entity (like a pool).  It's why we have odp_pool_create()
>> >> and
>> >> parameterize that it's a buffer vs. packet pool instead of having
>> >> separate
>> >> odp_buffer_pool_create() and odp_packet_pool_create() APIs.  Using that
>> >> analogy odp_cos_create() is creating a class of service.  The fact that
>> >> a
>> >> class of service is being used for classification purposes would be
>> >> encoded
>> >> (if required) in the new odp_cos_param_t struct used to qualify the
>> >> creation.
>> >>
>> >>
>> >>
>> >> I agree that odp_drop_e is unspecific, however the logical
>> >> qualification
>> >> there would be odp_cos_drop_e (or _t) since it is an attribute on a
>> >> class of
>> >> service (you don't "drop" a classifier).  Indeed the current typedef
>> >> for
>> >> odp_drop_e says enum odp_cos_drop so the result of the typedef should
>> >> be an
>> >> odp_cos_drop_t.
>> >>
>> >>
>> >>
>> >> Similarly for PMRs the PMR is again a first class object which is why
>> >> odp_pmr_create() gives an odp_pmr_t.  Again, for consistency if we
>> >> needed to
>> >> qualify it we'd add an odp_pmr_param_t struct to the create() call to
>> >> do
>> >> that. That would make sense if we wanted to have PMRs that were needed
>> >> to be
>> >> distinguished between use by classification vs. DPI, etc.
>> >>
>> >>
>> >>
>> >> On Thu, Dec 17, 2015 at 5:04 AM, Savolainen, Petri (Nokia - FI/Espoo)
>> >> <petri.savolai...@nokia.com> wrote:
>> >>
>> >> The rationale behind this is that classification API should follow the
>> >> same, prefixed naming convention than other APIs. CoS is a generally
>> >> used
>> >> term and e.g. scheduler, TM, packet, etc  APIs could define also APIs
>> >> around
>> >> Class of Service. Here odp_cos_t is essentially a node in a
>> >> classification
>> >> hierarchy tree. It’s similarly to TM API odp_tm_node_t , which is
>> >> correctly
>> >> prefix and easy find when seen in code.
>> >>
>> >>
>> >>
>> >> Also other CLS API types (odp_drop_e, odp_pmr_t, odp_flowsig_t) should
>> >> be
>> >> prefixed since they are not self-explanatory part of classification API
>> >> (only). For example, a future DPI API could define “Pattern Matching
>> >> Rules”.
>> >>
>> >>
>> >>
>> >> -Petri
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> From: lng-odp [mailto:lng-odp-boun...@lists.linaro.org] On Behalf Of
>> >> EXT
>> >> Bill Fischofer
>> >> Sent: Thursday, December 17, 2015 11:59 AM
>> >> To: Bala Manoharan
>> >> Cc: LNG ODP Mailman List
>> >> Subject: Re: [lng-odp] [API-NEXT/PATCHv2 1/6] api: classification: add
>> >> class of serivce create api
>> >>
>> >>
>> >>
>> >> My argument is that odp_cls_cos_xxx is redundant and odp_cos_xxx is
>> >> both
>> >> less cumbersome and more intuitive for the application writer.
>> >> Consider
>> >> that if a Class of Service is only used in classification then there's
>> >> no
>> >> need for the redundant cls prefix.  But if we ever extend classes of
>> >> service
>> >> to be used by another component (e.g., allowing pktios to refer to
>> >> classes
>> >> of service directly) then the cls prefix would be confusingly
>> >> restrictive.
>> >>
>> >>
>> >>
>> >> Aside from that, the name change itself represents an API change and
>> >> it's
>> >> not clear what benefits are gained by doing this.  I'm not sure where
>> >> this
>> >> requirement originated, but perhaps we should revisit the reasoning
>> >> behind
>> >> it.
>> >>
>> >>
>> >>
>> >> On Thu, Dec 17, 2015 at 12:37 AM, Bala Manoharan
>> >> <bala.manoha...@linaro.org> wrote:
>> >>
>> >> The reason for having odp_cls_xxx is that class of service module
>> >> contains class of service and packet matching rule and we need a
>> >> common syntax to identify the module hence odp_cls_xxx is used as
>> >> common prefix.
>> >>
>> >> I agree all the functions in classifier module needs to be changed to
>> >> add the prefix odp_cls_xxx.I will add the rename as a separate patch
>> >> for the remaining functions.
>> >>
>> >> Regards,
>> >> Bala
>> >>
>> >>
>> >> On 17 December 2015 at 08:51, Bill Fischofer
>> >> <bill.fischo...@linaro.org>
>> >> wrote:
>> >> >
>> >> >
>> >> > On Wed, Dec 16, 2015 at 3:28 AM, Balasubramanian Manoharan
>> >> > <bala.manoha...@linaro.org> wrote:
>> >> >>
>> >> >> class of service create function now takes pool, queue, drop policy
>> >> >> and
>> >> >> name as input parameters.
>> >> >> Adds class of service parameter structure odp_cls_cos_param_t and
>> >> >> initialization function odp_cls_cos_param_init()
>> >> >>
>> >> >> Signed-off-by: Balasubramanian Manoharan <bala.manoha...@linaro.org>
>> >> >> ---
>> >> >> v2: additional documentation and review comments from Petri
>> >> >>
>> >> >>  include/odp/api/classification.h | 37
>> >> >> +++++++++++++++++++++++++++++++------
>> >> >>  1 file changed, 31 insertions(+), 6 deletions(-)
>> >> >>
>> >> >> diff --git a/include/odp/api/classification.h
>> >> >> b/include/odp/api/classification.h
>> >> >> index 725e1ab..4db5bf0 100644
>> >> >> --- a/include/odp/api/classification.h
>> >> >> +++ b/include/odp/api/classification.h
>> >> >> @@ -37,7 +37,7 @@ extern "C" {
>> >> >>
>> >> >>  /**
>> >> >>   * @def ODP_COS_INVALID
>> >> >> - * This value is returned from odp_cos_create() on failure,
>> >> >> + * This value is returned from odp_cls_cos_create() on failure,
>> >> >>   * May also be used as a sink class of service that
>> >> >>   * results in packets being discarded.
>> >> >>   */
>> >> >> @@ -60,9 +60,9 @@ extern "C" {
>> >> >>   */
>> >> >>
>> >> >>  /**
>> >> >> - * Class-of-service packet drop policies
>> >> >> + * class of service packet drop policies
>> >> >>   */
>> >> >> -typedef enum odp_cos_drop {
>> >> >> +typedef enum odp_cls_drop {
>> >> >>         ODP_COS_DROP_POOL,    /**< Follow buffer pool drop policy */
>> >> >>         ODP_COS_DROP_NEVER,    /**< Never drop, ignoring buffer pool
>> >> >> policy */
>> >> >>  } odp_drop_e;
>> >> >> @@ -89,14 +89,39 @@ typedef enum odp_cos_hdr_flow_fields {
>> >> >>  } odp_cos_hdr_flow_fields_e;
>> >> >>
>> >> >>  /**
>> >> >> + * Class of service parameters
>> >> >> + * 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_drop_e drop_policy; /**< Drop policy associated with CoS
>> >> >> */
>> >> >> +} odp_cls_cos_param_t;
>> >> >
>> >> >
>> >> > Why odp_cls_cos_param_t and not just odp_cos_param_t ?  See remarks
>> >> > under
>> >> > odp_cls_cos_create().  If that's changed then it would be consistent
>> >> > to
>> >> > change this as well.
>> >> >
>> >> >>
>> >> >> +
>> >> >> +/**
>> >> >> + * Initialize class of service parameters
>> >> >> + *
>> >> >> + * Initialize an odp_cls_cos_param_t to its default value for all
>> >> >> fields
>> >> >> + *
>> >> >> + * @param param   Address of the odp_cls_cos_param_t to be
>> >> >> initialized
>> >> >> + */
>> >> >> +void odp_cls_cos_param_init(odp_cls_cos_param_t *param);
>> >> >> +
>> >> >> +/**
>> >> >>   * Create a class-of-service
>> >> >>   *
>> >> >> - * @param[in]  name    String intended for debugging purposes.
>> >> >> + * @param      name    String intended for debugging purposes.
>> >> >>   *
>> >> >> - * @return             Class of service instance identifier
>> >> >> + * @param      param   class of service parameters
>> >> >> + *
>> >> >> + * @retval             class of service handle
>> >> >>   * @retval             ODP_COS_INVALID on failure.
>> >> >> + *
>> >> >> + * @note ODP_QUEUE_INVALID and ODP_POOL_INVALID are valid values
>> >> >> for
>> >> >> queue
>> >> >> + * and pool associated with a class of service and when any one of
>> >> >> these
>> >> >> values
>> >> >> + * are configured as INVALID then the packets assigned to the CoS
>> >> >> gets
>> >> >> dropped.
>> >> >>   */
>> >> >> -odp_cos_t odp_cos_create(const char *name);
>> >> >> +odp_cos_t odp_cls_cos_create(const char *name, odp_cls_cos_param_t
>> >> >> *param);
>> >> >
>> >> >
>> >> > The additional parameter seems reasonable, but it's not clear why the
>> >> > function needs to be renamed cos already stands for Class of Service
>> >> > so
>> >> > odp_cls_cos_create() expands to ODP Classifier Class of Service
>> >> > Create
>> >> > which
>> >> > seems somewhat redundant.  It's also inconsistent in that the created
>> >> > object
>> >> > is of type odp_cos_t, not odp_cls_cos_t and is non-symmetric with the
>> >> > existing odp_cos_destroy() function.  I'd leave this as just
>> >> > odp_cos_create() with the additional parameter.
>> >> >>
>> >> >>
>> >> >>  /**
>> >> >>   * Discard a class-of-service along with all its associated
>> >> >> resources
>> >> >> --
>> >> >> 1.9.1
>> >> >>
>> >> >> _______________________________________________
>> >> >> lng-odp mailing list
>> >> >> lng-odp@lists.linaro.org
>> >> >> https://lists.linaro.org/mailman/listinfo/lng-odp
>> >> >
>> >> >
>> >>
>> >> --
>> >> Regards,
>> >> Bala
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >
>> >
>>
>>
>>
>> --
>> Regards,
>> Bala
>
>



-- 
Regards,
Bala
_______________________________________________
lng-odp mailing list
lng-odp@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/lng-odp

Reply via email to