Copying the dev_addr from a parent device is an operation
common to a number of drivers. The addr_assign_type should
be updated accordingly, either by reusing the value from
the source device or explicitly indicating that the address
is stolen by setting addr_assign_type to NET_ADDR_STOLEN.
This patch set adds a helper copying both the dev_addr and
the addr_assign_type, and use this helper in drivers which
don't currently set the addr_assign_type. Using NET_ADDR_STOLEN
might be more appropriate in some of these cases. Please
let me know, and I'll update the patch accordingly.
Bjørn Mork (10):
net: etherdevice: add address inherit helper
net: vlan: inherit addr_assign_type along with dev_addr
net: dsa: inherit addr_assign_type along with dev_addr
net: macvlan: inherit addr_assign_type along with dev_addr
net: team: inherit addr_assign_type along with dev_addr
net: airo: inherit addr_assign_type along with dev_addr
net: hostap: inherit addr_assign_type along with dev_addr
net: libertas: inherit addr_assign_type along with dev_addr
staging: vt6655: inherit addr_assign_type along with dev_addr
staging: vt6656: inherit addr_assign_type along with dev_addr
drivers/net/macvlan.c | 2 +-
drivers/net/team/team.c | 2 +-
drivers/net/wireless/airo.c | 2 +-
drivers/net/wireless/hostap/hostap_hw.c | 2 +-
drivers/net/wireless/hostap/hostap_main.c | 2 +-
drivers/net/wireless/libertas/mesh.c | 2 +-
drivers/staging/vt6655/hostap.c | 2 +-
drivers/staging/vt6655/ioctl.c | 2 +-
drivers/staging/vt6655/wpactl.c | 2 +-
drivers/staging/vt6656/hostap.c | 2 +-
include/linux/etherdevice.h | 19 +++++++++++++++++++
net/8021q/vlan_dev.c | 2 +-
net/dsa/slave.c | 2 +-
13 files changed, 31 insertions(+), 12 deletions(-)
--
1.7.10.4
On Fri, Aug 23, 2013 at 11:35:09AM +0200, Bj?rn Mork wrote:
> Cc: "John W. Linville" <[email protected]>
> Signed-off-by: Bj?rn Mork <[email protected]>
> ---
> drivers/net/wireless/airo.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
> index d0adbaf..7fe1964 100644
> --- a/drivers/net/wireless/airo.c
> +++ b/drivers/net/wireless/airo.c
> @@ -2693,7 +2693,7 @@ static struct net_device *init_wifidev(struct airo_info *ai,
> dev->base_addr = ethdev->base_addr;
> dev->wireless_data = ethdev->wireless_data;
> SET_NETDEV_DEV(dev, ethdev->dev.parent);
> - memcpy(dev->dev_addr, ethdev->dev_addr, dev->addr_len);
> + eth_hw_addr_inherit(dev, ethdev);
> err = register_netdev(dev);
> if (err<0) {
> free_netdev(dev);
> --
> 1.7.10.4
Acked-by: "John W. Linville" <[email protected]>
--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.
On Fri, Aug 23, 2013 at 11:35:11AM +0200, Bj?rn Mork wrote:
> Cc: "John W. Linville" <[email protected]>
> Signed-off-by: Bj?rn Mork <[email protected]>
> ---
> drivers/net/wireless/libertas/mesh.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/libertas/mesh.c b/drivers/net/wireless/libertas/mesh.c
> index efae07e..6fef746 100644
> --- a/drivers/net/wireless/libertas/mesh.c
> +++ b/drivers/net/wireless/libertas/mesh.c
> @@ -1017,7 +1017,7 @@ static int lbs_add_mesh(struct lbs_private *priv)
>
> mesh_dev->netdev_ops = &mesh_netdev_ops;
> mesh_dev->ethtool_ops = &lbs_ethtool_ops;
> - memcpy(mesh_dev->dev_addr, priv->dev->dev_addr, ETH_ALEN);
> + eth_hw_addr_inherit(mesh_dev, priv->dev);
>
> SET_NETDEV_DEV(priv->mesh_dev, priv->dev->dev.parent);
>
> --
> 1.7.10.4
>
>
Acked-by: "John W. Linville" <[email protected]>
--
John W. Linville Someday the world will need a hero, and you
[email protected] might be all we have. Be ready.
Cc: Jouni Malinen <[email protected]>
Signed-off-by: Bjørn Mork <[email protected]>
---
drivers/net/wireless/hostap/hostap_hw.c | 2 +-
drivers/net/wireless/hostap/hostap_main.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/hostap/hostap_hw.c b/drivers/net/wireless/hostap/hostap_hw.c
index 6307a4e..c275dc1 100644
--- a/drivers/net/wireless/hostap/hostap_hw.c
+++ b/drivers/net/wireless/hostap/hostap_hw.c
@@ -1425,7 +1425,7 @@ static int prism2_hw_init2(struct net_device *dev, int initial)
}
list_for_each(ptr, &local->hostap_interfaces) {
iface = list_entry(ptr, struct hostap_interface, list);
- memcpy(iface->dev->dev_addr, dev->dev_addr, ETH_ALEN);
+ eth_hw_addr_inherit(iface->dev, dev);
}
} else if (local->fw_ap)
prism2_check_sta_fw_version(local);
diff --git a/drivers/net/wireless/hostap/hostap_main.c b/drivers/net/wireless/hostap/hostap_main.c
index e4f56ad..a1257c9 100644
--- a/drivers/net/wireless/hostap/hostap_main.c
+++ b/drivers/net/wireless/hostap/hostap_main.c
@@ -66,7 +66,7 @@ struct net_device * hostap_add_interface(struct local_info *local,
list_add(&iface->list, &local->hostap_interfaces);
mdev = local->dev;
- memcpy(dev->dev_addr, mdev->dev_addr, ETH_ALEN);
+ eth_hw_addr_inherit(dev, mdev);
dev->base_addr = mdev->base_addr;
dev->irq = mdev->irq;
dev->mem_start = mdev->mem_start;
--
1.7.10.4
Cc: "John W. Linville" <[email protected]>
Signed-off-by: Bjørn Mork <[email protected]>
---
drivers/net/wireless/libertas/mesh.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/libertas/mesh.c b/drivers/net/wireless/libertas/mesh.c
index efae07e..6fef746 100644
--- a/drivers/net/wireless/libertas/mesh.c
+++ b/drivers/net/wireless/libertas/mesh.c
@@ -1017,7 +1017,7 @@ static int lbs_add_mesh(struct lbs_private *priv)
mesh_dev->netdev_ops = &mesh_netdev_ops;
mesh_dev->ethtool_ops = &lbs_ethtool_ops;
- memcpy(mesh_dev->dev_addr, priv->dev->dev_addr, ETH_ALEN);
+ eth_hw_addr_inherit(mesh_dev, priv->dev);
SET_NETDEV_DEV(priv->mesh_dev, priv->dev->dev.parent);
--
1.7.10.4
Cc: "John W. Linville" <[email protected]>
Signed-off-by: Bjørn Mork <[email protected]>
---
drivers/net/wireless/airo.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c
index d0adbaf..7fe1964 100644
--- a/drivers/net/wireless/airo.c
+++ b/drivers/net/wireless/airo.c
@@ -2693,7 +2693,7 @@ static struct net_device *init_wifidev(struct airo_info *ai,
dev->base_addr = ethdev->base_addr;
dev->wireless_data = ethdev->wireless_data;
SET_NETDEV_DEV(dev, ethdev->dev.parent);
- memcpy(dev->dev_addr, ethdev->dev_addr, dev->addr_len);
+ eth_hw_addr_inherit(dev, ethdev);
err = register_netdev(dev);
if (err<0) {
free_netdev(dev);
--
1.7.10.4