提交 3b2e4fd9 编写于 作者: W Wolfgang Denk

Add support for the DHCP vendor optional bootfile (#67).

Ignores the vendor TFTP server name option (#66).
Patch by Murray Jensen, 30 Jun 2005
上级 03469832
......@@ -2,6 +2,10 @@
Changes since U-Boot 1.1.4:
======================================================================
* Add support for the DHCP vendor optional bootfile (#67).
Ignores the vendor TFTP server name option (#66).
Patch by Murray Jensen, 30 Jun 2005
* Fix a HW timing issue on 8548 CDS for eTSEC 3 in RGMII mode
Patch by Andy Fleming, 14 Jun 2005
......
......@@ -715,7 +715,7 @@ BootpRequest (void)
}
#if (CONFIG_COMMANDS & CFG_CMD_DHCP)
static void DhcpOptionsProcess (uchar * popt)
static void DhcpOptionsProcess (uchar * popt, Bootp_t *bp)
{
uchar *end = popt + BOOTP_HDR_SIZE;
int oplen, size;
......@@ -772,6 +772,34 @@ static void DhcpOptionsProcess (uchar * popt)
break;
case 59: /* Ignore Rebinding Time Option */
break;
case 66: /* Ignore TFTP server name */
break;
case 67: /* vendor opt bootfile */
/*
* I can't use dhcp_vendorex_proc here because I need
* to write into the bootp packet - even then I had to
* pass the bootp packet pointer into here as the
* second arg
*/
size = truncate_sz ("Opt Boot File",
sizeof(bp->bp_file),
oplen);
if (bp->bp_file[0] == '\0' && size > 0) {
/*
* only use vendor boot file if we didn't
* receive a boot file in the main non-vendor
* part of the packet - god only knows why
* some vendors chose not to use this perfectly
* good spot to store the boot file (join on
* Tru64 Unix) it seems mind bogglingly crazy
* to me
*/
printf("*** WARNING: using vendor "
"optional boot file\n");
memcpy(bp->bp_file, popt + 2, size);
bp->bp_file[size] = '\0';
}
break;
default:
#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_VENDOREX)
if (dhcp_vendorex_proc (popt))
......@@ -882,7 +910,7 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
dhcp_state = REQUESTING;
if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
DhcpOptionsProcess((u8 *)&bp->bp_vend[4]);
DhcpOptionsProcess((u8 *)&bp->bp_vend[4], bp);
BootpCopyNetParams(bp); /* Store net params from reply */
......@@ -901,7 +929,7 @@ DhcpHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len)
char *s;
if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
DhcpOptionsProcess((u8 *)&bp->bp_vend[4]);
DhcpOptionsProcess((u8 *)&bp->bp_vend[4], bp);
BootpCopyNetParams(bp); /* Store net params from reply */
dhcp_state = BOUND;
puts ("DHCP client bound to address ");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册