]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - net/ping.c
net: Add net_update_ether() to handle ARP and Ping replies
[karo-tx-uboot.git] / net / ping.c
index 9c690d8c85f1dbb0ff4e0f4a5af1fdb0de8e269a..71246de5ff87965a9474fc0565b31d73c28617d5 100644 (file)
@@ -87,6 +87,7 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
 {
        struct icmp_hdr *icmph = (struct icmp_hdr *)&ip->udp_src;
        IPaddr_t src_ip;
+       int eth_hdr_size;
 
        switch (icmph->type) {
        case ICMP_ECHO_REPLY:
@@ -95,11 +96,10 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
                        net_set_state(NETLOOP_SUCCESS);
                return;
        case ICMP_ECHO_REQUEST:
-               debug("Got ICMP ECHO REQUEST, return "
-                       "%d bytes\n", ETHER_HDR_SIZE + len);
+               eth_hdr_size = net_update_ether(et, et->et_src, PROT_IP);
 
-               memcpy(&et->et_dest[0], &et->et_src[0], 6);
-               memcpy(&et->et_src[0], NetOurEther, 6);
+               debug("Got ICMP ECHO REQUEST, return "
+                       "%d bytes\n", eth_hdr_size + len);
 
                ip->ip_sum = 0;
                ip->ip_off = 0;
@@ -112,7 +112,7 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
                icmph->checksum = 0;
                icmph->checksum = ~NetCksum((uchar *)icmph,
                        (len - IP_HDR_SIZE) >> 1);
-               NetSendPacket((uchar *)et, ETHER_HDR_SIZE + len);
+               NetSendPacket((uchar *)et, eth_hdr_size + len);
                return;
 /*     default:
                return;*/