530beded12
The rte_flow feature breaks the monolithic approach for ethdev by introducing the new rte_flow API to ethdev using a plugin-like approach. Basically, the rte_flow API is still logically part of ethdev: - It extends the ethdev functionality: rte_flow is a new feature/ capability of ethdev; - all its functions work on an Ethernet device: the first parameter of the rte_flow functions is Ethernet device port ID. Also, the rte_flow API is a sort of capability plugin for ethdev: - the rte_flow API functions have their own name space: they are called rte_flow_operationXYZ() as opposed to rte_eth_dev_flow_operationXYZ()); - the rte_flow API functions are placed in separate files in the same librte_ether folder as opposed to rte_ethdev.[hc]. The way it works is by using the existing ethdev API function rte_eth_dev_filter_ctrl() to query the current Ethernet device port ID for the support of the rte_flow capability and return the pointer to the rte_flow operations when supported and NULL otherwise: struct rte_flow_ops *eth_flow_ops; int rte = rte_eth_dev_filter_ctrl(eth_port_id, RTE_ETH_FILTER_GENERIC, RTE_ETH_FILTER_GET, ð_flow_ops); This patch reuses the same approach for ethdev Traffic Management API. Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com> Acked-by: Keith Wiles <keith.wiles@intel.com> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com> Acked-by: Hemant Agrawal <hemant.agrawal@nxp.com>