diff options
Diffstat (limited to 'net/8021q/vlan_dev.c')
-rw-r--r-- | net/8021q/vlan_dev.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 19cf81bf9f69..8af508536d36 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
@@ -99,6 +99,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, | |||
99 | const void *daddr, const void *saddr, | 99 | const void *daddr, const void *saddr, |
100 | unsigned int len) | 100 | unsigned int len) |
101 | { | 101 | { |
102 | struct vlan_dev_priv *vlan = vlan_dev_priv(dev); | ||
102 | struct vlan_hdr *vhdr; | 103 | struct vlan_hdr *vhdr; |
103 | unsigned int vhdrlen = 0; | 104 | unsigned int vhdrlen = 0; |
104 | u16 vlan_tci = 0; | 105 | u16 vlan_tci = 0; |
@@ -120,8 +121,8 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, | |||
120 | else | 121 | else |
121 | vhdr->h_vlan_encapsulated_proto = htons(len); | 122 | vhdr->h_vlan_encapsulated_proto = htons(len); |
122 | 123 | ||
123 | skb->protocol = htons(ETH_P_8021Q); | 124 | skb->protocol = vlan->vlan_proto; |
124 | type = ETH_P_8021Q; | 125 | type = ntohs(vlan->vlan_proto); |
125 | vhdrlen = VLAN_HLEN; | 126 | vhdrlen = VLAN_HLEN; |
126 | } | 127 | } |
127 | 128 | ||
@@ -161,12 +162,12 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb, | |||
161 | * NOTE: THIS ASSUMES DIX ETHERNET, SPECIFICALLY NOT SUPPORTING | 162 | * NOTE: THIS ASSUMES DIX ETHERNET, SPECIFICALLY NOT SUPPORTING |
162 | * OTHER THINGS LIKE FDDI/TokenRing/802.3 SNAPs... | 163 | * OTHER THINGS LIKE FDDI/TokenRing/802.3 SNAPs... |
163 | */ | 164 | */ |
164 | if (veth->h_vlan_proto != htons(ETH_P_8021Q) || | 165 | if (veth->h_vlan_proto != vlan->vlan_proto || |
165 | vlan->flags & VLAN_FLAG_REORDER_HDR) { | 166 | vlan->flags & VLAN_FLAG_REORDER_HDR) { |
166 | u16 vlan_tci; | 167 | u16 vlan_tci; |
167 | vlan_tci = vlan->vlan_id; | 168 | vlan_tci = vlan->vlan_id; |
168 | vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb); | 169 | vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb); |
169 | skb = __vlan_hwaccel_put_tag(skb, vlan_tci); | 170 | skb = __vlan_hwaccel_put_tag(skb, vlan->vlan_proto, vlan_tci); |
170 | } | 171 | } |
171 | 172 | ||
172 | skb->dev = vlan->real_dev; | 173 | skb->dev = vlan->real_dev; |
@@ -583,7 +584,7 @@ static int vlan_dev_init(struct net_device *dev) | |||
583 | #endif | 584 | #endif |
584 | 585 | ||
585 | dev->needed_headroom = real_dev->needed_headroom; | 586 | dev->needed_headroom = real_dev->needed_headroom; |
586 | if (real_dev->features & NETIF_F_HW_VLAN_TX) { | 587 | if (real_dev->features & NETIF_F_HW_VLAN_CTAG_TX) { |
587 | dev->header_ops = real_dev->header_ops; | 588 | dev->header_ops = real_dev->header_ops; |
588 | dev->hard_header_len = real_dev->hard_header_len; | 589 | dev->hard_header_len = real_dev->hard_header_len; |
589 | } else { | 590 | } else { |