diff options
author | Michael Brown | 2014-10-23 16:04:10 +0200 |
---|---|---|
committer | Michael Brown | 2014-10-23 16:04:10 +0200 |
commit | d1afe731eae1f0f97238de5213df1610d0ccf4ed (patch) | |
tree | 1f33ce9929a4373a6a8a3a38a69d0cb91d06aa84 /src/core/pinger.c | |
parent | [efi] Include NII driver within "snp" and "snponly" build targets (diff) | |
download | ipxe-d1afe731eae1f0f97238de5213df1610d0ccf4ed.tar.gz ipxe-d1afe731eae1f0f97238de5213df1610d0ccf4ed.tar.xz ipxe-d1afe731eae1f0f97238de5213df1610d0ccf4ed.zip |
[ping] Report timed-out pings via the callback function
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core/pinger.c')
-rw-r--r-- | src/core/pinger.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/core/pinger.c b/src/core/pinger.c index c912a64d..0312ff38 100644 --- a/src/core/pinger.c +++ b/src/core/pinger.c @@ -68,10 +68,12 @@ struct pinger { size_t len; /** Current sequence number */ uint16_t sequence; + /** Response for current sequence number is still pending */ + int pending; /** Callback function * - * @v src Source socket address + * @v src Source socket address, or NULL * @v sequence Sequence number * @v len Payload length * @v rc Status code @@ -159,6 +161,11 @@ static void pinger_expired ( struct retry_timer *timer, int over __unused ) { struct io_buffer *iobuf; 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 */ pinger->sequence++; @@ -205,6 +212,10 @@ static int pinger_deliver ( struct pinger *pinger, struct io_buffer *iobuf, uint16_t sequence = meta->offset; int rc; + /* Clear response pending flag, if applicable */ + if ( sequence == pinger->sequence ) + pinger->pending = 0; + /* Check for errors */ if ( len != pinger->len ) { DBGC ( pinger, "PINGER %p received incorrect length %zd " |