Message ID | 20240626012456.2326192-2-kuba@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 8b8fe280155d9fb6f3f6310f05f613cbdf30196b |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | selftests: drv-net: rss_ctx: add tests for RSS contexts | expand |
Jakub Kicinski <kuba@kernel.org> writes: > 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. > > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Petr Machata <petrm@nvidia.com>
Jakub Kicinski wrote: > 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. > > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Willem de Bruijn <willemb@google.com>
diff --git a/tools/testing/selftests/net/lib/py/utils.py b/tools/testing/selftests/net/lib/py/utils.py index 0540ea24921d..dd9d2b9f2b20 100644 --- a/tools/testing/selftests/net/lib/py/utils.py +++ b/tools/testing/selftests/net/lib/py/utils.py @@ -1,8 +1,10 @@ # SPDX-License-Identifier: GPL-2.0 +import errno import json as _json import random import re +import socket import subprocess import time @@ -79,9 +81,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 != errno.EADDRINUSE: + 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):