From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 4ED247F41 for ; Fri, 10 Oct 2014 03:12:30 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga101.fm.intel.com with ESMTP; 09 Oct 2014 18:19:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.04,689,1406617200"; d="scan'208";a="603119382" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga001.fm.intel.com with ESMTP; 09 Oct 2014 18:19:52 -0700 Received: from fmsmsx118.amr.corp.intel.com (10.18.116.18) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.195.1; Thu, 9 Oct 2014 18:19:52 -0700 Received: from shsmsx151.ccr.corp.intel.com (10.239.6.50) by fmsmsx118.amr.corp.intel.com (10.18.116.18) with Microsoft SMTP Server (TLS) id 14.3.195.1; Thu, 9 Oct 2014 18:19:51 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.230]) by SHSMSX151.ccr.corp.intel.com ([169.254.3.172]) with mapi id 14.03.0195.001; Fri, 10 Oct 2014 09:19:50 +0800 From: "Wu, Jingjing" To: "De Lara Guarch, Pablo" , "dev@dpdk.org" Thread-Topic: [dpdk-dev] [PATCH 1/4] lib/librte_ether: new filter APIs definition Thread-Index: AQHP2I5WMEr1odsAwUWwDvdg8zzky5wnde4AgAEnlGA= Date: Fri, 10 Oct 2014 01:19:49 +0000 Message-ID: <9BB6961774997848B5B42BEC655768F8B05AD0@SHSMSX104.ccr.corp.intel.com> References: <1411628369-29532-1-git-send-email-jingjing.wu@intel.com> <1411628369-29532-2-git-send-email-jingjing.wu@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH 1/4] lib/librte_ether: new filter APIs definition X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 10 Oct 2014 01:12:31 -0000 Hi > -----Original Message----- > From: De Lara Guarch, Pablo > Sent: Thursday, October 09, 2014 11:35 PM > To: Wu, Jingjing; dev@dpdk.org > Subject: RE: [dpdk-dev] [PATCH 1/4] lib/librte_ether: new filter APIs > definition >=20 > Hi, >=20 > > -----Original Message----- > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Jingjing Wu > > Sent: Thursday, September 25, 2014 7:59 AM > > To: dev@dpdk.org > > Subject: [dpdk-dev] [PATCH 1/4] lib/librte_ether: new filter APIs > > definition > > > > Define new APIs to support configure multi-kind filters using same > > APIs > > - rte_eth_dev_filter_supported > > - rte_eth_dev_filter_ctrl > > > > As to the implemetation discussion, please refer to > > http://dpdk.org/ml/archives/dev/2014-September/005179.html, and > > control packet filter implementation is based on it. >=20 > This patch is also present on the patchset Support flow director programm= ing > on Fortville. > Should this patchset be rejected then or just this patch? In second case, > could you send a v2 without this patch? I think this patch does not only present on the flow director patchset, but= also on mac vlan support patchset, vxlan patchset, and so on. All of them = are using the same new filter APIs. If any patchset is applied, others may = require some modification (just as you said to remove this pacth). >=20 > Thanks, > Pablo > > > > Signed-off-by: Jingjing Wu > > --- > > lib/librte_ether/Makefile | 1 + > > lib/librte_ether/rte_eth_ctrl.h | 78 > > +++++++++++++++++++++++++++++++++++++++++ > > lib/librte_ether/rte_ethdev.c | 32 +++++++++++++++++ > > lib/librte_ether/rte_ethdev.h | 44 +++++++++++++++++++++++ > > 4 files changed, 155 insertions(+) > > create mode 100644 lib/librte_ether/rte_eth_ctrl.h > > > > diff --git a/lib/librte_ether/Makefile b/lib/librte_ether/Makefile > > index b310f8b..a461c31 100644 > > --- a/lib/librte_ether/Makefile > > +++ b/lib/librte_ether/Makefile > > @@ -46,6 +46,7 @@ SRCS-y +=3D rte_ethdev.c # SYMLINK-y-include +=3D > > rte_ether.h SYMLINK-y-include +=3D rte_ethdev.h > > +SYMLINK-y-include +=3D rte_eth_ctrl.h > > > > # this lib depends upon: > > DEPDIRS-y +=3D lib/librte_eal lib/librte_mempool lib/librte_ring > > lib/librte_mbuf > > diff --git a/lib/librte_ether/rte_eth_ctrl.h b/lib/librte_ether/rte_eth= _ctrl.h > > new file mode 100644 > > index 0000000..34ab278 > > --- /dev/null > > +++ b/lib/librte_ether/rte_eth_ctrl.h > > @@ -0,0 +1,78 @@ > > +/*- > > + * BSD LICENSE > > + * > > + * Copyright(c) 2010-2014 Intel Corporation. All rights reserved. > > + * All rights reserved. > > + * > > + * Redistribution and use in source and binary forms, with or withou= t > > + * modification, are permitted provided that the following condition= s > > + * are met: > > + * > > + * * Redistributions of source code must retain the above copyrigh= t > > + * notice, this list of conditions and the following disclaimer. > > + * * Redistributions in binary form must reproduce the above copyr= ight > > + * notice, this list of conditions and the following disclaimer = in > > + * the documentation and/or other materials provided with the > > + * distribution. > > + * * Neither the name of Intel Corporation nor the names of its > > + * contributors may be used to endorse or promote products deriv= ed > > + * from this software without specific prior written permission. > > + * > > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND > > CONTRIBUTORS > > + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT > > NOT > > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND > > FITNESS FOR > > + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE > > COPYRIGHT > > + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, > > INCIDENTAL, > > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, > BUT > > NOT > > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; > LOSS > > OF USE, > > + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED > > AND ON ANY > > + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR > > TORT > > + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > OF > > THE USE > > + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH > > DAMAGE. > > + */ > > + > > +#ifndef _RTE_ETH_CTRL_H_ > > +#define _RTE_ETH_CTRL_H_ > > + > > +/** > > + * @file > > + * > > + * Ethernet device features and related data structures used > > + * by control APIs should be defined in this file. > > + * > > + */ > > + > > +#ifdef __cplusplus > > +extern "C" { > > +#endif > > + > > +/** > > + * Feature filter types > > + */ > > +enum rte_filter_type { > > + RTE_ETH_FILTER_NONE =3D 0, > > + RTE_ETH_FILTER_RSS, > > + RTE_ETH_FILTER_FDIR, > > + RTE_ETH_FILTER_MAX, > > +}; > > + > > +/** > > + * All generic operations to filters > > + */ > > +enum rte_filter_op { > > + RTE_ETH_FILTER_OP_NONE =3D 0, /**< used to check whether the > > type filter is supported */ > > + RTE_ETH_FILTER_OP_ADD, /**< add filter entry */ > > + RTE_ETH_FILTER_OP_UPDATE, /**< update filter entry */ > > + RTE_ETH_FILTER_OP_DELETE, /**< delete filter entry */ > > + RTE_ETH_FILTER_OP_FLUSH, /**< flush all entries */ > > + RTE_ETH_FILTER_OP_GET, /**< get filter entry */ > > + RTE_ETH_FILTER_OP_SET, /**< configurations */ > > + RTE_ETH_FILTER_OP_GET_INFO, /**< get information of filter, such > > as status or statistics */ > > + RTE_ETH_FILTER_OP_MAX, > > +}; > > + > > +#ifdef __cplusplus > > +} > > +#endif > > + > > +#endif /* _RTE_ETH_CTRL_H_ */ > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethde= v.c > > index b71b679..fdafb15 100644 > > --- a/lib/librte_ether/rte_ethdev.c > > +++ b/lib/librte_ether/rte_ethdev.c > > @@ -3139,3 +3139,35 @@ rte_eth_dev_get_flex_filter(uint8_t port_id, > > uint16_t index, > > return (*dev->dev_ops->get_flex_filter)(dev, index, filter, > > rx_queue); > > } > > + > > +int > > +rte_eth_dev_filter_supported(uint8_t port_id, enum rte_filter_type > > filter_type) > > +{ > > + struct rte_eth_dev *dev; > > + > > + if (port_id >=3D nb_ports) { > > + PMD_DEBUG_TRACE("Invalid port_id=3D%d\n", port_id); > > + return -ENODEV; > > + } > > + > > + dev =3D &rte_eth_devices[port_id]; > > + FUNC_PTR_OR_ERR_RET(*dev->dev_ops->filter_ctrl, -ENOTSUP); > > + return (*dev->dev_ops->filter_ctrl)(dev, filter_type, > > + RTE_ETH_FILTER_OP_NONE, NULL); > > +} > > + > > +int > > +rte_eth_dev_filter_ctrl(uint8_t port_id, enum rte_filter_type filter_t= ype, > > + enum rte_filter_op filter_op, void *arg) > > +{ > > + struct rte_eth_dev *dev; > > + > > + if (port_id >=3D nb_ports) { > > + PMD_DEBUG_TRACE("Invalid port_id=3D%d\n", port_id); > > + return -ENODEV; > > + } > > + > > + dev =3D &rte_eth_devices[port_id]; > > + FUNC_PTR_OR_ERR_RET(*dev->dev_ops->filter_ctrl, -ENOTSUP); > > + return (*dev->dev_ops->filter_ctrl)(dev, filter_type, filter_op, arg)= ; > > +} > > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethde= v.h > > index 60b24c5..e2ea84a 100644 > > --- a/lib/librte_ether/rte_ethdev.h > > +++ b/lib/librte_ether/rte_ethdev.h > > @@ -177,6 +177,7 @@ extern "C" { > > #include > > #include > > #include "rte_ether.h" > > +#include "rte_eth_ctrl.h" > > > > /** > > * A structure used to retrieve statistics for an Ethernet port. > > @@ -1383,6 +1384,12 @@ typedef int (*eth_get_flex_filter_t)(struct > > rte_eth_dev *dev, > > uint16_t *rx_queue); > > /**< @internal Get a flex filter rule on an Ethernet device */ > > > > +typedef int (*eth_filter_ctrl_t)(struct rte_eth_dev *dev, > > + enum rte_filter_type filter_type, > > + enum rte_filter_op filter_op, > > + void *arg); > > +/**< @internal Take operations to assigned filter type on an Ethernet > > device */ > > + > > /** > > * @internal A structure containing the functions exported by an Ether= net > > driver. > > */ > > @@ -1491,6 +1498,7 @@ struct eth_dev_ops { > > eth_add_flex_filter_t add_flex_filter; /**< add flex fi= lter. */ > > eth_remove_flex_filter_t remove_flex_filter; /**< remove flex > > filter. */ > > eth_get_flex_filter_t get_flex_filter; /**< get flex fi= lter. */ > > + eth_filter_ctrl_t filter_ctrl; /**< common filt= er control*/ > > }; > > > > /** > > @@ -3613,6 +3621,42 @@ int rte_eth_dev_remove_flex_filter(uint8_t > > port_id, uint16_t index); > > int rte_eth_dev_get_flex_filter(uint8_t port_id, uint16_t index, > > struct rte_flex_filter *filter, uint16_t *rx_queue); > > > > +/** > > + * Check whether the filter type is supported on an Ethernet device. > > + * All the supported filter types are defined in 'rte_eth_ctrl.h'. > > + * > > + * @param port_id > > + * The port identifier of the Ethernet device. > > + * @param filter_type > > + * filter type. > > + * @return > > + * - (0) if successful. > > + * - (-ENOTSUP) if hardware doesn't support this filter type. > > + * - (-ENODEV) if *port_id* invalid. > > + */ > > +int rte_eth_dev_filter_supported(uint8_t port_id, enum rte_filter_type > > filter_type); > > + > > +/** > > + * Take operations to assigned filter type on an Ethernet device. > > + * All the supported operations and filter types are defined in > > 'rte_eth_ctrl.h'. > > + * > > + * @param port_id > > + * The port identifier of the Ethernet device. > > + * @param filter_type > > + * filter type. > > + * @param filter_op > > + * The operation taken to assigned filter. > > + * @param arg > > + * A pointer to arguments defined specifically for the operation. > > + * @return > > + * - (0) if successful. > > + * - (-ENOTSUP) if hardware doesn't support. > > + * - (-ENODEV) if *port_id* invalid. > > + * - others depends on the specific operations implementation. > > + */ > > +int rte_eth_dev_filter_ctrl(uint8_t port_id, enum rte_filter_type > > filter_type, > > + enum rte_filter_op filter_op, void *arg); > > + > > #ifdef __cplusplus > > } > > #endif > > -- > > 1.8.1.4