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