From 2164c4ce67acde4282a579937a784647b66f4d72 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Thu, 4 Aug 2016 16:59:31 +0200 Subject: tools: oping: Fix division by zero When killing the oping client before it sent an SDU, some bad operations were being performed. --- src/tools/oping/oping_client.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) (limited to 'src/tools') diff --git a/src/tools/oping/oping_client.c b/src/tools/oping/oping_client.c index 23a57549..7693ce41 100644 --- a/src/tools/oping/oping_client.c +++ b/src/tools/oping/oping_client.c @@ -212,16 +212,21 @@ int client_main() printf("--- %s ping statistics ---\n", client.s_apn); printf("%d SDU's transmitted, ", client.sent); printf("%d received, ", client.rcvd); - printf("%d%% packet loss, ", 100 - ((100 * client.rcvd) / client.sent)); + printf("%d%% packet loss, ", client.sent == 0 ? 0 : + 100 - ((100 * client.rcvd) / client.sent)); printf("time: %.3f ms\n", ts_diff_us(&tic, &toc) / 1000.0); - printf("rtt min/avg/max/mdev = %.3f/%.3f/%.3f/", - client.rtt_min, - client.rtt_avg, - client.rtt_max); - client.rcvd > 1 ? - printf("%.3f ms\n", - sqrt(client.rtt_m2 / (float) (client.rcvd - 1))) : - printf("Nan ms\n"); + + if (client.rcvd > 0) { + printf("rtt min/avg/max/mdev = %.3f/%.3f/%.3f/", + client.rtt_min, + client.rtt_avg, + client.rtt_max); + if (client.rcvd > 1) + printf("%.3f ms\n", + sqrt(client.rtt_m2 / (float) (client.rcvd - 1))); + else + printf("NaN ms\n"); + } pthread_mutex_lock(&client.lock); free(client.times); -- cgit v1.2.3 From 25c356b9ba9d91b4a291e3adad050d8ea85eb3e2 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Thu, 4 Aug 2016 17:10:05 +0200 Subject: tools: cbr: Fix options The server apn is a client-only option. Also fixes some indentation. --- src/tools/cbr/cbr.c | 2 +- src/tools/cbr/cbr_server.c | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src/tools') diff --git a/src/tools/cbr/cbr.c b/src/tools/cbr/cbr.c index ab178ca3..0cce50db 100644 --- a/src/tools/cbr/cbr.c +++ b/src/tools/cbr/cbr.c @@ -46,13 +46,13 @@ static void usage(void) printf("Usage: cbr [OPTION]...\n" "Sends SDU's from client to server at a constant bit rate.\n\n" " -l, --listen Run in server mode\n" - " -n, --server_apn Specify the name of the server.\n" "\n" "Server options:\n" " -i, --interval Server report interval (s)\n" " -t, --timeout Server timeout interval (s)\n" "\n" "Client options:\n" + " -n, --server_apn Specify the name of the server.\n" " -d, --duration Duration for sending (s)\n" " -f, --flood Send SDU's as fast as possible\n" " -s, --size SDU size (B)\n" diff --git a/src/tools/cbr/cbr_server.c b/src/tools/cbr/cbr_server.c index 9c6ac7f1..1890c842 100644 --- a/src/tools/cbr/cbr_server.c +++ b/src/tools/cbr/cbr_server.c @@ -24,7 +24,7 @@ #include #ifdef __FreeBSD__ -#define __XSI_VISIBLE +#define __XSI_VISIBLE 500 #endif #include @@ -112,13 +112,13 @@ void handle_flow(int fd) printf("Flow %4d: %9ld SDUs (%12ld bytes) in %9ld ms" " => %9.4f p/s, %9.4f Mb/s\n", fd, - sdus-sdus_intv, - bytes_read-bytes_read_intv, + sdus - sdus_intv, + bytes_read - bytes_read_intv, us / 1000, - ((sdus-sdus_intv) / (float) us) * MILLION, - 8 * (bytes_read-bytes_read_intv) + ((sdus - sdus_intv) / (float) us) * MILLION, + 8 * (bytes_read - bytes_read_intv) / (float)(us)); - iv_start=iv_end; + iv_start = iv_end; sdus_intv = sdus; bytes_read_intv = bytes_read; ts_add(&iv_start, &intv, &iv_end); @@ -134,13 +134,13 @@ void * worker(void * o) pthread_mutex_lock(&fds_lock); pthread_cleanup_push((void(*)(void *)) pthread_mutex_unlock, (void *) &fds_lock); - while (fds[fds_index] == -1) { + while (fds[fds_index] == -1) pthread_cond_wait(&fds_signal, &fds_lock); - } cli_fd = fds[fds_index]; fds[fds_index] = -1; - pthread_cleanup_pop(1); + + pthread_cleanup_pop(true); handle_flow(cli_fd); -- cgit v1.2.3