Any comments or advises?
Thanks!
Fortville Filter features' development will be started based on this design
this week.
> -----Original Message-----
> From: Wu, Jingjing
> Sent: Thursday, September 4, 2014 8:05 PM
> To: dev at dpdk.org
> Cc: stephen at networkplumber.org; vincent.jardin at 6wind.com
> Subject: filter_ctl PMD API idea
>
> Hi, all
>
> When we develop filters feature in i40e driver for Intel? Ethernet Controller
> XL710/X710
> [Fortville] (For both 10G/40G), we found that there are lots of new filters,
> there are also
> some changes on the existing filters, comparing to ixgbe.
> If we keep the way to add new ops in rte_eth_dev for each new filter, it can
> work.
> But we suggest to use a more generic API for all filters to avoid a superset
> dev_ops. It needs
> to be cleaner and easy-to-use. There is a need for technical discussion.
>
> Here is the early design idea we are looking for comments.
>
> 1.?? Create two new APIs
> -----------------------------------------------------
> rte_eth_filter_supported(uint8_t port, uint16_t filter_type);
> /* check whether this filter type is supported for the queried port */
> rte_eth_filter_ctl(uint8_t port, uint16_t filter_type, uint16_t filter_op,
> void *arg);
> /* configure filters, will call new ops eth_filter_ctl in eth_dev_ops */
> -----------------------------------------------------
>
> 2.?? Define filter types, operations, and structures in new header file
> lib/librte_eth/rte_eth_filter.h.
> -----------------------------------------------------
> #define RTE_ETH_FILTER_RSS 1
> #define RTE_ETH_FILTER_SYN 2
> #define RTE_ETH_FILTER_5TUPLE 3
> #define RTE_ETH_FILTER_FDIR 4
> .... <all other filter types we support>
>
> #define RTE_ETH_FILTER_OP_GET 1
> #define RTE_ETH_FILTER_OP_ADD 2
> #define RTE_ETH_FILTER_OP_DELETE 3
> #define RTE_ETH_FILTER_OP_SET 4
> ....< other operations if want to define>...
>
> /* structures defined for corresponding filter type and operation */
> /* take RTE_ETH_FILTER_FDIR and OP_SET for example*/
>
> struct rte_eth_filter_fdir_cfg {
> #define RTE_ETH_FILTER_FDIR_SET_MASK 0
> #define RTE_ETH_FILTER_FDIR_SET_OFFSET 1
> ?? <other sub operations in this structure>
> uint16_t cfg_type;
> ??/* sub operation to defined what specific configuration it will take,
> ???and which following fields are meaningful*/
> ????
> ??/* fields, can be a union or combine of required specific items*/
> ????
>
> };
>
> -----------------------------------------------------
> By this way, It is easy to add more filter types or operation in future.
> And the difference among the same filter and operation can be distinguish by
> sub command
> in defined structure, e.g. ?cfg_type? in above rte_eth_filter_fdir_cfg
> structure.
>
> 3.?? Define ops in driver (take i40e for example)
> -----------------------------------------------------
> static struct eth_dev_ops i40e_eth_dev_ops = {
> ???????? . filter_ctl = i40e_filter_ctl,
> };
> -----------------------------------------------------
> Then the functions in drivers can be implemented separately.
>
> 4.?? Use case In test-pmd/cmdline.c
> -----------------------------------------------------
> #include <rte_eth_filter.h>
> /* add or change commands e.g. fdir_set (arg1) (arg2) ?? */
>
> static void
> cmd_fdir_parsed()
> {
> ??
> ??/* take setting fdir mask for example*/
> ??struct rte_eth_filter_fdir_cfg cfg;
>
> ??if (rte_eth_filter_supported(port, RTE_ETH_FILTER_FDIR)) {
> ?? cfg.cfg_type = RTE_ETH_FILTER_FDIR_SET_MASK;
> ?? /* fill the corresponding fields in cfg*/
> ?? ??
> ?? rte_eth_filter_ctl(port, RTE_ETH_FILTER_FDIR, RTE_ETH_FILTER_OP_SET,
> &cfg);
> ??}
> ??
> }
> -----------------------------------------------------
>
>
> Any comments are welcome!
>
> At the time being, only Intel PMD is only available on dpdk.org. We are lack
> of understanding
> on the other non-Intel PMD, the current design did not take them into
> account. But we are
> looking for the inputs from those PMD developers, we strongly look forward to
> those PMD
> are released as open source.
>
> Thanks!
> Jingjing