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