net/i40e: add private APIs for flow filtering
The legacy filter API will be superseded by rte_flow. There are also several small features which can not be implemented in rte_flow. This patch re-implemented these features as private API. Three APIs are added: rte_pmd_i40e_get_fdir_info. rte_pmd_i40e_get_fdir_stats. rte_pmd_i40e_set_gre_key_len. Signed-off-by: Chenxu Di <chenxux.di@intel.com> Acked-by: Jeff Guo <jia.guo@intel.com>
This commit is contained in:
parent
1d169e9daf
commit
5aeb286fe5
@ -132,6 +132,8 @@ New Features
|
||||
Updated i40e PMD with new features and improvements, including:
|
||||
|
||||
* Supported cloud filter for IPv4/6_TCP/UDP/SCTP with SRC port only or DST port only.
|
||||
* Re-implemented get_fdir_info and get_fdir_stat in private API.
|
||||
* Re-implemented set_gre_key_len in private API.
|
||||
|
||||
* **Added DOCSIS protocol to rte_security.**
|
||||
|
||||
|
@ -8973,7 +8973,7 @@ i40e_tunnel_filter_param_check(struct i40e_pf *pf,
|
||||
|
||||
#define I40E_GL_PRS_FVBM_MSK_ENA 0x80000000
|
||||
#define I40E_GL_PRS_FVBM(_i) (0x00269760 + ((_i) * 4))
|
||||
static int
|
||||
int
|
||||
i40e_dev_set_gre_key_len(struct i40e_hw *hw, uint8_t len)
|
||||
{
|
||||
struct i40e_pf *pf = &((struct i40e_adapter *)hw->back)->pf;
|
||||
|
@ -1288,6 +1288,11 @@ enum i40e_filter_pctype
|
||||
uint16_t flow_type);
|
||||
uint16_t i40e_pctype_to_flowtype(const struct i40e_adapter *adapter,
|
||||
enum i40e_filter_pctype pctype);
|
||||
int i40e_dev_set_gre_key_len(struct i40e_hw *hw, uint8_t len);
|
||||
void i40e_fdir_info_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_fdir_info *fdir);
|
||||
void i40e_fdir_stats_get(struct rte_eth_dev *dev,
|
||||
struct rte_eth_fdir_stats *stat);
|
||||
int i40e_fdir_ctrl_func(struct rte_eth_dev *dev,
|
||||
enum rte_filter_op filter_op,
|
||||
void *arg);
|
||||
|
@ -2169,7 +2169,7 @@ i40e_fdir_info_get_flex_mask(struct i40e_pf *pf,
|
||||
* @fdir: a pointer to a structure of type *rte_eth_fdir_info* to be filled with
|
||||
* the flow director information.
|
||||
*/
|
||||
static void
|
||||
void
|
||||
i40e_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir)
|
||||
{
|
||||
struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
|
||||
@ -2214,7 +2214,7 @@ i40e_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir)
|
||||
* @stat: a pointer to a structure of type *rte_eth_fdir_stats* to be filled with
|
||||
* the flow director statistics.
|
||||
*/
|
||||
static void
|
||||
void
|
||||
i40e_fdir_stats_get(struct rte_eth_dev *dev, struct rte_eth_fdir_stats *stat)
|
||||
{
|
||||
struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
|
||||
|
@ -3209,6 +3209,57 @@ rte_pmd_i40e_inset_set(uint16_t port, uint8_t pctype,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
rte_pmd_i40e_get_fdir_info(uint16_t port, struct rte_eth_fdir_info *fdir_info)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
|
||||
|
||||
dev = &rte_eth_devices[port];
|
||||
if (!is_i40e_supported(dev))
|
||||
return -ENOTSUP;
|
||||
|
||||
i40e_fdir_info_get(dev, fdir_info);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
rte_pmd_i40e_get_fdir_stats(uint16_t port, struct rte_eth_fdir_stats *fdir_stat)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
|
||||
|
||||
dev = &rte_eth_devices[port];
|
||||
if (!is_i40e_supported(dev))
|
||||
return -ENOTSUP;
|
||||
|
||||
i40e_fdir_stats_get(dev, fdir_stat);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
rte_pmd_i40e_set_gre_key_len(uint16_t port, uint8_t len)
|
||||
{
|
||||
struct rte_eth_dev *dev;
|
||||
struct i40e_pf *pf;
|
||||
struct i40e_hw *hw;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port, -ENODEV);
|
||||
|
||||
dev = &rte_eth_devices[port];
|
||||
if (!is_i40e_supported(dev))
|
||||
return -ENOTSUP;
|
||||
|
||||
pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private);
|
||||
hw = I40E_PF_TO_HW(pf);
|
||||
|
||||
return i40e_dev_set_gre_key_len(hw, len);
|
||||
}
|
||||
|
||||
int
|
||||
rte_pmd_i40e_set_switch_dev(uint16_t port_id, struct rte_eth_dev *switch_dev)
|
||||
{
|
||||
|
@ -1061,6 +1061,55 @@ rte_pmd_i40e_inset_field_clear(uint64_t *inset, uint8_t field_idx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get port fdir info
|
||||
*
|
||||
* @param port
|
||||
* The port identifier of the Ethernet device.
|
||||
* @param fdir_info
|
||||
* The fdir info of the port
|
||||
* @return
|
||||
* - (0) if successful.
|
||||
* - (-ENODEV) if *port* invalid.
|
||||
* - (-ENOTSUP) if operation not supported.
|
||||
*/
|
||||
__rte_experimental
|
||||
int
|
||||
rte_pmd_i40e_get_fdir_info(uint16_t port, struct rte_eth_fdir_info *fdir_info);
|
||||
|
||||
/**
|
||||
* Get port fdir status
|
||||
*
|
||||
* @param port
|
||||
* The port identifier of the Ethernet device.
|
||||
* @param fdir_stat
|
||||
* The fdir status of the port
|
||||
* @return
|
||||
* - (0) if successful.
|
||||
* - (-ENODEV) if *port* invalid.
|
||||
* - (-ENOTSUP) if operation not supported.
|
||||
*/
|
||||
__rte_experimental
|
||||
int
|
||||
rte_pmd_i40e_get_fdir_stats(uint16_t port,
|
||||
struct rte_eth_fdir_stats *fdir_stat);
|
||||
|
||||
/**
|
||||
* Set GRE key length
|
||||
*
|
||||
* @param port
|
||||
* The port identifier of the Ethernet device.
|
||||
* @param len
|
||||
* Length of gre-key
|
||||
* @return
|
||||
* - (0) if successful.
|
||||
* - (-ENODEV) if *port* invalid.
|
||||
* - (-ENOTSUP) if operation not supported.
|
||||
*/
|
||||
__rte_experimental
|
||||
int
|
||||
rte_pmd_i40e_set_gre_key_len(uint16_t port, uint8_t len);
|
||||
|
||||
/**
|
||||
* For ipn3ke, i40e works with FPGA.
|
||||
* In this situation, i40e get link status from fpga,
|
||||
|
@ -42,5 +42,8 @@ DPDK_20.0 {
|
||||
EXPERIMENTAL {
|
||||
global:
|
||||
|
||||
rte_pmd_i40e_get_fdir_info;
|
||||
rte_pmd_i40e_get_fdir_stats;
|
||||
rte_pmd_i40e_set_gre_key_len;
|
||||
rte_pmd_i40e_set_switch_dev;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user