On Sun, Mar 1, 2020 at 9:28 PM Pavan Nikhilesh Bhagavatula
<pbhagavat...@marvell.com> wrote:
>
> Hi OrI,
>
> >
> >Hi Pavan,
> >
> >
> >> -----Original Message-----
> >> From: dev <dev-boun...@dpdk.org> On Behalf Of Pavan Nikhilesh
> >Bhagavatula
> >> Sent: Sunday, March 1, 2020 4:38 PM
> >> To: Ori Kam <or...@mellanox.com>; Jerin Jacob Kollanukkaran
> >> <jer...@marvell.com>; xiang.w.w...@intel.com
> >> Cc: dev@dpdk.org; Shahaf Shuler <shah...@mellanox.com>;
> >> hemant.agra...@nxp.com; Opher Reviv <op...@mellanox.com>;
> >Alex
> >> Rosenbaum <al...@mellanox.com>; Dovrat Zifroni
> ><dov...@marvell.com>;
> >> Prasun Kapoor <pkap...@marvell.com>; nipun.gu...@nxp.com;
> >> bruce.richard...@intel.com; yang.a.h...@intel.com;
> >harry.ch...@intel.com;
> >> gu.ji...@zte.com.cn; shanjia...@chinatelecom.cn;
> >> zhangy....@chinatelecom.cn; lixin...@huachentel.com;
> >wush...@inspur.com;
> >> yuying...@yxlink.com; fanchengg...@sunyainfo.com;
> >> davidf...@tencent.com; liuzho...@chinaunicom.cn;
> >> zhaoyon...@huawei.com; o...@yunify.com; j...@netgate.com;
> >> hongjun...@intel.com; j.bromh...@titan-ic.com; d...@ntop.org;
> >> f...@napatech.com; arthur...@lionic.com; Thomas Monjalon
> >> <tho...@monjalon.net>
> >> Subject: Re: [dpdk-dev] [EXT] [RFC v5] regexdev: introduce regexdev
> >subsystem
> >>
> >> Hi Ori,
> >>
> >> >
> >> >Hi Pavan,
> >> >
> >> >> -----Original Message-----
> >> >> From: dev <dev-boun...@dpdk.org> On Behalf Of Pavan
> >Nikhilesh
> >> >Bhagavatula
> >> >> Sent: Sunday, March 1, 2020 3:23 PM
> >> >> To: Ori Kam <or...@mellanox.com>; Jerin Jacob Kollanukkaran
> >> >> <jer...@marvell.com>; xiang.w.w...@intel.com
> >> >> Cc: dev@dpdk.org; Shahaf Shuler <shah...@mellanox.com>;
> >> >> hemant.agra...@nxp.com; Opher Reviv <op...@mellanox.com>;
> >> >Alex
> >> >> Rosenbaum <al...@mellanox.com>; Dovrat Zifroni
> >> ><dov...@marvell.com>;
> >> >> Prasun Kapoor <pkap...@marvell.com>; nipun.gu...@nxp.com;
> >> >> bruce.richard...@intel.com; yang.a.h...@intel.com;
> >> >harry.ch...@intel.com;
> >> >> gu.ji...@zte.com.cn; shanjia...@chinatelecom.cn;
> >> >> zhangy....@chinatelecom.cn; lixin...@huachentel.com;
> >> >wush...@inspur.com;
> >> >> yuying...@yxlink.com; fanchengg...@sunyainfo.com;
> >> >> davidf...@tencent.com; liuzho...@chinaunicom.cn;
> >> >> zhaoyon...@huawei.com; o...@yunify.com; j...@netgate.com;
> >> >> hongjun...@intel.com; j.bromh...@titan-ic.com; d...@ntop.org;
> >> >> f...@napatech.com; arthur...@lionic.com; Thomas Monjalon
> >> >> <tho...@monjalon.net>
> >> >> Subject: Re: [dpdk-dev] [EXT] [RFC v5] regexdev: introduce
> >regexdev
> >> >subsystem
> >> >>
> >> >> Hi Ori,
> >> >>
> >> >> >
> >> >> >Hi Pavan,
> >> >> >Thanks for the comments please see below.
> >> >> >
> >> >> >> -----Original Message-----
> >> >> >> From: dev <dev-boun...@dpdk.org> On Behalf Of Pavan
> >> >Nikhilesh
> >> >> >Bhagavatula
> >> >> >> Sent: Sunday, March 1, 2020 8:13 AM
> >> >> >> To: Ori Kam <or...@mellanox.com>; Jerin Jacob Kollanukkaran
> >> >> >> <jer...@marvell.com>; xiang.w.w...@intel.com
> >> >> >> Cc: dev@dpdk.org; Shahaf Shuler <shah...@mellanox.com>;
> >> >> >> hemant.agra...@nxp.com; Opher Reviv
> ><op...@mellanox.com>;
> >> >> >Alex
> >> >> >> Rosenbaum <al...@mellanox.com>; Dovrat Zifroni
> >> >> ><dov...@marvell.com>;
> >> >> >> Prasun Kapoor <pkap...@marvell.com>;
> >nipun.gu...@nxp.com;
> >> >> >> bruce.richard...@intel.com; yang.a.h...@intel.com;
> >> >> >harry.ch...@intel.com;
> >> >> >> gu.ji...@zte.com.cn; shanjia...@chinatelecom.cn;
> >> >> >> zhangy....@chinatelecom.cn; lixin...@huachentel.com;
> >> >> >wush...@inspur.com;
> >> >> >> yuying...@yxlink.com; fanchengg...@sunyainfo.com;
> >> >> >> davidf...@tencent.com; liuzho...@chinaunicom.cn;
> >> >> >> zhaoyon...@huawei.com; o...@yunify.com; j...@netgate.com;
> >> >> >> hongjun...@intel.com; j.bromh...@titan-ic.com;
> >d...@ntop.org;
> >> >> >> f...@napatech.com; arthur...@lionic.com; Thomas Monjalon
> >> >> >> <tho...@monjalon.net>
> >> >> >> Subject: Re: [dpdk-dev] [EXT] [RFC v5] regexdev: introduce
> >> >regexdev
> >> >> >subsystem
> >> >> >>
> >> >> >> Hi Ori,
> >> >> >>
> >> >> >> Minor comments below.
> >> >> >>
> >> >> >> <snip>
> >> >> >>
> >> >> >> >+/**
> >> >> >> >+ * The generic *rte_regex_ops* structure to hold the RegEx
> >> >> >attributes
> >> >> >> >+ * for enqueue and dequeue operation.
> >> >> >> >+ */
> >> >> >> >+struct rte_regex_ops {
> >> >> >> >+     /* W0 */
> >> >> >> >+     uint16_t req_flags;
> >> >> >> >+     /**< Request flags for the RegEx ops.
> >> >> >> >+      * @see RTE_REGEX_OPS_REQ_*
> >> >> >> >+      */
> >> >> >> >+     uint16_t rsp_flags;
> >> >> >> >+     /**< Response flags for the RegEx ops.
> >> >> >> >+      * @see RTE_REGEX_OPS_RSP_*
> >> >> >> >+      */
> >> >> >> >+     uint16_t nb_actual_matches;
> >> >> >> >+     /**< The total number of actual matches detected by
> >the
> >> >> >> >Regex device.*/
> >> >> >> >+     uint16_t nb_matches;
> >> >> >> >+     /**< The total number of matches returned by the
> >RegEx
> >> >> >> >device for this
> >> >> >> >+      * scan. The size of *rte_regex_ops::matches* zero
> >length
> >> array
> >> >> >> >will be
> >> >> >> >+      * this value.
> >> >> >> >+      *
> >> >> >> >+      * @see struct rte_regex_ops::matches, struct
> >> >> >> >rte_regex_match
> >> >> >> >+      */
> >> >> >> >+
> >> >> >> >+     /* W1 */
> >> >> >> >+     struct rte_mbuf mbuf; /**< source mbuf, to search in.
> >*/
> >> >> >>
> >> >> >> This should be *mbuf.
> >> >> >
> >> >> >Yes you are correct will fix.
> >> >> >
> >> >> >>
> >> >> >> >+
> >> >> >> >+     /* W2 */
> >> >> >> >+     uint16_t group_id0;
> >> >> >>
> >> >> >> This should be group_id1.
> >> >> >>
> >> >> >No this is correct is should be id0. We are starting from group 0.
> >> >> >The comment below states that the first group, meaning group 0
> >> >must
> >> >> >be
> >> >> >valid group while group 1 doesn’t have to be vaild.
> >> >>
> >> >> Would that mean that group_id0 is always valid?
> >> >> Since there is no `RTE_REGEX_OPS_REQ_GROUP_ID0_VALID_F`
> >flag.
> >> >>
> >> >Yes, you must have at least one group.
> >>
> >> Makes sense, I think we need to update the comment a bit as it only
> >mentions
> >> that
> >> at least one group but it should be group_id0 has to be always valid.
> >>
> >> (An application can erroneously set valid group_id1 instead of
> >group_id0)
> >>
> >
> >What about the next comment?
> >/**< First group_id to match the rule against. This group must be valid.
> >In
> >  * order to support more group (up to 4 groups). The group number
> >should
> >  * be set. For example to enable group 1 group_id1 should be set
> >  * with the group value and  and the
> >RTE_REGEX_OPS_REQ_GROUP_ID1_VALID_F flag should be set.
> >  * Respectively similar flags for group_id2 and group_id3.
> >  * Upon the match, struct rte_regex_match::group_id shall be updated
> >  * with matching group ID by the device. Group ID scheme provides
> >  * rule isolation and effective pattern matching.
> >*/
>
> Looks good with minor corrections as below
>
> /**< First group_id to match the rule against. This group must be valid.
>   * In order to support more than one group per each op (up to 4 groups), any 
> of the group_id<1-3> should
>   * hold a valid group id along with RTE_REGEX_OPS_REQ_GROUP_ID<1-3>_VALID_F 
> flag set.
>   * For example, to match against group 100 and 101, group_id0 should be set 
> to 100 and group_id1 should
>   * be set to 101 and the RTE_REGEX_OPS_REQ_GROUP_ID1_VALID_F flag should be 
> set.
>   * Respectively similar flags for group_id2 and group_id3.
>   * Upon the match, struct rte_regex_match::group_id shall be updated
>   * with matching group ID by the device. Group ID scheme provides
>   * rule isolation and effective pattern matching.
> */
I think, we can remove the limitation of group0 is always valid.
There are use cases like each group belongs certain functionality and
based on the packet type or
so application decides the group. In that case, group 0 may or may not valid.

IMO, By spec, we can dictate,

At minimum of one of the group should be valid and selected, Behaviour
is undefined if any of the group is not selected(This is to avoid fast
path check).

Thoughts?






>
> >
> >/**< First group_id to match the rule against. Minimum one group id
> >  * must be provided by application.
> >  * When RTE_REGEX_OPS_REQ_GROUP_ID1_VALID_F set then
> >group_id1
> >  * is valid, respectively similar flags for group_id2 and group_id3.
> >  * Upon the match, struct rte_regex_match::group_id shall be updated
> >  * with matching group ID by the device. Group ID scheme provides
> >  * rule isolation and effective pattern matching.
> >
> >> >
> >> >> >
> >> >> >> >+     /**< First group_id to match the rule against. Minimum
> >one
> >> >> >> >group id
> >> >> >> >+      * must be provided by application.
> >> >> >> >+      * When RTE_REGEX_OPS_REQ_GROUP_ID1_VALID_F
> >set then
> >> >> >> >group_id1
> >> >> >> >+      * is valid, respectively similar flags for group_id2 and
> >> group_id3.
> >> >> >> >+      * Upon the match, struct rte_regex_match::group_id
> >shall be
> >> >> >> >updated
> >> >> >> >+      * with matching group ID by the device. Group ID
> >scheme
> >> >> >> >provides
> >> >> >> >+      * rule isolation and effective pattern matching.
> >> >> >> >+      */
> >> >> >> >+     uint16_t group_id1;
> >> >> >> >+     /**< Second group_id to match the rule against.
> >> >> >> >+      *
> >> >> >> >+      * @see RTE_REGEX_OPS_REQ_GROUP_ID1_VALID_F
> >> >> >> >+      */
> >> >> >>
> >> >> >> The above `group_id1` should be removed as its duplicate.
> >> >> >>
> >> >> >
> >> >> >This is not duplicate, see above comment.
> >> >> >
> >> >> >> >+     uint16_t group_id2;
> >> >> >> >+     /**< Third group_id to match the rule against.
> >> >> >> >+      *
> >> >> >> >+      * @see RTE_REGEX_OPS_REQ_GROUP_ID2_VALID_F
> >> >> >> >+      */
> >> >> >> >+     uint16_t group_id3;
> >> >> >> >+     /**< Forth group_id to match the rule against.
> >> >> >> >+      *
> >> >> >> >+      * @see RTE_REGEX_OPS_REQ_GROUP_ID3_VALID_F
> >> >> >> >+      */
> >> >> >> >+
> >> >> >> >+     /* W3 */
> >> >> >> >+     RTE_STD_C11
> >> >> >> >+     union {
> >> >> >> >+             uint64_t user_id;
> >> >> >> >+             /**< Application specific opaque value. An
> >application
> >> >> >> >may use
> >> >> >> >+              * this field to hold application specific value to
> >share
> >> >> >> >+              * between dequeue and enqueue operation.
> >> >> >> >+              * Implementation should not modify this field.
> >> >> >> >+              */
> >> >> >> >+             void *user_ptr;
> >> >> >> >+             /**< Pointer representation of *user_id* */
> >> >> >> >+     };
> >> >> >> >+
> >> >> >> >+     /* W4 */
> >> >> >> >+     struct rte_regex_match matches[];
> >> >> >> >+     /**< Zero length array to hold the match tuples.
> >> >> >> >+      * The struct rte_regex_ops::nb_matches value holds
> >the
> >> >> >> >number of
> >> >> >> >+      * elements in this array.
> >> >> >> >+      *
> >> >> >> >+      * @see struct rte_regex_ops::nb_matches
> >> >> >> >+      */
> >> >> >> >+};

Reply via email to