Skip to content

Commit 14dac62

Browse files
committed
Merge wasip{2,3}_udp.c into udp.c
Same as WebAssembly#748, but for UDP
1 parent 6016e71 commit 14dac62

File tree

6 files changed

+51
-39
lines changed

6 files changed

+51
-39
lines changed

libc-bottom-half/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ else()
146146
sources/sockets_utils.c
147147
sources/sockopt.c
148148
sources/tcp.c
149+
sources/udp.c
149150
)
150151
endif()
151152

@@ -156,7 +157,6 @@ if(WASI STREQUAL "p2")
156157
sources/wasip2_file.c
157158
sources/wasip2_file_utils.c
158159
sources/wasip2_stdio.c
159-
sources/wasip2_udp.c
160160
)
161161
endif()
162162

@@ -167,7 +167,6 @@ if (WASI STREQUAL "p3")
167167
sources/wasip3_file.c
168168
sources/wasip3_file_utils.c
169169
sources/wasip3_stdio.c
170-
sources/wasip3_udp.c
171170
)
172171
endif()
173172

libc-bottom-half/headers/private/wasi/sockets_utils.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,13 @@
1111
typedef network_error_code_t sockets_error_code_t;
1212
typedef network_ip_address_family_t sockets_ip_address_family_t;
1313
typedef network_ip_socket_address_t sockets_ip_socket_address_t;
14-
typedef tcp_own_tcp_socket_t sockets_own_tcp_socket_t;
15-
typedef udp_own_udp_socket_t sockets_own_udp_socket_t;
14+
15+
#define sockets_error_code_t network_error_code_t
16+
#define sockets_ip_address_family_t network_ip_address_family_t
17+
#define sockets_ip_socket_address_t network_ip_socket_address_t
18+
19+
#define SOCKETS_IP_ADDRESS_FAMILY_IPV4 NETWORK_IP_ADDRESS_FAMILY_IPV4
20+
#define SOCKETS_IP_ADDRESS_FAMILY_IPV6 NETWORK_IP_ADDRESS_FAMILY_IPV6
1621
#elif defined(__wasip3__)
1722
// already defines `sockets_*` types
1823
#else

libc-bottom-half/headers/private/wasi/udp.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77

88
#include <wasi/sockets_utils.h>
99

