diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2015-06-05 15:58:00 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2016-06-25 16:48:39 +0200 |
commit | 99d303ac2739e65a02fbbc325b74ad6fcac63cc2 (patch) | |
tree | 6f4095f42d3d298cdd5ab8bc6f8ed89d9673b38b /contrib/stress-testing/peg.c | |
download | wireguard-monolithic-historical-99d303ac2739e65a02fbbc325b74ad6fcac63cc2.tar.xz wireguard-monolithic-historical-99d303ac2739e65a02fbbc325b74ad6fcac63cc2.zip |
Initial commit
Diffstat (limited to 'contrib/stress-testing/peg.c')
-rw-r--r-- | contrib/stress-testing/peg.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/contrib/stress-testing/peg.c b/contrib/stress-testing/peg.c new file mode 100644 index 0000000..6b539fa --- /dev/null +++ b/contrib/stress-testing/peg.c @@ -0,0 +1,50 @@ +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <net/if.h> +#include <netinet/in.h> +#include <linux/limits.h> +#include <time.h> +#include <stdio.h> +#include <string.h> + +static unsigned long long interface_tx_bytes(const char *interface) +{ + char buf[PATH_MAX]; + FILE *f; + unsigned long long ret; + snprintf(buf, PATH_MAX - 1, "/sys/class/net/%s/statistics/tx_bytes", interface); + f = fopen(buf, "r"); + fscanf(f, "%llu", &ret); + fclose(f); + return ret; +} + +int main(int argc, char *argv[]) +{ + char buf[1500] = { 0 }; + unsigned long long before, after, i; + struct timespec begin, end; + double elapsed; + struct ifreq req; + int fd = socket(AF_INET, SOCK_DGRAM, 0); + struct sockaddr_in addr = { + .sin_family = AF_INET, + .sin_port = htons(7271), + .sin_addr = inet_addr(argv[3]) + }; + strcpy(req.ifr_name, argv[1]); + ioctl(fd, SIOCGIFMTU, &req); + + connect(fd, (struct sockaddr *)&addr, sizeof(addr)); + + before = interface_tx_bytes(argv[2]); + clock_gettime(CLOCK_MONOTONIC, &begin); + for (i = 0; i < 10000000; ++i) + send(fd, buf, req.ifr_mtu - 28, 0); + clock_gettime(CLOCK_MONOTONIC, &end); + after = interface_tx_bytes(argv[2]); + elapsed = end.tv_sec - begin.tv_sec + (end.tv_nsec - begin.tv_nsec) / 1000000000.0; + + printf("%.4f mbps\n", ((after - before) * 8) / elapsed / 1000000.0); + return 0; +} |