vlan_dev.c (bd072111e7319d90a7b8127f91c2806b9a6f279e) vlan_dev.c (b85daa5324a3c9e560a4351c17d18f49c647eb5c)
1/* -*- linux-c -*-
2 * INET 802.1Q VLAN
3 * Ethernet-type device handling.
4 *
5 * Authors: Ben Greear <greearb@candelatech.com>
6 * Please send support related email to: netdev@vger.kernel.org
7 * VLAN Home Page: http://www.candelatech.com/~greear/vlan.html
8 *

--- 547 unchanged lines hidden (view full) ---

556 int err = 0;
557
558 if (netif_device_present(real_dev) && ops->ndo_neigh_setup)
559 err = ops->ndo_neigh_setup(real_dev, pa);
560
561 return err;
562}
563
1/* -*- linux-c -*-
2 * INET 802.1Q VLAN
3 * Ethernet-type device handling.
4 *
5 * Authors: Ben Greear <greearb@candelatech.com>
6 * Please send support related email to: netdev@vger.kernel.org
7 * VLAN Home Page: http://www.candelatech.com/~greear/vlan.html
8 *

--- 547 unchanged lines hidden (view full) ---

556 int err = 0;
557
558 if (netif_device_present(real_dev) && ops->ndo_neigh_setup)
559 err = ops->ndo_neigh_setup(real_dev, pa);
560
561 return err;
562}
563
564#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
565static int vlan_dev_fcoe_ddp_setup(struct net_device *dev, u16 xid,
566 struct scatterlist *sgl, unsigned int sgc)
567{
568 struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
569 const struct net_device_ops *ops = real_dev->netdev_ops;
570 int rc = 0;
571
572 if (ops->ndo_fcoe_ddp_setup)
573 rc = ops->ndo_fcoe_ddp_setup(real_dev, xid, sgl, sgc);
574
575 return rc;
576}
577
578static int vlan_dev_fcoe_ddp_done(struct net_device *dev, u16 xid)
579{
580 struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
581 const struct net_device_ops *ops = real_dev->netdev_ops;
582 int len = 0;
583
584 if (ops->ndo_fcoe_ddp_done)
585 len = ops->ndo_fcoe_ddp_done(real_dev, xid);
586
587 return len;
588}
589#endif
590
564static void vlan_dev_change_rx_flags(struct net_device *dev, int change)
565{
566 struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
567
568 if (change & IFF_ALLMULTI)
569 dev_set_allmulti(real_dev, dev->flags & IFF_ALLMULTI ? 1 : -1);
570 if (change & IFF_PROMISC)
571 dev_set_promiscuity(real_dev, dev->flags & IFF_PROMISC ? 1 : -1);

--- 58 unchanged lines hidden (view full) ---

630 /* ipv6 shared card related stuff */
631 dev->dev_id = real_dev->dev_id;
632
633 if (is_zero_ether_addr(dev->dev_addr))
634 memcpy(dev->dev_addr, real_dev->dev_addr, dev->addr_len);
635 if (is_zero_ether_addr(dev->broadcast))
636 memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len);
637
591static void vlan_dev_change_rx_flags(struct net_device *dev, int change)
592{
593 struct net_device *real_dev = vlan_dev_info(dev)->real_dev;
594
595 if (change & IFF_ALLMULTI)
596 dev_set_allmulti(real_dev, dev->flags & IFF_ALLMULTI ? 1 : -1);
597 if (change & IFF_PROMISC)
598 dev_set_promiscuity(real_dev, dev->flags & IFF_PROMISC ? 1 : -1);

--- 58 unchanged lines hidden (view full) ---

657 /* ipv6 shared card related stuff */
658 dev->dev_id = real_dev->dev_id;
659
660 if (is_zero_ether_addr(dev->dev_addr))
661 memcpy(dev->dev_addr, real_dev->dev_addr, dev->addr_len);
662 if (is_zero_ether_addr(dev->broadcast))
663 memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len);
664
665#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
666 dev->fcoe_ddp_xid = real_dev->fcoe_ddp_xid;
667#endif
668
638 if (real_dev->features & NETIF_F_HW_VLAN_TX) {
639 dev->header_ops = real_dev->header_ops;
640 dev->hard_header_len = real_dev->hard_header_len;
641 dev->netdev_ops = &vlan_netdev_accel_ops;
642 } else {
643 dev->header_ops = &vlan_header_ops;
644 dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
645 dev->netdev_ops = &vlan_netdev_ops;

--- 64 unchanged lines hidden (view full) ---

710 .ndo_start_xmit = vlan_dev_hard_start_xmit,
711 .ndo_validate_addr = eth_validate_addr,
712 .ndo_set_mac_address = vlan_dev_set_mac_address,
713 .ndo_set_rx_mode = vlan_dev_set_rx_mode,
714 .ndo_set_multicast_list = vlan_dev_set_rx_mode,
715 .ndo_change_rx_flags = vlan_dev_change_rx_flags,
716 .ndo_do_ioctl = vlan_dev_ioctl,
717 .ndo_neigh_setup = vlan_dev_neigh_setup,
669 if (real_dev->features & NETIF_F_HW_VLAN_TX) {
670 dev->header_ops = real_dev->header_ops;
671 dev->hard_header_len = real_dev->hard_header_len;
672 dev->netdev_ops = &vlan_netdev_accel_ops;
673 } else {
674 dev->header_ops = &vlan_header_ops;
675 dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
676 dev->netdev_ops = &vlan_netdev_ops;

--- 64 unchanged lines hidden (view full) ---

741 .ndo_start_xmit = vlan_dev_hard_start_xmit,
742 .ndo_validate_addr = eth_validate_addr,
743 .ndo_set_mac_address = vlan_dev_set_mac_address,
744 .ndo_set_rx_mode = vlan_dev_set_rx_mode,
745 .ndo_set_multicast_list = vlan_dev_set_rx_mode,
746 .ndo_change_rx_flags = vlan_dev_change_rx_flags,
747 .ndo_do_ioctl = vlan_dev_ioctl,
748 .ndo_neigh_setup = vlan_dev_neigh_setup,
749#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
750 .ndo_fcoe_ddp_setup = vlan_dev_fcoe_ddp_setup,
751 .ndo_fcoe_ddp_done = vlan_dev_fcoe_ddp_done,
752#endif
718};
719
720static const struct net_device_ops vlan_netdev_accel_ops = {
721 .ndo_change_mtu = vlan_dev_change_mtu,
722 .ndo_init = vlan_dev_init,
723 .ndo_uninit = vlan_dev_uninit,
724 .ndo_open = vlan_dev_open,
725 .ndo_stop = vlan_dev_stop,
726 .ndo_start_xmit = vlan_dev_hwaccel_hard_start_xmit,
727 .ndo_validate_addr = eth_validate_addr,
728 .ndo_set_mac_address = vlan_dev_set_mac_address,
729 .ndo_set_rx_mode = vlan_dev_set_rx_mode,
730 .ndo_set_multicast_list = vlan_dev_set_rx_mode,
731 .ndo_change_rx_flags = vlan_dev_change_rx_flags,
732 .ndo_do_ioctl = vlan_dev_ioctl,
733 .ndo_neigh_setup = vlan_dev_neigh_setup,
753};
754
755static const struct net_device_ops vlan_netdev_accel_ops = {
756 .ndo_change_mtu = vlan_dev_change_mtu,
757 .ndo_init = vlan_dev_init,
758 .ndo_uninit = vlan_dev_uninit,
759 .ndo_open = vlan_dev_open,
760 .ndo_stop = vlan_dev_stop,
761 .ndo_start_xmit = vlan_dev_hwaccel_hard_start_xmit,
762 .ndo_validate_addr = eth_validate_addr,
763 .ndo_set_mac_address = vlan_dev_set_mac_address,
764 .ndo_set_rx_mode = vlan_dev_set_rx_mode,
765 .ndo_set_multicast_list = vlan_dev_set_rx_mode,
766 .ndo_change_rx_flags = vlan_dev_change_rx_flags,
767 .ndo_do_ioctl = vlan_dev_ioctl,
768 .ndo_neigh_setup = vlan_dev_neigh_setup,
769#if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
770 .ndo_fcoe_ddp_setup = vlan_dev_fcoe_ddp_setup,
771 .ndo_fcoe_ddp_done = vlan_dev_fcoe_ddp_done,
772#endif
734};
735
736void vlan_setup(struct net_device *dev)
737{
738 ether_setup(dev);
739
740 dev->priv_flags |= IFF_802_1Q_VLAN;
741 dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
742 dev->tx_queue_len = 0;
743
744 dev->netdev_ops = &vlan_netdev_ops;
745 dev->destructor = free_netdev;
746 dev->ethtool_ops = &vlan_ethtool_ops;
747
748 memset(dev->broadcast, 0, ETH_ALEN);
749}
773};
774
775void vlan_setup(struct net_device *dev)
776{
777 ether_setup(dev);
778
779 dev->priv_flags |= IFF_802_1Q_VLAN;
780 dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
781 dev->tx_queue_len = 0;
782
783 dev->netdev_ops = &vlan_netdev_ops;
784 dev->destructor = free_netdev;
785 dev->ethtool_ops = &vlan_ethtool_ops;
786
787 memset(dev->broadcast, 0, ETH_ALEN);
788}