[dpdk-dev] [PATCH v4 2/4] net/i40e: add support for raw flow type for flow director

Kirill Rybalchenko kirill.rybalchenko at intel.com
Tue Oct 10 22:13:30 CEST 2017


When addidng flow director filter for raw flow type, instead
of constructing packet use buffer with pre-constructed packet.

v3:
Merge with dynamic pctype to flow type mapping patch.

Signed-off-by: Kirill Rybalchenko <kirill.rybalchenko at intel.com>
---
 drivers/net/i40e/i40e_fdir.c | 25 ++++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/drivers/net/i40e/i40e_fdir.c b/drivers/net/i40e/i40e_fdir.c
index 491c643..4b6a64f 100644
--- a/drivers/net/i40e/i40e_fdir.c
+++ b/drivers/net/i40e/i40e_fdir.c
@@ -1456,7 +1456,17 @@ i40e_add_del_fdir_filter(struct rte_eth_dev *dev,
 		return -ENOTSUP;
 	}
 
-	pctype = i40e_flowtype_to_pctype(pf->adapter, filter->input.flow_type);
+	if (filter->input.flow_type == RTE_ETH_FLOW_RAW) {
+		if (filter->input.flow.raw_flow.length > I40E_FDIR_PKT_LEN ||
+		    !filter->input.flow.raw_flow.packet) {
+			PMD_DRV_LOG(ERR, "Invalid raw flow filter parameters!");
+			return -EINVAL;
+		}
+		pctype = i40e_flowtype_to_pctype(pf->adapter,
+						 filter->input.flow.raw_flow.flow);
+	} else
+		pctype = i40e_flowtype_to_pctype(pf->adapter,
+						 filter->input.flow_type);
 	if (pctype == I40E_FILTER_PCTYPE_INVALID) {
 		PMD_DRV_LOG(ERR, "invalid flow_type input.");
 		return -EINVAL;
@@ -1473,10 +1483,15 @@ i40e_add_del_fdir_filter(struct rte_eth_dev *dev,
 
 	memset(pkt, 0, I40E_FDIR_PKT_LEN);
 
-	ret = i40e_fdir_construct_pkt(pf, &filter->input, pkt);
-	if (ret < 0) {
-		PMD_DRV_LOG(ERR, "construct packet for fdir fails.");
-		return ret;
+	if (filter->input.flow_type == RTE_ETH_FLOW_RAW) {
+		memcpy(pkt, filter->input.flow.raw_flow.packet,
+		       filter->input.flow.raw_flow.length);
+	} else {
+		ret = i40e_fdir_construct_pkt(pf, &filter->input, pkt);
+		if (ret < 0) {
+			PMD_DRV_LOG(ERR, "construct packet for fdir fails.");
+			return ret;
+		}
 	}
 
 	if (hw->mac.type == I40E_MAC_X722) {
-- 
2.5.5



More information about the dev mailing list