diff options
| -rw-r--r-- | net/arp.c | 9 | ||||
| -rw-r--r-- | net/ping.c | 10 | 
2 files changed, 8 insertions, 11 deletions
| @@ -170,7 +170,7 @@ void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *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,15 +189,16 @@ void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *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);  			net_get_arp_handler()((uchar *)arp, 0, reply_ip_addr,  				0, len);  			/* modify header, and transmit it */  			memcpy(((struct ethernet_hdr *)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 71246de5f..068aa96a7 100644 --- a/net/ping.c +++ b/net/ping.c @@ -40,22 +40,18 @@ static void set_icmp_header(uchar *pkt, IPaddr_t dest)  static int ping_send(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;  	set_icmp_header(pkt, NetPingIP); |