2 * Test sendto "syscall".
10 #include <sys/socket.h>
11 #include <netinet/in.h>
14 #include "swift_types.h"
22 static void sendto_dummy(void);
23 static void sendto_invalid_descriptor(void);
24 static void sendto_descriptor_is_not_socket(void);
25 static void sendto_socket_is_not_bound(void);
26 static void sendto_ok(void);
28 // Additional function
29 static void fill_sockaddr_sw(struct sockaddr_sw *local_addr, struct sockaddr_sw *remote_addr, char * local_address, char * hash, char * dest_address);
31 void sendto_test_suite(void)
36 sendto_invalid_descriptor();
37 sendto_descriptor_is_not_socket();
38 sendto_socket_is_not_bound();
42 static void sendto_dummy(void)
47 static void sendto_invalid_descriptor()
49 struct sockaddr_sw local_addr;
50 struct sockaddr_sw remote_addr;
54 fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
55 bytes_sent = sendto(-1, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
57 test(bytes_sent < 0 && errno == EBADF);
60 static void sendto_descriptor_is_not_socket(void)
62 struct sockaddr_sw local_addr;
63 struct sockaddr_sw remote_addr;
67 fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
68 bytes_sent = sendto(1, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
70 test(bytes_sent < 0 && errno == ENOTSOCK);
73 static void sendto_socket_is_not_bound(void)
76 struct sockaddr_sw local_addr;
77 struct sockaddr_sw remote_addr;
81 sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
82 DIE(sockfd < 0, "socket");
84 fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
85 bytes_sent = sendto(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
87 test( bytes_sent < 0 && errno == EAFNOSUPPORT );
90 static void sendto_ok(void)
93 struct sockaddr_sw local_addr;
94 struct sockaddr_sw remote_addr;
99 fill_sockaddr_sw(&local_addr, &remote_addr, "127.0.0.1", "myHash", "127.0.0.1");
101 sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_SWIFT);
102 DIE(sockfd < 0, "socket");
104 rc = bind(sockfd, (struct sockaddr *) &local_addr, sizeof(local_addr));
107 bytes_sent = sendto(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
110 test( bytes_sent >= 0 );
114 static void fill_sockaddr_sw(struct sockaddr_sw *local_addr, struct sockaddr_sw *remote_addr, char * local_address, char * hash, char * dest_address)
116 inet_pton(PF_INET, local_address, &(local_addr->sin_addr));
117 memcpy(&local_addr->sw_hash, hash, sizeof(struct sw_hash));
119 inet_pton(PF_INET, dest_address, &(remote_addr->sin_addr));
120 memcpy(&remote_addr->sw_hash, hash, sizeof(struct sw_hash));