[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