diff options
author | Vlad Yasevich <vyasevic@redhat.com> | 2013-04-15 05:54:25 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-15 16:10:47 -0400 |
commit | 4cd729b04285b7330edaf5a7080aa795d6d15ff3 (patch) | |
tree | 274beba6b944edcd71879b779f2e674dede3cd91 /include | |
parent | 0022d2dd4d76e0e7d5c241c343a5016fdfa2ad4f (diff) |
net: add dev_uc_sync_multiple() and dev_mc_sync_multiple() api
The current implementation of dev_uc_sync/unsync() assumes that there is
a strict 1-to-1 relationship between the source and destination of the sync.
In other words, once an address has been synced to a destination device, it
will not be synced to any other device through the sync API.
However, there are some virtual devices that aggreate a number of lower
devices and need to sync addresses to all of them. The current
API falls short there.
This patch introduces a new dev_uc_sync_multiple() api that can be called
in the above circumstances and allows sync to work for every invocation.
CC: Jiri Pirko <jiri@resnulli.us>
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/netdevice.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 53d3939358a7..623b57b52195 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -209,6 +209,7 @@ struct netdev_hw_addr { | |||
209 | #define NETDEV_HW_ADDR_T_UNICAST 4 | 209 | #define NETDEV_HW_ADDR_T_UNICAST 4 |
210 | #define NETDEV_HW_ADDR_T_MULTICAST 5 | 210 | #define NETDEV_HW_ADDR_T_MULTICAST 5 |
211 | bool global_use; | 211 | bool global_use; |
212 | int sync_cnt; | ||
212 | int refcount; | 213 | int refcount; |
213 | int synced; | 214 | int synced; |
214 | struct rcu_head rcu_head; | 215 | struct rcu_head rcu_head; |
@@ -2627,6 +2628,7 @@ extern int dev_uc_add(struct net_device *dev, const unsigned char *addr); | |||
2627 | extern int dev_uc_add_excl(struct net_device *dev, const unsigned char *addr); | 2628 | extern int dev_uc_add_excl(struct net_device *dev, const unsigned char *addr); |
2628 | extern int dev_uc_del(struct net_device *dev, const unsigned char *addr); | 2629 | extern int dev_uc_del(struct net_device *dev, const unsigned char *addr); |
2629 | extern int dev_uc_sync(struct net_device *to, struct net_device *from); | 2630 | extern int dev_uc_sync(struct net_device *to, struct net_device *from); |
2631 | extern int dev_uc_sync_multiple(struct net_device *to, struct net_device *from); | ||
2630 | extern void dev_uc_unsync(struct net_device *to, struct net_device *from); | 2632 | extern void dev_uc_unsync(struct net_device *to, struct net_device *from); |
2631 | extern void dev_uc_flush(struct net_device *dev); | 2633 | extern void dev_uc_flush(struct net_device *dev); |
2632 | extern void dev_uc_init(struct net_device *dev); | 2634 | extern void dev_uc_init(struct net_device *dev); |
@@ -2638,6 +2640,7 @@ extern int dev_mc_add_excl(struct net_device *dev, const unsigned char *addr); | |||
2638 | extern int dev_mc_del(struct net_device *dev, const unsigned char *addr); | 2640 | extern int dev_mc_del(struct net_device *dev, const unsigned char *addr); |
2639 | extern int dev_mc_del_global(struct net_device *dev, const unsigned char *addr); | 2641 | extern int dev_mc_del_global(struct net_device *dev, const unsigned char *addr); |
2640 | extern int dev_mc_sync(struct net_device *to, struct net_device *from); | 2642 | extern int dev_mc_sync(struct net_device *to, struct net_device *from); |
2643 | extern int dev_mc_sync_multiple(struct net_device *to, struct net_device *from); | ||
2641 | extern void dev_mc_unsync(struct net_device *to, struct net_device *from); | 2644 | extern void dev_mc_unsync(struct net_device *to, struct net_device *from); |
2642 | extern void dev_mc_flush(struct net_device *dev); | 2645 | extern void dev_mc_flush(struct net_device *dev); |
2643 | extern void dev_mc_init(struct net_device *dev); | 2646 | extern void dev_mc_init(struct net_device *dev); |