net: ping: reset stored IP once the command finishes to avoid interrupting other... 69/228769/1
authorMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 25 Mar 2020 09:08:16 +0000 (10:08 +0100)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 25 Mar 2020 09:27:52 +0000 (10:27 +0100)
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.szyprowski@samsung.com>
Change-Id: I0d90b3a6e9481c8e8237874eff8a9a12df4190e0

net/ping.c

index 633c942e67839f3157790ef3bd0001ac568d7df3..d912e3da3d0bcbcacdabb11e068b7effb040ae0c 100644 (file)
@@ -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);