[batctl] Prevent division by zero when no packets were send
Commit Message
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(-)
@@ -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));