Hi Michael, On Thu, May 31, 2012 at 1:12 PM, Michael Walle <mich...@walle.cc> wrote: > 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 <mich...@walle.cc> > Cc: Joe Hershberger <joe.hershber...@ni.com> > --- > include/configs/ETX094.h | 1 + > include/configs/MERGERBOX.h | 1 + > include/configs/MVBC_P.h | 1 + > include/configs/MVBLM7.h | 1 + > include/configs/MVSMR.h | 1 + > include/configs/bfin_adi_common.h | 1 + > include/configs/sacsng.h | 1 + > net/Makefile | 2 - > net/link_local.c | 7 ++-- > net/net_rand.c | 68 > ------------------------------------- > net/net_rand.h | 32 +++++++++++++---- > 11 files changed, 36 insertions(+), 80 deletions(-) > delete mode 100644 net/net_rand.c > > diff --git a/include/configs/ETX094.h b/include/configs/ETX094.h > index c427093..aee9915 100644 > --- a/include/configs/ETX094.h > +++ b/include/configs/ETX094.h > @@ -54,6 +54,7 @@ > > #define CONFIG_FLASH_16BIT /* for board with 16bit wide > flash */ > #undef SB_ETX094 /* only for SB-Board with 16MB SDRAM > */ > +#define CONFIG_RAND > #define CONFIG_BOOTP_RANDOM_DELAY /* graceful BOOTP recovery > mode */
It would be great if this could be implied instead of explicit... see below. > #define CONFIG_ETHADDR 08:00:06:00:00:00 > diff --git a/net/Makefile b/net/Makefile > index 5264687..e7764ce 100644 > --- a/net/Makefile > +++ b/net/Makefile > @@ -34,8 +34,6 @@ COBJS-$(CONFIG_CMD_DNS) += dns.o > COBJS-$(CONFIG_CMD_NET) += eth.o > COBJS-$(CONFIG_CMD_LINK_LOCAL) += link_local.o > COBJS-$(CONFIG_CMD_NET) += net.o > -COBJS-$(CONFIG_BOOTP_RANDOM_DELAY) += net_rand.o > -COBJS-$(CONFIG_CMD_LINK_LOCAL) += net_rand.o In the Makefile for lib/, mimic the implementation that you are removing here. This way each user of CMD_LINK_LOCAL and BOOTP_RANDOM_DELAY aren't forced to also define RAND. You can still also keep CONFIG_RAND for cases like your board where all you want is RAND. Don't forget that you need to add a COBJS := $(sort $(COBJS-y)) to the Makefile like this one in case more than one of the options is enabled for the same board. > COBJS-$(CONFIG_CMD_NFS) += nfs.o > COBJS-$(CONFIG_CMD_PING) += ping.o > COBJS-$(CONFIG_CMD_RARP) += rarp.o > diff --git a/net/net_rand.h b/net/net_rand.h > index c98db64..62de375 100644 > --- a/net/net_rand.h > +++ b/net/net_rand.h > @@ -9,18 +9,36 @@ > #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 timer and 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 = get_timer(0); Do not include the timer here. The seed should always start the same for a given MAC address. > + seed ^= enetaddr[5]; > + seed ^= enetaddr[4] << 8; > + seed ^= enetaddr[3] << 16; > + seed ^= enetaddr[2] << 24; > + seed ^= enetaddr[1]; > + seed ^= enetaddr[0] << 8; > + > + return seed; > +} Thanks, -Joe _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot