Add counters for MPTP buffers and syscalls.
[swifty.git] / src / raw / swift_raw_simple_test.c
1 /*
2  * Simple test for raw socket based implementation of swift socket API.
3  *
4  * 2011, Razvan Deaconescu, razvan.deaconescu@cs.pub.ro
5  */
6
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include <sys/types.h>
11 #include <arpa/inet.h>
12
13 #include "swift_types.h"
14 #include "swift_raw.h"
15 #include "debug.h"
16 #include "util.h"
17
18 static void usage(const char *argv0)
19 {
20         fprintf(stderr, "Usage: %s local_address swift_hash [remote_address]\n", argv0);
21 }
22
23 /*
24  * Create a socket, bind it and send data.
25  */
26 int main(int argc, char *argv[])
27 {
28         int sockfd;
29         struct sockaddr_sw local_addr;
30         struct sockaddr_sw remote_addr;
31         char buffer[BUFSIZ];
32         ssize_t bytes_sent;
33         int rc;
34
35         if (argc != 3 && argc != 4) {
36                 usage(argv[0]);
37                 exit(EXIT_FAILURE);
38         }
39
40         sockfd = sw_socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
41         DIE(sockfd < 0, "sw_socket");
42
43         memset(&local_addr, 0, sizeof(local_addr));
44         inet_pton(AF_INET, argv[1], &local_addr.sin_addr.s_addr);
45         memcpy(&local_addr.sw_hash, argv[2], sizeof(struct sw_hash));
46         rc = sw_bind(sockfd, (struct sockaddr *) &local_addr, sizeof(local_addr));
47         DIE(rc < 0, "sw_bind");
48
49         if (argc > 3) {
50                 inet_pton(AF_INET, argv[3], &remote_addr.sin_addr.s_addr);
51                 memcpy(&remote_addr.sw_hash, argv[2], sizeof(struct sw_hash));
52                 bytes_sent = sw_sendto(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
53                 DIE(bytes_sent < 0, "sw_sendto");
54         }
55
56         return 0;
57 }