[PATCH] net: ping: reset stored IP once the command finishes

Marek Szyprowski m.szyprowski at samsung.com
Wed Mar 25 14:42:00 CET 2020


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 at 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



More information about the U-Boot mailing list