This patch adds a function to destroy the tunnel filter. Signed-off-by: Beilei Xing <beilei.x...@intel.com> --- drivers/net/i40e/i40e_ethdev.c | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+)
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index fddd46d..4847c04 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -522,6 +522,8 @@ static int i40e_dev_destroy_ethertype_filter(struct i40e_pf *pf, static int i40e_dev_destroy_macvlan_filter(struct i40e_pf *pf, struct i40e_vsi *vsi, struct i40e_mac_filter *filter); +static int i40e_dev_destroy_tunnel_filter(struct i40e_pf *pf, + struct i40e_tunnel_filter *filter); static int i40e_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, struct rte_flow_error *error); @@ -11734,6 +11736,43 @@ i40e_dev_destroy_macvlan_filter(struct i40e_pf *pf, } static int +i40e_dev_destroy_tunnel_filter(struct i40e_pf *pf, + struct i40e_tunnel_filter *filter) +{ + struct i40e_hw *hw = I40E_PF_TO_HW(pf); + struct i40e_vsi *vsi = pf->main_vsi; + struct i40e_aqc_add_remove_cloud_filters_element_data cld_filter; + struct i40e_tunnel_info *tunnel_info = &pf->tunnel; + struct i40e_tunnel_filter *node; + int ret = 0; + + memset(&cld_filter, 0, sizeof(cld_filter)); + ether_addr_copy((struct ether_addr *)&filter->input.outer_mac, + (struct ether_addr *)&cld_filter.outer_mac); + ether_addr_copy((struct ether_addr *)&filter->input.inner_mac, + (struct ether_addr *)&cld_filter.inner_mac); + cld_filter.inner_vlan = filter->input.inner_vlan; + cld_filter.flags = filter->input.flags; + cld_filter.tenant_id = filter->input.tenant_id; + rte_memcpy(&cld_filter.ipaddr, &filter->input.ipaddr, + sizeof(cld_filter.ipaddr)); + cld_filter.queue_number = filter->queue; + + ret = i40e_aq_remove_cloud_filters(hw, vsi->seid, + &cld_filter, 1); + if (ret < 0) + return ret; + + node = i40e_sw_tunnel_filter_lookup(tunnel_info, &filter->input); + if (node) + ret = i40e_sw_tunnel_filter_del(pf, node); + else + return -EINVAL; + + return ret; +} + +static int i40e_flow_destroy(struct rte_eth_dev *dev, struct rte_flow *flow, struct rte_flow_error *error) @@ -11752,6 +11791,10 @@ i40e_flow_destroy(struct rte_eth_dev *dev, ret = i40e_dev_destroy_macvlan_filter(pf, pmd_flow->vsi, (struct i40e_mac_filter *)pmd_flow->rule); break; + case RTE_ETH_FILTER_TUNNEL: + ret = i40e_dev_destroy_tunnel_filter(pf, + (struct i40e_tunnel_filter *)pmd_flow->rule); + break; default: PMD_DRV_LOG(WARNING, "Filter type (%d) not supported", filter_type); -- 2.5.5