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