
Don't force ARP clients to return the MAC address if they don't care about it (such as ping)
Signed-off-by: Joe Hershberger joe.hershberger@ni.com Cc: Joe Hershberger joe.hershberger@gmail.com Cc: Wolfgang Denk wd@denx.de --- net/arp.c | 9 +++++---- net/ping.c | 10 +++------- 2 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/net/arp.c b/net/arp.c index 8c3557b..b3be0a6 100644 --- a/net/arp.c +++ b/net/arp.c @@ -170,7 +170,7 @@ void ArpReceive(struct Ethernet_t *et, struct IP_UDP_t *ip, int len)
case ARPOP_REPLY: /* arp reply */ /* are we waiting for a reply */ - if (!NetArpWaitPacketIP || !NetArpWaitPacketMAC) + if (!NetArpWaitPacketIP) break;
#ifdef CONFIG_KEEP_SERVERADDR @@ -189,8 +189,9 @@ void ArpReceive(struct Ethernet_t *et, struct IP_UDP_t *ip, int len) arp->ar_data);
/* save address for later use */ - memcpy(NetArpWaitPacketMAC, - &arp->ar_sha, ARP_HLEN); + if (NetArpWaitPacketMAC != NULL) + memcpy(NetArpWaitPacketMAC, + &arp->ar_sha, ARP_HLEN);
if (NetGetARPHandler() != NULL) NetGetARPHandler()((uchar *)arp, 0, @@ -198,7 +199,7 @@ void ArpReceive(struct Ethernet_t *et, struct IP_UDP_t *ip, int len)
/* modify header, and transmit it */ memcpy(((struct Ethernet_t *)NetArpWaitTxPacket)-> - et_dest, NetArpWaitPacketMAC, ARP_HLEN); + et_dest, &arp->ar_sha, ARP_HLEN); NetSendPacket(NetArpWaitTxPacket, NetArpWaitTxPacketSize);
diff --git a/net/ping.c b/net/ping.c index 913506b..687c5aa 100644 --- a/net/ping.c +++ b/net/ping.c @@ -40,22 +40,18 @@ static void SetICMPHeader(uchar *pkt, IPaddr_t dest)
static int PingSend(void) { - static uchar mac[6]; uchar *pkt; int eth_hdr_size;
/* XXX always send arp request */
- memcpy(mac, NetEtherNullAddr, 6); - debug("sending ARP for %pI4\n", &NetPingIP);
NetArpWaitPacketIP = NetPingIP; - NetArpWaitPacketMAC = mac;
- pkt = NetArpWaitTxPacket; - eth_hdr_size = NetSetEther(pkt, mac, PROT_IP); - pkt += eth_hdr_size; + eth_hdr_size = NetSetEther(NetArpWaitTxPacket, NetEtherNullAddr, + PROT_IP); + pkt = NetArpWaitTxPacket + eth_hdr_size;
SetICMPHeader(pkt, NetPingIP);