Signed-off-by: Joe Hershberger <joe.hershber...@ni.com> Cc: Joe Hershberger <joe.hershber...@gmail.com> Cc: Simon Glass <s...@chromium.org> Cc: Mike Frysinger <vap...@gentoo.org> --- Changes for v2: - Moved void to the same line as function - Eliminate CamelCase in new function name
net/net.c | 27 +-------------------------- net/rarp.c | 45 +++++++++++++++++++++++++++++---------------- net/rarp.h | 6 +++--- 3 files changed, 33 insertions(+), 45 deletions(-) diff --git a/net/net.c b/net/net.c index ef084ba..a812298 100644 --- a/net/net.c +++ b/net/net.c @@ -82,9 +82,7 @@ #include "arp.h" #include "bootp.h" #include "tftp.h" -#ifdef CONFIG_CMD_RARP #include "rarp.h" -#endif #include "nfs.h" #ifdef CONFIG_STATUS_LED #include <status_led.h> @@ -855,9 +853,6 @@ NetReceive(uchar *inpkt, int len) { Ethernet_t *et; IP_t *ip; -#ifdef CONFIG_CMD_RARP - ARP_t *arp; -#endif IPaddr_t tmp; IPaddr_t src_ip; int x; @@ -962,27 +957,7 @@ NetReceive(uchar *inpkt, int len) #ifdef CONFIG_CMD_RARP case PROT_RARP: - debug("Got RARP\n"); - arp = (ARP_t *)ip; - if (len < ARP_HDR_SIZE) { - printf("bad length %d < %d\n", len, ARP_HDR_SIZE); - return; - } - - if ((ntohs(arp->ar_op) != RARPOP_REPLY) || - (ntohs(arp->ar_hrd) != ARP_ETHER) || - (ntohs(arp->ar_pro) != PROT_IP) || - (arp->ar_hln != 6) || (arp->ar_pln != 4)) { - - puts("invalid RARP header\n"); - } else { - NetCopyIP(&NetOurIP, &arp->ar_data[16]); - if (NetServerIP == 0) - NetCopyIP(&NetServerIP, &arp->ar_data[6]); - memcpy(NetServerEther, &arp->ar_data[0], 6); - - (*packetHandler)(0, 0, 0, 0, 0); - } + rarp_receive(ip, len); break; #endif case PROT_IP: diff --git a/net/rarp.c b/net/rarp.c index 5a813a2..9864468 100644 --- a/net/rarp.c +++ b/net/rarp.c @@ -36,26 +36,43 @@ # define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT) #endif - -int RarpTry; +int RarpTry; /* * Handle a RARP received packet. */ -static void -RarpHandler(uchar *dummi0, unsigned dummi1, IPaddr_t sip, unsigned dummi2, - unsigned dummi3) +void rarp_receive(IP_t *ip, unsigned len) { - debug("Got good RARP\n"); - net_auto_load(); + ARP_t *arp; + + debug("Got RARP\n"); + arp = (ARP_t *)ip; + if (len < ARP_HDR_SIZE) { + printf("bad length %d < %d\n", len, ARP_HDR_SIZE); + return; + } + + if ((ntohs(arp->ar_op) != RARPOP_REPLY) || + (ntohs(arp->ar_hrd) != ARP_ETHER) || + (ntohs(arp->ar_pro) != PROT_IP) || + (arp->ar_hln != 6) || (arp->ar_pln != 4)) { + + puts("invalid RARP header\n"); + } else { + NetCopyIP(&NetOurIP, &arp->ar_data[16]); + if (NetServerIP == 0) + NetCopyIP(&NetServerIP, &arp->ar_data[6]); + memcpy(NetServerEther, &arp->ar_data[0], 6); + debug("Got good RARP\n"); + net_auto_load(); + } } /* * Timeout on BOOTP request. */ -static void -RarpTimeout(void) +static void RarpTimeout(void) { if (RarpTry >= TIMEOUT_COUNT) { puts("\nRetry count exceeded; starting again\n"); @@ -67,10 +84,8 @@ RarpTimeout(void) } -void -RarpRequest(void) +void RarpRequest(void) { - int i; uchar *pkt; ARP_t *rarp; @@ -90,12 +105,10 @@ RarpRequest(void) memcpy(&rarp->ar_data[6], &NetOurIP, 4); /* source IP addr */ /* dest ET addr = source ET addr ??*/ memcpy(&rarp->ar_data[10], NetOurEther, 6); - /* dest. IP addr set to broadcast */ - for (i = 0; i <= 3; i++) - rarp->ar_data[16 + i] = 0xff; + /* dest IP addr set to broadcast */ + memset(&rarp->ar_data[16], 0xff, 4); NetSendPacket(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE); NetSetTimeout(TIMEOUT, RarpTimeout); - NetSetHandler(RarpHandler); } diff --git a/net/rarp.h b/net/rarp.h index 4e92d80..e5a6c39 100644 --- a/net/rarp.h +++ b/net/rarp.h @@ -21,14 +21,12 @@ * MA 02111-1307 USA */ +#if defined(CONFIG_CMD_RARP) #ifndef __RARP_H__ #define __RARP_H__ -#ifndef __NET_H__ #include <net.h> -#endif /* __NET_H__ */ - /**********************************************************************/ /* @@ -37,8 +35,10 @@ extern int RarpTry; +extern void rarp_receive(IP_t *ip, unsigned len); extern void RarpRequest(void); /* Send a RARP request */ /**********************************************************************/ #endif /* __RARP_H__ */ +#endif -- 1.6.0.2 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot