From bd0447d2c50a138467edf1231c339b19036ff870 Mon Sep 17 00:00:00 2001 From: Reshma Pattan Date: Tue, 11 Sep 2018 15:20:43 +0100 Subject: [PATCH] net/softnic: support flow destroy pmd_flow_destroy() API is added to destroy the created flow. Signed-off-by: Cristian Dumitrescu Signed-off-by: Reshma Pattan --- drivers/net/softnic/rte_eth_softnic_flow.c | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/drivers/net/softnic/rte_eth_softnic_flow.c b/drivers/net/softnic/rte_eth_softnic_flow.c index d3c94965bd..90387b30be 100644 --- a/drivers/net/softnic/rte_eth_softnic_flow.c +++ b/drivers/net/softnic/rte_eth_softnic_flow.c @@ -1616,7 +1616,46 @@ pmd_flow_create(struct rte_eth_dev *dev, return flow; } +static int +pmd_flow_destroy(struct rte_eth_dev *dev, + struct rte_flow *flow, + struct rte_flow_error *error) +{ + struct pmd_internals *softnic = dev->data->dev_private; + struct softnic_table *table; + int status; + + /* Check input parameters. */ + if (flow == NULL) + return rte_flow_error_set(error, + EINVAL, + RTE_FLOW_ERROR_TYPE_HANDLE, + NULL, + "Null flow"); + + table = &flow->pipeline->table[flow->table_id]; + + /* Rule delete. */ + status = softnic_pipeline_table_rule_delete(softnic, + flow->pipeline->name, + flow->table_id, + &flow->match); + if (status) + return rte_flow_error_set(error, + EINVAL, + RTE_FLOW_ERROR_TYPE_UNSPECIFIED, + NULL, + "Pipeline table rule delete failed"); + + /* Flow delete. */ + TAILQ_REMOVE(&table->flows, flow, node); + free(flow); + + return 0; +} + const struct rte_flow_ops pmd_flow_ops = { .validate = pmd_flow_validate, .create = pmd_flow_create, + .destroy = pmd_flow_destroy, }; -- 2.20.1