|
@@ -209,6 +209,8 @@ uchar NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
|
|
ulong NetArpWaitTimerStart;
|
|
ulong NetArpWaitTimerStart;
|
|
int NetArpWaitTry;
|
|
int NetArpWaitTry;
|
|
|
|
|
|
|
|
+int env_changed_id = 0;
|
|
|
|
+
|
|
void ArpRequest (void)
|
|
void ArpRequest (void)
|
|
{
|
|
{
|
|
int i;
|
|
int i;
|
|
@@ -276,6 +278,78 @@ void ArpTimeoutCheck(void)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int
|
|
|
|
+NetInitLoop(proto_t protocol)
|
|
|
|
+{
|
|
|
|
+ bd_t *bd = gd->bd;
|
|
|
|
+ int env_id = get_env_id ();
|
|
|
|
+
|
|
|
|
+ /* update only when the environment has changed */
|
|
|
|
+ if (env_changed_id == env_id)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ switch (protocol) {
|
|
|
|
+#if defined(CONFIG_CMD_NFS)
|
|
|
|
+ case NFS:
|
|
|
|
+#endif
|
|
|
|
+#if defined(CONFIG_CMD_PING)
|
|
|
|
+ case PING:
|
|
|
|
+#endif
|
|
|
|
+#if defined(CONFIG_CMD_SNTP)
|
|
|
|
+ case SNTP:
|
|
|
|
+#endif
|
|
|
|
+ case NETCONS:
|
|
|
|
+ case TFTP:
|
|
|
|
+ NetCopyIP(&NetOurIP, &bd->bi_ip_addr);
|
|
|
|
+ NetOurGatewayIP = getenv_IPaddr ("gatewayip");
|
|
|
|
+ NetOurSubnetMask= getenv_IPaddr ("netmask");
|
|
|
|
+ NetOurVLAN = getenv_VLAN("vlan");
|
|
|
|
+ NetOurNativeVLAN = getenv_VLAN("nvlan");
|
|
|
|
+
|
|
|
|
+ switch (protocol) {
|
|
|
|
+#if defined(CONFIG_CMD_NFS)
|
|
|
|
+ case NFS:
|
|
|
|
+#endif
|
|
|
|
+ case NETCONS:
|
|
|
|
+ case TFTP:
|
|
|
|
+ NetServerIP = getenv_IPaddr ("serverip");
|
|
|
|
+ break;
|
|
|
|
+#if defined(CONFIG_CMD_PING)
|
|
|
|
+ case PING:
|
|
|
|
+ /* nothing */
|
|
|
|
+ break;
|
|
|
|
+#endif
|
|
|
|
+#if defined(CONFIG_CMD_SNTP)
|
|
|
|
+ case SNTP:
|
|
|
|
+ /* nothing */
|
|
|
|
+ break;
|
|
|
|
+#endif
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ break;
|
|
|
|
+ case BOOTP:
|
|
|
|
+ case RARP:
|
|
|
|
+ /*
|
|
|
|
+ * initialize our IP addr to 0 in order to accept ANY
|
|
|
|
+ * IP addr assigned to us by the BOOTP / RARP server
|
|
|
|
+ */
|
|
|
|
+ NetOurIP = 0;
|
|
|
|
+ NetServerIP = getenv_IPaddr ("serverip");
|
|
|
|
+ NetOurVLAN = getenv_VLAN("vlan"); /* VLANs must be read */
|
|
|
|
+ NetOurNativeVLAN = getenv_VLAN("nvlan");
|
|
|
|
+ case CDP:
|
|
|
|
+ NetOurVLAN = getenv_VLAN("vlan"); /* VLANs must be read */
|
|
|
|
+ NetOurNativeVLAN = getenv_VLAN("nvlan");
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ env_changed_id = env_id;
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
/**********************************************************************/
|
|
/**********************************************************************/
|
|
/*
|
|
/*
|
|
* Main network processing loop.
|
|
* Main network processing loop.
|
|
@@ -340,65 +414,7 @@ restart:
|
|
* here on, this code is a state machine driven by received
|
|
* here on, this code is a state machine driven by received
|
|
* packets and timer events.
|
|
* packets and timer events.
|
|
*/
|
|
*/
|
|
-
|
|
|
|
- switch (protocol) {
|
|
|
|
-#if defined(CONFIG_CMD_NFS)
|
|
|
|
- case NFS:
|
|
|
|
-#endif
|
|
|
|
-#if defined(CONFIG_CMD_PING)
|
|
|
|
- case PING:
|
|
|
|
-#endif
|
|
|
|
-#if defined(CONFIG_CMD_SNTP)
|
|
|
|
- case SNTP:
|
|
|
|
-#endif
|
|
|
|
- case NETCONS:
|
|
|
|
- case TFTP:
|
|
|
|
- NetCopyIP(&NetOurIP, &bd->bi_ip_addr);
|
|
|
|
- NetOurGatewayIP = getenv_IPaddr ("gatewayip");
|
|
|
|
- NetOurSubnetMask= getenv_IPaddr ("netmask");
|
|
|
|
- NetOurVLAN = getenv_VLAN("vlan");
|
|
|
|
- NetOurNativeVLAN = getenv_VLAN("nvlan");
|
|
|
|
-
|
|
|
|
- switch (protocol) {
|
|
|
|
-#if defined(CONFIG_CMD_NFS)
|
|
|
|
- case NFS:
|
|
|
|
-#endif
|
|
|
|
- case NETCONS:
|
|
|
|
- case TFTP:
|
|
|
|
- NetServerIP = getenv_IPaddr ("serverip");
|
|
|
|
- break;
|
|
|
|
-#if defined(CONFIG_CMD_PING)
|
|
|
|
- case PING:
|
|
|
|
- /* nothing */
|
|
|
|
- break;
|
|
|
|
-#endif
|
|
|
|
-#if defined(CONFIG_CMD_SNTP)
|
|
|
|
- case SNTP:
|
|
|
|
- /* nothing */
|
|
|
|
- break;
|
|
|
|
-#endif
|
|
|
|
- default:
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- break;
|
|
|
|
- case BOOTP:
|
|
|
|
- case RARP:
|
|
|
|
- /*
|
|
|
|
- * initialize our IP addr to 0 in order to accept ANY
|
|
|
|
- * IP addr assigned to us by the BOOTP / RARP server
|
|
|
|
- */
|
|
|
|
- NetOurIP = 0;
|
|
|
|
- NetServerIP = getenv_IPaddr ("serverip");
|
|
|
|
- NetOurVLAN = getenv_VLAN("vlan"); /* VLANs must be read */
|
|
|
|
- NetOurNativeVLAN = getenv_VLAN("nvlan");
|
|
|
|
- case CDP:
|
|
|
|
- NetOurVLAN = getenv_VLAN("vlan"); /* VLANs must be read */
|
|
|
|
- NetOurNativeVLAN = getenv_VLAN("nvlan");
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ NetInitLoop(protocol);
|
|
|
|
|
|
switch (net_check_prereq (protocol)) {
|
|
switch (net_check_prereq (protocol)) {
|
|
case 1:
|
|
case 1:
|