]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - net/ping.c
net: dns: fix for DNS queries sent to the wrong MAC address
[karo-tx-uboot.git] / net / ping.c
index 939f8ff6fcea85a2f5598c63640dda12e02e06cb..0710b9228d1ea9318901faaf56fdfe4ef68743e3 100644 (file)
@@ -40,22 +40,17 @@ 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);
+       debug_cond(DEBUG_DEV_PKT, "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(NetTxPacket, NetEtherNullAddr, PROT_IP);
+       pkt = (uchar *)NetTxPacket + eth_hdr_size;
 
        set_icmp_header(pkt, NetPingIP);
 
@@ -72,23 +67,13 @@ static int ping_send(void)
 static void ping_timeout(void)
 {
        eth_halt();
-       NetState = NETLOOP_FAIL;        /* we did not get the reply */
-}
-
-static void ping_handler(uchar *pkt, unsigned dest, IPaddr_t sip,
-           unsigned src, unsigned len)
-{
-       if (sip != NetPingIP)
-               return;
-
-       NetState = NETLOOP_SUCCESS;
+       net_set_state(NETLOOP_FAIL);    /* we did not get the reply */
 }
 
 void ping_start(void)
 {
        printf("Using %s device\n", eth_get_name());
        NetSetTimeout(10000UL, ping_timeout);
-       NetSetHandler(ping_handler);
 
        ping_send();
 }
@@ -97,23 +82,19 @@ 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:
-               /*
-                * IP header OK.  Pass the packet to the
-                * current handler.
-                */
-               /* XXX point to ip packet */
                src_ip = NetReadIP((void *)&ip->ip_src);
-               NetGetHandler()((uchar *)ip, 0, src_ip, 0, 0);
+               if (src_ip == NetPingIP)
+                       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_cond(DEBUG_DEV_PKT, "Got ICMP ECHO REQUEST, return "
+                       "%d bytes\n", eth_hdr_size + len);
 
                ip->ip_sum = 0;
                ip->ip_off = 0;
@@ -126,8 +107,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);
-               (void) eth_send((uchar *)et,
-                               ETHER_HDR_SIZE + len);
+               NetSendPacket((uchar *)et, eth_hdr_size + len);
                return;
 /*     default:
                return;*/