Message ID | 20181210230343.12382-1-jakub.kicinski@netronome.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net] nfp: flower: ensure TCP flags can be placed in IPv6 frame | expand |
On Mon, 10 Dec 2018 15:03:43 -0800, Jakub Kicinski wrote: > From: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> > > Previously we did not ensure tcp flags have a place to be stored > when using IPv6. We correct this by including IPv6 key layer when > we match tcp flags and the IPv6 key layer has not been included > already. Fixes: 07e1671cfca5 ("nfp: flower: refactor shared ip header in match offload") > Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> > Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com>
From: Jakub Kicinski <jakub.kicinski@netronome.com> Date: Mon, 10 Dec 2018 15:03:43 -0800 > From: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> > > Previously we did not ensure tcp flags have a place to be stored > when using IPv6. We correct this by including IPv6 key layer when > we match tcp flags and the IPv6 key layer has not been included > already. > > Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> > Reviewed-by: Jakub Kicinski <jakub.kicinski@netronome.com> Applied with missing Fixes: tag added and queued up for -stbale. Thanks.
diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c index 2f49eb75f3cc..67e576fe7fc0 100644 --- a/drivers/net/ethernet/netronome/nfp/flower/offload.c +++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c @@ -345,13 +345,29 @@ nfp_flower_calculate_key_layers(struct nfp_app *app, !(tcp_flags & (TCPHDR_FIN | TCPHDR_SYN | TCPHDR_RST))) return -EOPNOTSUPP; - /* We need to store TCP flags in the IPv4 key space, thus - * we need to ensure we include a IPv4 key layer if we have - * not done so already. + /* We need to store TCP flags in the either the IPv4 or IPv6 key + * space, thus we need to ensure we include a IPv4/IPv6 key + * layer if we have not done so already. */ - if (!(key_layer & NFP_FLOWER_LAYER_IPV4)) { - key_layer |= NFP_FLOWER_LAYER_IPV4; - key_size += sizeof(struct nfp_flower_ipv4); + if (!key_basic) + return -EOPNOTSUPP; + + if (!(key_layer & NFP_FLOWER_LAYER_IPV4) && + !(key_layer & NFP_FLOWER_LAYER_IPV6)) { + switch (key_basic->n_proto) { + case cpu_to_be16(ETH_P_IP): + key_layer |= NFP_FLOWER_LAYER_IPV4; + key_size += sizeof(struct nfp_flower_ipv4); + break; + + case cpu_to_be16(ETH_P_IPV6): + key_layer |= NFP_FLOWER_LAYER_IPV6; + key_size += sizeof(struct nfp_flower_ipv6); + break; + + default: + return -EOPNOTSUPP; + } } }