diff options
| -rw-r--r-- | net/bootp.c | 76 | 
1 files changed, 33 insertions, 43 deletions
| diff --git a/net/bootp.c b/net/bootp.c index 45eaab1e0..3db08ea2f 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -138,6 +138,36 @@ static int truncate_sz (const char *name, int maxlen, int curlen)  	return (curlen);  } +/* + * Check if autoload is enabled. If so, use either NFS or TFTP to download + * the boot file. + */ +static void auto_load(void) +{ +	const char *s = getenv("autoload"); + +	if (s != NULL) { +		if (*s == 'n') { +			/* +			 * Just use BOOTP to configure system; +			 * Do not use TFTP to load the bootfile. +			 */ +			NetState = NETLOOP_SUCCESS; +			return; +		} +#if defined(CONFIG_CMD_NFS) +		if (strcmp(s, "NFS") == 0) { +			/* +			 * Use NFS to load the bootfile. +			 */ +			NfsStart(); +			return; +		} +#endif +	TftpStart(); +	} +} +  #if !defined(CONFIG_CMD_DHCP)  static void BootpVendorFieldProcess (u8 * ext) @@ -289,6 +319,7 @@ static void BootpVendorProcess (u8 * ext, int size)  		debug("NetNtpServerIP : %pI4\n", &NetNtpServerIP);  #endif  } +  /*   *	Handle a BOOTP received packet.   */ @@ -297,7 +328,6 @@ BootpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,  	     unsigned len)  {  	Bootp_t *bp; -	char	*s;  	debug("got BOOTP packet (src=%d, dst=%d, len=%d want_len=%zu)\n",  		src, dest, len, sizeof (Bootp_t)); @@ -324,26 +354,7 @@ BootpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,  	debug("Got good BOOTP\n"); -	if ((s = getenv("autoload")) != NULL) { -		if (*s == 'n') { -			/* -			 * Just use BOOTP to configure system; -			 * Do not use TFTP to load the bootfile. -			 */ -			NetState = NETLOOP_SUCCESS; -			return; -#if defined(CONFIG_CMD_NFS) -		} else if (strcmp(s, "NFS") == 0) { -			/* -			 * Use NFS to load the bootfile. -			 */ -			NfsStart(); -			return; -#endif -		} -	} - -	TftpStart(); +	auto_load();  }  #endif @@ -922,34 +933,13 @@ DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,  		debug("DHCP State: REQUESTING\n");  		if ( DhcpMessageType((u8 *)bp->bp_vend) == DHCP_ACK ) { -			char *s; -  			if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))  				DhcpOptionsProcess((u8 *)&bp->bp_vend[4], bp);  			BootpCopyNetParams(bp); /* Store net params from reply */  			dhcp_state = BOUND;  			printf ("DHCP client bound to address %pI4\n", &NetOurIP); -			/* Obey the 'autoload' setting */ -			if ((s = getenv("autoload")) != NULL) { -				if (*s == 'n') { -					/* -					 * Just use BOOTP to configure system; -					 * Do not use TFTP to load the bootfile. -					 */ -					NetState = NETLOOP_SUCCESS; -					return; -#if defined(CONFIG_CMD_NFS) -				} else if (strcmp(s, "NFS") == 0) { -					/* -					 * Use NFS to load the bootfile. -					 */ -					NfsStart(); -					return; -#endif -				} -			} -			TftpStart(); +			auto_load();  			return;  		}  		break; |