#include #include #include "internal/output.h" #include "internal/stats.h" #include "internal/tracker.h" /* Forward declarations */ static void print_loss_line(size_t sent, size_t ok_recv, size_t errors); static void print_rtt_line(const t_ping_stats *stats); /* -------------------- */ void ping_output_summary(const t_ping_state *state, struct in_addr dest) { char dest_str[INET_ADDRSTRLEN]; size_t sent; size_t errors; size_t ok_recv; inet_ntop(AF_INET, &dest, dest_str, sizeof(dest_str)); sent = state->tracker->nb_sent; errors = state->nb_errors; ok_recv = state->tracker->nb_recv - errors; printf("--- %s ping statistics ---\n", dest_str); print_loss_line(sent, ok_recv, errors); if (0 < ok_recv) print_rtt_line(state->stats); } static void print_loss_line(size_t sent, size_t ok_recv, size_t errors) { int loss_pct; loss_pct = (0 < sent) ? (int)((sent - ok_recv) * 100 / sent) : 0; if (0 < errors) printf("%zu packets transmitted, %zu received, +%zu errors," " %d%% packet loss\n", sent, ok_recv, errors, loss_pct); else printf("%zu packets transmitted, %zu received, %d%% packet loss\n", sent, ok_recv, loss_pct); } static void print_rtt_line(const t_ping_stats *stats) { double min_ms; double max_ms; double avg_ms; double mdev_ms; ping_stats_get(stats, &min_ms, &max_ms, &avg_ms, &mdev_ms); printf("round-trip min/avg/max/mdev = %.3f/%.3f/%.3f/%.3f ms\n", min_ms, avg_ms, max_ms, mdev_ms); }