Reset stored ping IP address before leaving the netloop to ensure that
the subsequent calls to the netloop, especially for the other protocols,
won't be interrupted by the received ICMP_ECHO_REPLY packet.

Signed-off-by: Marek Szyprowski <m.szyprow...@samsung.com>
---
 net/ping.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/net/ping.c b/net/ping.c
index 633c942..d912e3d 100644
--- a/net/ping.c
+++ b/net/ping.c
@@ -63,6 +63,7 @@ static int ping_send(void)
 static void ping_timeout_handler(void)
 {
        eth_halt();
+       net_ping_ip.s_addr = 0;
        net_set_state(NETLOOP_FAIL);    /* we did not get the reply */
 }
 
@@ -84,8 +85,10 @@ void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr 
*ip, int len)
        switch (icmph->type) {
        case ICMP_ECHO_REPLY:
                src_ip = net_read_ip((void *)&ip->ip_src);
-               if (src_ip.s_addr == net_ping_ip.s_addr)
+               if (src_ip.s_addr == net_ping_ip.s_addr) {
+                       net_ping_ip.s_addr = 0;
                        net_set_state(NETLOOP_SUCCESS);
+               }
                return;
        case ICMP_ECHO_REQUEST:
                eth_hdr_size = net_update_ether(et, et->et_src, PROT_IP);
-- 
1.9.1

Reply via email to