From patchwork Sat Mar 31 12:38:33 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Walle X-Patchwork-Id: 149826 X-Patchwork-Delegate: joe.hershberger@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id D0C46B6EEC for ; Sat, 31 Mar 2012 23:39:52 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id CB8EF28121; Sat, 31 Mar 2012 14:39:37 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2xn7VuSUZAx6; Sat, 31 Mar 2012 14:39:37 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id AC5B728122; Sat, 31 Mar 2012 14:39:26 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 9E298280F4 for ; Sat, 31 Mar 2012 14:39:06 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WAdeAaVSGJcL for ; Sat, 31 Mar 2012 14:39:06 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail.serverraum.org (mail.serverraum.org [78.47.150.89]) by theia.denx.de (Postfix) with ESMTP id 7CAC4280F8 for ; Sat, 31 Mar 2012 14:39:04 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail.serverraum.org (Postfix) with ESMTP id 114463F00E; Sat, 31 Mar 2012 14:39:04 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at mail.serverraum.org Received: from mail.serverraum.org ([127.0.0.1]) by localhost (web.serverraum.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2TcarTkvBF0q; Sat, 31 Mar 2012 14:39:03 +0200 (CEST) Received: from thanatos.fritz.box (95-89-251-205-dynip.superkabel.de [95.89.251.205]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.serverraum.org (Postfix) with ESMTPSA id B7D393F00D; Sat, 31 Mar 2012 14:39:03 +0200 (CEST) From: Michael Walle To: u-boot@lists.denx.de Date: Sat, 31 Mar 2012 14:38:33 +0200 Message-Id: <1333197516-5138-3-git-send-email-michael@walle.cc> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1333197516-5138-1-git-send-email-michael@walle.cc> References: <1333197516-5138-1-git-send-email-michael@walle.cc> Subject: [U-Boot] [PATCH 2/5] net: add helper to generate random mac address X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de Add new function eth_random_enetaddr() to generate a locally administered ethernet address. Signed-off-by: Michael Walle --- include/net.h | 15 +++++++++++++++ net/eth.c | 15 +++++++++++++++ 2 files changed, 30 insertions(+), 0 deletions(-) diff --git a/include/net.h b/include/net.h index 5560785..1fceb99 100644 --- a/include/net.h +++ b/include/net.h @@ -117,6 +117,21 @@ extern int eth_setenv_enetaddr(char *name, const uchar *enetaddr); extern int eth_getenv_enetaddr_by_index(const char *base_name, int index, uchar *enetaddr); +/* + * The u-boot policy does not allow hardcoded ethernet addresses. Under the + * following circumstances a random generated address is allowed: + * - in emergency cases, where you need a working network connection to seti + * the ethernet address. + * Eg. you wan't a rescue boot and don't have a serial port to access the + * CLI to set environment variables. + * + * In these cases, we generate a random locally administered ethernet address. + * + * Args: + * enetaddr - returns 6 byte hardware address + */ +extern void eth_random_enetaddr(uchar *enetaddr); + extern int usb_eth_initialize(bd_t *bi); extern int eth_init(bd_t *bis); /* Initialize the device */ extern int eth_send(volatile void *packet, int length); /* Send a packet */ diff --git a/net/eth.c b/net/eth.c index aabb343..4441969 100644 --- a/net/eth.c +++ b/net/eth.c @@ -70,6 +70,21 @@ static int eth_mac_skip(int index) return ((skip_state = getenv(enetvar)) != NULL); } +void eth_random_enetaddr(uchar *enetaddr) +{ + uint32_t rval; + + srand(get_timer(0)); + rval = rand(); + + enetaddr[0] = 0x02; /* locally administered */ + enetaddr[1] = 0x00; + enetaddr[2] = 0x00; + enetaddr[3] = rval & 0xff; + enetaddr[4] = (rval >> 8) & 0xff; + enetaddr[5] = (rval >> 16) & 0xff; +} + /* * CPU and board-specific Ethernet initializations. Aliased function * signals caller to move on