In testing environments, binding to the port can transiently fail following a driver reset caused by the preceding queue configuration. The failing bind() is typically caused by DHCP/IPv6 DAD needing some time to resolve and assign the IP address back to the interface after the reset. Retry bind() multiple times before fully failing the test to improve robustness.
Signed-off-by: Mina Almasry <[email protected]> --- tools/testing/selftests/drivers/net/hw/ncdevmem.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/drivers/net/hw/ncdevmem.c b/tools/testing/selftests/drivers/net/hw/ncdevmem.c index ffe1d5c1fa4e1..6724f81e389fa 100644 --- a/tools/testing/selftests/drivers/net/hw/ncdevmem.c +++ b/tools/testing/selftests/drivers/net/hw/ncdevmem.c @@ -898,7 +898,12 @@ static int do_server(struct memory_buffer *mem) fprintf(stderr, "binding to address %s:%d\n", server_ip, ntohs(server_sin.sin6_port)); - ret = bind(socket_fd, &server_sin, sizeof(server_sin)); + int retries = 10; + while (retries--) { + ret = bind(socket_fd, &server_sin, sizeof(server_sin)); + if (!ret) break; + sleep(1); + } if (ret) { pr_err("Failed to bind"); goto err_close_socket; -- 2.55.0.571.g244d577d93-goog

