root/net/8021q/vlan_dev.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. vlan_dev_hard_header
  2. vlan_netpoll_send_skb
  3. vlan_dev_hard_start_xmit
  4. vlan_dev_change_mtu
  5. vlan_dev_set_ingress_priority
  6. vlan_dev_set_egress_priority
  7. vlan_dev_change_flags
  8. vlan_dev_get_realdev_name
  9. vlan_dev_inherit_address
  10. vlan_dev_open
  11. vlan_dev_stop
  12. vlan_dev_set_mac_address
  13. vlan_dev_ioctl
  14. vlan_dev_neigh_setup
  15. vlan_dev_fcoe_ddp_setup
  16. vlan_dev_fcoe_ddp_done
  17. vlan_dev_fcoe_enable
  18. vlan_dev_fcoe_disable
  19. vlan_dev_fcoe_ddp_target
  20. vlan_dev_fcoe_get_wwn
  21. vlan_dev_change_rx_flags
  22. vlan_dev_set_rx_mode
  23. vlan_passthru_hard_header
  24. vlan_dev_init
  25. vlan_dev_uninit
  26. vlan_dev_fix_features
  27. vlan_ethtool_get_link_ksettings
  28. vlan_ethtool_get_drvinfo
  29. vlan_ethtool_get_ts_info
  30. vlan_dev_get_stats64
  31. vlan_dev_poll_controller
  32. vlan_dev_netpoll_setup
  33. vlan_dev_netpoll_cleanup
  34. vlan_dev_get_iflink
  35. vlan_dev_free
  36. vlan_setup

   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  */
  44 static 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 
  88 static 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 
  99 static 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 
 142 static 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 
 157 void 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 
 170 int 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  */
 215 int 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 
 243 void 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 
 248 bool 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 
 259 static 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 
 300 clear_allmulti:
 301         if (dev->flags & IFF_ALLMULTI)
 302                 dev_set_allmulti(real_dev, -1);
 303 del_unicast:
 304         if (!ether_addr_equal(dev->dev_addr, real_dev->dev_addr))
 305                 dev_uc_del(real_dev, dev->dev_addr);
 306 out:
 307         netif_carrier_off(dev);
 308         return err;
 309 }
 310 
 311 static 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 
 331 static 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 
 352 out:
 353         ether_addr_copy(dev->dev_addr, addr->sa_data);
 354         return 0;
 355 }
 356 
 357 static 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 
 387 static 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)
 400 static 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 
 413 static 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 
 425 static 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 
 436 static 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 
 447 static 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
 462 static 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 
 474 static 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 
 486 static 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 
 492 static const struct header_ops vlan_header_ops = {
 493         .create  = vlan_dev_hard_header,
 494         .parse   = eth_header_parse,
 495 };
 496 
 497 static 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 
 511 static const struct header_ops vlan_passthru_header_ops = {
 512         .create  = vlan_passthru_hard_header,
 513         .parse   = eth_header_parse,
 514 };
 515 
 516 static struct device_type vlan_type = {
 517         .name   = "vlan",
 518 };
 519 
 520 static const struct net_device_ops vlan_netdev_ops;
 521 
 522 static 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. */
 590 void 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 
 604 static 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 
 627 static 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 
 635 static 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 
 643 static 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 
 663 static 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
 698 static void vlan_dev_poll_controller(struct net_device *dev)
 699 {
 700         return;
 701 }
 702 
 703 static 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 
 723 out:
 724         return err;
 725 }
 726 
 727 static 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 
 740 static 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 
 747 static 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 
 754 static 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 
 787 static 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 
 795 void 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 }

/* [<][>][^][v][top][bottom][index][help] */