diff options
Diffstat (limited to 'net/lwip/ping.c')
-rw-r--r-- | net/lwip/ping.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/lwip/ping.c b/net/lwip/ping.c index 200a702bbb5..d8042ceecf9 100644 --- a/net/lwip/ping.c +++ b/net/lwip/ping.c @@ -121,7 +121,7 @@ static int ping_loop(struct udevice *udev, const ip_addr_t *addr) netif = net_lwip_new_netif(udev); if (!netif) - return CMD_RET_FAILURE; + return -ENODEV; printf("Using %s device\n", udev->name); @@ -168,10 +168,13 @@ int do_ping(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) if (!ipaddr_aton(argv[1], &addr)) return CMD_RET_USAGE; - net_lwip_set_current(); - - if (ping_loop(eth_get_dev(), &addr) < 0) - return CMD_RET_FAILURE; +restart: + if (net_lwip_eth_start() < 0 || ping_loop(eth_get_dev(), &addr) < 0) { + if (net_start_again() == 0) + goto restart; + else + return CMD_RET_FAILURE; + } return CMD_RET_SUCCESS; } |