Skip to content

Commit

Permalink
net: Separate ArpRequest() into lower-level func
Browse files Browse the repository at this point in the history
Link-local support will need to send ARP packets, but needs more
fine-grained control over the contents.  Split the implementation
into 2 parts so link-local can share the code.

Signed-off-by: Joe Hershberger <[email protected]>
  • Loading branch information
jhershbe committed May 23, 2012
1 parent e94070c commit 2280418
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 9 deletions.
22 changes: 13 additions & 9 deletions net/arp.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ void ArpInit(void)
NetArpTxPacket -= (ulong)NetArpTxPacket % PKTALIGN;
}

void ArpRequest(void)
void arp_raw_request(IPaddr_t sourceIP, const uchar *targetEther,
IPaddr_t targetIP)
{
uchar *pkt;
struct arp_hdr *arp;
Expand All @@ -69,12 +70,16 @@ void ArpRequest(void)
arp->ar_pln = ARP_PLEN;
arp->ar_op = htons(ARPOP_REQUEST);

/* source ET addr */
memcpy(&arp->ar_sha, NetOurEther, ARP_HLEN);
/* source IP addr */
NetWriteIP(&arp->ar_spa, NetOurIP);
/* dest ET addr = 0 */
memset(&arp->ar_tha, 0, ARP_HLEN);
memcpy(&arp->ar_sha, NetOurEther, ARP_HLEN); /* source ET addr */
NetWriteIP(&arp->ar_spa, sourceIP); /* source IP addr */
memcpy(&arp->ar_tha, targetEther, ARP_HLEN); /* target ET addr */
NetWriteIP(&arp->ar_tpa, targetIP); /* target IP addr */

NetSendPacket(NetArpTxPacket, eth_hdr_size + ARP_HDR_SIZE);
}

void ArpRequest(void)
{
if ((NetArpWaitPacketIP & NetOurSubnetMask) !=
(NetOurIP & NetOurSubnetMask)) {
if (NetOurGatewayIP == 0) {
Expand All @@ -87,8 +92,7 @@ void ArpRequest(void)
NetArpWaitReplyIP = NetArpWaitPacketIP;
}

NetWriteIP(&arp->ar_tpa, NetArpWaitReplyIP);
NetSendPacket(NetArpTxPacket, eth_hdr_size + ARP_HDR_SIZE);
arp_raw_request(NetOurIP, NetEtherNullAddr, NetArpWaitReplyIP);
}

void ArpTimeoutCheck(void)
Expand Down
2 changes: 2 additions & 0 deletions net/arp.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ extern int NetArpWaitTry;

void ArpInit(void);
void ArpRequest(void);
void arp_raw_request(IPaddr_t sourceIP, const uchar *targetEther,
IPaddr_t targetIP);
void ArpTimeoutCheck(void);
void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len);

Expand Down

0 comments on commit 2280418

Please sign in to comment.