[U-Boot] [PATCH v2 1/3] net: Separate ArpRequest() into lower-level func

Joe Hershberger joe.hershberger at ni.com
Wed Mar 28 01:43:22 CEST 2012


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 <joe.hershberger at ni.com>
Cc: Joe Hershberger <joe.hershberger at gmail.com>
Cc: Simon Glass <sjg at chromium.org>
Cc: Mike Frysinger <vapier at gentoo.org>
---
Changes for v2:
   - Split from "Add link-local addressing support"
   - Eliminate CamelCase from new functions

 net/arp.c |   22 +++++++++++++---------
 net/arp.h |    2 ++
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/net/arp.c b/net/arp.c
index e6c929b..7599d30 100644
--- a/net/arp.c
+++ b/net/arp.c
@@ -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;
@@ -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) {
@@ -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)
diff --git a/net/arp.h b/net/arp.h
index aba0c0b..3998411 100644
--- a/net/arp.h
+++ b/net/arp.h
@@ -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);
 
-- 
1.6.0.2



More information about the U-Boot mailing list