xref: /linux/drivers/net/macvlan.c (revision 1a9239bb4253f9076b5b4b2a1a4e8d7defd77a95)
1  // SPDX-License-Identifier: GPL-2.0-or-later
2  /*
3   * Copyright (c) 2007 Patrick McHardy <kaber@trash.net>
4   *
5   * The code this is based on carried the following copyright notice:
6   * ---
7   * (C) Copyright 2001-2006
8   * Alex Zeffertt, Cambridge Broadband Ltd, ajz@cambridgebroadband.com
9   * Re-worked by Ben Greear <greearb@candelatech.com>
10   * ---
11   */
12  #include <linux/kernel.h>
13  #include <linux/types.h>
14  #include <linux/module.h>
15  #include <linux/init.h>
16  #include <linux/errno.h>
17  #include <linux/slab.h>
18  #include <linux/string.h>
19  #include <linux/rculist.h>
20  #include <linux/notifier.h>
21  #include <linux/netdevice.h>
22  #include <linux/etherdevice.h>
23  #include <linux/net_tstamp.h>
24  #include <linux/ethtool.h>
25  #include <linux/if_arp.h>
26  #include <linux/if_vlan.h>
27  #include <linux/if_link.h>
28  #include <linux/if_macvlan.h>
29  #include <linux/hash.h>
30  #include <linux/workqueue.h>
31  #include <net/netdev_lock.h>
32  #include <net/rtnetlink.h>
33  #include <net/xfrm.h>
34  #include <linux/netpoll.h>
35  #include <linux/phy.h>
36  
37  #define MACVLAN_HASH_BITS	8
38  #define MACVLAN_HASH_SIZE	(1<<MACVLAN_HASH_BITS)
39  #define MACVLAN_DEFAULT_BC_QUEUE_LEN	1000
40  
41  #define MACVLAN_F_PASSTHRU	1
42  #define MACVLAN_F_ADDRCHANGE	2
43  
44  struct macvlan_port {
45  	struct net_device	*dev;
46  	struct hlist_head	vlan_hash[MACVLAN_HASH_SIZE];
47  	struct list_head	vlans;
48  	struct sk_buff_head	bc_queue;
49  	struct work_struct	bc_work;
50  	u32			bc_queue_len_used;
51  	int			bc_cutoff;
52  	u32			flags;
53  	int			count;
54  	struct hlist_head	vlan_source_hash[MACVLAN_HASH_SIZE];
55  	DECLARE_BITMAP(bc_filter, MACVLAN_MC_FILTER_SZ);
56  	DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ);
57  	unsigned char           perm_addr[ETH_ALEN];
58  };
59  
60  struct macvlan_source_entry {
61  	struct hlist_node	hlist;
62  	struct macvlan_dev	*vlan;
63  	unsigned char		addr[6+2] __aligned(sizeof(u16));
64  	struct rcu_head		rcu;
65  };
66  
67  struct macvlan_skb_cb {
68  	const struct macvlan_dev *src;
69  };
70  
71  #define MACVLAN_SKB_CB(__skb) ((struct macvlan_skb_cb *)&((__skb)->cb[0]))
72  
73  static void macvlan_port_destroy(struct net_device *dev);
74  static void update_port_bc_queue_len(struct macvlan_port *port);
75  
macvlan_passthru(const struct macvlan_port * port)76  static inline bool macvlan_passthru(const struct macvlan_port *port)
77  {
78  	return port->flags & MACVLAN_F_PASSTHRU;
79  }
80  
macvlan_set_passthru(struct macvlan_port * port)81  static inline void macvlan_set_passthru(struct macvlan_port *port)
82  {
83  	port->flags |= MACVLAN_F_PASSTHRU;
84  }
85  
macvlan_addr_change(const struct macvlan_port * port)86  static inline bool macvlan_addr_change(const struct macvlan_port *port)
87  {
88  	return port->flags & MACVLAN_F_ADDRCHANGE;
89  }
90  
macvlan_set_addr_change(struct macvlan_port * port)91  static inline void macvlan_set_addr_change(struct macvlan_port *port)
92  {
93  	port->flags |= MACVLAN_F_ADDRCHANGE;
94  }
95  
macvlan_clear_addr_change(struct macvlan_port * port)96  static inline void macvlan_clear_addr_change(struct macvlan_port *port)
97  {
98  	port->flags &= ~MACVLAN_F_ADDRCHANGE;
99  }
100  
101  /* Hash Ethernet address */
macvlan_eth_hash(const unsigned char * addr)102  static u32 macvlan_eth_hash(const unsigned char *addr)
103  {
104  	u64 value = get_unaligned((u64 *)addr);
105  
106  	/* only want 6 bytes */
107  #ifdef __BIG_ENDIAN
108  	value >>= 16;
109  #else
110  	value <<= 16;
111  #endif
112  	return hash_64(value, MACVLAN_HASH_BITS);
113  }
114  
macvlan_port_get_rcu(const struct net_device * dev)115  static struct macvlan_port *macvlan_port_get_rcu(const struct net_device *dev)
116  {
117  	return rcu_dereference(dev->rx_handler_data);
118  }
119  
macvlan_port_get_rtnl(const struct net_device * dev)120  static struct macvlan_port *macvlan_port_get_rtnl(const struct net_device *dev)
121  {
122  	return rtnl_dereference(dev->rx_handler_data);
123  }
124  
macvlan_hash_lookup(const struct macvlan_port * port,const unsigned char * addr)125  static struct macvlan_dev *macvlan_hash_lookup(const struct macvlan_port *port,
126  					       const unsigned char *addr)
127  {
128  	struct macvlan_dev *vlan;
129  	u32 idx = macvlan_eth_hash(addr);
130  
131  	hlist_for_each_entry_rcu(vlan, &port->vlan_hash[idx], hlist,
132  				 lockdep_rtnl_is_held()) {
133  		if (ether_addr_equal_64bits(vlan->dev->dev_addr, addr))
134  			return vlan;
135  	}
136  	return NULL;
137  }
138  
macvlan_hash_lookup_source(const struct macvlan_dev * vlan,const unsigned char * addr)139  static struct macvlan_source_entry *macvlan_hash_lookup_source(
140  	const struct macvlan_dev *vlan,
141  	const unsigned char *addr)
142  {
143  	struct macvlan_source_entry *entry;
144  	u32 idx = macvlan_eth_hash(addr);
145  	struct hlist_head *h = &vlan->port->vlan_source_hash[idx];
146  
147  	hlist_for_each_entry_rcu(entry, h, hlist, lockdep_rtnl_is_held()) {
148  		if (ether_addr_equal_64bits(entry->addr, addr) &&
149  		    entry->vlan == vlan)
150  			return entry;
151  	}
152  	return NULL;
153  }
154  
macvlan_hash_add_source(struct macvlan_dev * vlan,const unsigned char * addr)155  static int macvlan_hash_add_source(struct macvlan_dev *vlan,
156  				   const unsigned char *addr)
157  {
158  	struct macvlan_port *port = vlan->port;
159  	struct macvlan_source_entry *entry;
160  	struct hlist_head *h;
161  
162  	entry = macvlan_hash_lookup_source(vlan, addr);
163  	if (entry)
164  		return 0;
165  
166  	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
167  	if (!entry)
168  		return -ENOMEM;
169  
170  	ether_addr_copy(entry->addr, addr);
171  	entry->vlan = vlan;
172  	h = &port->vlan_source_hash[macvlan_eth_hash(addr)];
173  	hlist_add_head_rcu(&entry->hlist, h);
174  	vlan->macaddr_count++;
175  
176  	return 0;
177  }
178  
macvlan_hash_add(struct macvlan_dev * vlan)179  static void macvlan_hash_add(struct macvlan_dev *vlan)
180  {
181  	struct macvlan_port *port = vlan->port;
182  	const unsigned char *addr = vlan->dev->dev_addr;
183  	u32 idx = macvlan_eth_hash(addr);
184  
185  	hlist_add_head_rcu(&vlan->hlist, &port->vlan_hash[idx]);
186  }
187  
macvlan_hash_del_source(struct macvlan_source_entry * entry)188  static void macvlan_hash_del_source(struct macvlan_source_entry *entry)
189  {
190  	hlist_del_rcu(&entry->hlist);
191  	kfree_rcu(entry, rcu);
192  }
193  
macvlan_hash_del(struct macvlan_dev * vlan,bool sync)194  static void macvlan_hash_del(struct macvlan_dev *vlan, bool sync)
195  {
196  	hlist_del_rcu(&vlan->hlist);
197  	if (sync)
198  		synchronize_rcu();
199  }
200  
macvlan_hash_change_addr(struct macvlan_dev * vlan,const unsigned char * addr)201  static void macvlan_hash_change_addr(struct macvlan_dev *vlan,
202  					const unsigned char *addr)
203  {
204  	macvlan_hash_del(vlan, true);
205  	/* Now that we are unhashed it is safe to change the device
206  	 * address without confusing packet delivery.
207  	 */
208  	eth_hw_addr_set(vlan->dev, addr);
209  	macvlan_hash_add(vlan);
210  }
211  
macvlan_addr_busy(const struct macvlan_port * port,const unsigned char * addr)212  static bool macvlan_addr_busy(const struct macvlan_port *port,
213  			      const unsigned char *addr)
214  {
215  	/* Test to see if the specified address is
216  	 * currently in use by the underlying device or
217  	 * another macvlan.
218  	 */
219  	if (!macvlan_passthru(port) && !macvlan_addr_change(port) &&
220  	    ether_addr_equal_64bits(port->dev->dev_addr, addr))
221  		return true;
222  
223  	if (macvlan_hash_lookup(port, addr))
224  		return true;
225  
226  	return false;
227  }
228  
229  
macvlan_broadcast_one(struct sk_buff * skb,const struct macvlan_dev * vlan,const struct ethhdr * eth,bool local)230  static int macvlan_broadcast_one(struct sk_buff *skb,
231  				 const struct macvlan_dev *vlan,
232  				 const struct ethhdr *eth, bool local)
233  {
234  	struct net_device *dev = vlan->dev;
235  
236  	if (local)
237  		return __dev_forward_skb(dev, skb);
238  
239  	skb->dev = dev;
240  	if (ether_addr_equal_64bits(eth->h_dest, dev->broadcast))
241  		skb->pkt_type = PACKET_BROADCAST;
242  	else
243  		skb->pkt_type = PACKET_MULTICAST;
244  
245  	return 0;
246  }
247  
macvlan_hash_mix(const struct macvlan_dev * vlan)248  static u32 macvlan_hash_mix(const struct macvlan_dev *vlan)
249  {
250  	return (u32)(((unsigned long)vlan) >> L1_CACHE_SHIFT);
251  }
252  
253  
mc_hash(const struct macvlan_dev * vlan,const unsigned char * addr)254  static unsigned int mc_hash(const struct macvlan_dev *vlan,
255  			    const unsigned char *addr)
256  {
257  	u32 val = __get_unaligned_cpu32(addr + 2);
258  
259  	val ^= macvlan_hash_mix(vlan);
260  	return hash_32(val, MACVLAN_MC_FILTER_BITS);
261  }
262  
macvlan_broadcast(struct sk_buff * skb,const struct macvlan_port * port,struct net_device * src,enum macvlan_mode mode)263  static void macvlan_broadcast(struct sk_buff *skb,
264  			      const struct macvlan_port *port,
265  			      struct net_device *src,
266  			      enum macvlan_mode mode)
267  {
268  	const struct ethhdr *eth = eth_hdr(skb);
269  	const struct macvlan_dev *vlan;
270  	struct sk_buff *nskb;
271  	unsigned int i;
272  	int err;
273  	unsigned int hash;
274  
275  	if (skb->protocol == htons(ETH_P_PAUSE))
276  		return;
277  
278  	hash_for_each_rcu(port->vlan_hash, i, vlan, hlist) {
279  		if (vlan->dev == src || !(vlan->mode & mode))
280  			continue;
281  
282  		hash = mc_hash(vlan, eth->h_dest);
283  		if (!test_bit(hash, vlan->mc_filter))
284  			continue;
285  
286  		err = NET_RX_DROP;
287  		nskb = skb_clone(skb, GFP_ATOMIC);
288  		if (likely(nskb))
289  			err = macvlan_broadcast_one(nskb, vlan, eth,
290  					mode == MACVLAN_MODE_BRIDGE) ?:
291  			      netif_rx(nskb);
292  		macvlan_count_rx(vlan, skb->len + ETH_HLEN,
293  				 err == NET_RX_SUCCESS, true);
294  	}
295  }
296  
macvlan_multicast_rx(const struct macvlan_port * port,const struct macvlan_dev * src,struct sk_buff * skb)297  static void macvlan_multicast_rx(const struct macvlan_port *port,
298  				 const struct macvlan_dev *src,
299  				 struct sk_buff *skb)
300  {
301  	if (!src)
302  		/* frame comes from an external address */
303  		macvlan_broadcast(skb, port, NULL,
304  				  MACVLAN_MODE_PRIVATE |
305  				  MACVLAN_MODE_VEPA    |
306  				  MACVLAN_MODE_PASSTHRU|
307  				  MACVLAN_MODE_BRIDGE);
308  	else if (src->mode == MACVLAN_MODE_VEPA)
309  		/* flood to everyone except source */
310  		macvlan_broadcast(skb, port, src->dev,
311  				  MACVLAN_MODE_VEPA |
312  				  MACVLAN_MODE_BRIDGE);
313  	else
314  		/*
315  		 * flood only to VEPA ports, bridge ports
316  		 * already saw the frame on the way out.
317  		 */
318  		macvlan_broadcast(skb, port, src->dev,
319  				  MACVLAN_MODE_VEPA);
320  }
321  
macvlan_process_broadcast(struct work_struct * w)322  static void macvlan_process_broadcast(struct work_struct *w)
323  {
324  	struct macvlan_port *port = container_of(w, struct macvlan_port,
325  						 bc_work);
326  	struct sk_buff *skb;
327  	struct sk_buff_head list;
328  
329  	__skb_queue_head_init(&list);
330  
331  	spin_lock_bh(&port->bc_queue.lock);
332  	skb_queue_splice_tail_init(&port->bc_queue, &list);
333  	spin_unlock_bh(&port->bc_queue.lock);
334  
335  	while ((skb = __skb_dequeue(&list))) {
336  		const struct macvlan_dev *src = MACVLAN_SKB_CB(skb)->src;
337  
338  		rcu_read_lock();
339  		macvlan_multicast_rx(port, src, skb);
340  		rcu_read_unlock();
341  
342  		if (src)
343  			dev_put(src->dev);
344  		consume_skb(skb);
345  
346  		cond_resched();
347  	}
348  }
349  
macvlan_broadcast_enqueue(struct macvlan_port * port,const struct macvlan_dev * src,struct sk_buff * skb)350  static void macvlan_broadcast_enqueue(struct macvlan_port *port,
351  				      const struct macvlan_dev *src,
352  				      struct sk_buff *skb)
353  {
354  	struct sk_buff *nskb;
355  	int err = -ENOMEM;
356  
357  	nskb = skb_clone(skb, GFP_ATOMIC);
358  	if (!nskb)
359  		goto err;
360  
361  	MACVLAN_SKB_CB(nskb)->src = src;
362  
363  	spin_lock(&port->bc_queue.lock);
364  	if (skb_queue_len(&port->bc_queue) < port->bc_queue_len_used) {
365  		if (src)
366  			dev_hold(src->dev);
367  		__skb_queue_tail(&port->bc_queue, nskb);
368  		err = 0;
369  	}
370  	spin_unlock(&port->bc_queue.lock);
371  
372  	queue_work(system_unbound_wq, &port->bc_work);
373  
374  	if (err)
375  		goto free_nskb;
376  
377  	return;
378  
379  free_nskb:
380  	kfree_skb(nskb);
381  err:
382  	dev_core_stats_rx_dropped_inc(skb->dev);
383  }
384  
macvlan_flush_sources(struct macvlan_port * port,struct macvlan_dev * vlan)385  static void macvlan_flush_sources(struct macvlan_port *port,
386  				  struct macvlan_dev *vlan)
387  {
388  	struct macvlan_source_entry *entry;
389  	struct hlist_node *next;
390  	int i;
391  
392  	hash_for_each_safe(port->vlan_source_hash, i, next, entry, hlist)
393  		if (entry->vlan == vlan)
394  			macvlan_hash_del_source(entry);
395  
396  	vlan->macaddr_count = 0;
397  }
398  
macvlan_forward_source_one(struct sk_buff * skb,struct macvlan_dev * vlan)399  static void macvlan_forward_source_one(struct sk_buff *skb,
400  				       struct macvlan_dev *vlan)
401  {
402  	struct sk_buff *nskb;
403  	struct net_device *dev;
404  	int len;
405  	int ret;
406  
407  	dev = vlan->dev;
408  	if (unlikely(!(dev->flags & IFF_UP)))
409  		return;
410  
411  	nskb = skb_clone(skb, GFP_ATOMIC);
412  	if (!nskb)
413  		return;
414  
415  	len = nskb->len + ETH_HLEN;
416  	nskb->dev = dev;
417  
418  	if (ether_addr_equal_64bits(eth_hdr(skb)->h_dest, dev->dev_addr))
419  		nskb->pkt_type = PACKET_HOST;
420  
421  	ret = __netif_rx(nskb);
422  	macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false);
423  }
424  
macvlan_forward_source(struct sk_buff * skb,struct macvlan_port * port,const unsigned char * addr)425  static bool macvlan_forward_source(struct sk_buff *skb,
426  				   struct macvlan_port *port,
427  				   const unsigned char *addr)
428  {
429  	struct macvlan_source_entry *entry;
430  	u32 idx = macvlan_eth_hash(addr);
431  	struct hlist_head *h = &port->vlan_source_hash[idx];
432  	bool consume = false;
433  
434  	hlist_for_each_entry_rcu(entry, h, hlist) {
435  		if (ether_addr_equal_64bits(entry->addr, addr)) {
436  			if (entry->vlan->flags & MACVLAN_FLAG_NODST)
437  				consume = true;
438  			macvlan_forward_source_one(skb, entry->vlan);
439  		}
440  	}
441  
442  	return consume;
443  }
444  
445  /* called under rcu_read_lock() from netif_receive_skb */
macvlan_handle_frame(struct sk_buff ** pskb)446  static rx_handler_result_t macvlan_handle_frame(struct sk_buff **pskb)
447  {
448  	struct macvlan_port *port;
449  	struct sk_buff *skb = *pskb;
450  	const struct ethhdr *eth = eth_hdr(skb);
451  	const struct macvlan_dev *vlan;
452  	const struct macvlan_dev *src;
453  	struct net_device *dev;
454  	unsigned int len = 0;
455  	int ret;
456  	rx_handler_result_t handle_res;
457  
458  	/* Packets from dev_loopback_xmit() do not have L2 header, bail out */
459  	if (unlikely(skb->pkt_type == PACKET_LOOPBACK))
460  		return RX_HANDLER_PASS;
461  
462  	port = macvlan_port_get_rcu(skb->dev);
463  	if (is_multicast_ether_addr(eth->h_dest)) {
464  		unsigned int hash;
465  
466  		skb = ip_check_defrag(dev_net(skb->dev), skb, IP_DEFRAG_MACVLAN);
467  		if (!skb)
468  			return RX_HANDLER_CONSUMED;
469  		*pskb = skb;
470  		eth = eth_hdr(skb);
471  		if (macvlan_forward_source(skb, port, eth->h_source)) {
472  			kfree_skb(skb);
473  			return RX_HANDLER_CONSUMED;
474  		}
475  		src = macvlan_hash_lookup(port, eth->h_source);
476  		if (src && src->mode != MACVLAN_MODE_VEPA &&
477  		    src->mode != MACVLAN_MODE_BRIDGE) {
478  			/* forward to original port. */
479  			vlan = src;
480  			ret = macvlan_broadcast_one(skb, vlan, eth, 0) ?:
481  			      __netif_rx(skb);
482  			handle_res = RX_HANDLER_CONSUMED;
483  			goto out;
484  		}
485  
486  		hash = mc_hash(NULL, eth->h_dest);
487  		if (test_bit(hash, port->bc_filter))
488  			macvlan_broadcast_enqueue(port, src, skb);
489  		else if (test_bit(hash, port->mc_filter))
490  			macvlan_multicast_rx(port, src, skb);
491  
492  		return RX_HANDLER_PASS;
493  	}
494  
495  	if (macvlan_forward_source(skb, port, eth->h_source)) {
496  		kfree_skb(skb);
497  		return RX_HANDLER_CONSUMED;
498  	}
499  	if (macvlan_passthru(port))
500  		vlan = list_first_or_null_rcu(&port->vlans,
501  					      struct macvlan_dev, list);
502  	else
503  		vlan = macvlan_hash_lookup(port, eth->h_dest);
504  	if (!vlan || vlan->mode == MACVLAN_MODE_SOURCE)
505  		return RX_HANDLER_PASS;
506  
507  	dev = vlan->dev;
508  	if (unlikely(!(dev->flags & IFF_UP))) {
509  		kfree_skb(skb);
510  		return RX_HANDLER_CONSUMED;
511  	}
512  	len = skb->len + ETH_HLEN;
513  	skb = skb_share_check(skb, GFP_ATOMIC);
514  	if (!skb) {
515  		ret = NET_RX_DROP;
516  		handle_res = RX_HANDLER_CONSUMED;
517  		goto out;
518  	}
519  
520  	*pskb = skb;
521  	skb->dev = dev;
522  	skb->pkt_type = PACKET_HOST;
523  
524  	ret = NET_RX_SUCCESS;
525  	handle_res = RX_HANDLER_ANOTHER;
526  out:
527  	macvlan_count_rx(vlan, len, ret == NET_RX_SUCCESS, false);
528  	return handle_res;
529  }
530  
macvlan_queue_xmit(struct sk_buff * skb,struct net_device * dev)531  static int macvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev)
532  {
533  	const struct macvlan_dev *vlan = netdev_priv(dev);
534  	const struct macvlan_port *port = vlan->port;
535  	const struct macvlan_dev *dest;
536  
537  	if (vlan->mode == MACVLAN_MODE_BRIDGE) {
538  		const struct ethhdr *eth = skb_eth_hdr(skb);
539  
540  		/* send to other bridge ports directly */
541  		if (is_multicast_ether_addr(eth->h_dest)) {
542  			skb_reset_mac_header(skb);
543  			macvlan_broadcast(skb, port, dev, MACVLAN_MODE_BRIDGE);
544  			goto xmit_world;
545  		}
546  
547  		dest = macvlan_hash_lookup(port, eth->h_dest);
548  		if (dest && dest->mode == MACVLAN_MODE_BRIDGE) {
549  			/* send to lowerdev first for its network taps */
550  			dev_forward_skb(vlan->lowerdev, skb);
551  
552  			return NET_XMIT_SUCCESS;
553  		}
554  	}
555  xmit_world:
556  	skb->dev = vlan->lowerdev;
557  	return dev_queue_xmit_accel(skb,
558  				    netdev_get_sb_channel(dev) ? dev : NULL);
559  }
560  
macvlan_netpoll_send_skb(struct macvlan_dev * vlan,struct sk_buff * skb)561  static inline netdev_tx_t macvlan_netpoll_send_skb(struct macvlan_dev *vlan, struct sk_buff *skb)
562  {
563  #ifdef CONFIG_NET_POLL_CONTROLLER
564  	return netpoll_send_skb(vlan->netpoll, skb);
565  #else
566  	BUG();
567  	return NETDEV_TX_OK;
568  #endif
569  }
570  
macvlan_start_xmit(struct sk_buff * skb,struct net_device * dev)571  static netdev_tx_t macvlan_start_xmit(struct sk_buff *skb,
572  				      struct net_device *dev)
573  {
574  	struct macvlan_dev *vlan = netdev_priv(dev);
575  	unsigned int len = skb->len;
576  	int ret;
577  
578  	if (unlikely(netpoll_tx_running(dev)))
579  		return macvlan_netpoll_send_skb(vlan, skb);
580  
581  	ret = macvlan_queue_xmit(skb, dev);
582  
583  	if (likely(ret == NET_XMIT_SUCCESS || ret == NET_XMIT_CN)) {
584  		struct vlan_pcpu_stats *pcpu_stats;
585  
586  		pcpu_stats = this_cpu_ptr(vlan->pcpu_stats);
587  		u64_stats_update_begin(&pcpu_stats->syncp);
588  		u64_stats_inc(&pcpu_stats->tx_packets);
589  		u64_stats_add(&pcpu_stats->tx_bytes, len);
590  		u64_stats_update_end(&pcpu_stats->syncp);
591  	} else {
592  		this_cpu_inc(vlan->pcpu_stats->tx_dropped);
593  	}
594  	return ret;
595  }
596  
macvlan_hard_header(struct sk_buff * skb,struct net_device * dev,unsigned short type,const void * daddr,const void * saddr,unsigned len)597  static int macvlan_hard_header(struct sk_buff *skb, struct net_device *dev,
598  			       unsigned short type, const void *daddr,
599  			       const void *saddr, unsigned len)
600  {
601  	const struct macvlan_dev *vlan = netdev_priv(dev);
602  	struct net_device *lowerdev = vlan->lowerdev;
603  
604  	return dev_hard_header(skb, lowerdev, type, daddr,
605  			       saddr ? : dev->dev_addr, len);
606  }
607  
608  static const struct header_ops macvlan_hard_header_ops = {
609  	.create  	= macvlan_hard_header,
610  	.parse		= eth_header_parse,
611  	.cache		= eth_header_cache,
612  	.cache_update	= eth_header_cache_update,
613  	.parse_protocol	= eth_header_parse_protocol,
614  };
615  
macvlan_open(struct net_device * dev)616  static int macvlan_open(struct net_device *dev)
617  {
618  	struct macvlan_dev *vlan = netdev_priv(dev);
619  	struct net_device *lowerdev = vlan->lowerdev;
620  	int err;
621  
622  	if (macvlan_passthru(vlan->port)) {
623  		if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC)) {
624  			err = dev_set_promiscuity(lowerdev, 1);
625  			if (err < 0)
626  				goto out;
627  		}
628  		goto hash_add;
629  	}
630  
631  	err = -EADDRINUSE;
632  	if (macvlan_addr_busy(vlan->port, dev->dev_addr))
633  		goto out;
634  
635  	/* Attempt to populate accel_priv which is used to offload the L2
636  	 * forwarding requests for unicast packets.
637  	 */
638  	if (lowerdev->features & NETIF_F_HW_L2FW_DOFFLOAD)
639  		vlan->accel_priv =
640  		      lowerdev->netdev_ops->ndo_dfwd_add_station(lowerdev, dev);
641  
642  	/* If earlier attempt to offload failed, or accel_priv is not
643  	 * populated we must add the unicast address to the lower device.
644  	 */
645  	if (IS_ERR_OR_NULL(vlan->accel_priv)) {
646  		vlan->accel_priv = NULL;
647  		err = dev_uc_add(lowerdev, dev->dev_addr);
648  		if (err < 0)
649  			goto out;
650  	}
651  
652  	if (dev->flags & IFF_ALLMULTI) {
653  		err = dev_set_allmulti(lowerdev, 1);
654  		if (err < 0)
655  			goto del_unicast;
656  	}
657  
658  	if (dev->flags & IFF_PROMISC) {
659  		err = dev_set_promiscuity(lowerdev, 1);
660  		if (err < 0)
661  			goto clear_multi;
662  	}
663  
664  hash_add:
665  	macvlan_hash_add(vlan);
666  	return 0;
667  
668  clear_multi:
669  	if (dev->flags & IFF_ALLMULTI)
670  		dev_set_allmulti(lowerdev, -1);
671  del_unicast:
672  	if (vlan->accel_priv) {
673  		lowerdev->netdev_ops->ndo_dfwd_del_station(lowerdev,
674  							   vlan->accel_priv);
675  		vlan->accel_priv = NULL;
676  	} else {
677  		dev_uc_del(lowerdev, dev->dev_addr);
678  	}
679  out:
680  	return err;
681  }
682  
macvlan_stop(struct net_device * dev)683  static int macvlan_stop(struct net_device *dev)
684  {
685  	struct macvlan_dev *vlan = netdev_priv(dev);
686  	struct net_device *lowerdev = vlan->lowerdev;
687  
688  	if (vlan->accel_priv) {
689  		lowerdev->netdev_ops->ndo_dfwd_del_station(lowerdev,
690  							   vlan->accel_priv);
691  		vlan->accel_priv = NULL;
692  	}
693  
694  	dev_uc_unsync(lowerdev, dev);
695  	dev_mc_unsync(lowerdev, dev);
696  
697  	if (macvlan_passthru(vlan->port)) {
698  		if (!(vlan->flags & MACVLAN_FLAG_NOPROMISC))
699  			dev_set_promiscuity(lowerdev, -1);
700  		goto hash_del;
701  	}
702  
703  	if (dev->flags & IFF_ALLMULTI)
704  		dev_set_allmulti(lowerdev, -1);
705  
706  	if (dev->flags & IFF_PROMISC)
707  		dev_set_promiscuity(lowerdev, -1);
708  
709  	dev_uc_del(lowerdev, dev->dev_addr);
710  
711  hash_del:
712  	macvlan_hash_del(vlan, !dev->dismantle);
713  	return 0;
714  }
715  
macvlan_sync_address(struct net_device * dev,const unsigned char * addr)716  static int macvlan_sync_address(struct net_device *dev,
717  				const unsigned char *addr)
718  {
719  	struct macvlan_dev *vlan = netdev_priv(dev);
720  	struct net_device *lowerdev = vlan->lowerdev;
721  	struct macvlan_port *port = vlan->port;
722  	int err;
723  
724  	if (!(dev->flags & IFF_UP)) {
725  		/* Just copy in the new address */
726  		eth_hw_addr_set(dev, addr);
727  	} else {
728  		/* Rehash and update the device filters */
729  		if (macvlan_addr_busy(vlan->port, addr))
730  			return -EADDRINUSE;
731  
732  		if (!macvlan_passthru(port)) {
733  			err = dev_uc_add(lowerdev, addr);
734  			if (err)
735  				return err;
736  
737  			dev_uc_del(lowerdev, dev->dev_addr);
738  		}
739  
740  		macvlan_hash_change_addr(vlan, addr);
741  	}
742  	if (macvlan_passthru(port) && !macvlan_addr_change(port)) {
743  		/* Since addr_change isn't set, we are here due to lower
744  		 * device change.  Save the lower-dev address so we can
745  		 * restore it later.
746  		 */
747  		ether_addr_copy(vlan->port->perm_addr,
748  				lowerdev->dev_addr);
749  	}
750  	macvlan_clear_addr_change(port);
751  	return 0;
752  }
753  
macvlan_set_mac_address(struct net_device * dev,void * p)754  static int macvlan_set_mac_address(struct net_device *dev, void *p)
755  {
756  	struct macvlan_dev *vlan = netdev_priv(dev);
757  	struct sockaddr *addr = p;
758  
759  	if (!is_valid_ether_addr(addr->sa_data))
760  		return -EADDRNOTAVAIL;
761  
762  	/* If the addresses are the same, this is a no-op */
763  	if (ether_addr_equal(dev->dev_addr, addr->sa_data))
764  		return 0;
765  
766  	if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
767  		macvlan_set_addr_change(vlan->port);
768  		return dev_set_mac_address(vlan->lowerdev, addr, NULL);
769  	}
770  
771  	if (macvlan_addr_busy(vlan->port, addr->sa_data))
772  		return -EADDRINUSE;
773  
774  	return macvlan_sync_address(dev, addr->sa_data);
775  }
776  
macvlan_change_rx_flags(struct net_device * dev,int change)777  static void macvlan_change_rx_flags(struct net_device *dev, int change)
778  {
779  	struct macvlan_dev *vlan = netdev_priv(dev);
780  	struct net_device *lowerdev = vlan->lowerdev;
781  
782  	if (dev->flags & IFF_UP) {
783  		if (change & IFF_ALLMULTI)
784  			dev_set_allmulti(lowerdev, dev->flags & IFF_ALLMULTI ? 1 : -1);
785  		if (!macvlan_passthru(vlan->port) && change & IFF_PROMISC)
786  			dev_set_promiscuity(lowerdev,
787  					    dev->flags & IFF_PROMISC ? 1 : -1);
788  
789  	}
790  }
791  
macvlan_compute_filter(unsigned long * mc_filter,struct net_device * dev,struct macvlan_dev * vlan,int cutoff)792  static void macvlan_compute_filter(unsigned long *mc_filter,
793  				   struct net_device *dev,
794  				   struct macvlan_dev *vlan, int cutoff)
795  {
796  	if (dev->flags & (IFF_PROMISC | IFF_ALLMULTI)) {
797  		bitmap_fill(mc_filter, MACVLAN_MC_FILTER_SZ);
798  	} else {
799  		DECLARE_BITMAP(filter, MACVLAN_MC_FILTER_SZ);
800  		struct netdev_hw_addr *ha;
801  
802  		bitmap_zero(filter, MACVLAN_MC_FILTER_SZ);
803  		netdev_for_each_mc_addr(ha, dev) {
804  			if (!vlan && ha->synced <= cutoff)
805  				continue;
806  
807  			__set_bit(mc_hash(vlan, ha->addr), filter);
808  		}
809  
810  		__set_bit(mc_hash(vlan, dev->broadcast), filter);
811  
812  		bitmap_copy(mc_filter, filter, MACVLAN_MC_FILTER_SZ);
813  	}
814  }
815  
macvlan_recompute_bc_filter(struct macvlan_dev * vlan)816  static void macvlan_recompute_bc_filter(struct macvlan_dev *vlan)
817  {
818  	if (vlan->port->bc_cutoff < 0) {
819  		bitmap_zero(vlan->port->bc_filter, MACVLAN_MC_FILTER_SZ);
820  		return;
821  	}
822  
823  	macvlan_compute_filter(vlan->port->bc_filter, vlan->lowerdev, NULL,
824  			       vlan->port->bc_cutoff);
825  }
826  
macvlan_set_mac_lists(struct net_device * dev)827  static void macvlan_set_mac_lists(struct net_device *dev)
828  {
829  	struct macvlan_dev *vlan = netdev_priv(dev);
830  
831  	macvlan_compute_filter(vlan->mc_filter, dev, vlan, 0);
832  
833  	dev_uc_sync(vlan->lowerdev, dev);
834  	dev_mc_sync(vlan->lowerdev, dev);
835  
836  	/* This is slightly inaccurate as we're including the subscription
837  	 * list of vlan->lowerdev too.
838  	 *
839  	 * Bug alert: This only works if everyone has the same broadcast
840  	 * address as lowerdev.  As soon as someone changes theirs this
841  	 * will break.
842  	 *
843  	 * However, this is already broken as when you change your broadcast
844  	 * address we don't get called.
845  	 *
846  	 * The solution is to maintain a list of broadcast addresses like
847  	 * we do for uc/mc, if you care.
848  	 */
849  	macvlan_compute_filter(vlan->port->mc_filter, vlan->lowerdev, NULL,
850  			       0);
851  	macvlan_recompute_bc_filter(vlan);
852  }
853  
update_port_bc_cutoff(struct macvlan_dev * vlan,int cutoff)854  static void update_port_bc_cutoff(struct macvlan_dev *vlan, int cutoff)
855  {
856  	if (vlan->port->bc_cutoff == cutoff)
857  		return;
858  
859  	vlan->port->bc_cutoff = cutoff;
860  	macvlan_recompute_bc_filter(vlan);
861  }
862  
macvlan_change_mtu(struct net_device * dev,int new_mtu)863  static int macvlan_change_mtu(struct net_device *dev, int new_mtu)
864  {
865  	struct macvlan_dev *vlan = netdev_priv(dev);
866  
867  	if (vlan->lowerdev->mtu < new_mtu)
868  		return -EINVAL;
869  	WRITE_ONCE(dev->mtu, new_mtu);
870  	return 0;
871  }
872  
macvlan_hwtstamp_get(struct net_device * dev,struct kernel_hwtstamp_config * cfg)873  static int macvlan_hwtstamp_get(struct net_device *dev,
874  				struct kernel_hwtstamp_config *cfg)
875  {
876  	struct net_device *real_dev = macvlan_dev_real_dev(dev);
877  
878  	return generic_hwtstamp_get_lower(real_dev, cfg);
879  }
880  
macvlan_hwtstamp_set(struct net_device * dev,struct kernel_hwtstamp_config * cfg,struct netlink_ext_ack * extack)881  static int macvlan_hwtstamp_set(struct net_device *dev,
882  				struct kernel_hwtstamp_config *cfg,
883  				struct netlink_ext_ack *extack)
884  {
885  	struct net_device *real_dev = macvlan_dev_real_dev(dev);
886  
887  	if (!net_eq(dev_net(dev), &init_net))
888  		return -EOPNOTSUPP;
889  
890  	return generic_hwtstamp_set_lower(real_dev, cfg, extack);
891  }
892  
893  /*
894   * macvlan network devices have devices nesting below it and are a special
895   * "super class" of normal network devices; split their locks off into a
896   * separate class since they always nest.
897   */
898  static struct lock_class_key macvlan_netdev_addr_lock_key;
899  
900  #define ALWAYS_ON_OFFLOADS \
901  	(NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_GSO_SOFTWARE | \
902  	 NETIF_F_GSO_ROBUST | NETIF_F_GSO_ENCAP_ALL)
903  
904  #define ALWAYS_ON_FEATURES ALWAYS_ON_OFFLOADS
905  
906  #define MACVLAN_FEATURES \
907  	(NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
908  	 NETIF_F_GSO | NETIF_F_TSO | NETIF_F_LRO | \
909  	 NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM | \
910  	 NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_STAG_FILTER)
911  
912  #define MACVLAN_STATE_MASK \
913  	((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))
914  
macvlan_set_lockdep_class(struct net_device * dev)915  static void macvlan_set_lockdep_class(struct net_device *dev)
916  {
917  	netdev_lockdep_set_classes(dev);
918  	lockdep_set_class(&dev->addr_list_lock,
919  			  &macvlan_netdev_addr_lock_key);
920  }
921  
macvlan_init(struct net_device * dev)922  static int macvlan_init(struct net_device *dev)
923  {
924  	struct macvlan_dev *vlan = netdev_priv(dev);
925  	struct net_device *lowerdev = vlan->lowerdev;
926  	struct macvlan_port *port = vlan->port;
927  
928  	dev->state		= (dev->state & ~MACVLAN_STATE_MASK) |
929  				  (lowerdev->state & MACVLAN_STATE_MASK);
930  	dev->features 		= lowerdev->features & MACVLAN_FEATURES;
931  	dev->features		|= ALWAYS_ON_FEATURES;
932  	dev->hw_features	|= NETIF_F_LRO;
933  	dev->vlan_features	= lowerdev->vlan_features & MACVLAN_FEATURES;
934  	dev->vlan_features	|= ALWAYS_ON_OFFLOADS;
935  	dev->hw_enc_features    |= dev->features;
936  	dev->lltx		= true;
937  	netif_inherit_tso_max(dev, lowerdev);
938  	dev->hard_header_len	= lowerdev->hard_header_len;
939  	macvlan_set_lockdep_class(dev);
940  
941  	vlan->pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
942  	if (!vlan->pcpu_stats)
943  		return -ENOMEM;
944  
945  	port->count += 1;
946  
947  	/* Get macvlan's reference to lowerdev */
948  	netdev_hold(lowerdev, &vlan->dev_tracker, GFP_KERNEL);
949  
950  	return 0;
951  }
952  
macvlan_uninit(struct net_device * dev)953  static void macvlan_uninit(struct net_device *dev)
954  {
955  	struct macvlan_dev *vlan = netdev_priv(dev);
956  	struct macvlan_port *port = vlan->port;
957  
958  	free_percpu(vlan->pcpu_stats);
959  
960  	macvlan_flush_sources(port, vlan);
961  	port->count -= 1;
962  	if (!port->count)
963  		macvlan_port_destroy(port->dev);
964  }
965  
macvlan_dev_get_stats64(struct net_device * dev,struct rtnl_link_stats64 * stats)966  static void macvlan_dev_get_stats64(struct net_device *dev,
967  				    struct rtnl_link_stats64 *stats)
968  {
969  	struct macvlan_dev *vlan = netdev_priv(dev);
970  
971  	if (vlan->pcpu_stats) {
972  		struct vlan_pcpu_stats *p;
973  		u64 rx_packets, rx_bytes, rx_multicast, tx_packets, tx_bytes;
974  		u32 rx_errors = 0, tx_dropped = 0;
975  		unsigned int start;
976  		int i;
977  
978  		for_each_possible_cpu(i) {
979  			p = per_cpu_ptr(vlan->pcpu_stats, i);
980  			do {
981  				start = u64_stats_fetch_begin(&p->syncp);
982  				rx_packets	= u64_stats_read(&p->rx_packets);
983  				rx_bytes	= u64_stats_read(&p->rx_bytes);
984  				rx_multicast	= u64_stats_read(&p->rx_multicast);
985  				tx_packets	= u64_stats_read(&p->tx_packets);
986  				tx_bytes	= u64_stats_read(&p->tx_bytes);
987  			} while (u64_stats_fetch_retry(&p->syncp, start));
988  
989  			stats->rx_packets	+= rx_packets;
990  			stats->rx_bytes		+= rx_bytes;
991  			stats->multicast	+= rx_multicast;
992  			stats->tx_packets	+= tx_packets;
993  			stats->tx_bytes		+= tx_bytes;
994  			/* rx_errors & tx_dropped are u32, updated
995  			 * without syncp protection.
996  			 */
997  			rx_errors	+= READ_ONCE(p->rx_errors);
998  			tx_dropped	+= READ_ONCE(p->tx_dropped);
999  		}
1000  		stats->rx_errors	= rx_errors;
1001  		stats->rx_dropped	= rx_errors;
1002  		stats->tx_dropped	= tx_dropped;
1003  	}
1004  }
1005  
macvlan_vlan_rx_add_vid(struct net_device * dev,__be16 proto,u16 vid)1006  static int macvlan_vlan_rx_add_vid(struct net_device *dev,
1007  				   __be16 proto, u16 vid)
1008  {
1009  	struct macvlan_dev *vlan = netdev_priv(dev);
1010  	struct net_device *lowerdev = vlan->lowerdev;
1011  
1012  	return vlan_vid_add(lowerdev, proto, vid);
1013  }
1014  
macvlan_vlan_rx_kill_vid(struct net_device * dev,__be16 proto,u16 vid)1015  static int macvlan_vlan_rx_kill_vid(struct net_device *dev,
1016  				    __be16 proto, u16 vid)
1017  {
1018  	struct macvlan_dev *vlan = netdev_priv(dev);
1019  	struct net_device *lowerdev = vlan->lowerdev;
1020  
1021  	vlan_vid_del(lowerdev, proto, vid);
1022  	return 0;
1023  }
1024  
macvlan_fdb_add(struct ndmsg * ndm,struct nlattr * tb[],struct net_device * dev,const unsigned char * addr,u16 vid,u16 flags,bool * notified,struct netlink_ext_ack * extack)1025  static int macvlan_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
1026  			   struct net_device *dev,
1027  			   const unsigned char *addr, u16 vid,
1028  			   u16 flags, bool *notified,
1029  			   struct netlink_ext_ack *extack)
1030  {
1031  	struct macvlan_dev *vlan = netdev_priv(dev);
1032  	int err = -EINVAL;
1033  
1034  	/* Support unicast filter only on passthru devices.
1035  	 * Multicast filter should be allowed on all devices.
1036  	 */
1037  	if (!macvlan_passthru(vlan->port) && is_unicast_ether_addr(addr))
1038  		return -EOPNOTSUPP;
1039  
1040  	if (flags & NLM_F_REPLACE)
1041  		return -EOPNOTSUPP;
1042  
1043  	if (is_unicast_ether_addr(addr))
1044  		err = dev_uc_add_excl(dev, addr);
1045  	else if (is_multicast_ether_addr(addr))
1046  		err = dev_mc_add_excl(dev, addr);
1047  
1048  	return err;
1049  }
1050  
macvlan_fdb_del(struct ndmsg * ndm,struct nlattr * tb[],struct net_device * dev,const unsigned char * addr,u16 vid,bool * notified,struct netlink_ext_ack * extack)1051  static int macvlan_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],
1052  			   struct net_device *dev,
1053  			   const unsigned char *addr, u16 vid, bool *notified,
1054  			   struct netlink_ext_ack *extack)
1055  {
1056  	struct macvlan_dev *vlan = netdev_priv(dev);
1057  	int err = -EINVAL;
1058  
1059  	/* Support unicast filter only on passthru devices.
1060  	 * Multicast filter should be allowed on all devices.
1061  	 */
1062  	if (!macvlan_passthru(vlan->port) && is_unicast_ether_addr(addr))
1063  		return -EOPNOTSUPP;
1064  
1065  	if (is_unicast_ether_addr(addr))
1066  		err = dev_uc_del(dev, addr);
1067  	else if (is_multicast_ether_addr(addr))
1068  		err = dev_mc_del(dev, addr);
1069  
1070  	return err;
1071  }
1072  
macvlan_ethtool_get_drvinfo(struct net_device * dev,struct ethtool_drvinfo * drvinfo)1073  static void macvlan_ethtool_get_drvinfo(struct net_device *dev,
1074  					struct ethtool_drvinfo *drvinfo)
1075  {
1076  	strscpy(drvinfo->driver, "macvlan", sizeof(drvinfo->driver));
1077  	strscpy(drvinfo->version, "0.1", sizeof(drvinfo->version));
1078  }
1079  
macvlan_ethtool_get_link_ksettings(struct net_device * dev,struct ethtool_link_ksettings * cmd)1080  static int macvlan_ethtool_get_link_ksettings(struct net_device *dev,
1081  					      struct ethtool_link_ksettings *cmd)
1082  {
1083  	const struct macvlan_dev *vlan = netdev_priv(dev);
1084  
1085  	return __ethtool_get_link_ksettings(vlan->lowerdev, cmd);
1086  }
1087  
macvlan_ethtool_get_ts_info(struct net_device * dev,struct kernel_ethtool_ts_info * info)1088  static int macvlan_ethtool_get_ts_info(struct net_device *dev,
1089  				       struct kernel_ethtool_ts_info *info)
1090  {
1091  	struct net_device *real_dev = macvlan_dev_real_dev(dev);
1092  
1093  	return ethtool_get_ts_info_by_layer(real_dev, info);
1094  }
1095  
macvlan_fix_features(struct net_device * dev,netdev_features_t features)1096  static netdev_features_t macvlan_fix_features(struct net_device *dev,
1097  					      netdev_features_t features)
1098  {
1099  	struct macvlan_dev *vlan = netdev_priv(dev);
1100  	netdev_features_t lowerdev_features = vlan->lowerdev->features;
1101  	netdev_features_t mask;
1102  
1103  	features |= NETIF_F_ALL_FOR_ALL;
1104  	features &= (vlan->set_features | ~MACVLAN_FEATURES);
1105  	mask = features;
1106  
1107  	lowerdev_features &= (features | ~NETIF_F_LRO);
1108  	features = netdev_increment_features(lowerdev_features, features, mask);
1109  	features |= ALWAYS_ON_FEATURES;
1110  	features &= (ALWAYS_ON_FEATURES | MACVLAN_FEATURES);
1111  
1112  	return features;
1113  }
1114  
1115  #ifdef CONFIG_NET_POLL_CONTROLLER
macvlan_dev_poll_controller(struct net_device * dev)1116  static void macvlan_dev_poll_controller(struct net_device *dev)
1117  {
1118  	return;
1119  }
1120  
macvlan_dev_netpoll_setup(struct net_device * dev)1121  static int macvlan_dev_netpoll_setup(struct net_device *dev)
1122  {
1123  	struct macvlan_dev *vlan = netdev_priv(dev);
1124  	struct net_device *real_dev = vlan->lowerdev;
1125  	struct netpoll *netpoll;
1126  	int err;
1127  
1128  	netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
1129  	err = -ENOMEM;
1130  	if (!netpoll)
1131  		goto out;
1132  
1133  	err = __netpoll_setup(netpoll, real_dev);
1134  	if (err) {
1135  		kfree(netpoll);
1136  		goto out;
1137  	}
1138  
1139  	vlan->netpoll = netpoll;
1140  
1141  out:
1142  	return err;
1143  }
1144  
macvlan_dev_netpoll_cleanup(struct net_device * dev)1145  static void macvlan_dev_netpoll_cleanup(struct net_device *dev)
1146  {
1147  	struct macvlan_dev *vlan = netdev_priv(dev);
1148  	struct netpoll *netpoll = vlan->netpoll;
1149  
1150  	if (!netpoll)
1151  		return;
1152  
1153  	vlan->netpoll = NULL;
1154  
1155  	__netpoll_free(netpoll);
1156  }
1157  #endif	/* CONFIG_NET_POLL_CONTROLLER */
1158  
macvlan_dev_get_iflink(const struct net_device * dev)1159  static int macvlan_dev_get_iflink(const struct net_device *dev)
1160  {
1161  	struct macvlan_dev *vlan = netdev_priv(dev);
1162  
1163  	return READ_ONCE(vlan->lowerdev->ifindex);
1164  }
1165  
1166  static const struct ethtool_ops macvlan_ethtool_ops = {
1167  	.get_link		= ethtool_op_get_link,
1168  	.get_link_ksettings	= macvlan_ethtool_get_link_ksettings,
1169  	.get_drvinfo		= macvlan_ethtool_get_drvinfo,
1170  	.get_ts_info		= macvlan_ethtool_get_ts_info,
1171  };
1172  
1173  static const struct net_device_ops macvlan_netdev_ops = {
1174  	.ndo_init		= macvlan_init,
1175  	.ndo_uninit		= macvlan_uninit,
1176  	.ndo_open		= macvlan_open,
1177  	.ndo_stop		= macvlan_stop,
1178  	.ndo_start_xmit		= macvlan_start_xmit,
1179  	.ndo_change_mtu		= macvlan_change_mtu,
1180  	.ndo_fix_features	= macvlan_fix_features,
1181  	.ndo_change_rx_flags	= macvlan_change_rx_flags,
1182  	.ndo_set_mac_address	= macvlan_set_mac_address,
1183  	.ndo_set_rx_mode	= macvlan_set_mac_lists,
1184  	.ndo_get_stats64	= macvlan_dev_get_stats64,
1185  	.ndo_validate_addr	= eth_validate_addr,
1186  	.ndo_vlan_rx_add_vid	= macvlan_vlan_rx_add_vid,
1187  	.ndo_vlan_rx_kill_vid	= macvlan_vlan_rx_kill_vid,
1188  	.ndo_fdb_add		= macvlan_fdb_add,
1189  	.ndo_fdb_del		= macvlan_fdb_del,
1190  	.ndo_fdb_dump		= ndo_dflt_fdb_dump,
1191  #ifdef CONFIG_NET_POLL_CONTROLLER
1192  	.ndo_poll_controller	= macvlan_dev_poll_controller,
1193  	.ndo_netpoll_setup	= macvlan_dev_netpoll_setup,
1194  	.ndo_netpoll_cleanup	= macvlan_dev_netpoll_cleanup,
1195  #endif
1196  	.ndo_get_iflink		= macvlan_dev_get_iflink,
1197  	.ndo_features_check	= passthru_features_check,
1198  	.ndo_hwtstamp_get	= macvlan_hwtstamp_get,
1199  	.ndo_hwtstamp_set	= macvlan_hwtstamp_set,
1200  };
1201  
macvlan_dev_free(struct net_device * dev)1202  static void macvlan_dev_free(struct net_device *dev)
1203  {
1204  	struct macvlan_dev *vlan = netdev_priv(dev);
1205  
1206  	/* Get rid of the macvlan's reference to lowerdev */
1207  	netdev_put(vlan->lowerdev, &vlan->dev_tracker);
1208  }
1209  
macvlan_common_setup(struct net_device * dev)1210  void macvlan_common_setup(struct net_device *dev)
1211  {
1212  	ether_setup(dev);
1213  
1214  	/* ether_setup() has set dev->min_mtu to ETH_MIN_MTU. */
1215  	dev->max_mtu		= ETH_MAX_MTU;
1216  	dev->priv_flags	       &= ~IFF_TX_SKB_SHARING;
1217  	netif_keep_dst(dev);
1218  	dev->priv_flags	       |= IFF_UNICAST_FLT;
1219  	dev->change_proto_down	= true;
1220  	dev->netdev_ops		= &macvlan_netdev_ops;
1221  	dev->needs_free_netdev	= true;
1222  	dev->priv_destructor	= macvlan_dev_free;
1223  	dev->header_ops		= &macvlan_hard_header_ops;
1224  	dev->ethtool_ops	= &macvlan_ethtool_ops;
1225  }
1226  EXPORT_SYMBOL_GPL(macvlan_common_setup);
1227  
macvlan_setup(struct net_device * dev)1228  static void macvlan_setup(struct net_device *dev)
1229  {
1230  	macvlan_common_setup(dev);
1231  	dev->priv_flags |= IFF_NO_QUEUE;
1232  }
1233  
macvlan_port_create(struct net_device * dev)1234  static int macvlan_port_create(struct net_device *dev)
1235  {
1236  	struct macvlan_port *port;
1237  	unsigned int i;
1238  	int err;
1239  
1240  	if (dev->type != ARPHRD_ETHER || dev->flags & IFF_LOOPBACK)
1241  		return -EINVAL;
1242  
1243  	if (netdev_is_rx_handler_busy(dev))
1244  		return -EBUSY;
1245  
1246  	port = kzalloc(sizeof(*port), GFP_KERNEL);
1247  	if (port == NULL)
1248  		return -ENOMEM;
1249  
1250  	port->dev = dev;
1251  	ether_addr_copy(port->perm_addr, dev->dev_addr);
1252  	INIT_LIST_HEAD(&port->vlans);
1253  	for (i = 0; i < MACVLAN_HASH_SIZE; i++)
1254  		INIT_HLIST_HEAD(&port->vlan_hash[i]);
1255  	for (i = 0; i < MACVLAN_HASH_SIZE; i++)
1256  		INIT_HLIST_HEAD(&port->vlan_source_hash[i]);
1257  
1258  	port->bc_queue_len_used = 0;
1259  	port->bc_cutoff = 1;
1260  	skb_queue_head_init(&port->bc_queue);
1261  	INIT_WORK(&port->bc_work, macvlan_process_broadcast);
1262  
1263  	err = netdev_rx_handler_register(dev, macvlan_handle_frame, port);
1264  	if (err)
1265  		kfree(port);
1266  	else
1267  		dev->priv_flags |= IFF_MACVLAN_PORT;
1268  	return err;
1269  }
1270  
macvlan_port_destroy(struct net_device * dev)1271  static void macvlan_port_destroy(struct net_device *dev)
1272  {
1273  	struct macvlan_port *port = macvlan_port_get_rtnl(dev);
1274  	struct sk_buff *skb;
1275  
1276  	dev->priv_flags &= ~IFF_MACVLAN_PORT;
1277  	netdev_rx_handler_unregister(dev);
1278  
1279  	/* After this point, no packet can schedule bc_work anymore,
1280  	 * but we need to cancel it and purge left skbs if any.
1281  	 */
1282  	cancel_work_sync(&port->bc_work);
1283  
1284  	while ((skb = __skb_dequeue(&port->bc_queue))) {
1285  		const struct macvlan_dev *src = MACVLAN_SKB_CB(skb)->src;
1286  
1287  		if (src)
1288  			dev_put(src->dev);
1289  
1290  		kfree_skb(skb);
1291  	}
1292  
1293  	/* If the lower device address has been changed by passthru
1294  	 * macvlan, put it back.
1295  	 */
1296  	if (macvlan_passthru(port) &&
1297  	    !ether_addr_equal(port->dev->dev_addr, port->perm_addr)) {
1298  		struct sockaddr sa;
1299  
1300  		sa.sa_family = port->dev->type;
1301  		memcpy(&sa.sa_data, port->perm_addr, port->dev->addr_len);
1302  		dev_set_mac_address(port->dev, &sa, NULL);
1303  	}
1304  
1305  	kfree(port);
1306  }
1307  
macvlan_validate(struct nlattr * tb[],struct nlattr * data[],struct netlink_ext_ack * extack)1308  static int macvlan_validate(struct nlattr *tb[], struct nlattr *data[],
1309  			    struct netlink_ext_ack *extack)
1310  {
1311  	struct nlattr *nla, *head;
1312  	int rem, len;
1313  
1314  	if (tb[IFLA_ADDRESS]) {
1315  		if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN)
1316  			return -EINVAL;
1317  		if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS])))
1318  			return -EADDRNOTAVAIL;
1319  	}
1320  
1321  	if (!data)
1322  		return 0;
1323  
1324  	if (data[IFLA_MACVLAN_FLAGS] &&
1325  	    nla_get_u16(data[IFLA_MACVLAN_FLAGS]) & ~(MACVLAN_FLAG_NOPROMISC |
1326  						      MACVLAN_FLAG_NODST))
1327  		return -EINVAL;
1328  
1329  	if (data[IFLA_MACVLAN_MODE]) {
1330  		switch (nla_get_u32(data[IFLA_MACVLAN_MODE])) {
1331  		case MACVLAN_MODE_PRIVATE:
1332  		case MACVLAN_MODE_VEPA:
1333  		case MACVLAN_MODE_BRIDGE:
1334  		case MACVLAN_MODE_PASSTHRU:
1335  		case MACVLAN_MODE_SOURCE:
1336  			break;
1337  		default:
1338  			return -EINVAL;
1339  		}
1340  	}
1341  
1342  	if (data[IFLA_MACVLAN_MACADDR_MODE]) {
1343  		switch (nla_get_u32(data[IFLA_MACVLAN_MACADDR_MODE])) {
1344  		case MACVLAN_MACADDR_ADD:
1345  		case MACVLAN_MACADDR_DEL:
1346  		case MACVLAN_MACADDR_FLUSH:
1347  		case MACVLAN_MACADDR_SET:
1348  			break;
1349  		default:
1350  			return -EINVAL;
1351  		}
1352  	}
1353  
1354  	if (data[IFLA_MACVLAN_MACADDR]) {
1355  		if (nla_len(data[IFLA_MACVLAN_MACADDR]) != ETH_ALEN)
1356  			return -EINVAL;
1357  
1358  		if (!is_valid_ether_addr(nla_data(data[IFLA_MACVLAN_MACADDR])))
1359  			return -EADDRNOTAVAIL;
1360  	}
1361  
1362  	if (data[IFLA_MACVLAN_MACADDR_DATA]) {
1363  		head = nla_data(data[IFLA_MACVLAN_MACADDR_DATA]);
1364  		len = nla_len(data[IFLA_MACVLAN_MACADDR_DATA]);
1365  
1366  		nla_for_each_attr(nla, head, len, rem) {
1367  			if (nla_type(nla) != IFLA_MACVLAN_MACADDR ||
1368  			    nla_len(nla) != ETH_ALEN)
1369  				return -EINVAL;
1370  
1371  			if (!is_valid_ether_addr(nla_data(nla)))
1372  				return -EADDRNOTAVAIL;
1373  		}
1374  	}
1375  
1376  	if (data[IFLA_MACVLAN_MACADDR_COUNT])
1377  		return -EINVAL;
1378  
1379  	return 0;
1380  }
1381  
1382  /*
1383   * reconfigure list of remote source mac address
1384   * (only for macvlan devices in source mode)
1385   * Note regarding alignment: all netlink data is aligned to 4 Byte, which
1386   * suffices for both ether_addr_copy and ether_addr_equal_64bits usage.
1387   */
macvlan_changelink_sources(struct macvlan_dev * vlan,u32 mode,struct nlattr * data[])1388  static int macvlan_changelink_sources(struct macvlan_dev *vlan, u32 mode,
1389  				      struct nlattr *data[])
1390  {
1391  	char *addr = NULL;
1392  	int ret, rem, len;
1393  	struct nlattr *nla, *head;
1394  	struct macvlan_source_entry *entry;
1395  
1396  	if (data[IFLA_MACVLAN_MACADDR])
1397  		addr = nla_data(data[IFLA_MACVLAN_MACADDR]);
1398  
1399  	if (mode == MACVLAN_MACADDR_ADD) {
1400  		if (!addr)
1401  			return -EINVAL;
1402  
1403  		return macvlan_hash_add_source(vlan, addr);
1404  
1405  	} else if (mode == MACVLAN_MACADDR_DEL) {
1406  		if (!addr)
1407  			return -EINVAL;
1408  
1409  		entry = macvlan_hash_lookup_source(vlan, addr);
1410  		if (entry) {
1411  			macvlan_hash_del_source(entry);
1412  			vlan->macaddr_count--;
1413  		}
1414  	} else if (mode == MACVLAN_MACADDR_FLUSH) {
1415  		macvlan_flush_sources(vlan->port, vlan);
1416  	} else if (mode == MACVLAN_MACADDR_SET) {
1417  		macvlan_flush_sources(vlan->port, vlan);
1418  
1419  		if (addr) {
1420  			ret = macvlan_hash_add_source(vlan, addr);
1421  			if (ret)
1422  				return ret;
1423  		}
1424  
1425  		if (!data[IFLA_MACVLAN_MACADDR_DATA])
1426  			return 0;
1427  
1428  		head = nla_data(data[IFLA_MACVLAN_MACADDR_DATA]);
1429  		len = nla_len(data[IFLA_MACVLAN_MACADDR_DATA]);
1430  
1431  		nla_for_each_attr(nla, head, len, rem) {
1432  			addr = nla_data(nla);
1433  			ret = macvlan_hash_add_source(vlan, addr);
1434  			if (ret)
1435  				return ret;
1436  		}
1437  	} else {
1438  		return -EINVAL;
1439  	}
1440  
1441  	return 0;
1442  }
1443  
macvlan_common_newlink(struct net_device * dev,struct rtnl_newlink_params * params,struct netlink_ext_ack * extack)1444  int macvlan_common_newlink(struct net_device *dev,
1445  			   struct rtnl_newlink_params *params,
1446  			   struct netlink_ext_ack *extack)
1447  {
1448  	struct net *link_net = rtnl_newlink_link_net(params);
1449  	struct macvlan_dev *vlan = netdev_priv(dev);
1450  	struct nlattr **data = params->data;
1451  	struct nlattr **tb = params->tb;
1452  	struct net_device *lowerdev;
1453  	struct macvlan_port *port;
1454  	bool create = false;
1455  	int macmode;
1456  	int err;
1457  
1458  	if (!tb[IFLA_LINK])
1459  		return -EINVAL;
1460  
1461  	lowerdev = __dev_get_by_index(link_net, nla_get_u32(tb[IFLA_LINK]));
1462  	if (lowerdev == NULL)
1463  		return -ENODEV;
1464  
1465  	/* When creating macvlans or macvtaps on top of other macvlans - use
1466  	 * the real device as the lowerdev.
1467  	 */
1468  	if (netif_is_macvlan(lowerdev))
1469  		lowerdev = macvlan_dev_real_dev(lowerdev);
1470  
1471  	if (!tb[IFLA_MTU])
1472  		dev->mtu = lowerdev->mtu;
1473  	else if (dev->mtu > lowerdev->mtu)
1474  		return -EINVAL;
1475  
1476  	/* MTU range: 68 - lowerdev->max_mtu */
1477  	dev->min_mtu = ETH_MIN_MTU;
1478  	dev->max_mtu = lowerdev->max_mtu;
1479  
1480  	if (!tb[IFLA_ADDRESS])
1481  		eth_hw_addr_random(dev);
1482  
1483  	if (!netif_is_macvlan_port(lowerdev)) {
1484  		err = macvlan_port_create(lowerdev);
1485  		if (err < 0)
1486  			return err;
1487  		create = true;
1488  	}
1489  	port = macvlan_port_get_rtnl(lowerdev);
1490  
1491  	/* Only 1 macvlan device can be created in passthru mode */
1492  	if (macvlan_passthru(port)) {
1493  		/* The macvlan port must be not created this time,
1494  		 * still goto destroy_macvlan_port for readability.
1495  		 */
1496  		err = -EINVAL;
1497  		goto destroy_macvlan_port;
1498  	}
1499  
1500  	vlan->lowerdev = lowerdev;
1501  	vlan->dev      = dev;
1502  	vlan->port     = port;
1503  	vlan->set_features = MACVLAN_FEATURES;
1504  
1505  	vlan->mode     = MACVLAN_MODE_VEPA;
1506  	if (data && data[IFLA_MACVLAN_MODE])
1507  		vlan->mode = nla_get_u32(data[IFLA_MACVLAN_MODE]);
1508  
1509  	if (data && data[IFLA_MACVLAN_FLAGS])
1510  		vlan->flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]);
1511  
1512  	if (vlan->mode == MACVLAN_MODE_PASSTHRU) {
1513  		if (port->count) {
1514  			err = -EINVAL;
1515  			goto destroy_macvlan_port;
1516  		}
1517  		macvlan_set_passthru(port);
1518  		eth_hw_addr_inherit(dev, lowerdev);
1519  	}
1520  
1521  	if (data && data[IFLA_MACVLAN_MACADDR_MODE]) {
1522  		if (vlan->mode != MACVLAN_MODE_SOURCE) {
1523  			err = -EINVAL;
1524  			goto destroy_macvlan_port;
1525  		}
1526  		macmode = nla_get_u32(data[IFLA_MACVLAN_MACADDR_MODE]);
1527  		err = macvlan_changelink_sources(vlan, macmode, data);
1528  		if (err)
1529  			goto destroy_macvlan_port;
1530  	}
1531  
1532  	vlan->bc_queue_len_req = MACVLAN_DEFAULT_BC_QUEUE_LEN;
1533  	if (data && data[IFLA_MACVLAN_BC_QUEUE_LEN])
1534  		vlan->bc_queue_len_req = nla_get_u32(data[IFLA_MACVLAN_BC_QUEUE_LEN]);
1535  
1536  	if (data && data[IFLA_MACVLAN_BC_CUTOFF])
1537  		update_port_bc_cutoff(
1538  			vlan, nla_get_s32(data[IFLA_MACVLAN_BC_CUTOFF]));
1539  
1540  	err = register_netdevice(dev);
1541  	if (err < 0)
1542  		goto destroy_macvlan_port;
1543  
1544  	dev->priv_flags |= IFF_MACVLAN;
1545  	err = netdev_upper_dev_link(lowerdev, dev, extack);
1546  	if (err)
1547  		goto unregister_netdev;
1548  
1549  	list_add_tail_rcu(&vlan->list, &port->vlans);
1550  	update_port_bc_queue_len(vlan->port);
1551  	netif_stacked_transfer_operstate(lowerdev, dev);
1552  	linkwatch_fire_event(dev);
1553  
1554  	return 0;
1555  
1556  unregister_netdev:
1557  	/* macvlan_uninit would free the macvlan port */
1558  	unregister_netdevice(dev);
1559  	return err;
1560  destroy_macvlan_port:
1561  	/* the macvlan port may be freed by macvlan_uninit when fail to register.
1562  	 * so we destroy the macvlan port only when it's valid.
1563  	 */
1564  	if (create && macvlan_port_get_rtnl(lowerdev)) {
1565  		macvlan_flush_sources(port, vlan);
1566  		macvlan_port_destroy(port->dev);
1567  	}
1568  	return err;
1569  }
1570  EXPORT_SYMBOL_GPL(macvlan_common_newlink);
1571  
macvlan_newlink(struct net_device * dev,struct rtnl_newlink_params * params,struct netlink_ext_ack * extack)1572  static int macvlan_newlink(struct net_device *dev,
1573  			   struct rtnl_newlink_params *params,
1574  			   struct netlink_ext_ack *extack)
1575  {
1576  	return macvlan_common_newlink(dev, params, extack);
1577  }
1578  
macvlan_dellink(struct net_device * dev,struct list_head * head)1579  void macvlan_dellink(struct net_device *dev, struct list_head *head)
1580  {
1581  	struct macvlan_dev *vlan = netdev_priv(dev);
1582  
1583  	if (vlan->mode == MACVLAN_MODE_SOURCE)
1584  		macvlan_flush_sources(vlan->port, vlan);
1585  	list_del_rcu(&vlan->list);
1586  	update_port_bc_queue_len(vlan->port);
1587  	unregister_netdevice_queue(dev, head);
1588  	netdev_upper_dev_unlink(vlan->lowerdev, dev);
1589  }
1590  EXPORT_SYMBOL_GPL(macvlan_dellink);
1591  
macvlan_changelink(struct net_device * dev,struct nlattr * tb[],struct nlattr * data[],struct netlink_ext_ack * extack)1592  static int macvlan_changelink(struct net_device *dev,
1593  			      struct nlattr *tb[], struct nlattr *data[],
1594  			      struct netlink_ext_ack *extack)
1595  {
1596  	struct macvlan_dev *vlan = netdev_priv(dev);
1597  	enum macvlan_mode mode;
1598  	bool set_mode = false;
1599  	enum macvlan_macaddr_mode macmode;
1600  	int ret;
1601  
1602  	/* Validate mode, but don't set yet: setting flags may fail. */
1603  	if (data && data[IFLA_MACVLAN_MODE]) {
1604  		set_mode = true;
1605  		mode = nla_get_u32(data[IFLA_MACVLAN_MODE]);
1606  		/* Passthrough mode can't be set or cleared dynamically */
1607  		if ((mode == MACVLAN_MODE_PASSTHRU) !=
1608  		    (vlan->mode == MACVLAN_MODE_PASSTHRU))
1609  			return -EINVAL;
1610  		if (vlan->mode == MACVLAN_MODE_SOURCE &&
1611  		    vlan->mode != mode)
1612  			macvlan_flush_sources(vlan->port, vlan);
1613  	}
1614  
1615  	if (data && data[IFLA_MACVLAN_FLAGS]) {
1616  		__u16 flags = nla_get_u16(data[IFLA_MACVLAN_FLAGS]);
1617  		bool promisc = (flags ^ vlan->flags) & MACVLAN_FLAG_NOPROMISC;
1618  		if (macvlan_passthru(vlan->port) && promisc) {
1619  			int err;
1620  
1621  			if (flags & MACVLAN_FLAG_NOPROMISC)
1622  				err = dev_set_promiscuity(vlan->lowerdev, -1);
1623  			else
1624  				err = dev_set_promiscuity(vlan->lowerdev, 1);
1625  			if (err < 0)
1626  				return err;
1627  		}
1628  		vlan->flags = flags;
1629  	}
1630  
1631  	if (data && data[IFLA_MACVLAN_BC_QUEUE_LEN]) {
1632  		vlan->bc_queue_len_req = nla_get_u32(data[IFLA_MACVLAN_BC_QUEUE_LEN]);
1633  		update_port_bc_queue_len(vlan->port);
1634  	}
1635  
1636  	if (data && data[IFLA_MACVLAN_BC_CUTOFF])
1637  		update_port_bc_cutoff(
1638  			vlan, nla_get_s32(data[IFLA_MACVLAN_BC_CUTOFF]));
1639  
1640  	if (set_mode)
1641  		vlan->mode = mode;
1642  	if (data && data[IFLA_MACVLAN_MACADDR_MODE]) {
1643  		if (vlan->mode != MACVLAN_MODE_SOURCE)
1644  			return -EINVAL;
1645  		macmode = nla_get_u32(data[IFLA_MACVLAN_MACADDR_MODE]);
1646  		ret = macvlan_changelink_sources(vlan, macmode, data);
1647  		if (ret)
1648  			return ret;
1649  	}
1650  	return 0;
1651  }
1652  
macvlan_get_size_mac(const struct macvlan_dev * vlan)1653  static size_t macvlan_get_size_mac(const struct macvlan_dev *vlan)
1654  {
1655  	if (vlan->macaddr_count == 0)
1656  		return 0;
1657  	return nla_total_size(0) /* IFLA_MACVLAN_MACADDR_DATA */
1658  		+ vlan->macaddr_count * nla_total_size(sizeof(u8) * ETH_ALEN);
1659  }
1660  
macvlan_get_size(const struct net_device * dev)1661  static size_t macvlan_get_size(const struct net_device *dev)
1662  {
1663  	struct macvlan_dev *vlan = netdev_priv(dev);
1664  
1665  	return (0
1666  		+ nla_total_size(4) /* IFLA_MACVLAN_MODE */
1667  		+ nla_total_size(2) /* IFLA_MACVLAN_FLAGS */
1668  		+ nla_total_size(4) /* IFLA_MACVLAN_MACADDR_COUNT */
1669  		+ macvlan_get_size_mac(vlan) /* IFLA_MACVLAN_MACADDR */
1670  		+ nla_total_size(4) /* IFLA_MACVLAN_BC_QUEUE_LEN */
1671  		+ nla_total_size(4) /* IFLA_MACVLAN_BC_QUEUE_LEN_USED */
1672  		);
1673  }
1674  
macvlan_fill_info_macaddr(struct sk_buff * skb,const struct macvlan_dev * vlan,const int i)1675  static int macvlan_fill_info_macaddr(struct sk_buff *skb,
1676  				     const struct macvlan_dev *vlan,
1677  				     const int i)
1678  {
1679  	struct hlist_head *h = &vlan->port->vlan_source_hash[i];
1680  	struct macvlan_source_entry *entry;
1681  
1682  	hlist_for_each_entry_rcu(entry, h, hlist, lockdep_rtnl_is_held()) {
1683  		if (entry->vlan != vlan)
1684  			continue;
1685  		if (nla_put(skb, IFLA_MACVLAN_MACADDR, ETH_ALEN, entry->addr))
1686  			return 1;
1687  	}
1688  	return 0;
1689  }
1690  
macvlan_fill_info(struct sk_buff * skb,const struct net_device * dev)1691  static int macvlan_fill_info(struct sk_buff *skb,
1692  				const struct net_device *dev)
1693  {
1694  	struct macvlan_dev *vlan = netdev_priv(dev);
1695  	struct macvlan_port *port = vlan->port;
1696  	int i;
1697  	struct nlattr *nest;
1698  
1699  	if (nla_put_u32(skb, IFLA_MACVLAN_MODE, vlan->mode))
1700  		goto nla_put_failure;
1701  	if (nla_put_u16(skb, IFLA_MACVLAN_FLAGS, vlan->flags))
1702  		goto nla_put_failure;
1703  	if (nla_put_u32(skb, IFLA_MACVLAN_MACADDR_COUNT, vlan->macaddr_count))
1704  		goto nla_put_failure;
1705  	if (vlan->macaddr_count > 0) {
1706  		nest = nla_nest_start_noflag(skb, IFLA_MACVLAN_MACADDR_DATA);
1707  		if (nest == NULL)
1708  			goto nla_put_failure;
1709  
1710  		for (i = 0; i < MACVLAN_HASH_SIZE; i++) {
1711  			if (macvlan_fill_info_macaddr(skb, vlan, i))
1712  				goto nla_put_failure;
1713  		}
1714  		nla_nest_end(skb, nest);
1715  	}
1716  	if (nla_put_u32(skb, IFLA_MACVLAN_BC_QUEUE_LEN, vlan->bc_queue_len_req))
1717  		goto nla_put_failure;
1718  	if (nla_put_u32(skb, IFLA_MACVLAN_BC_QUEUE_LEN_USED, port->bc_queue_len_used))
1719  		goto nla_put_failure;
1720  	if (port->bc_cutoff != 1 &&
1721  	    nla_put_s32(skb, IFLA_MACVLAN_BC_CUTOFF, port->bc_cutoff))
1722  		goto nla_put_failure;
1723  	return 0;
1724  
1725  nla_put_failure:
1726  	return -EMSGSIZE;
1727  }
1728  
1729  static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
1730  	[IFLA_MACVLAN_MODE]  = { .type = NLA_U32 },
1731  	[IFLA_MACVLAN_FLAGS] = { .type = NLA_U16 },
1732  	[IFLA_MACVLAN_MACADDR_MODE] = { .type = NLA_U32 },
1733  	[IFLA_MACVLAN_MACADDR] = { .type = NLA_BINARY, .len = MAX_ADDR_LEN },
1734  	[IFLA_MACVLAN_MACADDR_DATA] = { .type = NLA_NESTED },
1735  	[IFLA_MACVLAN_MACADDR_COUNT] = { .type = NLA_U32 },
1736  	[IFLA_MACVLAN_BC_QUEUE_LEN] = { .type = NLA_U32 },
1737  	[IFLA_MACVLAN_BC_QUEUE_LEN_USED] = { .type = NLA_REJECT },
1738  	[IFLA_MACVLAN_BC_CUTOFF] = { .type = NLA_S32 },
1739  };
1740  
macvlan_link_register(struct rtnl_link_ops * ops)1741  int macvlan_link_register(struct rtnl_link_ops *ops)
1742  {
1743  	/* common fields */
1744  	ops->validate		= macvlan_validate;
1745  	ops->maxtype		= IFLA_MACVLAN_MAX;
1746  	ops->policy		= macvlan_policy;
1747  	ops->changelink		= macvlan_changelink;
1748  	ops->get_size		= macvlan_get_size;
1749  	ops->fill_info		= macvlan_fill_info;
1750  
1751  	return rtnl_link_register(ops);
1752  };
1753  EXPORT_SYMBOL_GPL(macvlan_link_register);
1754  
macvlan_get_link_net(const struct net_device * dev)1755  static struct net *macvlan_get_link_net(const struct net_device *dev)
1756  {
1757  	return dev_net(macvlan_dev_real_dev(dev));
1758  }
1759  
1760  static struct rtnl_link_ops macvlan_link_ops = {
1761  	.kind		= "macvlan",
1762  	.setup		= macvlan_setup,
1763  	.newlink	= macvlan_newlink,
1764  	.dellink	= macvlan_dellink,
1765  	.get_link_net	= macvlan_get_link_net,
1766  	.priv_size      = sizeof(struct macvlan_dev),
1767  };
1768  
update_port_bc_queue_len(struct macvlan_port * port)1769  static void update_port_bc_queue_len(struct macvlan_port *port)
1770  {
1771  	u32 max_bc_queue_len_req = 0;
1772  	struct macvlan_dev *vlan;
1773  
1774  	list_for_each_entry(vlan, &port->vlans, list) {
1775  		if (vlan->bc_queue_len_req > max_bc_queue_len_req)
1776  			max_bc_queue_len_req = vlan->bc_queue_len_req;
1777  	}
1778  	port->bc_queue_len_used = max_bc_queue_len_req;
1779  }
1780  
macvlan_device_event(struct notifier_block * unused,unsigned long event,void * ptr)1781  static int macvlan_device_event(struct notifier_block *unused,
1782  				unsigned long event, void *ptr)
1783  {
1784  	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1785  	struct macvlan_dev *vlan, *next;
1786  	struct macvlan_port *port;
1787  	LIST_HEAD(list_kill);
1788  
1789  	if (!netif_is_macvlan_port(dev))
1790  		return NOTIFY_DONE;
1791  
1792  	port = macvlan_port_get_rtnl(dev);
1793  
1794  	switch (event) {
1795  	case NETDEV_UP:
1796  	case NETDEV_DOWN:
1797  	case NETDEV_CHANGE:
1798  		list_for_each_entry(vlan, &port->vlans, list)
1799  			netif_stacked_transfer_operstate(vlan->lowerdev,
1800  							 vlan->dev);
1801  		break;
1802  	case NETDEV_FEAT_CHANGE:
1803  		list_for_each_entry(vlan, &port->vlans, list) {
1804  			netif_inherit_tso_max(vlan->dev, dev);
1805  			netdev_update_features(vlan->dev);
1806  		}
1807  		break;
1808  	case NETDEV_CHANGEMTU:
1809  		list_for_each_entry(vlan, &port->vlans, list) {
1810  			if (vlan->dev->mtu <= dev->mtu)
1811  				continue;
1812  			dev_set_mtu(vlan->dev, dev->mtu);
1813  		}
1814  		break;
1815  	case NETDEV_CHANGEADDR:
1816  		if (!macvlan_passthru(port))
1817  			return NOTIFY_DONE;
1818  
1819  		vlan = list_first_entry_or_null(&port->vlans,
1820  						struct macvlan_dev,
1821  						list);
1822  
1823  		if (vlan && macvlan_sync_address(vlan->dev, dev->dev_addr))
1824  			return NOTIFY_BAD;
1825  
1826  		break;
1827  	case NETDEV_UNREGISTER:
1828  		/* twiddle thumbs on netns device moves */
1829  		if (dev->reg_state != NETREG_UNREGISTERING)
1830  			break;
1831  
1832  		list_for_each_entry_safe(vlan, next, &port->vlans, list)
1833  			vlan->dev->rtnl_link_ops->dellink(vlan->dev, &list_kill);
1834  		unregister_netdevice_many(&list_kill);
1835  		break;
1836  	case NETDEV_PRE_TYPE_CHANGE:
1837  		/* Forbid underlying device to change its type. */
1838  		return NOTIFY_BAD;
1839  
1840  	case NETDEV_NOTIFY_PEERS:
1841  	case NETDEV_BONDING_FAILOVER:
1842  	case NETDEV_RESEND_IGMP:
1843  		/* Propagate to all vlans */
1844  		list_for_each_entry(vlan, &port->vlans, list)
1845  			call_netdevice_notifiers(event, vlan->dev);
1846  	}
1847  	return NOTIFY_DONE;
1848  }
1849  
1850  static struct notifier_block macvlan_notifier_block __read_mostly = {
1851  	.notifier_call	= macvlan_device_event,
1852  };
1853  
macvlan_init_module(void)1854  static int __init macvlan_init_module(void)
1855  {
1856  	int err;
1857  
1858  	register_netdevice_notifier(&macvlan_notifier_block);
1859  
1860  	err = macvlan_link_register(&macvlan_link_ops);
1861  	if (err < 0)
1862  		goto err1;
1863  	return 0;
1864  err1:
1865  	unregister_netdevice_notifier(&macvlan_notifier_block);
1866  	return err;
1867  }
1868  
macvlan_cleanup_module(void)1869  static void __exit macvlan_cleanup_module(void)
1870  {
1871  	rtnl_link_unregister(&macvlan_link_ops);
1872  	unregister_netdevice_notifier(&macvlan_notifier_block);
1873  }
1874  
1875  module_init(macvlan_init_module);
1876  module_exit(macvlan_cleanup_module);
1877  
1878  MODULE_LICENSE("GPL");
1879  MODULE_AUTHOR("Patrick McHardy <kaber@trash.net>");
1880  MODULE_DESCRIPTION("Driver for MAC address based VLANs");
1881  MODULE_ALIAS_RTNL_LINK("macvlan");
1882