diff options
Diffstat (limited to 'net/8021q')
| -rw-r--r-- | net/8021q/vlan.c | 8 | ||||
| -rw-r--r-- | net/8021q/vlan_core.c | 2 | ||||
| -rw-r--r-- | net/8021q/vlan_dev.c | 18 |
3 files changed, 16 insertions, 12 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 97da977c2a23..3c1c8c14e929 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
| @@ -357,13 +357,13 @@ static void vlan_sync_address(struct net_device *dev, | |||
| 357 | * the new address */ | 357 | * the new address */ |
| 358 | if (compare_ether_addr(vlandev->dev_addr, vlan->real_dev_addr) && | 358 | if (compare_ether_addr(vlandev->dev_addr, vlan->real_dev_addr) && |
| 359 | !compare_ether_addr(vlandev->dev_addr, dev->dev_addr)) | 359 | !compare_ether_addr(vlandev->dev_addr, dev->dev_addr)) |
| 360 | dev_unicast_delete(dev, vlandev->dev_addr); | 360 | dev_uc_del(dev, vlandev->dev_addr); |
| 361 | 361 | ||
| 362 | /* vlan address was equal to the old address and is different from | 362 | /* vlan address was equal to the old address and is different from |
| 363 | * the new address */ | 363 | * the new address */ |
| 364 | if (!compare_ether_addr(vlandev->dev_addr, vlan->real_dev_addr) && | 364 | if (!compare_ether_addr(vlandev->dev_addr, vlan->real_dev_addr) && |
| 365 | compare_ether_addr(vlandev->dev_addr, dev->dev_addr)) | 365 | compare_ether_addr(vlandev->dev_addr, dev->dev_addr)) |
| 366 | dev_unicast_add(dev, vlandev->dev_addr); | 366 | dev_uc_add(dev, vlandev->dev_addr); |
| 367 | 367 | ||
| 368 | memcpy(vlan->real_dev_addr, dev->dev_addr, ETH_ALEN); | 368 | memcpy(vlan->real_dev_addr, dev->dev_addr, ETH_ALEN); |
| 369 | } | 369 | } |
| @@ -533,6 +533,10 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, | |||
| 533 | } | 533 | } |
| 534 | unregister_netdevice_many(&list); | 534 | unregister_netdevice_many(&list); |
| 535 | break; | 535 | break; |
| 536 | |||
| 537 | case NETDEV_PRE_TYPE_CHANGE: | ||
| 538 | /* Forbid underlaying device to change its type. */ | ||
| 539 | return NOTIFY_BAD; | ||
| 536 | } | 540 | } |
| 537 | 541 | ||
| 538 | out: | 542 | out: |
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c index c584a0af77d3..bd537fc10254 100644 --- a/net/8021q/vlan_core.c +++ b/net/8021q/vlan_core.c | |||
| @@ -61,7 +61,7 @@ int vlan_hwaccel_do_receive(struct sk_buff *skb) | |||
| 61 | dev->dev_addr)) | 61 | dev->dev_addr)) |
| 62 | skb->pkt_type = PACKET_HOST; | 62 | skb->pkt_type = PACKET_HOST; |
| 63 | break; | 63 | break; |
| 64 | }; | 64 | } |
| 65 | return 0; | 65 | return 0; |
| 66 | } | 66 | } |
| 67 | 67 | ||
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 29b6348c8d4d..55be90826f5f 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
| @@ -327,7 +327,7 @@ static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb, | |||
| 327 | len = skb->len; | 327 | len = skb->len; |
| 328 | ret = dev_queue_xmit(skb); | 328 | ret = dev_queue_xmit(skb); |
| 329 | 329 | ||
| 330 | if (likely(ret == NET_XMIT_SUCCESS)) { | 330 | if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) { |
| 331 | txq->tx_packets++; | 331 | txq->tx_packets++; |
| 332 | txq->tx_bytes += len; | 332 | txq->tx_bytes += len; |
| 333 | } else | 333 | } else |
| @@ -353,7 +353,7 @@ static netdev_tx_t vlan_dev_hwaccel_hard_start_xmit(struct sk_buff *skb, | |||
| 353 | len = skb->len; | 353 | len = skb->len; |
| 354 | ret = dev_queue_xmit(skb); | 354 | ret = dev_queue_xmit(skb); |
| 355 | 355 | ||
| 356 | if (likely(ret == NET_XMIT_SUCCESS)) { | 356 | if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) { |
| 357 | txq->tx_packets++; | 357 | txq->tx_packets++; |
| 358 | txq->tx_bytes += len; | 358 | txq->tx_bytes += len; |
| 359 | } else | 359 | } else |
| @@ -470,7 +470,7 @@ static int vlan_dev_open(struct net_device *dev) | |||
| 470 | return -ENETDOWN; | 470 | return -ENETDOWN; |
| 471 | 471 | ||
| 472 | if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr)) { | 472 | if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr)) { |
| 473 | err = dev_unicast_add(real_dev, dev->dev_addr); | 473 | err = dev_uc_add(real_dev, dev->dev_addr); |
| 474 | if (err < 0) | 474 | if (err < 0) |
| 475 | goto out; | 475 | goto out; |
| 476 | } | 476 | } |
| @@ -499,7 +499,7 @@ clear_allmulti: | |||
| 499 | dev_set_allmulti(real_dev, -1); | 499 | dev_set_allmulti(real_dev, -1); |
| 500 | del_unicast: | 500 | del_unicast: |
| 501 | if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr)) | 501 | if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr)) |
| 502 | dev_unicast_delete(real_dev, dev->dev_addr); | 502 | dev_uc_del(real_dev, dev->dev_addr); |
| 503 | out: | 503 | out: |
| 504 | netif_carrier_off(dev); | 504 | netif_carrier_off(dev); |
| 505 | return err; | 505 | return err; |
| @@ -514,14 +514,14 @@ static int vlan_dev_stop(struct net_device *dev) | |||
| 514 | vlan_gvrp_request_leave(dev); | 514 | vlan_gvrp_request_leave(dev); |
| 515 | 515 | ||
| 516 | dev_mc_unsync(real_dev, dev); | 516 | dev_mc_unsync(real_dev, dev); |
| 517 | dev_unicast_unsync(real_dev, dev); | 517 | dev_uc_unsync(real_dev, dev); |
| 518 | if (dev->flags & IFF_ALLMULTI) | 518 | if (dev->flags & IFF_ALLMULTI) |
| 519 | dev_set_allmulti(real_dev, -1); | 519 | dev_set_allmulti(real_dev, -1); |
| 520 | if (dev->flags & IFF_PROMISC) | 520 | if (dev->flags & IFF_PROMISC) |
| 521 | dev_set_promiscuity(real_dev, -1); | 521 | dev_set_promiscuity(real_dev, -1); |
| 522 | 522 | ||
| 523 | if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr)) | 523 | if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr)) |
| 524 | dev_unicast_delete(real_dev, dev->dev_addr); | 524 | dev_uc_del(real_dev, dev->dev_addr); |
| 525 | 525 | ||
| 526 | netif_carrier_off(dev); | 526 | netif_carrier_off(dev); |
| 527 | return 0; | 527 | return 0; |
| @@ -540,13 +540,13 @@ static int vlan_dev_set_mac_address(struct net_device *dev, void *p) | |||
| 540 | goto out; | 540 | goto out; |
| 541 | 541 | ||
| 542 | if (compare_ether_addr(addr->sa_data, real_dev->dev_addr)) { | 542 | if (compare_ether_addr(addr->sa_data, real_dev->dev_addr)) { |
| 543 | err = dev_unicast_add(real_dev, addr->sa_data); | 543 | err = dev_uc_add(real_dev, addr->sa_data); |
| 544 | if (err < 0) | 544 | if (err < 0) |
| 545 | return err; | 545 | return err; |
| 546 | } | 546 | } |
| 547 | 547 | ||
| 548 | if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr)) | 548 | if (compare_ether_addr(dev->dev_addr, real_dev->dev_addr)) |
| 549 | dev_unicast_delete(real_dev, dev->dev_addr); | 549 | dev_uc_del(real_dev, dev->dev_addr); |
| 550 | 550 | ||
| 551 | out: | 551 | out: |
| 552 | memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); | 552 | memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); |
| @@ -663,7 +663,7 @@ static void vlan_dev_change_rx_flags(struct net_device *dev, int change) | |||
| 663 | static void vlan_dev_set_rx_mode(struct net_device *vlan_dev) | 663 | static void vlan_dev_set_rx_mode(struct net_device *vlan_dev) |
| 664 | { | 664 | { |
| 665 | dev_mc_sync(vlan_dev_info(vlan_dev)->real_dev, vlan_dev); | 665 | dev_mc_sync(vlan_dev_info(vlan_dev)->real_dev, vlan_dev); |
| 666 | dev_unicast_sync(vlan_dev_info(vlan_dev)->real_dev, vlan_dev); | 666 | dev_uc_sync(vlan_dev_info(vlan_dev)->real_dev, vlan_dev); |
| 667 | } | 667 | } |
| 668 | 668 | ||
| 669 | /* | 669 | /* |
