aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWen-chien Jesse Sung <jesse.sung@canonical.com>2013-03-08 18:52:44 +0800
committerLubomir Rintel <lkundrak@v3.sk>2019-07-22 19:40:04 +0200
commit4d768d7235ee69d601a9e308e73be415c04ab964 (patch)
tree761f7e56a557807c2b3ae325b1ca8d67bebf3db1
parent1c93971544053a3ee66ccf1c91a0a4e1ed4fc076 (diff)
downloadlinux-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.c6
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);