From 03c1b04f86ddd6a296e2d80d73f5e4670e55da1d Mon Sep 17 00:00:00 2001 From: Michael Walle Date: Tue, 5 Jun 2012 11:33:16 +0000 Subject: net: add helper to generate random mac address Add new function eth_random_enetaddr() to generate a locally administered ethernet address. Signed-off-by: Michael Walle Acked-by: Joe Hershberger --- net/eth.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'net') diff --git a/net/eth.c b/net/eth.c index d9a643073d..d526264fa6 100644 --- a/net/eth.c +++ b/net/eth.c @@ -70,6 +70,28 @@ static int eth_mac_skip(int index) return ((skip_state = getenv(enetvar)) != NULL); } +#ifdef CONFIG_RANDOM_MACADDR +void eth_random_enetaddr(uchar *enetaddr) +{ + uint32_t rval; + + srand(get_timer(0)); + + rval = rand(); + enetaddr[0] = rval & 0xff; + enetaddr[1] = (rval >> 8) & 0xff; + enetaddr[2] = (rval >> 16) & 0xff; + + rval = rand(); + enetaddr[3] = rval & 0xff; + enetaddr[4] = (rval >> 8) & 0xff; + enetaddr[5] = (rval >> 16) & 0xff; + + /* make sure it's local and unicast */ + enetaddr[0] = (enetaddr[0] | 0x02) & ~0x01; +} +#endif + /* * CPU and board-specific Ethernet initializations. Aliased function * signals caller to move on -- cgit v1.2.1