Skip to content

Commit 7ce5d22

Browse files
dalgaafdavem330
authored andcommitted
net: use eth_hw_addr_random() and reset addr_assign_type
Use eth_hw_addr_random() instead of calling random_ether_addr() to set addr_assign_type correctly to NET_ADDR_RANDOM. Reset the state to NET_ADDR_PERM as soon as the MAC get changed via .ndo_set_mac_address. v2: adapt to renamed eth_hw_addr_random() Signed-off-by: Danny Kukawka <danny.kukawka@bisect.de> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent f2cedb6 commit 7ce5d22

File tree

16 files changed

+29
-14
lines changed

16 files changed

+29
-14
lines changed

drivers/net/dummy.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ static int dummy_set_address(struct net_device *dev, void *p)
4747
if (!is_valid_ether_addr(sa->sa_data))
4848
return -EADDRNOTAVAIL;
4949

50+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
5051
memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
5152
return 0;
5253
}
@@ -135,7 +136,7 @@ static void dummy_setup(struct net_device *dev)
135136
dev->flags &= ~IFF_MULTICAST;
136137
dev->features |= NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_TSO;
137138
dev->features |= NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_LLTX;
138-
random_ether_addr(dev->dev_addr);
139+
eth_hw_addr_random(dev);
139140
}
140141

141142
static int dummy_validate(struct nlattr *tb[], struct nlattr *data[])

drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3007,6 +3007,7 @@ int bnx2x_change_mac_addr(struct net_device *dev, void *p)
30073007
return rc;
30083008
}
30093009

3010+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
30103011
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
30113012

30123013
if (netif_running(dev))

drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9683,7 +9683,7 @@ static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp)
96839683

96849684
if (BP_NOMCP(bp)) {
96859685
BNX2X_ERROR("warning: random MAC workaround active\n");
9686-
random_ether_addr(bp->dev->dev_addr);
9686+
eth_hw_addr_random(bp->dev);
96879687
} else if (IS_MF(bp)) {
96889688
val2 = MF_CFG_RD(bp, func_mf_config[func].mac_upper);
96899689
val = MF_CFG_RD(bp, func_mf_config[func].mac_lower);

drivers/net/ethernet/calxeda/xgmac.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1012,7 +1012,7 @@ static int xgmac_open(struct net_device *dev)
10121012
* address using the following linux command:
10131013
* ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx */
10141014
if (!is_valid_ether_addr(dev->dev_addr)) {
1015-
random_ether_addr(dev->dev_addr);
1015+
eth_hw_addr_random(dev);
10161016
netdev_dbg(priv->dev, "generated random MAC address %pM\n",
10171017
dev->dev_addr);
10181018
}
@@ -1482,6 +1482,7 @@ static int xgmac_set_mac_address(struct net_device *dev, void *p)
14821482
if (!is_valid_ether_addr(addr->sa_data))
14831483
return -EADDRNOTAVAIL;
14841484

1485+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
14851486
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
14861487

14871488
xgmac_set_mac_addr(ioaddr, dev->dev_addr, 0);

drivers/net/ethernet/marvell/pxa168_eth.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,7 @@ static int pxa168_eth_set_mac_address(struct net_device *dev, void *addr)
629629
if (!is_valid_ether_addr(sa->sa_data))
630630
return -EINVAL;
631631
memcpy(oldMac, dev->dev_addr, ETH_ALEN);
632+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
632633
memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
633634
netif_addr_lock_bh(dev);
634635
update_hash_table_mac_address(pep, oldMac, dev->dev_addr);
@@ -1520,7 +1521,7 @@ static int pxa168_eth_probe(struct platform_device *pdev)
15201521
INIT_WORK(&pep->tx_timeout_task, pxa168_eth_tx_timeout_task);
15211522

15221523
printk(KERN_INFO "%s:Using random mac address\n", DRIVER_NAME);
1523-
random_ether_addr(dev->dev_addr);
1524+
eth_hw_addr_random(dev);
15241525

15251526
pep->pd = pdev->dev.platform_data;
15261527
pep->rx_ring_size = NUM_RX_DESCS;

drivers/net/ethernet/micrel/ks8842.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1080,6 +1080,7 @@ static int ks8842_set_mac(struct net_device *netdev, void *p)
10801080
if (!is_valid_ether_addr(addr->sa_data))
10811081
return -EADDRNOTAVAIL;
10821082

1083+
netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
10831084
memcpy(netdev->dev_addr, mac, netdev->addr_len);
10841085

10851086
ks8842_write_mac_addr(adapter, mac);
@@ -1211,7 +1212,7 @@ static int __devinit ks8842_probe(struct platform_device *pdev)
12111212
ks8842_read_mac_addr(adapter, netdev->dev_addr);
12121213

12131214
if (!is_valid_ether_addr(netdev->dev_addr))
1214-
random_ether_addr(netdev->dev_addr);
1215+
eth_hw_addr_random(netdev);
12151216
}
12161217

