* [patch net-next 1/7] rtnl: use dev_set_mac_address() instead of plain ndo_
2013-01-01 13:30 [patch net-next 0/7] fix dev->addr_assign_type setting and related code Jiri Pirko
@ 2013-01-01 13:30 ` Jiri Pirko
2013-01-01 18:33 ` Stephen Hemminger
2013-01-01 13:30 ` [patch net-next 2/7] net: call add_device_randomness() only after successful mac change Jiri Pirko
` (6 subsequent siblings)
7 siblings, 1 reply; 12+ messages in thread
From: Jiri Pirko @ 2013-01-01 13:30 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, bhutchings, shemminger, sassmann, kaber, richard
Benefit from existence of dev_set_mac_address() and remove duplicate
code.
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
net/core/rtnetlink.c | 20 ++------------------
1 file changed, 2 insertions(+), 18 deletions(-)
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 2ef7a56..78d05a9 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -1310,7 +1310,6 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
struct nlattr **tb, char *ifname, int modified)
{
const struct net_device_ops *ops = dev->netdev_ops;
- int send_addr_notify = 0;
int err;
if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]) {
@@ -1363,16 +1362,6 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
struct sockaddr *sa;
int len;
- if (!ops->ndo_set_mac_address) {
- err = -EOPNOTSUPP;
- goto errout;
- }
-
- if (!netif_device_present(dev)) {
- err = -ENODEV;
- goto errout;
- }
-
len = sizeof(sa_family_t) + dev->addr_len;
sa = kmalloc(len, GFP_KERNEL);
if (!sa) {
@@ -1382,13 +1371,11 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
sa->sa_family = dev->type;
memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
dev->addr_len);
- err = ops->ndo_set_mac_address(dev, sa);
+ err = dev_set_mac_address(dev, sa);
kfree(sa);
if (err)
goto errout;
- send_addr_notify = 1;
modified = 1;
- add_device_randomness(dev->dev_addr, dev->addr_len);
}
if (tb[IFLA_MTU]) {
@@ -1425,7 +1412,7 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
if (tb[IFLA_BROADCAST]) {
nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
- send_addr_notify = 1;
+ call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
}
if (ifm->ifi_flags || ifm->ifi_change) {
@@ -1546,9 +1533,6 @@ errout:
net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
dev->name);
- if (send_addr_notify)
- call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
-
return err;
}
--
1.8.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [patch net-next 1/7] rtnl: use dev_set_mac_address() instead of plain ndo_
2013-01-01 13:30 ` [patch net-next 1/7] rtnl: use dev_set_mac_address() instead of plain ndo_ Jiri Pirko
@ 2013-01-01 18:33 ` Stephen Hemminger
2013-01-01 19:00 ` Jiri Pirko
0 siblings, 1 reply; 12+ messages in thread
From: Stephen Hemminger @ 2013-01-01 18:33 UTC (permalink / raw)
To: Jiri Pirko; +Cc: netdev, davem, edumazet, bhutchings, sassmann, kaber, richard
On Tue, 1 Jan 2013 14:30:13 +0100
Jiri Pirko <jiri@resnulli.us> wrote:
> Benefit from existence of dev_set_mac_address() and remove duplicate
> code.
>
> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
> ---
> net/core/rtnetlink.c | 20 ++------------------
> 1 file changed, 2 insertions(+), 18 deletions(-)
>
> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
> index 2ef7a56..78d05a9 100644
> --- a/net/core/rtnetlink.c
> +++ b/net/core/rtnetlink.c
> @@ -1310,7 +1310,6 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
> struct nlattr **tb, char *ifname, int modified)
> {
> const struct net_device_ops *ops = dev->netdev_ops;
> - int send_addr_notify = 0;
> int err;
>
> if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]) {
> @@ -1363,16 +1362,6 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
> struct sockaddr *sa;
> int len;
>
> - if (!ops->ndo_set_mac_address) {
> - err = -EOPNOTSUPP;
> - goto errout;
> - }
> -
> - if (!netif_device_present(dev)) {
> - err = -ENODEV;
> - goto errout;
> - }
> -
> len = sizeof(sa_family_t) + dev->addr_len;
> sa = kmalloc(len, GFP_KERNEL);
> if (!sa) {
> @@ -1382,13 +1371,11 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
> sa->sa_family = dev->type;
> memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
> dev->addr_len);
> - err = ops->ndo_set_mac_address(dev, sa);
> + err = dev_set_mac_address(dev, sa);
> kfree(sa);
> if (err)
> goto errout;
> - send_addr_notify = 1;
> modified = 1;
> - add_device_randomness(dev->dev_addr, dev->addr_len);
> }
>
> if (tb[IFLA_MTU]) {
> @@ -1425,7 +1412,7 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
>
> if (tb[IFLA_BROADCAST]) {
> nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
> - send_addr_notify = 1;
> + call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
> }
>
> if (ifm->ifi_flags || ifm->ifi_change) {
> @@ -1546,9 +1533,6 @@ errout:
> net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
> dev->name);
>
> - if (send_addr_notify)
> - call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
> -
> return err;
> }
>
This will cause call_netdevice_notifiers to be called twice if both IFLA_BROADCAST and IFLA_ADDRESS
are changed in one request. Not sure if that would break anything?
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [patch net-next 1/7] rtnl: use dev_set_mac_address() instead of plain ndo_
2013-01-01 18:33 ` Stephen Hemminger
@ 2013-01-01 19:00 ` Jiri Pirko
0 siblings, 0 replies; 12+ messages in thread
From: Jiri Pirko @ 2013-01-01 19:00 UTC (permalink / raw)
To: Stephen Hemminger
Cc: netdev, davem, edumazet, bhutchings, sassmann, kaber, richard
Tue, Jan 01, 2013 at 07:33:06PM CET, shemminger@vyatta.com wrote:
>On Tue, 1 Jan 2013 14:30:13 +0100
>Jiri Pirko <jiri@resnulli.us> wrote:
>
>> Benefit from existence of dev_set_mac_address() and remove duplicate
>> code.
>>
>> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
>> ---
>> net/core/rtnetlink.c | 20 ++------------------
>> 1 file changed, 2 insertions(+), 18 deletions(-)
>>
>> diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
>> index 2ef7a56..78d05a9 100644
>> --- a/net/core/rtnetlink.c
>> +++ b/net/core/rtnetlink.c
>> @@ -1310,7 +1310,6 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
>> struct nlattr **tb, char *ifname, int modified)
>> {
>> const struct net_device_ops *ops = dev->netdev_ops;
>> - int send_addr_notify = 0;
>> int err;
>>
>> if (tb[IFLA_NET_NS_PID] || tb[IFLA_NET_NS_FD]) {
>> @@ -1363,16 +1362,6 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
>> struct sockaddr *sa;
>> int len;
>>
>> - if (!ops->ndo_set_mac_address) {
>> - err = -EOPNOTSUPP;
>> - goto errout;
>> - }
>> -
>> - if (!netif_device_present(dev)) {
>> - err = -ENODEV;
>> - goto errout;
>> - }
>> -
>> len = sizeof(sa_family_t) + dev->addr_len;
>> sa = kmalloc(len, GFP_KERNEL);
>> if (!sa) {
>> @@ -1382,13 +1371,11 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
>> sa->sa_family = dev->type;
>> memcpy(sa->sa_data, nla_data(tb[IFLA_ADDRESS]),
>> dev->addr_len);
>> - err = ops->ndo_set_mac_address(dev, sa);
>> + err = dev_set_mac_address(dev, sa);
>> kfree(sa);
>> if (err)
>> goto errout;
>> - send_addr_notify = 1;
>> modified = 1;
>> - add_device_randomness(dev->dev_addr, dev->addr_len);
>> }
>>
>> if (tb[IFLA_MTU]) {
>> @@ -1425,7 +1412,7 @@ static int do_setlink(struct net_device *dev, struct ifinfomsg *ifm,
>>
>> if (tb[IFLA_BROADCAST]) {
>> nla_memcpy(dev->broadcast, tb[IFLA_BROADCAST], dev->addr_len);
>> - send_addr_notify = 1;
>> + call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
>> }
>>
>> if (ifm->ifi_flags || ifm->ifi_change) {
>> @@ -1546,9 +1533,6 @@ errout:
>> net_warn_ratelimited("A link change request failed with some changes committed already. Interface %s may have been left with an inconsistent configuration, please check.\n",
>> dev->name);
>>
>> - if (send_addr_notify)
>> - call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
>> -
>> return err;
>> }
>>
>
>This will cause call_netdevice_notifiers to be called twice if both IFLA_BROADCAST and IFLA_ADDRESS
>are changed in one request. Not sure if that would break anything?
Yep, I'm aware of this. I strongly believe all both notifier handlers
should be prepared for this (and looking at their code I believe they
are).
Userspace application monitoring rtnl events also cannot depend on fact
that IFLA_BROADCAST and IFLA_ADDRESS changes come in one message (even
now).
So I'm quite sure this wouldn't break anything.
Thanks
Jiri
^ permalink raw reply [flat|nested] 12+ messages in thread
* [patch net-next 2/7] net: call add_device_randomness() only after successful mac change
2013-01-01 13:30 [patch net-next 0/7] fix dev->addr_assign_type setting and related code Jiri Pirko
2013-01-01 13:30 ` [patch net-next 1/7] rtnl: use dev_set_mac_address() instead of plain ndo_ Jiri Pirko
@ 2013-01-01 13:30 ` Jiri Pirko
2013-01-01 13:30 ` [patch net-next 3/7] net: set dev->addr_assign_type correctly Jiri Pirko
` (5 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Jiri Pirko @ 2013-01-01 13:30 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, bhutchings, shemminger, sassmann, kaber, richard
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
net/core/dev.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 21c5b97..c85e32b 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5020,10 +5020,11 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa)
if (!netif_device_present(dev))
return -ENODEV;
err = ops->ndo_set_mac_address(dev, sa);
- if (!err)
- call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
+ if (err)
+ return err;
+ call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
add_device_randomness(dev->dev_addr, dev->addr_len);
- return err;
+ return 0;
}
EXPORT_SYMBOL(dev_set_mac_address);
--
1.8.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [patch net-next 3/7] net: set dev->addr_assign_type correctly
2013-01-01 13:30 [patch net-next 0/7] fix dev->addr_assign_type setting and related code Jiri Pirko
2013-01-01 13:30 ` [patch net-next 1/7] rtnl: use dev_set_mac_address() instead of plain ndo_ Jiri Pirko
2013-01-01 13:30 ` [patch net-next 2/7] net: call add_device_randomness() only after successful mac change Jiri Pirko
@ 2013-01-01 13:30 ` Jiri Pirko
2013-01-01 13:30 ` [patch net-next 4/7] net: add address assign type "SET" Jiri Pirko
` (4 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Jiri Pirko @ 2013-01-01 13:30 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, bhutchings, shemminger, sassmann, kaber, richard
Not a bitfield, but a plain value.
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 2 +-
drivers/net/ethernet/atheros/atlx/atl1.c | 2 +-
drivers/net/ethernet/ethoc.c | 2 +-
drivers/net/ethernet/lantiq_etop.c | 2 +-
include/linux/etherdevice.h | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 56d3f69..17651c7 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -2540,7 +2540,7 @@ static int atl1c_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
}
if (atl1c_read_mac_addr(&adapter->hw)) {
/* got a random MAC address, set NET_ADDR_RANDOM to netdev */
- netdev->addr_assign_type |= NET_ADDR_RANDOM;
+ netdev->addr_assign_type = NET_ADDR_RANDOM;
}
memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len);
memcpy(netdev->perm_addr, adapter->hw.mac_addr, netdev->addr_len);
diff --git a/drivers/net/ethernet/atheros/atlx/atl1.c b/drivers/net/ethernet/atheros/atlx/atl1.c
index 71b3d7d..5b0d993 100644
--- a/drivers/net/ethernet/atheros/atlx/atl1.c
+++ b/drivers/net/ethernet/atheros/atlx/atl1.c
@@ -3053,7 +3053,7 @@ static int atl1_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
/* copy the MAC address out of the EEPROM */
if (atl1_read_mac_addr(&adapter->hw)) {
/* mark random mac */
- netdev->addr_assign_type |= NET_ADDR_RANDOM;
+ netdev->addr_assign_type = NET_ADDR_RANDOM;
}
memcpy(netdev->dev_addr, adapter->hw.mac_addr, netdev->addr_len);
diff --git a/drivers/net/ethernet/ethoc.c b/drivers/net/ethernet/ethoc.c
index 8db1c06..f380bb7 100644
--- a/drivers/net/ethernet/ethoc.c
+++ b/drivers/net/ethernet/ethoc.c
@@ -1068,7 +1068,7 @@ static int ethoc_probe(struct platform_device *pdev)
}
if (random_mac)
- netdev->addr_assign_type |= NET_ADDR_RANDOM;
+ netdev->addr_assign_type = NET_ADDR_RANDOM;
/* register MII bus */
priv->mdio = mdiobus_alloc();
diff --git a/drivers/net/ethernet/lantiq_etop.c b/drivers/net/ethernet/lantiq_etop.c
index c124e67..cd3d2c0 100644
--- a/drivers/net/ethernet/lantiq_etop.c
+++ b/drivers/net/ethernet/lantiq_etop.c
@@ -655,7 +655,7 @@ ltq_etop_init(struct net_device *dev)
/* Set addr_assign_type here, ltq_etop_set_mac_address would reset it. */
if (random_mac)
- dev->addr_assign_type |= NET_ADDR_RANDOM;
+ dev->addr_assign_type = NET_ADDR_RANDOM;
ltq_etop_set_multicast_list(dev);
err = ltq_etop_mdio_init(dev);
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index 243eea1..1a43e1b 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -192,7 +192,7 @@ static inline void eth_zero_addr(u8 *addr)
*/
static inline void eth_hw_addr_random(struct net_device *dev)
{
- dev->addr_assign_type |= NET_ADDR_RANDOM;
+ dev->addr_assign_type = NET_ADDR_RANDOM;
eth_random_addr(dev->dev_addr);
}
--
1.8.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [patch net-next 4/7] net: add address assign type "SET"
2013-01-01 13:30 [patch net-next 0/7] fix dev->addr_assign_type setting and related code Jiri Pirko
` (2 preceding siblings ...)
2013-01-01 13:30 ` [patch net-next 3/7] net: set dev->addr_assign_type correctly Jiri Pirko
@ 2013-01-01 13:30 ` Jiri Pirko
2013-01-01 13:30 ` [patch net-next 5/7] net: remove unnecessary NET_ADDR_RANDOM "bitclean" Jiri Pirko
` (3 subsequent siblings)
7 siblings, 0 replies; 12+ messages in thread
From: Jiri Pirko @ 2013-01-01 13:30 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, bhutchings, shemminger, sassmann, kaber, richard
This is the way to indicate that mac address of a device has been set by
dev_set_mac_address()
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
include/linux/netdevice.h | 2 ++
net/core/dev.c | 1 +
2 files changed, 3 insertions(+)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 6835b58..c5031a4 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -64,6 +64,8 @@ struct wireless_dev;
#define NET_ADDR_PERM 0 /* address is permanent (default) */
#define NET_ADDR_RANDOM 1 /* address is generated randomly */
#define NET_ADDR_STOLEN 2 /* address is stolen from other device */
+#define NET_ADDR_SET 3 /* address is set using
+ * dev_set_mac_address() */
/* Backlog congestion levels */
#define NET_RX_SUCCESS 0 /* keep 'em coming, baby */
diff --git a/net/core/dev.c b/net/core/dev.c
index c85e32b..bddb2f2 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5022,6 +5022,7 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa)
err = ops->ndo_set_mac_address(dev, sa);
if (err)
return err;
+ dev->addr_assign_type = NET_ADDR_SET;
call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
add_device_randomness(dev->dev_addr, dev->addr_len);
return 0;
--
1.8.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [patch net-next 5/7] net: remove unnecessary NET_ADDR_RANDOM "bitclean"
2013-01-01 13:30 [patch net-next 0/7] fix dev->addr_assign_type setting and related code Jiri Pirko
` (3 preceding siblings ...)
2013-01-01 13:30 ` [patch net-next 4/7] net: add address assign type "SET" Jiri Pirko
@ 2013-01-01 13:30 ` Jiri Pirko
2013-01-10 2:55 ` Antonio Quartulli
2013-01-01 13:30 ` [patch net-next 6/7] um: net: use eth_hw_addr_random() to generate random mac Jiri Pirko
` (2 subsequent siblings)
7 siblings, 1 reply; 12+ messages in thread
From: Jiri Pirko @ 2013-01-01 13:30 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, bhutchings, shemminger, sassmann, kaber, richard
NET_ADDR_SET is set in dev_set_mac_address() no need to alter
dev->addr_assign_type value in drivers.
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
drivers/net/ethernet/adi/bfin_mac.c | 1 -
drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 1 -
drivers/net/ethernet/atheros/atlx/atlx.c | 1 -
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c | 1 -
drivers/net/ethernet/calxeda/xgmac.c | 1 -
drivers/net/ethernet/cisco/enic/enic_main.c | 1 -
drivers/net/ethernet/ethoc.c | 1 -
drivers/net/ethernet/intel/igbvf/netdev.c | 1 -
drivers/net/ethernet/marvell/pxa168_eth.c | 1 -
drivers/net/ethernet/micrel/ks8842.c | 1 -
drivers/net/ethernet/micrel/ks8851.c | 1 -
drivers/net/ethernet/micrel/ks8851_mll.c | 1 -
drivers/net/ethernet/microchip/enc28j60.c | 1 -
drivers/net/ethernet/nvidia/forcedeth.c | 1 -
drivers/net/ethernet/octeon/octeon_mgmt.c | 6 ++----
drivers/net/ethernet/smsc/smsc911x.c | 1 -
drivers/net/ethernet/ti/davinci_emac.c | 1 -
drivers/net/ethernet/tile/tilepro.c | 1 -
drivers/net/ethernet/wiznet/w5100.c | 1 -
drivers/net/ethernet/wiznet/w5300.c | 1 -
drivers/net/macvlan.c | 1 -
drivers/net/team/team.c | 2 --
drivers/staging/octeon/ethernet.c | 6 ++----
net/batman-adv/soft-interface.c | 1 -
net/bridge/br_device.c | 1 -
net/ethernet/eth.c | 2 --
net/openvswitch/vport-internal_dev.c | 1 -
27 files changed, 4 insertions(+), 35 deletions(-)
diff --git a/drivers/net/ethernet/adi/bfin_mac.c b/drivers/net/ethernet/adi/bfin_mac.c
index c1fdb8b..8c3c9cf 100644
--- a/drivers/net/ethernet/adi/bfin_mac.c
+++ b/drivers/net/ethernet/adi/bfin_mac.c
@@ -647,7 +647,6 @@ static int bfin_mac_set_mac_address(struct net_device *dev, void *p)
if (netif_running(dev))
return -EBUSY;
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
setup_mac_addr(dev->dev_addr);
return 0;
}
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 17651c7..7af95ce 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -472,7 +472,6 @@ static int atl1c_set_mac_addr(struct net_device *netdev, void *p)
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len);
- netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
atl1c_hw_set_mac_addr(&adapter->hw, adapter->hw.mac_addr);
diff --git a/drivers/net/ethernet/atheros/atlx/atlx.c b/drivers/net/ethernet/atheros/atlx/atlx.c
index 77ffbc4..f82eb16 100644
--- a/drivers/net/ethernet/atheros/atlx/atlx.c
+++ b/drivers/net/ethernet/atheros/atlx/atlx.c
@@ -84,7 +84,6 @@ static int atlx_set_mac(struct net_device *netdev, void *p)
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len);
- netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
atlx_set_mac_addr(&adapter->hw);
return 0;
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index 01588b6..072669d 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -3542,7 +3542,6 @@ int bnx2x_change_mac_addr(struct net_device *dev, void *p)
return rc;
}
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
if (netif_running(dev))
diff --git a/drivers/net/ethernet/calxeda/xgmac.c b/drivers/net/ethernet/calxeda/xgmac.c
index b407043..a345e24 100644
--- a/drivers/net/ethernet/calxeda/xgmac.c
+++ b/drivers/net/ethernet/calxeda/xgmac.c
@@ -1459,7 +1459,6 @@ static int xgmac_set_mac_address(struct net_device *dev, void *p)
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
xgmac_set_mac_addr(ioaddr, dev->dev_addr, 0);
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
index 64866ff..ebccebf 100644
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -865,7 +865,6 @@ static int enic_set_mac_addr(struct net_device *netdev, char *addr)
}
memcpy(netdev->dev_addr, addr, netdev->addr_len);
- netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
return 0;
}
diff --git a/drivers/net/ethernet/ethoc.c b/drivers/net/ethernet/ethoc.c
index f380bb7..b93062d 100644
--- a/drivers/net/ethernet/ethoc.c
+++ b/drivers/net/ethernet/ethoc.c
@@ -784,7 +784,6 @@ static int ethoc_set_mac_address(struct net_device *dev, void *addr)
ethoc_write(priv, MAC_ADDR1, (mac[0] << 8) | (mac[1] << 0));
memcpy(dev->dev_addr, mac, ETH_ALEN);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
return 0;
}
diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c
index 277f5df..53281ff 100644
--- a/drivers/net/ethernet/intel/igbvf/netdev.c
+++ b/drivers/net/ethernet/intel/igbvf/netdev.c
@@ -1738,7 +1738,6 @@ static int igbvf_set_mac(struct net_device *netdev, void *p)
return -EADDRNOTAVAIL;
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
- netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
return 0;
}
diff --git a/drivers/net/ethernet/marvell/pxa168_eth.c b/drivers/net/ethernet/marvell/pxa168_eth.c
index 10d678d..aa037ca 100644
--- a/drivers/net/ethernet/marvell/pxa168_eth.c
+++ b/drivers/net/ethernet/marvell/pxa168_eth.c
@@ -627,7 +627,6 @@ static int pxa168_eth_set_mac_address(struct net_device *dev, void *addr)
if (!is_valid_ether_addr(sa->sa_data))
return -EADDRNOTAVAIL;
memcpy(oldMac, dev->dev_addr, ETH_ALEN);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
netif_addr_lock_bh(dev);
update_hash_table_mac_address(pep, oldMac, dev->dev_addr);
diff --git a/drivers/net/ethernet/micrel/ks8842.c b/drivers/net/ethernet/micrel/ks8842.c
index b71eb39..fbcb9e7 100644
--- a/drivers/net/ethernet/micrel/ks8842.c
+++ b/drivers/net/ethernet/micrel/ks8842.c
@@ -1080,7 +1080,6 @@ static int ks8842_set_mac(struct net_device *netdev, void *p)
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
- netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(netdev->dev_addr, mac, netdev->addr_len);
ks8842_write_mac_addr(adapter, mac);
diff --git a/drivers/net/ethernet/micrel/ks8851.c b/drivers/net/ethernet/micrel/ks8851.c
index 286816a..d59bc0e 100644
--- a/drivers/net/ethernet/micrel/ks8851.c
+++ b/drivers/net/ethernet/micrel/ks8851.c
@@ -1052,7 +1052,6 @@ static int ks8851_set_mac_address(struct net_device *dev, void *addr)
if (!is_valid_ether_addr(sa->sa_data))
return -EADDRNOTAVAIL;
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
return ks8851_write_mac_addr(dev);
}
diff --git a/drivers/net/ethernet/micrel/ks8851_mll.c b/drivers/net/ethernet/micrel/ks8851_mll.c
index ef8f9f9..a343066 100644
--- a/drivers/net/ethernet/micrel/ks8851_mll.c
+++ b/drivers/net/ethernet/micrel/ks8851_mll.c
@@ -1237,7 +1237,6 @@ static int ks_set_mac_address(struct net_device *netdev, void *paddr)
struct sockaddr *addr = paddr;
u8 *da;
- netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
da = (u8 *)netdev->dev_addr;
diff --git a/drivers/net/ethernet/microchip/enc28j60.c b/drivers/net/ethernet/microchip/enc28j60.c
index a99456c..5d98a9f 100644
--- a/drivers/net/ethernet/microchip/enc28j60.c
+++ b/drivers/net/ethernet/microchip/enc28j60.c
@@ -527,7 +527,6 @@ static int enc28j60_set_mac_address(struct net_device *dev, void *addr)
if (!is_valid_ether_addr(address->sa_data))
return -EADDRNOTAVAIL;
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, address->sa_data, dev->addr_len);
return enc28j60_set_hw_macaddr(dev);
}
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 653487d..b53bf9d 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -3025,7 +3025,6 @@ static int nv_set_mac_address(struct net_device *dev, void *addr)
/* synchronized against open : rtnl_lock() held by caller */
memcpy(dev->dev_addr, macaddr->sa_data, ETH_ALEN);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
if (netif_running(dev)) {
netif_tx_lock_bh(dev);
diff --git a/drivers/net/ethernet/octeon/octeon_mgmt.c b/drivers/net/ethernet/octeon/octeon_mgmt.c
index b549919..b4a842c 100644
--- a/drivers/net/ethernet/octeon/octeon_mgmt.c
+++ b/drivers/net/ethernet/octeon/octeon_mgmt.c
@@ -1534,12 +1534,10 @@ static int octeon_mgmt_probe(struct platform_device *pdev)
mac = of_get_mac_address(pdev->dev.of_node);
- if (mac && is_valid_ether_addr(mac)) {
+ if (mac && is_valid_ether_addr(mac))
memcpy(netdev->dev_addr, mac, ETH_ALEN);
- netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
- } else {
+ else
eth_hw_addr_random(netdev);
- }
p->phy_np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
index e112877..04ff63c 100644
--- a/drivers/net/ethernet/smsc/smsc911x.c
+++ b/drivers/net/ethernet/smsc/smsc911x.c
@@ -1831,7 +1831,6 @@ static int smsc911x_set_mac_address(struct net_device *dev, void *p)
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
spin_lock_irq(&pdata->mac_lock);
diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c
index 2a3e2c5..6841a22 100644
--- a/drivers/net/ethernet/ti/davinci_emac.c
+++ b/drivers/net/ethernet/ti/davinci_emac.c
@@ -1264,7 +1264,6 @@ static int emac_dev_setmac_addr(struct net_device *ndev, void *addr)
/* Store mac addr in priv and rx channel and set it in EMAC hw */
memcpy(priv->mac_addr, sa->sa_data, ndev->addr_len);
memcpy(ndev->dev_addr, sa->sa_data, ndev->addr_len);
- ndev->addr_assign_type &= ~NET_ADDR_RANDOM;
/* MAC address is configured only after the interface is enabled. */
if (netif_running(ndev)) {
diff --git a/drivers/net/ethernet/tile/tilepro.c b/drivers/net/ethernet/tile/tilepro.c
index 96070e9..3643549 100644
--- a/drivers/net/ethernet/tile/tilepro.c
+++ b/drivers/net/ethernet/tile/tilepro.c
@@ -2195,7 +2195,6 @@ static int tile_net_set_mac_address(struct net_device *dev, void *p)
/* ISSUE: Note that "dev_addr" is now a pointer. */
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
return 0;
}
diff --git a/drivers/net/ethernet/wiznet/w5100.c b/drivers/net/ethernet/wiznet/w5100.c
index 3523838..545043c 100644
--- a/drivers/net/ethernet/wiznet/w5100.c
+++ b/drivers/net/ethernet/wiznet/w5100.c
@@ -570,7 +570,6 @@ static int w5100_set_macaddr(struct net_device *ndev, void *addr)
if (!is_valid_ether_addr(sock_addr->sa_data))
return -EADDRNOTAVAIL;
memcpy(ndev->dev_addr, sock_addr->sa_data, ETH_ALEN);
- ndev->addr_assign_type &= ~NET_ADDR_RANDOM;
w5100_write_macaddr(priv);
return 0;
}
diff --git a/drivers/net/ethernet/wiznet/w5300.c b/drivers/net/ethernet/wiznet/w5300.c
index 9d1d986..7cbd0e6 100644
--- a/drivers/net/ethernet/wiznet/w5300.c
+++ b/drivers/net/ethernet/wiznet/w5300.c
@@ -490,7 +490,6 @@ static int w5300_set_macaddr(struct net_device *ndev, void *addr)
if (!is_valid_ether_addr(sock_addr->sa_data))
return -EADDRNOTAVAIL;
memcpy(ndev->dev_addr, sock_addr->sa_data, ETH_ALEN);
- ndev->addr_assign_type &= ~NET_ADDR_RANDOM;
w5300_write_macaddr(priv);
return 0;
}
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 68a43fe..80c6f92 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -375,7 +375,6 @@ static int macvlan_set_mac_address(struct net_device *dev, void *p)
if (!(dev->flags & IFF_UP)) {
/* Just copy in the new address */
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
} else {
/* Rehash and update the device filters */
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 918a901..04638bd 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -1502,7 +1502,6 @@ static int team_set_mac_address(struct net_device *dev, void *p)
if (dev->type == ARPHRD_ETHER && !is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
rcu_read_lock();
list_for_each_entry_rcu(port, &team->port_list, list)
if (team->ops.port_change_dev_addr)
@@ -1772,7 +1771,6 @@ static void team_setup_by_port(struct net_device *dev,
dev->mtu = port_dev->mtu;
memcpy(dev->broadcast, port_dev->broadcast, port_dev->addr_len);
memcpy(dev->dev_addr, port_dev->dev_addr, port_dev->addr_len);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
}
static int team_dev_type_check_change(struct net_device *dev,
diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
index ef32dc1..9a2ec25 100644
--- a/drivers/staging/octeon/ethernet.c
+++ b/drivers/staging/octeon/ethernet.c
@@ -453,12 +453,10 @@ int cvm_oct_common_init(struct net_device *dev)
if (priv->of_node)
mac = of_get_mac_address(priv->of_node);
- if (mac && is_valid_ether_addr(mac)) {
+ if (mac && is_valid_ether_addr(mac))
memcpy(dev->dev_addr, mac, ETH_ALEN);
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
- } else {
+ else
eth_hw_addr_random(dev);
- }
/*
* Force the interface to use the POW send if always_use_pow
diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
index 6b548fd..fa388b2 100644
--- a/net/batman-adv/soft-interface.c
+++ b/net/batman-adv/soft-interface.c
@@ -124,7 +124,6 @@ static int batadv_interface_set_mac_addr(struct net_device *dev, void *p)
batadv_tt_local_add(dev, addr->sa_data, BATADV_NULL_IFINDEX);
}
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
return 0;
}
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index 7c78e26..38974f7 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -172,7 +172,6 @@ static int br_set_mac_address(struct net_device *dev, void *p)
spin_lock_bh(&br->lock);
if (!ether_addr_equal(dev->dev_addr, addr->sa_data)) {
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
br_fdb_change_mac_address(br, addr->sa_data);
br_stp_change_bridge_id(br, addr->sa_data);
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c
index 4efad53..bc39c8c 100644
--- a/net/ethernet/eth.c
+++ b/net/ethernet/eth.c
@@ -290,8 +290,6 @@ int eth_mac_addr(struct net_device *dev, void *p)
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
- /* if device marked as NET_ADDR_RANDOM, reset it */
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
return 0;
}
EXPORT_SYMBOL(eth_mac_addr);
diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
index 5d460c3..44cd5c3 100644
--- a/net/openvswitch/vport-internal_dev.c
+++ b/net/openvswitch/vport-internal_dev.c
@@ -69,7 +69,6 @@ static int internal_dev_mac_addr(struct net_device *dev, void *p)
if (!is_valid_ether_addr(addr->sa_data))
return -EADDRNOTAVAIL;
- dev->addr_assign_type &= ~NET_ADDR_RANDOM;
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
return 0;
}
--
1.8.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [patch net-next 5/7] net: remove unnecessary NET_ADDR_RANDOM "bitclean"
2013-01-01 13:30 ` [patch net-next 5/7] net: remove unnecessary NET_ADDR_RANDOM "bitclean" Jiri Pirko
@ 2013-01-10 2:55 ` Antonio Quartulli
0 siblings, 0 replies; 12+ messages in thread
From: Antonio Quartulli @ 2013-01-10 2:55 UTC (permalink / raw)
To: Jiri Pirko; +Cc: netdev, davem
Il 01.01.2013 15:30 Jiri Pirko ha scritto:
> NET_ADDR_SET is set in dev_set_mac_address() no need to alter
> dev->addr_assign_type value in drivers.
>
> Signed-off-by: Jiri Pirko <jiri@resnulli.us>
Hello Jiri,
please, next time it would be good if you CC all the poeple involved in
a patch: in this way
everybody can easily realise that the code they are maintaining is
going to be touched/modified.
If you don't (like this time) we have to wait some somebody/something
comparing net-next with
our tree to trigger a reaction in our repo.
The get_maintainer.pl script will give you all the email addresses that
you should include
(some of them can possibly be skept).
Thanks a lot,
Antonio
--
Antonio Quartulli
^ permalink raw reply [flat|nested] 12+ messages in thread
* [patch net-next 6/7] um: net: use eth_hw_addr_random() to generate random mac
2013-01-01 13:30 [patch net-next 0/7] fix dev->addr_assign_type setting and related code Jiri Pirko
` (4 preceding siblings ...)
2013-01-01 13:30 ` [patch net-next 5/7] net: remove unnecessary NET_ADDR_RANDOM "bitclean" Jiri Pirko
@ 2013-01-01 13:30 ` Jiri Pirko
2013-01-01 13:30 ` [patch net-next 7/7] ll_temac: fix mac address setting Jiri Pirko
2013-01-04 6:43 ` [patch net-next 0/7] fix dev->addr_assign_type setting and related code David Miller
7 siblings, 0 replies; 12+ messages in thread
From: Jiri Pirko @ 2013-01-01 13:30 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, bhutchings, shemminger, sassmann, kaber, richard
Also remove unused "mac" from uml_net struct.
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
arch/um/drivers/net_kern.c | 22 ++++++++--------------
arch/um/include/shared/net_kern.h | 1 -
2 files changed, 8 insertions(+), 15 deletions(-)
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c
index b1314eb..fd9090d 100644
--- a/arch/um/drivers/net_kern.c
+++ b/arch/um/drivers/net_kern.c
@@ -293,8 +293,9 @@ static void uml_net_user_timer_expire(unsigned long _conn)
#endif
}
-static int setup_etheraddr(char *str, unsigned char *addr, char *name)
+static void setup_etheraddr(struct net_device *dev, char *str)
{
+ unsigned char *addr = dev->dev_addr;
char *end;
int i;
@@ -334,13 +335,12 @@ static int setup_etheraddr(char *str, unsigned char *addr, char *name)
addr[0] | 0x02, addr[1], addr[2], addr[3], addr[4],
addr[5]);
}
- return 0;
+ return;
random:
printk(KERN_INFO
- "Choosing a random ethernet address for device %s\n", name);
- eth_random_addr(addr);
- return 1;
+ "Choosing a random ethernet address for device %s\n", dev->name);
+ eth_hw_addr_random(dev);
}
static DEFINE_SPINLOCK(devices_lock);
@@ -392,7 +392,6 @@ static void eth_configure(int n, void *init, char *mac,
struct net_device *dev;
struct uml_net_private *lp;
int err, size;
- int random_mac;
size = transport->private_size + sizeof(struct uml_net_private);
@@ -419,9 +418,9 @@ static void eth_configure(int n, void *init, char *mac,
*/
snprintf(dev->name, sizeof(dev->name), "eth%d", n);
- random_mac = setup_etheraddr(mac, device->mac, dev->name);
+ setup_etheraddr(dev, mac);
- printk(KERN_INFO "Netdevice %d (%pM) : ", n, device->mac);
+ printk(KERN_INFO "Netdevice %d (%pM) : ", n, dev->dev_addr);
lp = netdev_priv(dev);
/* This points to the transport private data. It's still clear, but we
@@ -468,17 +467,12 @@ static void eth_configure(int n, void *init, char *mac,
init_timer(&lp->tl);
spin_lock_init(&lp->lock);
lp->tl.function = uml_net_user_timer_expire;
- memcpy(lp->mac, device->mac, sizeof(lp->mac));
+ memcpy(lp->mac, dev->dev_addr, sizeof(lp->mac));
if ((transport->user->init != NULL) &&
((*transport->user->init)(&lp->user, dev) != 0))
goto out_unregister;
- /* don't use eth_mac_addr, it will not work here */
- memcpy(dev->dev_addr, device->mac, ETH_ALEN);
- if (random_mac)
- dev->addr_assign_type |= NET_ADDR_RANDOM;
-
dev->mtu = transport->user->mtu;
dev->netdev_ops = ¨_netdev_ops;
dev->ethtool_ops = ¨_net_ethtool_ops;
diff --git a/arch/um/include/shared/net_kern.h b/arch/um/include/shared/net_kern.h
index 5c367f2..012ac87 100644
--- a/arch/um/include/shared/net_kern.h
+++ b/arch/um/include/shared/net_kern.h
@@ -18,7 +18,6 @@ struct uml_net {
struct net_device *dev;
struct platform_device pdev;
int index;
- unsigned char mac[ETH_ALEN];
};
struct uml_net_private {
--
1.8.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [patch net-next 7/7] ll_temac: fix mac address setting
2013-01-01 13:30 [patch net-next 0/7] fix dev->addr_assign_type setting and related code Jiri Pirko
` (5 preceding siblings ...)
2013-01-01 13:30 ` [patch net-next 6/7] um: net: use eth_hw_addr_random() to generate random mac Jiri Pirko
@ 2013-01-01 13:30 ` Jiri Pirko
2013-01-04 6:43 ` [patch net-next 0/7] fix dev->addr_assign_type setting and related code David Miller
7 siblings, 0 replies; 12+ messages in thread
From: Jiri Pirko @ 2013-01-01 13:30 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, bhutchings, shemminger, sassmann, kaber, richard
Previously, when invalid address was passed to ndo_set_mac_address,
random mac was generated and set. Fix this by returning -EADDRNOTAVAIL
in this situation.
Also polish the code around a bit.
Signed-off-by: Jiri Pirko <jiri@resnulli.us>
---
drivers/net/ethernet/xilinx/ll_temac_main.c | 31 ++++++++++++++++-------------
1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/drivers/net/ethernet/xilinx/ll_temac_main.c b/drivers/net/ethernet/xilinx/ll_temac_main.c
index aad909d..5022093 100644
--- a/drivers/net/ethernet/xilinx/ll_temac_main.c
+++ b/drivers/net/ethernet/xilinx/ll_temac_main.c
@@ -319,18 +319,10 @@ out:
* net_device_ops
*/
-static int temac_set_mac_address(struct net_device *ndev, void *address)
+static void temac_do_set_mac_address(struct net_device *ndev)
{
struct temac_local *lp = netdev_priv(ndev);
- if (address)
- memcpy(ndev->dev_addr, address, ETH_ALEN);
-
- if (!is_valid_ether_addr(ndev->dev_addr))
- eth_hw_addr_random(ndev);
- else
- ndev->addr_assign_type &= ~NET_ADDR_RANDOM;
-
/* set up unicast MAC address filter set its mac address */
mutex_lock(&lp->indirect_mutex);
temac_indirect_out32(lp, XTE_UAW0_OFFSET,
@@ -344,15 +336,26 @@ static int temac_set_mac_address(struct net_device *ndev, void *address)
(ndev->dev_addr[4] & 0x000000ff) |
(ndev->dev_addr[5] << 8));
mutex_unlock(&lp->indirect_mutex);
+}
+static int temac_init_mac_address(struct net_device *ndev, void *address)
+{
+ memcpy(ndev->dev_addr, address, ETH_ALEN);
+ if (!is_valid_ether_addr(ndev->dev_addr))
+ eth_hw_addr_random(ndev);
+ temac_do_set_mac_address(ndev);
return 0;
}
-static int netdev_set_mac_address(struct net_device *ndev, void *p)
+static int temac_set_mac_address(struct net_device *ndev, void *p)
{
struct sockaddr *addr = p;
- return temac_set_mac_address(ndev, addr->sa_data);
+ if (!is_valid_ether_addr(addr->sa_data))
+ return -EADDRNOTAVAIL;
+ memcpy(ndev->dev_addr, addr->sa_data, ETH_ALEN);
+ temac_do_set_mac_address(ndev);
+ return 0;
}
static void temac_set_multicast_list(struct net_device *ndev)
@@ -579,7 +582,7 @@ static void temac_device_reset(struct net_device *ndev)
temac_setoptions(ndev,
lp->options & ~(XTE_OPTION_TXEN | XTE_OPTION_RXEN));
- temac_set_mac_address(ndev, NULL);
+ temac_do_set_mac_address(ndev);
/* Set address filter table */
temac_set_multicast_list(ndev);
@@ -938,7 +941,7 @@ static const struct net_device_ops temac_netdev_ops = {
.ndo_open = temac_open,
.ndo_stop = temac_stop,
.ndo_start_xmit = temac_start_xmit,
- .ndo_set_mac_address = netdev_set_mac_address,
+ .ndo_set_mac_address = temac_set_mac_address,
.ndo_validate_addr = eth_validate_addr,
.ndo_do_ioctl = temac_ioctl,
#ifdef CONFIG_NET_POLL_CONTROLLER
@@ -1106,7 +1109,7 @@ static int temac_of_probe(struct platform_device *op)
rc = -ENODEV;
goto err_iounmap_2;
}
- temac_set_mac_address(ndev, (void *)addr);
+ temac_init_mac_address(ndev, (void *)addr);
rc = temac_mdio_setup(lp, op->dev.of_node);
if (rc)
--
1.8.0
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [patch net-next 0/7] fix dev->addr_assign_type setting and related code
2013-01-01 13:30 [patch net-next 0/7] fix dev->addr_assign_type setting and related code Jiri Pirko
` (6 preceding siblings ...)
2013-01-01 13:30 ` [patch net-next 7/7] ll_temac: fix mac address setting Jiri Pirko
@ 2013-01-04 6:43 ` David Miller
7 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2013-01-04 6:43 UTC (permalink / raw)
To: jiri; +Cc: netdev, edumazet, bhutchings, shemminger, sassmann, kaber,
richard
From: Jiri Pirko <jiri@resnulli.us>
Date: Tue, 1 Jan 2013 14:30:12 +0100
> commit c1f79426e2df5ef96fe3e76de6c7606d15bf390b introduced addr_assign_type,
> but incorrectly works with the value as if it was a bitfield. This patch corrects this.
>
> Also, new "assign_type" is added to track that the address was changed by
> dev_set_mac_address().
Series applied, thanks Jiri.
^ permalink raw reply [flat|nested] 12+ messages in thread