GNU/Weeb Mailing List <[email protected]>
 help / color / mirror / Atom feed
* [PATCH liburing v2 00/12] Introducing t_bind_ephemeral_port() function
@ 2022-09-02  7:14 Ammar Faizi
  2022-09-02  7:14 ` [PATCH liburing v2 01/12] test/helpers: Add `t_bind_ephemeral_port()` function Ammar Faizi
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: Ammar Faizi @ 2022-09-02  7:14 UTC (permalink / raw)
  To: Jens Axboe
  Cc: Ammar Faizi, Dylan Yudaken, Facebook Kernel Team, Pavel Begunkov,
	io-uring Mailing List, GNU/Weeb Mailing List, Kanna Scarlet,
	Muhammad Rizki, Alviro Iskandar Setiawan

From: Ammar Faizi <[email protected]>

Hi,

This is revision v2 of "Introducing t_bind_ephemeral_port() function".
After discussing an intermittent bind() issue with Dylan, I decided to
introduce a new helper function, t_bind_ephemeral_port().

## Problem:
We have many places where we need to bind() a socket to any unused port
number. To achieve that, the current approach does one of the following
mechanisms:

  1) Randomly brute force the port number until the bind() syscall
     succeeds.

  2) Use a static port at compile time (randomly chosen too).

This is not reliable and it results in an intermittent issue (test
fails when the selected port is in use).

## Solution:
Setting @addr->sin_port to zero on a bind() syscall lets the kernel
choose a port number that is not in use. The caller then can know the
port number to be bound by invoking a getsockname() syscall after
bind() succeeds.

Wrap this procedure in a new function called t_bind_ephemeral_port().
The selected port will be returned into @addr->sin_port, the caller
can use it later to connect() or whatever they need.

## Patchset summary:
There are 12 patches in this series, summary:
1) Patch #1 introduces a new helper function t_bind_ephemeral_port().
2) Patch #2 to #6 get rid of the port number brute force mechanism.
3) Patch #7 to #12 stop using a static port number.

## Changelog

  v1 -> v2:
    - Fix variable placement in patch #2.
    - Append Reviewed-by tags from Alviro.
    - Append Tested-by tags from Alviro.

Link: https://lore.kernel.org/r/[email protected]
Cc: Dylan Yudaken <[email protected]>
Cc: Facebook Kernel Team <[email protected]>
Cc: Pavel Begunkov <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---

Ammar Faizi (12):
  test/helpers: Add `t_bind_ephemeral_port()` function
  t/poll-link: Don't brute force the port number
  t/socket-rw: Don't brute force the port number
  t/socket-rw-eagain: Don't brute force the port number
  t/socket-rw-offset: Don't brute force the port number
  t/files-exit-hang-poll: Don't brute force the port number
  t/socket: Don't use a static port number
  t/connect: Don't use a static port number
  t/shutdown: Don't use a static port number
  t/recv-msgall: Don't use a static port number
  t/232c93d07b74: Don't use a static port number
  t/recv-msgall-stream: Don't use a static port number

 test/232c93d07b74.c         | 10 ++++------
 test/accept.c               |  5 +----
 test/files-exit-hang-poll.c | 23 +++--------------------
 test/helpers.c              | 18 ++++++++++++++++++
 test/helpers.h              |  7 +++++++
 test/poll-link.c            | 27 +++++++++------------------
 test/recv-msgall-stream.c   | 22 ++++++++++------------
 test/recv-msgall.c          | 10 ++++------
 test/shutdown.c             |  7 +++----
 test/socket-rw-eagain.c     | 14 ++------------
 test/socket-rw-offset.c     | 13 ++-----------
 test/socket-rw.c            | 13 ++-----------
 test/socket.c               | 11 ++++++-----
 13 files changed, 71 insertions(+), 109 deletions(-)


base-commit: b8c37f02662faa4f2b61840b123201ccc5678fb1
-- 
Ammar Faizi


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2022-09-02 11:57 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-02  7:14 [PATCH liburing v2 00/12] Introducing t_bind_ephemeral_port() function Ammar Faizi
2022-09-02  7:14 ` [PATCH liburing v2 01/12] test/helpers: Add `t_bind_ephemeral_port()` function Ammar Faizi
2022-09-02  7:14 ` [PATCH liburing v2 02/12] t/poll-link: Don't brute force the port number Ammar Faizi
2022-09-02  7:14 ` [PATCH liburing v2 03/12] t/socket-rw: " Ammar Faizi
2022-09-02  7:14 ` [PATCH liburing v2 04/12] t/socket-rw-eagain: " Ammar Faizi
2022-09-02  7:14 ` [PATCH liburing v2 05/12] t/socket-rw-offset: " Ammar Faizi
2022-09-02  7:14 ` [PATCH liburing v2 06/12] t/files-exit-hang-poll: " Ammar Faizi
2022-09-02  7:15 ` [PATCH liburing v2 07/12] t/socket: Don't use a static " Ammar Faizi
2022-09-02  7:15 ` [PATCH liburing v2 08/12] t/connect: " Ammar Faizi
2022-09-02  7:15 ` [PATCH liburing v2 09/12] t/shutdown: " Ammar Faizi
2022-09-02  7:15 ` [PATCH liburing v2 10/12] t/recv-msgall: " Ammar Faizi
2022-09-02  7:15 ` [PATCH liburing v2 11/12] t/232c93d07b74: " Ammar Faizi
2022-09-02  7:15 ` [PATCH liburing v2 12/12] t/recv-msgall-stream: " Ammar Faizi
2022-09-02 11:57 ` [PATCH liburing v2 00/12] Introducing t_bind_ephemeral_port() function Jens Axboe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox