diff options
author | Wen-chien Jesse Sung <jesse.sung@canonical.com> | 2013-03-08 18:52:44 +0800 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2019-07-22 19:40:04 +0200 |
commit | 4d768d7235ee69d601a9e308e73be415c04ab964 (patch) | |
tree | 761f7e56a557807c2b3ae325b1ca8d67bebf3db1 | |
parent | 1c93971544053a3ee66ccf1c91a0a4e1ed4fc076 (diff) | |
download | linux-mmp3-dell-ariel-4d768d7235ee69d601a9e308e73be415c04ab964.tar.gz |
Do not use different ramdon MAC address on each ifup
LP: #1152330
When there's no valid content in EEPROM, a random MAC address will be
used. But if a different address is used on each ifup, network manager
will not do auto configuration on this interface.
Generate the random MAC address only once on driver bind and keeps using
this address until unbind to fix this issue.
Signed-off-by: Wen-chien Jesse Sung <jesse.sung@canonical.com>
-rw-r--r-- | drivers/net/usb/smsc75xx.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c index 9fa6b1a34f35c0..207ba96e9ea552 100644 --- a/drivers/net/usb/smsc75xx.c +++ b/drivers/net/usb/smsc75xx.c @@ -68,6 +68,7 @@ struct smsc75xx_priv { struct mutex dataport_mutex; spinlock_t rfe_ctl_lock; struct work_struct set_multicast; + unsigned char random_ether_addr[8]; }; struct usb_context { @@ -603,6 +604,8 @@ static int smsc75xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) static void smsc75xx_init_mac_address(struct usbnet *dev) { + struct smsc75xx_priv *pdata = (struct smsc75xx_priv *)(dev->data[0]); + /* try reading mac address from EEPROM */ if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, dev->net->dev_addr) == 0) { @@ -615,7 +618,7 @@ static void smsc75xx_init_mac_address(struct usbnet *dev) } /* no eeprom, or eeprom values are invalid. generate random MAC */ - random_ether_addr(dev->net->dev_addr); + memcpy(dev->net->dev_addr, pdata->random_ether_addr, sizeof(dev->net->dev_addr)); netif_dbg(dev, ifup, dev->net, "MAC address set to random_ether_addr"); } @@ -1037,6 +1040,7 @@ static int smsc75xx_bind(struct usbnet *dev, struct usb_interface *intf) } pdata->dev = dev; + random_ether_addr(pdata->random_ether_addr); spin_lock_init(&pdata->rfe_ctl_lock); mutex_init(&pdata->dataport_mutex); |