[dpdk-dev] [PATCH 18/24] net/i40e: destroy macvlan filter
Beilei Xing
beilei.xing at intel.com
Fri Dec 2 12:53:39 CET 2016
This patch adds a function to destroy the macvlan filter.
Signed-off-by: Beilei Xing <beilei.xing at intel.com>
---
drivers/net/i40e/i40e_ethdev.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c
index a3ed1f0..fddd46d 100644
--- a/drivers/net/i40e/i40e_ethdev.c
+++ b/drivers/net/i40e/i40e_ethdev.c
@@ -519,6 +519,9 @@ static struct i40e_flow *i40e_flow_create(struct rte_eth_dev *dev,
struct rte_flow_error *error);
static int i40e_dev_destroy_ethertype_filter(struct i40e_pf *pf,
struct i40e_ethertype_filter *filter);
+static int i40e_dev_destroy_macvlan_filter(struct i40e_pf *pf,
+ struct i40e_vsi *vsi,
+ struct i40e_mac_filter *filter);
static int i40e_flow_destroy(struct rte_eth_dev *dev,
struct rte_flow *flow,
struct rte_flow_error *error);
@@ -11708,6 +11711,29 @@ 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)
+{
+ struct i40e_hw *hw = I40E_PF_TO_HW(pf);
+ int ret;
+
+ (void)rte_memcpy(hw->mac.addr, hw->mac.perm_addr,
+ ETHER_ADDR_LEN);
+ ret = i40e_vsi_delete_mac(vsi, &filter->mac_info.mac_addr);
+ if (ret != I40E_SUCCESS) {
+ PMD_DRV_LOG(ERR, "Failed to delete MAC filter.");
+ return -1;
+ }
+
+ /* Clear device address as it has been removed. */
+ if (is_same_ether_addr(&pf->dev_addr, &filter->mac_info.mac_addr))
+ memset(&pf->dev_addr, 0, sizeof(struct ether_addr));
+
+ return 0;
+}
+
+static int
i40e_flow_destroy(struct rte_eth_dev *dev,
struct rte_flow *flow,
struct rte_flow_error *error)
@@ -11722,6 +11748,10 @@ i40e_flow_destroy(struct rte_eth_dev *dev,
ret = i40e_dev_destroy_ethertype_filter(pf,
(struct i40e_ethertype_filter *)pmd_flow->rule);
break;
+ case RTE_ETH_FILTER_MACVLAN:
+ ret = i40e_dev_destroy_macvlan_filter(pf,
+ pmd_flow->vsi, (struct i40e_mac_filter *)pmd_flow->rule);
+ break;
default:
PMD_DRV_LOG(WARNING, "Filter type (%d) not supported",
filter_type);
--
2.5.5
More information about the dev
mailing list