diff options
| author | Michael Walle <michael@walle.cc> | 2012-06-05 11:33:15 +0000 | 
|---|---|---|
| committer | Albert ARIBAUD <albert.u.boot@aribaud.net> | 2012-07-07 14:07:32 +0200 | 
| commit | 99e139d5902e488eb779cd4f00c978f3803c39be (patch) | |
| tree | 44a0e2420003a2c3393b845b091bcc7b2e05a93b /net/net_rand.h | |
| parent | 9acf1ca50d8b031511d146f6ffd73201fedce28c (diff) | |
| download | olio-uboot-2014.01-99e139d5902e488eb779cd4f00c978f3803c39be.tar.xz olio-uboot-2014.01-99e139d5902e488eb779cd4f00c978f3803c39be.zip | |
net: use common rand()/srand() functions
Replace rand() with the functions from lib/. The link-local network code
stores its own seed, derived from the MAC address. Thus making it
independent from calls to srand() in other modules.
Signed-off-by: Michael Walle <michael@walle.cc>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Diffstat (limited to 'net/net_rand.h')
| -rw-r--r-- | net/net_rand.h | 31 | 
1 files changed, 24 insertions, 7 deletions
| diff --git a/net/net_rand.h b/net/net_rand.h index c98db6428..ba9d0642c 100644 --- a/net/net_rand.h +++ b/net/net_rand.h @@ -9,18 +9,35 @@  #ifndef __NET_RAND_H__  #define __NET_RAND_H__ -#define RAND_MAX 0xffffffff +#include <common.h>  /* - * Seed the random number generator using the eth0 MAC address + * Return a seed for the PRNG derived from the eth0 MAC address.   */ -void srand_mac(void); +static inline unsigned int seed_mac(void) +{ +	unsigned char enetaddr[6]; +	unsigned int seed; + +	/* get our mac */ +	eth_getenv_enetaddr("ethaddr", enetaddr); + +	seed = enetaddr[5]; +	seed ^= enetaddr[4] << 8; +	seed ^= enetaddr[3] << 16; +	seed ^= enetaddr[2] << 24; +	seed ^= enetaddr[1]; +	seed ^= enetaddr[0] << 8; + +	return seed; +}  /* - * Get a random number (after seeding with MAC address) - * - * @return random number + * Seed the random number generator using the eth0 MAC address.   */ -unsigned long rand(void); +static inline void srand_mac(void) +{ +	srand(seed_mac()); +}  #endif /* __NET_RAND_H__ */ |