[U-Boot] [PATCH v7 2/4] net: use common rand()/srand() functions
Joe Hershberger
joe.hershberger at gmail.com
Thu May 31 21:04:03 CEST 2012
Hi Michael,
On Thu, May 31, 2012 at 1:12 PM, Michael Walle <michael at 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 <michael at walle.cc>
> Cc: Joe Hershberger <joe.hershberger at 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
More information about the U-Boot
mailing list