[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