From 93f14c2f353e1a5700f59059d7e6d2fa976b8588 Mon Sep 17 00:00:00 2001 From: Changli Gao Date: Thu, 18 Aug 2011 22:07:54 -0700 Subject: [PATCH] --- yaml --- r: 265334 b: refs/heads/master c: 1ff1986fc94ee711df3cf19d45f2abf351436a6d h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/core/dev.c | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 651ce6c15f99..cc3c57660d11 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 939cf3069d31a6e0e335eb5e08ef04895f2d013d +refs/heads/master: 1ff1986fc94ee711df3cf19d45f2abf351436a6d diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c index ead0366ee1e4..be7ee506f17a 100644 --- a/trunk/net/core/dev.c +++ b/trunk/net/core/dev.c @@ -2529,6 +2529,7 @@ void __skb_get_rxhash(struct sk_buff *skb) int nhoff, hash = 0, poff; const struct ipv6hdr *ip6; const struct iphdr *ip; + const struct vlan_hdr *vlan; u8 ip_proto; u32 addr1, addr2; u16 proto; @@ -2565,6 +2566,13 @@ void __skb_get_rxhash(struct sk_buff *skb) addr2 = (__force u32) ip6->daddr.s6_addr32[3]; nhoff += 40; break; + case __constant_htons(ETH_P_8021Q): + if (!pskb_may_pull(skb, sizeof(*vlan) + nhoff)) + goto done; + vlan = (const struct vlan_hdr *) (skb->data + nhoff); + proto = vlan->h_vlan_encapsulated_proto; + nhoff += sizeof(*vlan); + goto again; default: goto done; }