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:
parent
a36b12f95a
commit
8b9c53221f
27
net/net.c
27
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>
|
||||
|
@ -853,9 +851,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;
|
||||
|
@ -960,27 +955,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:
|
||||
|
|
51
net/rarp.c
51
net/rarp.c
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,11 @@
|
|||
|
||||
extern int RarpTry;
|
||||
|
||||
/* Process the receipt of a RARP packet */
|
||||
extern void rarp_receive(IP_t *ip, unsigned len);
|
||||
extern void RarpRequest(void); /* Send a RARP request */
|
||||
|
||||
/**********************************************************************/
|
||||
|
||||
#endif /* __RARP_H__ */
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue