On 12/21/2016 3:19 PM, Nelio Laranjeiro wrote: > Introduce initial software validation for rte_flow rules. > > Signed-off-by: Nelio Laranjeiro <nelio.laranje...@6wind.com> > --- > drivers/net/mlx5/mlx5.h | 2 + > drivers/net/mlx5/mlx5_flow.c | 202 > ++++++++++++++++++++++++++++++++++------ > drivers/net/mlx5/mlx5_trigger.c | 2 + > 3 files changed, 177 insertions(+), 29 deletions(-)
<...> > + for (; items->type != RTE_FLOW_ITEM_TYPE_END; ++items) { > + if (items->type == RTE_FLOW_ITEM_TYPE_VOID) { > + continue; > + } else if (items->type == RTE_FLOW_ITEM_TYPE_ETH) { > + if (ilast) > + goto exit_item_not_supported; > + ilast = items; > + } else if ((items->type == RTE_FLOW_ITEM_TYPE_IPV4) || > + (items->type == RTE_FLOW_ITEM_TYPE_IPV6)) { > + if (!ilast) > + goto exit_item_not_supported; > + else if (ilast->type != RTE_FLOW_ITEM_TYPE_ETH) > + goto exit_item_not_supported; > + ilast = items; > + } else if ((items->type == RTE_FLOW_ITEM_TYPE_UDP) || > + (items->type == RTE_FLOW_ITEM_TYPE_TCP)) { > + if (!ilast) > + goto exit_item_not_supported; > + else if ((ilast->type != RTE_FLOW_ITEM_TYPE_IPV4) && > + (ilast->type != RTE_FLOW_ITEM_TYPE_IPV6)) > + goto exit_item_not_supported; > + ilast = items; > + } else { > + goto exit_item_not_supported; > + } > + } I was thinking rte_flow_validate() is validating rule against hardware / PMD, but here the API input validation is also done. In patch 3/4 API input validation continues with validating each item one by one. Shouldn't each PMD needs to do this kind of input validation? Why not move generic input validation to rte_flow API? And if it is valid, call PMD specific one.