xref: /linux/net/core/dev_addr_lists.c (revision e728258debd553c95d2e70f9cd97c9fde27c7130)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * net/core/dev_addr_lists.c - Functions for handling net device lists
4  * Copyright (c) 2010 Jiri Pirko <jpirko@redhat.com>
5  *
6  * This file contains functions for working with unicast, multicast and device
7  * addresses lists.
8  */
9 
10 #include <linux/netdevice.h>
11 #include <linux/rtnetlink.h>
12 #include <linux/export.h>
13 #include <linux/list.h>
14 #include <linux/spinlock.h>
15 #include <linux/workqueue.h>
16 #include <kunit/visibility.h>
17 
18 #include "dev.h"
19 
20 static void netdev_rx_mode_work(struct work_struct *work);
21 
22 static LIST_HEAD(rx_mode_list);
23 static DEFINE_SPINLOCK(rx_mode_lock);
24 static DECLARE_WORK(rx_mode_work, netdev_rx_mode_work);
25 
26 /*
27  * General list handling functions
28  */
29 
30 static int __hw_addr_insert(struct netdev_hw_addr_list *list,
31 			    struct netdev_hw_addr *new, int addr_len)
32 {
33 	struct rb_node **ins_point = &list->tree.rb_node, *parent = NULL;
34 	struct netdev_hw_addr *ha;
35 
36 	while (*ins_point) {
37 		int diff;
38 
39 		ha = rb_entry(*ins_point, struct netdev_hw_addr, node);
40 		diff = memcmp(new->addr, ha->addr, addr_len);
41 		if (diff == 0)
42 			diff = memcmp(&new->type, &ha->type, sizeof(new->type));
43 
44 		parent = *ins_point;
45 		if (diff < 0)
46 			ins_point = &parent->rb_left;
47 		else if (diff > 0)
48 			ins_point = &parent->rb_right;
49 		else
50 			return -EEXIST;
51 	}
52 
53 	rb_link_node_rcu(&new->node, parent, ins_point);
54 	rb_insert_color(&new->node, &list->tree);
55 
56 	return 0;
57 }
58 
59 static struct netdev_hw_addr*
60 __hw_addr_create(const unsigned char *addr, int addr_len,
61 		 unsigned char addr_type, bool global, bool sync)
62 {
63 	struct netdev_hw_addr *ha;
64 	int alloc_size;
65 
66 	alloc_size = sizeof(*ha);
67 	if (alloc_size < L1_CACHE_BYTES)
68 		alloc_size = L1_CACHE_BYTES;
69 	ha = kmalloc(alloc_size, GFP_ATOMIC);
70 	if (!ha)
71 		return NULL;
72 	memcpy(ha->addr, addr, addr_len);
73 	ha->type = addr_type;
74 	ha->refcount = 1;
75 	ha->global_use = global;
76 	ha->synced = sync ? 1 : 0;
77 	ha->sync_cnt = 0;
78 
79 	return ha;
80 }
81 
82 static int __hw_addr_add_ex(struct netdev_hw_addr_list *list,
83 			    const unsigned char *addr, int addr_len,
84 			    unsigned char addr_type, bool global, bool sync,
85 			    int sync_count, bool exclusive)
86 {
87 	struct rb_node **ins_point = &list->tree.rb_node, *parent = NULL;
88 	struct netdev_hw_addr *ha;
89 
90 	if (addr_len > MAX_ADDR_LEN)
91 		return -EINVAL;
92 
93 	while (*ins_point) {
94 		int diff;
95 
96 		ha = rb_entry(*ins_point, struct netdev_hw_addr, node);
97 		diff = memcmp(addr, ha->addr, addr_len);
98 		if (diff == 0)
99 			diff = memcmp(&addr_type, &ha->type, sizeof(addr_type));
100 
101 		parent = *ins_point;
102 		if (diff < 0) {
103 			ins_point = &parent->rb_left;
104 		} else if (diff > 0) {
105 			ins_point = &parent->rb_right;
106 		} else {
107 			if (exclusive)
108 				return -EEXIST;
109 			if (global) {
110 				/* check if addr is already used as global */
111 				if (ha->global_use)
112 					return 0;
113 				else
114 					ha->global_use = true;
115 			}
116 			if (sync) {
117 				if (ha->synced && sync_count)
118 					return -EEXIST;
119 				else
120 					ha->synced++;
121 			}
122 			ha->refcount++;
123 			return 0;
124 		}
125 	}
126 
127 	ha = __hw_addr_create(addr, addr_len, addr_type, global, sync);
128 	if (!ha)
129 		return -ENOMEM;
130 
131 	rb_link_node(&ha->node, parent, ins_point);
132 	rb_insert_color(&ha->node, &list->tree);
133 
134 	list_add_tail_rcu(&ha->list, &list->list);
135 	list->count++;
136 
137 	return 0;
138 }
139 
140 static int __hw_addr_add(struct netdev_hw_addr_list *list,
141 			 const unsigned char *addr, int addr_len,
142 			 unsigned char addr_type)
143 {
144 	return __hw_addr_add_ex(list, addr, addr_len, addr_type, false, false,
145 				0, false);
146 }
147 
148 static int __hw_addr_del_entry(struct netdev_hw_addr_list *list,
149 			       struct netdev_hw_addr *ha, bool global,
150 			       bool sync)
151 {
152 	if (global && !ha->global_use)
153 		return -ENOENT;
154 
155 	if (sync && !ha->synced)
156 		return -ENOENT;
157 
158 	if (global)
159 		ha->global_use = false;
160 
161 	if (sync)
162 		ha->synced--;
163 
164 	if (--ha->refcount)
165 		return 0;
166 
167 	rb_erase(&ha->node, &list->tree);
168 
169 	list_del_rcu(&ha->list);
170 	kfree_rcu(ha, rcu_head);
171 	list->count--;
172 	return 0;
173 }
174 
175 static struct netdev_hw_addr *__hw_addr_lookup(struct netdev_hw_addr_list *list,
176 					       const unsigned char *addr, int addr_len,
177 					       unsigned char addr_type)
178 {
179 	struct rb_node *node;
180 
181 	node = list->tree.rb_node;
182 
183 	while (node) {
184 		struct netdev_hw_addr *ha = rb_entry(node, struct netdev_hw_addr, node);
185 		int diff = memcmp(addr, ha->addr, addr_len);
186 
187 		if (diff == 0 && addr_type)
188 			diff = memcmp(&addr_type, &ha->type, sizeof(addr_type));
189 
190 		if (diff < 0)
191 			node = node->rb_left;
192 		else if (diff > 0)
193 			node = node->rb_right;
194 		else
195 			return ha;
196 	}
197 
198 	return NULL;
199 }
200 
201 static int __hw_addr_del_ex(struct netdev_hw_addr_list *list,
202 			    const unsigned char *addr, int addr_len,
203 			    unsigned char addr_type, bool global, bool sync)
204 {
205 	struct netdev_hw_addr *ha = __hw_addr_lookup(list, addr, addr_len, addr_type);
206 
207 	if (!ha)
208 		return -ENOENT;
209 	return __hw_addr_del_entry(list, ha, global, sync);
210 }
211 
212 static int __hw_addr_del(struct netdev_hw_addr_list *list,
213 			 const unsigned char *addr, int addr_len,
214 			 unsigned char addr_type)
215 {
216 	return __hw_addr_del_ex(list, addr, addr_len, addr_type, false, false);
217 }
218 
219 static int __hw_addr_sync_one(struct netdev_hw_addr_list *to_list,
220 			       struct netdev_hw_addr *ha,
221 			       int addr_len)
222 {
223 	int err;
224 
225 	err = __hw_addr_add_ex(to_list, ha->addr, addr_len, ha->type,
226 			       false, true, ha->sync_cnt, false);
227 	if (err && err != -EEXIST)
228 		return err;
229 
230 	if (!err) {
231 		ha->sync_cnt++;
232 		ha->refcount++;
233 	}
234 
235 	return 0;
236 }
237 
238 static void __hw_addr_unsync_one(struct netdev_hw_addr_list *to_list,
239 				 struct netdev_hw_addr_list *from_list,
240 				 struct netdev_hw_addr *ha,
241 				 int addr_len)
242 {
243 	int err;
244 
245 	err = __hw_addr_del_ex(to_list, ha->addr, addr_len, ha->type,
246 			       false, true);
247 	if (err)
248 		return;
249 	ha->sync_cnt--;
250 	/* address on from list is not marked synced */
251 	__hw_addr_del_entry(from_list, ha, false, false);
252 }
253 
254 int __hw_addr_sync_multiple(struct netdev_hw_addr_list *to_list,
255 			    struct netdev_hw_addr_list *from_list,
256 			    int addr_len)
257 {
258 	int err = 0;
259 	struct netdev_hw_addr *ha, *tmp;
260 
261 	list_for_each_entry_safe(ha, tmp, &from_list->list, list) {
262 		if (ha->sync_cnt == ha->refcount) {
263 			__hw_addr_unsync_one(to_list, from_list, ha, addr_len);
264 		} else {
265 			err = __hw_addr_sync_one(to_list, ha, addr_len);
266 			if (err)
267 				break;
268 		}
269 	}
270 	return err;
271 }
272 EXPORT_SYMBOL(__hw_addr_sync_multiple);
273 
274 /* This function only works where there is a strict 1-1 relationship
275  * between source and destination of they synch. If you ever need to
276  * sync addresses to more then 1 destination, you need to use
277  * __hw_addr_sync_multiple().
278  */
279 int __hw_addr_sync(struct netdev_hw_addr_list *to_list,
280 		   struct netdev_hw_addr_list *from_list,
281 		   int addr_len)
282 {
283 	int err = 0;
284 	struct netdev_hw_addr *ha, *tmp;
285 
286 	list_for_each_entry_safe(ha, tmp, &from_list->list, list) {
287 		if (!ha->sync_cnt) {
288 			err = __hw_addr_sync_one(to_list, ha, addr_len);
289 			if (err)
290 				break;
291 		} else if (ha->refcount == 1)
292 			__hw_addr_unsync_one(to_list, from_list, ha, addr_len);
293 	}
294 	return err;
295 }
296 EXPORT_SYMBOL(__hw_addr_sync);
297 
298 void __hw_addr_unsync(struct netdev_hw_addr_list *to_list,
299 		      struct netdev_hw_addr_list *from_list,
300 		      int addr_len)
301 {
302 	struct netdev_hw_addr *ha, *tmp;
303 
304 	list_for_each_entry_safe(ha, tmp, &from_list->list, list) {
305 		if (ha->sync_cnt)
306 			__hw_addr_unsync_one(to_list, from_list, ha, addr_len);
307 	}
308 }
309 EXPORT_SYMBOL(__hw_addr_unsync);
310 
311 /**
312  *  __hw_addr_sync_dev - Synchronize device's multicast list
313  *  @list: address list to synchronize
314  *  @dev:  device to sync
315  *  @sync: function to call if address should be added
316  *  @unsync: function to call if address should be removed
317  *
318  *  This function is intended to be called from the ndo_set_rx_mode
319  *  function of devices that require explicit address add/remove
320  *  notifications.  The unsync function may be NULL in which case
321  *  the addresses requiring removal will simply be removed without
322  *  any notification to the device.
323  **/
324 int __hw_addr_sync_dev(struct netdev_hw_addr_list *list,
325 		       struct net_device *dev,
326 		       int (*sync)(struct net_device *, const unsigned char *),
327 		       int (*unsync)(struct net_device *,
328 				     const unsigned char *))
329 {
330 	struct netdev_hw_addr *ha, *tmp;
331 	int err;
332 
333 	/* first go through and flush out any stale entries */
334 	list_for_each_entry_safe(ha, tmp, &list->list, list) {
335 		if (!ha->sync_cnt || ha->refcount != 1)
336 			continue;
337 
338 		/* if unsync is defined and fails defer unsyncing address */
339 		if (unsync && unsync(dev, ha->addr))
340 			continue;
341 
342 		ha->sync_cnt--;
343 		__hw_addr_del_entry(list, ha, false, false);
344 	}
345 
346 	/* go through and sync new entries to the list */
347 	list_for_each_entry_safe(ha, tmp, &list->list, list) {
348 		if (ha->sync_cnt)
349 			continue;
350 
351 		err = sync(dev, ha->addr);
352 		if (err)
353 			return err;
354 
355 		ha->sync_cnt++;
356 		ha->refcount++;
357 	}
358 
359 	return 0;
360 }
361 EXPORT_SYMBOL(__hw_addr_sync_dev);
362 
363 /**
364  *  __hw_addr_ref_sync_dev - Synchronize device's multicast address list taking
365  *  into account references
366  *  @list: address list to synchronize
367  *  @dev:  device to sync
368  *  @sync: function to call if address or reference on it should be added
369  *  @unsync: function to call if address or some reference on it should removed
370  *
371  *  This function is intended to be called from the ndo_set_rx_mode
372  *  function of devices that require explicit address or references on it
373  *  add/remove notifications. The unsync function may be NULL in which case
374  *  the addresses or references on it requiring removal will simply be
375  *  removed without any notification to the device. That is responsibility of
376  *  the driver to identify and distribute address or references on it between
377  *  internal address tables.
378  **/
379 int __hw_addr_ref_sync_dev(struct netdev_hw_addr_list *list,
380 			   struct net_device *dev,
381 			   int (*sync)(struct net_device *,
382 				       const unsigned char *, int),
383 			   int (*unsync)(struct net_device *,
384 					 const unsigned char *, int))
385 {
386 	struct netdev_hw_addr *ha, *tmp;
387 	int err, ref_cnt;
388 
389 	/* first go through and flush out any unsynced/stale entries */
390 	list_for_each_entry_safe(ha, tmp, &list->list, list) {
391 		/* sync if address is not used */
392 		if ((ha->sync_cnt << 1) <= ha->refcount)
393 			continue;
394 
395 		/* if fails defer unsyncing address */
396 		ref_cnt = ha->refcount - ha->sync_cnt;
397 		if (unsync && unsync(dev, ha->addr, ref_cnt))
398 			continue;
399 
400 		ha->refcount = (ref_cnt << 1) + 1;
401 		ha->sync_cnt = ref_cnt;
402 		__hw_addr_del_entry(list, ha, false, false);
403 	}
404 
405 	/* go through and sync updated/new entries to the list */
406 	list_for_each_entry_safe(ha, tmp, &list->list, list) {
407 		/* sync if address added or reused */
408 		if ((ha->sync_cnt << 1) >= ha->refcount)
409 			continue;
410 
411 		ref_cnt = ha->refcount - ha->sync_cnt;
412 		err = sync(dev, ha->addr, ref_cnt);
413 		if (err)
414 			return err;
415 
416 		ha->refcount = ref_cnt << 1;
417 		ha->sync_cnt = ref_cnt;
418 	}
419 
420 	return 0;
421 }
422 EXPORT_SYMBOL(__hw_addr_ref_sync_dev);
423 
424 /**
425  *  __hw_addr_ref_unsync_dev - Remove synchronized addresses and references on
426  *  it from device
427  *  @list: address list to remove synchronized addresses (references on it) from
428  *  @dev:  device to sync
429  *  @unsync: function to call if address and references on it should be removed
430  *
431  *  Remove all addresses that were added to the device by
432  *  __hw_addr_ref_sync_dev(). This function is intended to be called from the
433  *  ndo_stop or ndo_open functions on devices that require explicit address (or
434  *  references on it) add/remove notifications. If the unsync function pointer
435  *  is NULL then this function can be used to just reset the sync_cnt for the
436  *  addresses in the list.
437  **/
438 void __hw_addr_ref_unsync_dev(struct netdev_hw_addr_list *list,
439 			      struct net_device *dev,
440 			      int (*unsync)(struct net_device *,
441 					    const unsigned char *, int))
442 {
443 	struct netdev_hw_addr *ha, *tmp;
444 
445 	list_for_each_entry_safe(ha, tmp, &list->list, list) {
446 		if (!ha->sync_cnt)
447 			continue;
448 
449 		/* if fails defer unsyncing address */
450 		if (unsync && unsync(dev, ha->addr, ha->sync_cnt))
451 			continue;
452 
453 		ha->refcount -= ha->sync_cnt - 1;
454 		ha->sync_cnt = 0;
455 		__hw_addr_del_entry(list, ha, false, false);
456 	}
457 }
458 EXPORT_SYMBOL(__hw_addr_ref_unsync_dev);
459 
460 /**
461  *  __hw_addr_unsync_dev - Remove synchronized addresses from device
462  *  @list: address list to remove synchronized addresses from
463  *  @dev:  device to sync
464  *  @unsync: function to call if address should be removed
465  *
466  *  Remove all addresses that were added to the device by __hw_addr_sync_dev().
467  *  This function is intended to be called from the ndo_stop or ndo_open
468  *  functions on devices that require explicit address add/remove
469  *  notifications.  If the unsync function pointer is NULL then this function
470  *  can be used to just reset the sync_cnt for the addresses in the list.
471  **/
472 void __hw_addr_unsync_dev(struct netdev_hw_addr_list *list,
473 			  struct net_device *dev,
474 			  int (*unsync)(struct net_device *,
475 					const unsigned char *))
476 {
477 	struct netdev_hw_addr *ha, *tmp;
478 
479 	list_for_each_entry_safe(ha, tmp, &list->list, list) {
480 		if (!ha->sync_cnt)
481 			continue;
482 
483 		/* if unsync is defined and fails defer unsyncing address */
484 		if (unsync && unsync(dev, ha->addr))
485 			continue;
486 
487 		ha->sync_cnt--;
488 		__hw_addr_del_entry(list, ha, false, false);
489 	}
490 }
491 EXPORT_SYMBOL(__hw_addr_unsync_dev);
492 
493 void __hw_addr_flush(struct netdev_hw_addr_list *list)
494 {
495 	struct netdev_hw_addr *ha, *tmp;
496 
497 	list->tree = RB_ROOT;
498 	list_for_each_entry_safe(ha, tmp, &list->list, list) {
499 		list_del_rcu(&ha->list);
500 		kfree_rcu(ha, rcu_head);
501 	}
502 	list->count = 0;
503 }
504 EXPORT_SYMBOL_IF_KUNIT(__hw_addr_flush);
505 
506 void __hw_addr_init(struct netdev_hw_addr_list *list)
507 {
508 	INIT_LIST_HEAD(&list->list);
509 	list->count = 0;
510 	list->tree = RB_ROOT;
511 }
512 EXPORT_SYMBOL(__hw_addr_init);
513 
514 static void __hw_addr_splice(struct netdev_hw_addr_list *dst,
515 			     struct netdev_hw_addr_list *src)
516 {
517 	src->tree = RB_ROOT;
518 	list_splice_init(&src->list, &dst->list);
519 	dst->count += src->count;
520 	src->count = 0;
521 }
522 
523 /**
524  *  __hw_addr_list_snapshot - create a snapshot copy of an address list
525  *  @snap: destination snapshot list (needs to be __hw_addr_init-initialized)
526  *  @list: source address list to snapshot
527  *  @addr_len: length of addresses
528  *  @cache: entry cache to reuse entries from; falls back to GFP_ATOMIC
529  *
530  *  Creates a copy of @list reusing entries from @cache when available.
531  *  Must be called under a spinlock.
532  *
533  *  Return: 0 on success, -errno on failure.
534  */
535 int __hw_addr_list_snapshot(struct netdev_hw_addr_list *snap,
536 			    const struct netdev_hw_addr_list *list,
537 			    int addr_len, struct netdev_hw_addr_list *cache)
538 {
539 	struct netdev_hw_addr *ha, *entry;
540 
541 	list_for_each_entry(ha, &list->list, list) {
542 		if (cache->count) {
543 			entry = list_first_entry(&cache->list,
544 						 struct netdev_hw_addr, list);
545 			list_del(&entry->list);
546 			cache->count--;
547 			memcpy(entry->addr, ha->addr, addr_len);
548 			entry->type = ha->type;
549 			entry->global_use = false;
550 			entry->synced = 0;
551 		} else {
552 			entry = __hw_addr_create(ha->addr, addr_len, ha->type,
553 						 false, false);
554 			if (!entry) {
555 				__hw_addr_flush(snap);
556 				return -ENOMEM;
557 			}
558 		}
559 		entry->sync_cnt = ha->sync_cnt;
560 		entry->refcount = ha->refcount;
561 
562 		list_add_tail(&entry->list, &snap->list);
563 		__hw_addr_insert(snap, entry, addr_len);
564 		snap->count++;
565 	}
566 
567 	return 0;
568 }
569 EXPORT_SYMBOL_IF_KUNIT(__hw_addr_list_snapshot);
570 
571 /**
572  *  __hw_addr_list_reconcile - sync snapshot changes back and free snapshots
573  *  @real_list: the real address list to update
574  *  @work: the working snapshot (modified by driver via __hw_addr_sync_dev)
575  *  @ref: the reference snapshot (untouched copy of original state)
576  *  @addr_len: length of addresses
577  *  @cache: entry cache to return snapshot entries to for reuse
578  *
579  *  Walks the reference snapshot and compares each entry against the work
580  *  snapshot to compute sync_cnt deltas. Applies those deltas to @real_list.
581  *  Returns snapshot entries to @cache for reuse; frees both snapshots.
582  *  Caller must hold netif_addr_lock_bh.
583  */
584 void __hw_addr_list_reconcile(struct netdev_hw_addr_list *real_list,
585 			      struct netdev_hw_addr_list *work,
586 			      struct netdev_hw_addr_list *ref, int addr_len,
587 			      struct netdev_hw_addr_list *cache)
588 {
589 	struct netdev_hw_addr *ref_ha, *tmp, *work_ha, *real_ha;
590 	int delta;
591 
592 	list_for_each_entry_safe(ref_ha, tmp, &ref->list, list) {
593 		work_ha = __hw_addr_lookup(work, ref_ha->addr, addr_len,
594 					   ref_ha->type);
595 		if (work_ha)
596 			delta = work_ha->sync_cnt - ref_ha->sync_cnt;
597 		else
598 			delta = -1;
599 
600 		if (delta == 0)
601 			continue;
602 
603 		real_ha = __hw_addr_lookup(real_list, ref_ha->addr, addr_len,
604 					   ref_ha->type);
605 		if (!real_ha) {
606 			/* The real entry was concurrently removed. If the
607 			 * driver synced this addr to hardware (delta > 0),
608 			 * re-insert it as a stale entry so the next work
609 			 * run unsyncs it from hardware.
610 			 */
611 			if (delta > 0) {
612 				rb_erase(&ref_ha->node, &ref->tree);
613 				list_del(&ref_ha->list);
614 				ref->count--;
615 				ref_ha->sync_cnt = delta;
616 				ref_ha->refcount = delta;
617 				list_add_tail_rcu(&ref_ha->list,
618 						  &real_list->list);
619 				__hw_addr_insert(real_list, ref_ha,
620 						 addr_len);
621 				real_list->count++;
622 			}
623 			continue;
624 		}
625 
626 		real_ha->sync_cnt += delta;
627 		real_ha->refcount += delta;
628 		if (!real_ha->refcount) {
629 			rb_erase(&real_ha->node, &real_list->tree);
630 			list_del_rcu(&real_ha->list);
631 			kfree_rcu(real_ha, rcu_head);
632 			real_list->count--;
633 		}
634 	}
635 
636 	__hw_addr_splice(cache, work);
637 	__hw_addr_splice(cache, ref);
638 }
639 EXPORT_SYMBOL_IF_KUNIT(__hw_addr_list_reconcile);
640 
641 /*
642  * Device addresses handling functions
643  */
644 
645 /* Check that netdev->dev_addr is not written to directly as this would
646  * break the rbtree layout. All changes should go thru dev_addr_set() and co.
647  * Remove this check in mid-2024.
648  */
649 void dev_addr_check(struct net_device *dev)
650 {
651 	if (!memcmp(dev->dev_addr, dev->dev_addr_shadow, MAX_ADDR_LEN))
652 		return;
653 
654 	netdev_warn(dev, "Current addr:  %*ph\n", MAX_ADDR_LEN, dev->dev_addr);
655 	netdev_warn(dev, "Expected addr: %*ph\n",
656 		    MAX_ADDR_LEN, dev->dev_addr_shadow);
657 	netdev_WARN(dev, "Incorrect netdev->dev_addr\n");
658 }
659 
660 /**
661  *	dev_addr_flush - Flush device address list
662  *	@dev: device
663  *
664  *	Flush device address list and reset ->dev_addr.
665  *
666  *	The caller must hold the rtnl_mutex.
667  */
668 void dev_addr_flush(struct net_device *dev)
669 {
670 	/* rtnl_mutex must be held here */
671 	dev_addr_check(dev);
672 
673 	__hw_addr_flush(&dev->dev_addrs);
674 	dev->dev_addr = NULL;
675 }
676 
677 /**
678  *	dev_addr_init - Init device address list
679  *	@dev: device
680  *
681  *	Init device address list and create the first element,
682  *	used by ->dev_addr.
683  *
684  *	The caller must hold the rtnl_mutex.
685  */
686 int dev_addr_init(struct net_device *dev)
687 {
688 	unsigned char addr[MAX_ADDR_LEN];
689 	struct netdev_hw_addr *ha;
690 	int err;
691 
692 	/* rtnl_mutex must be held here */
693 
694 	__hw_addr_init(&dev->dev_addrs);
695 	memset(addr, 0, sizeof(addr));
696 	err = __hw_addr_add(&dev->dev_addrs, addr, sizeof(addr),
697 			    NETDEV_HW_ADDR_T_LAN);
698 	if (!err) {
699 		/*
700 		 * Get the first (previously created) address from the list
701 		 * and set dev_addr pointer to this location.
702 		 */
703 		ha = list_first_entry(&dev->dev_addrs.list,
704 				      struct netdev_hw_addr, list);
705 		dev->dev_addr = ha->addr;
706 	}
707 	return err;
708 }
709 
710 void dev_addr_mod(struct net_device *dev, unsigned int offset,
711 		  const void *addr, size_t len)
712 {
713 	struct netdev_hw_addr *ha;
714 
715 	dev_addr_check(dev);
716 
717 	ha = container_of(dev->dev_addr, struct netdev_hw_addr, addr[0]);
718 	rb_erase(&ha->node, &dev->dev_addrs.tree);
719 	memcpy(&ha->addr[offset], addr, len);
720 	memcpy(&dev->dev_addr_shadow[offset], addr, len);
721 	WARN_ON(__hw_addr_insert(&dev->dev_addrs, ha, dev->addr_len));
722 }
723 EXPORT_SYMBOL(dev_addr_mod);
724 
725 /**
726  *	dev_addr_add - Add a device address
727  *	@dev: device
728  *	@addr: address to add
729  *	@addr_type: address type
730  *
731  *	Add a device address to the device or increase the reference count if
732  *	it already exists.
733  *
734  *	The caller must hold the rtnl_mutex.
735  */
736 int dev_addr_add(struct net_device *dev, const unsigned char *addr,
737 		 unsigned char addr_type)
738 {
739 	int err;
740 
741 	ASSERT_RTNL();
742 
743 	err = netif_pre_changeaddr_notify(dev, addr, NULL);
744 	if (err)
745 		return err;
746 	err = __hw_addr_add(&dev->dev_addrs, addr, dev->addr_len, addr_type);
747 	if (!err)
748 		call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
749 	return err;
750 }
751 EXPORT_SYMBOL(dev_addr_add);
752 
753 /**
754  *	dev_addr_del - Release a device address.
755  *	@dev: device
756  *	@addr: address to delete
757  *	@addr_type: address type
758  *
759  *	Release reference to a device address and remove it from the device
760  *	if the reference count drops to zero.
761  *
762  *	The caller must hold the rtnl_mutex.
763  */
764 int dev_addr_del(struct net_device *dev, const unsigned char *addr,
765 		 unsigned char addr_type)
766 {
767 	int err;
768 	struct netdev_hw_addr *ha;
769 
770 	ASSERT_RTNL();
771 
772 	/*
773 	 * We can not remove the first address from the list because
774 	 * dev->dev_addr points to that.
775 	 */
776 	ha = list_first_entry(&dev->dev_addrs.list,
777 			      struct netdev_hw_addr, list);
778 	if (!memcmp(ha->addr, addr, dev->addr_len) &&
779 	    ha->type == addr_type && ha->refcount == 1)
780 		return -ENOENT;
781 
782 	err = __hw_addr_del(&dev->dev_addrs, addr, dev->addr_len,
783 			    addr_type);
784 	if (!err)
785 		call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
786 	return err;
787 }
788 EXPORT_SYMBOL(dev_addr_del);
789 
790 /*
791  * Unicast list handling functions
792  */
793 
794 /**
795  *	dev_uc_add_excl - Add a global secondary unicast address
796  *	@dev: device
797  *	@addr: address to add
798  */
799 int dev_uc_add_excl(struct net_device *dev, const unsigned char *addr)
800 {
801 	int err;
802 
803 	netif_addr_lock_bh(dev);
804 	err = __hw_addr_add_ex(&dev->uc, addr, dev->addr_len,
805 			       NETDEV_HW_ADDR_T_UNICAST, true, false,
806 			       0, true);
807 	if (!err)
808 		__dev_set_rx_mode(dev);
809 	netif_addr_unlock_bh(dev);
810 	return err;
811 }
812 EXPORT_SYMBOL(dev_uc_add_excl);
813 
814 /**
815  *	dev_uc_add - Add a secondary unicast address
816  *	@dev: device
817  *	@addr: address to add
818  *
819  *	Add a secondary unicast address to the device or increase
820  *	the reference count if it already exists.
821  */
822 int dev_uc_add(struct net_device *dev, const unsigned char *addr)
823 {
824 	int err;
825 
826 	netif_addr_lock_bh(dev);
827 	err = __hw_addr_add(&dev->uc, addr, dev->addr_len,
828 			    NETDEV_HW_ADDR_T_UNICAST);
829 	if (!err)
830 		__dev_set_rx_mode(dev);
831 	netif_addr_unlock_bh(dev);
832 	return err;
833 }
834 EXPORT_SYMBOL(dev_uc_add);
835 
836 /**
837  *	dev_uc_del - Release secondary unicast address.
838  *	@dev: device
839  *	@addr: address to delete
840  *
841  *	Release reference to a secondary unicast address and remove it
842  *	from the device if the reference count drops to zero.
843  */
844 int dev_uc_del(struct net_device *dev, const unsigned char *addr)
845 {
846 	int err;
847 
848 	netif_addr_lock_bh(dev);
849 	err = __hw_addr_del(&dev->uc, addr, dev->addr_len,
850 			    NETDEV_HW_ADDR_T_UNICAST);
851 	if (!err)
852 		__dev_set_rx_mode(dev);
853 	netif_addr_unlock_bh(dev);
854 	return err;
855 }
856 EXPORT_SYMBOL(dev_uc_del);
857 
858 /**
859  *	dev_uc_sync - Synchronize device's unicast list to another device
860  *	@to: destination device
861  *	@from: source device
862  *
863  *	Add newly added addresses to the destination device and release
864  *	addresses that have no users left. The source device must be
865  *	locked by netif_addr_lock_bh.
866  *
867  *	This function is intended to be called from the dev->set_rx_mode
868  *	function of layered software devices.  This function assumes that
869  *	addresses will only ever be synced to the @to devices and no other.
870  */
871 int dev_uc_sync(struct net_device *to, struct net_device *from)
872 {
873 	int err = 0;
874 
875 	if (to->addr_len != from->addr_len)
876 		return -EINVAL;
877 
878 	netif_addr_lock(to);
879 	err = __hw_addr_sync(&to->uc, &from->uc, to->addr_len);
880 	if (!err)
881 		__dev_set_rx_mode(to);
882 	netif_addr_unlock(to);
883 	return err;
884 }
885 EXPORT_SYMBOL(dev_uc_sync);
886 
887 /**
888  *	dev_uc_sync_multiple - Synchronize device's unicast list to another
889  *	device, but allow for multiple calls to sync to multiple devices.
890  *	@to: destination device
891  *	@from: source device
892  *
893  *	Add newly added addresses to the destination device and release
894  *	addresses that have been deleted from the source. The source device
895  *	must be locked by netif_addr_lock_bh.
896  *
897  *	This function is intended to be called from the dev->set_rx_mode
898  *	function of layered software devices.  It allows for a single source
899  *	device to be synced to multiple destination devices.
900  */
901 int dev_uc_sync_multiple(struct net_device *to, struct net_device *from)
902 {
903 	int err = 0;
904 
905 	if (to->addr_len != from->addr_len)
906 		return -EINVAL;
907 
908 	netif_addr_lock(to);
909 	err = __hw_addr_sync_multiple(&to->uc, &from->uc, to->addr_len);
910 	if (!err)
911 		__dev_set_rx_mode(to);
912 	netif_addr_unlock(to);
913 	return err;
914 }
915 EXPORT_SYMBOL(dev_uc_sync_multiple);
916 
917 /**
918  *	dev_uc_unsync - Remove synchronized addresses from the destination device
919  *	@to: destination device
920  *	@from: source device
921  *
922  *	Remove all addresses that were added to the destination device by
923  *	dev_uc_sync(). This function is intended to be called from the
924  *	dev->stop function of layered software devices.
925  */
926 void dev_uc_unsync(struct net_device *to, struct net_device *from)
927 {
928 	if (to->addr_len != from->addr_len)
929 		return;
930 
931 	/* netif_addr_lock_bh() uses lockdep subclass 0, this is okay for two
932 	 * reasons:
933 	 * 1) This is always called without any addr_list_lock, so as the
934 	 *    outermost one here, it must be 0.
935 	 * 2) This is called by some callers after unlinking the upper device,
936 	 *    so the dev->lower_level becomes 1 again.
937 	 * Therefore, the subclass for 'from' is 0, for 'to' is either 1 or
938 	 * larger.
939 	 */
940 	netif_addr_lock_bh(from);
941 	netif_addr_lock(to);
942 	__hw_addr_unsync(&to->uc, &from->uc, to->addr_len);
943 	__dev_set_rx_mode(to);
944 	netif_addr_unlock(to);
945 	netif_addr_unlock_bh(from);
946 }
947 EXPORT_SYMBOL(dev_uc_unsync);
948 
949 /**
950  *	dev_uc_flush - Flush unicast addresses
951  *	@dev: device
952  *
953  *	Flush unicast addresses.
954  */
955 void dev_uc_flush(struct net_device *dev)
956 {
957 	netif_addr_lock_bh(dev);
958 	__hw_addr_flush(&dev->uc);
959 	netif_addr_unlock_bh(dev);
960 }
961 EXPORT_SYMBOL(dev_uc_flush);
962 
963 /**
964  *	dev_uc_init - Init unicast address list
965  *	@dev: device
966  *
967  *	Init unicast address list.
968  */
969 void dev_uc_init(struct net_device *dev)
970 {
971 	__hw_addr_init(&dev->uc);
972 }
973 EXPORT_SYMBOL(dev_uc_init);
974 
975 /*
976  * Multicast list handling functions
977  */
978 
979 /**
980  *	dev_mc_add_excl - Add a global secondary multicast address
981  *	@dev: device
982  *	@addr: address to add
983  */
984 int dev_mc_add_excl(struct net_device *dev, const unsigned char *addr)
985 {
986 	int err;
987 
988 	netif_addr_lock_bh(dev);
989 	err = __hw_addr_add_ex(&dev->mc, addr, dev->addr_len,
990 			       NETDEV_HW_ADDR_T_MULTICAST, true, false,
991 			       0, true);
992 	if (!err)
993 		__dev_set_rx_mode(dev);
994 	netif_addr_unlock_bh(dev);
995 	return err;
996 }
997 EXPORT_SYMBOL(dev_mc_add_excl);
998 
999 static int __dev_mc_add(struct net_device *dev, const unsigned char *addr,
1000 			bool global)
1001 {
1002 	int err;
1003 
1004 	netif_addr_lock_bh(dev);
1005 	err = __hw_addr_add_ex(&dev->mc, addr, dev->addr_len,
1006 			       NETDEV_HW_ADDR_T_MULTICAST, global, false,
1007 			       0, false);
1008 	if (!err)
1009 		__dev_set_rx_mode(dev);
1010 	netif_addr_unlock_bh(dev);
1011 	return err;
1012 }
1013 /**
1014  *	dev_mc_add - Add a multicast address
1015  *	@dev: device
1016  *	@addr: address to add
1017  *
1018  *	Add a multicast address to the device or increase
1019  *	the reference count if it already exists.
1020  */
1021 int dev_mc_add(struct net_device *dev, const unsigned char *addr)
1022 {
1023 	return __dev_mc_add(dev, addr, false);
1024 }
1025 EXPORT_SYMBOL(dev_mc_add);
1026 
1027 /**
1028  *	dev_mc_add_global - Add a global multicast address
1029  *	@dev: device
1030  *	@addr: address to add
1031  *
1032  *	Add a global multicast address to the device.
1033  */
1034 int dev_mc_add_global(struct net_device *dev, const unsigned char *addr)
1035 {
1036 	return __dev_mc_add(dev, addr, true);
1037 }
1038 EXPORT_SYMBOL(dev_mc_add_global);
1039 
1040 static int __dev_mc_del(struct net_device *dev, const unsigned char *addr,
1041 			bool global)
1042 {
1043 	int err;
1044 
1045 	netif_addr_lock_bh(dev);
1046 	err = __hw_addr_del_ex(&dev->mc, addr, dev->addr_len,
1047 			       NETDEV_HW_ADDR_T_MULTICAST, global, false);
1048 	if (!err)
1049 		__dev_set_rx_mode(dev);
1050 	netif_addr_unlock_bh(dev);
1051 	return err;
1052 }
1053 
1054 /**
1055  *	dev_mc_del - Delete a multicast address.
1056  *	@dev: device
1057  *	@addr: address to delete
1058  *
1059  *	Release reference to a multicast address and remove it
1060  *	from the device if the reference count drops to zero.
1061  */
1062 int dev_mc_del(struct net_device *dev, const unsigned char *addr)
1063 {
1064 	return __dev_mc_del(dev, addr, false);
1065 }
1066 EXPORT_SYMBOL(dev_mc_del);
1067 
1068 /**
1069  *	dev_mc_del_global - Delete a global multicast address.
1070  *	@dev: device
1071  *	@addr: address to delete
1072  *
1073  *	Release reference to a multicast address and remove it
1074  *	from the device if the reference count drops to zero.
1075  */
1076 int dev_mc_del_global(struct net_device *dev, const unsigned char *addr)
1077 {
1078 	return __dev_mc_del(dev, addr, true);
1079 }
1080 EXPORT_SYMBOL(dev_mc_del_global);
1081 
1082 /**
1083  *	dev_mc_sync - Synchronize device's multicast list to another device
1084  *	@to: destination device
1085  *	@from: source device
1086  *
1087  *	Add newly added addresses to the destination device and release
1088  *	addresses that have no users left. The source device must be
1089  *	locked by netif_addr_lock_bh.
1090  *
1091  *	This function is intended to be called from the ndo_set_rx_mode
1092  *	function of layered software devices.
1093  */
1094 int dev_mc_sync(struct net_device *to, struct net_device *from)
1095 {
1096 	int err = 0;
1097 
1098 	if (to->addr_len != from->addr_len)
1099 		return -EINVAL;
1100 
1101 	netif_addr_lock(to);
1102 	err = __hw_addr_sync(&to->mc, &from->mc, to->addr_len);
1103 	if (!err)
1104 		__dev_set_rx_mode(to);
1105 	netif_addr_unlock(to);
1106 	return err;
1107 }
1108 EXPORT_SYMBOL(dev_mc_sync);
1109 
1110 /**
1111  *	dev_mc_sync_multiple - Synchronize device's multicast list to another
1112  *	device, but allow for multiple calls to sync to multiple devices.
1113  *	@to: destination device
1114  *	@from: source device
1115  *
1116  *	Add newly added addresses to the destination device and release
1117  *	addresses that have no users left. The source device must be
1118  *	locked by netif_addr_lock_bh.
1119  *
1120  *	This function is intended to be called from the ndo_set_rx_mode
1121  *	function of layered software devices.  It allows for a single
1122  *	source device to be synced to multiple destination devices.
1123  */
1124 int dev_mc_sync_multiple(struct net_device *to, struct net_device *from)
1125 {
1126 	int err = 0;
1127 
1128 	if (to->addr_len != from->addr_len)
1129 		return -EINVAL;
1130 
1131 	netif_addr_lock(to);
1132 	err = __hw_addr_sync_multiple(&to->mc, &from->mc, to->addr_len);
1133 	if (!err)
1134 		__dev_set_rx_mode(to);
1135 	netif_addr_unlock(to);
1136 	return err;
1137 }
1138 EXPORT_SYMBOL(dev_mc_sync_multiple);
1139 
1140 /**
1141  *	dev_mc_unsync - Remove synchronized addresses from the destination device
1142  *	@to: destination device
1143  *	@from: source device
1144  *
1145  *	Remove all addresses that were added to the destination device by
1146  *	dev_mc_sync(). This function is intended to be called from the
1147  *	dev->stop function of layered software devices.
1148  */
1149 void dev_mc_unsync(struct net_device *to, struct net_device *from)
1150 {
1151 	if (to->addr_len != from->addr_len)
1152 		return;
1153 
1154 	/* See the above comments inside dev_uc_unsync(). */
1155 	netif_addr_lock_bh(from);
1156 	netif_addr_lock(to);
1157 	__hw_addr_unsync(&to->mc, &from->mc, to->addr_len);
1158 	__dev_set_rx_mode(to);
1159 	netif_addr_unlock(to);
1160 	netif_addr_unlock_bh(from);
1161 }
1162 EXPORT_SYMBOL(dev_mc_unsync);
1163 
1164 /**
1165  *	dev_mc_flush - Flush multicast addresses
1166  *	@dev: device
1167  *
1168  *	Flush multicast addresses.
1169  */
1170 void dev_mc_flush(struct net_device *dev)
1171 {
1172 	netif_addr_lock_bh(dev);
1173 	__hw_addr_flush(&dev->mc);
1174 	netif_addr_unlock_bh(dev);
1175 }
1176 EXPORT_SYMBOL(dev_mc_flush);
1177 
1178 /**
1179  *	dev_mc_init - Init multicast address list
1180  *	@dev: device
1181  *
1182  *	Init multicast address list.
1183  */
1184 void dev_mc_init(struct net_device *dev)
1185 {
1186 	__hw_addr_init(&dev->mc);
1187 }
1188 EXPORT_SYMBOL(dev_mc_init);
1189 
1190 static int netif_addr_lists_snapshot(struct net_device *dev,
1191 				     struct netdev_hw_addr_list *uc_snap,
1192 				     struct netdev_hw_addr_list *mc_snap,
1193 				     struct netdev_hw_addr_list *uc_ref,
1194 				     struct netdev_hw_addr_list *mc_ref)
1195 {
1196 	int err;
1197 
1198 	err = __hw_addr_list_snapshot(uc_snap, &dev->uc, dev->addr_len,
1199 				      &dev->rx_mode_addr_cache);
1200 	if (!err)
1201 		err = __hw_addr_list_snapshot(uc_ref, &dev->uc, dev->addr_len,
1202 					      &dev->rx_mode_addr_cache);
1203 	if (!err)
1204 		err = __hw_addr_list_snapshot(mc_snap, &dev->mc,
1205 					      dev->addr_len,
1206 					      &dev->rx_mode_addr_cache);
1207 	if (!err)
1208 		err = __hw_addr_list_snapshot(mc_ref, &dev->mc, dev->addr_len,
1209 					      &dev->rx_mode_addr_cache);
1210 
1211 	if (err) {
1212 		__hw_addr_flush(uc_snap);
1213 		__hw_addr_flush(uc_ref);
1214 		__hw_addr_flush(mc_snap);
1215 	}
1216 
1217 	return err;
1218 }
1219 
1220 static void netif_addr_lists_reconcile(struct net_device *dev,
1221 				       struct netdev_hw_addr_list *uc_snap,
1222 				       struct netdev_hw_addr_list *mc_snap,
1223 				       struct netdev_hw_addr_list *uc_ref,
1224 				       struct netdev_hw_addr_list *mc_ref)
1225 {
1226 	__hw_addr_list_reconcile(&dev->uc, uc_snap, uc_ref, dev->addr_len,
1227 				 &dev->rx_mode_addr_cache);
1228 	__hw_addr_list_reconcile(&dev->mc, mc_snap, mc_ref, dev->addr_len,
1229 				 &dev->rx_mode_addr_cache);
1230 }
1231 
1232 /**
1233  * netif_uc_promisc_update() - evaluate whether uc_promisc should be toggled.
1234  * @dev: device
1235  *
1236  * Must be called under netif_addr_lock_bh.
1237  * Return: +1 to enter promisc, -1 to leave, 0 for no change.
1238  */
1239 static int netif_uc_promisc_update(struct net_device *dev)
1240 {
1241 	if (dev->priv_flags & IFF_UNICAST_FLT)
1242 		return 0;
1243 
1244 	if (!netdev_uc_empty(dev) && !dev->uc_promisc) {
1245 		dev->uc_promisc = true;
1246 		return 1;
1247 	}
1248 	if (netdev_uc_empty(dev) && dev->uc_promisc) {
1249 		dev->uc_promisc = false;
1250 		return -1;
1251 	}
1252 	return 0;
1253 }
1254 
1255 static void netif_rx_mode_run(struct net_device *dev)
1256 {
1257 	struct netdev_hw_addr_list uc_snap, mc_snap, uc_ref, mc_ref;
1258 	const struct net_device_ops *ops = dev->netdev_ops;
1259 	int promisc_inc;
1260 	int err;
1261 
1262 	might_sleep();
1263 	netdev_ops_assert_locked(dev);
1264 
1265 	__hw_addr_init(&uc_snap);
1266 	__hw_addr_init(&mc_snap);
1267 	__hw_addr_init(&uc_ref);
1268 	__hw_addr_init(&mc_ref);
1269 
1270 	if (!(dev->flags & IFF_UP) || !netif_device_present(dev))
1271 		return;
1272 
1273 	if (ops->ndo_set_rx_mode_async) {
1274 		netif_addr_lock_bh(dev);
1275 		err = netif_addr_lists_snapshot(dev, &uc_snap, &mc_snap,
1276 						&uc_ref, &mc_ref);
1277 		if (err) {
1278 			netdev_WARN(dev, "failed to sync uc/mc addresses\n");
1279 			netif_addr_unlock_bh(dev);
1280 			return;
1281 		}
1282 
1283 		promisc_inc = netif_uc_promisc_update(dev);
1284 		netif_addr_unlock_bh(dev);
1285 	} else {
1286 		netif_addr_lock_bh(dev);
1287 		promisc_inc = netif_uc_promisc_update(dev);
1288 		netif_addr_unlock_bh(dev);
1289 	}
1290 
1291 	if (promisc_inc)
1292 		__dev_set_promiscuity(dev, promisc_inc, false);
1293 
1294 	if (ops->ndo_set_rx_mode_async) {
1295 		ops->ndo_set_rx_mode_async(dev, &uc_snap, &mc_snap);
1296 
1297 		netif_addr_lock_bh(dev);
1298 		netif_addr_lists_reconcile(dev, &uc_snap, &mc_snap,
1299 					   &uc_ref, &mc_ref);
1300 		netif_addr_unlock_bh(dev);
1301 	} else if (ops->ndo_set_rx_mode) {
1302 		netif_addr_lock_bh(dev);
1303 		ops->ndo_set_rx_mode(dev);
1304 		netif_addr_unlock_bh(dev);
1305 	}
1306 }
1307 
1308 static void netdev_rx_mode_work(struct work_struct *work)
1309 {
1310 	struct net_device *dev;
1311 
1312 	rtnl_lock();
1313 
1314 	while (true) {
1315 		spin_lock_bh(&rx_mode_lock);
1316 		if (list_empty(&rx_mode_list)) {
1317 			spin_unlock_bh(&rx_mode_lock);
1318 			break;
1319 		}
1320 		dev = list_first_entry(&rx_mode_list, struct net_device,
1321 				       rx_mode_node);
1322 		list_del_init(&dev->rx_mode_node);
1323 		/* We must free netdev tracker under
1324 		 * the spinlock protection.
1325 		 */
1326 		netdev_tracker_free(dev, &dev->rx_mode_tracker);
1327 		spin_unlock_bh(&rx_mode_lock);
1328 
1329 		netdev_lock_ops(dev);
1330 		netif_rx_mode_run(dev);
1331 		netdev_unlock_ops(dev);
1332 		/* Use __dev_put() because netdev_tracker_free() was already
1333 		 * called above. Must be after netdev_unlock_ops() to prevent
1334 		 * netdev_run_todo() from freeing the device while still in use.
1335 		 */
1336 		__dev_put(dev);
1337 	}
1338 
1339 	rtnl_unlock();
1340 }
1341 
1342 static void netif_rx_mode_queue(struct net_device *dev)
1343 {
1344 	spin_lock_bh(&rx_mode_lock);
1345 	if (list_empty(&dev->rx_mode_node)) {
1346 		list_add_tail(&dev->rx_mode_node, &rx_mode_list);
1347 		netdev_hold(dev, &dev->rx_mode_tracker, GFP_ATOMIC);
1348 	}
1349 	spin_unlock_bh(&rx_mode_lock);
1350 	schedule_work(&rx_mode_work);
1351 }
1352 
1353 /**
1354  * __dev_set_rx_mode() - upload unicast and multicast address lists to device
1355  * and configure RX filtering.
1356  * @dev: device
1357  *
1358  * When the device doesn't support unicast filtering it is put in promiscuous
1359  * mode while unicast addresses are present.
1360  */
1361 void __dev_set_rx_mode(struct net_device *dev)
1362 {
1363 	const struct net_device_ops *ops = dev->netdev_ops;
1364 	int promisc_inc;
1365 
1366 	/* dev_open will call this function so the list will stay sane. */
1367 	if (!(dev->flags & IFF_UP))
1368 		return;
1369 
1370 	if (!netif_device_present(dev))
1371 		return;
1372 
1373 	if (ops->ndo_set_rx_mode_async || ops->ndo_change_rx_flags ||
1374 	    netdev_need_ops_lock(dev)) {
1375 		netif_rx_mode_queue(dev);
1376 		return;
1377 	}
1378 
1379 	/* Legacy path for non-ops-locked HW devices. */
1380 
1381 	promisc_inc = netif_uc_promisc_update(dev);
1382 	if (promisc_inc)
1383 		__dev_set_promiscuity(dev, promisc_inc, false);
1384 
1385 	if (ops->ndo_set_rx_mode)
1386 		ops->ndo_set_rx_mode(dev);
1387 }
1388 
1389 void dev_set_rx_mode(struct net_device *dev)
1390 {
1391 	netif_addr_lock_bh(dev);
1392 	__dev_set_rx_mode(dev);
1393 	netif_addr_unlock_bh(dev);
1394 }
1395 
1396 bool netif_rx_mode_clean(struct net_device *dev)
1397 {
1398 	bool clean = false;
1399 
1400 	spin_lock_bh(&rx_mode_lock);
1401 	if (!list_empty(&dev->rx_mode_node)) {
1402 		list_del_init(&dev->rx_mode_node);
1403 		clean = true;
1404 		/* We must release netdev tracker under
1405 		 * the spinlock protection.
1406 		 */
1407 		netdev_tracker_free(dev, &dev->rx_mode_tracker);
1408 	}
1409 	spin_unlock_bh(&rx_mode_lock);
1410 
1411 	return clean;
1412 }
1413 
1414 /**
1415  * netif_rx_mode_sync() - sync rx mode inline
1416  * @dev: network device
1417  *
1418  * Drivers implementing ndo_set_rx_mode_async() have their rx mode callback
1419  * executed from a workqueue. This allows the callback to sleep, but means
1420  * the hardware update is deferred and may not be visible to userspace
1421  * by the time the initiating syscall returns. netif_rx_mode_sync() steals
1422  * workqueue update and executes it inline. This preserves the atomicity of
1423  * operations to the userspace.
1424  */
1425 void netif_rx_mode_sync(struct net_device *dev)
1426 {
1427 	if (netif_rx_mode_clean(dev)) {
1428 		netif_rx_mode_run(dev);
1429 		/* Use __dev_put() because netdev_tracker_free() was already
1430 		 * called inside netif_rx_mode_clean().
1431 		 */
1432 		__dev_put(dev);
1433 	}
1434 }
1435