#include <common.h>
#include <command.h>
#include <net.h>
+#include "nfs.h"
#include "bootp.h"
#include "rarp.h"
#include "tftp.h"
-#if (CONFIG_COMMANDS & CFG_CMD_NET)
-
-#define TIMEOUT 5 /* Seconds before trying BOOTP again */
+#define TIMEOUT 5000UL /* Milliseconds before trying BOOTP again */
#ifndef CONFIG_NET_RETRY_COUNT
# define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
#else
static void
RarpHandler(uchar * dummi0, unsigned dummi1, unsigned dummi2, unsigned dummi3)
{
-#ifdef DEBUG
- printf("Got good RARP\n");
+ char *s;
+ debug("Got good RARP\n");
+ if ((s = getenv("autoload")) != NULL) {
+ if (*s == 'n') {
+ /*
+ * Just use RARP to configure system;
+ * Do not use TFTP/NFS to to load the bootfile.
+ */
+ NetState = NETLOOP_SUCCESS;
+ return;
+#if defined(CONFIG_CMD_NFS)
+ } else if ((s != NULL) && !strcmp(s, "NFS")) {
+ NfsStart();
+ return;
#endif
+ }
+ }
TftpStart ();
}
puts ("\nRetry count exceeded; starting again\n");
NetStartAgain ();
} else {
- NetSetTimeout (TIMEOUT * CFG_HZ, RarpTimeout);
+ NetSetTimeout (TIMEOUT, RarpTimeout);
RarpRequest ();
}
}
printf("RARP broadcast %d\n", ++RarpTry);
pkt = NetTxPacket;
- NetSetEther(pkt, NetBcastAddr, PROT_RARP);
- pkt += ETHER_HDR_SIZE;
+ pkt += NetSetEther(pkt, NetBcastAddr, PROT_RARP);
rarp = (ARP_t *)pkt;
- rarp->ar_hrd = ARP_ETHER;
- rarp->ar_pro = PROT_IP;
+ rarp->ar_hrd = htons (ARP_ETHER);
+ rarp->ar_pro = htons (PROT_IP);
rarp->ar_hln = 6;
rarp->ar_pln = 4;
- rarp->ar_op = RARPOP_REQUEST;
+ rarp->ar_op = htons (RARPOP_REQUEST);
memcpy (&rarp->ar_data[0], NetOurEther, 6); /* source ET addr */
memcpy (&rarp->ar_data[6], &NetOurIP, 4); /* source IP addr */
memcpy (&rarp->ar_data[10], NetOurEther, 6); /* dest ET addr = source ET addr ??*/
rarp->ar_data[16 + i] = 0xff;
}
- NetSendPacket(NetTxPacket, ETHER_HDR_SIZE + ARP_HDR_SIZE);
+ NetSendPacket(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
- NetSetTimeout(TIMEOUT * CFG_HZ, RarpTimeout);
+ NetSetTimeout(TIMEOUT, RarpTimeout);
NetSetHandler(RarpHandler);
}
-
-#endif /* CFG_CMD_NET */