[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