mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-11-18 20:10:53 +00:00
ping: add stop function
ping in raw mode does some set up and sets timeout, but clean up procedure is missing. That is needed for case if PING_RESULT() macro is used for application exit. Also implement stop functionality when using sockets. Running ping is stopped when calling ping_init() again. Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> Signed-off-by: Simon Goldschmidt <goldsimon@gmx.de>
This commit is contained in:
parent
36cb95c4d2
commit
4e6dd9c576
@ -268,7 +268,7 @@ ping_thread(void *arg)
|
|||||||
LWIP_ASSERT("setting receive timeout failed", ret == 0);
|
LWIP_ASSERT("setting receive timeout failed", ret == 0);
|
||||||
LWIP_UNUSED_ARG(ret);
|
LWIP_UNUSED_ARG(ret);
|
||||||
|
|
||||||
while (1) {
|
while (ping_target != NULL) {
|
||||||
if (ping_send(s, ping_target) == ERR_OK) {
|
if (ping_send(s, ping_target) == ERR_OK) {
|
||||||
LWIP_DEBUGF( PING_DEBUG, ("ping: send "));
|
LWIP_DEBUGF( PING_DEBUG, ("ping: send "));
|
||||||
ip_addr_debug_print(PING_DEBUG, ping_target);
|
ip_addr_debug_print(PING_DEBUG, ping_target);
|
||||||
@ -285,6 +285,7 @@ ping_thread(void *arg)
|
|||||||
}
|
}
|
||||||
sys_msleep(PING_DELAY);
|
sys_msleep(PING_DELAY);
|
||||||
}
|
}
|
||||||
|
lwip_close(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* PING_USE_SOCKETS */
|
#else /* PING_USE_SOCKETS */
|
||||||
@ -376,16 +377,35 @@ void
|
|||||||
ping_send_now(void)
|
ping_send_now(void)
|
||||||
{
|
{
|
||||||
LWIP_ASSERT("ping_pcb != NULL", ping_pcb != NULL);
|
LWIP_ASSERT("ping_pcb != NULL", ping_pcb != NULL);
|
||||||
|
LWIP_ASSERT("ping_target != NULL", ping_target != NULL);
|
||||||
ping_send(ping_pcb, ping_target);
|
ping_send(ping_pcb, ping_target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ping_raw_stop(void)
|
||||||
|
{
|
||||||
|
sys_untimeout(ping_timeout, ping_pcb);
|
||||||
|
if (ping_pcb != NULL) {
|
||||||
|
raw_remove(ping_pcb);
|
||||||
|
ping_pcb = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* PING_USE_SOCKETS */
|
#endif /* PING_USE_SOCKETS */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize thread (socket mode) or timer (callback mode) to cyclically send pings
|
||||||
|
* to a target.
|
||||||
|
* Running ping is implicitly stopped.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
ping_init(const ip_addr_t* ping_addr)
|
ping_init(const ip_addr_t* ping_addr)
|
||||||
{
|
{
|
||||||
|
LWIP_ASSERT("ping_target != NULL", ping_target != NULL);
|
||||||
ping_target = ping_addr;
|
ping_target = ping_addr;
|
||||||
|
|
||||||
|
ping_stop();
|
||||||
|
|
||||||
#if PING_USE_SOCKETS
|
#if PING_USE_SOCKETS
|
||||||
sys_thread_new("ping_thread", ping_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
sys_thread_new("ping_thread", ping_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
|
||||||
#else /* PING_USE_SOCKETS */
|
#else /* PING_USE_SOCKETS */
|
||||||
@ -393,4 +413,15 @@ ping_init(const ip_addr_t* ping_addr)
|
|||||||
#endif /* PING_USE_SOCKETS */
|
#endif /* PING_USE_SOCKETS */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop sending more pings.
|
||||||
|
*/
|
||||||
|
void ping_stop(void)
|
||||||
|
{
|
||||||
|
#if !PING_USE_SOCKETS
|
||||||
|
ping_raw_stop();
|
||||||
|
#endif /* !PING_USE_SOCKETS */
|
||||||
|
ping_target = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* LWIP_RAW */
|
#endif /* LWIP_RAW */
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ping_init(const ip_addr_t* ping_addr);
|
void ping_init(const ip_addr_t* ping_addr);
|
||||||
|
void ping_stop(void);
|
||||||
|
|
||||||
#if !PING_USE_SOCKETS
|
#if !PING_USE_SOCKETS
|
||||||
void ping_send_now(void);
|
void ping_send_now(void);
|
||||||
|
Loading…
Reference in New Issue
Block a user