Make the tests compilable after the latest API changes.
[swifty.git] / test / client_time.c
1 #include "../src/kernel/mptp.h"
2
3 #include <sys/socket.h>
4 #include <sys/types.h>
5 #include <stdio.h>
6 #include <string.h>
7 #include <netinet/in.h>
8 #include <stdlib.h>
9 #include <time.h>
10
11 #define ADDR 0x8082A8C0
12 #define DADDR 0x8182A8C0
13
14 int gen_port()
15 {
16         int ret;
17         srand(time(NULL));
18         ret = (rand() % 255) + 1;
19         if (ret == 100 || ret == 101)
20                 ret *= 2;
21         printf("Generated source port %d\n", ret);
22         return ret;
23 }
24
25 int main(int argc, const char *argv[])
26 {
27     int sock;
28
29     sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_MPTP);
30     if (sock < 0) {
31         perror("Failed to create socket");
32         return -1;
33     }
34
35     int size = sizeof(struct sockaddr_mptp) + sizeof(struct mptp_dest);
36     struct sockaddr_mptp *saddr = malloc(size);
37     memset(saddr, 0, size);
38
39     saddr->count = 1;
40     saddr->dests[0].addr = ADDR;
41     saddr->dests[0].port = gen_port();
42
43     if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
44         perror("Failed to bind socket");
45         close(sock);
46         return -1;
47     }
48
49     char buf[4096];
50         sprintf(buf, "Buffer");
51
52 #define N 1
53     struct iovec iov[N];
54     struct msghdr msg;
55     int size2 = sizeof(struct sockaddr_mptp) + N * sizeof(struct mptp_dest);
56     struct sockaddr_mptp *to = malloc(size2);
57
58     memset(&msg, 0, sizeof(msg));
59     memset(&iov, 0, sizeof(iov));
60     memset(to, 0, size2);
61
62         int i;
63         for (i = 0; i < N; i++) {
64                 iov[i].iov_base = buf;
65                 iov[i].iov_len = sizeof(buf);
66         }
67
68     to->count = N;
69         for (i = 0; i < N; i++) {
70                 to->dests[i].addr = DADDR;
71                 to->dests[i].port = 100;
72         }
73
74     msg.msg_iov = iov;
75     msg.msg_iovlen = N;
76     msg.msg_name = to;
77     msg.msg_namelen = size2;
78
79     int ret;
80
81         struct timeval tv1, tv2;
82         gettimeofday(&tv1, NULL);
83         for (i = 0; i < 10000 / N; i++) {
84                 ret = sendmsg(sock, &msg, sizeof(msg));
85                 if (ret < 0) {
86                         perror("Failed to send on socket");
87                         return -1;
88                 }
89         }
90         gettimeofday(&tv2, NULL);
91
92         printf("diff=%ld\n", (tv2.tv_sec - tv1.tv_sec) * 1000 + (tv2.tv_usec - tv1.tv_usec) / 1000);
93
94     if (close(sock) < 0) {
95         perror("Failed to close socket");
96         return -1;
97     }
98
99     free(saddr);
100     free(to);
101     return 0;
102 }