[ping] Allow termination after a specified number of packets

Add the "-c <count>" option to the "ping" command, allowing for
automatic termination after a specified number of packets.

When a number of packets is specified:

  - if a serious error (i.e. length mismatch or content mismatch)
    occurs, then the ping will be immediately terminated with the relevant
    status code;

  - if at least one response is received successfully, and all errors
    are non-serious (i.e. timeouts or out-of-sequence responses), then
    the ping will be terminated after the final response (or timeout)
    with a success status;

  - if no responses are received successfully, then the ping will be
    terminated after the final timeout with ETIMEDOUT.

If no number of packets is specified, then the ping will continue
until manually interrupted.

Originally-implemented-by: Cedric Levasseur <cyr-ius@ipocus.net>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2014-10-23 16:30:58 +01:00
parent d1afe731ea
commit 1c34ca70d1
5 changed files with 51 additions and 7 deletions

View File

@@ -15,6 +15,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
extern int create_pinger ( struct interface *job, const char *hostname,
unsigned long timeout, size_t len,
unsigned int count,
void ( * callback ) ( struct sockaddr *peer,
unsigned int sequence,
size_t len,

View File

@@ -11,6 +11,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <stdint.h>
extern int ping ( const char *hostname, unsigned long timeout, size_t len );
extern int ping ( const char *hostname, unsigned long timeout, size_t len,
unsigned int count );
#endif /* _USR_PINGMGMT_H */