[dpdk-dev,v3,01/18] net/ixgbe: store TCP SYN filter
Checks
Commit Message
Add support for storing TCP SYN filter in SW.
Signed-off-by: Wenzhuo Lu <wenzhuo.lu@intel.com>
Signed-off-by: Wei Zhao <wei.zhao1@intel.com>
---
drivers/net/ixgbe/ixgbe_ethdev.c | 18 +++++++++++++-----
drivers/net/ixgbe/ixgbe_ethdev.h | 2 ++
2 files changed, 15 insertions(+), 5 deletions(-)
Comments
From: zhao wei <wei.zhao1@gmail.com>
The patches mainly finish following functions:
1) Store and restore all kinds of filters.
2) Parse all kinds of filters.
3) Add flow validate function.
4) Add flow create function.
5) Add flow destroy function.
6) Add flow flush function.
v2 changes:
fix git log error
Modify some function call relationship
Change return value type of all parse flow functions
Update error info for all flow ops
Add ixgbe_filterlist_flush to flush flows and rules created
v3 change:
add new file ixgbe_flow.c to store generic API parser related functions
add more comment about pattern and action rules
add attr check in parser functions
change struct name ixgbe_flow to rte_flow
change SYN to TCP SYN
change to use memset initizlize struct ixgbe_filter_info
break down filter uninit process to 3 indepedent functions in eth_ixgbe_dev_uninit()
change struct rte_flow_item_nvgre definition
change struct rte_flow_item_e_tag definition
fix one bug in function ixgbe_dev_filter_ctrl
add goto in function ixgbe_flow_create
delete some useless initialization
eliminate some git log check warning
v4 change:
fix some check patch warning
zhao wei (18):
net/ixgbe: store TCP SYN filter
net/ixgbe: store flow director filter
net/ixgbe: store L2 tunnel filter
net/ixgbe: restore n-tuple filter Add support for restoring n-tuple
filter in SW.
net/ixgbe: restore ether type filter
net/ixgbe: restore TCP SYN filter
net/ixgbe: restore flow director filter
net/ixgbe: restore L2 tunnel filter
net/ixgbe: store and restore L2 tunnel configuration
net/ixgbe: flush all the filters
net/ixgbe: parse n-tuple filter
net/ixgbe: parse ethertype filter
net/ixgbe: parse TCP SYN filter check if the rule is a TCP SYN
rule, and get the SYN info.
net/ixgbe: parse L2 tunnel filter check if the rule is a L2 tunnel
rule, and get the L2 tunnel info.
net/ixgbe: parse flow director filter
net/ixgbe: create consistent filter
net/ixgbe: destroy consistent filter
net/ixgbe: flush all the filter list
drivers/net/ixgbe/Makefile | 2 +
drivers/net/ixgbe/ixgbe_ethdev.c | 667 +++++++--
drivers/net/ixgbe/ixgbe_ethdev.h | 203 ++-
drivers/net/ixgbe/ixgbe_fdir.c | 407 ++++--
drivers/net/ixgbe/ixgbe_flow.c | 2808 ++++++++++++++++++++++++++++++++++++++
drivers/net/ixgbe/ixgbe_pf.c | 26 +-
lib/librte_ether/rte_flow.h | 48 +
7 files changed, 3950 insertions(+), 211 deletions(-)
create mode 100644 drivers/net/ixgbe/ixgbe_flow.c
The patches mainly finish following functions:
1) Store and restore all kinds of filters.
2) Parse all kinds of filters.
3) Add flow validate function.
4) Add flow create function.
5) Add flow destroy function.
6) Add flow flush function.
v2 changes:
fix git log error
Modify some function call relationship
Change return value type of all parse flow functions
Update error info for all flow ops
Add ixgbe_filterlist_flush to flush flows and rules created
v3 change:
add new file ixgbe_flow.c to store generic API parser related functions
add more comment about pattern and action rules
add attr check in parser functions
change struct name ixgbe_flow to rte_flow
change SYN to TCP SYN
change to use memset initizlize struct ixgbe_filter_info
break down filter uninit process to 3 indepedent functions in eth_ixgbe_dev_uninit()
change struct rte_flow_item_nvgre definition
change struct rte_flow_item_e_tag definition
fix one bug in function ixgbe_dev_filter_ctrl
add goto in function ixgbe_flow_create
delete some useless initialization
eliminate some git log check warning
v4 change:
fix some check patch warning
v5 change:
fix some git log warning
zhao wei (18):
net/ixgbe: store TCP SYN filter
net/ixgbe: store flow director filter
net/ixgbe: store L2 tunnel filter
net/ixgbe: restore n-tuple filter
net/ixgbe: restore ether type filter
net/ixgbe: restore TCP SYN filter
net/ixgbe: restore flow director filter
net/ixgbe: restore L2 tunnel filter
net/ixgbe: store and restore L2 tunnel configuration
net/ixgbe: flush all the filters
net/ixgbe: parse n-tuple filter
net/ixgbe: parse ethertype filter
net/ixgbe: parse TCP SYN filter
net/ixgbe: parse L2 tunnel filter
net/ixgbe: parse flow director filter
net/ixgbe: create consistent filter
net/ixgbe: destroy consistent filter
net/ixgbe: flush all the filter list
drivers/net/ixgbe/Makefile | 2 +
drivers/net/ixgbe/ixgbe_ethdev.c | 667 +++++++--
drivers/net/ixgbe/ixgbe_ethdev.h | 203 ++-
drivers/net/ixgbe/ixgbe_fdir.c | 407 ++++--
drivers/net/ixgbe/ixgbe_flow.c | 2808 ++++++++++++++++++++++++++++++++++++++
drivers/net/ixgbe/ixgbe_pf.c | 26 +-
lib/librte_ether/rte_flow.h | 48 +
7 files changed, 3950 insertions(+), 211 deletions(-)
create mode 100644 drivers/net/ixgbe/ixgbe_flow.c
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wei Zhao
> Sent: Thursday, January 12, 2017 5:17 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH v5 00/18] net/ixgbe: Consistent filter API
>
> The patches mainly finish following functions:
> 1) Store and restore all kinds of filters.
> 2) Parse all kinds of filters.
> 3) Add flow validate function.
> 4) Add flow create function.
> 5) Add flow destroy function.
> 6) Add flow flush function.
>
> v2 changes:
> fix git log error
> Modify some function call relationship
> Change return value type of all parse flow functions Update error info for all
> flow ops Add ixgbe_filterlist_flush to flush flows and rules created
>
> v3 change:
> add new file ixgbe_flow.c to store generic API parser related functions add
> more comment about pattern and action rules add attr check in parser
> functions change struct name ixgbe_flow to rte_flow change SYN to TCP
> SYN change to use memset initizlize struct ixgbe_filter_info break down
> filter uninit process to 3 indepedent functions in eth_ixgbe_dev_uninit()
> change struct rte_flow_item_nvgre definition change struct
> rte_flow_item_e_tag definition fix one bug in function ixgbe_dev_filter_ctrl
> add goto in function ixgbe_flow_create delete some useless initialization
> eliminate some git log check warning
>
> v4 change:
> fix some check patch warning
>
> v5 change:
> fix some git log warning
>
> zhao wei (18):
> net/ixgbe: store TCP SYN filter
> net/ixgbe: store flow director filter
> net/ixgbe: store L2 tunnel filter
> net/ixgbe: restore n-tuple filter
> net/ixgbe: restore ether type filter
> net/ixgbe: restore TCP SYN filter
> net/ixgbe: restore flow director filter
> net/ixgbe: restore L2 tunnel filter
> net/ixgbe: store and restore L2 tunnel configuration
> net/ixgbe: flush all the filters
> net/ixgbe: parse n-tuple filter
> net/ixgbe: parse ethertype filter
> net/ixgbe: parse TCP SYN filter
> net/ixgbe: parse L2 tunnel filter
> net/ixgbe: parse flow director filter
> net/ixgbe: create consistent filter
> net/ixgbe: destroy consistent filter
> net/ixgbe: flush all the filter list
>
> drivers/net/ixgbe/Makefile | 2 +
> drivers/net/ixgbe/ixgbe_ethdev.c | 667 +++++++--
> drivers/net/ixgbe/ixgbe_ethdev.h | 203 ++-
> drivers/net/ixgbe/ixgbe_fdir.c | 407 ++++--
> drivers/net/ixgbe/ixgbe_flow.c | 2808
> ++++++++++++++++++++++++++++++++++++++
> drivers/net/ixgbe/ixgbe_pf.c | 26 +-
> lib/librte_ether/rte_flow.h | 48 +
> 7 files changed, 3950 insertions(+), 211 deletions(-) create mode 100644
> drivers/net/ixgbe/ixgbe_flow.c
>
Acked-by: Beilei Xing <beilei.xing@intel.com>
Hi Wei,
On 1/12/2017 9:17 AM, Wei Zhao wrote:
> The patches mainly finish following functions:
> 1) Store and restore all kinds of filters.
> 2) Parse all kinds of filters.
> 3) Add flow validate function.
> 4) Add flow create function.
> 5) Add flow destroy function.
> 6) Add flow flush function.
Overall patchset looks good, only major comment is adding more comments
on parse_filter functions for expected/valid rules.
You can keep Beilei's Ack for next version of the patchset.
Thanks,
ferruh
> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Xing, Beilei
> Sent: Thursday, January 12, 2017 7:39 PM
> To: Zhao1, Wei <wei.zhao1@intel.com>; dev@dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v5 00/18] net/ixgbe: Consistent filter API
>
>
> > -----Original Message-----
> > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Wei Zhao
> > Sent: Thursday, January 12, 2017 5:17 PM
> > To: dev@dpdk.org
> > Subject: [dpdk-dev] [PATCH v5 00/18] net/ixgbe: Consistent filter API
> >
> > The patches mainly finish following functions:
> > 1) Store and restore all kinds of filters.
> > 2) Parse all kinds of filters.
> > 3) Add flow validate function.
> > 4) Add flow create function.
> > 5) Add flow destroy function.
> > 6) Add flow flush function.
> >
> > v2 changes:
> > fix git log error
> > Modify some function call relationship Change return value type of
> > all parse flow functions Update error info for all flow ops Add
> > ixgbe_filterlist_flush to flush flows and rules created
> >
> > v3 change:
> > add new file ixgbe_flow.c to store generic API parser related
> > functions add more comment about pattern and action rules add attr
> > check in parser functions change struct name ixgbe_flow to rte_flow
> > change SYN to TCP SYN change to use memset initizlize struct
> > ixgbe_filter_info break down filter uninit process to 3 indepedent
> > functions in eth_ixgbe_dev_uninit() change struct rte_flow_item_nvgre
> > definition change struct rte_flow_item_e_tag definition fix one bug
> > in function ixgbe_dev_filter_ctrl add goto in function
> > ixgbe_flow_create delete some useless initialization eliminate some
> > git log check warning
> >
> > v4 change:
> > fix some check patch warning
> >
> > v5 change:
> > fix some git log warning
> >
> > zhao wei (18):
> > net/ixgbe: store TCP SYN filter
> > net/ixgbe: store flow director filter
> > net/ixgbe: store L2 tunnel filter
> > net/ixgbe: restore n-tuple filter
> > net/ixgbe: restore ether type filter
> > net/ixgbe: restore TCP SYN filter
> > net/ixgbe: restore flow director filter
> > net/ixgbe: restore L2 tunnel filter
> > net/ixgbe: store and restore L2 tunnel configuration
> > net/ixgbe: flush all the filters
> > net/ixgbe: parse n-tuple filter
> > net/ixgbe: parse ethertype filter
> > net/ixgbe: parse TCP SYN filter
> > net/ixgbe: parse L2 tunnel filter
> > net/ixgbe: parse flow director filter
> > net/ixgbe: create consistent filter
> > net/ixgbe: destroy consistent filter
> > net/ixgbe: flush all the filter list
> >
> > drivers/net/ixgbe/Makefile | 2 +
> > drivers/net/ixgbe/ixgbe_ethdev.c | 667 +++++++--
> > drivers/net/ixgbe/ixgbe_ethdev.h | 203 ++-
> > drivers/net/ixgbe/ixgbe_fdir.c | 407 ++++--
> > drivers/net/ixgbe/ixgbe_flow.c | 2808
> > ++++++++++++++++++++++++++++++++++++++
> > drivers/net/ixgbe/ixgbe_pf.c | 26 +-
> > lib/librte_ether/rte_flow.h | 48 +
> > 7 files changed, 3950 insertions(+), 211 deletions(-) create mode
> > 100644 drivers/net/ixgbe/ixgbe_flow.c
> >
> Acked-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Wei Dai <wei.dai@intel.com>
The patches mainly finish following functions:
1) Store and restore all kinds of filters.
2) Parse all kinds of filters.
3) Add flow validate function.
4) Add flow create function.
5) Add flow destroy function.
6) Add flow flush function.
v2 changes:
fix git log error
Modify some function call relationship
Change return value type of all parse flow functions
Update error info for all flow ops
Add ixgbe_filterlist_flush to flush flows and rules created
v3 change:
add new file ixgbe_flow.c to store generic API parser related functions
add more comment about pattern and action rules
add attr check in parser functions
change struct name ixgbe_flow to rte_flow
change SYN to TCP SYN
change to use memset initizlize struct ixgbe_filter_info
break down filter uninit process to 3 indepedent functions in eth_ixgbe_dev_uninit()
change struct rte_flow_item_nvgre definition
change struct rte_flow_item_e_tag definition
fix one bug in function ixgbe_dev_filter_ctrl
add goto in function ixgbe_flow_create
delete some useless initialization
eliminate some git log check warning
v4 change:
fix some check patch warning
v5 change:
fix some git log warning
v6 change:
add more comments on pattern rule example, supply the usage of spec
last and mask
zhao wei (18):
net/ixgbe: store TCP SYN filter
net/ixgbe: store flow director filter
net/ixgbe: store L2 tunnel filter
net/ixgbe: restore n-tuple filter
net/ixgbe: restore ether type filter
net/ixgbe: restore TCP SYN filter
net/ixgbe: restore flow director filter
net/ixgbe: restore L2 tunnel filter
net/ixgbe: store and restore L2 tunnel configuration
net/ixgbe: flush all the filters
net/ixgbe: parse n-tuple filter
net/ixgbe: parse ethertype filter
net/ixgbe: parse TCP SYN filter
net/ixgbe: parse L2 tunnel filter
net/ixgbe: parse flow director filter
net/ixgbe: create consistent filter
net/ixgbe: destroy consistent filter
net/ixgbe: flush all the filter list
drivers/net/ixgbe/Makefile | 2 +
drivers/net/ixgbe/ixgbe_ethdev.c | 667 +++++++--
drivers/net/ixgbe/ixgbe_ethdev.h | 203 ++-
drivers/net/ixgbe/ixgbe_fdir.c | 407 ++++--
drivers/net/ixgbe/ixgbe_flow.c | 2878 ++++++++++++++++++++++++++++++++++++++
drivers/net/ixgbe/ixgbe_pf.c | 26 +-
lib/librte_ether/rte_flow.h | 48 +
7 files changed, 4020 insertions(+), 211 deletions(-)
create mode 100644 drivers/net/ixgbe/ixgbe_flow.c
Acked-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Wei Dai <wei.dai@intel.com>
On 1/13/2017 8:12 AM, Wei Zhao wrote:
> The patches mainly finish following functions:
> 1) Store and restore all kinds of filters.
> 2) Parse all kinds of filters.
> 3) Add flow validate function.
> 4) Add flow create function.
> 5) Add flow destroy function.
> 6) Add flow flush function.
>
<...>
>
> zhao wei (18):
> net/ixgbe: store TCP SYN filter
> net/ixgbe: store flow director filter
> net/ixgbe: store L2 tunnel filter
> net/ixgbe: restore n-tuple filter
> net/ixgbe: restore ether type filter
> net/ixgbe: restore TCP SYN filter
> net/ixgbe: restore flow director filter
> net/ixgbe: restore L2 tunnel filter
> net/ixgbe: store and restore L2 tunnel configuration
> net/ixgbe: flush all the filters
> net/ixgbe: parse n-tuple filter
> net/ixgbe: parse ethertype filter
> net/ixgbe: parse TCP SYN filter
> net/ixgbe: parse L2 tunnel filter
> net/ixgbe: parse flow director filter
> net/ixgbe: create consistent filter
> net/ixgbe: destroy consistent filter
> net/ixgbe: flush all the filter list
>
<...>
>
> Acked-by: Beilei Xing <beilei.xing@intel.com>
> Acked-by: Wei Dai <wei.dai@intel.com>
>
Series applied to dpdk-next-net/master, thanks.
Hi Ferruh,
> Series applied to dpdk-next-net/master, thanks.
Great, thanks for applying this patch set!
2017-01-13 15:54, Ferruh Yigit:
> On 1/13/2017 8:12 AM, Wei Zhao wrote:
> > zhao wei (18):
> > net/ixgbe: store TCP SYN filter
> > net/ixgbe: store flow director filter
> > net/ixgbe: store L2 tunnel filter
> > net/ixgbe: restore n-tuple filter
> > net/ixgbe: restore ether type filter
> > net/ixgbe: restore TCP SYN filter
> > net/ixgbe: restore flow director filter
> > net/ixgbe: restore L2 tunnel filter
> > net/ixgbe: store and restore L2 tunnel configuration
> > net/ixgbe: flush all the filters
> > net/ixgbe: parse n-tuple filter
> > net/ixgbe: parse ethertype filter
> > net/ixgbe: parse TCP SYN filter
> > net/ixgbe: parse L2 tunnel filter
> > net/ixgbe: parse flow director filter
> > net/ixgbe: create consistent filter
> > net/ixgbe: destroy consistent filter
> > net/ixgbe: flush all the filter list
> >
> <...>
> >
> > Acked-by: Beilei Xing <beilei.xing@intel.com>
> > Acked-by: Wei Dai <wei.dai@intel.com>
> >
>
> Series applied to dpdk-next-net/master, thanks.
There is a build issue:
patch 2/18 uses rte_hash
which is linked to ixgbe only in patch 10/18.
I am fixing it in mainline.
@@ -1272,10 +1272,12 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev)
/* enable support intr */
ixgbe_enable_intr(eth_dev);
+ /* initialize filter info */
+ memset(filter_info, 0,
+ sizeof(struct ixgbe_filter_info));
+
/* initialize 5tuple filter list */
TAILQ_INIT(&filter_info->fivetuple_list);
- memset(filter_info->fivetuple_mask, 0,
- sizeof(uint32_t) * IXGBE_5TUPLE_ARRAY_SIZE);
return 0;
}
@@ -5603,15 +5605,18 @@ ixgbe_syn_filter_set(struct rte_eth_dev *dev,
bool add)
{
struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+ struct ixgbe_filter_info *filter_info =
+ IXGBE_DEV_PRIVATE_TO_FILTER_INFO(dev->data->dev_private);
+ uint32_t syn_info;
uint32_t synqf;
if (filter->queue >= IXGBE_MAX_RX_QUEUE_NUM)
return -EINVAL;
- synqf = IXGBE_READ_REG(hw, IXGBE_SYNQF);
+ syn_info = filter_info->syn_info;
if (add) {
- if (synqf & IXGBE_SYN_FILTER_ENABLE)
+ if (syn_info & IXGBE_SYN_FILTER_ENABLE)
return -EINVAL;
synqf = (uint32_t)(((filter->queue << IXGBE_SYN_FILTER_QUEUE_SHIFT) &
IXGBE_SYN_FILTER_QUEUE) | IXGBE_SYN_FILTER_ENABLE);
@@ -5621,10 +5626,13 @@ ixgbe_syn_filter_set(struct rte_eth_dev *dev,
else
synqf &= ~IXGBE_SYN_FILTER_SYNQFP;
} else {
- if (!(synqf & IXGBE_SYN_FILTER_ENABLE))
+ synqf = IXGBE_READ_REG(hw, IXGBE_SYNQF);
+ if (!(syn_info & IXGBE_SYN_FILTER_ENABLE))
return -ENOENT;
synqf &= ~(IXGBE_SYN_FILTER_QUEUE | IXGBE_SYN_FILTER_ENABLE);
}
+
+ filter_info->syn_info = synqf;
IXGBE_WRITE_REG(hw, IXGBE_SYNQF, synqf);
IXGBE_WRITE_FLUSH(hw);
return 0;
@@ -262,6 +262,8 @@ struct ixgbe_filter_info {
/* Bit mask for every used 5tuple filter */
uint32_t fivetuple_mask[IXGBE_5TUPLE_ARRAY_SIZE];
struct ixgbe_5tuple_filter_list fivetuple_list;
+ /* store the SYN filter info */
+ uint32_t syn_info;
};
/*