12171218
id = ks8842_read16(adapter, 32, REG_SW_ID_AND_ENABLE);

drivers/net/ethernet/micrel/ks8851.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ static void ks8851_init_mac(struct ks8851_net *ks)
439439
dev->dev_addr);
440440
}
441441

442-
random_ether_addr(dev->dev_addr);
442+
eth_hw_addr_random(dev);
443443
ks8851_write_mac_addr(dev);
444444
}
445445

@@ -1050,6 +1050,7 @@ static int ks8851_set_mac_address(struct net_device *dev, void *addr)
10501050
if (!is_valid_ether_addr(sa->sa_data))
10511051
return -EADDRNOTAVAIL;
10521052

1053+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
10531054
memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
10541055
return ks8851_write_mac_addr(dev);
10551056
}

drivers/net/ethernet/micrel/ks8851_mll.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,7 @@ static int ks_set_mac_address(struct net_device *netdev, void *paddr)
12411241
struct sockaddr *addr = paddr;
12421242
u8 *da;
12431243

1244+
netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
12441245
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
12451246

12461247
da = (u8 *)netdev->dev_addr;

drivers/net/ethernet/microchip/enc28j60.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ static int enc28j60_set_mac_address(struct net_device *dev, void *addr)
527527
if (!is_valid_ether_addr(address->sa_data))
528528
return -EADDRNOTAVAIL;
529529

530+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
530531
memcpy(dev->dev_addr, address->sa_data, dev->addr_len);
531532
return enc28j60_set_hw_macaddr(dev);
532533
}
@@ -1575,7 +1576,7 @@ static int __devinit enc28j60_probe(struct spi_device *spi)
15751576
ret = -EIO;
15761577
goto error_irq;
15771578
}
1578-
random_ether_addr(dev->dev_addr);
1579+
eth_hw_addr_random(dev);
15791580
enc28j60_set_hw_macaddr(dev);
15801581

15811582
/* Board setup must set the relevant edge trigger type;

drivers/net/ethernet/nvidia/forcedeth.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3022,6 +3022,7 @@ static int nv_set_mac_address(struct net_device *dev, void *addr)
30223022

30233023
/* synchronized against open : rtnl_lock() held by caller */
30243024
memcpy(dev->dev_addr, macaddr->sa_data, ETH_ALEN);
3025+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
30253026

30263027
if (netif_running(dev)) {
30273028
netif_tx_lock_bh(dev);
@@ -5741,7 +5742,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
57415742
dev_err(&pci_dev->dev,
57425743
"Invalid MAC address detected: %pM - Please complain to your hardware vendor.\n",
57435744
dev->dev_addr);
5744-
random_ether_addr(dev->dev_addr);
5745+
eth_hw_addr_random(dev);
57455746
dev_err(&pci_dev->dev,
57465747
"Using random MAC address: %pM\n", dev->dev_addr);
57475748
}

drivers/net/ethernet/smsc/smsc911x.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1833,6 +1833,7 @@ static int smsc911x_set_mac_address(struct net_device *dev, void *p)
18331833
if (!is_valid_ether_addr(addr->sa_data))
18341834
return -EADDRNOTAVAIL;
18351835

1836+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
18361837
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
18371838

