Add client and server for MPTP measurements.
authorAdrian Bondrescu <adi.bondrescu@gmail.com>
Thu, 31 May 2012 21:38:15 +0000 (00:38 +0300)
committerAdrian Bondrescu <adi.bondrescu@gmail.com>
Thu, 31 May 2012 21:38:15 +0000 (00:38 +0300)
test/Makefile
test/client_time.c [new file with mode: 0644]
test/server_time.c [new file with mode: 0644]

index 3d26703..a7cb85b 100644 (file)
@@ -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 (file)
index 0000000..d29b7b3
--- /dev/null
@@ -0,0 +1,102 @@
+#include "../src/kernel/swift.h"
+
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+#include <time.h>
+
+#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 (file)
index 0000000..83787d8
--- /dev/null
@@ -0,0 +1,89 @@
+#include "../src/kernel/swift.h"
+
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <stdio.h>
+#include <string.h>
+#include <netinet/in.h>
+#include <stdlib.h>
+
+#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;
+}