* [PATCH 0/3] ethdev: remove deprecated Flow Director configuration @ 2022-08-03 11:13 Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 1/3] net/ixgbe: add helper to get " Andrew Rybchenko ` (3 more replies) 0 siblings, 4 replies; 7+ messages in thread From: Andrew Rybchenko @ 2022-08-03 11:13 UTC (permalink / raw) To: Thomas Monjalon, Ferruh Yigit Cc: dev, Qiming Yang, Wenjun Wu, Yuying Zhang, Beilei Xing, Rasesh Mody, Devendra Singh Rawat, Jiawen Wu, Jian Wang Flow Director configuration fdir_conf was deprecated long time ago and was planned to be removed in 20.11. i40e, ixgbe, qede and txgbe driver maintainers are encouraged to review correspodning patches very carefully. Internal copy of the Flow Director configuration in ixgbe and txgbe drivers is not actually initialized. Should I use configuration from testpmd as the default one? Andrew Rybchenko (3): net/ixgbe: add helper to get Flow Director configuration net/txgbe: add helper to get Flow Director configuration ethdev: remove deprecated Flow Director configuration app/test-pmd/cmdline.c | 343 -------------------- app/test-pmd/config.c | 100 ------ app/test-pmd/parameters.c | 76 ----- app/test-pmd/testpmd.c | 24 -- app/test-pmd/testpmd.h | 6 - doc/guides/nics/fm10k.rst | 2 - doc/guides/nics/ixgbe.rst | 1 - doc/guides/rel_notes/deprecation.rst | 4 - doc/guides/rel_notes/release_22_11.rst | 4 + doc/guides/testpmd_app_ug/run_app.rst | 27 -- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 38 --- drivers/net/cnxk/cnxk_ethdev.c | 5 - drivers/net/fm10k/fm10k_rxtx_vec.c | 5 - drivers/net/hns3/hns3_rxtx_vec.c | 4 - drivers/net/i40e/i40e_ethdev.c | 31 -- drivers/net/i40e/i40e_fdir.c | 304 +---------------- drivers/net/i40e/i40e_rxtx_vec_common.h | 5 - drivers/net/ixgbe/ixgbe_ethdev.c | 2 +- drivers/net/ixgbe/ixgbe_ethdev.h | 4 + drivers/net/ixgbe/ixgbe_fdir.c | 32 +- drivers/net/ixgbe/ixgbe_flow.c | 13 +- drivers/net/ixgbe/ixgbe_rxtx_vec_common.h | 2 +- drivers/net/octeontx/octeontx_ethdev.c | 5 - drivers/net/qede/qede_filter.c | 29 +- drivers/net/sfc/sfc.c | 5 - drivers/net/sfc/sfc_repr.c | 5 - drivers/net/thunderx/nicvf_ethdev.c | 5 - drivers/net/txgbe/txgbe_ethdev.c | 2 +- drivers/net/txgbe/txgbe_ethdev.h | 3 + drivers/net/txgbe/txgbe_fdir.c | 24 +- drivers/net/txgbe/txgbe_flow.c | 13 +- lib/ethdev/ethdev_driver.h | 36 ++ lib/ethdev/rte_ethdev.h | 43 --- 33 files changed, 100 insertions(+), 1102 deletions(-) -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/3] net/ixgbe: add helper to get Flow Director configuration 2022-08-03 11:13 [PATCH 0/3] ethdev: remove deprecated Flow Director configuration Andrew Rybchenko @ 2022-08-03 11:13 ` Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 2/3] net/txgbe: " Andrew Rybchenko ` (2 subsequent siblings) 3 siblings, 0 replies; 7+ messages in thread From: Andrew Rybchenko @ 2022-08-03 11:13 UTC (permalink / raw) To: Qiming Yang, Wenjun Wu; +Cc: dev Flow Director configuration is deprecated in generic ethdev device configuration and will be removed. However, it is essential for the driver flow API support and cannot be removed completely without loss of flow API support. Prepare to move the configuration into device private data. Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> --- drivers/net/ixgbe/ixgbe_ethdev.c | 2 +- drivers/net/ixgbe/ixgbe_ethdev.h | 3 +++ drivers/net/ixgbe/ixgbe_fdir.c | 32 +++++++++++------------ drivers/net/ixgbe/ixgbe_flow.c | 2 +- drivers/net/ixgbe/ixgbe_rxtx_vec_common.h | 2 +- 5 files changed, 22 insertions(+), 19 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index f31bbb7895..1dfad0e63d 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -2690,7 +2690,7 @@ ixgbe_dev_start(struct rte_eth_dev *dev) /* Configure DCB hw */ ixgbe_configure_dcb(dev); - if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_NONE) { + if (IXGBE_DEV_FDIR_CONF(dev)->mode != RTE_FDIR_MODE_NONE) { err = ixgbe_fdir_configure(dev); if (err) goto error; diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h index cc6049a66a..eabefd6343 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.h +++ b/drivers/net/ixgbe/ixgbe_ethdev.h @@ -522,6 +522,9 @@ struct ixgbe_vf_representor { int ixgbe_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params); int ixgbe_vf_representor_uninit(struct rte_eth_dev *ethdev); +#define IXGBE_DEV_FDIR_CONF(dev) \ + (&(dev)->data->dev_conf.fdir_conf) + #define IXGBE_DEV_PRIVATE_TO_HW(adapter)\ (&((struct ixgbe_adapter *)adapter)->hw) diff --git a/drivers/net/ixgbe/ixgbe_fdir.c b/drivers/net/ixgbe/ixgbe_fdir.c index 834c1b3f51..06d6e2126d 100644 --- a/drivers/net/ixgbe/ixgbe_fdir.c +++ b/drivers/net/ixgbe/ixgbe_fdir.c @@ -317,7 +317,7 @@ fdir_set_input_mask_82599(struct rte_eth_dev *dev) reg = IXGBE_PCI_REG_ADDR(hw, IXGBE_FDIRDIP4M); *reg = ~(info->mask.dst_ipv4_mask); - if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_SIGNATURE) { + if (IXGBE_DEV_FDIR_CONF(dev)->mode == RTE_FDIR_MODE_SIGNATURE) { /* * Store source and destination IPv6 masks (bit reversed) */ @@ -346,7 +346,7 @@ fdir_set_input_mask_x550(struct rte_eth_dev *dev) uint32_t fdirm = IXGBE_FDIRM_POOL | IXGBE_FDIRM_DIPv6 | IXGBE_FDIRM_FLEX; uint32_t fdiripv6m; - enum rte_fdir_mode mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode mode = IXGBE_DEV_FDIR_CONF(dev)->mode; uint16_t mac_mask; PMD_INIT_FUNC_TRACE(); @@ -469,7 +469,7 @@ static int ixgbe_fdir_store_input_mask(struct rte_eth_dev *dev, const struct rte_eth_fdir_masks *input_mask) { - enum rte_fdir_mode mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode mode = IXGBE_DEV_FDIR_CONF(dev)->mode; if (mode >= RTE_FDIR_MODE_SIGNATURE && mode <= RTE_FDIR_MODE_PERFECT) @@ -485,7 +485,7 @@ ixgbe_fdir_store_input_mask(struct rte_eth_dev *dev, int ixgbe_fdir_set_input_mask(struct rte_eth_dev *dev) { - enum rte_fdir_mode mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode mode = IXGBE_DEV_FDIR_CONF(dev)->mode; if (mode >= RTE_FDIR_MODE_SIGNATURE && mode <= RTE_FDIR_MODE_PERFECT) @@ -639,7 +639,7 @@ ixgbe_fdir_configure(struct rte_eth_dev *dev) int err; uint32_t fdirctrl, pbsize; int i; - enum rte_fdir_mode mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode mode = IXGBE_DEV_FDIR_CONF(dev)->mode; PMD_INIT_FUNC_TRACE(); @@ -658,7 +658,7 @@ ixgbe_fdir_configure(struct rte_eth_dev *dev) mode != RTE_FDIR_MODE_PERFECT) return -ENOSYS; - err = configure_fdir_flags(&dev->data->dev_conf.fdir_conf, &fdirctrl); + err = configure_fdir_flags(IXGBE_DEV_FDIR_CONF(dev), &fdirctrl); if (err) return err; @@ -680,13 +680,13 @@ ixgbe_fdir_configure(struct rte_eth_dev *dev) for (i = 1; i < 8; i++) IXGBE_WRITE_REG(hw, IXGBE_RXPBSIZE(i), 0); - err = fdir_set_input_mask(dev, &dev->data->dev_conf.fdir_conf.mask); + err = fdir_set_input_mask(dev, &IXGBE_DEV_FDIR_CONF(dev)->mask); if (err < 0) { PMD_INIT_LOG(ERR, " Error on setting FD mask"); return err; } - err = ixgbe_set_fdir_flex_conf(dev, - &dev->data->dev_conf.fdir_conf.flex_conf, &fdirctrl); + err = ixgbe_set_fdir_flex_conf(dev, &IXGBE_DEV_FDIR_CONF(dev)->flex_conf, + &fdirctrl); if (err < 0) { PMD_INIT_LOG(ERR, " Error on setting FD flexible arguments."); return err; @@ -1121,7 +1121,7 @@ ixgbe_fdir_filter_program(struct rte_eth_dev *dev, int err; struct ixgbe_hw_fdir_info *info = IXGBE_DEV_PRIVATE_TO_FDIR_INFO(dev->data->dev_private); - enum rte_fdir_mode fdir_mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode fdir_mode = IXGBE_DEV_FDIR_CONF(dev)->mode; struct ixgbe_fdir_filter *node; bool add_node = FALSE; @@ -1165,12 +1165,12 @@ ixgbe_fdir_filter_program(struct rte_eth_dev *dev, return -ENOTSUP; } fdirhash = atr_compute_perfect_hash_82599(&rule->ixgbe_fdir, - dev->data->dev_conf.fdir_conf.pballoc); + IXGBE_DEV_FDIR_CONF(dev)->pballoc); fdirhash |= rule->soft_id << IXGBE_FDIRHASH_SIG_SW_INDEX_SHIFT; } else fdirhash = atr_compute_sig_hash_82599(&rule->ixgbe_fdir, - dev->data->dev_conf.fdir_conf.pballoc); + IXGBE_DEV_FDIR_CONF(dev)->pballoc); if (del) { err = ixgbe_remove_fdir_filter(info, &rule->ixgbe_fdir); @@ -1188,7 +1188,7 @@ ixgbe_fdir_filter_program(struct rte_eth_dev *dev, fdircmd_flags = (update) ? IXGBE_FDIRCMD_FILTER_UPDATE : 0; if (rule->fdirflags & IXGBE_FDIRCMD_DROP) { if (is_perfect) { - queue = dev->data->dev_conf.fdir_conf.drop_queue; + queue = IXGBE_DEV_FDIR_CONF(dev)->drop_queue; fdircmd_flags |= IXGBE_FDIRCMD_DROP; } else { PMD_DRV_LOG(ERR, "Drop option is not supported in" @@ -1288,7 +1288,7 @@ ixgbe_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir_info offset = ((fdirctrl & IXGBE_FDIRCTRL_FLEX_MASK) >> IXGBE_FDIRCTRL_FLEX_SHIFT) * sizeof(uint16_t); - fdir_info->mode = dev->data->dev_conf.fdir_conf.mode; + fdir_info->mode = IXGBE_DEV_FDIR_CONF(dev)->mode; max_num = (1 << (FDIRENTRIES_NUM_SHIFT + (fdirctrl & FDIRCTRL_PBALLOC_MASK))); if (fdir_info->mode >= RTE_FDIR_MODE_PERFECT && @@ -1341,7 +1341,7 @@ ixgbe_fdir_stats_get(struct rte_eth_dev *dev, struct rte_eth_fdir_stats *fdir_st struct ixgbe_hw_fdir_info *info = IXGBE_DEV_PRIVATE_TO_FDIR_INFO(dev->data->dev_private); uint32_t reg, max_num; - enum rte_fdir_mode fdir_mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode fdir_mode = IXGBE_DEV_FDIR_CONF(dev)->mode; /* Get the information from registers */ reg = IXGBE_READ_REG(hw, IXGBE_FDIRFREE); @@ -1398,7 +1398,7 @@ ixgbe_fdir_filter_restore(struct rte_eth_dev *dev) IXGBE_DEV_PRIVATE_TO_FDIR_INFO(dev->data->dev_private); struct ixgbe_fdir_filter *node; bool is_perfect = FALSE; - enum rte_fdir_mode fdir_mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode fdir_mode = IXGBE_DEV_FDIR_CONF(dev)->mode; if (fdir_mode >= RTE_FDIR_MODE_PERFECT && fdir_mode <= RTE_FDIR_MODE_PERFECT_TUNNEL) diff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c index 368342872a..c018bbc0f1 100644 --- a/drivers/net/ixgbe/ixgbe_flow.c +++ b/drivers/net/ixgbe/ixgbe_flow.c @@ -2758,7 +2758,7 @@ ixgbe_parse_fdir_filter(struct rte_eth_dev *dev, { int ret; struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); - enum rte_fdir_mode fdir_mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode fdir_mode = IXGBE_DEV_FDIR_CONF(dev)->mode; if (hw->mac.type != ixgbe_mac_82599EB && hw->mac.type != ixgbe_mac_X540 && diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h b/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h index cd34d40987..a4d9ec9b08 100644 --- a/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h +++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h @@ -277,7 +277,7 @@ static inline int ixgbe_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev) { #ifndef RTE_LIBRTE_IEEE1588 - struct rte_eth_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; + struct rte_eth_fdir_conf *fconf = IXGBE_DEV_FDIR_CONF(dev); /* no fdir support */ if (fconf->mode != RTE_FDIR_MODE_NONE) -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/3] net/txgbe: add helper to get Flow Director configuration 2022-08-03 11:13 [PATCH 0/3] ethdev: remove deprecated Flow Director configuration Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 1/3] net/ixgbe: add helper to get " Andrew Rybchenko @ 2022-08-03 11:13 ` Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 3/3] ethdev: remove deprecated " Andrew Rybchenko 2022-08-24 9:42 ` [PATCH 0/3] " Ferruh Yigit 3 siblings, 0 replies; 7+ messages in thread From: Andrew Rybchenko @ 2022-08-03 11:13 UTC (permalink / raw) To: Jiawen Wu, Jian Wang; +Cc: dev Flow Director configuration is deprecated in generic ethdev device configuration and will be removed. However, it is essential for the driver flow API support and cannot be removed completely without loss of flow API support. Prepare to move the configuration into device private data. Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> --- drivers/net/txgbe/txgbe_ethdev.c | 2 +- drivers/net/txgbe/txgbe_ethdev.h | 2 ++ drivers/net/txgbe/txgbe_fdir.c | 24 +++++++++++------------- drivers/net/txgbe/txgbe_flow.c | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c index 9dc9948219..0624568bdf 100644 --- a/drivers/net/txgbe/txgbe_ethdev.c +++ b/drivers/net/txgbe/txgbe_ethdev.c @@ -1719,7 +1719,7 @@ txgbe_dev_start(struct rte_eth_dev *dev) txgbe_configure_port(dev); txgbe_configure_dcb(dev); - if (dev->data->dev_conf.fdir_conf.mode != RTE_FDIR_MODE_NONE) { + if (TXGBE_DEV_FDIR_CONF(dev)->mode != RTE_FDIR_MODE_NONE) { err = txgbe_fdir_configure(dev); if (err) goto error; diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h index 262dbb5e38..e36a2c3d0d 100644 --- a/drivers/net/txgbe/txgbe_ethdev.h +++ b/drivers/net/txgbe/txgbe_ethdev.h @@ -373,6 +373,8 @@ struct txgbe_adapter { #define TXGBE_DEV_ADAPTER(dev) \ ((struct txgbe_adapter *)(dev)->data->dev_private) +#define TXGBE_DEV_FDIR_CONF(dev) (&(dev)->data->dev_conf.fdir_conf) + #define TXGBE_DEV_HW(dev) \ (&((struct txgbe_adapter *)(dev)->data->dev_private)->hw) diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c index e303d87176..a198b6781b 100644 --- a/drivers/net/txgbe/txgbe_fdir.c +++ b/drivers/net/txgbe/txgbe_fdir.c @@ -170,7 +170,7 @@ txgbe_fdir_set_input_mask(struct rte_eth_dev *dev) { struct txgbe_hw *hw = TXGBE_DEV_HW(dev); struct txgbe_hw_fdir_info *info = TXGBE_DEV_FDIR(dev); - enum rte_fdir_mode mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode mode = TXGBE_DEV_FDIR_CONF(dev)->mode; /* * mask VM pool and DIPv6 since there are currently not supported * mask FLEX byte, it will be set in flex_conf @@ -232,9 +232,8 @@ txgbe_fdir_set_input_mask(struct rte_eth_dev *dev) static int txgbe_fdir_store_input_mask(struct rte_eth_dev *dev) { - struct rte_eth_fdir_masks *input_mask = - &dev->data->dev_conf.fdir_conf.mask; - enum rte_fdir_mode mode = dev->data->dev_conf.fdir_conf.mode; + struct rte_eth_fdir_masks *input_mask = &TXGBE_DEV_FDIR_CONF(dev)->mask; + enum rte_fdir_mode mode = TXGBE_DEV_FDIR_CONF(dev)->mode; struct txgbe_hw_fdir_info *info = TXGBE_DEV_FDIR(dev); uint16_t dst_ipv6m = 0; uint16_t src_ipv6m = 0; @@ -294,7 +293,7 @@ static int txgbe_set_fdir_flex_conf(struct rte_eth_dev *dev, uint32_t flex) { const struct rte_eth_fdir_flex_conf *conf = - &dev->data->dev_conf.fdir_conf.flex_conf; + &TXGBE_DEV_FDIR_CONF(dev)->flex_conf; struct txgbe_hw *hw = TXGBE_DEV_HW(dev); struct txgbe_hw_fdir_info *info = TXGBE_DEV_FDIR(dev); const struct rte_eth_flex_payload_cfg *flex_cfg; @@ -364,7 +363,7 @@ txgbe_fdir_configure(struct rte_eth_dev *dev) int err; uint32_t fdirctrl, flex, pbsize; int i; - enum rte_fdir_mode mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode mode = TXGBE_DEV_FDIR_CONF(dev)->mode; PMD_INIT_FUNC_TRACE(); @@ -373,8 +372,7 @@ txgbe_fdir_configure(struct rte_eth_dev *dev) mode != RTE_FDIR_MODE_PERFECT) return -ENOSYS; - err = configure_fdir_flags(&dev->data->dev_conf.fdir_conf, - &fdirctrl, &flex); + err = configure_fdir_flags(TXGBE_DEV_FDIR_CONF(dev), &fdirctrl, &flex); if (err) return err; @@ -792,7 +790,7 @@ txgbe_fdir_filter_program(struct rte_eth_dev *dev, bool is_perfect = FALSE; int err; struct txgbe_hw_fdir_info *info = TXGBE_DEV_FDIR(dev); - enum rte_fdir_mode fdir_mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode fdir_mode = TXGBE_DEV_FDIR_CONF(dev)->mode; struct txgbe_fdir_filter *node; if (fdir_mode == RTE_FDIR_MODE_NONE || @@ -809,11 +807,11 @@ txgbe_fdir_filter_program(struct rte_eth_dev *dev, return -ENOTSUP; } fdirhash = atr_compute_perfect_hash(&rule->input, - dev->data->dev_conf.fdir_conf.pballoc); + TXGBE_DEV_FDIR_CONF(dev)->pballoc); fdirhash |= TXGBE_FDIRPIHASH_IDX(rule->soft_id); } else { fdirhash = atr_compute_signature_hash(&rule->input, - dev->data->dev_conf.fdir_conf.pballoc); + TXGBE_DEV_FDIR_CONF(dev)->pballoc); } if (del) { @@ -839,7 +837,7 @@ txgbe_fdir_filter_program(struct rte_eth_dev *dev, " signature mode."); return -EINVAL; } - queue = dev->data->dev_conf.fdir_conf.drop_queue; + queue = TXGBE_DEV_FDIR_CONF(dev)->drop_queue; } else if (rule->queue < TXGBE_MAX_RX_QUEUE_NUM) { queue = rule->queue; } else { @@ -920,7 +918,7 @@ txgbe_fdir_filter_restore(struct rte_eth_dev *dev) struct txgbe_hw_fdir_info *fdir_info = TXGBE_DEV_FDIR(dev); struct txgbe_fdir_filter *node; bool is_perfect = FALSE; - enum rte_fdir_mode fdir_mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode fdir_mode = TXGBE_DEV_FDIR_CONF(dev)->mode; if (fdir_mode >= RTE_FDIR_MODE_PERFECT && fdir_mode <= RTE_FDIR_MODE_PERFECT_TUNNEL) diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c index d0093c0163..26920f43d3 100644 --- a/drivers/net/txgbe/txgbe_flow.c +++ b/drivers/net/txgbe/txgbe_flow.c @@ -2439,7 +2439,7 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev, { int ret; struct txgbe_hw *hw = TXGBE_DEV_HW(dev); - enum rte_fdir_mode fdir_mode = dev->data->dev_conf.fdir_conf.mode; + enum rte_fdir_mode fdir_mode = TXGBE_DEV_FDIR_CONF(dev)->mode; ret = txgbe_parse_fdir_filter_normal(dev, attr, pattern, actions, rule, error); -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 3/3] ethdev: remove deprecated Flow Director configuration 2022-08-03 11:13 [PATCH 0/3] ethdev: remove deprecated Flow Director configuration Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 1/3] net/ixgbe: add helper to get " Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 2/3] net/txgbe: " Andrew Rybchenko @ 2022-08-03 11:13 ` Andrew Rybchenko 2022-08-04 11:07 ` Dongdong Liu 2022-08-24 9:42 ` [PATCH 0/3] " Ferruh Yigit 3 siblings, 1 reply; 7+ messages in thread From: Andrew Rybchenko @ 2022-08-03 11:13 UTC (permalink / raw) To: Aman Singh, Yuying Zhang, Qi Zhang, Xiao Wang, Qiming Yang, Wenjun Wu, Ray Kinsella, Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori, Satha Rao, Dongdong Liu, Yisen Zhuang, Beilei Xing, Harman Kalra, Rasesh Mody, Devendra Singh Rawat, Jerin Jacob, Maciej Czekaj, Jiawen Wu, Jian Wang, Thomas Monjalon, Ferruh Yigit Cc: dev Remove deprecated fdir_conf from device configuration. Assume that mode is equal to RTE_FDIR_MODE_NONE. Add internal Flow Director configuration copy in ixgbe and txgbe device private data since flow API supports requires it. Initialize mode to the first flow rule mode on the rule validation or creation. Since Flow Director configuration data types are still used by some drivers internally, move it from public API to ethdev driver internal API. Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> --- app/test-pmd/cmdline.c | 343 -------------------- app/test-pmd/config.c | 100 ------ app/test-pmd/parameters.c | 76 ----- app/test-pmd/testpmd.c | 24 -- app/test-pmd/testpmd.h | 6 - doc/guides/nics/fm10k.rst | 2 - doc/guides/nics/ixgbe.rst | 1 - doc/guides/rel_notes/deprecation.rst | 4 - doc/guides/rel_notes/release_22_11.rst | 4 + doc/guides/testpmd_app_ug/run_app.rst | 27 -- doc/guides/testpmd_app_ug/testpmd_funcs.rst | 38 --- drivers/net/cnxk/cnxk_ethdev.c | 5 - drivers/net/fm10k/fm10k_rxtx_vec.c | 5 - drivers/net/hns3/hns3_rxtx_vec.c | 4 - drivers/net/i40e/i40e_ethdev.c | 31 -- drivers/net/i40e/i40e_fdir.c | 304 +---------------- drivers/net/i40e/i40e_rxtx_vec_common.h | 5 - drivers/net/ixgbe/ixgbe_ethdev.h | 3 +- drivers/net/ixgbe/ixgbe_flow.c | 13 +- drivers/net/octeontx/octeontx_ethdev.c | 5 - drivers/net/qede/qede_filter.c | 29 +- drivers/net/sfc/sfc.c | 5 - drivers/net/sfc/sfc_repr.c | 5 - drivers/net/thunderx/nicvf_ethdev.c | 5 - drivers/net/txgbe/txgbe_ethdev.h | 3 +- drivers/net/txgbe/txgbe_flow.c | 13 +- lib/ethdev/ethdev_driver.h | 36 ++ lib/ethdev/rte_ethdev.h | 43 --- 28 files changed, 67 insertions(+), 1072 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index b4fe9dfb17..7057c153f6 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -835,25 +835,6 @@ static void cmd_help_long_parsed(void *parsed_result, "filters:\n" "--------\n\n" - "flow_director_mask (port_id) mode IP vlan (vlan_value)" - " src_mask (ipv4_src) (ipv6_src) (src_port)" - " dst_mask (ipv4_dst) (ipv6_dst) (dst_port)\n" - " Set flow director IP mask.\n\n" - - "flow_director_mask (port_id) mode MAC-VLAN" - " vlan (vlan_value)\n" - " Set flow director MAC-VLAN mask.\n\n" - - "flow_director_mask (port_id) mode Tunnel" - " vlan (vlan_value) mac (mac_value)" - " tunnel-type (tunnel_type_value)" - " tunnel-id (tunnel_id_value)\n" - " Set flow director Tunnel mask.\n\n" - - "flow_director_flex_payload (port_id)" - " (raw|l2|l3|l4) (config)\n" - " Configure flex payload selection.\n\n" - "flow validate {port_id}" " [group {group_id}] [priority {level}]" " [ingress] [egress]" @@ -8981,326 +8962,6 @@ do { \ } \ } while (0) -/* *** deal with flow director mask *** */ -struct cmd_flow_director_mask_result { - cmdline_fixed_string_t flow_director_mask; - portid_t port_id; - cmdline_fixed_string_t mode; - cmdline_fixed_string_t mode_value; - cmdline_fixed_string_t vlan; - uint16_t vlan_mask; - cmdline_fixed_string_t src_mask; - cmdline_ipaddr_t ipv4_src; - cmdline_ipaddr_t ipv6_src; - uint16_t port_src; - cmdline_fixed_string_t dst_mask; - cmdline_ipaddr_t ipv4_dst; - cmdline_ipaddr_t ipv6_dst; - uint16_t port_dst; - cmdline_fixed_string_t mac; - uint8_t mac_addr_byte_mask; - cmdline_fixed_string_t tunnel_id; - uint32_t tunnel_id_mask; - cmdline_fixed_string_t tunnel_type; - uint8_t tunnel_type_mask; -}; - -static void -cmd_flow_director_mask_parsed(void *parsed_result, - __rte_unused struct cmdline *cl, - __rte_unused void *data) -{ - struct cmd_flow_director_mask_result *res = parsed_result; - struct rte_eth_fdir_masks *mask; - struct rte_port *port; - - port = &ports[res->port_id]; - /** Check if the port is not started **/ - if (port->port_status != RTE_PORT_STOPPED) { - fprintf(stderr, "Please stop port %d first\n", res->port_id); - return; - } - - mask = &port->dev_conf.fdir_conf.mask; - - if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_MAC_VLAN) { - if (strcmp(res->mode_value, "MAC-VLAN")) { - fprintf(stderr, "Please set mode to MAC-VLAN.\n"); - return; - } - - mask->vlan_tci_mask = rte_cpu_to_be_16(res->vlan_mask); - } else if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_TUNNEL) { - if (strcmp(res->mode_value, "Tunnel")) { - fprintf(stderr, "Please set mode to Tunnel.\n"); - return; - } - - mask->vlan_tci_mask = rte_cpu_to_be_16(res->vlan_mask); - mask->mac_addr_byte_mask = res->mac_addr_byte_mask; - mask->tunnel_id_mask = rte_cpu_to_be_32(res->tunnel_id_mask); - mask->tunnel_type_mask = res->tunnel_type_mask; - } else { - if (strcmp(res->mode_value, "IP")) { - fprintf(stderr, "Please set mode to IP.\n"); - return; - } - - mask->vlan_tci_mask = rte_cpu_to_be_16(res->vlan_mask); - IPV4_ADDR_TO_UINT(res->ipv4_src, mask->ipv4_mask.src_ip); - IPV4_ADDR_TO_UINT(res->ipv4_dst, mask->ipv4_mask.dst_ip); - IPV6_ADDR_TO_ARRAY(res->ipv6_src, mask->ipv6_mask.src_ip); - IPV6_ADDR_TO_ARRAY(res->ipv6_dst, mask->ipv6_mask.dst_ip); - mask->src_port_mask = rte_cpu_to_be_16(res->port_src); - mask->dst_port_mask = rte_cpu_to_be_16(res->port_dst); - } - - cmd_reconfig_device_queue(res->port_id, 1, 1); -} - -static cmdline_parse_token_string_t cmd_flow_director_mask = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - flow_director_mask, "flow_director_mask"); -static cmdline_parse_token_num_t cmd_flow_director_mask_port_id = - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, - port_id, RTE_UINT16); -static cmdline_parse_token_string_t cmd_flow_director_mask_vlan = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - vlan, "vlan"); -static cmdline_parse_token_num_t cmd_flow_director_mask_vlan_value = - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, - vlan_mask, RTE_UINT16); -static cmdline_parse_token_string_t cmd_flow_director_mask_src = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - src_mask, "src_mask"); -static cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv4_src = - TOKEN_IPADDR_INITIALIZER(struct cmd_flow_director_mask_result, - ipv4_src); -static cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv6_src = - TOKEN_IPADDR_INITIALIZER(struct cmd_flow_director_mask_result, - ipv6_src); -static cmdline_parse_token_num_t cmd_flow_director_mask_port_src = - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, - port_src, RTE_UINT16); -static cmdline_parse_token_string_t cmd_flow_director_mask_dst = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - dst_mask, "dst_mask"); -static cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv4_dst = - TOKEN_IPADDR_INITIALIZER(struct cmd_flow_director_mask_result, - ipv4_dst); -static cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv6_dst = - TOKEN_IPADDR_INITIALIZER(struct cmd_flow_director_mask_result, - ipv6_dst); -static cmdline_parse_token_num_t cmd_flow_director_mask_port_dst = - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, - port_dst, RTE_UINT16); - -static cmdline_parse_token_string_t cmd_flow_director_mask_mode = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - mode, "mode"); -static cmdline_parse_token_string_t cmd_flow_director_mask_mode_ip = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - mode_value, "IP"); -static cmdline_parse_token_string_t cmd_flow_director_mask_mode_mac_vlan = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - mode_value, "MAC-VLAN"); -static cmdline_parse_token_string_t cmd_flow_director_mask_mode_tunnel = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - mode_value, "Tunnel"); -static cmdline_parse_token_string_t cmd_flow_director_mask_mac = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - mac, "mac"); -static cmdline_parse_token_num_t cmd_flow_director_mask_mac_value = - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, - mac_addr_byte_mask, RTE_UINT8); -static cmdline_parse_token_string_t cmd_flow_director_mask_tunnel_type = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - tunnel_type, "tunnel-type"); -static cmdline_parse_token_num_t cmd_flow_director_mask_tunnel_type_value = - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, - tunnel_type_mask, RTE_UINT8); -static cmdline_parse_token_string_t cmd_flow_director_mask_tunnel_id = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, - tunnel_id, "tunnel-id"); -static cmdline_parse_token_num_t cmd_flow_director_mask_tunnel_id_value = - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, - tunnel_id_mask, RTE_UINT32); - -static cmdline_parse_inst_t cmd_set_flow_director_ip_mask = { - .f = cmd_flow_director_mask_parsed, - .data = NULL, - .help_str = "flow_director_mask ... : " - "Set IP mode flow director's mask on NIC", - .tokens = { - (void *)&cmd_flow_director_mask, - (void *)&cmd_flow_director_mask_port_id, - (void *)&cmd_flow_director_mask_mode, - (void *)&cmd_flow_director_mask_mode_ip, - (void *)&cmd_flow_director_mask_vlan, - (void *)&cmd_flow_director_mask_vlan_value, - (void *)&cmd_flow_director_mask_src, - (void *)&cmd_flow_director_mask_ipv4_src, - (void *)&cmd_flow_director_mask_ipv6_src, - (void *)&cmd_flow_director_mask_port_src, - (void *)&cmd_flow_director_mask_dst, - (void *)&cmd_flow_director_mask_ipv4_dst, - (void *)&cmd_flow_director_mask_ipv6_dst, - (void *)&cmd_flow_director_mask_port_dst, - NULL, - }, -}; - -static cmdline_parse_inst_t cmd_set_flow_director_mac_vlan_mask = { - .f = cmd_flow_director_mask_parsed, - .data = NULL, - .help_str = "flow_director_mask ... : Set MAC VLAN mode " - "flow director's mask on NIC", - .tokens = { - (void *)&cmd_flow_director_mask, - (void *)&cmd_flow_director_mask_port_id, - (void *)&cmd_flow_director_mask_mode, - (void *)&cmd_flow_director_mask_mode_mac_vlan, - (void *)&cmd_flow_director_mask_vlan, - (void *)&cmd_flow_director_mask_vlan_value, - NULL, - }, -}; - -static cmdline_parse_inst_t cmd_set_flow_director_tunnel_mask = { - .f = cmd_flow_director_mask_parsed, - .data = NULL, - .help_str = "flow_director_mask ... : Set tunnel mode " - "flow director's mask on NIC", - .tokens = { - (void *)&cmd_flow_director_mask, - (void *)&cmd_flow_director_mask_port_id, - (void *)&cmd_flow_director_mask_mode, - (void *)&cmd_flow_director_mask_mode_tunnel, - (void *)&cmd_flow_director_mask_vlan, - (void *)&cmd_flow_director_mask_vlan_value, - (void *)&cmd_flow_director_mask_mac, - (void *)&cmd_flow_director_mask_mac_value, - (void *)&cmd_flow_director_mask_tunnel_type, - (void *)&cmd_flow_director_mask_tunnel_type_value, - (void *)&cmd_flow_director_mask_tunnel_id, - (void *)&cmd_flow_director_mask_tunnel_id_value, - NULL, - }, -}; - -/* *** deal with flow director flexible payload configuration *** */ -struct cmd_flow_director_flexpayload_result { - cmdline_fixed_string_t flow_director_flexpayload; - portid_t port_id; - cmdline_fixed_string_t payload_layer; - cmdline_fixed_string_t payload_cfg; -}; - -static inline int -parse_offsets(const char *q_arg, uint16_t *offsets, uint16_t max_num) -{ - char s[256]; - const char *p, *p0 = q_arg; - char *end; - unsigned long int_fld; - char *str_fld[max_num]; - int i; - unsigned size; - int ret = -1; - - p = strchr(p0, '('); - if (p == NULL) - return -1; - ++p; - p0 = strchr(p, ')'); - if (p0 == NULL) - return -1; - - size = p0 - p; - if (size >= sizeof(s)) - return -1; - - snprintf(s, sizeof(s), "%.*s", size, p); - ret = rte_strsplit(s, sizeof(s), str_fld, max_num, ','); - if (ret < 0 || ret > max_num) - return -1; - for (i = 0; i < ret; i++) { - errno = 0; - int_fld = strtoul(str_fld[i], &end, 0); - if (errno != 0 || *end != '\0' || int_fld > UINT16_MAX) - return -1; - offsets[i] = (uint16_t)int_fld; - } - return ret; -} - -static void -cmd_flow_director_flxpld_parsed(void *parsed_result, - __rte_unused struct cmdline *cl, - __rte_unused void *data) -{ - struct cmd_flow_director_flexpayload_result *res = parsed_result; - struct rte_eth_flex_payload_cfg flex_cfg; - struct rte_port *port; - int ret = 0; - - port = &ports[res->port_id]; - /** Check if the port is not started **/ - if (port->port_status != RTE_PORT_STOPPED) { - fprintf(stderr, "Please stop port %d first\n", res->port_id); - return; - } - - memset(&flex_cfg, 0, sizeof(struct rte_eth_flex_payload_cfg)); - - if (!strcmp(res->payload_layer, "raw")) - flex_cfg.type = RTE_ETH_RAW_PAYLOAD; - else if (!strcmp(res->payload_layer, "l2")) - flex_cfg.type = RTE_ETH_L2_PAYLOAD; - else if (!strcmp(res->payload_layer, "l3")) - flex_cfg.type = RTE_ETH_L3_PAYLOAD; - else if (!strcmp(res->payload_layer, "l4")) - flex_cfg.type = RTE_ETH_L4_PAYLOAD; - - ret = parse_offsets(res->payload_cfg, flex_cfg.src_offset, - RTE_ETH_FDIR_MAX_FLEXLEN); - if (ret < 0) { - fprintf(stderr, "error: Cannot parse flex payload input.\n"); - return; - } - - fdir_set_flex_payload(res->port_id, &flex_cfg); - cmd_reconfig_device_queue(res->port_id, 1, 1); -} - -static cmdline_parse_token_string_t cmd_flow_director_flexpayload = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flexpayload_result, - flow_director_flexpayload, - "flow_director_flex_payload"); -static cmdline_parse_token_num_t cmd_flow_director_flexpayload_port_id = - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_flexpayload_result, - port_id, RTE_UINT16); -static cmdline_parse_token_string_t cmd_flow_director_flexpayload_payload_layer = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flexpayload_result, - payload_layer, "raw#l2#l3#l4"); -static cmdline_parse_token_string_t cmd_flow_director_flexpayload_payload_cfg = - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flexpayload_result, - payload_cfg, NULL); - -static cmdline_parse_inst_t cmd_set_flow_director_flex_payload = { - .f = cmd_flow_director_flxpld_parsed, - .data = NULL, - .help_str = "flow_director_flexpayload ... : " - "Set flow director's flex payload on NIC", - .tokens = { - (void *)&cmd_flow_director_flexpayload, - (void *)&cmd_flow_director_flexpayload_port_id, - (void *)&cmd_flow_director_flexpayload_payload_layer, - (void *)&cmd_flow_director_flexpayload_payload_cfg, - NULL, - }, -}; - /* Generic flow interface command. */ extern cmdline_parse_inst_t cmd_flow; @@ -14274,10 +13935,6 @@ static cmdline_parse_ctx_t builtin_ctx[] = { (cmdline_parse_inst_t *)&cmd_cleanup_txq_mbufs, (cmdline_parse_inst_t *)&cmd_dump, (cmdline_parse_inst_t *)&cmd_dump_one, - (cmdline_parse_inst_t *)&cmd_set_flow_director_ip_mask, - (cmdline_parse_inst_t *)&cmd_set_flow_director_mac_vlan_mask, - (cmdline_parse_inst_t *)&cmd_set_flow_director_tunnel_mask, - (cmdline_parse_inst_t *)&cmd_set_flow_director_flex_payload, (cmdline_parse_inst_t *)&cmd_flow, (cmdline_parse_inst_t *)&cmd_show_port_meter_cap, (cmdline_parse_inst_t *)&cmd_add_port_meter_profile_srtcm, diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index a2939867c4..c90cdfe382 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -5728,41 +5728,6 @@ flowtype_to_str(uint16_t flow_type) #if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE) -static inline void -print_fdir_mask(struct rte_eth_fdir_masks *mask) -{ - printf("\n vlan_tci: 0x%04x", rte_be_to_cpu_16(mask->vlan_tci_mask)); - - if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_TUNNEL) - printf(", mac_addr: 0x%02x, tunnel_type: 0x%01x," - " tunnel_id: 0x%08x", - mask->mac_addr_byte_mask, mask->tunnel_type_mask, - rte_be_to_cpu_32(mask->tunnel_id_mask)); - else if (fdir_conf.mode != RTE_FDIR_MODE_PERFECT_MAC_VLAN) { - printf(", src_ipv4: 0x%08x, dst_ipv4: 0x%08x", - rte_be_to_cpu_32(mask->ipv4_mask.src_ip), - rte_be_to_cpu_32(mask->ipv4_mask.dst_ip)); - - printf("\n src_port: 0x%04x, dst_port: 0x%04x", - rte_be_to_cpu_16(mask->src_port_mask), - rte_be_to_cpu_16(mask->dst_port_mask)); - - printf("\n src_ipv6: 0x%08x,0x%08x,0x%08x,0x%08x", - rte_be_to_cpu_32(mask->ipv6_mask.src_ip[0]), - rte_be_to_cpu_32(mask->ipv6_mask.src_ip[1]), - rte_be_to_cpu_32(mask->ipv6_mask.src_ip[2]), - rte_be_to_cpu_32(mask->ipv6_mask.src_ip[3])); - - printf("\n dst_ipv6: 0x%08x,0x%08x,0x%08x,0x%08x", - rte_be_to_cpu_32(mask->ipv6_mask.dst_ip[0]), - rte_be_to_cpu_32(mask->ipv6_mask.dst_ip[1]), - rte_be_to_cpu_32(mask->ipv6_mask.dst_ip[2]), - rte_be_to_cpu_32(mask->ipv6_mask.dst_ip[3])); - } - - printf("\n"); -} - static inline void print_fdir_flex_payload(struct rte_eth_fdir_flex_conf *flex_conf, uint32_t num) { @@ -5898,8 +5863,6 @@ fdir_get_infos(portid_t port_id) fdir_info.flex_payload_unit, fdir_info.max_flex_payload_segment_num, fdir_info.flex_bitmask_unit, fdir_info.max_flex_bitmask_num); - printf(" MASK: "); - print_fdir_mask(&fdir_info.mask); if (fdir_info.flex_conf.nb_payloads > 0) { printf(" FLEX PAYLOAD SRC OFFSET:"); print_fdir_flex_payload(&fdir_info.flex_conf, fdir_info.max_flexpayload); @@ -5926,69 +5889,6 @@ fdir_get_infos(portid_t port_id) #endif /* RTE_NET_I40E || RTE_NET_IXGBE */ -void -fdir_set_flex_mask(portid_t port_id, struct rte_eth_fdir_flex_mask *cfg) -{ - struct rte_port *port; - struct rte_eth_fdir_flex_conf *flex_conf; - int i, idx = 0; - - port = &ports[port_id]; - flex_conf = &port->dev_conf.fdir_conf.flex_conf; - for (i = 0; i < RTE_ETH_FLOW_MAX; i++) { - if (cfg->flow_type == flex_conf->flex_mask[i].flow_type) { - idx = i; - break; - } - } - if (i >= RTE_ETH_FLOW_MAX) { - if (flex_conf->nb_flexmasks < RTE_DIM(flex_conf->flex_mask)) { - idx = flex_conf->nb_flexmasks; - flex_conf->nb_flexmasks++; - } else { - fprintf(stderr, - "The flex mask table is full. Can not set flex mask for flow_type(%u).", - cfg->flow_type); - return; - } - } - rte_memcpy(&flex_conf->flex_mask[idx], - cfg, - sizeof(struct rte_eth_fdir_flex_mask)); -} - -void -fdir_set_flex_payload(portid_t port_id, struct rte_eth_flex_payload_cfg *cfg) -{ - struct rte_port *port; - struct rte_eth_fdir_flex_conf *flex_conf; - int i, idx = 0; - - port = &ports[port_id]; - flex_conf = &port->dev_conf.fdir_conf.flex_conf; - for (i = 0; i < RTE_ETH_PAYLOAD_MAX; i++) { - if (cfg->type == flex_conf->flex_set[i].type) { - idx = i; - break; - } - } - if (i >= RTE_ETH_PAYLOAD_MAX) { - if (flex_conf->nb_payloads < RTE_DIM(flex_conf->flex_set)) { - idx = flex_conf->nb_payloads; - flex_conf->nb_payloads++; - } else { - fprintf(stderr, - "The flex payload table is full. Can not set flex payload for type(%u).", - cfg->type); - return; - } - } - rte_memcpy(&flex_conf->flex_set[idx], - cfg, - sizeof(struct rte_eth_flex_payload_cfg)); - -} - void set_vf_traffic(portid_t port_id, uint8_t is_rx, uint16_t vf, uint8_t on) { diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index e3c9757f3f..cfd7cd1e50 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -101,17 +101,6 @@ usage(char* progname) printf(" --eth-peer=X,M:M:M:M:M:M: set the MAC address of the X peer " "port (0 <= X < %d).\n", RTE_MAX_ETHPORTS); #endif - printf(" --pkt-filter-mode=N: set Flow Director mode " - "(N: none (default mode) or signature or perfect).\n"); - printf(" --pkt-filter-report-hash=N: set Flow Director report mode " - "(N: none or match (default) or always).\n"); - printf(" --pkt-filter-size=N: set Flow Director mode " - "(N: 64K (default mode) or 128K or 256K).\n"); - printf(" --pkt-filter-drop-queue=N: set drop-queue. " - "In perfect mode, when you add a rule with queue = -1 " - "the packet will be enqueued into the rx drop-queue. " - "If the drop-queue doesn't exist, the packet is dropped. " - "By default drop-queue=127.\n"); #ifdef RTE_LIB_LATENCYSTATS printf(" --latencystats=N: enable latency and jitter statistics " "monitoring on forwarding lcore id N.\n"); @@ -625,10 +614,6 @@ launch_args_parse(int argc, char** argv) { "total-num-mbufs", 1, 0, 0 }, { "max-pkt-len", 1, 0, 0 }, { "max-lro-pkt-size", 1, 0, 0 }, - { "pkt-filter-mode", 1, 0, 0 }, - { "pkt-filter-report-hash", 1, 0, 0 }, - { "pkt-filter-size", 1, 0, 0 }, - { "pkt-filter-drop-queue", 1, 0, 0 }, #ifdef RTE_LIB_LATENCYSTATS { "latencystats", 1, 0, 0 }, #endif @@ -963,67 +948,6 @@ launch_args_parse(int argc, char** argv) n = atoi(optarg); rx_mode.max_lro_pkt_size = (uint32_t) n; } - if (!strcmp(lgopts[opt_idx].name, "pkt-filter-mode")) { - if (!strcmp(optarg, "signature")) - fdir_conf.mode = - RTE_FDIR_MODE_SIGNATURE; - else if (!strcmp(optarg, "perfect")) - fdir_conf.mode = RTE_FDIR_MODE_PERFECT; - else if (!strcmp(optarg, "perfect-mac-vlan")) - fdir_conf.mode = RTE_FDIR_MODE_PERFECT_MAC_VLAN; - else if (!strcmp(optarg, "perfect-tunnel")) - fdir_conf.mode = RTE_FDIR_MODE_PERFECT_TUNNEL; - else if (!strcmp(optarg, "none")) - fdir_conf.mode = RTE_FDIR_MODE_NONE; - else - rte_exit(EXIT_FAILURE, - "pkt-mode-invalid %s invalid - must be: " - "none, signature, perfect, perfect-mac-vlan" - " or perfect-tunnel\n", - optarg); - } - if (!strcmp(lgopts[opt_idx].name, - "pkt-filter-report-hash")) { - if (!strcmp(optarg, "none")) - fdir_conf.status = - RTE_FDIR_NO_REPORT_STATUS; - else if (!strcmp(optarg, "match")) - fdir_conf.status = - RTE_FDIR_REPORT_STATUS; - else if (!strcmp(optarg, "always")) - fdir_conf.status = - RTE_FDIR_REPORT_STATUS_ALWAYS; - else - rte_exit(EXIT_FAILURE, - "pkt-filter-report-hash %s invalid " - "- must be: none or match or always\n", - optarg); - } - if (!strcmp(lgopts[opt_idx].name, "pkt-filter-size")) { - if (!strcmp(optarg, "64K")) - fdir_conf.pballoc = - RTE_ETH_FDIR_PBALLOC_64K; - else if (!strcmp(optarg, "128K")) - fdir_conf.pballoc = - RTE_ETH_FDIR_PBALLOC_128K; - else if (!strcmp(optarg, "256K")) - fdir_conf.pballoc = - RTE_ETH_FDIR_PBALLOC_256K; - else - rte_exit(EXIT_FAILURE, "pkt-filter-size %s invalid -" - " must be: 64K or 128K or 256K\n", - optarg); - } - if (!strcmp(lgopts[opt_idx].name, - "pkt-filter-drop-queue")) { - n = atoi(optarg); - if (n >= 0) - fdir_conf.drop_queue = (uint8_t) n; - else - rte_exit(EXIT_FAILURE, - "drop queue %d invalid - must" - "be >= 0 \n", n); - } #ifdef RTE_LIB_LATENCYSTATS if (!strcmp(lgopts[opt_idx].name, "latencystats")) { diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index addcbcac85..511a870dc9 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -478,29 +478,6 @@ struct rte_eth_txmode tx_mode = { .offloads = RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE, }; -struct rte_eth_fdir_conf fdir_conf = { - .mode = RTE_FDIR_MODE_NONE, - .pballoc = RTE_ETH_FDIR_PBALLOC_64K, - .status = RTE_FDIR_REPORT_STATUS, - .mask = { - .vlan_tci_mask = 0xFFEF, - .ipv4_mask = { - .src_ip = 0xFFFFFFFF, - .dst_ip = 0xFFFFFFFF, - }, - .ipv6_mask = { - .src_ip = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}, - .dst_ip = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}, - }, - .src_port_mask = 0xFFFF, - .dst_port_mask = 0xFFFF, - .mac_addr_byte_mask = 0xFF, - .tunnel_type_mask = 1, - .tunnel_id_mask = 0xFFFFFFFF, - }, - .drop_queue = 127, -}; - volatile int test_done = 1; /* stop packet forwarding when set to 1. */ /* @@ -3933,7 +3910,6 @@ init_port_config(void) RTE_ETH_FOREACH_DEV(pid) { port = &ports[pid]; - port->dev_conf.fdir_conf = fdir_conf; ret = eth_dev_info_get_print_err(pid, &port->dev_info); if (ret != 0) diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index fb2f5195d3..27f4b9199c 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -554,8 +554,6 @@ extern lcoreid_t bitrate_lcore_id; extern uint8_t bitrate_enabled; #endif -extern struct rte_eth_fdir_conf fdir_conf; - extern uint32_t max_rx_pkt_len; /* @@ -1091,10 +1089,6 @@ void pmd_test_exit(void); #if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE) void fdir_get_infos(portid_t port_id); #endif -void fdir_set_flex_mask(portid_t port_id, - struct rte_eth_fdir_flex_mask *cfg); -void fdir_set_flex_payload(portid_t port_id, - struct rte_eth_flex_payload_cfg *cfg); void port_rss_reta_info(portid_t port_id, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t nb_entries); diff --git a/doc/guides/nics/fm10k.rst b/doc/guides/nics/fm10k.rst index d6efac0917..628ffb5408 100644 --- a/doc/guides/nics/fm10k.rst +++ b/doc/guides/nics/fm10k.rst @@ -84,8 +84,6 @@ will be checked: * ``RTE_ETH_RX_OFFLOAD_HEADER_SPLIT`` -* ``fdir_conf->mode`` - RX Burst Size ^^^^^^^^^^^^^ diff --git a/doc/guides/nics/ixgbe.rst b/doc/guides/nics/ixgbe.rst index ad1a3da610..b1875095de 100644 --- a/doc/guides/nics/ixgbe.rst +++ b/doc/guides/nics/ixgbe.rst @@ -99,7 +99,6 @@ To guarantee the constraint, capabilities in dev_conf.rxmode.offloads will be ch * dev_conf -fdir_conf->mode will also be checked. Disable SDP3 TX_DISABLE for Fiber Links ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst index e7583cae4c..eb99f51213 100644 --- a/doc/guides/rel_notes/deprecation.rst +++ b/doc/guides/rel_notes/deprecation.rst @@ -98,10 +98,6 @@ Deprecation Notices The per-queue Rx packet split offload ``RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT`` can still be used, and it is configured by ``rte_eth_rxseg_split``. -* ethdev: The flow director API, including ``rte_eth_conf.fdir_conf`` field, - and the related structures (``rte_fdir_*`` and ``rte_eth_fdir_*``), - will be removed in DPDK 20.11. - * ethdev: Announce moving from dedicated modify function for each field, to using the general ``rte_flow_modify_field`` action. diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index 8c021cf050..caf58c3f82 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -84,6 +84,10 @@ API Changes Also, make sure to start the actual text at the margin. ======================================================= +* ethdev: Removed deprecated Flow Director configuration from device + configuration (``dev_conf.fdir_conf``). Moved corresponding structures + to internal API since some drivers still use it internally. + ABI Changes ----------- diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index 30edef07ea..8b41b960c8 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -159,33 +159,6 @@ The command line options are: The default port is the port 9 which is defined for the discard protocol (RFC 863). -* ``--pkt-filter-mode=mode`` - - Set Flow Director mode where mode is either ``none`` (the default), ``signature`` or ``perfect``. - See :ref:`testpmd_flow_director` for more details. - -* ``--pkt-filter-report-hash=mode`` - - Set Flow Director hash match reporting mode where mode is ``none``, ``match`` (the default) or ``always``. - -* ``--pkt-filter-size=N`` - - Set Flow Director allocated memory size, where N is 64K, 128K or 256K. - Sizes are in kilobytes. The default is 64. - -* ``--pkt-filter-flexbytes-offset=N`` - - Set the flexbytes offset. - The offset is defined in words (not bytes) counted from the first byte of the destination Ethernet MAC address, - where N is 0 <= N <= 32. - The default value is 0x6. - -* ``--pkt-filter-drop-queue=N`` - - Set the drop-queue. - In perfect filter mode, when a rule is added with queue = -1, the packet will be enqueued into the RX drop-queue. - If the drop-queue does not exist, the packet is dropped. The default value is N=127. - * ``--disable-crc-strip`` Disable hardware CRC stripping. diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst index 330e34427d..bb6e9fd46f 100644 --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst @@ -3004,44 +3004,6 @@ This section details the available filter functions that are available. Note these functions interface the deprecated legacy filtering framework, superseded by *rte_flow*. See `Flow rules management`_. -.. _testpmd_flow_director: - -flow_director_mask -~~~~~~~~~~~~~~~~~~ - -Set flow director's input masks:: - - flow_director_mask (port_id) mode IP vlan (vlan_value) \ - src_mask (ipv4_src) (ipv6_src) (src_port) \ - dst_mask (ipv4_dst) (ipv6_dst) (dst_port) - - flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value) - - flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \ - mac (mac_value) tunnel-type (tunnel_type_value) \ - tunnel-id (tunnel_id_value) - -Example, to set flow director mask on port 0:: - - testpmd> flow_director_mask 0 mode IP vlan 0xefff \ - src_mask 255.255.255.255 \ - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \ - dst_mask 255.255.255.255 \ - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF - -flow_director_flex_payload -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Configure flexible payload selection:: - - flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) - -For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload:: - - testpmd> flow_director_flex_payload 0 l4 \ - (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) - - .. _testpmd_rte_flow: Flow rules management diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c index 24182909f1..98f2b1ad91 100644 --- a/drivers/net/cnxk/cnxk_ethdev.c +++ b/drivers/net/cnxk/cnxk_ethdev.c @@ -1092,11 +1092,6 @@ cnxk_nix_configure(struct rte_eth_dev *eth_dev) goto fail_configure; } - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { - plt_err("Flow director is not supported"); - goto fail_configure; - } - if (rxmode->mq_mode != RTE_ETH_MQ_RX_NONE && rxmode->mq_mode != RTE_ETH_MQ_RX_RSS) { plt_err("Unsupported mq rx mode %d", rxmode->mq_mode); diff --git a/drivers/net/fm10k/fm10k_rxtx_vec.c b/drivers/net/fm10k/fm10k_rxtx_vec.c index 10ce5a7582..c7088f36cc 100644 --- a/drivers/net/fm10k/fm10k_rxtx_vec.c +++ b/drivers/net/fm10k/fm10k_rxtx_vec.c @@ -209,7 +209,6 @@ fm10k_rx_vec_condition_check(struct rte_eth_dev *dev) { #ifndef RTE_LIBRTE_IEEE1588 struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; - struct rte_eth_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; #ifndef RTE_FM10K_RX_OLFLAGS_ENABLE /* without rx ol_flags, no VP flag report */ @@ -217,10 +216,6 @@ fm10k_rx_vec_condition_check(struct rte_eth_dev *dev) return -1; #endif - /* no fdir support */ - if (fconf->mode != RTE_FDIR_MODE_NONE) - return -1; - /* no header split support */ if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_HEADER_SPLIT) return -1; diff --git a/drivers/net/hns3/hns3_rxtx_vec.c b/drivers/net/hns3/hns3_rxtx_vec.c index 73f0ab6bc8..0dd6fccb13 100644 --- a/drivers/net/hns3/hns3_rxtx_vec.c +++ b/drivers/net/hns3/hns3_rxtx_vec.c @@ -230,7 +230,6 @@ hns3_rxq_vec_check(struct hns3_rx_queue *rxq, void *arg) int hns3_rx_check_vec_support(struct rte_eth_dev *dev) { - struct rte_eth_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; uint64_t offloads_mask = RTE_ETH_RX_OFFLOAD_TCP_LRO | RTE_ETH_RX_OFFLOAD_VLAN; @@ -240,9 +239,6 @@ hns3_rx_check_vec_support(struct rte_eth_dev *dev) if (dev->data->scattered_rx) return -ENOTSUP; - if (fconf->mode != RTE_FDIR_MODE_NONE) - return -ENOTSUP; - if (rxmode->offloads & offloads_mask) return -ENOTSUP; diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 67d79de08d..3712a78c00 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -1886,24 +1886,6 @@ i40e_dev_configure(struct rte_eth_dev *dev) if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH; - /* Only legacy filter API needs the following fdir config. So when the - * legacy filter API is deprecated, the following codes should also be - * removed. - */ - if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) { - ret = i40e_fdir_setup(pf); - if (ret != I40E_SUCCESS) { - PMD_DRV_LOG(ERR, "Failed to setup flow director."); - return -ENOTSUP; - } - ret = i40e_fdir_configure(dev); - if (ret < 0) { - PMD_DRV_LOG(ERR, "failed to configure fdir."); - goto err; - } - } else - i40e_fdir_teardown(pf); - ret = i40e_dev_init_vlan(dev); if (ret < 0) goto err; @@ -1945,12 +1927,6 @@ i40e_dev_configure(struct rte_eth_dev *dev) rte_free(pf->vmdq); pf->vmdq = NULL; err: - /* Need to release fdir resource if exists. - * Only legacy filter API needs the following fdir config. So when the - * legacy filter API is deprecated, the following code should also be - * removed. - */ - i40e_fdir_teardown(pf); return ret; } @@ -2600,13 +2576,6 @@ i40e_dev_close(struct rte_eth_dev *dev) i40e_pf_disable_irq0(hw); rte_intr_disable(intr_handle); - /* - * Only legacy filter API needs the following fdir config. So when the - * legacy filter API is deprecated, the following code should also be - * removed. - */ - i40e_fdir_teardown(pf); - /* shutdown and destroy the HMC */ i40e_shutdown_lan_hmc(hw); diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c index 8caedea14e..afcaa593eb 100644 --- a/drivers/net/i40e/i40e_fdir.c +++ b/drivers/net/i40e/i40e_fdir.c @@ -373,269 +373,6 @@ i40e_init_flx_pld(struct i40e_pf *pf) } } -#define I40E_VALIDATE_FLEX_PIT(flex_pit1, flex_pit2) do { \ - if ((flex_pit2).src_offset < \ - (flex_pit1).src_offset + (flex_pit1).size) { \ - PMD_DRV_LOG(ERR, "src_offset should be not" \ - " less than than previous offset" \ - " + previous FSIZE."); \ - return -EINVAL; \ - } \ -} while (0) - -/* - * i40e_srcoff_to_flx_pit - transform the src_offset into flex_pit structure, - * and the flex_pit will be sorted by it's src_offset value - */ -static inline uint16_t -i40e_srcoff_to_flx_pit(const uint16_t *src_offset, - struct i40e_fdir_flex_pit *flex_pit) -{ - uint16_t src_tmp, size, num = 0; - uint16_t i, k, j = 0; - - while (j < I40E_FDIR_MAX_FLEX_LEN) { - size = 1; - for (; j < I40E_FDIR_MAX_FLEX_LEN - 1; j++) { - if (src_offset[j + 1] == src_offset[j] + 1) - size++; - else - break; - } - src_tmp = src_offset[j] + 1 - size; - /* the flex_pit need to be sort by src_offset */ - for (i = 0; i < num; i++) { - if (src_tmp < flex_pit[i].src_offset) - break; - } - /* if insert required, move backward */ - for (k = num; k > i; k--) - flex_pit[k] = flex_pit[k - 1]; - /* insert */ - flex_pit[i].dst_offset = j + 1 - size; - flex_pit[i].src_offset = src_tmp; - flex_pit[i].size = size; - j++; - num++; - } - return num; -} - -/* i40e_check_fdir_flex_payload -check flex payload configuration arguments */ -static inline int -i40e_check_fdir_flex_payload(const struct rte_eth_flex_payload_cfg *flex_cfg) -{ - struct i40e_fdir_flex_pit flex_pit[I40E_FDIR_MAX_FLEX_LEN]; - uint16_t num, i; - - for (i = 0; i < I40E_FDIR_MAX_FLEX_LEN; i++) { - if (flex_cfg->src_offset[i] >= I40E_MAX_FLX_SOURCE_OFF) { - PMD_DRV_LOG(ERR, "exceeds maximal payload limit."); - return -EINVAL; - } - } - - memset(flex_pit, 0, sizeof(flex_pit)); - num = i40e_srcoff_to_flx_pit(flex_cfg->src_offset, flex_pit); - if (num > I40E_MAX_FLXPLD_FIED) { - PMD_DRV_LOG(ERR, "exceeds maximal number of flex fields."); - return -EINVAL; - } - for (i = 0; i < num; i++) { - if (flex_pit[i].size & 0x01 || flex_pit[i].dst_offset & 0x01 || - flex_pit[i].src_offset & 0x01) { - PMD_DRV_LOG(ERR, "flexpayload should be measured" - " in word"); - return -EINVAL; - } - if (i != num - 1) - I40E_VALIDATE_FLEX_PIT(flex_pit[i], flex_pit[i + 1]); - } - return 0; -} - -/* - * i40e_check_fdir_flex_conf -check if the flex payload and mask configuration - * arguments are valid - */ -static int -i40e_check_fdir_flex_conf(const struct i40e_adapter *adapter, - const struct rte_eth_fdir_flex_conf *conf) -{ - const struct rte_eth_flex_payload_cfg *flex_cfg; - const struct rte_eth_fdir_flex_mask *flex_mask; - uint16_t mask_tmp; - uint8_t nb_bitmask; - uint16_t i, j; - int ret = 0; - enum i40e_filter_pctype pctype; - - if (conf == NULL) { - PMD_DRV_LOG(INFO, "NULL pointer."); - return -EINVAL; - } - /* check flexible payload setting configuration */ - if (conf->nb_payloads > RTE_ETH_L4_PAYLOAD) { - PMD_DRV_LOG(ERR, "invalid number of payload setting."); - return -EINVAL; - } - for (i = 0; i < conf->nb_payloads; i++) { - flex_cfg = &conf->flex_set[i]; - if (flex_cfg->type > RTE_ETH_L4_PAYLOAD) { - PMD_DRV_LOG(ERR, "invalid payload type."); - return -EINVAL; - } - ret = i40e_check_fdir_flex_payload(flex_cfg); - if (ret < 0) { - PMD_DRV_LOG(ERR, "invalid flex payload arguments."); - return -EINVAL; - } - } - - /* check flex mask setting configuration */ - if (conf->nb_flexmasks >= RTE_ETH_FLOW_MAX) { - PMD_DRV_LOG(ERR, "invalid number of flex masks."); - return -EINVAL; - } - for (i = 0; i < conf->nb_flexmasks; i++) { - flex_mask = &conf->flex_mask[i]; - pctype = i40e_flowtype_to_pctype(adapter, flex_mask->flow_type); - if (pctype == I40E_FILTER_PCTYPE_INVALID) { - PMD_DRV_LOG(WARNING, "invalid flow type."); - return -EINVAL; - } - nb_bitmask = 0; - for (j = 0; j < I40E_FDIR_MAX_FLEX_LEN; j += sizeof(uint16_t)) { - mask_tmp = I40E_WORD(flex_mask->mask[j], - flex_mask->mask[j + 1]); - if (mask_tmp != 0x0 && mask_tmp != UINT16_MAX) { - nb_bitmask++; - if (nb_bitmask > I40E_FDIR_BITMASK_NUM_WORD) { - PMD_DRV_LOG(ERR, " exceed maximal" - " number of bitmasks."); - return -EINVAL; - } - } - } - } - return 0; -} - -/* - * i40e_set_flx_pld_cfg -configure the rule how bytes stream is extracted as flexible payload - * @pf: board private structure - * @cfg: the rule how bytes stream is extracted as flexible payload - */ -static void -i40e_set_flx_pld_cfg(struct i40e_pf *pf, - const struct rte_eth_flex_payload_cfg *cfg) -{ - struct i40e_hw *hw = I40E_PF_TO_HW(pf); - struct i40e_fdir_flex_pit flex_pit[I40E_MAX_FLXPLD_FIED]; - uint32_t flx_pit, flx_ort; - uint16_t num, min_next_off; /* in words */ - uint8_t field_idx = 0; - uint8_t layer_idx = 0; - uint16_t i; - - if (cfg->type == RTE_ETH_L2_PAYLOAD) - layer_idx = I40E_FLXPLD_L2_IDX; - else if (cfg->type == RTE_ETH_L3_PAYLOAD) - layer_idx = I40E_FLXPLD_L3_IDX; - else if (cfg->type == RTE_ETH_L4_PAYLOAD) - layer_idx = I40E_FLXPLD_L4_IDX; - - memset(flex_pit, 0, sizeof(flex_pit)); - num = RTE_MIN(i40e_srcoff_to_flx_pit(cfg->src_offset, flex_pit), - RTE_DIM(flex_pit)); - - if (num) { - flx_ort = (1 << I40E_GLQF_ORT_FLX_PAYLOAD_SHIFT) | - (num << I40E_GLQF_ORT_FIELD_CNT_SHIFT) | - (layer_idx * I40E_MAX_FLXPLD_FIED); - I40E_WRITE_GLB_REG(hw, I40E_GLQF_ORT(33 + layer_idx), flx_ort); - } - - for (i = 0; i < num; i++) { - field_idx = layer_idx * I40E_MAX_FLXPLD_FIED + i; - /* record the info in fdir structure */ - pf->fdir.flex_set[field_idx].src_offset = - flex_pit[i].src_offset / sizeof(uint16_t); - pf->fdir.flex_set[field_idx].size = - flex_pit[i].size / sizeof(uint16_t); - pf->fdir.flex_set[field_idx].dst_offset = - flex_pit[i].dst_offset / sizeof(uint16_t); - flx_pit = MK_FLX_PIT(pf->fdir.flex_set[field_idx].src_offset, - pf->fdir.flex_set[field_idx].size, - pf->fdir.flex_set[field_idx].dst_offset); - - I40E_WRITE_REG(hw, I40E_PRTQF_FLX_PIT(field_idx), flx_pit); - } - min_next_off = pf->fdir.flex_set[field_idx].src_offset + - pf->fdir.flex_set[field_idx].size; - - for (; i < I40E_MAX_FLXPLD_FIED; i++) { - /* set the non-used register obeying register's constrain */ - flx_pit = MK_FLX_PIT(min_next_off, NONUSE_FLX_PIT_FSIZE, - NONUSE_FLX_PIT_DEST_OFF); - I40E_WRITE_REG(hw, - I40E_PRTQF_FLX_PIT(layer_idx * I40E_MAX_FLXPLD_FIED + i), - flx_pit); - min_next_off++; - } -} - -/* - * i40e_set_flex_mask_on_pctype - configure the mask on flexible payload - * @pf: board private structure - * @pctype: packet classify type - * @flex_masks: mask for flexible payload - */ -static void -i40e_set_flex_mask_on_pctype(struct i40e_pf *pf, - enum i40e_filter_pctype pctype, - const struct rte_eth_fdir_flex_mask *mask_cfg) -{ - struct i40e_hw *hw = I40E_PF_TO_HW(pf); - struct i40e_fdir_flex_mask *flex_mask; - uint32_t flxinset, fd_mask; - uint16_t mask_tmp; - uint8_t i, nb_bitmask = 0; - - flex_mask = &pf->fdir.flex_mask[pctype]; - memset(flex_mask, 0, sizeof(struct i40e_fdir_flex_mask)); - for (i = 0; i < I40E_FDIR_MAX_FLEX_LEN; i += sizeof(uint16_t)) { - mask_tmp = I40E_WORD(mask_cfg->mask[i], mask_cfg->mask[i + 1]); - if (mask_tmp != 0x0) { - flex_mask->word_mask |= - I40E_FLEX_WORD_MASK(i / sizeof(uint16_t)); - if (mask_tmp != UINT16_MAX) { - /* set bit mask */ - flex_mask->bitmask[nb_bitmask].mask = ~mask_tmp; - flex_mask->bitmask[nb_bitmask].offset = - i / sizeof(uint16_t); - nb_bitmask++; - } - } - } - /* write mask to hw */ - flxinset = (flex_mask->word_mask << - I40E_PRTQF_FD_FLXINSET_INSET_SHIFT) & - I40E_PRTQF_FD_FLXINSET_INSET_MASK; - i40e_write_rx_ctl(hw, I40E_PRTQF_FD_FLXINSET(pctype), flxinset); - - for (i = 0; i < nb_bitmask; i++) { - fd_mask = (flex_mask->bitmask[i].mask << - I40E_PRTQF_FD_MSK_MASK_SHIFT) & - I40E_PRTQF_FD_MSK_MASK_MASK; - fd_mask |= ((flex_mask->bitmask[i].offset + - I40E_FLX_OFFSET_IN_FIELD_VECTOR) << - I40E_PRTQF_FD_MSK_OFFSET_SHIFT) & - I40E_PRTQF_FD_MSK_OFFSET_MASK; - i40e_write_rx_ctl(hw, I40E_PRTQF_FD_MSK(pctype, i), fd_mask); - } -} - /* * Enable/disable flow director RX processing in vector routines. */ @@ -661,10 +398,7 @@ i40e_fdir_configure(struct rte_eth_dev *dev) { struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); - struct rte_eth_fdir_flex_conf *conf; - enum i40e_filter_pctype pctype; uint32_t val; - uint8_t i; int ret = 0; /* @@ -687,39 +421,6 @@ i40e_fdir_configure(struct rte_eth_dev *dev) i40e_init_flx_pld(pf); /* set flex config to default value */ - conf = &dev->data->dev_conf.fdir_conf.flex_conf; - ret = i40e_check_fdir_flex_conf(pf->adapter, conf); - if (ret < 0) { - PMD_DRV_LOG(ERR, " invalid configuration arguments."); - return -EINVAL; - } - - if (!pf->support_multi_driver) { - /* configure flex payload */ - for (i = 0; i < conf->nb_payloads; i++) - i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]); - /* configure flex mask*/ - for (i = 0; i < conf->nb_flexmasks; i++) { - if (hw->mac.type == I40E_MAC_X722) { - /* get pctype value in fd pctype register */ - pctype = (enum i40e_filter_pctype) - i40e_read_rx_ctl(hw, - I40E_GLQF_FD_PCTYPES( - (int)i40e_flowtype_to_pctype( - pf->adapter, - conf->flex_mask[i].flow_type))); - } else { - pctype = i40e_flowtype_to_pctype(pf->adapter, - conf->flex_mask[i].flow_type); - } - - i40e_set_flex_mask_on_pctype(pf, pctype, - &conf->flex_mask[i]); - } - } else { - PMD_DRV_LOG(ERR, "Not support flexible payload."); - } - /* Enable FDIR processing in RX routines */ i40e_fdir_rx_proc_enable(dev, 1); @@ -2187,10 +1888,7 @@ i40e_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir) uint16_t num_flex_mask = 0; uint16_t i; - if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) - fdir->mode = RTE_FDIR_MODE_PERFECT; - else - fdir->mode = RTE_FDIR_MODE_NONE; + fdir->mode = RTE_FDIR_MODE_NONE; fdir->guarant_spc = (uint32_t)hw->func_caps.fd_filters_guaranteed; diff --git a/drivers/net/i40e/i40e_rxtx_vec_common.h b/drivers/net/i40e/i40e_rxtx_vec_common.h index 959832ed6a..39406b7517 100644 --- a/drivers/net/i40e/i40e_rxtx_vec_common.h +++ b/drivers/net/i40e/i40e_rxtx_vec_common.h @@ -211,15 +211,10 @@ i40e_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev) struct i40e_adapter *ad = I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; - struct rte_eth_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; struct i40e_rx_queue *rxq; uint16_t desc, i; bool first_queue; - /* no fdir support */ - if (fconf->mode != RTE_FDIR_MODE_NONE) - return -1; - /* no header split support */ if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_HEADER_SPLIT) return -1; diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h index eabefd6343..0773a7ec8e 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.h +++ b/drivers/net/ixgbe/ixgbe_ethdev.h @@ -474,6 +474,7 @@ struct ixgbe_adapter { struct ixgbe_hw_stats stats; struct ixgbe_macsec_stats macsec_stats; struct ixgbe_macsec_setting macsec_setting; + struct rte_eth_fdir_conf fdir_conf; struct ixgbe_hw_fdir_info fdir; struct ixgbe_interrupt intr; struct ixgbe_stat_mapping_registers stat_mappings; @@ -523,7 +524,7 @@ int ixgbe_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params); int ixgbe_vf_representor_uninit(struct rte_eth_dev *ethdev); #define IXGBE_DEV_FDIR_CONF(dev) \ - (&(dev)->data->dev_conf.fdir_conf) + (&((struct ixgbe_adapter *)(dev)->data->dev_private)->fdir_conf) #define IXGBE_DEV_PRIVATE_TO_HW(adapter)\ (&((struct ixgbe_adapter *)adapter)->hw) diff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c index c018bbc0f1..219e11ad09 100644 --- a/drivers/net/ixgbe/ixgbe_flow.c +++ b/drivers/net/ixgbe/ixgbe_flow.c @@ -2758,7 +2758,7 @@ ixgbe_parse_fdir_filter(struct rte_eth_dev *dev, { int ret; struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); - enum rte_fdir_mode fdir_mode = IXGBE_DEV_FDIR_CONF(dev)->mode; + struct rte_eth_fdir_conf *fdir_conf = IXGBE_DEV_FDIR_CONF(dev); if (hw->mac.type != ixgbe_mac_82599EB && hw->mac.type != ixgbe_mac_X540 && @@ -2787,9 +2787,16 @@ ixgbe_parse_fdir_filter(struct rte_eth_dev *dev, rule->ixgbe_fdir.formatted.dst_port != 0)) return -ENOTSUP; - if (fdir_mode == RTE_FDIR_MODE_NONE || - fdir_mode != rule->mode) + if (fdir_conf->mode == RTE_FDIR_MODE_NONE) { + fdir_conf->mode = rule->mode; + ret = ixgbe_fdir_configure(dev); + if (ret) { + fdir_conf->mode = RTE_FDIR_MODE_NONE; + return ret; + } + } else if (fdir_conf->mode != rule->mode) { return -ENOTSUP; + } if (rule->queue >= dev->data->nb_rx_queues) return -ENOTSUP; diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c index 3aca53fb98..290e562126 100644 --- a/drivers/net/octeontx/octeontx_ethdev.c +++ b/drivers/net/octeontx/octeontx_ethdev.c @@ -512,11 +512,6 @@ octeontx_dev_configure(struct rte_eth_dev *dev) return -EINVAL; } - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { - octeontx_log_err("flow director not supported"); - return -EINVAL; - } - nic->num_tx_queues = dev->data->nb_tx_queues; if (!nic->reconfigure) { diff --git a/drivers/net/qede/qede_filter.c b/drivers/net/qede/qede_filter.c index ca3165d972..c5945451e8 100644 --- a/drivers/net/qede/qede_filter.c +++ b/drivers/net/qede/qede_filter.c @@ -144,31 +144,9 @@ int qede_check_fdir_support(struct rte_eth_dev *eth_dev) { struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); - struct rte_eth_fdir_conf *fdir = ð_dev->data->dev_conf.fdir_conf; - /* check FDIR modes */ - switch (fdir->mode) { - case RTE_FDIR_MODE_NONE: - qdev->arfs_info.arfs.mode = ECORE_FILTER_CONFIG_MODE_DISABLE; - DP_INFO(edev, "flowdir is disabled\n"); - break; - case RTE_FDIR_MODE_PERFECT: - if (ECORE_IS_CMT(edev)) { - DP_ERR(edev, "flowdir is not supported in 100G mode\n"); - qdev->arfs_info.arfs.mode = - ECORE_FILTER_CONFIG_MODE_DISABLE; - return -ENOTSUP; - } - qdev->arfs_info.arfs.mode = - ECORE_FILTER_CONFIG_MODE_5_TUPLE; - DP_INFO(edev, "flowdir is enabled (5 Tuple mode)\n"); - break; - case RTE_FDIR_MODE_PERFECT_TUNNEL: - case RTE_FDIR_MODE_SIGNATURE: - case RTE_FDIR_MODE_PERFECT_MAC_VLAN: - DP_ERR(edev, "Unsupported flowdir mode %d\n", fdir->mode); - return -ENOTSUP; - } + qdev->arfs_info.arfs.mode = ECORE_FILTER_CONFIG_MODE_DISABLE; + DP_INFO(edev, "flowdir is disabled\n"); return 0; } @@ -258,9 +236,6 @@ qede_config_arfs_filter(struct rte_eth_dev *eth_dev, if (add) { if (qdev->arfs_info.arfs.mode == ECORE_FILTER_CONFIG_MODE_DISABLE) { - /* Force update */ - eth_dev->data->dev_conf.fdir_conf.mode = - RTE_FDIR_MODE_PERFECT; qdev->arfs_info.arfs.mode = ECORE_FILTER_CONFIG_MODE_5_TUPLE; DP_INFO(edev, "Force enable flowdir in perfect mode\n"); diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c index 51726d229b..22753e3417 100644 --- a/drivers/net/sfc/sfc.c +++ b/drivers/net/sfc/sfc.c @@ -176,11 +176,6 @@ sfc_check_conf(struct sfc_adapter *sa) rc = EINVAL; } - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { - sfc_err(sa, "Flow Director not supported"); - rc = EINVAL; - } - if ((conf->intr_conf.lsc != 0) && (sa->intr.type != EFX_INTR_LINE) && (sa->intr.type != EFX_INTR_MESSAGE)) { diff --git a/drivers/net/sfc/sfc_repr.c b/drivers/net/sfc/sfc_repr.c index d0e5385889..417d0073cb 100644 --- a/drivers/net/sfc/sfc_repr.c +++ b/drivers/net/sfc/sfc_repr.c @@ -443,11 +443,6 @@ sfc_repr_check_conf(struct sfc_repr *sr, uint16_t nb_rx_queues, ret = -EINVAL; } - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { - sfcr_err(sr, "Flow Director not supported"); - ret = -EINVAL; - } - if (conf->intr_conf.lsc != 0) { sfcr_err(sr, "link status change interrupt not supported"); ret = -EINVAL; diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index 262c024560..dd7a6bf520 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -2013,11 +2013,6 @@ nicvf_dev_configure(struct rte_eth_dev *dev) return -EINVAL; } - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { - PMD_INIT_LOG(INFO, "Flow director not supported"); - return -EINVAL; - } - assert_primary(nic); NICVF_STATIC_ASSERT(MAX_RCV_QUEUES_PER_QS == MAX_SND_QUEUES_PER_QS); cqcount = RTE_MAX(data->nb_tx_queues, data->nb_rx_queues); diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h index e36a2c3d0d..e425ab443e 100644 --- a/drivers/net/txgbe/txgbe_ethdev.h +++ b/drivers/net/txgbe/txgbe_ethdev.h @@ -346,6 +346,7 @@ struct txgbe_tm_conf { struct txgbe_adapter { struct txgbe_hw hw; struct txgbe_hw_stats stats; + struct rte_eth_fdir_conf fdir_conf; struct txgbe_hw_fdir_info fdir; struct txgbe_interrupt intr; struct txgbe_stat_mappings stat_mappings; @@ -373,7 +374,7 @@ struct txgbe_adapter { #define TXGBE_DEV_ADAPTER(dev) \ ((struct txgbe_adapter *)(dev)->data->dev_private) -#define TXGBE_DEV_FDIR_CONF(dev) (&(dev)->data->dev_conf.fdir_conf) +#define TXGBE_DEV_FDIR_CONF(dev) (&TXGBE_DEV_ADAPTER(dev)->fdir_conf) #define TXGBE_DEV_HW(dev) \ (&((struct txgbe_adapter *)(dev)->data->dev_private)->hw) diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c index 26920f43d3..0b89e3fe38 100644 --- a/drivers/net/txgbe/txgbe_flow.c +++ b/drivers/net/txgbe/txgbe_flow.c @@ -2439,7 +2439,7 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev, { int ret; struct txgbe_hw *hw = TXGBE_DEV_HW(dev); - enum rte_fdir_mode fdir_mode = TXGBE_DEV_FDIR_CONF(dev)->mode; + struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev); ret = txgbe_parse_fdir_filter_normal(dev, attr, pattern, actions, rule, error); @@ -2458,9 +2458,16 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev, (rule->input.src_port != 0 || rule->input.dst_port != 0)) return -ENOTSUP; - if (fdir_mode == RTE_FDIR_MODE_NONE || - fdir_mode != rule->mode) + if (fdir_conf->mode == RTE_FDIR_MODE_NONE) { + fdir_conf->mode = rule->mode; + ret = txgbe_fdir_configure(dev); + if (ret) { + fdir_conf->mode = RTE_FDIR_MODE_NONE; + return ret; + } + } else if (fdir_conf->mode != rule->mode) { return -ENOTSUP; + } if (rule->queue >= dev->data->nb_rx_queues) return -ENOTSUP; diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h index 5101868ea7..a0e0b2ae88 100644 --- a/lib/ethdev/ethdev_driver.h +++ b/lib/ethdev/ethdev_driver.h @@ -1915,6 +1915,42 @@ struct rte_eth_tunnel_filter_conf { uint16_t queue_id; /**< Queue assigned to if match */ }; +/** + * Memory space that can be configured to store Flow Director filters + * in the board memory. + */ +enum rte_eth_fdir_pballoc_type { + RTE_ETH_FDIR_PBALLOC_64K = 0, /**< 64k. */ + RTE_ETH_FDIR_PBALLOC_128K, /**< 128k. */ + RTE_ETH_FDIR_PBALLOC_256K, /**< 256k. */ +}; + +/** + * Select report mode of FDIR hash information in Rx descriptors. + */ +enum rte_fdir_status_mode { + RTE_FDIR_NO_REPORT_STATUS = 0, /**< Never report FDIR hash. */ + RTE_FDIR_REPORT_STATUS, /**< Only report FDIR hash for matching pkts. */ + RTE_FDIR_REPORT_STATUS_ALWAYS, /**< Always report FDIR hash. */ +}; + +/** + * A structure used to configure the Flow Director (FDIR) feature + * of an Ethernet port. + * + * If mode is RTE_FDIR_MODE_NONE, the pballoc value is ignored. + */ +struct rte_eth_fdir_conf { + enum rte_fdir_mode mode; /**< Flow Director mode. */ + enum rte_eth_fdir_pballoc_type pballoc; /**< Space for FDIR filters. */ + enum rte_fdir_status_mode status; /**< How to report FDIR hash. */ + /** Rx queue of packets matching a "drop" filter in perfect mode. */ + uint8_t drop_queue; + struct rte_eth_fdir_masks mask; + /** Flex payload configuration. */ + struct rte_eth_fdir_flex_conf flex_conf; +}; + #ifdef __cplusplus } #endif diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h index de9e970d4d..53b4d91be2 100644 --- a/lib/ethdev/rte_ethdev.h +++ b/lib/ethdev/rte_ethdev.h @@ -1492,48 +1492,6 @@ enum rte_eth_tunnel_type { /* Deprecated API file for rte_eth_dev_filter_* functions */ #include "rte_eth_ctrl.h" -/** - * Memory space that can be configured to store Flow Director filters - * in the board memory. - */ -enum rte_eth_fdir_pballoc_type { - RTE_ETH_FDIR_PBALLOC_64K = 0, /**< 64k. */ - RTE_ETH_FDIR_PBALLOC_128K, /**< 128k. */ - RTE_ETH_FDIR_PBALLOC_256K, /**< 256k. */ -}; -#define rte_fdir_pballoc_type rte_eth_fdir_pballoc_type - -#define RTE_FDIR_PBALLOC_64K RTE_DEPRECATED(RTE_FDIR_PBALLOC_64K) RTE_ETH_FDIR_PBALLOC_64K -#define RTE_FDIR_PBALLOC_128K RTE_DEPRECATED(RTE_FDIR_PBALLOC_128K) RTE_ETH_FDIR_PBALLOC_128K -#define RTE_FDIR_PBALLOC_256K RTE_DEPRECATED(RTE_FDIR_PBALLOC_256K) RTE_ETH_FDIR_PBALLOC_256K - -/** - * Select report mode of FDIR hash information in Rx descriptors. - */ -enum rte_fdir_status_mode { - RTE_FDIR_NO_REPORT_STATUS = 0, /**< Never report FDIR hash. */ - RTE_FDIR_REPORT_STATUS, /**< Only report FDIR hash for matching pkts. */ - RTE_FDIR_REPORT_STATUS_ALWAYS, /**< Always report FDIR hash. */ -}; - -/** - * A structure used to configure the Flow Director (FDIR) feature - * of an Ethernet port. - * - * If mode is RTE_FDIR_MODE_NONE, the pballoc value is ignored. - */ -struct rte_eth_fdir_conf { - enum rte_fdir_mode mode; /**< Flow Director mode. */ - enum rte_eth_fdir_pballoc_type pballoc; /**< Space for FDIR filters. */ - enum rte_fdir_status_mode status; /**< How to report FDIR hash. */ - /** Rx queue of packets matching a "drop" filter in perfect mode. */ - uint8_t drop_queue; - struct rte_eth_fdir_masks mask; - /** Flex payload configuration. */ - struct rte_eth_fdir_flex_conf flex_conf; -}; -#define rte_fdir_conf rte_eth_fdir_conf - /** * UDP tunneling configuration. * @@ -1602,7 +1560,6 @@ struct rte_eth_conf { /** Currently,Priority Flow Control(PFC) are supported,if DCB with PFC is needed,and the variable must be set RTE_ETH_DCB_PFC_SUPPORT. */ uint32_t dcb_capability_en; - struct rte_eth_fdir_conf fdir_conf; /**< FDIR configuration. DEPRECATED */ struct rte_eth_intr_conf intr_conf; /**< Interrupt mode configuration. */ }; -- 2.30.2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 3/3] ethdev: remove deprecated Flow Director configuration 2022-08-03 11:13 ` [PATCH 3/3] ethdev: remove deprecated " Andrew Rybchenko @ 2022-08-04 11:07 ` Dongdong Liu 0 siblings, 0 replies; 7+ messages in thread From: Dongdong Liu @ 2022-08-04 11:07 UTC (permalink / raw) To: Andrew Rybchenko, Aman Singh, Yuying Zhang, Qi Zhang, Xiao Wang, Qiming Yang, Wenjun Wu, Ray Kinsella, Nithin Dabilpuram, Kiran Kumar K, Sunil Kumar Kori, Satha Rao, Yisen Zhuang, Beilei Xing, Harman Kalra, Rasesh Mody, Devendra Singh Rawat, Jerin Jacob, Maciej Czekaj, Jiawen Wu, Jian Wang, Thomas Monjalon, Ferruh Yigit Cc: dev For hns3 part. Acked-by: Dongdong Liu <liudongdong3@huawei.com> Thanks, Dongdong On 2022/8/3 19:13, Andrew Rybchenko wrote: > Remove deprecated fdir_conf from device configuration. > Assume that mode is equal to RTE_FDIR_MODE_NONE. > > Add internal Flow Director configuration copy in ixgbe and txgbe device > private data since flow API supports requires it. Initialize mode to > the first flow rule mode on the rule validation or creation. > > Since Flow Director configuration data types are still used by some > drivers internally, move it from public API to ethdev driver internal > API. > > Signed-off-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru> > --- > app/test-pmd/cmdline.c | 343 -------------------- > app/test-pmd/config.c | 100 ------ > app/test-pmd/parameters.c | 76 ----- > app/test-pmd/testpmd.c | 24 -- > app/test-pmd/testpmd.h | 6 - > doc/guides/nics/fm10k.rst | 2 - > doc/guides/nics/ixgbe.rst | 1 - > doc/guides/rel_notes/deprecation.rst | 4 - > doc/guides/rel_notes/release_22_11.rst | 4 + > doc/guides/testpmd_app_ug/run_app.rst | 27 -- > doc/guides/testpmd_app_ug/testpmd_funcs.rst | 38 --- > drivers/net/cnxk/cnxk_ethdev.c | 5 - > drivers/net/fm10k/fm10k_rxtx_vec.c | 5 - > drivers/net/hns3/hns3_rxtx_vec.c | 4 - > drivers/net/i40e/i40e_ethdev.c | 31 -- > drivers/net/i40e/i40e_fdir.c | 304 +---------------- > drivers/net/i40e/i40e_rxtx_vec_common.h | 5 - > drivers/net/ixgbe/ixgbe_ethdev.h | 3 +- > drivers/net/ixgbe/ixgbe_flow.c | 13 +- > drivers/net/octeontx/octeontx_ethdev.c | 5 - > drivers/net/qede/qede_filter.c | 29 +- > drivers/net/sfc/sfc.c | 5 - > drivers/net/sfc/sfc_repr.c | 5 - > drivers/net/thunderx/nicvf_ethdev.c | 5 - > drivers/net/txgbe/txgbe_ethdev.h | 3 +- > drivers/net/txgbe/txgbe_flow.c | 13 +- > lib/ethdev/ethdev_driver.h | 36 ++ > lib/ethdev/rte_ethdev.h | 43 --- > 28 files changed, 67 insertions(+), 1072 deletions(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c > index b4fe9dfb17..7057c153f6 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -835,25 +835,6 @@ static void cmd_help_long_parsed(void *parsed_result, > "filters:\n" > "--------\n\n" > > - "flow_director_mask (port_id) mode IP vlan (vlan_value)" > - " src_mask (ipv4_src) (ipv6_src) (src_port)" > - " dst_mask (ipv4_dst) (ipv6_dst) (dst_port)\n" > - " Set flow director IP mask.\n\n" > - > - "flow_director_mask (port_id) mode MAC-VLAN" > - " vlan (vlan_value)\n" > - " Set flow director MAC-VLAN mask.\n\n" > - > - "flow_director_mask (port_id) mode Tunnel" > - " vlan (vlan_value) mac (mac_value)" > - " tunnel-type (tunnel_type_value)" > - " tunnel-id (tunnel_id_value)\n" > - " Set flow director Tunnel mask.\n\n" > - > - "flow_director_flex_payload (port_id)" > - " (raw|l2|l3|l4) (config)\n" > - " Configure flex payload selection.\n\n" > - > "flow validate {port_id}" > " [group {group_id}] [priority {level}]" > " [ingress] [egress]" > @@ -8981,326 +8962,6 @@ do { \ > } \ > } while (0) > > -/* *** deal with flow director mask *** */ > -struct cmd_flow_director_mask_result { > - cmdline_fixed_string_t flow_director_mask; > - portid_t port_id; > - cmdline_fixed_string_t mode; > - cmdline_fixed_string_t mode_value; > - cmdline_fixed_string_t vlan; > - uint16_t vlan_mask; > - cmdline_fixed_string_t src_mask; > - cmdline_ipaddr_t ipv4_src; > - cmdline_ipaddr_t ipv6_src; > - uint16_t port_src; > - cmdline_fixed_string_t dst_mask; > - cmdline_ipaddr_t ipv4_dst; > - cmdline_ipaddr_t ipv6_dst; > - uint16_t port_dst; > - cmdline_fixed_string_t mac; > - uint8_t mac_addr_byte_mask; > - cmdline_fixed_string_t tunnel_id; > - uint32_t tunnel_id_mask; > - cmdline_fixed_string_t tunnel_type; > - uint8_t tunnel_type_mask; > -}; > - > -static void > -cmd_flow_director_mask_parsed(void *parsed_result, > - __rte_unused struct cmdline *cl, > - __rte_unused void *data) > -{ > - struct cmd_flow_director_mask_result *res = parsed_result; > - struct rte_eth_fdir_masks *mask; > - struct rte_port *port; > - > - port = &ports[res->port_id]; > - /** Check if the port is not started **/ > - if (port->port_status != RTE_PORT_STOPPED) { > - fprintf(stderr, "Please stop port %d first\n", res->port_id); > - return; > - } > - > - mask = &port->dev_conf.fdir_conf.mask; > - > - if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_MAC_VLAN) { > - if (strcmp(res->mode_value, "MAC-VLAN")) { > - fprintf(stderr, "Please set mode to MAC-VLAN.\n"); > - return; > - } > - > - mask->vlan_tci_mask = rte_cpu_to_be_16(res->vlan_mask); > - } else if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_TUNNEL) { > - if (strcmp(res->mode_value, "Tunnel")) { > - fprintf(stderr, "Please set mode to Tunnel.\n"); > - return; > - } > - > - mask->vlan_tci_mask = rte_cpu_to_be_16(res->vlan_mask); > - mask->mac_addr_byte_mask = res->mac_addr_byte_mask; > - mask->tunnel_id_mask = rte_cpu_to_be_32(res->tunnel_id_mask); > - mask->tunnel_type_mask = res->tunnel_type_mask; > - } else { > - if (strcmp(res->mode_value, "IP")) { > - fprintf(stderr, "Please set mode to IP.\n"); > - return; > - } > - > - mask->vlan_tci_mask = rte_cpu_to_be_16(res->vlan_mask); > - IPV4_ADDR_TO_UINT(res->ipv4_src, mask->ipv4_mask.src_ip); > - IPV4_ADDR_TO_UINT(res->ipv4_dst, mask->ipv4_mask.dst_ip); > - IPV6_ADDR_TO_ARRAY(res->ipv6_src, mask->ipv6_mask.src_ip); > - IPV6_ADDR_TO_ARRAY(res->ipv6_dst, mask->ipv6_mask.dst_ip); > - mask->src_port_mask = rte_cpu_to_be_16(res->port_src); > - mask->dst_port_mask = rte_cpu_to_be_16(res->port_dst); > - } > - > - cmd_reconfig_device_queue(res->port_id, 1, 1); > -} > - > -static cmdline_parse_token_string_t cmd_flow_director_mask = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - flow_director_mask, "flow_director_mask"); > -static cmdline_parse_token_num_t cmd_flow_director_mask_port_id = > - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, > - port_id, RTE_UINT16); > -static cmdline_parse_token_string_t cmd_flow_director_mask_vlan = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - vlan, "vlan"); > -static cmdline_parse_token_num_t cmd_flow_director_mask_vlan_value = > - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, > - vlan_mask, RTE_UINT16); > -static cmdline_parse_token_string_t cmd_flow_director_mask_src = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - src_mask, "src_mask"); > -static cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv4_src = > - TOKEN_IPADDR_INITIALIZER(struct cmd_flow_director_mask_result, > - ipv4_src); > -static cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv6_src = > - TOKEN_IPADDR_INITIALIZER(struct cmd_flow_director_mask_result, > - ipv6_src); > -static cmdline_parse_token_num_t cmd_flow_director_mask_port_src = > - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, > - port_src, RTE_UINT16); > -static cmdline_parse_token_string_t cmd_flow_director_mask_dst = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - dst_mask, "dst_mask"); > -static cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv4_dst = > - TOKEN_IPADDR_INITIALIZER(struct cmd_flow_director_mask_result, > - ipv4_dst); > -static cmdline_parse_token_ipaddr_t cmd_flow_director_mask_ipv6_dst = > - TOKEN_IPADDR_INITIALIZER(struct cmd_flow_director_mask_result, > - ipv6_dst); > -static cmdline_parse_token_num_t cmd_flow_director_mask_port_dst = > - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, > - port_dst, RTE_UINT16); > - > -static cmdline_parse_token_string_t cmd_flow_director_mask_mode = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - mode, "mode"); > -static cmdline_parse_token_string_t cmd_flow_director_mask_mode_ip = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - mode_value, "IP"); > -static cmdline_parse_token_string_t cmd_flow_director_mask_mode_mac_vlan = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - mode_value, "MAC-VLAN"); > -static cmdline_parse_token_string_t cmd_flow_director_mask_mode_tunnel = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - mode_value, "Tunnel"); > -static cmdline_parse_token_string_t cmd_flow_director_mask_mac = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - mac, "mac"); > -static cmdline_parse_token_num_t cmd_flow_director_mask_mac_value = > - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, > - mac_addr_byte_mask, RTE_UINT8); > -static cmdline_parse_token_string_t cmd_flow_director_mask_tunnel_type = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - tunnel_type, "tunnel-type"); > -static cmdline_parse_token_num_t cmd_flow_director_mask_tunnel_type_value = > - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, > - tunnel_type_mask, RTE_UINT8); > -static cmdline_parse_token_string_t cmd_flow_director_mask_tunnel_id = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_mask_result, > - tunnel_id, "tunnel-id"); > -static cmdline_parse_token_num_t cmd_flow_director_mask_tunnel_id_value = > - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_mask_result, > - tunnel_id_mask, RTE_UINT32); > - > -static cmdline_parse_inst_t cmd_set_flow_director_ip_mask = { > - .f = cmd_flow_director_mask_parsed, > - .data = NULL, > - .help_str = "flow_director_mask ... : " > - "Set IP mode flow director's mask on NIC", > - .tokens = { > - (void *)&cmd_flow_director_mask, > - (void *)&cmd_flow_director_mask_port_id, > - (void *)&cmd_flow_director_mask_mode, > - (void *)&cmd_flow_director_mask_mode_ip, > - (void *)&cmd_flow_director_mask_vlan, > - (void *)&cmd_flow_director_mask_vlan_value, > - (void *)&cmd_flow_director_mask_src, > - (void *)&cmd_flow_director_mask_ipv4_src, > - (void *)&cmd_flow_director_mask_ipv6_src, > - (void *)&cmd_flow_director_mask_port_src, > - (void *)&cmd_flow_director_mask_dst, > - (void *)&cmd_flow_director_mask_ipv4_dst, > - (void *)&cmd_flow_director_mask_ipv6_dst, > - (void *)&cmd_flow_director_mask_port_dst, > - NULL, > - }, > -}; > - > -static cmdline_parse_inst_t cmd_set_flow_director_mac_vlan_mask = { > - .f = cmd_flow_director_mask_parsed, > - .data = NULL, > - .help_str = "flow_director_mask ... : Set MAC VLAN mode " > - "flow director's mask on NIC", > - .tokens = { > - (void *)&cmd_flow_director_mask, > - (void *)&cmd_flow_director_mask_port_id, > - (void *)&cmd_flow_director_mask_mode, > - (void *)&cmd_flow_director_mask_mode_mac_vlan, > - (void *)&cmd_flow_director_mask_vlan, > - (void *)&cmd_flow_director_mask_vlan_value, > - NULL, > - }, > -}; > - > -static cmdline_parse_inst_t cmd_set_flow_director_tunnel_mask = { > - .f = cmd_flow_director_mask_parsed, > - .data = NULL, > - .help_str = "flow_director_mask ... : Set tunnel mode " > - "flow director's mask on NIC", > - .tokens = { > - (void *)&cmd_flow_director_mask, > - (void *)&cmd_flow_director_mask_port_id, > - (void *)&cmd_flow_director_mask_mode, > - (void *)&cmd_flow_director_mask_mode_tunnel, > - (void *)&cmd_flow_director_mask_vlan, > - (void *)&cmd_flow_director_mask_vlan_value, > - (void *)&cmd_flow_director_mask_mac, > - (void *)&cmd_flow_director_mask_mac_value, > - (void *)&cmd_flow_director_mask_tunnel_type, > - (void *)&cmd_flow_director_mask_tunnel_type_value, > - (void *)&cmd_flow_director_mask_tunnel_id, > - (void *)&cmd_flow_director_mask_tunnel_id_value, > - NULL, > - }, > -}; > - > -/* *** deal with flow director flexible payload configuration *** */ > -struct cmd_flow_director_flexpayload_result { > - cmdline_fixed_string_t flow_director_flexpayload; > - portid_t port_id; > - cmdline_fixed_string_t payload_layer; > - cmdline_fixed_string_t payload_cfg; > -}; > - > -static inline int > -parse_offsets(const char *q_arg, uint16_t *offsets, uint16_t max_num) > -{ > - char s[256]; > - const char *p, *p0 = q_arg; > - char *end; > - unsigned long int_fld; > - char *str_fld[max_num]; > - int i; > - unsigned size; > - int ret = -1; > - > - p = strchr(p0, '('); > - if (p == NULL) > - return -1; > - ++p; > - p0 = strchr(p, ')'); > - if (p0 == NULL) > - return -1; > - > - size = p0 - p; > - if (size >= sizeof(s)) > - return -1; > - > - snprintf(s, sizeof(s), "%.*s", size, p); > - ret = rte_strsplit(s, sizeof(s), str_fld, max_num, ','); > - if (ret < 0 || ret > max_num) > - return -1; > - for (i = 0; i < ret; i++) { > - errno = 0; > - int_fld = strtoul(str_fld[i], &end, 0); > - if (errno != 0 || *end != '\0' || int_fld > UINT16_MAX) > - return -1; > - offsets[i] = (uint16_t)int_fld; > - } > - return ret; > -} > - > -static void > -cmd_flow_director_flxpld_parsed(void *parsed_result, > - __rte_unused struct cmdline *cl, > - __rte_unused void *data) > -{ > - struct cmd_flow_director_flexpayload_result *res = parsed_result; > - struct rte_eth_flex_payload_cfg flex_cfg; > - struct rte_port *port; > - int ret = 0; > - > - port = &ports[res->port_id]; > - /** Check if the port is not started **/ > - if (port->port_status != RTE_PORT_STOPPED) { > - fprintf(stderr, "Please stop port %d first\n", res->port_id); > - return; > - } > - > - memset(&flex_cfg, 0, sizeof(struct rte_eth_flex_payload_cfg)); > - > - if (!strcmp(res->payload_layer, "raw")) > - flex_cfg.type = RTE_ETH_RAW_PAYLOAD; > - else if (!strcmp(res->payload_layer, "l2")) > - flex_cfg.type = RTE_ETH_L2_PAYLOAD; > - else if (!strcmp(res->payload_layer, "l3")) > - flex_cfg.type = RTE_ETH_L3_PAYLOAD; > - else if (!strcmp(res->payload_layer, "l4")) > - flex_cfg.type = RTE_ETH_L4_PAYLOAD; > - > - ret = parse_offsets(res->payload_cfg, flex_cfg.src_offset, > - RTE_ETH_FDIR_MAX_FLEXLEN); > - if (ret < 0) { > - fprintf(stderr, "error: Cannot parse flex payload input.\n"); > - return; > - } > - > - fdir_set_flex_payload(res->port_id, &flex_cfg); > - cmd_reconfig_device_queue(res->port_id, 1, 1); > -} > - > -static cmdline_parse_token_string_t cmd_flow_director_flexpayload = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flexpayload_result, > - flow_director_flexpayload, > - "flow_director_flex_payload"); > -static cmdline_parse_token_num_t cmd_flow_director_flexpayload_port_id = > - TOKEN_NUM_INITIALIZER(struct cmd_flow_director_flexpayload_result, > - port_id, RTE_UINT16); > -static cmdline_parse_token_string_t cmd_flow_director_flexpayload_payload_layer = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flexpayload_result, > - payload_layer, "raw#l2#l3#l4"); > -static cmdline_parse_token_string_t cmd_flow_director_flexpayload_payload_cfg = > - TOKEN_STRING_INITIALIZER(struct cmd_flow_director_flexpayload_result, > - payload_cfg, NULL); > - > -static cmdline_parse_inst_t cmd_set_flow_director_flex_payload = { > - .f = cmd_flow_director_flxpld_parsed, > - .data = NULL, > - .help_str = "flow_director_flexpayload ... : " > - "Set flow director's flex payload on NIC", > - .tokens = { > - (void *)&cmd_flow_director_flexpayload, > - (void *)&cmd_flow_director_flexpayload_port_id, > - (void *)&cmd_flow_director_flexpayload_payload_layer, > - (void *)&cmd_flow_director_flexpayload_payload_cfg, > - NULL, > - }, > -}; > - > /* Generic flow interface command. */ > extern cmdline_parse_inst_t cmd_flow; > > @@ -14274,10 +13935,6 @@ static cmdline_parse_ctx_t builtin_ctx[] = { > (cmdline_parse_inst_t *)&cmd_cleanup_txq_mbufs, > (cmdline_parse_inst_t *)&cmd_dump, > (cmdline_parse_inst_t *)&cmd_dump_one, > - (cmdline_parse_inst_t *)&cmd_set_flow_director_ip_mask, > - (cmdline_parse_inst_t *)&cmd_set_flow_director_mac_vlan_mask, > - (cmdline_parse_inst_t *)&cmd_set_flow_director_tunnel_mask, > - (cmdline_parse_inst_t *)&cmd_set_flow_director_flex_payload, > (cmdline_parse_inst_t *)&cmd_flow, > (cmdline_parse_inst_t *)&cmd_show_port_meter_cap, > (cmdline_parse_inst_t *)&cmd_add_port_meter_profile_srtcm, > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c > index a2939867c4..c90cdfe382 100644 > --- a/app/test-pmd/config.c > +++ b/app/test-pmd/config.c > @@ -5728,41 +5728,6 @@ flowtype_to_str(uint16_t flow_type) > > #if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE) > > -static inline void > -print_fdir_mask(struct rte_eth_fdir_masks *mask) > -{ > - printf("\n vlan_tci: 0x%04x", rte_be_to_cpu_16(mask->vlan_tci_mask)); > - > - if (fdir_conf.mode == RTE_FDIR_MODE_PERFECT_TUNNEL) > - printf(", mac_addr: 0x%02x, tunnel_type: 0x%01x," > - " tunnel_id: 0x%08x", > - mask->mac_addr_byte_mask, mask->tunnel_type_mask, > - rte_be_to_cpu_32(mask->tunnel_id_mask)); > - else if (fdir_conf.mode != RTE_FDIR_MODE_PERFECT_MAC_VLAN) { > - printf(", src_ipv4: 0x%08x, dst_ipv4: 0x%08x", > - rte_be_to_cpu_32(mask->ipv4_mask.src_ip), > - rte_be_to_cpu_32(mask->ipv4_mask.dst_ip)); > - > - printf("\n src_port: 0x%04x, dst_port: 0x%04x", > - rte_be_to_cpu_16(mask->src_port_mask), > - rte_be_to_cpu_16(mask->dst_port_mask)); > - > - printf("\n src_ipv6: 0x%08x,0x%08x,0x%08x,0x%08x", > - rte_be_to_cpu_32(mask->ipv6_mask.src_ip[0]), > - rte_be_to_cpu_32(mask->ipv6_mask.src_ip[1]), > - rte_be_to_cpu_32(mask->ipv6_mask.src_ip[2]), > - rte_be_to_cpu_32(mask->ipv6_mask.src_ip[3])); > - > - printf("\n dst_ipv6: 0x%08x,0x%08x,0x%08x,0x%08x", > - rte_be_to_cpu_32(mask->ipv6_mask.dst_ip[0]), > - rte_be_to_cpu_32(mask->ipv6_mask.dst_ip[1]), > - rte_be_to_cpu_32(mask->ipv6_mask.dst_ip[2]), > - rte_be_to_cpu_32(mask->ipv6_mask.dst_ip[3])); > - } > - > - printf("\n"); > -} > - > static inline void > print_fdir_flex_payload(struct rte_eth_fdir_flex_conf *flex_conf, uint32_t num) > { > @@ -5898,8 +5863,6 @@ fdir_get_infos(portid_t port_id) > fdir_info.flex_payload_unit, > fdir_info.max_flex_payload_segment_num, > fdir_info.flex_bitmask_unit, fdir_info.max_flex_bitmask_num); > - printf(" MASK: "); > - print_fdir_mask(&fdir_info.mask); > if (fdir_info.flex_conf.nb_payloads > 0) { > printf(" FLEX PAYLOAD SRC OFFSET:"); > print_fdir_flex_payload(&fdir_info.flex_conf, fdir_info.max_flexpayload); > @@ -5926,69 +5889,6 @@ fdir_get_infos(portid_t port_id) > > #endif /* RTE_NET_I40E || RTE_NET_IXGBE */ > > -void > -fdir_set_flex_mask(portid_t port_id, struct rte_eth_fdir_flex_mask *cfg) > -{ > - struct rte_port *port; > - struct rte_eth_fdir_flex_conf *flex_conf; > - int i, idx = 0; > - > - port = &ports[port_id]; > - flex_conf = &port->dev_conf.fdir_conf.flex_conf; > - for (i = 0; i < RTE_ETH_FLOW_MAX; i++) { > - if (cfg->flow_type == flex_conf->flex_mask[i].flow_type) { > - idx = i; > - break; > - } > - } > - if (i >= RTE_ETH_FLOW_MAX) { > - if (flex_conf->nb_flexmasks < RTE_DIM(flex_conf->flex_mask)) { > - idx = flex_conf->nb_flexmasks; > - flex_conf->nb_flexmasks++; > - } else { > - fprintf(stderr, > - "The flex mask table is full. Can not set flex mask for flow_type(%u).", > - cfg->flow_type); > - return; > - } > - } > - rte_memcpy(&flex_conf->flex_mask[idx], > - cfg, > - sizeof(struct rte_eth_fdir_flex_mask)); > -} > - > -void > -fdir_set_flex_payload(portid_t port_id, struct rte_eth_flex_payload_cfg *cfg) > -{ > - struct rte_port *port; > - struct rte_eth_fdir_flex_conf *flex_conf; > - int i, idx = 0; > - > - port = &ports[port_id]; > - flex_conf = &port->dev_conf.fdir_conf.flex_conf; > - for (i = 0; i < RTE_ETH_PAYLOAD_MAX; i++) { > - if (cfg->type == flex_conf->flex_set[i].type) { > - idx = i; > - break; > - } > - } > - if (i >= RTE_ETH_PAYLOAD_MAX) { > - if (flex_conf->nb_payloads < RTE_DIM(flex_conf->flex_set)) { > - idx = flex_conf->nb_payloads; > - flex_conf->nb_payloads++; > - } else { > - fprintf(stderr, > - "The flex payload table is full. Can not set flex payload for type(%u).", > - cfg->type); > - return; > - } > - } > - rte_memcpy(&flex_conf->flex_set[idx], > - cfg, > - sizeof(struct rte_eth_flex_payload_cfg)); > - > -} > - > void > set_vf_traffic(portid_t port_id, uint8_t is_rx, uint16_t vf, uint8_t on) > { > diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c > index e3c9757f3f..cfd7cd1e50 100644 > --- a/app/test-pmd/parameters.c > +++ b/app/test-pmd/parameters.c > @@ -101,17 +101,6 @@ usage(char* progname) > printf(" --eth-peer=X,M:M:M:M:M:M: set the MAC address of the X peer " > "port (0 <= X < %d).\n", RTE_MAX_ETHPORTS); > #endif > - printf(" --pkt-filter-mode=N: set Flow Director mode " > - "(N: none (default mode) or signature or perfect).\n"); > - printf(" --pkt-filter-report-hash=N: set Flow Director report mode " > - "(N: none or match (default) or always).\n"); > - printf(" --pkt-filter-size=N: set Flow Director mode " > - "(N: 64K (default mode) or 128K or 256K).\n"); > - printf(" --pkt-filter-drop-queue=N: set drop-queue. " > - "In perfect mode, when you add a rule with queue = -1 " > - "the packet will be enqueued into the rx drop-queue. " > - "If the drop-queue doesn't exist, the packet is dropped. " > - "By default drop-queue=127.\n"); > #ifdef RTE_LIB_LATENCYSTATS > printf(" --latencystats=N: enable latency and jitter statistics " > "monitoring on forwarding lcore id N.\n"); > @@ -625,10 +614,6 @@ launch_args_parse(int argc, char** argv) > { "total-num-mbufs", 1, 0, 0 }, > { "max-pkt-len", 1, 0, 0 }, > { "max-lro-pkt-size", 1, 0, 0 }, > - { "pkt-filter-mode", 1, 0, 0 }, > - { "pkt-filter-report-hash", 1, 0, 0 }, > - { "pkt-filter-size", 1, 0, 0 }, > - { "pkt-filter-drop-queue", 1, 0, 0 }, > #ifdef RTE_LIB_LATENCYSTATS > { "latencystats", 1, 0, 0 }, > #endif > @@ -963,67 +948,6 @@ launch_args_parse(int argc, char** argv) > n = atoi(optarg); > rx_mode.max_lro_pkt_size = (uint32_t) n; > } > - if (!strcmp(lgopts[opt_idx].name, "pkt-filter-mode")) { > - if (!strcmp(optarg, "signature")) > - fdir_conf.mode = > - RTE_FDIR_MODE_SIGNATURE; > - else if (!strcmp(optarg, "perfect")) > - fdir_conf.mode = RTE_FDIR_MODE_PERFECT; > - else if (!strcmp(optarg, "perfect-mac-vlan")) > - fdir_conf.mode = RTE_FDIR_MODE_PERFECT_MAC_VLAN; > - else if (!strcmp(optarg, "perfect-tunnel")) > - fdir_conf.mode = RTE_FDIR_MODE_PERFECT_TUNNEL; > - else if (!strcmp(optarg, "none")) > - fdir_conf.mode = RTE_FDIR_MODE_NONE; > - else > - rte_exit(EXIT_FAILURE, > - "pkt-mode-invalid %s invalid - must be: " > - "none, signature, perfect, perfect-mac-vlan" > - " or perfect-tunnel\n", > - optarg); > - } > - if (!strcmp(lgopts[opt_idx].name, > - "pkt-filter-report-hash")) { > - if (!strcmp(optarg, "none")) > - fdir_conf.status = > - RTE_FDIR_NO_REPORT_STATUS; > - else if (!strcmp(optarg, "match")) > - fdir_conf.status = > - RTE_FDIR_REPORT_STATUS; > - else if (!strcmp(optarg, "always")) > - fdir_conf.status = > - RTE_FDIR_REPORT_STATUS_ALWAYS; > - else > - rte_exit(EXIT_FAILURE, > - "pkt-filter-report-hash %s invalid " > - "- must be: none or match or always\n", > - optarg); > - } > - if (!strcmp(lgopts[opt_idx].name, "pkt-filter-size")) { > - if (!strcmp(optarg, "64K")) > - fdir_conf.pballoc = > - RTE_ETH_FDIR_PBALLOC_64K; > - else if (!strcmp(optarg, "128K")) > - fdir_conf.pballoc = > - RTE_ETH_FDIR_PBALLOC_128K; > - else if (!strcmp(optarg, "256K")) > - fdir_conf.pballoc = > - RTE_ETH_FDIR_PBALLOC_256K; > - else > - rte_exit(EXIT_FAILURE, "pkt-filter-size %s invalid -" > - " must be: 64K or 128K or 256K\n", > - optarg); > - } > - if (!strcmp(lgopts[opt_idx].name, > - "pkt-filter-drop-queue")) { > - n = atoi(optarg); > - if (n >= 0) > - fdir_conf.drop_queue = (uint8_t) n; > - else > - rte_exit(EXIT_FAILURE, > - "drop queue %d invalid - must" > - "be >= 0 \n", n); > - } > #ifdef RTE_LIB_LATENCYSTATS > if (!strcmp(lgopts[opt_idx].name, > "latencystats")) { > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index addcbcac85..511a870dc9 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -478,29 +478,6 @@ struct rte_eth_txmode tx_mode = { > .offloads = RTE_ETH_TX_OFFLOAD_MBUF_FAST_FREE, > }; > > -struct rte_eth_fdir_conf fdir_conf = { > - .mode = RTE_FDIR_MODE_NONE, > - .pballoc = RTE_ETH_FDIR_PBALLOC_64K, > - .status = RTE_FDIR_REPORT_STATUS, > - .mask = { > - .vlan_tci_mask = 0xFFEF, > - .ipv4_mask = { > - .src_ip = 0xFFFFFFFF, > - .dst_ip = 0xFFFFFFFF, > - }, > - .ipv6_mask = { > - .src_ip = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}, > - .dst_ip = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}, > - }, > - .src_port_mask = 0xFFFF, > - .dst_port_mask = 0xFFFF, > - .mac_addr_byte_mask = 0xFF, > - .tunnel_type_mask = 1, > - .tunnel_id_mask = 0xFFFFFFFF, > - }, > - .drop_queue = 127, > -}; > - > volatile int test_done = 1; /* stop packet forwarding when set to 1. */ > > /* > @@ -3933,7 +3910,6 @@ init_port_config(void) > > RTE_ETH_FOREACH_DEV(pid) { > port = &ports[pid]; > - port->dev_conf.fdir_conf = fdir_conf; > > ret = eth_dev_info_get_print_err(pid, &port->dev_info); > if (ret != 0) > diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h > index fb2f5195d3..27f4b9199c 100644 > --- a/app/test-pmd/testpmd.h > +++ b/app/test-pmd/testpmd.h > @@ -554,8 +554,6 @@ extern lcoreid_t bitrate_lcore_id; > extern uint8_t bitrate_enabled; > #endif > > -extern struct rte_eth_fdir_conf fdir_conf; > - > extern uint32_t max_rx_pkt_len; > > /* > @@ -1091,10 +1089,6 @@ void pmd_test_exit(void); > #if defined(RTE_NET_I40E) || defined(RTE_NET_IXGBE) > void fdir_get_infos(portid_t port_id); > #endif > -void fdir_set_flex_mask(portid_t port_id, > - struct rte_eth_fdir_flex_mask *cfg); > -void fdir_set_flex_payload(portid_t port_id, > - struct rte_eth_flex_payload_cfg *cfg); > void port_rss_reta_info(portid_t port_id, > struct rte_eth_rss_reta_entry64 *reta_conf, > uint16_t nb_entries); > diff --git a/doc/guides/nics/fm10k.rst b/doc/guides/nics/fm10k.rst > index d6efac0917..628ffb5408 100644 > --- a/doc/guides/nics/fm10k.rst > +++ b/doc/guides/nics/fm10k.rst > @@ -84,8 +84,6 @@ will be checked: > > * ``RTE_ETH_RX_OFFLOAD_HEADER_SPLIT`` > > -* ``fdir_conf->mode`` > - > > RX Burst Size > ^^^^^^^^^^^^^ > diff --git a/doc/guides/nics/ixgbe.rst b/doc/guides/nics/ixgbe.rst > index ad1a3da610..b1875095de 100644 > --- a/doc/guides/nics/ixgbe.rst > +++ b/doc/guides/nics/ixgbe.rst > @@ -99,7 +99,6 @@ To guarantee the constraint, capabilities in dev_conf.rxmode.offloads will be ch > > * dev_conf > > -fdir_conf->mode will also be checked. > > Disable SDP3 TX_DISABLE for Fiber Links > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > diff --git a/doc/guides/rel_notes/deprecation.rst b/doc/guides/rel_notes/deprecation.rst > index e7583cae4c..eb99f51213 100644 > --- a/doc/guides/rel_notes/deprecation.rst > +++ b/doc/guides/rel_notes/deprecation.rst > @@ -98,10 +98,6 @@ Deprecation Notices > The per-queue Rx packet split offload ``RTE_ETH_RX_OFFLOAD_BUFFER_SPLIT`` > can still be used, and it is configured by ``rte_eth_rxseg_split``. > > -* ethdev: The flow director API, including ``rte_eth_conf.fdir_conf`` field, > - and the related structures (``rte_fdir_*`` and ``rte_eth_fdir_*``), > - will be removed in DPDK 20.11. > - > * ethdev: Announce moving from dedicated modify function for each field, > to using the general ``rte_flow_modify_field`` action. > > diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst > index 8c021cf050..caf58c3f82 100644 > --- a/doc/guides/rel_notes/release_22_11.rst > +++ b/doc/guides/rel_notes/release_22_11.rst > @@ -84,6 +84,10 @@ API Changes > Also, make sure to start the actual text at the margin. > ======================================================= > > +* ethdev: Removed deprecated Flow Director configuration from device > + configuration (``dev_conf.fdir_conf``). Moved corresponding structures > + to internal API since some drivers still use it internally. > + > > ABI Changes > ----------- > diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst > index 30edef07ea..8b41b960c8 100644 > --- a/doc/guides/testpmd_app_ug/run_app.rst > +++ b/doc/guides/testpmd_app_ug/run_app.rst > @@ -159,33 +159,6 @@ The command line options are: > The default port is the port 9 which is defined for the discard protocol > (RFC 863). > > -* ``--pkt-filter-mode=mode`` > - > - Set Flow Director mode where mode is either ``none`` (the default), ``signature`` or ``perfect``. > - See :ref:`testpmd_flow_director` for more details. > - > -* ``--pkt-filter-report-hash=mode`` > - > - Set Flow Director hash match reporting mode where mode is ``none``, ``match`` (the default) or ``always``. > - > -* ``--pkt-filter-size=N`` > - > - Set Flow Director allocated memory size, where N is 64K, 128K or 256K. > - Sizes are in kilobytes. The default is 64. > - > -* ``--pkt-filter-flexbytes-offset=N`` > - > - Set the flexbytes offset. > - The offset is defined in words (not bytes) counted from the first byte of the destination Ethernet MAC address, > - where N is 0 <= N <= 32. > - The default value is 0x6. > - > -* ``--pkt-filter-drop-queue=N`` > - > - Set the drop-queue. > - In perfect filter mode, when a rule is added with queue = -1, the packet will be enqueued into the RX drop-queue. > - If the drop-queue does not exist, the packet is dropped. The default value is N=127. > - > * ``--disable-crc-strip`` > > Disable hardware CRC stripping. > diff --git a/doc/guides/testpmd_app_ug/testpmd_funcs.rst b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > index 330e34427d..bb6e9fd46f 100644 > --- a/doc/guides/testpmd_app_ug/testpmd_funcs.rst > +++ b/doc/guides/testpmd_app_ug/testpmd_funcs.rst > @@ -3004,44 +3004,6 @@ This section details the available filter functions that are available. > Note these functions interface the deprecated legacy filtering framework, > superseded by *rte_flow*. See `Flow rules management`_. > > -.. _testpmd_flow_director: > - > -flow_director_mask > -~~~~~~~~~~~~~~~~~~ > - > -Set flow director's input masks:: > - > - flow_director_mask (port_id) mode IP vlan (vlan_value) \ > - src_mask (ipv4_src) (ipv6_src) (src_port) \ > - dst_mask (ipv4_dst) (ipv6_dst) (dst_port) > - > - flow_director_mask (port_id) mode MAC-VLAN vlan (vlan_value) > - > - flow_director_mask (port_id) mode Tunnel vlan (vlan_value) \ > - mac (mac_value) tunnel-type (tunnel_type_value) \ > - tunnel-id (tunnel_id_value) > - > -Example, to set flow director mask on port 0:: > - > - testpmd> flow_director_mask 0 mode IP vlan 0xefff \ > - src_mask 255.255.255.255 \ > - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF \ > - dst_mask 255.255.255.255 \ > - FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 0xFFFF > - > -flow_director_flex_payload > -~~~~~~~~~~~~~~~~~~~~~~~~~~ > - > -Configure flexible payload selection:: > - > - flow_director_flex_payload (port_id) (raw|l2|l3|l4) (config) > - > -For example, to select the first 16 bytes from the offset 4 (bytes) of packet's payload as flexible payload:: > - > - testpmd> flow_director_flex_payload 0 l4 \ > - (4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19) > - > - > .. _testpmd_rte_flow: > > Flow rules management > diff --git a/drivers/net/cnxk/cnxk_ethdev.c b/drivers/net/cnxk/cnxk_ethdev.c > index 24182909f1..98f2b1ad91 100644 > --- a/drivers/net/cnxk/cnxk_ethdev.c > +++ b/drivers/net/cnxk/cnxk_ethdev.c > @@ -1092,11 +1092,6 @@ cnxk_nix_configure(struct rte_eth_dev *eth_dev) > goto fail_configure; > } > > - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { > - plt_err("Flow director is not supported"); > - goto fail_configure; > - } > - > if (rxmode->mq_mode != RTE_ETH_MQ_RX_NONE && > rxmode->mq_mode != RTE_ETH_MQ_RX_RSS) { > plt_err("Unsupported mq rx mode %d", rxmode->mq_mode); > diff --git a/drivers/net/fm10k/fm10k_rxtx_vec.c b/drivers/net/fm10k/fm10k_rxtx_vec.c > index 10ce5a7582..c7088f36cc 100644 > --- a/drivers/net/fm10k/fm10k_rxtx_vec.c > +++ b/drivers/net/fm10k/fm10k_rxtx_vec.c > @@ -209,7 +209,6 @@ fm10k_rx_vec_condition_check(struct rte_eth_dev *dev) > { > #ifndef RTE_LIBRTE_IEEE1588 > struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; > - struct rte_eth_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; > > #ifndef RTE_FM10K_RX_OLFLAGS_ENABLE > /* without rx ol_flags, no VP flag report */ > @@ -217,10 +216,6 @@ fm10k_rx_vec_condition_check(struct rte_eth_dev *dev) > return -1; > #endif > > - /* no fdir support */ > - if (fconf->mode != RTE_FDIR_MODE_NONE) > - return -1; > - > /* no header split support */ > if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_HEADER_SPLIT) > return -1; > diff --git a/drivers/net/hns3/hns3_rxtx_vec.c b/drivers/net/hns3/hns3_rxtx_vec.c > index 73f0ab6bc8..0dd6fccb13 100644 > --- a/drivers/net/hns3/hns3_rxtx_vec.c > +++ b/drivers/net/hns3/hns3_rxtx_vec.c > @@ -230,7 +230,6 @@ hns3_rxq_vec_check(struct hns3_rx_queue *rxq, void *arg) > int > hns3_rx_check_vec_support(struct rte_eth_dev *dev) > { > - struct rte_eth_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; > struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; > uint64_t offloads_mask = RTE_ETH_RX_OFFLOAD_TCP_LRO | > RTE_ETH_RX_OFFLOAD_VLAN; > @@ -240,9 +239,6 @@ hns3_rx_check_vec_support(struct rte_eth_dev *dev) > if (dev->data->scattered_rx) > return -ENOTSUP; > > - if (fconf->mode != RTE_FDIR_MODE_NONE) > - return -ENOTSUP; > - > if (rxmode->offloads & offloads_mask) > return -ENOTSUP; > > diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c > index 67d79de08d..3712a78c00 100644 > --- a/drivers/net/i40e/i40e_ethdev.c > +++ b/drivers/net/i40e/i40e_ethdev.c > @@ -1886,24 +1886,6 @@ i40e_dev_configure(struct rte_eth_dev *dev) > if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS_FLAG) > dev->data->dev_conf.rxmode.offloads |= RTE_ETH_RX_OFFLOAD_RSS_HASH; > > - /* Only legacy filter API needs the following fdir config. So when the > - * legacy filter API is deprecated, the following codes should also be > - * removed. > - */ > - if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) { > - ret = i40e_fdir_setup(pf); > - if (ret != I40E_SUCCESS) { > - PMD_DRV_LOG(ERR, "Failed to setup flow director."); > - return -ENOTSUP; > - } > - ret = i40e_fdir_configure(dev); > - if (ret < 0) { > - PMD_DRV_LOG(ERR, "failed to configure fdir."); > - goto err; > - } > - } else > - i40e_fdir_teardown(pf); > - > ret = i40e_dev_init_vlan(dev); > if (ret < 0) > goto err; > @@ -1945,12 +1927,6 @@ i40e_dev_configure(struct rte_eth_dev *dev) > rte_free(pf->vmdq); > pf->vmdq = NULL; > err: > - /* Need to release fdir resource if exists. > - * Only legacy filter API needs the following fdir config. So when the > - * legacy filter API is deprecated, the following code should also be > - * removed. > - */ > - i40e_fdir_teardown(pf); > return ret; > } > > @@ -2600,13 +2576,6 @@ i40e_dev_close(struct rte_eth_dev *dev) > i40e_pf_disable_irq0(hw); > rte_intr_disable(intr_handle); > > - /* > - * Only legacy filter API needs the following fdir config. So when the > - * legacy filter API is deprecated, the following code should also be > - * removed. > - */ > - i40e_fdir_teardown(pf); > - > /* shutdown and destroy the HMC */ > i40e_shutdown_lan_hmc(hw); > > diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c > index 8caedea14e..afcaa593eb 100644 > --- a/drivers/net/i40e/i40e_fdir.c > +++ b/drivers/net/i40e/i40e_fdir.c > @@ -373,269 +373,6 @@ i40e_init_flx_pld(struct i40e_pf *pf) > } > } > > -#define I40E_VALIDATE_FLEX_PIT(flex_pit1, flex_pit2) do { \ > - if ((flex_pit2).src_offset < \ > - (flex_pit1).src_offset + (flex_pit1).size) { \ > - PMD_DRV_LOG(ERR, "src_offset should be not" \ > - " less than than previous offset" \ > - " + previous FSIZE."); \ > - return -EINVAL; \ > - } \ > -} while (0) > - > -/* > - * i40e_srcoff_to_flx_pit - transform the src_offset into flex_pit structure, > - * and the flex_pit will be sorted by it's src_offset value > - */ > -static inline uint16_t > -i40e_srcoff_to_flx_pit(const uint16_t *src_offset, > - struct i40e_fdir_flex_pit *flex_pit) > -{ > - uint16_t src_tmp, size, num = 0; > - uint16_t i, k, j = 0; > - > - while (j < I40E_FDIR_MAX_FLEX_LEN) { > - size = 1; > - for (; j < I40E_FDIR_MAX_FLEX_LEN - 1; j++) { > - if (src_offset[j + 1] == src_offset[j] + 1) > - size++; > - else > - break; > - } > - src_tmp = src_offset[j] + 1 - size; > - /* the flex_pit need to be sort by src_offset */ > - for (i = 0; i < num; i++) { > - if (src_tmp < flex_pit[i].src_offset) > - break; > - } > - /* if insert required, move backward */ > - for (k = num; k > i; k--) > - flex_pit[k] = flex_pit[k - 1]; > - /* insert */ > - flex_pit[i].dst_offset = j + 1 - size; > - flex_pit[i].src_offset = src_tmp; > - flex_pit[i].size = size; > - j++; > - num++; > - } > - return num; > -} > - > -/* i40e_check_fdir_flex_payload -check flex payload configuration arguments */ > -static inline int > -i40e_check_fdir_flex_payload(const struct rte_eth_flex_payload_cfg *flex_cfg) > -{ > - struct i40e_fdir_flex_pit flex_pit[I40E_FDIR_MAX_FLEX_LEN]; > - uint16_t num, i; > - > - for (i = 0; i < I40E_FDIR_MAX_FLEX_LEN; i++) { > - if (flex_cfg->src_offset[i] >= I40E_MAX_FLX_SOURCE_OFF) { > - PMD_DRV_LOG(ERR, "exceeds maximal payload limit."); > - return -EINVAL; > - } > - } > - > - memset(flex_pit, 0, sizeof(flex_pit)); > - num = i40e_srcoff_to_flx_pit(flex_cfg->src_offset, flex_pit); > - if (num > I40E_MAX_FLXPLD_FIED) { > - PMD_DRV_LOG(ERR, "exceeds maximal number of flex fields."); > - return -EINVAL; > - } > - for (i = 0; i < num; i++) { > - if (flex_pit[i].size & 0x01 || flex_pit[i].dst_offset & 0x01 || > - flex_pit[i].src_offset & 0x01) { > - PMD_DRV_LOG(ERR, "flexpayload should be measured" > - " in word"); > - return -EINVAL; > - } > - if (i != num - 1) > - I40E_VALIDATE_FLEX_PIT(flex_pit[i], flex_pit[i + 1]); > - } > - return 0; > -} > - > -/* > - * i40e_check_fdir_flex_conf -check if the flex payload and mask configuration > - * arguments are valid > - */ > -static int > -i40e_check_fdir_flex_conf(const struct i40e_adapter *adapter, > - const struct rte_eth_fdir_flex_conf *conf) > -{ > - const struct rte_eth_flex_payload_cfg *flex_cfg; > - const struct rte_eth_fdir_flex_mask *flex_mask; > - uint16_t mask_tmp; > - uint8_t nb_bitmask; > - uint16_t i, j; > - int ret = 0; > - enum i40e_filter_pctype pctype; > - > - if (conf == NULL) { > - PMD_DRV_LOG(INFO, "NULL pointer."); > - return -EINVAL; > - } > - /* check flexible payload setting configuration */ > - if (conf->nb_payloads > RTE_ETH_L4_PAYLOAD) { > - PMD_DRV_LOG(ERR, "invalid number of payload setting."); > - return -EINVAL; > - } > - for (i = 0; i < conf->nb_payloads; i++) { > - flex_cfg = &conf->flex_set[i]; > - if (flex_cfg->type > RTE_ETH_L4_PAYLOAD) { > - PMD_DRV_LOG(ERR, "invalid payload type."); > - return -EINVAL; > - } > - ret = i40e_check_fdir_flex_payload(flex_cfg); > - if (ret < 0) { > - PMD_DRV_LOG(ERR, "invalid flex payload arguments."); > - return -EINVAL; > - } > - } > - > - /* check flex mask setting configuration */ > - if (conf->nb_flexmasks >= RTE_ETH_FLOW_MAX) { > - PMD_DRV_LOG(ERR, "invalid number of flex masks."); > - return -EINVAL; > - } > - for (i = 0; i < conf->nb_flexmasks; i++) { > - flex_mask = &conf->flex_mask[i]; > - pctype = i40e_flowtype_to_pctype(adapter, flex_mask->flow_type); > - if (pctype == I40E_FILTER_PCTYPE_INVALID) { > - PMD_DRV_LOG(WARNING, "invalid flow type."); > - return -EINVAL; > - } > - nb_bitmask = 0; > - for (j = 0; j < I40E_FDIR_MAX_FLEX_LEN; j += sizeof(uint16_t)) { > - mask_tmp = I40E_WORD(flex_mask->mask[j], > - flex_mask->mask[j + 1]); > - if (mask_tmp != 0x0 && mask_tmp != UINT16_MAX) { > - nb_bitmask++; > - if (nb_bitmask > I40E_FDIR_BITMASK_NUM_WORD) { > - PMD_DRV_LOG(ERR, " exceed maximal" > - " number of bitmasks."); > - return -EINVAL; > - } > - } > - } > - } > - return 0; > -} > - > -/* > - * i40e_set_flx_pld_cfg -configure the rule how bytes stream is extracted as flexible payload > - * @pf: board private structure > - * @cfg: the rule how bytes stream is extracted as flexible payload > - */ > -static void > -i40e_set_flx_pld_cfg(struct i40e_pf *pf, > - const struct rte_eth_flex_payload_cfg *cfg) > -{ > - struct i40e_hw *hw = I40E_PF_TO_HW(pf); > - struct i40e_fdir_flex_pit flex_pit[I40E_MAX_FLXPLD_FIED]; > - uint32_t flx_pit, flx_ort; > - uint16_t num, min_next_off; /* in words */ > - uint8_t field_idx = 0; > - uint8_t layer_idx = 0; > - uint16_t i; > - > - if (cfg->type == RTE_ETH_L2_PAYLOAD) > - layer_idx = I40E_FLXPLD_L2_IDX; > - else if (cfg->type == RTE_ETH_L3_PAYLOAD) > - layer_idx = I40E_FLXPLD_L3_IDX; > - else if (cfg->type == RTE_ETH_L4_PAYLOAD) > - layer_idx = I40E_FLXPLD_L4_IDX; > - > - memset(flex_pit, 0, sizeof(flex_pit)); > - num = RTE_MIN(i40e_srcoff_to_flx_pit(cfg->src_offset, flex_pit), > - RTE_DIM(flex_pit)); > - > - if (num) { > - flx_ort = (1 << I40E_GLQF_ORT_FLX_PAYLOAD_SHIFT) | > - (num << I40E_GLQF_ORT_FIELD_CNT_SHIFT) | > - (layer_idx * I40E_MAX_FLXPLD_FIED); > - I40E_WRITE_GLB_REG(hw, I40E_GLQF_ORT(33 + layer_idx), flx_ort); > - } > - > - for (i = 0; i < num; i++) { > - field_idx = layer_idx * I40E_MAX_FLXPLD_FIED + i; > - /* record the info in fdir structure */ > - pf->fdir.flex_set[field_idx].src_offset = > - flex_pit[i].src_offset / sizeof(uint16_t); > - pf->fdir.flex_set[field_idx].size = > - flex_pit[i].size / sizeof(uint16_t); > - pf->fdir.flex_set[field_idx].dst_offset = > - flex_pit[i].dst_offset / sizeof(uint16_t); > - flx_pit = MK_FLX_PIT(pf->fdir.flex_set[field_idx].src_offset, > - pf->fdir.flex_set[field_idx].size, > - pf->fdir.flex_set[field_idx].dst_offset); > - > - I40E_WRITE_REG(hw, I40E_PRTQF_FLX_PIT(field_idx), flx_pit); > - } > - min_next_off = pf->fdir.flex_set[field_idx].src_offset + > - pf->fdir.flex_set[field_idx].size; > - > - for (; i < I40E_MAX_FLXPLD_FIED; i++) { > - /* set the non-used register obeying register's constrain */ > - flx_pit = MK_FLX_PIT(min_next_off, NONUSE_FLX_PIT_FSIZE, > - NONUSE_FLX_PIT_DEST_OFF); > - I40E_WRITE_REG(hw, > - I40E_PRTQF_FLX_PIT(layer_idx * I40E_MAX_FLXPLD_FIED + i), > - flx_pit); > - min_next_off++; > - } > -} > - > -/* > - * i40e_set_flex_mask_on_pctype - configure the mask on flexible payload > - * @pf: board private structure > - * @pctype: packet classify type > - * @flex_masks: mask for flexible payload > - */ > -static void > -i40e_set_flex_mask_on_pctype(struct i40e_pf *pf, > - enum i40e_filter_pctype pctype, > - const struct rte_eth_fdir_flex_mask *mask_cfg) > -{ > - struct i40e_hw *hw = I40E_PF_TO_HW(pf); > - struct i40e_fdir_flex_mask *flex_mask; > - uint32_t flxinset, fd_mask; > - uint16_t mask_tmp; > - uint8_t i, nb_bitmask = 0; > - > - flex_mask = &pf->fdir.flex_mask[pctype]; > - memset(flex_mask, 0, sizeof(struct i40e_fdir_flex_mask)); > - for (i = 0; i < I40E_FDIR_MAX_FLEX_LEN; i += sizeof(uint16_t)) { > - mask_tmp = I40E_WORD(mask_cfg->mask[i], mask_cfg->mask[i + 1]); > - if (mask_tmp != 0x0) { > - flex_mask->word_mask |= > - I40E_FLEX_WORD_MASK(i / sizeof(uint16_t)); > - if (mask_tmp != UINT16_MAX) { > - /* set bit mask */ > - flex_mask->bitmask[nb_bitmask].mask = ~mask_tmp; > - flex_mask->bitmask[nb_bitmask].offset = > - i / sizeof(uint16_t); > - nb_bitmask++; > - } > - } > - } > - /* write mask to hw */ > - flxinset = (flex_mask->word_mask << > - I40E_PRTQF_FD_FLXINSET_INSET_SHIFT) & > - I40E_PRTQF_FD_FLXINSET_INSET_MASK; > - i40e_write_rx_ctl(hw, I40E_PRTQF_FD_FLXINSET(pctype), flxinset); > - > - for (i = 0; i < nb_bitmask; i++) { > - fd_mask = (flex_mask->bitmask[i].mask << > - I40E_PRTQF_FD_MSK_MASK_SHIFT) & > - I40E_PRTQF_FD_MSK_MASK_MASK; > - fd_mask |= ((flex_mask->bitmask[i].offset + > - I40E_FLX_OFFSET_IN_FIELD_VECTOR) << > - I40E_PRTQF_FD_MSK_OFFSET_SHIFT) & > - I40E_PRTQF_FD_MSK_OFFSET_MASK; > - i40e_write_rx_ctl(hw, I40E_PRTQF_FD_MSK(pctype, i), fd_mask); > - } > -} > - > /* > * Enable/disable flow director RX processing in vector routines. > */ > @@ -661,10 +398,7 @@ i40e_fdir_configure(struct rte_eth_dev *dev) > { > struct i40e_pf *pf = I40E_DEV_PRIVATE_TO_PF(dev->data->dev_private); > struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); > - struct rte_eth_fdir_flex_conf *conf; > - enum i40e_filter_pctype pctype; > uint32_t val; > - uint8_t i; > int ret = 0; > > /* > @@ -687,39 +421,6 @@ i40e_fdir_configure(struct rte_eth_dev *dev) > > i40e_init_flx_pld(pf); /* set flex config to default value */ > > - conf = &dev->data->dev_conf.fdir_conf.flex_conf; > - ret = i40e_check_fdir_flex_conf(pf->adapter, conf); > - if (ret < 0) { > - PMD_DRV_LOG(ERR, " invalid configuration arguments."); > - return -EINVAL; > - } > - > - if (!pf->support_multi_driver) { > - /* configure flex payload */ > - for (i = 0; i < conf->nb_payloads; i++) > - i40e_set_flx_pld_cfg(pf, &conf->flex_set[i]); > - /* configure flex mask*/ > - for (i = 0; i < conf->nb_flexmasks; i++) { > - if (hw->mac.type == I40E_MAC_X722) { > - /* get pctype value in fd pctype register */ > - pctype = (enum i40e_filter_pctype) > - i40e_read_rx_ctl(hw, > - I40E_GLQF_FD_PCTYPES( > - (int)i40e_flowtype_to_pctype( > - pf->adapter, > - conf->flex_mask[i].flow_type))); > - } else { > - pctype = i40e_flowtype_to_pctype(pf->adapter, > - conf->flex_mask[i].flow_type); > - } > - > - i40e_set_flex_mask_on_pctype(pf, pctype, > - &conf->flex_mask[i]); > - } > - } else { > - PMD_DRV_LOG(ERR, "Not support flexible payload."); > - } > - > /* Enable FDIR processing in RX routines */ > i40e_fdir_rx_proc_enable(dev, 1); > > @@ -2187,10 +1888,7 @@ i40e_fdir_info_get(struct rte_eth_dev *dev, struct rte_eth_fdir_info *fdir) > uint16_t num_flex_mask = 0; > uint16_t i; > > - if (dev->data->dev_conf.fdir_conf.mode == RTE_FDIR_MODE_PERFECT) > - fdir->mode = RTE_FDIR_MODE_PERFECT; > - else > - fdir->mode = RTE_FDIR_MODE_NONE; > + fdir->mode = RTE_FDIR_MODE_NONE; > > fdir->guarant_spc = > (uint32_t)hw->func_caps.fd_filters_guaranteed; > diff --git a/drivers/net/i40e/i40e_rxtx_vec_common.h b/drivers/net/i40e/i40e_rxtx_vec_common.h > index 959832ed6a..39406b7517 100644 > --- a/drivers/net/i40e/i40e_rxtx_vec_common.h > +++ b/drivers/net/i40e/i40e_rxtx_vec_common.h > @@ -211,15 +211,10 @@ i40e_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev) > struct i40e_adapter *ad = > I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private); > struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; > - struct rte_eth_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf; > struct i40e_rx_queue *rxq; > uint16_t desc, i; > bool first_queue; > > - /* no fdir support */ > - if (fconf->mode != RTE_FDIR_MODE_NONE) > - return -1; > - > /* no header split support */ > if (rxmode->offloads & RTE_ETH_RX_OFFLOAD_HEADER_SPLIT) > return -1; > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.h b/drivers/net/ixgbe/ixgbe_ethdev.h > index eabefd6343..0773a7ec8e 100644 > --- a/drivers/net/ixgbe/ixgbe_ethdev.h > +++ b/drivers/net/ixgbe/ixgbe_ethdev.h > @@ -474,6 +474,7 @@ struct ixgbe_adapter { > struct ixgbe_hw_stats stats; > struct ixgbe_macsec_stats macsec_stats; > struct ixgbe_macsec_setting macsec_setting; > + struct rte_eth_fdir_conf fdir_conf; > struct ixgbe_hw_fdir_info fdir; > struct ixgbe_interrupt intr; > struct ixgbe_stat_mapping_registers stat_mappings; > @@ -523,7 +524,7 @@ int ixgbe_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params); > int ixgbe_vf_representor_uninit(struct rte_eth_dev *ethdev); > > #define IXGBE_DEV_FDIR_CONF(dev) \ > - (&(dev)->data->dev_conf.fdir_conf) > + (&((struct ixgbe_adapter *)(dev)->data->dev_private)->fdir_conf) > > #define IXGBE_DEV_PRIVATE_TO_HW(adapter)\ > (&((struct ixgbe_adapter *)adapter)->hw) > diff --git a/drivers/net/ixgbe/ixgbe_flow.c b/drivers/net/ixgbe/ixgbe_flow.c > index c018bbc0f1..219e11ad09 100644 > --- a/drivers/net/ixgbe/ixgbe_flow.c > +++ b/drivers/net/ixgbe/ixgbe_flow.c > @@ -2758,7 +2758,7 @@ ixgbe_parse_fdir_filter(struct rte_eth_dev *dev, > { > int ret; > struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); > - enum rte_fdir_mode fdir_mode = IXGBE_DEV_FDIR_CONF(dev)->mode; > + struct rte_eth_fdir_conf *fdir_conf = IXGBE_DEV_FDIR_CONF(dev); > > if (hw->mac.type != ixgbe_mac_82599EB && > hw->mac.type != ixgbe_mac_X540 && > @@ -2787,9 +2787,16 @@ ixgbe_parse_fdir_filter(struct rte_eth_dev *dev, > rule->ixgbe_fdir.formatted.dst_port != 0)) > return -ENOTSUP; > > - if (fdir_mode == RTE_FDIR_MODE_NONE || > - fdir_mode != rule->mode) > + if (fdir_conf->mode == RTE_FDIR_MODE_NONE) { > + fdir_conf->mode = rule->mode; > + ret = ixgbe_fdir_configure(dev); > + if (ret) { > + fdir_conf->mode = RTE_FDIR_MODE_NONE; > + return ret; > + } > + } else if (fdir_conf->mode != rule->mode) { > return -ENOTSUP; > + } > > if (rule->queue >= dev->data->nb_rx_queues) > return -ENOTSUP; > diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c > index 3aca53fb98..290e562126 100644 > --- a/drivers/net/octeontx/octeontx_ethdev.c > +++ b/drivers/net/octeontx/octeontx_ethdev.c > @@ -512,11 +512,6 @@ octeontx_dev_configure(struct rte_eth_dev *dev) > return -EINVAL; > } > > - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { > - octeontx_log_err("flow director not supported"); > - return -EINVAL; > - } > - > nic->num_tx_queues = dev->data->nb_tx_queues; > > if (!nic->reconfigure) { > diff --git a/drivers/net/qede/qede_filter.c b/drivers/net/qede/qede_filter.c > index ca3165d972..c5945451e8 100644 > --- a/drivers/net/qede/qede_filter.c > +++ b/drivers/net/qede/qede_filter.c > @@ -144,31 +144,9 @@ int qede_check_fdir_support(struct rte_eth_dev *eth_dev) > { > struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev); > struct ecore_dev *edev = QEDE_INIT_EDEV(qdev); > - struct rte_eth_fdir_conf *fdir = ð_dev->data->dev_conf.fdir_conf; > > - /* check FDIR modes */ > - switch (fdir->mode) { > - case RTE_FDIR_MODE_NONE: > - qdev->arfs_info.arfs.mode = ECORE_FILTER_CONFIG_MODE_DISABLE; > - DP_INFO(edev, "flowdir is disabled\n"); > - break; > - case RTE_FDIR_MODE_PERFECT: > - if (ECORE_IS_CMT(edev)) { > - DP_ERR(edev, "flowdir is not supported in 100G mode\n"); > - qdev->arfs_info.arfs.mode = > - ECORE_FILTER_CONFIG_MODE_DISABLE; > - return -ENOTSUP; > - } > - qdev->arfs_info.arfs.mode = > - ECORE_FILTER_CONFIG_MODE_5_TUPLE; > - DP_INFO(edev, "flowdir is enabled (5 Tuple mode)\n"); > - break; > - case RTE_FDIR_MODE_PERFECT_TUNNEL: > - case RTE_FDIR_MODE_SIGNATURE: > - case RTE_FDIR_MODE_PERFECT_MAC_VLAN: > - DP_ERR(edev, "Unsupported flowdir mode %d\n", fdir->mode); > - return -ENOTSUP; > - } > + qdev->arfs_info.arfs.mode = ECORE_FILTER_CONFIG_MODE_DISABLE; > + DP_INFO(edev, "flowdir is disabled\n"); > > return 0; > } > @@ -258,9 +236,6 @@ qede_config_arfs_filter(struct rte_eth_dev *eth_dev, > if (add) { > if (qdev->arfs_info.arfs.mode == > ECORE_FILTER_CONFIG_MODE_DISABLE) { > - /* Force update */ > - eth_dev->data->dev_conf.fdir_conf.mode = > - RTE_FDIR_MODE_PERFECT; > qdev->arfs_info.arfs.mode = > ECORE_FILTER_CONFIG_MODE_5_TUPLE; > DP_INFO(edev, "Force enable flowdir in perfect mode\n"); > diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c > index 51726d229b..22753e3417 100644 > --- a/drivers/net/sfc/sfc.c > +++ b/drivers/net/sfc/sfc.c > @@ -176,11 +176,6 @@ sfc_check_conf(struct sfc_adapter *sa) > rc = EINVAL; > } > > - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { > - sfc_err(sa, "Flow Director not supported"); > - rc = EINVAL; > - } > - > if ((conf->intr_conf.lsc != 0) && > (sa->intr.type != EFX_INTR_LINE) && > (sa->intr.type != EFX_INTR_MESSAGE)) { > diff --git a/drivers/net/sfc/sfc_repr.c b/drivers/net/sfc/sfc_repr.c > index d0e5385889..417d0073cb 100644 > --- a/drivers/net/sfc/sfc_repr.c > +++ b/drivers/net/sfc/sfc_repr.c > @@ -443,11 +443,6 @@ sfc_repr_check_conf(struct sfc_repr *sr, uint16_t nb_rx_queues, > ret = -EINVAL; > } > > - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { > - sfcr_err(sr, "Flow Director not supported"); > - ret = -EINVAL; > - } > - > if (conf->intr_conf.lsc != 0) { > sfcr_err(sr, "link status change interrupt not supported"); > ret = -EINVAL; > diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c > index 262c024560..dd7a6bf520 100644 > --- a/drivers/net/thunderx/nicvf_ethdev.c > +++ b/drivers/net/thunderx/nicvf_ethdev.c > @@ -2013,11 +2013,6 @@ nicvf_dev_configure(struct rte_eth_dev *dev) > return -EINVAL; > } > > - if (conf->fdir_conf.mode != RTE_FDIR_MODE_NONE) { > - PMD_INIT_LOG(INFO, "Flow director not supported"); > - return -EINVAL; > - } > - > assert_primary(nic); > NICVF_STATIC_ASSERT(MAX_RCV_QUEUES_PER_QS == MAX_SND_QUEUES_PER_QS); > cqcount = RTE_MAX(data->nb_tx_queues, data->nb_rx_queues); > diff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h > index e36a2c3d0d..e425ab443e 100644 > --- a/drivers/net/txgbe/txgbe_ethdev.h > +++ b/drivers/net/txgbe/txgbe_ethdev.h > @@ -346,6 +346,7 @@ struct txgbe_tm_conf { > struct txgbe_adapter { > struct txgbe_hw hw; > struct txgbe_hw_stats stats; > + struct rte_eth_fdir_conf fdir_conf; > struct txgbe_hw_fdir_info fdir; > struct txgbe_interrupt intr; > struct txgbe_stat_mappings stat_mappings; > @@ -373,7 +374,7 @@ struct txgbe_adapter { > #define TXGBE_DEV_ADAPTER(dev) \ > ((struct txgbe_adapter *)(dev)->data->dev_private) > > -#define TXGBE_DEV_FDIR_CONF(dev) (&(dev)->data->dev_conf.fdir_conf) > +#define TXGBE_DEV_FDIR_CONF(dev) (&TXGBE_DEV_ADAPTER(dev)->fdir_conf) > > #define TXGBE_DEV_HW(dev) \ > (&((struct txgbe_adapter *)(dev)->data->dev_private)->hw) > diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c > index 26920f43d3..0b89e3fe38 100644 > --- a/drivers/net/txgbe/txgbe_flow.c > +++ b/drivers/net/txgbe/txgbe_flow.c > @@ -2439,7 +2439,7 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev, > { > int ret; > struct txgbe_hw *hw = TXGBE_DEV_HW(dev); > - enum rte_fdir_mode fdir_mode = TXGBE_DEV_FDIR_CONF(dev)->mode; > + struct rte_eth_fdir_conf *fdir_conf = TXGBE_DEV_FDIR_CONF(dev); > > ret = txgbe_parse_fdir_filter_normal(dev, attr, pattern, > actions, rule, error); > @@ -2458,9 +2458,16 @@ txgbe_parse_fdir_filter(struct rte_eth_dev *dev, > (rule->input.src_port != 0 || rule->input.dst_port != 0)) > return -ENOTSUP; > > - if (fdir_mode == RTE_FDIR_MODE_NONE || > - fdir_mode != rule->mode) > + if (fdir_conf->mode == RTE_FDIR_MODE_NONE) { > + fdir_conf->mode = rule->mode; > + ret = txgbe_fdir_configure(dev); > + if (ret) { > + fdir_conf->mode = RTE_FDIR_MODE_NONE; > + return ret; > + } > + } else if (fdir_conf->mode != rule->mode) { > return -ENOTSUP; > + } > > if (rule->queue >= dev->data->nb_rx_queues) > return -ENOTSUP; > diff --git a/lib/ethdev/ethdev_driver.h b/lib/ethdev/ethdev_driver.h > index 5101868ea7..a0e0b2ae88 100644 > --- a/lib/ethdev/ethdev_driver.h > +++ b/lib/ethdev/ethdev_driver.h > @@ -1915,6 +1915,42 @@ struct rte_eth_tunnel_filter_conf { > uint16_t queue_id; /**< Queue assigned to if match */ > }; > > +/** > + * Memory space that can be configured to store Flow Director filters > + * in the board memory. > + */ > +enum rte_eth_fdir_pballoc_type { > + RTE_ETH_FDIR_PBALLOC_64K = 0, /**< 64k. */ > + RTE_ETH_FDIR_PBALLOC_128K, /**< 128k. */ > + RTE_ETH_FDIR_PBALLOC_256K, /**< 256k. */ > +}; > + > +/** > + * Select report mode of FDIR hash information in Rx descriptors. > + */ > +enum rte_fdir_status_mode { > + RTE_FDIR_NO_REPORT_STATUS = 0, /**< Never report FDIR hash. */ > + RTE_FDIR_REPORT_STATUS, /**< Only report FDIR hash for matching pkts. */ > + RTE_FDIR_REPORT_STATUS_ALWAYS, /**< Always report FDIR hash. */ > +}; > + > +/** > + * A structure used to configure the Flow Director (FDIR) feature > + * of an Ethernet port. > + * > + * If mode is RTE_FDIR_MODE_NONE, the pballoc value is ignored. > + */ > +struct rte_eth_fdir_conf { > + enum rte_fdir_mode mode; /**< Flow Director mode. */ > + enum rte_eth_fdir_pballoc_type pballoc; /**< Space for FDIR filters. */ > + enum rte_fdir_status_mode status; /**< How to report FDIR hash. */ > + /** Rx queue of packets matching a "drop" filter in perfect mode. */ > + uint8_t drop_queue; > + struct rte_eth_fdir_masks mask; > + /** Flex payload configuration. */ > + struct rte_eth_fdir_flex_conf flex_conf; > +}; > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h > index de9e970d4d..53b4d91be2 100644 > --- a/lib/ethdev/rte_ethdev.h > +++ b/lib/ethdev/rte_ethdev.h > @@ -1492,48 +1492,6 @@ enum rte_eth_tunnel_type { > /* Deprecated API file for rte_eth_dev_filter_* functions */ > #include "rte_eth_ctrl.h" > > -/** > - * Memory space that can be configured to store Flow Director filters > - * in the board memory. > - */ > -enum rte_eth_fdir_pballoc_type { > - RTE_ETH_FDIR_PBALLOC_64K = 0, /**< 64k. */ > - RTE_ETH_FDIR_PBALLOC_128K, /**< 128k. */ > - RTE_ETH_FDIR_PBALLOC_256K, /**< 256k. */ > -}; > -#define rte_fdir_pballoc_type rte_eth_fdir_pballoc_type > - > -#define RTE_FDIR_PBALLOC_64K RTE_DEPRECATED(RTE_FDIR_PBALLOC_64K) RTE_ETH_FDIR_PBALLOC_64K > -#define RTE_FDIR_PBALLOC_128K RTE_DEPRECATED(RTE_FDIR_PBALLOC_128K) RTE_ETH_FDIR_PBALLOC_128K > -#define RTE_FDIR_PBALLOC_256K RTE_DEPRECATED(RTE_FDIR_PBALLOC_256K) RTE_ETH_FDIR_PBALLOC_256K > - > -/** > - * Select report mode of FDIR hash information in Rx descriptors. > - */ > -enum rte_fdir_status_mode { > - RTE_FDIR_NO_REPORT_STATUS = 0, /**< Never report FDIR hash. */ > - RTE_FDIR_REPORT_STATUS, /**< Only report FDIR hash for matching pkts. */ > - RTE_FDIR_REPORT_STATUS_ALWAYS, /**< Always report FDIR hash. */ > -}; > - > -/** > - * A structure used to configure the Flow Director (FDIR) feature > - * of an Ethernet port. > - * > - * If mode is RTE_FDIR_MODE_NONE, the pballoc value is ignored. > - */ > -struct rte_eth_fdir_conf { > - enum rte_fdir_mode mode; /**< Flow Director mode. */ > - enum rte_eth_fdir_pballoc_type pballoc; /**< Space for FDIR filters. */ > - enum rte_fdir_status_mode status; /**< How to report FDIR hash. */ > - /** Rx queue of packets matching a "drop" filter in perfect mode. */ > - uint8_t drop_queue; > - struct rte_eth_fdir_masks mask; > - /** Flex payload configuration. */ > - struct rte_eth_fdir_flex_conf flex_conf; > -}; > -#define rte_fdir_conf rte_eth_fdir_conf > - > /** > * UDP tunneling configuration. > * > @@ -1602,7 +1560,6 @@ struct rte_eth_conf { > /** Currently,Priority Flow Control(PFC) are supported,if DCB with PFC > is needed,and the variable must be set RTE_ETH_DCB_PFC_SUPPORT. */ > uint32_t dcb_capability_en; > - struct rte_eth_fdir_conf fdir_conf; /**< FDIR configuration. DEPRECATED */ > struct rte_eth_intr_conf intr_conf; /**< Interrupt mode configuration. */ > }; > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/3] ethdev: remove deprecated Flow Director configuration 2022-08-03 11:13 [PATCH 0/3] ethdev: remove deprecated Flow Director configuration Andrew Rybchenko ` (2 preceding siblings ...) 2022-08-03 11:13 ` [PATCH 3/3] ethdev: remove deprecated " Andrew Rybchenko @ 2022-08-24 9:42 ` Ferruh Yigit 2022-08-31 13:27 ` Ferruh Yigit 3 siblings, 1 reply; 7+ messages in thread From: Ferruh Yigit @ 2022-08-24 9:42 UTC (permalink / raw) To: Andrew Rybchenko, Qiming Yang, Wenjun Wu, Jiawen Wu, Jian Wang, Yuying Zhang, Beilei Xing, Rasesh Mody, Devendra Singh Rawat Cc: dev, Thomas Monjalon On 8/3/2022 12:13 PM, Andrew Rybchenko wrote: > Flow Director configuration fdir_conf was deprecated long time ago and > was planned to be removed in 20.11. > > i40e, ixgbe, qede and txgbe driver maintainers are encouraged to review > correspodning patches very carefully. > > Internal copy of the Flow Director configuration in ixgbe and txgbe > drivers is not actually initialized. Should I use configuration from > testpmd as the default one? > > Andrew Rybchenko (3): > net/ixgbe: add helper to get Flow Director configuration > net/txgbe: add helper to get Flow Director configuration > ethdev: remove deprecated Flow Director configuration > Thanks Andrew, this is one of the long lasting deprecating notices. Change looks good to me, but impacted driver (ixgbe, txgbe, i40e, qede) maintainers, can you please looks at the change, if there is no comment it will proceed. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/3] ethdev: remove deprecated Flow Director configuration 2022-08-24 9:42 ` [PATCH 0/3] " Ferruh Yigit @ 2022-08-31 13:27 ` Ferruh Yigit 0 siblings, 0 replies; 7+ messages in thread From: Ferruh Yigit @ 2022-08-31 13:27 UTC (permalink / raw) To: Andrew Rybchenko, Qiming Yang, Wenjun Wu, Jiawen Wu, Jian Wang, Yuying Zhang, Beilei Xing, Rasesh Mody, Devendra Singh Rawat Cc: dev, Thomas Monjalon On 8/24/2022 10:42 AM, Ferruh Yigit wrote: > On 8/3/2022 12:13 PM, Andrew Rybchenko wrote: >> Flow Director configuration fdir_conf was deprecated long time ago and >> was planned to be removed in 20.11. >> >> i40e, ixgbe, qede and txgbe driver maintainers are encouraged to review >> correspodning patches very carefully. >> >> Internal copy of the Flow Director configuration in ixgbe and txgbe >> drivers is not actually initialized. Should I use configuration from >> testpmd as the default one? >> >> Andrew Rybchenko (3): >> net/ixgbe: add helper to get Flow Director configuration >> net/txgbe: add helper to get Flow Director configuration >> ethdev: remove deprecated Flow Director configuration >> > > Thanks Andrew, this is one of the long lasting deprecating notices. > > Change looks good to me, but impacted driver (ixgbe, txgbe, i40e, qede) > maintainers, can you please looks at the change, if there is no comment > it will proceed. > There was no objection/comment, so I am proceeding with the set: Series applied to dpdk-next-net/main, thanks. ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2022-08-31 13:27 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-08-03 11:13 [PATCH 0/3] ethdev: remove deprecated Flow Director configuration Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 1/3] net/ixgbe: add helper to get " Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 2/3] net/txgbe: " Andrew Rybchenko 2022-08-03 11:13 ` [PATCH 3/3] ethdev: remove deprecated " Andrew Rybchenko 2022-08-04 11:07 ` Dongdong Liu 2022-08-24 9:42 ` [PATCH 0/3] " Ferruh Yigit 2022-08-31 13:27 ` Ferruh Yigit
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).