1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-01 08:42:12 +02:00

net: Move RARP receive logic out of net.c

Separate this functionality out of the net.c behemoth

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Simon Glass <sjg@chromium.org>
Acked-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Joe Hershberger
2012-05-23 07:58:03 +00:00
parent a36b12f95a
commit 8b9c53221f
3 changed files with 37 additions and 48 deletions

View File

@@ -29,33 +29,50 @@
#include "rarp.h"
#include "tftp.h"
#define TIMEOUT 5000UL /* Milliseconds 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 */
#define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
#else
# define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT)
#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);
}