+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