igb: Add the skeletons for tc-flower offloading
This adds basic functions needed to implement offloading for filters created by tc-flower. Signed-off-by: Vinicius Costa Gomes <vinicius.gomes@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
b4a38d4276
commit
f8f3d34e54
|
@ -36,6 +36,7 @@
|
|||
#include <net/checksum.h>
|
||||
#include <net/ip6_checksum.h>
|
||||
#include <net/pkt_sched.h>
|
||||
#include <net/pkt_cls.h>
|
||||
#include <linux/net_tstamp.h>
|
||||
#include <linux/mii.h>
|
||||
#include <linux/ethtool.h>
|
||||
|
@ -2513,6 +2514,69 @@ static int igb_offload_cbs(struct igb_adapter *adapter,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int igb_configure_clsflower(struct igb_adapter *adapter,
|
||||
struct tc_cls_flower_offload *cls_flower)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static int igb_delete_clsflower(struct igb_adapter *adapter,
|
||||
struct tc_cls_flower_offload *cls_flower)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
static int igb_setup_tc_cls_flower(struct igb_adapter *adapter,
|
||||
struct tc_cls_flower_offload *cls_flower)
|
||||
{
|
||||
switch (cls_flower->command) {
|
||||
case TC_CLSFLOWER_REPLACE:
|
||||
return igb_configure_clsflower(adapter, cls_flower);
|
||||
case TC_CLSFLOWER_DESTROY:
|
||||
return igb_delete_clsflower(adapter, cls_flower);
|
||||
case TC_CLSFLOWER_STATS:
|
||||
return -EOPNOTSUPP;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
static int igb_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
|
||||
void *cb_priv)
|
||||
{
|
||||
struct igb_adapter *adapter = cb_priv;
|
||||
|
||||
if (!tc_cls_can_offload_and_chain0(adapter->netdev, type_data))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (type) {
|
||||
case TC_SETUP_CLSFLOWER:
|
||||
return igb_setup_tc_cls_flower(adapter, type_data);
|
||||
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
|
||||
static int igb_setup_tc_block(struct igb_adapter *adapter,
|
||||
struct tc_block_offload *f)
|
||||
{
|
||||
if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (f->command) {
|
||||
case TC_BLOCK_BIND:
|
||||
return tcf_block_cb_register(f->block, igb_setup_tc_block_cb,
|
||||
adapter, adapter);
|
||||
case TC_BLOCK_UNBIND:
|
||||
tcf_block_cb_unregister(f->block, igb_setup_tc_block_cb,
|
||||
adapter);
|
||||
return 0;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
}
|
||||
|
||||
static int igb_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
||||
void *type_data)
|
||||
{
|
||||
|
@ -2521,6 +2585,8 @@ static int igb_setup_tc(struct net_device *dev, enum tc_setup_type type,
|
|||
switch (type) {
|
||||
case TC_SETUP_QDISC_CBS:
|
||||
return igb_offload_cbs(adapter, type_data);
|
||||
case TC_SETUP_BLOCK:
|
||||
return igb_setup_tc_block(adapter, type_data);
|
||||
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
|
|
Loading…
Reference in New Issue