Hi Wei, > -----Original Message----- > From: Zhao1, Wei > Sent: Friday, June 2, 2017 2:37 PM > To: dev@dpdk.org > Cc: Lu, Wenzhuo; Zhao1, Wei > Subject: [PATCH v2 10/11] net/e1000: destroy consistent filter > > This patch adds a function to destroy the flow fliter. > > Signed-off-by: Wei Zhao <wei.zh...@intel.com> > --- > drivers/net/e1000/igb_flow.c | 100 > ++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 99 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/e1000/igb_flow.c b/drivers/net/e1000/igb_flow.c > index fac76bf..bced291 100644 > --- a/drivers/net/e1000/igb_flow.c > +++ b/drivers/net/e1000/igb_flow.c > @@ -1464,10 +1464,108 @@ igb_flow_validate(__rte_unused struct > rte_eth_dev *dev, > return ret; > } > > +/* Destroy a flow rule on igb. */ > +static int > +igb_flow_destroy(struct rte_eth_dev *dev, > + struct rte_flow *flow, > + struct rte_flow_error *error) > +{ > + int ret; > + struct rte_flow *pmd_flow = flow; > + enum rte_filter_type filter_type = pmd_flow->filter_type; > + struct rte_eth_ntuple_filter ntuple_filter; > + struct rte_eth_ethertype_filter ethertype_filter; > + struct rte_eth_syn_filter syn_filter; > + struct rte_eth_flex_filter flex_filter; > + struct igb_ntuple_filter_ele *ntuple_filter_ptr; > + struct igb_ethertype_filter_ele *ethertype_filter_ptr; > + struct igb_eth_syn_filter_ele *syn_filter_ptr; > + struct igb_flex_filter_ele *flex_filter_ptr; > + struct igb_flow_mem *igb_flow_mem_ptr; > + > + switch (filter_type) { > + case RTE_ETH_FILTER_NTUPLE: > + ntuple_filter_ptr = (struct igb_ntuple_filter_ele *) > + pmd_flow->rule; > + (void)rte_memcpy(&ntuple_filter, > + &ntuple_filter_ptr->filter_info, > + sizeof(struct rte_eth_ntuple_filter)); > + ret = igb_add_del_ntuple_filter(dev, &ntuple_filter, FALSE); Is a copy necessary? Could "ntuple_filter_ptr->filter_info" be used directly for deleting? The same below.
> + if (!ret) { > + TAILQ_REMOVE(&igb_filter_ntuple_list, > + ntuple_filter_ptr, entries); > + rte_free(ntuple_filter_ptr); > + } > + break;