diff options
author | John Hurley | 2019-04-15 16:55:54 +0200 |
---|---|---|
committer | David S. Miller | 2019-04-16 00:45:36 +0200 |
commit | 4d12ba42787b5c1eb41375bc6cc70ad8dd7aa0e0 (patch) | |
tree | b6ee6fe3f1b4ae3ae653345ff3380f20f8f0313f /drivers/net/ethernet/netronome/nfp/flower/offload.c | |
parent | nfp: flower: turn on recirc and merge hint support in firmware (diff) | |
download | kernel-qcow2-linux-4d12ba42787b5c1eb41375bc6cc70ad8dd7aa0e0.tar.gz kernel-qcow2-linux-4d12ba42787b5c1eb41375bc6cc70ad8dd7aa0e0.tar.xz kernel-qcow2-linux-4d12ba42787b5c1eb41375bc6cc70ad8dd7aa0e0.zip |
nfp: flower: allow offloading of matches on 'internal' ports
Recent FW modifications allow the offloading of non repr ports. These
ports exist internally on the NFP. So if a rule outputs to an 'internal'
port, then the packet will recirculate back into the system but will now
have this internal port as it's incoming port. These ports are indicated
by a specific type field combined with an 8 bit port id.
Add private app data to assign additional port ids for use in offloads.
Provide functions to lookup or create new ids when a rule attempts to
match on an internal netdev - the only internal netdevs currently
supported are of type openvswitch. Have a netdev notifier to release
port ids on netdev unregister.
OvS offloads rules that match on internal ports as TC egress filters.
Ensure that such rules are accepted by the driver.
Signed-off-by: John Hurley <john.hurley@netronome.com>
Signed-off-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/netronome/nfp/flower/offload.c')
-rw-r--r-- | drivers/net/ethernet/netronome/nfp/flower/offload.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c index 9f16920da81d..af406e6cff98 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/offload.c +++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c @@ -682,7 +682,9 @@ nfp_flower_setup_indr_tc_block(struct net_device *netdev, struct nfp_app *app, struct nfp_flower_priv *priv = app->priv; int err; - if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS) + if (f->binder_type != TCF_BLOCK_BINDER_TYPE_CLSACT_INGRESS && + !(f->binder_type == TCF_BLOCK_BINDER_TYPE_CLSACT_EGRESS && + nfp_flower_internal_port_can_offload(app, netdev))) return -EOPNOTSUPP; switch (f->command) { |