10+
// Normalize names on WASIp2 to the WASIp3-based names
11+
#ifdef __wasip2__
12+
typedef udp_own_udp_socket_t sockets_own_udp_socket_t;
13+
typedef udp_borrow_udp_socket_t sockets_borrow_udp_socket_t;
14+
#define sockets_udp_socket_drop_own udp_udp_socket_drop_own
15+
#define sockets_borrow_udp_socket udp_borrow_udp_socket
16+
#endif // __wasip2__
17+
1018
/// Adds the provided UDP socket to the descriptor table, returning the
1119
/// corresponding file descriptor.
1220
int __wasilibc_add_udp_socket(sockets_own_udp_socket_t socket,

libc-bottom-half/sources/tcp.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,9 @@
5656

5757
#define sockets_borrow_tcp_socket tcp_borrow_tcp_socket
5858
#define sockets_borrow_tcp_socket_t tcp_borrow_tcp_socket_t
59-
#define sockets_error_code_t network_error_code_t
60-
#define sockets_ip_address_family_t network_ip_address_family_t
61-
#define sockets_ip_socket_address_t network_ip_socket_address_t
6259
#define sockets_own_tcp_socket_t tcp_own_tcp_socket_t
6360
#define sockets_tcp_socket_drop_own tcp_tcp_socket_drop_own
6461

65-
#define SOCKETS_IP_ADDRESS_FAMILY_IPV4 NETWORK_IP_ADDRESS_FAMILY_IPV4
66-
#define SOCKETS_IP_ADDRESS_FAMILY_IPV6 NETWORK_IP_ADDRESS_FAMILY_IPV6
6762
typedef tcp_duration_t sockets_duration_t;
6863
#endif // __wasip2__
6964

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,18 @@
88
#include <wasi/udp.h>
99
#include <wasi/wasip2.h>
1010

11-
#ifdef __wasip2__
12-
1311
// Pollables here are lazily initialized as-needed.
1412
typedef struct {
13+
#if defined(__wasip2__)
1514
udp_own_incoming_datagram_stream_t incoming;
1615
poll_own_pollable_t incoming_pollable;
1716
udp_own_outgoing_datagram_stream_t outgoing;
1817
poll_own_pollable_t outgoing_pollable;
18+
#elif defined(__wasip3__)
19+
int dummy;
20+
#else
21+
#error "Unsupported WASI version"
22+
#endif
1923
} udp_socket_streams_t;
2024

2125
typedef struct {
@@ -55,22 +59,24 @@ typedef struct {
5559
} udp_socket_state_t;
5660

5761
typedef struct {
58-
udp_own_udp_socket_t socket;
62+
sockets_own_udp_socket_t socket;
63+
#ifdef __wasip2__
5964
// Lazily initialized as-needed pollable.
6065
poll_own_pollable_t socket_pollable;
66+
#endif
6167
bool blocking;
62-
network_ip_address_family_t family;
68+
sockets_ip_address_family_t family;
6369
udp_socket_state_t state;
6470
} udp_socket_t;
6571

6672
static descriptor_vtable_t udp_vtable;
6773

68-
int __wasilibc_add_udp_socket(udp_own_udp_socket_t socket,
69-
network_ip_address_family_t family,
74+
int __wasilibc_add_udp_socket(sockets_own_udp_socket_t socket,
75+
sockets_ip_address_family_t family,
7076
bool blocking) {
7177
udp_socket_t *udp = calloc(1, sizeof(udp_socket_t));
7278
if (!udp) {
73-
udp_udp_socket_drop_own(socket);
79+
sockets_udp_socket_drop_own(socket);
7480
errno = ENOMEM;
7581
return -1;
7682
}
@@ -86,7 +92,7 @@ int __wasilibc_add_udp_socket(udp_own_udp_socket_t socket,
8692
}
8793

8894
static int udp_create_streams(udp_socket_t *socket,
89-
network_ip_socket_address_t *remote_address) {
95+
sockets_ip_socket_address_t *remote_address) {
9096
// Assert that:
9197
// - We're already bound. This is required by WASI.
9298
// - We have no active streams. From WASI:
@@ -96,7 +102,8 @@ static int udp_create_streams(udp_socket_t *socket,
96102
abort();
97103
}
98104

99-
udp_borrow_udp_socket_t socket_borrow = udp_borrow_udp_socket(socket->socket);
105+
sockets_borrow_udp_socket_t socket_borrow =
106+
sockets_borrow_udp_socket(socket->socket);
100107

101108
udp_socket_streams_t *dst;
102109
if (remote_address != NULL) {
@@ -107,7 +114,8 @@ static int udp_create_streams(udp_socket_t *socket,
107114

108115
memset(dst, 0, sizeof(*dst));
109116

110-
network_error_code_t error;
117+
sockets_error_code_t error;
118+
#ifdef __wasip2__
111119
udp_tuple2_own_incoming_datagram_stream_own_outgoing_datagram_stream_t io;
112120
if (!udp_method_udp_socket_stream(socket_borrow, remote_address, &io, &error))
113121
return __wasilibc_socket_error_to_errno(error);
@@ -121,16 +129,22 @@ static int udp_create_streams(udp_socket_t *socket,
121129
socket->state.tag = UDP_SOCKET_STATE_BOUND_STREAMING;
122130
}
123131

124-
return true;
132+
return 0;
133+
#else
134+
errno = ENOTSUP;
135+
return -1;
136+
#endif
125137
}
126138

127139
static void udp_close_streams(udp_socket_streams_t *streams) {
140+
#ifdef __wasip2__
128141
if (streams->incoming_pollable.__handle != 0)
129142
poll_pollable_drop_own(streams->incoming_pollable);
130143
udp_incoming_datagram_stream_drop_own(streams->incoming);
131144
if (streams->outgoing_pollable.__handle != 0)
132145
poll_pollable_drop_own(streams->outgoing_pollable);
133146
udp_outgoing_datagram_stream_drop_own(streams->outgoing);
147+
#endif
134148
}
135149

136150
static void udp_free(void *data) {
@@ -147,9 +161,11 @@ static void udp_free(void *data) {
147161
break;
148162
}
149163

164+
#ifdef __wasip2__
150165
if (udp->socket_pollable.__handle != 0)
151166
poll_pollable_drop_own(udp->socket_pollable);
152-
udp_udp_socket_drop_own(udp->socket);
167+
#endif
168+
sockets_udp_socket_drop_own(udp->socket);
153169

154170
free(udp);
155171
}
@@ -167,6 +183,7 @@ static int udp_fstat(void *data, struct stat *buf) {
167183
return 0;
168184
}
169185

186+
#ifdef __wasip2__
170187
static poll_borrow_pollable_t udp_pollable(udp_socket_t *socket) {
171188
if (socket->socket_pollable.__handle == 0) {
172189
udp_borrow_udp_socket_t socket_borrow =
@@ -194,7 +211,7 @@ udp_outgoing_pollable(udp_socket_streams_t *streams) {
194211
return poll_borrow_pollable(streams->outgoing_pollable);
195212
}
196213

197-
static int udp_handle_error(udp_socket_t *socket, network_error_code_t error) {
214+
static int udp_handle_error(udp_socket_t *socket, sockets_error_code_t error) {
198215
if (error == NETWORK_ERROR_CODE_WOULD_BLOCK && socket->blocking) {
199216
poll_method_pollable_block(udp_pollable(socket));
200217
} else {
@@ -205,13 +222,13 @@ static int udp_handle_error(udp_socket_t *socket, network_error_code_t error) {
205222
}
206223

207224
static int udp_do_bind(udp_socket_t *socket,
208-
network_ip_socket_address_t *address) {
225+
sockets_ip_socket_address_t *address) {
209226
if (socket->state.tag != UDP_SOCKET_STATE_UNBOUND) {
210227
errno = EINVAL;
211228
return -1;
212229
}
213230

214-
network_error_code_t error;
231+
sockets_error_code_t error;
215232
network_borrow_network_t network_borrow =
216233
__wasi_sockets_utils__borrow_network();
217234
udp_borrow_udp_socket_t socket_borrow = udp_borrow_udp_socket(socket->socket);
@@ -838,13 +855,15 @@ static int udp_fcntl_setfl(void *data, int flags) {
838855
}
839856
return 0;
840857
}
858+
#endif
841859

842860
static descriptor_vtable_t udp_vtable = {
843861
.free = udp_free,
844862

845863
.set_blocking = udp_set_blocking,
846864
.fstat = udp_fstat,
847865

866+
#ifdef __wasip2__
848867
.bind = udp_bind,
849868
.connect = udp_connect,
850869
.getsockname = udp_getsockname,
@@ -858,6 +877,5 @@ static descriptor_vtable_t udp_vtable = {
858877

859878
.fcntl_getfl = udp_fcntl_getfl,
860879
.fcntl_setfl = udp_fcntl_setfl,
880+
#endif
861881
};
862-
863-
#endif // __wasip2__

libc-bottom-half/sources/wasip3_udp.c

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)