From d069796805ad79542fd7e4406d1e9c6d2d8c2ef7 Mon Sep 17 00:00:00 2001 From: Adrian Bondrescu Date: Fri, 1 Jun 2012 00:38:15 +0300 Subject: [PATCH] Add client and server for MPTP measurements. --- test/Makefile | 10 ++++- test/client_time.c | 102 +++++++++++++++++++++++++++++++++++++++++++++ test/server_time.c | 89 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 200 insertions(+), 1 deletion(-) create mode 100644 test/client_time.c create mode 100644 test/server_time.c diff --git a/test/Makefile b/test/Makefile index 3d26703..a7cb85b 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,7 +1,7 @@ CC=gcc CFLAGS=-g -build: client server client_udp server_udp client_lf server_lf +build: client server client_udp server_udp client_lf server_lf client_time server_time client: client.o @@ -15,6 +15,10 @@ client_lf: client_lf.o server_lf: server_lf.o +client_time: client_time.o + +server_time: server_time.o + client.o: client.c server.o: server.c @@ -26,3 +30,7 @@ server_udp.o: server_udp.c client_lf.o: client_lf.c server_lf.o: server_lf.c + +client_time.o: client_time.c + +server_time.o: server_time.c diff --git a/test/client_time.c b/test/client_time.c new file mode 100644 index 0000000..d29b7b3 --- /dev/null +++ b/test/client_time.c @@ -0,0 +1,102 @@ +#include "../src/kernel/swift.h" + +#include +#include +#include +#include +#include +#include +#include + +#define ADDR 0x8082A8C0 +#define DADDR 0x8182A8C0 + +int gen_port() +{ + int ret; + srand(time(NULL)); + ret = (rand() % 255) + 1; + if (ret == 100 || ret == 101) + ret *= 2; + printf("Generated source port %d\n", ret); + return ret; +} + +int main(int argc, const char *argv[]) +{ + int sock; + + sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT); + if (sock < 0) { + perror("Failed to create socket"); + return -1; + } + + int size = sizeof(struct sockaddr_swift) + sizeof(struct swift_dest); + struct sockaddr_swift *saddr = malloc(size); + memset(saddr, 0, size); + + saddr->count = 1; + saddr->dests[0].addr = ADDR; + saddr->dests[0].port = gen_port(); + + if (bind(sock, (struct sockaddr *) saddr, size) < 0) { + perror("Failed to bind socket"); + close(sock); + return -1; + } + + char buf[4096]; + sprintf(buf, "Buffer"); + +#define N 1 + struct iovec iov[N]; + struct msghdr msg; + int size2 = sizeof(struct sockaddr_swift) + N * sizeof(struct swift_dest); + struct sockaddr_swift *to = malloc(size2); + + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + memset(to, 0, size2); + + int i; + for (i = 0; i < N; i++) { + iov[i].iov_base = buf; + iov[i].iov_len = sizeof(buf); + } + + to->count = N; + for (i = 0; i < N; i++) { + to->dests[i].addr = DADDR; + to->dests[i].port = 100; + } + + msg.msg_iov = iov; + msg.msg_iovlen = N; + msg.msg_name = to; + msg.msg_namelen = size2; + + int ret; + + struct timeval tv1, tv2; + gettimeofday(&tv1, NULL); + for (i = 0; i < 10000 / N; i++) { + ret = sendmsg(sock, &msg, sizeof(msg)); + if (ret < 0) { + perror("Failed to send on socket"); + return -1; + } + } + gettimeofday(&tv2, NULL); + + printf("diff=%ld\n", (tv2.tv_sec - tv1.tv_sec) * 1000 + (tv2.tv_usec - tv1.tv_usec) / 1000); + + if (close(sock) < 0) { + perror("Failed to close socket"); + return -1; + } + + free(saddr); + free(to); + return 0; +} diff --git a/test/server_time.c b/test/server_time.c new file mode 100644 index 0000000..83787d8 --- /dev/null +++ b/test/server_time.c @@ -0,0 +1,89 @@ +#include "../src/kernel/swift.h" + +#include +#include +#include +#include +#include +#include + +#define ADDR 0x8182A8C0 +#define NUM_BUF 10 + +int main(int argc, const char *argv[]) +{ + int sock; + int i; + + if (argc != 2) { + fprintf(stderr, "USAGE: %s listening_port\n", argv[0]); + return -1; + } + + sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT); + if (sock < 0) { + perror("Failed to create socket"); + return -1; + } + + int size = sizeof(struct sockaddr_swift) + sizeof(struct swift_dest); + struct sockaddr_swift *saddr = malloc(size); + memset(saddr, 0, size); + + saddr->count = 1; + saddr->dests[0].addr = ADDR; + saddr->dests[0].port = atoi(argv[1]); + + if (bind(sock, (struct sockaddr *) saddr, size) < 0) { + perror("Failed to bind socket"); + close(sock); + return -1; + } + +#define N 1 + char buf[N][4096]; + struct iovec iov[N]; + struct msghdr msg; + size += (N - 1) * sizeof(struct swift_dest); + struct sockaddr_swift *from = malloc(size); + + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(iov)); + memset(from, 0, size); + + for (i = 0; i < N; i++) { + iov[i].iov_base = buf[i]; + iov[i].iov_len = sizeof(buf[i]); + } + + msg.msg_iov = iov; + msg.msg_iovlen = N; + msg.msg_name = from; + msg.msg_namelen = size; + + int ret, fromlen; + +#define COUNT (10000/(N)) + + for (i = 0; i < COUNT; i++) { + ret = recvmsg(sock, &msg, 0); + if (ret < 0) { + perror("Failed to recv on socket"); + return -1; + } + if (i % (COUNT/50) == 0) + printf("%d\n", i); + } + + printf("Received %d bytes on socket\n", ret); + + if (close(sock) < 0) { + perror("Failed to close socket"); + return -1; + } + + free(saddr); + free(from); + + return 0; +} -- 2.20.1