[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240625010210.2002310-2-kuba@kernel.org>
Date: Mon, 24 Jun 2024 18:02:07 -0700
From: Jakub Kicinski <kuba@...nel.org>
To: davem@...emloft.net
Cc: netdev@...r.kernel.org,
edumazet@...gle.com,
pabeni@...hat.com,
willemdebruijn.kernel@...il.com,
ecree.xilinx@...il.com,
dw@...idwei.uk,
przemyslaw.kitszel@...el.com,
michael.chan@...adcom.com,
andrew.gospodarek@...adcom.com,
Jakub Kicinski <kuba@...nel.org>
Subject: [PATCH net-next v2 1/4] selftests: drv-net: try to check if port is in use
We use random ports for communication. As Willem predicted
this leads to occasional failures. Try to check if port is
already in use by opening a socket and binding to that port.
Signed-off-by: Jakub Kicinski <kuba@...nel.org>
---
v2:
- remove v4 check (Willem)
- update comment (David, Przemek)
- cap the iterations (Przemek)
---
tools/testing/selftests/net/lib/py/utils.py | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/tools/testing/selftests/net/lib/py/utils.py b/tools/testing/selftests/net/lib/py/utils.py
index 0540ea24921d..16907b51e034 100644
--- a/tools/testing/selftests/net/lib/py/utils.py
+++ b/tools/testing/selftests/net/lib/py/utils.py
@@ -3,6 +3,7 @@
import json as _json
import random
import re
+import socket
import subprocess
import time
@@ -79,9 +80,18 @@ import time
def rand_port():
"""
- Get unprivileged port, for now just random, one day we may decide to check if used.
+ Get a random unprivileged port, try to make sure it's not already used.
"""
- return random.randint(10000, 65535)
+ for _ in range(1000):
+ port = random.randint(10000, 65535)
+ try:
+ with socket.socket(socket.AF_INET6, socket.SOCK_STREAM) as s:
+ s.bind(("", port))
+ return port
+ except OSError as e:
+ if e.errno != 98: # already in use
+ raise
+ raise Exception("Can't find any free unprivileged port")
def wait_port_listen(port, proto="tcp", ns=None, host=None, sleep=0.005, deadline=5):
--
2.45.2
Powered by blists - more mailing lists