2023-04-15 16:59:44

by Ammar Faizi

[permalink] [raw]
Subject: [RFC PATCH liburing v1 0/2] io_uring sendto

Hi Jens,

There are two patches in this series. The first patch adds
io_uring_prep_sendto() function. The second patch addd the
manpage and CHANGELOG.

Signed-off-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---

Ammar Faizi (2):
liburing: Add `io_uring_prep_sendto()`
man: Add `io_uring_prep_sendto()`

CHANGELOG | 1 +
man/io_uring_prep_send.3 | 31 +++++++++++++++++++++++++++++++
man/io_uring_prep_sendto.3 | 1 +
src/include/liburing.h | 25 +++++++++++++++++--------
src/liburing-ffi.map | 1 +
5 files changed, 51 insertions(+), 8 deletions(-)
create mode 120000 man/io_uring_prep_sendto.3


base-commit: 4fed79510a189cc7997f6d04855ebf7fb66cc323
--
Ammar Faizi


2023-04-15 16:59:44

by Ammar Faizi

[permalink] [raw]
Subject: [RFC PATCH liburing v1 1/2] liburing: Add `io_uring_prep_sendto()`

A sendto(2) request can be done using:

io_uring_prep_send() + io_uring_prep_send_set_addr()

Create a wrapper function, io_uring_prep_sendto().

Signed-off-by: Ammar Faizi <[email protected]>
---
src/include/liburing.h | 25 +++++++++++++++++--------
src/liburing-ffi.map | 1 +
2 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/include/liburing.h b/src/include/liburing.h
index fbc65b60788a4d44..70c177431faf9f75 100644
--- a/src/include/liburing.h
+++ b/src/include/liburing.h
@@ -758,6 +758,23 @@ IOURINGINLINE void io_uring_prep_send(struct io_uring_sqe *sqe, int sockfd,
sqe->msg_flags = (__u32) flags;
}

+IOURINGINLINE void io_uring_prep_send_set_addr(struct io_uring_sqe *sqe,
+ const struct sockaddr *dest_addr,
+ __u16 addr_len)
+{
+ sqe->addr2 = (unsigned long)(const void *)dest_addr;
+ sqe->addr_len = addr_len;
+}
+
+IOURINGINLINE void io_uring_prep_sendto(struct io_uring_sqe *sqe, int sockfd,
+ const void *buf, size_t len, int flags,
+ const struct sockaddr *addr,
+ socklen_t addrlen)
+{
+ io_uring_prep_send(sqe, sockfd, buf, len, flags);
+ io_uring_prep_send_set_addr(sqe, addr, addrlen);
+}
+
IOURINGINLINE void io_uring_prep_send_zc(struct io_uring_sqe *sqe, int sockfd,
const void *buf, size_t len, int flags,
unsigned zc_flags)
@@ -786,14 +803,6 @@ IOURINGINLINE void io_uring_prep_sendmsg_zc(struct io_uring_sqe *sqe, int fd,
sqe->opcode = IORING_OP_SENDMSG_ZC;
}

-IOURINGINLINE void io_uring_prep_send_set_addr(struct io_uring_sqe *sqe,
- const struct sockaddr *dest_addr,
- __u16 addr_len)
-{
- sqe->addr2 = (unsigned long)(const void *)dest_addr;
- sqe->addr_len = addr_len;
-}
-
IOURINGINLINE void io_uring_prep_recv(struct io_uring_sqe *sqe, int sockfd,
void *buf, size_t len, int flags)
{
diff --git a/src/liburing-ffi.map b/src/liburing-ffi.map
index c971bf8c858f3005..0a5e12ca764a2a1e 100644
--- a/src/liburing-ffi.map
+++ b/src/liburing-ffi.map
@@ -170,6 +170,7 @@ LIBURING_2.4 {
io_uring_prep_msg_ring_cqe_flags;
io_uring_prep_msg_ring_fd;
io_uring_prep_msg_ring_fd_alloc;
+ io_uring_prep_sendto;
local:
*;
};
--
Ammar Faizi

2023-04-15 16:59:48

by Ammar Faizi

[permalink] [raw]
Subject: [RFC PATCH liburing v1 2/2] man: Add `io_uring_prep_sendto()`

Signed-off-by: Ammar Faizi <[email protected]>
---
CHANGELOG | 1 +
man/io_uring_prep_send.3 | 31 +++++++++++++++++++++++++++++++
man/io_uring_prep_sendto.3 | 1 +
3 files changed, 33 insertions(+)
create mode 120000 man/io_uring_prep_sendto.3

diff --git a/CHANGELOG b/CHANGELOG
index 85e02a280d4a7c45..71ca3919e114d858 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -14,6 +14,7 @@ liburing-2.4 release
io_uring_prep_openat2_direct(), io_uring_prep_msg_ring_fd(), and
io_uring_prep_socket_direct() factor in being called with
IORING_FILE_INDEX_ALLOC for allocating a direct descriptor.
+- Add io_uring_prep_sendto() function.

liburing-2.3 release

diff --git a/man/io_uring_prep_send.3 b/man/io_uring_prep_send.3
index 3bdc96751ebfb230..b555ec3a8548c449 100644
--- a/man/io_uring_prep_send.3
+++ b/man/io_uring_prep_send.3
@@ -14,6 +14,14 @@ io_uring_prep_send \- prepare a send request
.BI " const void *" buf ","
.BI " size_t " len ","
.BI " int " flags ");"
+.PP
+.BI "void io_uring_prep_sendto(struct io_uring_sqe *" sqe ","
+.BI " int " sockfd ","
+.BI " const void *" buf ","
+.BI " size_t " len ","
+.BI " int " flags ","
+.BI " const struct sockaddr *" addr ","
+.BI " socklen_t " addrlen ");"
.fi
.SH DESCRIPTION
.PP
@@ -43,6 +51,28 @@ This function prepares an async
.BR send (2)
request. See that man page for details.

+The
+.BR io_uring_prep_sendto (3)
+function prepares a sendto request. The submission queue entry
+.I sqe
+is setup to use the file descriptor
+.I sockfd
+to start sending the data from
+.I buf
+of size
+.I len
+bytes and with modifier flags
+.IR flags .
+The destination address is specified by
+.I addr
+and
+.I addrlen
+and must be a valid address for the socket type.
+
+This function prepares an async
+.BR sendto (2)
+request. See that man page for details.
+
.SH RETURN VALUE
None
.SH ERRORS
@@ -64,3 +94,4 @@ field.
.BR io_uring_get_sqe (3),
.BR io_uring_submit (3),
.BR send (2)
+.BR sendto (2)
diff --git a/man/io_uring_prep_sendto.3 b/man/io_uring_prep_sendto.3
new file mode 120000
index 0000000000000000..ba85e68453fe6dcb
--- /dev/null
+++ b/man/io_uring_prep_sendto.3
@@ -0,0 +1 @@
+io_uring_prep_send.3
\ No newline at end of file
--
Ammar Faizi

2023-04-15 20:39:26

by Jens Axboe

[permalink] [raw]
Subject: Re: [RFC PATCH liburing v1 0/2] io_uring sendto

On 4/15/23 10:58 AM, Ammar Faizi wrote:
> Hi Jens,
>
> There are two patches in this series. The first patch adds
> io_uring_prep_sendto() function. The second patch addd the
> manpage and CHANGELOG.

Looks fine to me.

--
Jens Axboe