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        if (vlan->netpoll)
  92                netpoll_send_skb(vlan->netpoll, skb);
  93#else
  94        BUG();
  95#endif
  96        return NETDEV_TX_OK;
  97}
  98
  99static netdev_tx_t vlan_dev_hard_start_xmit(struct sk_buff *skb,
 100                                            struct net_device *dev)
 101{
 102        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 103        struct vlan_ethhdr *veth = (struct vlan_ethhdr *)(skb->data);
 104        unsigned int len;
 105        int ret;
 106
 107        /* Handle non-VLAN frames if they are sent to us, for example by DHCP.
 108         *
 109         * NOTE: THIS ASSUMES DIX ETHERNET, SPECIFICALLY NOT SUPPORTING
 110         * OTHER THINGS LIKE FDDI/TokenRing/802.3 SNAPs...
 111         */
 112        if (veth->h_vlan_proto != vlan->vlan_proto ||
 113            vlan->flags & VLAN_FLAG_REORDER_HDR) {
 114                u16 vlan_tci;
 115                vlan_tci = vlan->vlan_id;
 116                vlan_tci |= vlan_dev_get_egress_qos_mask(dev, skb->priority);
 117                __vlan_hwaccel_put_tag(skb, vlan->vlan_proto, vlan_tci);
 118        }
 119
 120        skb->dev = vlan->real_dev;
 121        len = skb->len;
 122        if (unlikely(netpoll_tx_running(dev)))
 123                return vlan_netpoll_send_skb(vlan, skb);
 124
 125        ret = dev_queue_xmit(skb);
 126
 127        if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) {
 128                struct vlan_pcpu_stats *stats;
 129
 130                stats = this_cpu_ptr(vlan->vlan_pcpu_stats);
 131                u64_stats_update_begin(&stats->syncp);
 132                stats->tx_packets++;
 133                stats->tx_bytes += len;
 134                u64_stats_update_end(&stats->syncp);
 135        } else {
 136                this_cpu_inc(vlan->vlan_pcpu_stats->tx_dropped);
 137        }
 138
 139        return ret;
 140}
 141
 142static int vlan_dev_change_mtu(struct net_device *dev, int new_mtu)
 143{
 144        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 145        unsigned int max_mtu = real_dev->mtu;
 146
 147        if (netif_reduces_vlan_mtu(real_dev))
 148                max_mtu -= VLAN_HLEN;
 149        if (max_mtu < new_mtu)
 150                return -ERANGE;
 151
 152        dev->mtu = new_mtu;
 153
 154        return 0;
 155}
 156
 157void vlan_dev_set_ingress_priority(const struct net_device *dev,
 158                                   u32 skb_prio, u16 vlan_prio)
 159{
 160        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 161
 162        if (vlan->ingress_priority_map[vlan_prio & 0x7] && !skb_prio)
 163                vlan->nr_ingress_mappings--;
 164        else if (!vlan->ingress_priority_map[vlan_prio & 0x7] && skb_prio)
 165                vlan->nr_ingress_mappings++;
 166
 167        vlan->ingress_priority_map[vlan_prio & 0x7] = skb_prio;
 168}
 169
 170int vlan_dev_set_egress_priority(const struct net_device *dev,
 171                                 u32 skb_prio, u16 vlan_prio)
 172{
 173        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 174        struct vlan_priority_tci_mapping *mp = NULL;
 175        struct vlan_priority_tci_mapping *np;
 176        u32 vlan_qos = (vlan_prio << VLAN_PRIO_SHIFT) & VLAN_PRIO_MASK;
 177
 178        /* See if a priority mapping exists.. */
 179        mp = vlan->egress_priority_map[skb_prio & 0xF];
 180        while (mp) {
 181                if (mp->priority == skb_prio) {
 182                        if (mp->vlan_qos && !vlan_qos)
 183                                vlan->nr_egress_mappings--;
 184                        else if (!mp->vlan_qos && vlan_qos)
 185                                vlan->nr_egress_mappings++;
 186                        mp->vlan_qos = vlan_qos;
 187                        return 0;
 188                }
 189                mp = mp->next;
 190        }
 191
 192        /* Create a new mapping then. */
 193        mp = vlan->egress_priority_map[skb_prio & 0xF];
 194        np = kmalloc(sizeof(struct vlan_priority_tci_mapping), GFP_KERNEL);
 195        if (!np)
 196                return -ENOBUFS;
 197
 198        np->next = mp;
 199        np->priority = skb_prio;
 200        np->vlan_qos = vlan_qos;
 201        /* Before inserting this element in hash table, make sure all its fields
 202         * are committed to memory.
 203         * coupled with smp_rmb() in vlan_dev_get_egress_qos_mask()
 204         */
 205        smp_wmb();
 206        vlan->egress_priority_map[skb_prio & 0xF] = np;
 207        if (vlan_qos)
 208                vlan->nr_egress_mappings++;
 209        return 0;
 210}
 211
 212/* Flags are defined in the vlan_flags enum in
 213 * include/uapi/linux/if_vlan.h file.
 214 */
 215int vlan_dev_change_flags(const struct net_device *dev, u32 flags, u32 mask)
 216{
 217        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 218        u32 old_flags = vlan->flags;
 219
 220        if (mask & ~(VLAN_FLAG_REORDER_HDR | VLAN_FLAG_GVRP |
 221                     VLAN_FLAG_LOOSE_BINDING | VLAN_FLAG_MVRP |
 222                     VLAN_FLAG_BRIDGE_BINDING))
 223                return -EINVAL;
 224
 225        vlan->flags = (old_flags & ~mask) | (flags & mask);
 226
 227        if (netif_running(dev) && (vlan->flags ^ old_flags) & VLAN_FLAG_GVRP) {
 228                if (vlan->flags & VLAN_FLAG_GVRP)
 229                        vlan_gvrp_request_join(dev);
 230                else
 231                        vlan_gvrp_request_leave(dev);
 232        }
 233
 234        if (netif_running(dev) && (vlan->flags ^ old_flags) & VLAN_FLAG_MVRP) {
 235                if (vlan->flags & VLAN_FLAG_MVRP)
 236                        vlan_mvrp_request_join(dev);
 237                else
 238                        vlan_mvrp_request_leave(dev);
 239        }
 240        return 0;
 241}
 242
 243void vlan_dev_get_realdev_name(const struct net_device *dev, char *result)
 244{
 245        strncpy(result, vlan_dev_priv(dev)->real_dev->name, 23);
 246}
 247
 248bool vlan_dev_inherit_address(struct net_device *dev,
 249                              struct net_device *real_dev)
 250{
 251        if (dev->addr_assign_type != NET_ADDR_STOLEN)
 252                return false;
 253
 254        ether_addr_copy(dev->dev_addr, real_dev->dev_addr);
 255        call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
 256        return true;
 257}
 258
 259static int vlan_dev_open(struct net_device *dev)
 260{
 261        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 262        struct net_device *real_dev = vlan->real_dev;
 263        int err;
 264
 265        if (!(real_dev->flags & IFF_UP) &&
 266            !(vlan->flags & VLAN_FLAG_LOOSE_BINDING))
 267                return -ENETDOWN;
 268
 269        if (!ether_addr_equal(dev->dev_addr, real_dev->dev_addr) &&
 270            !vlan_dev_inherit_address(dev, real_dev)) {
 271                err = dev_uc_add(real_dev, dev->dev_addr);
 272                if (err < 0)
 273                        goto out;
 274        }
 275
 276        if (dev->flags & IFF_ALLMULTI) {
 277                err = dev_set_allmulti(real_dev, 1);
 278                if (err < 0)
 279                        goto del_unicast;
 280        }
 281        if (dev->flags & IFF_PROMISC) {
 282                err = dev_set_promiscuity(real_dev, 1);
 283                if (err < 0)
 284                        goto clear_allmulti;
 285        }
 286
 287        ether_addr_copy(vlan->real_dev_addr, real_dev->dev_addr);
 288
 289        if (vlan->flags & VLAN_FLAG_GVRP)
 290                vlan_gvrp_request_join(dev);
 291
 292        if (vlan->flags & VLAN_FLAG_MVRP)
 293                vlan_mvrp_request_join(dev);
 294
 295        if (netif_carrier_ok(real_dev) &&
 296            !(vlan->flags & VLAN_FLAG_BRIDGE_BINDING))
 297                netif_carrier_on(dev);
 298        return 0;
 299
 300clear_allmulti:
 301        if (dev->flags & IFF_ALLMULTI)
 302                dev_set_allmulti(real_dev, -1);
 303del_unicast:
 304        if (!ether_addr_equal(dev->dev_addr, real_dev->dev_addr))
 305                dev_uc_del(real_dev, dev->dev_addr);
 306out:
 307        netif_carrier_off(dev);
 308        return err;
 309}
 310
 311static int vlan_dev_stop(struct net_device *dev)
 312{
 313        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 314        struct net_device *real_dev = vlan->real_dev;
 315
 316        dev_mc_unsync(real_dev, dev);
 317        dev_uc_unsync(real_dev, dev);
 318        if (dev->flags & IFF_ALLMULTI)
 319                dev_set_allmulti(real_dev, -1);
 320        if (dev->flags & IFF_PROMISC)
 321                dev_set_promiscuity(real_dev, -1);
 322
 323        if (!ether_addr_equal(dev->dev_addr, real_dev->dev_addr))
 324                dev_uc_del(real_dev, dev->dev_addr);
 325
 326        if (!(vlan->flags & VLAN_FLAG_BRIDGE_BINDING))
 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 SIOCSHWTSTAMP:
 369                if (!net_eq(dev_net(dev), &init_net))
 370                        break;
 371                /* fall through */
 372        case SIOCGMIIPHY:
 373        case SIOCGMIIREG:
 374        case SIOCSMIIREG:
 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_ddp_target(struct net_device *dev, u16 xid,
 448                                    struct scatterlist *sgl, unsigned int sgc)
 449{
 450        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 451        const struct net_device_ops *ops = real_dev->netdev_ops;
 452        int rc = 0;
 453
 454        if (ops->ndo_fcoe_ddp_target)
 455                rc = ops->ndo_fcoe_ddp_target(real_dev, xid, sgl, sgc);
 456
 457        return rc;
 458}
 459#endif
 460
 461#ifdef NETDEV_FCOE_WWNN
 462static int vlan_dev_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
 463{
 464        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 465        const struct net_device_ops *ops = real_dev->netdev_ops;
 466        int rc = -EINVAL;
 467
 468        if (ops->ndo_fcoe_get_wwn)
 469                rc = ops->ndo_fcoe_get_wwn(real_dev, wwn, type);
 470        return rc;
 471}
 472#endif
 473
 474static void vlan_dev_change_rx_flags(struct net_device *dev, int change)
 475{
 476        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 477
 478        if (dev->flags & IFF_UP) {
 479                if (change & IFF_ALLMULTI)
 480                        dev_set_allmulti(real_dev, dev->flags & IFF_ALLMULTI ? 1 : -1);
 481                if (change & IFF_PROMISC)
 482                        dev_set_promiscuity(real_dev, dev->flags & IFF_PROMISC ? 1 : -1);
 483        }
 484}
 485
 486static void vlan_dev_set_rx_mode(struct net_device *vlan_dev)
 487{
 488        dev_mc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
 489        dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
 490}
 491
 492static const struct header_ops vlan_header_ops = {
 493        .create  = vlan_dev_hard_header,
 494        .parse   = eth_header_parse,
 495};
 496
 497static int vlan_passthru_hard_header(struct sk_buff *skb, struct net_device *dev,
 498                                     unsigned short type,
 499                                     const void *daddr, const void *saddr,
 500                                     unsigned int len)
 501{
 502        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 503        struct net_device *real_dev = vlan->real_dev;
 504
 505        if (saddr == NULL)
 506                saddr = dev->dev_addr;
 507
 508        return dev_hard_header(skb, real_dev, type, daddr, saddr, len);
 509}
 510
 511static const struct header_ops vlan_passthru_header_ops = {
 512        .create  = vlan_passthru_hard_header,
 513        .parse   = eth_header_parse,
 514};
 515
 516static struct device_type vlan_type = {
 517        .name   = "vlan",
 518};
 519
 520static const struct net_device_ops vlan_netdev_ops;
 521
 522static int vlan_dev_init(struct net_device *dev)
 523{
 524        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 525        struct net_device *real_dev = vlan->real_dev;
 526
 527        netif_carrier_off(dev);
 528
 529        /* IFF_BROADCAST|IFF_MULTICAST; ??? */
 530        dev->flags  = real_dev->flags & ~(IFF_UP | IFF_PROMISC | IFF_ALLMULTI |
 531                                          IFF_MASTER | IFF_SLAVE);
 532        dev->state  = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) |
 533                                          (1<<__LINK_STATE_DORMANT))) |
 534                      (1<<__LINK_STATE_PRESENT);
 535
 536        if (vlan->flags & VLAN_FLAG_BRIDGE_BINDING)
 537                dev->state |= (1 << __LINK_STATE_NOCARRIER);
 538
 539        dev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG |
 540                           NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE |
 541                           NETIF_F_GSO_ENCAP_ALL |
 542                           NETIF_F_HIGHDMA | NETIF_F_SCTP_CRC |
 543                           NETIF_F_ALL_FCOE;
 544
 545        dev->features |= dev->hw_features | NETIF_F_LLTX;
 546        dev->gso_max_size = real_dev->gso_max_size;
 547        dev->gso_max_segs = real_dev->gso_max_segs;
 548        if (dev->features & NETIF_F_VLAN_FEATURES)
 549                netdev_warn(real_dev, "VLAN features are set incorrectly.  Q-in-Q configurations may not work correctly.\n");
 550
 551        dev->vlan_features = real_dev->vlan_features & ~NETIF_F_ALL_FCOE;
 552        dev->hw_enc_features = vlan_tnl_features(real_dev);
 553        dev->mpls_features = real_dev->mpls_features;
 554
 555        /* ipv6 shared card related stuff */
 556        dev->dev_id = real_dev->dev_id;
 557
 558        if (is_zero_ether_addr(dev->dev_addr)) {
 559                ether_addr_copy(dev->dev_addr, real_dev->dev_addr);
 560                dev->addr_assign_type = NET_ADDR_STOLEN;
 561        }
 562        if (is_zero_ether_addr(dev->broadcast))
 563                memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len);
 564
 565#if IS_ENABLED(CONFIG_FCOE)
 566        dev->fcoe_ddp_xid = real_dev->fcoe_ddp_xid;
 567#endif
 568
 569        dev->needed_headroom = real_dev->needed_headroom;
 570        if (vlan_hw_offload_capable(real_dev->features, vlan->vlan_proto)) {
 571                dev->header_ops      = &vlan_passthru_header_ops;
 572                dev->hard_header_len = real_dev->hard_header_len;
 573        } else {
 574                dev->header_ops      = &vlan_header_ops;
 575                dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
 576        }
 577
 578        dev->netdev_ops = &vlan_netdev_ops;
 579
 580        SET_NETDEV_DEVTYPE(dev, &vlan_type);
 581
 582        vlan->vlan_pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
 583        if (!vlan->vlan_pcpu_stats)
 584                return -ENOMEM;
 585
 586        return 0;
 587}
 588
 589/* Note: this function might be called multiple times for the same device. */
 590void vlan_dev_uninit(struct net_device *dev)
 591{
 592        struct vlan_priority_tci_mapping *pm;
 593        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 594        int i;
 595
 596        for (i = 0; i < ARRAY_SIZE(vlan->egress_priority_map); i++) {
 597                while ((pm = vlan->egress_priority_map[i]) != NULL) {
 598                        vlan->egress_priority_map[i] = pm->next;
 599                        kfree(pm);
 600                }
 601        }
 602}
 603
 604static netdev_features_t vlan_dev_fix_features(struct net_device *dev,
 605        netdev_features_t features)
 606{
 607        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 608        netdev_features_t old_features = features;
 609        netdev_features_t lower_features;
 610
 611        lower_features = netdev_intersect_features((real_dev->vlan_features |
 612                                                    NETIF_F_RXCSUM),
 613                                                   real_dev->features);
 614
 615        /* Add HW_CSUM setting to preserve user ability to control
 616         * checksum offload on the vlan device.
 617         */
 618        if (lower_features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))
 619                lower_features |= NETIF_F_HW_CSUM;
 620        features = netdev_intersect_features(features, lower_features);
 621        features |= old_features & (NETIF_F_SOFT_FEATURES | NETIF_F_GSO_SOFTWARE);
 622        features |= NETIF_F_LLTX;
 623
 624        return features;
 625}
 626
 627static int vlan_ethtool_get_link_ksettings(struct net_device *dev,
 628                                           struct ethtool_link_ksettings *cmd)
 629{
 630        const struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 631
 632        return __ethtool_get_link_ksettings(vlan->real_dev, cmd);
 633}
 634
 635static void vlan_ethtool_get_drvinfo(struct net_device *dev,
 636                                     struct ethtool_drvinfo *info)
 637{
 638        strlcpy(info->driver, vlan_fullname, sizeof(info->driver));
 639        strlcpy(info->version, vlan_version, sizeof(info->version));
 640        strlcpy(info->fw_version, "N/A", sizeof(info->fw_version));
 641}
 642
 643static int vlan_ethtool_get_ts_info(struct net_device *dev,
 644                                    struct ethtool_ts_info *info)
 645{
 646        const struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 647        const struct ethtool_ops *ops = vlan->real_dev->ethtool_ops;
 648        struct phy_device *phydev = vlan->real_dev->phydev;
 649
 650        if (phydev && phydev->drv && phydev->drv->ts_info) {
 651                 return phydev->drv->ts_info(phydev, info);
 652        } else if (ops->get_ts_info) {
 653                return ops->get_ts_info(vlan->real_dev, info);
 654        } else {
 655                info->so_timestamping = SOF_TIMESTAMPING_RX_SOFTWARE |
 656                        SOF_TIMESTAMPING_SOFTWARE;
 657                info->phc_index = -1;
 658        }
 659
 660        return 0;
 661}
 662
 663static void vlan_dev_get_stats64(struct net_device *dev,
 664                                 struct rtnl_link_stats64 *stats)
 665{
 666        struct vlan_pcpu_stats *p;
 667        u32 rx_errors = 0, tx_dropped = 0;
 668        int i;
 669
 670        for_each_possible_cpu(i) {
 671                u64 rxpackets, rxbytes, rxmulticast, txpackets, txbytes;
 672                unsigned int start;
 673
 674                p = per_cpu_ptr(vlan_dev_priv(dev)->vlan_pcpu_stats, i);
 675                do {
 676                        start = u64_stats_fetch_begin_irq(&p->syncp);
 677                        rxpackets       = p->rx_packets;
 678                        rxbytes         = p->rx_bytes;
 679                        rxmulticast     = p->rx_multicast;
 680                        txpackets       = p->tx_packets;
 681                        txbytes         = p->tx_bytes;
 682                } while (u64_stats_fetch_retry_irq(&p->syncp, start));
 683
 684                stats->rx_packets       += rxpackets;
 685                stats->rx_bytes         += rxbytes;
 686                stats->multicast        += rxmulticast;
 687                stats->tx_packets       += txpackets;
 688                stats->tx_bytes         += txbytes;
 689                /* rx_errors & tx_dropped are u32 */
 690                rx_errors       += p->rx_errors;
 691                tx_dropped      += p->tx_dropped;
 692        }
 693        stats->rx_errors  = rx_errors;
 694        stats->tx_dropped = tx_dropped;
 695}
 696
 697#ifdef CONFIG_NET_POLL_CONTROLLER
 698static void vlan_dev_poll_controller(struct net_device *dev)
 699{
 700        return;
 701}
 702
 703static int vlan_dev_netpoll_setup(struct net_device *dev, struct netpoll_info *npinfo)
 704{
 705        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 706        struct net_device *real_dev = vlan->real_dev;
 707        struct netpoll *netpoll;
 708        int err = 0;
 709
 710        netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
 711        err = -ENOMEM;
 712        if (!netpoll)
 713                goto out;
 714
 715        err = __netpoll_setup(netpoll, real_dev);
 716        if (err) {
 717                kfree(netpoll);
 718                goto out;
 719        }
 720
 721        vlan->netpoll = netpoll;
 722
 723out:
 724        return err;
 725}
 726
 727static void vlan_dev_netpoll_cleanup(struct net_device *dev)
 728{
 729        struct vlan_dev_priv *vlan= vlan_dev_priv(dev);
 730        struct netpoll *netpoll = vlan->netpoll;
 731
 732        if (!netpoll)
 733                return;
 734
 735        vlan->netpoll = NULL;
 736        __netpoll_free(netpoll);
 737}
 738#endif /* CONFIG_NET_POLL_CONTROLLER */
 739
 740static int vlan_dev_get_iflink(const struct net_device *dev)
 741{
 742        struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
 743
 744        return real_dev->ifindex;
 745}
 746
 747static const struct ethtool_ops vlan_ethtool_ops = {
 748        .get_link_ksettings     = vlan_ethtool_get_link_ksettings,
 749        .get_drvinfo            = vlan_ethtool_get_drvinfo,
 750        .get_link               = ethtool_op_get_link,
 751        .get_ts_info            = vlan_ethtool_get_ts_info,
 752};
 753
 754static const struct net_device_ops vlan_netdev_ops = {
 755        .ndo_change_mtu         = vlan_dev_change_mtu,
 756        .ndo_init               = vlan_dev_init,
 757        .ndo_uninit             = vlan_dev_uninit,
 758        .ndo_open               = vlan_dev_open,
 759        .ndo_stop               = vlan_dev_stop,
 760        .ndo_start_xmit =  vlan_dev_hard_start_xmit,
 761        .ndo_validate_addr      = eth_validate_addr,
 762        .ndo_set_mac_address    = vlan_dev_set_mac_address,
 763        .ndo_set_rx_mode        = vlan_dev_set_rx_mode,
 764        .ndo_change_rx_flags    = vlan_dev_change_rx_flags,
 765        .ndo_do_ioctl           = vlan_dev_ioctl,
 766        .ndo_neigh_setup        = vlan_dev_neigh_setup,
 767        .ndo_get_stats64        = vlan_dev_get_stats64,
 768#if IS_ENABLED(CONFIG_FCOE)
 769        .ndo_fcoe_ddp_setup     = vlan_dev_fcoe_ddp_setup,
 770        .ndo_fcoe_ddp_done      = vlan_dev_fcoe_ddp_done,
 771        .ndo_fcoe_enable        = vlan_dev_fcoe_enable,
 772        .ndo_fcoe_disable       = vlan_dev_fcoe_disable,
 773        .ndo_fcoe_ddp_target    = vlan_dev_fcoe_ddp_target,
 774#endif
 775#ifdef NETDEV_FCOE_WWNN
 776        .ndo_fcoe_get_wwn       = vlan_dev_fcoe_get_wwn,
 777#endif
 778#ifdef CONFIG_NET_POLL_CONTROLLER
 779        .ndo_poll_controller    = vlan_dev_poll_controller,
 780        .ndo_netpoll_setup      = vlan_dev_netpoll_setup,
 781        .ndo_netpoll_cleanup    = vlan_dev_netpoll_cleanup,
 782#endif
 783        .ndo_fix_features       = vlan_dev_fix_features,
 784        .ndo_get_iflink         = vlan_dev_get_iflink,
 785};
 786
 787static void vlan_dev_free(struct net_device *dev)
 788{
 789        struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
 790
 791        free_percpu(vlan->vlan_pcpu_stats);
 792        vlan->vlan_pcpu_stats = NULL;
 793}
 794
 795void vlan_setup(struct net_device *dev)
 796{
 797        ether_setup(dev);
 798
 799        dev->priv_flags         |= IFF_802_1Q_VLAN | IFF_NO_QUEUE;
 800        dev->priv_flags         |= IFF_UNICAST_FLT;
 801        dev->priv_flags         &= ~IFF_TX_SKB_SHARING;
 802        netif_keep_dst(dev);
 803
 804        dev->netdev_ops         = &vlan_netdev_ops;
 805        dev->needs_free_netdev  = true;
 806        dev->priv_destructor    = vlan_dev_free;
 807        dev->ethtool_ops        = &vlan_ethtool_ops;
 808
 809        dev->min_mtu            = 0;
 810        dev->max_mtu            = ETH_MAX_MTU;
 811
 812        eth_zero_addr(dev->broadcast);
 813}
 814