18381839
spin_lock_irq(&pdata->mac_lock);
@@ -2485,7 +2486,7 @@ static int __devinit smsc911x_drv_probe(struct platform_device *pdev)
24852486
"Mac Address is read from LAN911x EEPROM");
24862487
} else {
24872488
/* eeprom values are invalid, generate random MAC */
2488-
random_ether_addr(dev->dev_addr);
2489+
eth_hw_addr_random(dev);
24892490
smsc911x_set_hw_mac_address(pdata, dev->dev_addr);
24902491
SMSC_TRACE(pdata, probe,
24912492
"MAC Address is set to random_ether_addr");

drivers/net/ethernet/tile/tilepro.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2190,6 +2190,7 @@ static int tile_net_set_mac_address(struct net_device *dev, void *p)
21902190

21912191
/* ISSUE: Note that "dev_addr" is now a pointer. */
21922192
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
2193+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
21932194

21942195
return 0;
21952196
}
@@ -2254,7 +2255,7 @@ static int tile_net_get_mac(struct net_device *dev)
22542255
* can't get its MAC address, we are most likely running
22552256
* the simulator, so let's generate a random MAC address.
22562257
*/
2257-
random_ether_addr(dev->dev_addr);
2258+
eth_hw_addr_random(dev);
22582259
}
22592260

22602261
return 0;

drivers/net/macvlan.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ static int macvlan_set_mac_address(struct net_device *dev, void *p)
372372

373373
if (!(dev->flags & IFF_UP)) {
374374
/* Just copy in the new address */
375+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
375376
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
376377
} else {
377378
/* Rehash and update the device filters */
@@ -687,7 +688,7 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,
687688
return -EINVAL;
688689

689690
if (!tb[IFLA_ADDRESS])
690-
random_ether_addr(dev->dev_addr);
691+
eth_hw_addr_random(dev);
691692

692693
if (!macvlan_port_exists(lowerdev)) {
693694
err = macvlan_port_create(lowerdev);

drivers/net/team/team.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,7 @@ static int team_set_mac_address(struct net_device *dev, void *p)
868868
struct team_port *port;
869869
struct sockaddr *addr = p;
870870

871+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
871872
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
872873
rcu_read_lock();
873874
list_for_each_entry_rcu(port, &team->port_list, list)
@@ -1087,7 +1088,7 @@ static int team_newlink(struct net *src_net, struct net_device *dev,
10871088
int err;
10881089

10891090
if (tb[IFLA_ADDRESS] == NULL)
1090-
random_ether_addr(dev->dev_addr);
1091+
eth_hw_addr_random(dev);
10911092

10921093
err = register_netdevice(dev);
10931094
if (err)

net/bridge/br_device.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ static int br_set_mac_address(struct net_device *dev, void *p)
171171

172172
spin_lock_bh(&br->lock);
173173
if (compare_ether_addr(dev->dev_addr, addr->sa_data)) {
174+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
174175
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
175176
br_fdb_change_mac_address(br, addr->sa_data);
176177
br_stp_change_bridge_id(br, addr->sa_data);
@@ -334,7 +335,7 @@ void br_dev_setup(struct net_device *dev)
334335
{
335336
struct net_bridge *br = netdev_priv(dev);
336337

337-
random_ether_addr(dev->dev_addr);
338+
eth_hw_addr_random(dev);
338339
ether_setup(dev);
339340

340341
dev->netdev_ops = &br_netdev_ops;

net/openvswitch/vport-internal_dev.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ static int internal_dev_mac_addr(struct net_device *dev, void *p)
6666

6767
if (!is_valid_ether_addr(addr->sa_data))
6868
return -EADDRNOTAVAIL;
69+
dev->addr_assign_type &= ~NET_ADDR_RANDOM;
6970
memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
7071
return 0;
7172
}
@@ -145,7 +146,7 @@ static void do_setup(struct net_device *netdev)
145146
netdev->vlan_features = netdev->features;
146147
netdev->features |= NETIF_F_HW_VLAN_TX;
147148
netdev->hw_features = netdev->features & ~NETIF_F_LLTX;
148-
random_ether_addr(netdev->dev_addr);
149+
eth_hw_addr_random(netdev);
149150
}
150151

151152
static struct vport *internal_dev_create(const struct vport_parms *parms)

0 commit comments

Comments
 (0)