summaryrefslogtreecommitdiff
path: root/net/net_rand.h
diff options
context:
space:
mode:
authorMichael Walle <michael@walle.cc>2012-06-05 11:33:15 +0000
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>2012-07-07 14:07:32 +0200
commit99e139d5902e488eb779cd4f00c978f3803c39be (patch)
tree44a0e2420003a2c3393b845b091bcc7b2e05a93b /net/net_rand.h
parent9acf1ca50d8b031511d146f6ffd73201fedce28c (diff)
downloadu-boot-99e139d5902e488eb779cd4f00c978f3803c39be.tar.gz
u-boot-99e139d5902e488eb779cd4f00c978f3803c39be.tar.bz2
u-boot-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.h31
1 files changed, 24 insertions, 7 deletions
diff --git a/net/net_rand.h b/net/net_rand.h
index c98db64280..ba9d0642cf 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__ */