net: Remove static allocation for MAC address in PingSend()

Don't force ARP clients to return the MAC address if they don't care
(such as ping)

Signed-off-by: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
Joe Hershberger 2012-05-23 07:59:20 +00:00
parent 2c00e099fe
commit f1d2d28469
2 changed files with 8 additions and 11 deletions

View File

@ -170,7 +170,7 @@ void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
case ARPOP_REPLY: /* arp reply */ case ARPOP_REPLY: /* arp reply */
/* are we waiting for a reply */ /* are we waiting for a reply */
if (!NetArpWaitPacketIP || !NetArpWaitPacketMAC) if (!NetArpWaitPacketIP)
break; break;
#ifdef CONFIG_KEEP_SERVERADDR #ifdef CONFIG_KEEP_SERVERADDR
@ -189,15 +189,16 @@ void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
arp->ar_data); arp->ar_data);
/* save address for later use */ /* save address for later use */
memcpy(NetArpWaitPacketMAC, if (NetArpWaitPacketMAC != NULL)
&arp->ar_sha, ARP_HLEN); memcpy(NetArpWaitPacketMAC,
&arp->ar_sha, ARP_HLEN);
net_get_arp_handler()((uchar *)arp, 0, reply_ip_addr, net_get_arp_handler()((uchar *)arp, 0, reply_ip_addr,
0, len); 0, len);
/* modify header, and transmit it */ /* modify header, and transmit it */
memcpy(((struct ethernet_hdr *)NetArpWaitTxPacket)-> memcpy(((struct ethernet_hdr *)NetArpWaitTxPacket)->
et_dest, NetArpWaitPacketMAC, ARP_HLEN); et_dest, &arp->ar_sha, ARP_HLEN);
NetSendPacket(NetArpWaitTxPacket, NetSendPacket(NetArpWaitTxPacket,
NetArpWaitTxPacketSize); NetArpWaitTxPacketSize);

View File

@ -40,22 +40,18 @@ static void set_icmp_header(uchar *pkt, IPaddr_t dest)
static int ping_send(void) static int ping_send(void)
{ {
static uchar mac[6];
uchar *pkt; uchar *pkt;
int eth_hdr_size; int eth_hdr_size;
/* XXX always send arp request */ /* XXX always send arp request */
memcpy(mac, NetEtherNullAddr, 6);
debug("sending ARP for %pI4\n", &NetPingIP); debug("sending ARP for %pI4\n", &NetPingIP);
NetArpWaitPacketIP = NetPingIP; NetArpWaitPacketIP = NetPingIP;
NetArpWaitPacketMAC = mac;
pkt = NetArpWaitTxPacket; eth_hdr_size = NetSetEther(NetArpWaitTxPacket, NetEtherNullAddr,
eth_hdr_size = NetSetEther(pkt, mac, PROT_IP); PROT_IP);
pkt += eth_hdr_size; pkt = NetArpWaitTxPacket + eth_hdr_size;
set_icmp_header(pkt, NetPingIP); set_icmp_header(pkt, NetPingIP);