Perfect mode of FDIR rules to filter IPv6 packets is supported by hardware. Remove the restriction and fix the setting.
Fixes: b973ee26747a ("net/txgbe: parse flow director filter") Cc: sta...@dpdk.org Signed-off-by: Jiawen Wu <jiawe...@trustnetic.com> --- drivers/net/txgbe/txgbe_fdir.c | 22 ++++++++-------------- drivers/net/txgbe/txgbe_flow.c | 7 +------ 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/drivers/net/txgbe/txgbe_fdir.c b/drivers/net/txgbe/txgbe_fdir.c index 0d12fb9a11..0efd43b59a 100644 --- a/drivers/net/txgbe/txgbe_fdir.c +++ b/drivers/net/txgbe/txgbe_fdir.c @@ -210,15 +210,12 @@ txgbe_fdir_set_input_mask(struct rte_eth_dev *dev) wr32(hw, TXGBE_FDIRSIP4MSK, ~info->mask.src_ipv4_mask); wr32(hw, TXGBE_FDIRDIP4MSK, ~info->mask.dst_ipv4_mask); - if (mode == RTE_FDIR_MODE_SIGNATURE) { - /* - * Store source and destination IPv6 masks (bit reversed) - */ - fdiripv6m = TXGBE_FDIRIP6MSK_DST(info->mask.dst_ipv6_mask) | - TXGBE_FDIRIP6MSK_SRC(info->mask.src_ipv6_mask); - - wr32(hw, TXGBE_FDIRIP6MSK, ~fdiripv6m); - } + /* + * Store source and destination IPv6 masks (bit reversed) + */ + fdiripv6m = TXGBE_FDIRIP6MSK_DST(info->mask.dst_ipv6_mask) | + TXGBE_FDIRIP6MSK_SRC(info->mask.src_ipv6_mask); + wr32(hw, TXGBE_FDIRIP6MSK, ~fdiripv6m); return 0; } @@ -642,6 +639,8 @@ fdir_write_perfect_filter(struct txgbe_hw *hw, fdircmd |= TXGBE_FDIRPICMD_QP(queue); fdircmd |= TXGBE_FDIRPICMD_POOL(input->vm_pool); + if (input->flow_type & TXGBE_ATR_L3TYPE_IPV6) + fdircmd |= TXGBE_FDIRPICMD_IP6; wr32(hw, TXGBE_FDIRPICMD, fdircmd); PMD_DRV_LOG(DEBUG, "Rx Queue=%x hash=%x", queue, fdirhash); @@ -810,11 +809,6 @@ txgbe_fdir_filter_program(struct rte_eth_dev *dev, is_perfect = TRUE; if (is_perfect) { - if (rule->input.flow_type & TXGBE_ATR_L3TYPE_IPV6) { - PMD_DRV_LOG(ERR, "IPv6 is not supported in" - " perfect mode!"); - return -ENOTSUP; - } fdirhash = atr_compute_perfect_hash(&rule->input, TXGBE_DEV_FDIR_CONF(dev)->pballoc); fdirhash |= TXGBE_FDIRPIHASH_IDX(rule->soft_id); diff --git a/drivers/net/txgbe/txgbe_flow.c b/drivers/net/txgbe/txgbe_flow.c index c7cbf96a46..145ee8a452 100644 --- a/drivers/net/txgbe/txgbe_flow.c +++ b/drivers/net/txgbe/txgbe_flow.c @@ -1812,12 +1812,7 @@ txgbe_parse_fdir_filter_normal(struct rte_eth_dev *dev __rte_unused, rule->input.flow_type = TXGBE_ATR_FLOW_TYPE_IPV6; rule->mask.pkt_type_mask &= ~TXGBE_ATR_TYPE_MASK_L3P; - /** - * 1. must signature match - * 2. not support last - */ - if (rule->mode != RTE_FDIR_MODE_SIGNATURE || - item->last) { + if (item->last) { memset(rule, 0, sizeof(struct txgbe_fdir_rule)); rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, -- 2.48.1