From af0ccf48b7c9e7cdc94af4552cee76fb08c67423 Mon Sep 17 00:00:00 2001 From: GaryOderNichts <12049776+GaryOderNichts@users.noreply.github.com> Date: Thu, 30 Nov 2023 12:22:49 +0100 Subject: [PATCH] nn_nets2: Add somemopt (#338) --- cafe/nn_nets2.def | 2 + include/nn/nets2.h | 8 +++ include/nn/nets2/somemopt.h | 68 +++++++++++++++++++ include/sys/socket.h | 2 +- libraries/wutsocket/somemopt.c | 13 ++++ .../test_compile_headers_list.h | 2 + 6 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 include/nn/nets2.h create mode 100644 include/nn/nets2/somemopt.h create mode 100644 libraries/wutsocket/somemopt.c diff --git a/cafe/nn_nets2.def b/cafe/nn_nets2.def index fcbbf12a..a995d5a4 100644 --- a/cafe/nn_nets2.def +++ b/cafe/nn_nets2.def @@ -11,4 +11,6 @@ icmp_close_handle icmp_create_handle icmp_last_code_type icmp_ping + +:TEXT_WRAP somemopt diff --git a/include/nn/nets2.h b/include/nn/nets2.h new file mode 100644 index 00000000..8c26f84d --- /dev/null +++ b/include/nn/nets2.h @@ -0,0 +1,8 @@ +#pragma once + +/** + * \defgroup nn_nets2 nn_nets2 + * Network functions 2. + */ + +#include diff --git a/include/nn/nets2/somemopt.h b/include/nn/nets2/somemopt.h new file mode 100644 index 00000000..7105c3eb --- /dev/null +++ b/include/nn/nets2/somemopt.h @@ -0,0 +1,68 @@ +#pragma once +#include + +/** + * \defgroup nn_nets2_somemopt + * \ingroup nn_nets2 + * User provided socket memory options. + * @{ + */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum SOMemOptRequest +{ + //! Initialize buffer managment from user-provided buffer. + //! This is a blocking request, which only returns once nsysnet is shut down/the application quits. + SOMEMOPT_REQUEST_INIT = 1, + //! Return the amount of bytes used for buffer management. + SOMEMOPT_REQUEST_GET_BYTES_USED = 2, + //! Wait for buffer management initialization to be done. + SOMEMOPT_REQUEST_WAIT_FOR_INIT = 3, + //! Cancel pending wait for init. + SOMEMOPT_REQUEST_CANCEL_WAIT = 4, +} SOMemOptRequest; + +typedef enum SOMemOptFlags +{ + SOMEMOPT_FLAGS_NONE = 0, + //! Changes the distribution between small and big buffers to 50-50 instead of 80-20. + SOMEMOPT_FLAGS_BIG_BUFFERS = 1 << 0, +} SOMemOptFlags; + +/** + * Perform a somemopt request. + * + * \param request + * The request to perform. + * + * \param buffer + * A 0x40 aligned buffer for \link SOMEMOPT_REQUEST_INIT \endlink. + * + * \param size + * The size of the buffer for \link SOMEMOPT_REQUEST_INIT \endlink. + * Minimum size is \c 0x20000 bytes, maximum size is \c 0x300000. + * + * \param flags + * A combination of flags. + * + * \return + * -1 on error. + */ +int +somemopt(SOMemOptRequest request, + void *buffer, + uint32_t size, + SOMemOptFlags flags); + +int +RPLWRAP(somemopt)(SOMemOptRequest request, + void *buffer, + uint32_t size, + SOMemOptFlags flags); + +#ifdef __cplusplus +} +#endif diff --git a/include/sys/socket.h b/include/sys/socket.h index 1609c596..08161cde 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -51,7 +51,7 @@ #define SO_UNKNOWN101A 0x101A // tcp related #define SO_UNKNOWN101B 0x101B // tcp related #define SO_NOSLOWSTART 0x4000 // disable slowstart -#define SO_RUSRBUF 0x10000 // ? +#define SO_RUSRBUF 0x10000 // enable somemopt provided memory for receive buffer typedef uint32_t socklen_t; typedef uint16_t sa_family_t; diff --git a/libraries/wutsocket/somemopt.c b/libraries/wutsocket/somemopt.c new file mode 100644 index 00000000..866f3556 --- /dev/null +++ b/libraries/wutsocket/somemopt.c @@ -0,0 +1,13 @@ +#include "wut_socket.h" + +#include + +int +somemopt(SOMemOptRequest request, + void *buffer, + uint32_t size, + SOMemOptFlags flags) +{ + int rc = RPLWRAP(somemopt)(request, buffer, size, flags); + return __wut_get_nsysnet_result(NULL, rc); +} diff --git a/tests/test_compile_headers_common/test_compile_headers_list.h b/tests/test_compile_headers_common/test_compile_headers_list.h index 8baeae44..3fdc5b25 100644 --- a/tests/test_compile_headers_common/test_compile_headers_list.h +++ b/tests/test_compile_headers_common/test_compile_headers_list.h @@ -102,6 +102,7 @@ #include #include #include +#include #include #include #include @@ -116,6 +117,7 @@ #include #include #include +#include #include #include #include