On Wed, 25 Jun 2025 10:28:13 +0800
Feifei Wang <wff_li...@vip.163.com> wrote:

> diff --git a/drivers/net/hinic3/hinic3_fdir.c 
> b/drivers/net/hinic3/hinic3_fdir.c
> new file mode 100644
> index 0000000000..32fc5472bd
> --- /dev/null
> +++ b/drivers/net/hinic3/hinic3_fdir.c
> @@ -0,0 +1,1394 @@

Suggestion: Don't call this fdir since that implies the old Intel Flow Director
stuff which was deprecated and (mostly) removed from DPDK.
Your code is for the current rte_flow API.

> +static int
> +hinic3_flow_fdir_vxlan(struct rte_flow_error *error,
> +                    struct hinic3_filter_t *filter,
> +                    const struct rte_flow_item *flow_item)
> +{
> +     const struct rte_flow_item_vxlan *spec_vxlan, *mask_vxlan;
> +     uint32_t vxlan_vni_id = 0;
> +
> +     spec_vxlan = (const struct rte_flow_item_vxlan *)flow_item->spec;
> +     mask_vxlan = (const struct rte_flow_item_vxlan *)flow_item->mask;
> +
> +     filter->fdir_filter.tunnel_type = HINIC3_FDIR_TUNNEL_MODE_VXLAN;
> +
> +     if (!spec_vxlan && !mask_vxlan) {
> +             return 0;
> +     } else if (filter->fdir_filter.outer_ip_type == 
> HINIC3_FDIR_IP_TYPE_IPV6) {
> +             rte_flow_error_set(error, EINVAL, HINIC3_FLOW_ERROR_TYPE_ITEM,
> +                                flow_item,
> +                                "Invalid fdir filter vxlan mask or spec, "
> +                                "ipv6 vxlan, don't support vni");
> +             return -rte_errno;
> +     }
> +
> +     if (!spec_vxlan || !mask_vxlan) {
> +             rte_flow_error_set(error, EINVAL, HINIC3_FLOW_ERROR_TYPE_ITEM,
> +                                flow_item,
> +                                "Invalid fdir filter vxlan mask or spec");
> +             return -rte_errno;
> +     }
> +
> +     rte_memcpy(((uint8_t *)&vxlan_vni_id + 1), spec_vxlan->vni, 3);

No need for rte_memcpy here, not fast path. use memcpy instead.
Don't hard code value of 3; instead use sizeof(spec_vxlan->vni)

Reply via email to