Re: [oss-drivers] Re: [PATCH/RFC net-next 4/9] nfp: extend flower add flow offload
On Tue, Jun 27, 2017 at 11:13:30PM -0700, Jakub Kicinski wrote: > On Wed, 28 Jun 2017 01:21:44 +0200, Simon Horman wrote: > > diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c > > b/drivers/net/ethernet/netronome/nfp/flower/offload.c > > index 9127c28ea9c3..8ad72f57493d 100644 > > --- a/drivers/net/ethernet/netronome/nfp/flower/offload.c > > +++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c > > @@ -45,6 +45,145 @@ > > #include "../nfp_net.h" > > #include "../nfp_port.h" > > > > +static bool nfp_flower_check_lower_than_mac(struct tc_cls_flower_offload > > *f) > > +{ > > + return dissector_uses_key(f->dissector, > > + FLOW_DISSECTOR_KEY_IPV4_ADDRS) || > > + dissector_uses_key(f->dissector, > > + FLOW_DISSECTOR_KEY_IPV6_ADDRS) || > > + dissector_uses_key(f->dissector, > > + FLOW_DISSECTOR_KEY_PORTS) || > > + dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_ICMP); > > +} > > Nit: should this be named higher than mac? Yes, I think so now you mention it. I'll fix this in v2.
Re: [PATCH/RFC net-next 4/9] nfp: extend flower add flow offload
On Wed, 28 Jun 2017 01:21:44 +0200, Simon Horman wrote: > diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c > b/drivers/net/ethernet/netronome/nfp/flower/offload.c > index 9127c28ea9c3..8ad72f57493d 100644 > --- a/drivers/net/ethernet/netronome/nfp/flower/offload.c > +++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c > @@ -45,6 +45,145 @@ > #include "../nfp_net.h" > #include "../nfp_port.h" > > +static bool nfp_flower_check_lower_than_mac(struct tc_cls_flower_offload *f) > +{ > + return dissector_uses_key(f->dissector, > + FLOW_DISSECTOR_KEY_IPV4_ADDRS) || > + dissector_uses_key(f->dissector, > +FLOW_DISSECTOR_KEY_IPV6_ADDRS) || > + dissector_uses_key(f->dissector, > +FLOW_DISSECTOR_KEY_PORTS) || > + dissector_uses_key(f->dissector, FLOW_DISSECTOR_KEY_ICMP); > +} Nit: should this be named higher than mac?
[PATCH/RFC net-next 4/9] nfp: extend flower add flow offload
From: Pieter Jansen van VuurenExtends the flower flow add function by calculating which match fields are present in the flower offload structure and allocating the appropriate space to describe these. Signed-off-by: Pieter Jansen van Vuuren Signed-off-by: Simon Horman --- drivers/net/ethernet/netronome/nfp/flower/cmsg.h | 141 + drivers/net/ethernet/netronome/nfp/flower/main.h | 24 +++ .../net/ethernet/netronome/nfp/flower/offload.c| 166 - 3 files changed, 330 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h index c10ae7631941..1b1888e8dc14 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/cmsg.h +++ b/drivers/net/ethernet/netronome/nfp/flower/cmsg.h @@ -40,6 +40,147 @@ #include "../nfp_app.h" +#define NFP_FLOWER_LAYER_META BIT(0) +#define NFP_FLOWER_LAYER_PORT BIT(1) +#define NFP_FLOWER_LAYER_MAC BIT(2) +#define NFP_FLOWER_LAYER_TPBIT(3) +#define NFP_FLOWER_LAYER_IPV4 BIT(4) +#define NFP_FLOWER_LAYER_IPV6 BIT(5) +#define NFP_FLOWER_LAYER_CTBIT(6) +#define NFP_FLOWER_LAYER_VXLAN BIT(7) + +#define NFP_FLOWER_LAYER_ETHER BIT(3) +#define NFP_FLOWER_LAYER_ARP BIT(4) + +/* Metadata without L2 (1W/4B) + * + *3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | key_layers |mask_id| reserved| + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_meta_one { + u8 nfp_flow_key_layer; + u8 mask_id; + u16 reserved; +}; + +/* Metadata with L2 (1W/4B) + * + *3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * |key_type |mask_id| PCP |p| vlan outermost VID | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * ^ ^ + * NOTE: | TCI | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_meta_two { + u8 nfp_flow_key_layer; + u8 mask_id; + __be16 tci; +}; + +/* Port details (1W/4B) + * + *3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | port_ingress | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_in_port { + __be32 in_port; +}; + +/* L2 details (4W/16B) + *3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | mac_addr_dst, 31 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | mac_addr_dst, 47 - 32| mac_addr_src, 15 - 0 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | mac_addr_src, 47 - 16 | + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * | mpls outermost label| TC |B| reserved |q| + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_mac_mpls { + u8 mac_dst[6]; + u8 mac_src[6]; + __be32 mpls_lse; +}; + +/* L4 ports (for UDP, TCP, SCTP) (1W/4B) + *3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * |port_src | port_dst| + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + */ +struct nfp_flower_tp_ports { + __be16 port_src; + __be16 port_dst; +}; + +/* L3 IPv4 details (3W/12B) + *3 2 1 + * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * |DSCP |ECN| protocol| reserved| + * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ + * |ipv4_addr_src | + *