net: core: dev_addr_lists: add auxiliary func to handle reference address updates
In order to avoid all table update, and only remove or add new address, the auxiliary function exists, named __hw_addr_sync_dev(). It allows end driver do nothing when nothing changed and add/rm when concrete address is firstly added or lastly removed. But it doesn't include cases when an address of real device or vlan was reused by other vlans or vlan/macval devices. For handaling events when address was reused/unreused the patch adds new auxiliary routine - __hw_addr_ref_sync_dev(). It allows to do nothing when nothing was changed and do updates only for an address being added/reused/deleted/unreused. Thus, clone address changes for vlans can be mirrored in the table. The function is exclusive with __hw_addr_sync_dev(). It's responsibility of the end driver to identify address vlan device, if it needs so. Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@linaro.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
29e1220717
commit
e7946760de
@@ -4068,6 +4068,16 @@ int __hw_addr_sync_dev(struct netdev_hw_addr_list *list,
|
||||
int (*sync)(struct net_device *, const unsigned char *),
|
||||
int (*unsync)(struct net_device *,
|
||||
const unsigned char *));
|
||||
int __hw_addr_ref_sync_dev(struct netdev_hw_addr_list *list,
|
||||
struct net_device *dev,
|
||||
int (*sync)(struct net_device *,
|
||||
const unsigned char *, int),
|
||||
int (*unsync)(struct net_device *,
|
||||
const unsigned char *, int));
|
||||
void __hw_addr_ref_unsync_dev(struct netdev_hw_addr_list *list,
|
||||
struct net_device *dev,
|
||||
int (*unsync)(struct net_device *,
|
||||
const unsigned char *, int));
|
||||
void __hw_addr_unsync_dev(struct netdev_hw_addr_list *list,
|
||||
struct net_device *dev,
|
||||
int (*unsync)(struct net_device *,
|
||||
|
Reference in New Issue
Block a user