@@ -72,7 +72,7 @@ int ping(int argc, char **argv)
fd_set read_socket;
int ret = EXIT_FAILURE, ping_fd = 0, res, optchar, found_args = 1;
int loop_count = -1, loop_interval = 1, timeout = 1;
- unsigned int seq_counter = 0, packets_out = 0, packets_in = 0;
+ unsigned int seq_counter = 0, packets_out = 0, packets_in = 0, packets_loss;
char *dst_string, *mac_string;
double time_delta;
float min = 0.0, max = 0.0, avg = 0.0;
@@ -237,9 +237,14 @@ sleep:
}
+ if (packets_out == 0)
+ packets_loss = 0;
+ else
+ packets_loss = ((packets_out - packets_in) * 100) / packets_out;
+
printf("--- %s ping statistics ---\n", dst_string);
printf("%d packets transmitted, %d received, %d%% packet loss\n",
- packets_out, packets_in, (((packets_out - packets_in) * 100) / packets_out));
+ packets_out, packets_in, packets_loss);
printf("rtt min/avg/max/mdev = %.3f/%.3f/%.3f/%.3f ms\n",
min, (packets_in ? (avg / packets_in) : 0.000), max, (max - min));
We will try to print a statistic even when we receive a sigterm or sigint before we send any data or started to count the send data. This means that the we try to calculate the data loss by dividing through zero as it is the number of send packets. This is not possible and we must check for that corner case. Signed-off-by: Sven Eckelmann <sven.eckelmann@gmx.de> --- batctl/ping.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-)