From f5ddf5ec64543912737bad276dcd189f97bf54d1 Mon Sep 17 00:00:00 2001 From: Tom Herbert Date: Sun, 14 Aug 2011 19:46:29 +0000 Subject: [PATCH] --- yaml --- r: 265315 b: refs/heads/master c: c6865cb3cc6f3c2857fa4c6f5fda2945d70b1e84 h: refs/heads/master i: 265313: 4fbaa5e140f9fe6797eebbca01477ab9e0be505d 265311: 560fd83e8e37880edb3434c1e15e7faed5a1b23a v: v3 --- [refs] | 2 +- trunk/net/core/dev.c | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 3db991e95dee..01408bcdc6e7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e971b7225bcb1f318811ef04628c441497372999 +refs/heads/master: c6865cb3cc6f3c2857fa4c6f5fda2945d70b1e84 diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c index 4bee9a9aeef6..a8d91a5dd909 100644 --- a/trunk/net/core/dev.c +++ b/trunk/net/core/dev.c @@ -2570,6 +2570,28 @@ void __skb_get_rxhash(struct sk_buff *skb) } switch (ip_proto) { + case IPPROTO_GRE: + if (pskb_may_pull(skb, nhoff + 16)) { + u8 *h = skb->data + nhoff; + __be16 flags = *(__be16 *)h; + + /* + * Only look inside GRE if version zero and no + * routing + */ + if (!(flags & (GRE_VERSION|GRE_ROUTING))) { + proto = *(__be16 *)(h + 2); + nhoff += 4; + if (flags & GRE_CSUM) + nhoff += 4; + if (flags & GRE_KEY) + nhoff += 4; + if (flags & GRE_SEQ) + nhoff += 4; + goto again; + } + } + break; default: break; }