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