|
@@ -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;
|