diff options
author | Tom Herbert <tom@herbertland.com> | 2015-06-04 09:16:36 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-06-04 15:44:30 -0700 |
commit | ce3b5355477ce99bffa60a6a215f2e11db4b649c (patch) | |
tree | 6093434cce0554125a03988266c3f9a30292180f /net/core | |
parent | ffaa31d7945f14edb04d7b2792a1dbd3a854a2bc (diff) | |
download | op-kernel-dev-ce3b5355477ce99bffa60a6a215f2e11db4b649c.zip op-kernel-dev-ce3b5355477ce99bffa60a6a215f2e11db4b649c.tar.gz |
net: Simplify GRE case in flow_dissector
Do break when we see routing flag or a non-zero version number in GRE
header.
Acked-by: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: Tom Herbert <tom@herbertland.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/flow_dissector.c | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 1f2d893..7f69916 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -308,30 +308,30 @@ flow_label: * Only look inside GRE if version zero and no * routing */ - if (!(hdr->flags & (GRE_VERSION|GRE_ROUTING))) { - proto = hdr->proto; + if (hdr->flags & (GRE_VERSION | GRE_ROUTING)) + break; + + proto = hdr->proto; + nhoff += 4; + if (hdr->flags & GRE_CSUM) nhoff += 4; - if (hdr->flags & GRE_CSUM) - nhoff += 4; - if (hdr->flags & GRE_KEY) - nhoff += 4; - if (hdr->flags & GRE_SEQ) - nhoff += 4; - if (proto == htons(ETH_P_TEB)) { - const struct ethhdr *eth; - struct ethhdr _eth; - - eth = __skb_header_pointer(skb, nhoff, - sizeof(_eth), - data, hlen, &_eth); - if (!eth) - return false; - proto = eth->h_proto; - nhoff += sizeof(*eth); - } - goto again; + if (hdr->flags & GRE_KEY) + nhoff += 4; + if (hdr->flags & GRE_SEQ) + nhoff += 4; + if (proto == htons(ETH_P_TEB)) { + const struct ethhdr *eth; + struct ethhdr _eth; + + eth = __skb_header_pointer(skb, nhoff, + sizeof(_eth), + data, hlen, &_eth); + if (!eth) + return false; + proto = eth->h_proto; + nhoff += sizeof(*eth); } - break; + goto again; } case IPPROTO_IPIP: proto = htons(ETH_P_IP); |