All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch net-next 0/7] fix dev->addr_assign_type setting and related code
@ 2013-01-01 13:30 Jiri Pirko
  2013-01-01 13:30 ` [patch net-next 1/7] rtnl: use dev_set_mac_address() instead of plain ndo_ Jiri Pirko
                   ` (7 more replies)
  0 siblings, 8 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

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().

Jiri Pirko (7):
  rtnl: use dev_set_mac_address() instead of plain ndo_
  net: call add_device_randomness() only after successful mac change
  net: set dev->addr_assign_type correctly
  net: add address assign type "SET"
  net: remove unnecessary NET_ADDR_RANDOM "bitclean"
  um: net: use eth_hw_addr_random() to generate random mac
  ll_temac: fix mac address setting

 arch/um/drivers/net_kern.c                      | 22 +++++++-----------
 arch/um/include/shared/net_kern.h               |  1 -
 drivers/net/ethernet/adi/bfin_mac.c             |  1 -
 drivers/net/ethernet/atheros/atl1c/atl1c_main.c |  3 +--
 drivers/net/ethernet/atheros/atlx/atl1.c        |  2 +-
 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                    |  3 +--
 drivers/net/ethernet/intel/igbvf/netdev.c       |  1 -
 drivers/net/ethernet/lantiq_etop.c              |  2 +-
 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/ethernet/xilinx/ll_temac_main.c     | 31 ++++++++++++++-----------
 drivers/net/macvlan.c                           |  1 -
 drivers/net/team/team.c                         |  2 --
 drivers/staging/octeon/ethernet.c               |  6 ++---
 include/linux/etherdevice.h                     |  2 +-
 include/linux/netdevice.h                       |  2 ++
 net/batman-adv/soft-interface.c                 |  1 -
 net/bridge/br_device.c                          |  1 -
 net/core/dev.c                                  |  8 ++++---
 net/core/rtnetlink.c                            | 20 ++--------------
 net/ethernet/eth.c                              |  2 --
 net/openvswitch/vport-internal_dev.c            |  1 -
 36 files changed, 43 insertions(+), 90 deletions(-)

-- 
1.8.0

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [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

* [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

* [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 = &uml_netdev_ops;
 	dev->ethtool_ops = &uml_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 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

* 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

* 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

end of thread, other threads:[~2013-01-10  2:55 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 18:33   ` Stephen Hemminger
2013-01-01 19:00     ` 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 ` [patch net-next 3/7] net: set dev->addr_assign_type correctly Jiri Pirko
2013-01-01 13:30 ` [patch net-next 4/7] net: add address assign type "SET" Jiri Pirko
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
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 ` [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

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.