esp-idf: Add socket support for esp-idf platform (#1364)

Support to get/set recv_buf_size/send_buf_size/reuse_port/reuse_addr for wasm app
Add socket APIs for esp-idf platform
Add setsockopt for linux-sgx platform
This commit is contained in:
dongheng
2022-11-02 18:02:58 +08:00
committed by GitHub
parent 3b4033aceb
commit 9ba8c8957d
5 changed files with 523 additions and 0 deletions

View File

@ -1062,6 +1062,70 @@ wasi_ssp_sock_connect(
__wasi_fd_t fd, __wasi_addr_t *addr
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_get_recv_buf_size(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, __wasi_size_t *size
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_get_reuse_addr(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, uint8_t *reuse
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_get_reuse_port(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, uint8_t *reuse
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_get_send_buf_size(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, __wasi_size_t *size
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_set_recv_buf_size(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, __wasi_size_t size
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_set_reuse_addr(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, uint8_t reuse
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_set_reuse_port(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, uint8_t reuse
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_set_send_buf_size(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, __wasi_size_t size
) __attribute__((__warn_unused_result__));
__wasi_errno_t
wasi_ssp_sock_listen(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)

View File

@ -3149,6 +3149,115 @@ wasi_ssp_sock_connect(
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_get_recv_buf_size(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, __wasi_size_t *size)
{
struct fd_object *fo;
int ret;
__wasi_errno_t error = fd_object_get(curfds, &fo, fd, 0, 0);
if (error != __WASI_ESUCCESS)
return error;
int optval;
socklen_t optlen = sizeof(optval);
ret = getsockopt(fd_number(fo), SOL_SOCKET, SO_RCVBUF, &optval, &optlen);
fd_object_release(fo);
if (BHT_OK != ret) {
return convert_errno(errno);
}
*size = optval;
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_get_reuse_addr(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, uint8_t *reuse)
{
struct fd_object *fo;
int ret;
__wasi_errno_t error = fd_object_get(curfds, &fo, fd, 0, 0);
if (error != __WASI_ESUCCESS)
return error;
int optval;
socklen_t optlen = sizeof(optval);
ret = getsockopt(fd_number(fo), SOL_SOCKET, SO_REUSEADDR, &optval, &optlen);
fd_object_release(fo);
if (BHT_OK != ret) {
return convert_errno(errno);
}
*reuse = optval;
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_get_reuse_port(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, uint8_t *reuse)
{
struct fd_object *fo;
int ret;
__wasi_errno_t error = fd_object_get(curfds, &fo, fd, 0, 0);
if (error != __WASI_ESUCCESS)
return error;
int optval;
socklen_t optlen = sizeof(optval);
ret = getsockopt(fd_number(fo), SOL_SOCKET, SO_REUSEPORT, &optval, &optlen);
fd_object_release(fo);
if (BHT_OK != ret) {
return convert_errno(errno);
}
*reuse = optval;
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_get_send_buf_size(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, __wasi_size_t *size)
{
struct fd_object *fo;
int ret;
__wasi_errno_t error = fd_object_get(curfds, &fo, fd, 0, 0);
if (error != __WASI_ESUCCESS)
return error;
int optval;
socklen_t optlen = sizeof(optval);
ret = getsockopt(fd_number(fo), SOL_SOCKET, SO_SNDBUF, &optval, &optlen);
fd_object_release(fo);
if (BHT_OK != ret) {
return convert_errno(errno);
}
*size = optval;
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_listen(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
@ -3219,6 +3328,106 @@ wasi_ssp_sock_open(
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_set_recv_buf_size(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, __wasi_size_t size)
{
struct fd_object *fo;
int ret;
__wasi_errno_t error = fd_object_get(curfds, &fo, fd, 0, 0);
if (error != __WASI_ESUCCESS)
return error;
int optval = size;
ret = setsockopt(fd_number(fo), SOL_SOCKET, SO_RCVBUF, &optval,
sizeof(optval));
fd_object_release(fo);
if (BHT_OK != ret) {
return convert_errno(errno);
}
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_set_reuse_addr(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, uint8_t reuse)
{
struct fd_object *fo;
int ret;
__wasi_errno_t error = fd_object_get(curfds, &fo, fd, 0, 0);
if (error != __WASI_ESUCCESS)
return error;
int optval = reuse;
ret = setsockopt(fd_number(fo), SOL_SOCKET, SO_REUSEADDR, &optval,
sizeof(optval));
fd_object_release(fo);
if (BHT_OK != ret) {
return convert_errno(errno);
}
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_set_reuse_port(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, uint8_t reuse)
{
struct fd_object *fo;
int ret;
__wasi_errno_t error = fd_object_get(curfds, &fo, fd, 0, 0);
if (error != __WASI_ESUCCESS)
return error;
int optval = reuse;
ret = setsockopt(fd_number(fo), SOL_SOCKET, SO_REUSEPORT, &optval,
sizeof(optval));
fd_object_release(fo);
if (BHT_OK != ret) {
return convert_errno(errno);
}
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasi_ssp_sock_set_send_buf_size(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)
struct fd_table *curfds,
#endif
__wasi_fd_t fd, __wasi_size_t size)
{
struct fd_object *fo;
int ret;
__wasi_errno_t error = fd_object_get(curfds, &fo, fd, 0, 0);
if (error != __WASI_ESUCCESS)
return error;
int optval = size;
ret = setsockopt(fd_number(fo), SOL_SOCKET, SO_SNDBUF, &optval,
sizeof(optval));
fd_object_release(fo);
if (BHT_OK != ret) {
return convert_errno(errno);
}
return __WASI_ESUCCESS;
}
__wasi_errno_t
wasmtime_ssp_sock_recv(
#if !defined(WASMTIME_SSP_STATIC_CURFDS)