net: rps: support 802.1Q
For the 802.1Q packets, if the NIC doesn't support hw-accel-vlan-rx, RPS won't inspect the internal 4 tuples to generate skb->rxhash, so this kind of traffic can't get any benefit from RPS. This patch adds the support for 802.1Q to RPS. Signed-off-by: Changli Gao <xiaosuo@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
939cf3069d
commit
1ff1986fc9
1 changed files with 8 additions and 0 deletions
|
@ -2529,6 +2529,7 @@ void __skb_get_rxhash(struct sk_buff *skb)
|
||||||
int nhoff, hash = 0, poff;
|
int nhoff, hash = 0, poff;
|
||||||
const struct ipv6hdr *ip6;
|
const struct ipv6hdr *ip6;
|
||||||
const struct iphdr *ip;
|
const struct iphdr *ip;
|
||||||
|
const struct vlan_hdr *vlan;
|
||||||
u8 ip_proto;
|
u8 ip_proto;
|
||||||
u32 addr1, addr2;
|
u32 addr1, addr2;
|
||||||
u16 proto;
|
u16 proto;
|
||||||
|
@ -2565,6 +2566,13 @@ void __skb_get_rxhash(struct sk_buff *skb)
|
||||||
addr2 = (__force u32) ip6->daddr.s6_addr32[3];
|
addr2 = (__force u32) ip6->daddr.s6_addr32[3];
|
||||||
nhoff += 40;
|
nhoff += 40;
|
||||||
break;
|
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:
|
default:
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue