linux/net/8021q/vlan_dev.c
<<
>>
Prefs
   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 *
   9 * Fixes:       Mar 22 2001: Martin Bokaemper <mbokaemper@unispherenetworks.com>
  10 *                - reset skb->pkt_type on incoming packets when MAC was changed
  11 *                - see that changed MAC is saddr for outgoing packets
  12 *              Oct 20, 2001:  Ard van Breeman:
  13 *                - Fix MC-list, finally.
  14 *                - Flush MC-list on VLAN destroy.
  15 *
  16 *
  17 *              This program is free software; you can redistribute it and/or
  18 *              modify it under the terms of the GNU General Public License
  19 *              as published by the Free Software Foundation; either version
  20 *              2 of the License, or (at your option) any later version.
  21 */
  22
  23#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  24
  25#include <linux/module.h>
  26#include <linux/slab.h>
  27#include <linux/skbuff.h>
  28#include <linux/netdevice.h>
  29#include <linux/etherdevice.h>
  30#include <linux/ethtool.h>
  31#include <net/arp.h>
  32
  33#include "vlan.h"
  34#include "vlanproc.h"
  35#include <linux/if_vlan.h>
  36#include <linux/netpoll.h>
  37
  38/*
  39 *      Rebuild the Ethernet MAC header. This is called after an ARP
  40 *      (or in future other address resolution) has completed on this
  41 *      sk_buff. We now let ARP fill in the other fields.
  42 *
  43 *      This routine CANNOT use cached dst->neigh!
  44 *      Really, it is used only when dst->neigh is wrong.
  45 *
  46 * TODO:  This needs a checkup, I'm ignorant here. --BLG
  47 */
  48static int vlan_dev_rebuild_header(struct sk_buff *skb)
  49{
  50        struct net_device *dev = skb->dev;
  51        struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data);
  52
  53        switch (veth->h_vlan_encapsulated_proto) {
  54#ifdef CONFIG_INET
  55        case htons(ETH_P_IP):
  56
  57                /* TODO:  Confirm this will work with VLAN headers... */
  58                return arp_find(veth->h_dest, skb);
  59#endif
  60        default:
  61                pr_debug("%s: unable to resolve type %X addresses\n",
  62                         dev->name, ntohs(veth->h_vlan_encapsulated_proto));
  63
  64                ether_addr_copy(veth->h_source, dev->dev_addr);
  65                break;
  66        }
  67
  68        return 0;
  69}
  70
  71/*
  72 *      Create the VLAN header for an arbitrary protocol layer
  73 *
  74 *      saddr=NULL      means use device source address
  75 *      daddr=NULL      means leave destination address (eg unresolved arp)
  76 *
  77 *  This is called when the SKB is moving down the stack towards the
  78 *  physical devices.
  79 */
  80static int vlan_dev_hard_header(struct sk_buff *skb, struct net_device *dev,
  81                                unsigned short type,
  82                                const void *daddr, const void *saddr,
  83                                unsigned int len)
  84{
  85        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
  86        struct vlan_hdr *vhdr;
  87        unsigned int vhdrlen = 0;
  88        u16 vlan_tci = 0;
  89        int rc;
  90
  91        if (!(vlan->flags & VLAN_FLAG_REORDER_HDR)) {
  92                vhdr = (struct vlan_hdr *) skb_push(skb, VLAN_HLEN);
  93
  94                vlan_tci = vlan->vlan_id;
  95                vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb->priority);
  96                vhdr->h_vlan_TCI = htons(vlan_tci);
  97
  98                /*
  99                 *  Set the protocol type. For a packet of type ETH_P_802_3/2 we
 100                 *  put the length in here instead.
 101                 */
 102                if (type != ETH_P_802_3 && type != ETH_P_802_2)
 103                        vhdr->h_vlan_encapsulated_proto = htons(type);
 104                else
 105                        vhdr->h_vlan_encapsulated_proto = htons(len);
 106
 107                skb->protocol = vlan->vlan_proto;
 108                type = ntohs(vlan->vlan_proto);
 109                vhdrlen = VLAN_HLEN;
 110        }
 111
 112        /* Before delegating work to the lower layer, enter our MAC-address */
 113        if (saddr == NULL)
 114                saddr = dev->dev_addr;
 115
 116        /* Now make the underlying real hard header */
 117        dev = vlan->real_dev;
 118        rc = dev_hard_header(skb, dev, type, daddr, saddr, len + vhdrlen);
 119        if (rc > 0)
 120                rc += vhdrlen;
 121        return rc;
 122}
 123
 124static inline netdev_tx_t vlan_netpoll_send_skb(struct vlan_dev_priv *vlan, struct sk_buff *skb)
 125{
 126#ifdef CONFIG_NET_POLL_CONTROLLER
 127        if (vlan->netpoll)
 128                netpoll_send_skb(vlan->netpoll, skb);
 129#else
 130        BUG();
 131#endif
 132        return NETDEV_TX_OK;
 133}
 134
 135static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,
 136                                            struct net_device *dev)
 137{
 138        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 139        struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data);
 140        unsigned int len;
 141        int ret;
 142
 143        /* Handle non-VLAN frames if they are sent to us, for example by DHCP.
 144         *
 145         * NOTE: THIS ASSUMES DIX ETHERNET, SPECIFICALLY NOT SUPPORTING
 146         * OTHER THINGS LIKE FDDI/TokenRing/802.3 SNAPs...
 147         */
 148        if (veth->h_vlan_proto != vlan->vlan_proto ||
 149            vlan->flags & VLAN_FLAG_REORDER_HDR) {
 150                u16 vlan_tci;
 151                vlan_tci = vlan->vlan_id;
 152                vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb->priority);
 153                skb = __vlan_hwaccel_put_tag(skb, vlan->vlan_proto, vlan_tci);
 154        }
 155
 156        skb->dev = vlan->real_dev;
 157        len = skb->len;
 158        if (unlikely(netpoll_tx_running(dev)))
 159                return vlan_netpoll_send_skb(vlan, skb);
 160
 161        ret = dev_queue_xmit(skb);
 162
 163        if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) {
 164                struct vlan_pcpu_stats *stats;
 165
 166                stats = this_cpu_ptr(vlan->vlan_pcpu_stats);
 167                u64_stats_update_begin(&stats->syncp);
 168                stats->tx_packets++;
 169                stats->tx_bytes += len;
 170                u64_stats_update_end(&stats->syncp);
 171        } else {
 172                this_cpu_inc(vlan->vlan_pcpu_stats->tx_dropped);
 173        }
 174
 175        return ret;
 176}
 177
 178static int vlan_dev_change_mtu(struct net_device *dev, int new_mtu)
 179{
 180        /* TODO: gotta make sure the underlying layer can handle it,
 181         * maybe an IFF_VLAN_CAPABLE flag for devices?
 182         */
 183        if (vlan_dev_priv(dev)->real_dev->mtu < new_mtu)
 184                return -ERANGE;
 185
 186        dev->mtu = new_mtu;
 187
 188        return 0;
 189}
 190
 191void vlan_dev_set_ingress_priority(const struct net_device *dev,
 192                                   u32 skb_prio, u16 vlan_prio)
 193{
 194        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 195
 196        if (vlan->ingress_priority_map[vlan_prio & 0x7] && !skb_prio)
 197                vlan->nr_ingress_mappings--;
 198        else if (!vlan->ingress_priority_map[vlan_prio & 0x7] && skb_prio)
 199                vlan->nr_ingress_mappings++;
 200
 201        vlan->ingress_priority_map[vlan_prio & 0x7] = skb_prio;
 202}
 203
 204int vlan_dev_set_egress_priority(const struct net_device *dev,
 205                                 u32 skb_prio, u16 vlan_prio)
 206{
 207        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 208        struct vlan_priority_tci_mapping *mp = NULL;
 209        struct vlan_priority_tci_mapping *np;
 210        u32 vlan_qos = (vlan_prio << VLAN_PRIO_SHIFT) & VLAN_PRIO_MASK;
 211
 212        /* See if a priority mapping exists.. */
 213        mp = vlan->egress_priority_map[skb_prio & 0xF];
 214        while (mp) {
 215                if (mp->priority == skb_prio) {
 216                        if (mp->vlan_qos && !vlan_qos)
 217                                vlan->nr_egress_mappings--;
 218                        else if (!mp->vlan_qos && vlan_qos)
 219                                vlan->nr_egress_mappings++;
 220                        mp->vlan_qos = vlan_qos;
 221                        return 0;
 222                }
 223                mp = mp->next;
 224        }
 225
 226        /* Create a new mapping then. */
 227        mp = vlan->egress_priority_map[skb_prio & 0xF];
 228        np = kmalloc(sizeof(struct vlan_priority_tci_mapping), GFP_KERNEL);
 229        if (!np)
 230                return -ENOBUFS;
 231
 232        np->next = mp;
 233        np->priority = skb_prio;
 234        np->vlan_qos = vlan_qos;
 235        /* Before inserting this element in hash table, make sure all its fields
 236         * are committed to memory.
 237         * coupled with smp_rmb() in vlan_dev_get_egress_qos_mask()
 238         */
 239        smp_wmb();
 240        vlan->egress_priority_map[skb_prio & 0xF] = np;
 241        if (vlan_qos)
 242                vlan->nr_egress_mappings++;
 243        return 0;
 244}
 245
 246/* Flags are defined in the vlan_flags enum in include/linux/if_vlan.h file. */
 247int vlan_dev_change_flags(const struct net_device *dev, u32 flags, u32 mask)
 248{
 249        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 250        u32 old_flags = vlan->flags;
 251
 252        if (mask & ~(VLAN_FLAG_REORDER_HDR | VLAN_FLAG_GVRP |
 253                     VLAN_FLAG_LOOSE_BINDING | VLAN_FLAG_MVRP))
 254                return -EINVAL;
 255
 256        vlan->flags = (old_flags & ~mask) | (flags & mask);
 257
 258        if (netif_running(dev) && (vlan->flags ^ old_flags) & VLAN_FLAG_GVRP) {
 259                if (vlan->flags & VLAN_FLAG_GVRP)
 260                        vlan_gvrp_request_join(dev);
 261                else
 262                        vlan_gvrp_request_leave(dev);
 263        }
 264
 265        if (netif_running(dev) && (vlan->flags ^ old_flags) & VLAN_FLAG_MVRP) {
 266                if (vlan->flags & VLAN_FLAG_MVRP)
 267                        vlan_mvrp_request_join(dev);
 268                else
 269                        vlan_mvrp_request_leave(dev);
 270        }
 271        return 0;
 272}
 273
 274void vlan_dev_get_realdev_name(const struct net_device *dev, char *result)
 275{
 276        strncpy(result, vlan_dev_priv(dev)->real_dev->name, 23);
 277}
 278
 279static int vlan_dev_open(struct net_device *dev)
 280{
 281        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 282        struct net_device *real_dev = vlan->real_dev;
 283        int err;
 284
 285        if (!(real_dev->flags & IFF_UP) &&
 286            !(vlan->flags & VLAN_FLAG_LOOSE_BINDING))
 287                return -ENETDOWN;
 288
 289        if (!ether_addr_equal(dev->dev_addr, real_dev->dev_addr)) {
 290                err = dev_uc_add(real_dev, dev->dev_addr);
 291                if (err < 0)
 292                        goto out;
 293        }
 294
 295        if (dev->flags & IFF_ALLMULTI) {
 296                err = dev_set_allmulti(real_dev, 1);
 297                if (err < 0)
 298                        goto del_unicast;
 299        }
 300        if (dev->flags & IFF_PROMISC) {
 301                err = dev_set_promiscuity(real_dev, 1);
 302                if (err < 0)
 303                        goto clear_allmulti;
 304        }
 305
 306        ether_addr_copy(vlan->real_dev_addr, real_dev->dev_addr);
 307
 308        if (vlan->flags & VLAN_FLAG_GVRP)
 309                vlan_gvrp_request_join(dev);
 310
 311        if (vlan->flags & VLAN_FLAG_MVRP)
 312                vlan_mvrp_request_join(dev);
 313
 314        if (netif_carrier_ok(real_dev))
 315                netif_carrier_on(dev);
 316        return 0;
 317
 318clear_allmulti:
 319        if (dev->flags & IFF_ALLMULTI)
 320                dev_set_allmulti(real_dev, -1);
 321del_unicast:
 322        if (!ether_addr_equal(dev->dev_addr, real_dev->dev_addr))
 323                dev_uc_del(real_dev, dev->dev_addr);
 324out:
 325        netif_carrier_off(dev);
 326        return err;
 327}
 328
 329static int vlan_dev_stop(struct net_device *dev)
 330{
 331        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 332        struct net_device *real_dev = vlan->real_dev;
 333
 334        dev_mc_unsync(real_dev, dev);
 335        dev_uc_unsync(real_dev, dev);
 336        if (dev->flags & IFF_ALLMULTI)
 337                dev_set_allmulti(real_dev, -1);
 338        if (dev->flags & IFF_PROMISC)
 339                dev_set_promiscuity(real_dev, -1);
 340
 341        if (!ether_addr_equal(dev->dev_addr, real_dev->dev_addr))
 342                dev_uc_del(real_dev, dev->dev_addr);
 343
 344        netif_carrier_off(dev);
 345        return 0;
 346}
 347
 348static int vlan_dev_set_mac_address(struct net_device *dev, void *p)
 349{
 350        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 351        struct sockaddr *addr = p;
 352        int err;
 353
 354        if (!is_valid_ether_addr(addr->sa_data))
 355                return -EADDRNOTAVAIL;
 356
 357        if (!(dev->flags & IFF_UP))
 358                goto out;
 359
 360        if (!ether_addr_equal(addr->sa_data, real_dev->dev_addr)) {
 361                err = dev_uc_add(real_dev, addr->sa_data);
 362                if (err < 0)
 363                        return err;
 364        }
 365
 366        if (!ether_addr_equal(dev->dev_addr, real_dev->dev_addr))
 367                dev_uc_del(real_dev, dev->dev_addr);
 368
 369out:
 370        ether_addr_copy(dev->dev_addr, addr->sa_data);
 371        return 0;
 372}
 373
 374static int vlan_dev_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 375{
 376        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 377        const struct net_device_ops *ops = real_dev->netdev_ops;
 378        struct ifreq ifrr;
 379        int err = -EOPNOTSUPP;
 380
 381        strncpy(ifrr.ifr_name, real_dev->name, IFNAMSIZ);
 382        ifrr.ifr_ifru = ifr->ifr_ifru;
 383
 384        switch (cmd) {
 385        case SIOCGMIIPHY:
 386        case SIOCGMIIREG:
 387        case SIOCSMIIREG:
 388                if (netif_device_present(real_dev) && ops->ndo_do_ioctl)
 389                        err = ops->ndo_do_ioctl(real_dev, &ifrr, cmd);
 390                break;
 391        }
 392
 393        if (!err)
 394                ifr->ifr_ifru = ifrr.ifr_ifru;
 395
 396        return err;
 397}
 398
 399static int vlan_dev_neigh_setup(struct net_device *dev, struct neigh_parms *pa)
 400{
 401        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 402        const struct net_device_ops *ops = real_dev->netdev_ops;
 403        int err = 0;
 404
 405        if (netif_device_present(real_dev) && ops->ndo_neigh_setup)
 406                err = ops->ndo_neigh_setup(real_dev, pa);
 407
 408        return err;
 409}
 410
 411#if IS_ENABLED(CONFIG_FCOE)
 412static int vlan_dev_fcoe_ddp_setup(struct net_device *dev, u16 xid,
 413                                   struct scatterlist *sgl, unsigned int sgc)
 414{
 415        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 416        const struct net_device_ops *ops = real_dev->netdev_ops;
 417        int rc = 0;
 418
 419        if (ops->ndo_fcoe_ddp_setup)
 420                rc = ops->ndo_fcoe_ddp_setup(real_dev, xid, sgl, sgc);
 421
 422        return rc;
 423}
 424
 425static int vlan_dev_fcoe_ddp_done(struct net_device *dev, u16 xid)
 426{
 427        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 428        const struct net_device_ops *ops = real_dev->netdev_ops;
 429        int len = 0;
 430
 431        if (ops->ndo_fcoe_ddp_done)
 432                len = ops->ndo_fcoe_ddp_done(real_dev, xid);
 433
 434        return len;
 435}
 436
 437static int vlan_dev_fcoe_enable(struct net_device *dev)
 438{
 439        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 440        const struct net_device_ops *ops = real_dev->netdev_ops;
 441        int rc = -EINVAL;
 442
 443        if (ops->ndo_fcoe_enable)
 444                rc = ops->ndo_fcoe_enable(real_dev);
 445        return rc;
 446}
 447
 448static int vlan_dev_fcoe_disable(struct net_device *dev)
 449{
 450        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 451        const struct net_device_ops *ops = real_dev->netdev_ops;
 452        int rc = -EINVAL;
 453
 454        if (ops->ndo_fcoe_disable)
 455                rc = ops->ndo_fcoe_disable(real_dev);
 456        return rc;
 457}
 458
 459static int vlan_dev_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
 460{
 461        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 462        const struct net_device_ops *ops = real_dev->netdev_ops;
 463        int rc = -EINVAL;
 464
 465        if (ops->ndo_fcoe_get_wwn)
 466                rc = ops->ndo_fcoe_get_wwn(real_dev, wwn, type);
 467        return rc;
 468}
 469
 470static int vlan_dev_fcoe_ddp_target(struct net_device *dev, u16 xid,
 471                                    struct scatterlist *sgl, unsigned int sgc)
 472{
 473        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 474        const struct net_device_ops *ops = real_dev->netdev_ops;
 475        int rc = 0;
 476
 477        if (ops->ndo_fcoe_ddp_target)
 478                rc = ops->ndo_fcoe_ddp_target(real_dev, xid, sgl, sgc);
 479
 480        return rc;
 481}
 482#endif
 483
 484static void vlan_dev_change_rx_flags(struct net_device *dev, int change)
 485{
 486        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 487
 488        if (dev->flags & IFF_UP) {
 489                if (change & IFF_ALLMULTI)
 490                        dev_set_allmulti(real_dev, dev->flags & IFF_ALLMULTI ? 1 : -1);
 491                if (change & IFF_PROMISC)
 492                        dev_set_promiscuity(real_dev, dev->flags & IFF_PROMISC ? 1 : -1);
 493        }
 494}
 495
 496static void vlan_dev_set_rx_mode(struct net_device *vlan_dev)
 497{
 498        dev_mc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
 499        dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
 500}
 501
 502/*
 503 * vlan network devices have devices nesting below it, and are a special
 504 * "super class" of normal network devices; split their locks off into a
 505 * separate class since they always nest.
 506 */
 507static struct lock_class_key vlan_netdev_xmit_lock_key;
 508static struct lock_class_key vlan_netdev_addr_lock_key;
 509
 510static void vlan_dev_set_lockdep_one(struct net_device *dev,
 511                                     struct netdev_queue *txq,
 512                                     void *_subclass)
 513{
 514        lockdep_set_class_and_subclass(&txq->_xmit_lock,
 515                                       &vlan_netdev_xmit_lock_key,
 516                                       *(int *)_subclass);
 517}
 518
 519static void vlan_dev_set_lockdep_class(struct net_device *dev, int subclass)
 520{
 521        lockdep_set_class_and_subclass(&dev->addr_list_lock,
 522                                       &vlan_netdev_addr_lock_key,
 523                                       subclass);
 524        netdev_for_each_tx_queue(dev, vlan_dev_set_lockdep_one, &subclass);
 525}
 526
 527static int vlan_dev_get_lock_subclass(struct net_device *dev)
 528{
 529        return vlan_dev_priv(dev)->nest_level;
 530}
 531
 532static const struct header_ops vlan_header_ops = {
 533        .create  = vlan_dev_hard_header,
 534        .rebuild = vlan_dev_rebuild_header,
 535        .parse   = eth_header_parse,
 536};
 537
 538static int vlan_passthru_hard_header(struct sk_buff *skb, struct net_device *dev,
 539                                     unsigned short type,
 540                                     const void *daddr, const void *saddr,
 541                                     unsigned int len)
 542{
 543        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 544        struct net_device *real_dev = vlan->real_dev;
 545
 546        if (saddr == NULL)
 547                saddr = dev->dev_addr;
 548
 549        return dev_hard_header(skb, real_dev, type, daddr, saddr, len);
 550}
 551
 552static const struct header_ops vlan_passthru_header_ops = {
 553        .create  = vlan_passthru_hard_header,
 554        .rebuild = dev_rebuild_header,
 555        .parse   = eth_header_parse,
 556};
 557
 558static struct device_type vlan_type = {
 559        .name   = "vlan",
 560};
 561
 562static const struct net_device_ops vlan_netdev_ops;
 563
 564static int vlan_dev_init(struct net_device *dev)
 565{
 566        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 567
 568        netif_carrier_off(dev);
 569
 570        /* IFF_BROADCAST|IFF_MULTICAST; ??? */
 571        dev->flags  = real_dev->flags & ~(IFF_UP | IFF_PROMISC | IFF_ALLMULTI |
 572                                          IFF_MASTER | IFF_SLAVE);
 573        dev->iflink = real_dev->ifindex;
 574        dev->state  = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) |
 575                                          (1<<__LINK_STATE_DORMANT))) |
 576                      (1<<__LINK_STATE_PRESENT);
 577
 578        dev->hw_features = NETIF_F_ALL_CSUM | NETIF_F_SG |
 579                           NETIF_F_FRAGLIST | NETIF_F_ALL_TSO |
 580                           NETIF_F_HIGHDMA | NETIF_F_SCTP_CSUM |
 581                           NETIF_F_ALL_FCOE;
 582
 583        dev->features |= real_dev->vlan_features | NETIF_F_LLTX;
 584        dev->gso_max_size = real_dev->gso_max_size;
 585        if (dev->features & NETIF_F_VLAN_FEATURES)
 586                netdev_warn(real_dev, "VLAN features are set incorrectly.  Q-in-Q configurations may not work correctly.\n");
 587
 588
 589        /* ipv6 shared card related stuff */
 590        dev->dev_id = real_dev->dev_id;
 591
 592        if (is_zero_ether_addr(dev->dev_addr))
 593                eth_hw_addr_inherit(dev, real_dev);
 594        if (is_zero_ether_addr(dev->broadcast))
 595                memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len);
 596
 597#if IS_ENABLED(CONFIG_FCOE)
 598        dev->fcoe_ddp_xid = real_dev->fcoe_ddp_xid;
 599#endif
 600
 601        dev->needed_headroom = real_dev->needed_headroom;
 602        if (vlan_hw_offload_capable(real_dev->features,
 603                                    vlan_dev_priv(dev)->vlan_proto)) {
 604                dev->header_ops      = &vlan_passthru_header_ops;
 605                dev->hard_header_len = real_dev->hard_header_len;
 606        } else {
 607                dev->header_ops      = &vlan_header_ops;
 608                dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
 609        }
 610
 611        dev->netdev_ops = &vlan_netdev_ops;
 612
 613        SET_NETDEV_DEVTYPE(dev, &vlan_type);
 614
 615        vlan_dev_set_lockdep_class(dev, vlan_dev_get_lock_subclass(dev));
 616
 617        vlan_dev_priv(dev)->vlan_pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
 618        if (!vlan_dev_priv(dev)->vlan_pcpu_stats)
 619                return -ENOMEM;
 620
 621        return 0;
 622}
 623
 624static void vlan_dev_uninit(struct net_device *dev)
 625{
 626        struct vlan_priority_tci_mapping *pm;
 627        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 628        int i;
 629
 630        for (i = 0; i < ARRAY_SIZE(vlan->egress_priority_map); i++) {
 631                while ((pm = vlan->egress_priority_map[i]) != NULL) {
 632                        vlan->egress_priority_map[i] = pm->next;
 633                        kfree(pm);
 634                }
 635        }
 636}
 637
 638static netdev_features_t vlan_dev_fix_features(struct net_device *dev,
 639        netdev_features_t features)
 640{
 641        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 642        netdev_features_t old_features = features;
 643
 644        features = netdev_intersect_features(features, real_dev->vlan_features);
 645        features |= NETIF_F_RXCSUM;
 646        features = netdev_intersect_features(features, real_dev->features);
 647
 648        features |= old_features & NETIF_F_SOFT_FEATURES;
 649        features |= NETIF_F_LLTX;
 650
 651        return features;
 652}
 653
 654static int vlan_ethtool_get_settings(struct net_device *dev,
 655                                     struct ethtool_cmd *cmd)
 656{
 657        const struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 658
 659        return __ethtool_get_settings(vlan->real_dev, cmd);
 660}
 661
 662static void vlan_ethtool_get_drvinfo(struct net_device *dev,
 663                                     struct ethtool_drvinfo *info)
 664{
 665        strlcpy(info->driver, vlan_fullname, sizeof(info->driver));
 666        strlcpy(info->version, vlan_version, sizeof(info->version));
 667        strlcpy(info->fw_version, "N/A", sizeof(info->fw_version));
 668}
 669
 670static struct rtnl_link_stats64 *vlan_dev_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
 671{
 672        struct vlan_pcpu_stats *p;
 673        u32 rx_errors = 0, tx_dropped = 0;
 674        int i;
 675
 676        for_each_possible_cpu(i) {
 677                u64 rxpackets, rxbytes, rxmulticast, txpackets, txbytes;
 678                unsigned int start;
 679
 680                p = per_cpu_ptr(vlan_dev_priv(dev)->vlan_pcpu_stats, i);
 681                do {
 682                        start = u64_stats_fetch_begin_irq(&p->syncp);
 683                        rxpackets       = p->rx_packets;
 684                        rxbytes         = p->rx_bytes;
 685                        rxmulticast     = p->rx_multicast;
 686                        txpackets       = p->tx_packets;
 687                        txbytes         = p->tx_bytes;
 688                } while (u64_stats_fetch_retry_irq(&p->syncp, start));
 689
 690                stats->rx_packets       += rxpackets;
 691                stats->rx_bytes         += rxbytes;
 692                stats->multicast        += rxmulticast;
 693                stats->tx_packets       += txpackets;
 694                stats->tx_bytes         += txbytes;
 695                /* rx_errors & tx_dropped are u32 */
 696                rx_errors       += p->rx_errors;
 697                tx_dropped      += p->tx_dropped;
 698        }
 699        stats->rx_errors  = rx_errors;
 700        stats->tx_dropped = tx_dropped;
 701
 702        return stats;
 703}
 704
 705#ifdef CONFIG_NET_POLL_CONTROLLER
 706static void vlan_dev_poll_controller(struct net_device *dev)
 707{
 708        return;
 709}
 710
 711static int vlan_dev_netpoll_setup(struct net_device *dev, struct netpoll_info *npinfo)
 712{
 713        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 714        struct net_device *real_dev = vlan->real_dev;
 715        struct netpoll *netpoll;
 716        int err = 0;
 717
 718        netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
 719        err = -ENOMEM;
 720        if (!netpoll)
 721                goto out;
 722
 723        err = __netpoll_setup(netpoll, real_dev);
 724        if (err) {
 725                kfree(netpoll);
 726                goto out;
 727        }
 728
 729        vlan->netpoll = netpoll;
 730
 731out:
 732        return err;
 733}
 734
 735static void vlan_dev_netpoll_cleanup(struct net_device *dev)
 736{
 737        struct vlan_dev_priv *vlan= vlan_dev_priv(dev);
 738        struct netpoll *netpoll = vlan->netpoll;
 739
 740        if (!netpoll)
 741                return;
 742
 743        vlan->netpoll = NULL;
 744
 745        __netpoll_free_async(netpoll);
 746}
 747#endif /* CONFIG_NET_POLL_CONTROLLER */
 748
 749static const struct ethtool_ops vlan_ethtool_ops = {
 750        .get_settings           = vlan_ethtool_get_settings,
 751        .get_drvinfo            = vlan_ethtool_get_drvinfo,
 752        .get_link               = ethtool_op_get_link,
 753};
 754
 755static const struct net_device_ops vlan_netdev_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_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_change_rx_flags    = vlan_dev_change_rx_flags,
 766        .ndo_do_ioctl           = vlan_dev_ioctl,
 767        .ndo_neigh_setup        = vlan_dev_neigh_setup,
 768        .ndo_get_stats64        = vlan_dev_get_stats64,
 769#if IS_ENABLED(CONFIG_FCOE)
 770        .ndo_fcoe_ddp_setup     = vlan_dev_fcoe_ddp_setup,
 771        .ndo_fcoe_ddp_done      = vlan_dev_fcoe_ddp_done,
 772        .ndo_fcoe_enable        = vlan_dev_fcoe_enable,
 773        .ndo_fcoe_disable       = vlan_dev_fcoe_disable,
 774        .ndo_fcoe_get_wwn       = vlan_dev_fcoe_get_wwn,
 775        .ndo_fcoe_ddp_target    = vlan_dev_fcoe_ddp_target,
 776#endif
 777#ifdef CONFIG_NET_POLL_CONTROLLER
 778        .ndo_poll_controller    = vlan_dev_poll_controller,
 779        .ndo_netpoll_setup      = vlan_dev_netpoll_setup,
 780        .ndo_netpoll_cleanup    = vlan_dev_netpoll_cleanup,
 781#endif
 782        .ndo_fix_features       = vlan_dev_fix_features,
 783        .ndo_get_lock_subclass  = vlan_dev_get_lock_subclass,
 784};
 785
 786static void vlan_dev_free(struct net_device *dev)
 787{
 788        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 789
 790        free_percpu(vlan->vlan_pcpu_stats);
 791        vlan->vlan_pcpu_stats = NULL;
 792        free_netdev(dev);
 793}
 794
 795void vlan_setup(struct net_device *dev)
 796{
 797        ether_setup(dev);
 798
 799        dev->priv_flags         |= IFF_802_1Q_VLAN;
 800        dev->priv_flags         &= ~(IFF_XMIT_DST_RELEASE | IFF_TX_SKB_SHARING);
 801        dev->tx_queue_len       = 0;
 802
 803        dev->netdev_ops         = &vlan_netdev_ops;
 804        dev->destructor         = vlan_dev_free;
 805        dev->ethtool_ops        = &vlan_ethtool_ops;
 806
 807        memset(dev->broadcast, 0, ETH_ALEN);
 808}
 809