From d74d67a0e2d3de0ec208ed9b839815a70d84f727 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Tue, 24 May 2016 20:38:01 +0200 Subject: tools, lib: cbr tool for bandwidth testing The tool sends constant bandwidth traffic between a client and a server. cbr --help for more info. Adds time_utils.h to the library containing useful functions for arithmetic with timespec and timeval structures. --- include/ouroboros/CMakeLists.txt | 1 + include/ouroboros/time_utils.h | 75 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 include/ouroboros/time_utils.h (limited to 'include') diff --git a/include/ouroboros/CMakeLists.txt b/include/ouroboros/CMakeLists.txt index 6e49ee04..245187e9 100644 --- a/include/ouroboros/CMakeLists.txt +++ b/include/ouroboros/CMakeLists.txt @@ -11,6 +11,7 @@ set(HEADER_FILES instance_name.h irm.h qos.h + time_utils.h ) install(FILES ${HEADER_FILES} DESTINATION include/ouroboros) diff --git a/include/ouroboros/time_utils.h b/include/ouroboros/time_utils.h new file mode 100644 index 00000000..d7274c1d --- /dev/null +++ b/include/ouroboros/time_utils.h @@ -0,0 +1,75 @@ +/* + * Ouroboros - Copyright (C) 2016 + * + * Time utilities + * + * Dimitri Staessens + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef OUROBOROS_TIME_UTILS_H +#define OUROBOROS_TIME_UTILS_H + +#ifndef MILLION +#define MILLION 1000000L +#endif + +#ifndef BILLION +#define BILLION 1000000000L +#endif + +#include +#include /* LONG_MAX */ + +/* functions for timespecs */ +#define ts_diff_ns(t0, tx) (((tx)->tv_sec - (t0)->tv_sec) * BILLION \ + + ((tx)->tv_nsec - (t0)->tv_nsec)) +#define ts_diff_us(t0, tx) (((tx)->tv_sec - (t0)->tv_sec) * MILLION \ + + ((tx)->tv_nsec - (t0)->tv_nsec) / 1000L) +#define ts_diff_ms(t0, tx) (((tx)->tv_sec - (t0)->tv_sec) * 1000L \ + + ((tx)->tv_nsec - (t0)->tv_nsec) / MILLION) + +/* functions for timevals are the same */ +#define tv_diff_us(t0, tx) ts_diff_us(t0, tx) +#define tv_diff_ms(t0, tx) ts_diff_ms(t0, tx) + +/* functions for timespecs */ +int ts_add(const struct timespec * t, + const struct timespec * intv, + struct timespec * res); + +int ts_diff(const struct timespec * t, + const struct timespec * intv, + struct timespec * res); + +/* functions for timevals */ +int tv_add(const struct timeval * t, + const struct timeval * intv, + struct timeval * res); + +int tv_diff(const struct timeval * t, + const struct timeval * intv, + struct timeval * res); + +/* copying a timeval into a timespec */ +int tv_to_ts(const struct timeval * src, + struct timespec * dst); + +/* copying a timespec into a timeval (loss of resolution) */ +int ts_to_tv(const struct timespec * src, + struct timeval * dst); + +#endif /* OUROBOROS_TIME_UTILS_H */ -- cgit v1.2.3 From e5f567c7647acefa295850f5ab6ccf2c10329c44 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Tue, 24 May 2016 21:22:51 +0200 Subject: tools: fixes comments on d74d67a --- include/ouroboros/time_utils.h | 11 +++++++---- src/tools/cbr/cbr.c | 9 +++------ src/tools/cbr/cbr_client.c | 2 +- src/tools/cbr/cbr_server.c | 9 ++++++--- 4 files changed, 17 insertions(+), 14 deletions(-) (limited to 'include') diff --git a/include/ouroboros/time_utils.h b/include/ouroboros/time_utils.h index d7274c1d..4b3f3463 100644 --- a/include/ouroboros/time_utils.h +++ b/include/ouroboros/time_utils.h @@ -23,14 +23,17 @@ #ifndef OUROBOROS_TIME_UTILS_H #define OUROBOROS_TIME_UTILS_H -#ifndef MILLION -#define MILLION 1000000L +#ifdef MILLION +#undef MILLION #endif -#ifndef BILLION -#define BILLION 1000000000L +#ifdef BILLION +#undef BILLION #endif +#define MILLION 1000000L +#define BILLION 1000000000L + #include #include /* LONG_MAX */ diff --git a/src/tools/cbr/cbr.c b/src/tools/cbr/cbr.c index 2317cd62..d7077e9c 100644 --- a/src/tools/cbr/cbr.c +++ b/src/tools/cbr/cbr.c @@ -31,10 +31,7 @@ #include #define SERVER_AP_NAME "cbr-server" -#define CLIENT_AP_NAME "echo-client" - -#define MILLION 1000000 -#define BILLION 1000000000 +#define CLIENT_AP_NAME "cbr-client" #define BUF_SIZE 1500 @@ -92,7 +89,7 @@ int main(int argc, char ** argv) duration = strtol(*(++argv), &rem, 10); --argc; } else if (strcmp(*argv, "-s") == 0 || - strcmp(*argv, "--size") == 0) { + strcmp(*argv, "--size") == 0) { size = strtol(*(++argv), &rem, 10); --argc; } else if (strcmp(*argv, "-r") == 0 || @@ -106,7 +103,7 @@ int main(int argc, char ** argv) rate *= BILLION; --argc; } else if (strcmp(*argv, "-l") == 0 || - strcmp(*argv, "--listen") == 0) { + strcmp(*argv, "--listen") == 0) { server = true; } else { usage(); diff --git a/src/tools/cbr/cbr_client.c b/src/tools/cbr/cbr_client.c index 7b8e8b3f..330cfa43 100644 --- a/src/tools/cbr/cbr_client.c +++ b/src/tools/cbr/cbr_client.c @@ -31,7 +31,7 @@ int client_main(int duration, int size, long rate) bool stop = false; char buf[size]; long seqnr = 0; - long long gap = size * 8 * (BILLION / rate); /* ns */ + unsigned long gap = size * 8 * (BILLION / rate); /* ns */ struct timespec start; struct timespec end; diff --git a/src/tools/cbr/cbr_server.c b/src/tools/cbr/cbr_server.c index 14791bd4..553f954d 100644 --- a/src/tools/cbr/cbr_server.c +++ b/src/tools/cbr/cbr_server.c @@ -116,12 +116,15 @@ int server_main() { int server_fd = 0; int client_fd = 0; - char * dif = DIF_NAME; + + char * dif = DIF_NAME; char * client_name = NULL; - int i = 0; + + int i = 0; + pthread_t * threads = malloc(sizeof(*threads) * 10); if (threads == NULL) - exit(1); + EXIT_FAILURE; printf("Server started, interval is %ld s, timeout is %ld s.\n", server_settings.interval, server_settings.timeout); -- cgit v1.2.3 From 6810422ff51834779b384dc0b0c56871b35b1392 Mon Sep 17 00:00:00 2001 From: dimitri staessens Date: Tue, 24 May 2016 22:00:37 +0200 Subject: lib: fixed time difference for timevals the structure is tv->tv_usec, not tv->tv_nsec --- include/ouroboros/time_utils.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/ouroboros/time_utils.h b/include/ouroboros/time_utils.h index 4b3f3463..320cb6f1 100644 --- a/include/ouroboros/time_utils.h +++ b/include/ouroboros/time_utils.h @@ -46,8 +46,10 @@ + ((tx)->tv_nsec - (t0)->tv_nsec) / MILLION) /* functions for timevals are the same */ -#define tv_diff_us(t0, tx) ts_diff_us(t0, tx) -#define tv_diff_ms(t0, tx) ts_diff_ms(t0, tx) +#define tv_diff_us(t0, tx) (((tx)->tv_sec - (t0)->tv_sec) * MILLION \ + + ((tx)->tv_usec - (t0)->tv_usec) / 1000L) +#define tv_diff_ms(t0, tx) (((tx)->tv_sec - (t0)->tv_sec) * 1000L \ + + ((tx)->tv_usec - (t0)->tv_usec) / MILLION) /* functions for timespecs */ int ts_add(const struct timespec * t, -- cgit v1.2.3