diff options
| author | Danny Kukawka <danny.kukawka@bisect.de> | 2012-02-17 16:05:03 -0500 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2012-02-17 16:05:03 -0500 | 
| commit | 95f2054f167f7da72b0771984dbb2bec612740d0 (patch) | |
| tree | 20480035754898da3f36f4a5cd0c74dd3c5fc609 | |
| parent | 6a214fd4142d585ef2226e8ef6bc29a15403506f (diff) | |
| download | olio-linux-3.10-95f2054f167f7da72b0771984dbb2bec612740d0.tar.xz olio-linux-3.10-95f2054f167f7da72b0771984dbb2bec612740d0.zip  | |
UML net: set addr_assign_type if random_ether_addr() used
Set addr_assign_type correctly to NET_ADDR_RANDOM in case
a random MAC address was generated and assigned to the netdevice.
Return state from setup_etheraddr() about returning a random
MAC address or not and check this state in eth_configure().
Signed-off-by: Danny Kukawka <danny.kukawka@bisect.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | arch/um/drivers/net_kern.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/um/drivers/net_kern.c b/arch/um/drivers/net_kern.c index a492e59883a..d2996183e58 100644 --- a/arch/um/drivers/net_kern.c +++ b/arch/um/drivers/net_kern.c @@ -293,7 +293,7 @@ static void uml_net_user_timer_expire(unsigned long _conn)  #endif  } -static void setup_etheraddr(char *str, unsigned char *addr, char *name) +static int setup_etheraddr(char *str, unsigned char *addr, char *name)  {  	char *end;  	int i; @@ -334,12 +334,13 @@ static void setup_etheraddr(char *str, unsigned char *addr, char *name)  		       addr[0] | 0x02, addr[1], addr[2], addr[3], addr[4],  		       addr[5]);  	} -	return; +	return 0;  random:  	printk(KERN_INFO  	       "Choosing a random ethernet address for device %s\n", name);  	random_ether_addr(addr); +	return 1;  }  static DEFINE_SPINLOCK(devices_lock); @@ -391,6 +392,7 @@ 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); @@ -417,7 +419,7 @@ static void eth_configure(int n, void *init, char *mac,  	 */  	snprintf(dev->name, sizeof(dev->name), "eth%d", n); -	setup_etheraddr(mac, device->mac, dev->name); +	random_mac = setup_etheraddr(mac, device->mac, dev->name);  	printk(KERN_INFO "Netdevice %d (%pM) : ", n, device->mac); @@ -474,6 +476,9 @@ static void eth_configure(int n, void *init, char *mac,  	/* 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;  |