diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/bootp.c | 34 | ||||
| -rw-r--r-- | net/net.c | 46 | ||||
| -rw-r--r-- | net/rarp.c | 18 | ||||
| -rw-r--r-- | net/tftp.c | 19 |
4 files changed, 58 insertions, 59 deletions
diff --git a/net/bootp.c b/net/bootp.c index b703f428ca4..b789eec0d7e 100644 --- a/net/bootp.c +++ b/net/bootp.c @@ -138,36 +138,6 @@ 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(TFTPGET); -} - #if !defined(CONFIG_CMD_DHCP) static void BootpVendorFieldProcess (u8 * ext) @@ -354,7 +324,7 @@ BootpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, debug("Got good BOOTP\n"); - auto_load(); + net_auto_load(); } #endif @@ -979,7 +949,7 @@ DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, dhcp_state = BOUND; printf ("DHCP client bound to address %pI4\n", &NetOurIP); - auto_load(); + net_auto_load(); return; } break; diff --git a/net/net.c b/net/net.c index 84f28bf32e1..8f55281f406 100644 --- a/net/net.c +++ b/net/net.c @@ -215,7 +215,9 @@ volatile uchar *NetRxPackets[PKTBUFSRX]; /* Current RX packet handler */ static rxhand_f *packetHandler; +#ifdef CONFIG_CMD_TFTPPUT static rxhand_icmp_f *packet_icmp_handler; /* Current ICMP rx handler */ +#endif /* Current timeout handler */ static thand_f *timeHandler; /* Time base value */ @@ -244,7 +246,6 @@ int NetArpWaitTry; void ArpRequest(void) { - int i; volatile uchar *pkt; ARP_t *arp; @@ -266,11 +267,8 @@ void ArpRequest(void) memcpy(&arp->ar_data[0], NetOurEther, 6); /* source IP addr */ NetWriteIP((uchar *) &arp->ar_data[6], NetOurIP); - for (i = 10; i < 16; ++i) { - /* dest ET addr = 0 */ - arp->ar_data[i] = 0; - } - + /* dest ET addr = 0 */ + memset(&arp->ar_data[10], '\0', 6); if ((NetArpWaitPacketIP & NetOurSubnetMask) != (NetOurIP & NetOurSubnetMask)) { if (NetOurGatewayIP == 0) { @@ -311,6 +309,36 @@ void ArpTimeoutCheck(void) } } +/* + * Check if autoload is enabled. If so, use either NFS or TFTP to download + * the boot file. + */ +void net_auto_load(void) +{ + const char *s = getenv("autoload"); + + if (s != NULL) { + if (*s == 'n') { + /* + * Just use BOOTP/RARP 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(TFTPGET); +} + static void NetInitLoop(enum proto_t protocol) { static int env_changed_id; @@ -576,9 +604,11 @@ restart: } done: +#ifdef CONFIG_CMD_TFTPPUT /* Clear out the handlers */ NetSetHandler(NULL); net_set_icmp_handler(NULL); +#endif return ret; } @@ -653,10 +683,12 @@ NetSetHandler(rxhand_f *f) packetHandler = f; } +#ifdef CONFIG_CMD_TFTPPUT void net_set_icmp_handler(rxhand_icmp_f *f) { packet_icmp_handler = f; } +#endif void NetSetTimeout(ulong iv, thand_f *f) @@ -1397,10 +1429,12 @@ static void receive_icmp(IP_t *ip, int len, IPaddr_t src_ip, Ethernet_t *et) break; #endif default: +#ifdef CONFIG_CMD_TFTPPUT if (packet_icmp_handler) packet_icmp_handler(icmph->type, icmph->code, ntohs(ip->udp_dst), src_ip, ntohs(ip->udp_src), icmph->un.data, ntohs(ip->udp_len)); +#endif break; } } diff --git a/net/rarp.c b/net/rarp.c index 94c86d3429b..097f970f442 100644 --- a/net/rarp.c +++ b/net/rarp.c @@ -46,24 +46,8 @@ static void RarpHandler(uchar *dummi0, unsigned dummi1, IPaddr_t sip, unsigned dummi2, unsigned dummi3) { - 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 (); + net_auto_load(); } diff --git a/net/tftp.c b/net/tftp.c index 961fdd1a455..49997073872 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -198,7 +198,7 @@ store_block(unsigned block, uchar *src, unsigned len) } /* Clear our state ready for a new transfer */ -void new_transfer(void) +static void new_transfer(void) { TftpLastBlock = 0; TftpBlockWrap = 0; @@ -332,8 +332,12 @@ TftpSend(void) case STATE_SEND_WRQ: xp = pkt; s = (ushort *)pkt; +#ifdef CONFIG_CMD_TFTPPUT *s++ = htons(TftpState == STATE_SEND_RRQ ? TFTP_RRQ : TFTP_WRQ); +#else + *s++ = htons(TFTP_RRQ); +#endif pkt = (uchar *)s; strcpy((char *)pkt, tftp_filename); pkt += strlen(tftp_filename) + 1; @@ -421,7 +425,7 @@ TftpSend(void) TftpOurPort, len); } - +#ifdef CONFIG_CMD_TFTPPUT static void icmp_handler(unsigned type, unsigned code, unsigned dest, IPaddr_t sip, unsigned src, uchar *pkt, unsigned len) { @@ -430,6 +434,7 @@ static void icmp_handler(unsigned type, unsigned code, unsigned dest, restart("TFTP server died"); } } +#endif static void TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, @@ -729,7 +734,12 @@ void TftpStart(enum proto_t protocol) printf("Using %s device\n", eth_get_name()); printf("TFTP %s server %pI4; our IP address is %pI4", - protocol == TFTPPUT ? "to" : "from", &TftpRemoteIP, &NetOurIP); +#ifdef CONFIG_CMD_TFTPPUT + protocol == TFTPPUT ? "to" : "from", +#else + "from", +#endif + &TftpRemoteIP, &NetOurIP); /* Check if we need to send across this subnet */ if (NetOurGatewayIP && NetOurSubnetMask) { @@ -771,8 +781,9 @@ void TftpStart(enum proto_t protocol) NetSetTimeout(TftpTimeoutMSecs, TftpTimeout); NetSetHandler(TftpHandler); +#ifdef CONFIG_CMD_TFTPPUT net_set_icmp_handler(icmp_handler); - +#endif TftpRemotePort = WELL_KNOWN_PORT; TftpTimeoutCount = 0; /* Use a pseudo-random port unless a specific port is set */ |
