aboutsummaryrefslogtreecommitdiffstats
path: root/net/8021q/vlan_dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/8021q/vlan_dev.c')
-rw-r--r--net/8021q/vlan_dev.c47
1 files changed, 23 insertions, 24 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index 2aab294c5744..2ccac6bea57e 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -150,9 +150,9 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev,
150 struct packet_type *ptype, struct net_device *orig_dev) 150 struct packet_type *ptype, struct net_device *orig_dev)
151{ 151{
152 struct vlan_hdr *vhdr; 152 struct vlan_hdr *vhdr;
153 unsigned short vid;
154 struct net_device_stats *stats; 153 struct net_device_stats *stats;
155 unsigned short vlan_TCI; 154 u16 vlan_id;
155 u16 vlan_tci;
156 156
157 skb = skb_share_check(skb, GFP_ATOMIC); 157 skb = skb_share_check(skb, GFP_ATOMIC);
158 if (skb == NULL) 158 if (skb == NULL)
@@ -162,14 +162,14 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev,
162 goto err_free; 162 goto err_free;
163 163
164 vhdr = (struct vlan_hdr *)skb->data; 164 vhdr = (struct vlan_hdr *)skb->data;
165 vlan_TCI = ntohs(vhdr->h_vlan_TCI); 165 vlan_tci = ntohs(vhdr->h_vlan_TCI);
166 vid = (vlan_TCI & VLAN_VID_MASK); 166 vlan_id = vlan_tci & VLAN_VID_MASK;
167 167
168 rcu_read_lock(); 168 rcu_read_lock();
169 skb->dev = __find_vlan_dev(dev, vid); 169 skb->dev = __find_vlan_dev(dev, vlan_id);
170 if (!skb->dev) { 170 if (!skb->dev) {
171 pr_debug("%s: ERROR: No net_device for VID: %u on dev: %s\n", 171 pr_debug("%s: ERROR: No net_device for VID: %u on dev: %s\n",
172 __func__, (unsigned int)vid, dev->name); 172 __func__, vlan_id, dev->name);
173 goto err_unlock; 173 goto err_unlock;
174 } 174 }
175 175
@@ -181,11 +181,10 @@ int vlan_skb_recv(struct sk_buff *skb, struct net_device *dev,
181 181
182 skb_pull_rcsum(skb, VLAN_HLEN); 182 skb_pull_rcsum(skb, VLAN_HLEN);
183 183
184 skb->priority = vlan_get_ingress_priority(skb->dev, 184 skb->priority = vlan_get_ingress_priority(skb->dev, vlan_tci);
185 ntohs(vhdr->h_vlan_TCI));
186 185
187 pr_debug("%s: priority: %u for TCI: %hu\n", 186 pr_debug("%s: priority: %u for TCI: %hu\n",
188 __func__, skb->priority, ntohs(vhdr->h_vlan_TCI)); 187 __func__, skb->priority, vlan_tci);
189 188
190 switch (skb->pkt_type) { 189 switch (skb->pkt_type) {
191 case PACKET_BROADCAST: /* Yeah, stats collect these together.. */ 190 case PACKET_BROADCAST: /* Yeah, stats collect these together.. */
@@ -228,7 +227,7 @@ err_free:
228 return NET_RX_DROP; 227 return NET_RX_DROP;
229} 228}
230 229
231static inline unsigned short 230static inline u16
232vlan_dev_get_egress_qos_mask(struct net_device *dev, struct sk_buff *skb) 231vlan_dev_get_egress_qos_mask(struct net_device *dev, struct sk_buff *skb)
233{ 232{
234 struct vlan_priority_tci_mapping *mp; 233 struct vlan_priority_tci_mapping *mp;
@@ -260,7 +259,7 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
260 unsigned int len) 259 unsigned int len)
261{ 260{
262 struct vlan_hdr *vhdr; 261 struct vlan_hdr *vhdr;
263 unsigned short veth_TCI = 0; 262 u16 vlan_tci = 0;
264 int rc = 0; 263 int rc = 0;
265 int build_vlan_header = 0; 264 int build_vlan_header = 0;
266 struct net_device *vdev = dev; 265 struct net_device *vdev = dev;
@@ -292,10 +291,10 @@ static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
292 * VLAN ID 12 bits (low bits) 291 * VLAN ID 12 bits (low bits)
293 * 292 *
294 */ 293 */
295 veth_TCI = vlan_dev_info(dev)->vlan_id; 294 vlan_tci = vlan_dev_info(dev)->vlan_id;
296 veth_TCI |= vlan_dev_get_egress_qos_mask(dev, skb); 295 vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb);
297 296
298 vhdr->h_vlan_TCI = htons(veth_TCI); 297 vhdr->h_vlan_TCI = htons(vlan_tci);
299 298
300 /* 299 /*
301 * Set the protocol type. For a packet of type ETH_P_802_3 we 300 * Set the protocol type. For a packet of type ETH_P_802_3 we
@@ -373,7 +372,7 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
373 if (veth->h_vlan_proto != htons(ETH_P_8021Q) || 372 if (veth->h_vlan_proto != htons(ETH_P_8021Q) ||
374 vlan_dev_info(dev)->flags & VLAN_FLAG_REORDER_HDR) { 373 vlan_dev_info(dev)->flags & VLAN_FLAG_REORDER_HDR) {
375 int orig_headroom = skb_headroom(skb); 374 int orig_headroom = skb_headroom(skb);
376 unsigned short veth_TCI; 375 u16 vlan_tci;
377 376
378 /* This is not a VLAN frame...but we can fix that! */ 377 /* This is not a VLAN frame...but we can fix that! */
379 vlan_dev_info(dev)->cnt_encap_on_xmit++; 378 vlan_dev_info(dev)->cnt_encap_on_xmit++;
@@ -386,10 +385,10 @@ static int vlan_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
386 * CFI 1 bit 385 * CFI 1 bit
387 * VLAN ID 12 bits (low bits) 386 * VLAN ID 12 bits (low bits)
388 */ 387 */
389 veth_TCI = vlan_dev_info(dev)->vlan_id; 388 vlan_tci = vlan_dev_info(dev)->vlan_id;
390 veth_TCI |= vlan_dev_get_egress_qos_mask(dev, skb); 389 vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb);
391 390
392 skb = __vlan_put_tag(skb, veth_TCI); 391 skb = __vlan_put_tag(skb, vlan_tci);
393 if (!skb) { 392 if (!skb) {
394 stats->tx_dropped++; 393 stats->tx_dropped++;
395 return 0; 394 return 0;
@@ -422,7 +421,7 @@ static int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb,
422 struct net_device *dev) 421 struct net_device *dev)
423{ 422{
424 struct net_device_stats *stats = &dev->stats; 423 struct net_device_stats *stats = &dev->stats;
425 unsigned short veth_TCI; 424 u16 vlan_tci;
426 425
427 /* Construct the second two bytes. This field looks something 426 /* Construct the second two bytes. This field looks something
428 * like: 427 * like:
@@ -430,9 +429,9 @@ static int vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb,
430 * CFI 1 bit 429 * CFI 1 bit
431 * VLAN ID 12 bits (low bits) 430 * VLAN ID 12 bits (low bits)
432 */ 431 */
433 veth_TCI = vlan_dev_info(dev)->vlan_id; 432 vlan_tci = vlan_dev_info(dev)->vlan_id;
434 veth_TCI |= vlan_dev_get_egress_qos_mask(dev, skb); 433 vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb);
435 skb = __vlan_hwaccel_put_tag(skb, veth_TCI); 434 skb = __vlan_hwaccel_put_tag(skb, vlan_tci);
436 435
437 stats->tx_packets++; 436 stats->tx_packets++;
438 stats->tx_bytes += skb->len; 437 stats->tx_bytes += skb->len;
@@ -457,7 +456,7 @@ static int vlan_dev_change_mtu(struct net_device *dev, int new_mtu)
457} 456}
458 457
459void vlan_dev_set_ingress_priority(const struct net_device *dev, 458void vlan_dev_set_ingress_priority(const struct net_device *dev,
460 u32 skb_prio, short vlan_prio) 459 u32 skb_prio, u16 vlan_prio)
461{ 460{
462 struct vlan_dev_info *vlan = vlan_dev_info(dev); 461 struct vlan_dev_info *vlan = vlan_dev_info(dev);
463 462
@@ -470,7 +469,7 @@ void vlan_dev_set_ingress_priority(const struct net_device *dev,
470} 469}
471 470
472int vlan_dev_set_egress_priority(const struct net_device *dev, 471int vlan_dev_set_egress_priority(const struct net_device *dev,
473 u32 skb_prio, short vlan_prio) 472 u32 skb_prio, u16 vlan_prio)
474{ 473{
475 struct vlan_dev_info *vlan = vlan_dev_info(dev); 474 struct vlan_dev_info *vlan = vlan_dev_info(dev);
476 struct vlan_priority_tci_mapping *mp = NULL; 475 struct vlan_priority_tci_mapping *mp = NULL;