Hi Daniel, The flow_director API will be deprecated in the near future. It was replaced by rte_flow API, which contains much more features, and is fully supported by Mellanox.
It is recommended that you use rte_flow API in your application. Regards, Dekel > -----Original Message----- > From: benli ye <danielbenl...@gmail.com> > Sent: Wednesday, April 3, 2019 11:30 AM > To: Dekel Peled <dek...@mellanox.com> > Cc: dev@dpdk.org > Subject: Re: mlx5 FDIR rule comparison issue > > +Dekel > > Add Dekel to see if this is an issue. > > Thanks, > Daniel > > > On Apr 2, 2019, at 3:23 PM, benli ye <danielbenl...@gmail.com> wrote: > > > > Hi Developers, > > > > I am adding two FDIR rule (one is for UDP and the other is for TCP) for mlx5 > pmd driver. The rules are listed below. > > struct rte_eth_fdir_filter filt[MAX_FDIR_PROTO] = { > > { > > .input.flow_type = RTE_ETH_FLOW_NONFRAG_IPV4_TCP, > > .input.flow.tcp4_flow.ip.dst_ip = dip, > > .input.flow.tcp4_flow.dst_port = dport, > > > > .action.behavior = RTE_ETH_FDIR_ACCEPT, > > .action.report_status = RTE_ETH_FDIR_REPORT_ID, > > .soft_id = 0, > > }, > > { > > .input.flow_type = RTE_ETH_FLOW_NONFRAG_IPV4_UDP, > > .input.flow.udp4_flow.ip.dst_ip = dip, > > .input.flow.udp4_flow.dst_port = dport, > > > > .action.behavior = RTE_ETH_FDIR_ACCEPT, > > .action.report_status = RTE_ETH_FDIR_REPORT_ID, > > .soft_id = 1, > > }, > > }; > > > > However, mlx5 lib prevent me to doing this as when it treats the two rules > are the same. > > > > I debugged for a while and found flow_fdir_cmp() didn’t compare the > protocol type in field items of struct mlx5_fdir. So should this be a bug for > mlx5? > > > > flow_fdir_cmp(const struct mlx5_fdir *f1, const struct mlx5_fdir *f2) > > { > > if (FLOW_FDIR_CMP(f1, f2, attr) || > > FLOW_FDIR_CMP(f1, f2, l2) || > > FLOW_FDIR_CMP(f1, f2, l2_mask) || > > FLOW_FDIR_CMP(f1, f2, l3) || > > FLOW_FDIR_CMP(f1, f2, l3_mask) || > > FLOW_FDIR_CMP(f1, f2, l4) || > > FLOW_FDIR_CMP(f1, f2, l4_mask) || > > FLOW_FDIR_CMP(f1, f2, actions[0].type)) > > return 1; > > if (f1->actions[0].type == RTE_FLOW_ACTION_TYPE_QUEUE && > > FLOW_FDIR_CMP(f1, f2, queue)) > > return 1; > > return 0; > > } > > > > Thanks, > > Daniel