mirror of https://github.com/ipxe/ipxe.git
[ping] Report timed-out pings via the callback function
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/32/head
parent
af17abf67f
commit
d1afe731ea
|
@ -68,10 +68,12 @@ struct pinger {
|
||||||
size_t len;
|
size_t len;
|
||||||
/** Current sequence number */
|
/** Current sequence number */
|
||||||
uint16_t sequence;
|
uint16_t sequence;
|
||||||
|
/** Response for current sequence number is still pending */
|
||||||
|
int pending;
|
||||||
|
|
||||||
/** Callback function
|
/** Callback function
|
||||||
*
|
*
|
||||||
* @v src Source socket address
|
* @v src Source socket address, or NULL
|
||||||
* @v sequence Sequence number
|
* @v sequence Sequence number
|
||||||
* @v len Payload length
|
* @v len Payload length
|
||||||
* @v rc Status code
|
* @v rc Status code
|
||||||
|
@ -159,6 +161,11 @@ static void pinger_expired ( struct retry_timer *timer, int over __unused ) {
|
||||||
struct io_buffer *iobuf;
|
struct io_buffer *iobuf;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
/* If no response has been received, notify the callback function */
|
||||||
|
if ( pinger->pending )
|
||||||
|
pinger->callback ( NULL, pinger->sequence, 0, -ETIMEDOUT );
|
||||||
|
pinger->pending = 1;
|
||||||
|
|
||||||
/* Increase sequence number */
|
/* Increase sequence number */
|
||||||
pinger->sequence++;
|
pinger->sequence++;
|
||||||
|
|
||||||
|
@ -205,6 +212,10 @@ static int pinger_deliver ( struct pinger *pinger, struct io_buffer *iobuf,
|
||||||
uint16_t sequence = meta->offset;
|
uint16_t sequence = meta->offset;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
/* Clear response pending flag, if applicable */
|
||||||
|
if ( sequence == pinger->sequence )
|
||||||
|
pinger->pending = 0;
|
||||||
|
|
||||||
/* Check for errors */
|
/* Check for errors */
|
||||||
if ( len != pinger->len ) {
|
if ( len != pinger->len ) {
|
||||||
DBGC ( pinger, "PINGER %p received incorrect length %zd "
|
DBGC ( pinger, "PINGER %p received incorrect length %zd "
|
||||||
|
|
|
@ -36,7 +36,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
/**
|
/**
|
||||||
* Display ping result
|
* Display ping result
|
||||||
*
|
*
|
||||||
* @v src Source socket address
|
* @v src Source socket address, or NULL
|
||||||
* @v sequence Sequence number
|
* @v sequence Sequence number
|
||||||
* @v len Payload length
|
* @v len Payload length
|
||||||
* @v rc Status code
|
* @v rc Status code
|
||||||
|
@ -46,7 +46,7 @@ static void ping_callback ( struct sockaddr *peer, unsigned int sequence,
|
||||||
|
|
||||||
/* Display ping response */
|
/* Display ping response */
|
||||||
printf ( "%zd bytes from %s: seq=%d",
|
printf ( "%zd bytes from %s: seq=%d",
|
||||||
len, sock_ntoa ( peer ), sequence );
|
len, ( peer ? sock_ntoa ( peer ) : "<none>" ), sequence );
|
||||||
if ( rc != 0 )
|
if ( rc != 0 )
|
||||||
printf ( ": %s", strerror ( rc ) );
|
printf ( ": %s", strerror ( rc ) );
|
||||||
printf ( "\n" );
|
printf ( "\n" );
|
||||||
|
|
Loading…
Reference in New Issue