aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet_traceroute.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglouglou/libggnet_traceroute.c')
-rw-r--r--libglouglou/libggnet_traceroute.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libglouglou/libggnet_traceroute.c b/libglouglou/libggnet_traceroute.c
index 0c18d9f..352cb0b 100644
--- a/libglouglou/libggnet_traceroute.c
+++ b/libglouglou/libggnet_traceroute.c
@@ -259,6 +259,10 @@ ggnet_traceroute_report(struct ggnet_traceroute_req *req) {
#define left (sizeof(report) - (p - report))
p = report;
+ if (req->hopcount != 0)
+ p += (u_char)snprintf(p, left, "%d hops\n", req->hopcount);
+ else
+ p += (u_char)snprintf(p, left, "target not answering\n");
TAILQ_FOREACH(hop, &req->hops_list, entry) {
p += (u_char)snprintf(p, left, "%.2d: %s %s %.2f [XXX %p]\n", hop->ttl, addr_ntoa(&hop->ip), hop->answer, hop->delay, hop);
}
@@ -536,6 +540,7 @@ _hop_sport(struct ggnet_traceroute_req *req, int sport)
/**
* Returns the target hop, and clean the hops_list before calling user callback
+ * Also sets the hopcount
*/
static struct ggnet_traceroute_hop *
_hop_last(struct ggnet_traceroute_req *req)
@@ -543,13 +548,16 @@ _hop_last(struct ggnet_traceroute_req *req)
struct ggnet_traceroute_hop *h, *ht;
struct ggnet_traceroute_hop *last = NULL;
int found = 0;
+ int count = 0;
TAILQ_FOREACH_SAFE(h, &req->hops_list, entry, ht) {
+ count++;
if (found)
TAILQ_REMOVE(&req->hops_list, h, entry);
else if (addr_cmp(&h->ip, &req->target->ip) == 0) {
last = h;
found = 1;
+ req->hopcount = count;
}
}