14 #include <linux/netdevice.h>
15 #include <linux/rtnetlink.h>
16 #include <linux/export.h>
17 #include <linux/list.h>
25 const unsigned char *
addr,
int addr_len,
26 unsigned char addr_type,
bool global)
31 alloc_size =
sizeof(*ha);
42 list_add_tail_rcu(&ha->
list, &list->
list);
49 const unsigned char *addr,
int addr_len,
50 unsigned char addr_type,
bool global)
59 ha->
type == addr_type) {
72 return __hw_addr_create_ex(list, addr, addr_len, addr_type, global);
76 const unsigned char *addr,
int addr_len,
77 unsigned char addr_type)
79 return __hw_addr_add_ex(list, addr, addr_len, addr_type,
false);
83 const unsigned char *addr,
int addr_len,
84 unsigned char addr_type,
bool global)
90 (ha->
type == addr_type || !addr_type)) {
99 list_del_rcu(&ha->
list);
109 const unsigned char *addr,
int addr_len,
110 unsigned char addr_type)
112 return __hw_addr_del_ex(list, addr, addr_len, addr_type,
false);
117 int addr_len,
unsigned char addr_type)
124 type = addr_type ? addr_type : ha->
type;
125 err = __hw_addr_add(to_list, ha->
addr, addr_len, type);
135 type = addr_type ? addr_type : ha2->
type;
136 __hw_addr_del(to_list, ha2->
addr, addr_len, type);
144 int addr_len,
unsigned char addr_type)
150 type = addr_type ? addr_type : ha->
type;
151 __hw_addr_del(to_list, ha->
addr, addr_len, type);
165 err = __hw_addr_add(to_list, ha->
addr,
172 __hw_addr_del(to_list, ha->
addr, addr_len, ha->
type);
173 __hw_addr_del(from_list, ha->
addr, addr_len, ha->
type);
188 __hw_addr_del(to_list, ha->
addr,
191 __hw_addr_del(from_list, ha->
addr,
203 list_del_rcu(&ha->
list);
212 INIT_LIST_HEAD(&list->
list);
256 memset(addr, 0,
sizeof(addr));
257 err = __hw_addr_add(&dev->
dev_addrs, addr,
sizeof(addr),
284 unsigned char addr_type)
309 unsigned char addr_type)
346 unsigned char addr_type)
374 unsigned char addr_type)
401 netif_addr_lock_bh(dev);
409 err = __hw_addr_create_ex(&dev->
uc, addr, dev->
addr_len,
414 netif_addr_unlock_bh(dev);
431 netif_addr_lock_bh(dev);
432 err = __hw_addr_add(&dev->
uc, addr, dev->
addr_len,
436 netif_addr_unlock_bh(dev);
453 netif_addr_lock_bh(dev);
454 err = __hw_addr_del(&dev->
uc, addr, dev->
addr_len,
458 netif_addr_unlock_bh(dev);
482 netif_addr_lock_nested(to);
486 netif_addr_unlock(to);
505 netif_addr_lock_bh(from);
506 netif_addr_lock_nested(to);
509 netif_addr_unlock(to);
510 netif_addr_unlock_bh(from);
522 netif_addr_lock_bh(dev);
524 netif_addr_unlock_bh(dev);
554 netif_addr_lock_bh(dev);
562 err = __hw_addr_create_ex(&dev->
mc, addr, dev->
addr_len,
567 netif_addr_unlock_bh(dev);
572 static int __dev_mc_add(
struct net_device *
dev,
const unsigned char *addr,
577 netif_addr_lock_bh(dev);
578 err = __hw_addr_add_ex(&dev->
mc, addr, dev->
addr_len,
582 netif_addr_unlock_bh(dev);
595 return __dev_mc_add(dev, addr,
false);
608 return __dev_mc_add(dev, addr,
true);
612 static int __dev_mc_del(
struct net_device *dev,
const unsigned char *addr,
617 netif_addr_lock_bh(dev);
618 err = __hw_addr_del_ex(&dev->
mc, addr, dev->
addr_len,
622 netif_addr_unlock_bh(dev);
636 return __dev_mc_del(dev, addr,
false);
650 return __dev_mc_del(dev, addr,
true);
673 netif_addr_lock_nested(to);
677 netif_addr_unlock(to);
696 netif_addr_lock_bh(from);
697 netif_addr_lock_nested(to);
700 netif_addr_unlock(to);
701 netif_addr_unlock_bh(from);
713 netif_addr_lock_bh(dev);
715 netif_addr_unlock_bh(dev);
731 #ifdef CONFIG_PROC_FS
734 static int dev_mc_seq_show(
struct seq_file *seq,
void *
v)
742 netif_addr_lock_bh(dev);
754 netif_addr_unlock_bh(dev);
759 .
start = dev_seq_start,
760 .next = dev_seq_next,
761 .stop = dev_seq_stop,
762 .show = dev_mc_seq_show,
773 .open = dev_mc_seq_open,
788 static void __net_exit dev_mc_net_exit(
struct net *net)
794 .init = dev_mc_net_init,
795 .exit = dev_mc_net_exit,