diff options
Diffstat (limited to 'net/8021q/vlan_core.c')
| -rw-r--r-- | net/8021q/vlan_core.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c index 4e4c360353e..bdb0b9d2e9c 100644 --- a/net/8021q/vlan_core.c +++ b/net/8021q/vlan_core.c @@ -8,11 +8,12 @@  bool vlan_do_receive(struct sk_buff **skbp)  {  	struct sk_buff *skb = *skbp; +	__be16 vlan_proto = skb->vlan_proto;  	u16 vlan_id = skb->vlan_tci & VLAN_VID_MASK;  	struct net_device *vlan_dev;  	struct vlan_pcpu_stats *rx_stats; -	vlan_dev = vlan_find_dev(skb->dev, htons(ETH_P_8021Q), vlan_id); +	vlan_dev = vlan_find_dev(skb->dev, vlan_proto, vlan_id);  	if (!vlan_dev)  		return false; @@ -38,7 +39,8 @@ bool vlan_do_receive(struct sk_buff **skbp)  		 * original position later  		 */  		skb_push(skb, offset); -		skb = *skbp = vlan_insert_tag(skb, skb->vlan_tci); +		skb = *skbp = vlan_insert_tag(skb, skb->vlan_proto, +					      skb->vlan_tci);  		if (!skb)  			return false;  		skb_pull(skb, offset + VLAN_HLEN); @@ -127,7 +129,7 @@ struct sk_buff *vlan_untag(struct sk_buff *skb)  	vhdr = (struct vlan_hdr *) skb->data;  	vlan_tci = ntohs(vhdr->h_vlan_TCI); -	__vlan_hwaccel_put_tag(skb, vlan_tci); +	__vlan_hwaccel_put_tag(skb, skb->protocol, vlan_tci);  	skb_pull_rcsum(skb, VLAN_HLEN);  	vlan_set_encap_proto(skb, vhdr);  |