Patchwork [U-Boot,01/10] pxe: Use ethact setting for pxe

login
register
mail settings
Submitter Rob Herring
Date Dec. 3, 2012, 3 a.m.
Message ID <1354503629-25621-2-git-send-email-robherring2@gmail.com>
Download mbox | patch
Permalink /patch/203269/
State Accepted
Delegated to: Joe Hershberger
Headers show

Comments

Rob Herring - Dec. 3, 2012, 3 a.m.
From: Rob Herring <rob.herring@calxeda.com>

Get the MAC address using eth_getenv_enetaddr_by_index so that the MAC
address of ethact is used. This enables using the a NIC other than the
first one for PXE boot.

Signed-off-by: Rob Herring <rob.herring@calxeda.com>
---
 common/cmd_pxe.c |   34 +++++++++-------------------------
 1 file changed, 9 insertions(+), 25 deletions(-)
Joe Hershberger - July 8, 2013, 3:48 p.m.
On Sun, Dec 2, 2012 at 9:00 PM, Rob Herring <robherring2@gmail.com> wrote:
> From: Rob Herring <rob.herring@calxeda.com>
>
> Get the MAC address using eth_getenv_enetaddr_by_index so that the MAC
> address of ethact is used. This enables using the a NIC other than the
> first one for PXE boot.
>
> Signed-off-by: Rob Herring <rob.herring@calxeda.com>

Applied series, Thanks.
-Joe

Patch

diff --git a/common/cmd_pxe.c b/common/cmd_pxe.c
index ee75db9..306c483 100644
--- a/common/cmd_pxe.c
+++ b/common/cmd_pxe.c
@@ -55,37 +55,21 @@  static char *from_env(char *envvar)
  */
 static int format_mac_pxe(char *outbuf, size_t outbuf_len)
 {
-	size_t ethaddr_len;
-	char *p, *ethaddr;
+	uchar ethaddr[6];
 
-	ethaddr = from_env("ethaddr");
-
-	if (!ethaddr)
-		return -ENOENT;
-
-	ethaddr_len = strlen(ethaddr);
-
-	/*
-	 * ethaddr_len + 4 gives room for "01-", ethaddr, and a NUL byte at
-	 * the end.
-	 */
-	if (outbuf_len < ethaddr_len + 4) {
-		printf("outbuf is too small (%d < %d)\n",
-				outbuf_len, ethaddr_len + 4);
+	if (outbuf_len < 21) {
+		printf("outbuf is too small (%d < 21)\n", outbuf_len);
 
 		return -EINVAL;
 	}
 
-	strcpy(outbuf, "01-");
-
-	for (p = outbuf + 3; *ethaddr; ethaddr++, p++) {
-		if (*ethaddr == ':')
-			*p = '-';
-		else
-			*p = tolower(*ethaddr);
-	}
+	if (!eth_getenv_enetaddr_by_index("eth", eth_get_dev_index(),
+		ethaddr))
+		return -ENOENT;
 
-	*p = '\0';
+	sprintf(outbuf, "01-%02x-%02x-%02x-%02x-%02x-%02x",
+		ethaddr[0], ethaddr[1], ethaddr[2],
+		ethaddr[3], ethaddr[4], ethaddr[5]);
 
 	return 1;
 }