From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 50E1249620 for ; Tue, 19 Aug 2025 09:00:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594023; cv=none; b=CSy0v4IwE7ZTGdsvpNLHIRarTRZYkS8cmJoutmI6TynFlFHe8QjYmX7DUpmdiDdwSmyjDNfkJlUgvXG/JM0SGkUz3kI3yTngKpNusncYEuhfulAhxs9qyh2wp21hPuBCT8MoX89sPxZIL64Qor7aUBw0S1K+shFaGFgLmE2ISvY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594023; c=relaxed/simple; bh=NJT4+JH/beYnnBG5m1sP4mD6wPxpGeugeXCHrlk138A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iUYG1kxIe/nQR9W2pywApaeOt2Scdu4U3jNiF6ZKnDu/oaJG5RNRcfjcoYnX8wb0vFti0FCWya1zsP3a+jV8fNL2h6xFVHA/WBCOmSROah0i3Zfj0Hed50KUznkhMWjBCFgV5w+VcC7Y5Sre9F5l8bq6R6WvubJiFugPIn3gcFE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KSCfrQJW; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KSCfrQJW" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A8A9DC113D0; Tue, 19 Aug 2025 09:00:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594022; bh=NJT4+JH/beYnnBG5m1sP4mD6wPxpGeugeXCHrlk138A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KSCfrQJW+ShLFdRE4ZItLL9G6rkmZuX8ZlLGp43cP/Vjrf1LdJGEwRfZY1SvhTkak UNPXnMNeBFwvCiRfmohz7HwpRiJZDdrOTxGO4Aw5ymOqKMKQ0vT+x5IvGfjf/rxg+U WGPm8PU5g652P1i54bIDAPXrWUOlxTBJorCPb6TlwnhDonLkk8jBPYG7lTfII46A6a 4HY2BS0RQ8ymjr42rnXb3aQ73uO2SY9aeWu65fhuEVlJZ/VHeeEM2MZp9Zo8myuEin aNRlZ29T8WzaiFiGFe0P9pO0bHUqg15L5vMoSH7DE2xUFqfDRxKP6CIE8sAfGU7XK5 QEGxKVjNJ7LRg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 01/11] selftests: mptcp: sockopt: improve test output clarity Date: Tue, 19 Aug 2025 17:00:07 +0800 Message-ID: <1300935de56f6192e9314a2293a6679595a3a138.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Refine test output to print detailed titles for SOL_MPTCP socket option tests in both IPv4 and IPv6 contexts. This enhances readability and distinctly separates v4/v6 results. The output now explicitly labels each test phase and result, making failures easier to identify. Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.sh | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 418a903c3a4d..375d1eabe4f7 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -261,28 +261,32 @@ do_mptcp_sockopt_tests() ip netns exec "$ns_sbox" ./mptcp_sockopt lret=3D$? =20 - print_title "SOL_MPTCP sockopt v4" + mptcp_lib_print_info "sockopt v4" if [ $lret -ne 0 ]; then - mptcp_lib_pr_fail + mptcp_lib_pr_fail "sockopt v4" mptcp_lib_result_fail "sockopt v4" ret=3D$lret return fi + + print_title "SOL_MPTCP sockopt v4" mptcp_lib_pr_ok - mptcp_lib_result_pass "sockopt v4" + mptcp_lib_result_pass "SOL_MPTCP sockopt v4" =20 ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 - print_title "SOL_MPTCP sockopt v6" + mptcp_lib_print_info "sockopt v6" if [ $lret -ne 0 ]; then - mptcp_lib_pr_fail + mptcp_lib_pr_fail "sockopt v6" mptcp_lib_result_fail "sockopt v6" ret=3D$lret return fi + + print_title "SOL_MPTCP sockopt v6" mptcp_lib_pr_ok - mptcp_lib_result_pass "sockopt v6" + mptcp_lib_result_pass "SOL_MPTCP sockopt v6" } =20 run_tests() @@ -329,6 +333,8 @@ do_tcpinq_tests() return fi =20 + mptcp_lib_print_info "sockopt TCP_INQ" + local args for args in "-t tcp" "-r tcp"; do do_tcpinq_test $args --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5168E1519B4 for ; Tue, 19 Aug 2025 09:00:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594025; cv=none; b=kewIfAjyj2sQWbfXdzsgiQ9B7EojD8CxLylVCB2lB7+Md9BATYmHsnRp3rl0DWFVicdGkp3q/T9Jv35iAT115Ue5VsYPzDr+TdllYbuBGbMcxgXhu/UsKbg1J48hy6WfKjGXJov/wrBy5c1jQYRzI/Rn1jb7TQDPgpGpVoGC1/E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594025; c=relaxed/simple; bh=kjG2VT11AYy8yUjzSilUvgWK3zdVU19UDMRHXulFNGg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BUp+1fnd+mHStjMm5rRywxpLW0rtGIowK1wTUMvFm5LEKG1SxbFfqihIs5mcZWgUJ7cVeNqxLqXk2BGwN8SowPrrONx7jJ1J9xhrBH0tdkY4XLwpBEV8jTuxIrIZ5tMVwMAYzwQ4n6k96lBgyQZ+yVg2HF/xYxAjDnKZVWZdvqg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=R72nrxhH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="R72nrxhH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 92BB4C4CEF1; Tue, 19 Aug 2025 09:00:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594024; bh=kjG2VT11AYy8yUjzSilUvgWK3zdVU19UDMRHXulFNGg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=R72nrxhHodlRVo7GiP+KxhPD+DtWIwNhQZOy4XQKkVBEbaDfkRXhKRJ2jpyBdkpx/ HRbIXKpN+aiC9MfDRq4E3xKGL0T/g0f87aYX/sSqOdGx1yXvlZH5W6HT9lkkFJMGNZ zOMHQW3rg0F30R9NesXx/o1loOy6AdACp0XG5RH59LlC09CdEG+iDNFHi91h86/5/5 fv40E1ylyDMWpgBT28oCY6Qg2vcd5wS1nA8SBenBFbPavEsMaZFp3NzdYh40acXJqH p8LYHAJ2p4YsoU0teyCG6DlHXteWpriqefW0E+11N5XP9bHr1OFQ3ls6rwZYr5Q/uJ hcqzVL1py6MwQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 02/11] selftests: mptcp: sockopt: add SO_REUSEADDR test helper Date: Tue, 19 Aug 2025 17:00:08 +0800 Message-ID: <7aa9e087d000568d122699abc0236b0d81d8f691.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Introduce helper functions to set and verify the SO_REUSEADDR socket option. This includes: - do_setsockopt_reuseaddr() to set the option - do_getsockopt_reuseaddr() to validate the value - Integration into IPv4/IPv6 test flows - Explicit result reporting in the test script Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 34 ++++++++++++++++--- .../selftests/net/mptcp/mptcp_sockopt.sh | 8 +++++ 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index e934dd26a59d..a91709aeca06 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -182,6 +182,19 @@ static void xgetaddrinfo(const char *node, const char = *service, } } =20 +static void do_setsockopt_reuseaddr(int fd) +{ + int one =3D 1; + + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one))) + perror("setsockopt(SO_REUSEADDR)"); +} + +static void do_setsockopts(int fd) +{ + do_setsockopt_reuseaddr(fd); +} + static int sock_listen_mptcp(const char * const listenaddr, const char * const port) { @@ -195,7 +208,6 @@ static int sock_listen_mptcp(const char * const listena= ddr, hints.ai_family =3D pf; =20 struct addrinfo *a, *addr; - int one =3D 1; =20 xgetaddrinfo(listenaddr, port, &hints, &addr); hints.ai_family =3D pf; @@ -205,9 +217,7 @@ static int sock_listen_mptcp(const char * const listena= ddr, if (sock < 0) continue; =20 - if (-1 =3D=3D setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, - sizeof(one))) - perror("setsockopt"); + do_setsockopts(sock); =20 if (bind(sock, a->ai_addr, a->ai_addrlen) =3D=3D 0) break; /* success */ @@ -246,6 +256,8 @@ static int sock_connect_mptcp(const char * const remote= addr, if (sock < 0) continue; =20 + do_setsockopts(sock); + if (connect(sock, a->ai_addr, a->ai_addrlen) =3D=3D 0) break; /* success */ =20 @@ -554,6 +566,18 @@ static void do_getsockopt_mptcp_full_info(struct so_st= ate *s, int fd) assert(!memcmp(&sfinfo->addrs, &s->addrs, sizeof(struct mptcp_subflow_add= rs))); } =20 +static void do_getsockopt_reuseaddr(int fd) +{ + socklen_t len; + int reuse; + + len =3D sizeof(reuse); + if (getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, &len)) + perror("getsockopt(SO_REUSEADDR)"); + + assert(reuse =3D=3D 1); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -564,6 +588,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) =20 if (r) do_getsockopt_mptcp_full_info(s, fd); + + do_getsockopt_reuseaddr(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 375d1eabe4f7..2f6b16cd51af 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -273,6 +273,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "SOL_MPTCP sockopt v4" =20 + print_title "SO_REUSEADDR sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "SO_REUSEADDR sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -287,6 +291,10 @@ do_mptcp_sockopt_tests() print_title "SOL_MPTCP sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "SOL_MPTCP sockopt v6" + + print_title "SO_REUSEADDR sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "SO_REUSEADDR sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4AB1C1519B4 for ; Tue, 19 Aug 2025 09:00:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594027; cv=none; b=Zxwn5wbgspJNrDI/uYWQgApZXyF7yl5IvlPg6zS9X9+lQmx4Bf49QHc1izT5TWEecu7t9IGmMZ1y1DZlpuhCcdwssUo5zo9K7U28+ffO4AxRgZfZxdlWs3Ij7q/8/CVd99O/L5LDSLJ6EB7GpjfWtlbUu+8AHPUPgkLQKPdH9eI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594027; c=relaxed/simple; bh=dZBxhS3jH11eOCvg4+CIOW5Er1caEa7iBADykiM1MMI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z1p+6v3qZYfWKUipExsbkHK79zOwpdQrr1Hze76kUT1HV8Ie46MkGuQjchOdMBvfj7GXfibpPLlf7Adf7v3dTVtX4YSB8ChcDprvUvOXEHqj4XRDFCI2ShDfHmoJddpyYxrVs5T3X3pllBpk2I999BgzU6nHD/vYNfPoV0M7TWw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=I0zT+AGm; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="I0zT+AGm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5B9C4C113D0; Tue, 19 Aug 2025 09:00:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594026; bh=dZBxhS3jH11eOCvg4+CIOW5Er1caEa7iBADykiM1MMI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I0zT+AGm2GSDlSM8bS9V6sNGJ+KhEQFNmB1NIOCnUyTOh9r2+kxD7Eb4ABDVZQmgb aXHhWgHy9WvjJz0qvEr3X7NMUpvsG0M7nEBL8BGOJa2a3y0XLw6kp30aShx1mF4Cqe a+5rxJO8yXASvS9qEdKaiS7d74WVpsyhQnD7fZFWt+6a6nWV0H1atwYJ9zbpbDG6eM ljq4KWYAXAO1xA6QO7J5pUjHzgPxUdqMEAdZzCr4vJ03eZBUPy/Cu3v4JnVvSQDr2T ppPJLz+fshu7Ed8S7fDK+8bXe7Ren8Mmf/SsjizviGkQ7PokAH6HWLZvsu5KOGNHaR JUEuzdPme7dyA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 03/11] selftests: mptcp: sockopt: add SO_REUSEPORT test Date: Tue, 19 Aug 2025 17:00:09 +0800 Message-ID: <2258943db59b817193a56ffe1953089d46f7d538.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Implement comprehensive testing for the SO_REUSEPORT socket option: - Setsockopt and getsockopt helpers for SO_REUSEPORT - Verification of the set value - Integration into both client/server workflows - IPv4 and IPv6 test coverage Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 23 +++++++++++++++++++ .../selftests/net/mptcp/mptcp_sockopt.sh | 8 +++++++ 2 files changed, 31 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index a91709aeca06..816d71706f7d 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -190,9 +190,18 @@ static void do_setsockopt_reuseaddr(int fd) perror("setsockopt(SO_REUSEADDR)"); } =20 +static void do_setsockopt_reuseport(int fd) +{ + int one =3D 1; + + if (setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &one, sizeof(one))) + perror("setsockopt(SO_REUSEPORT)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); + do_setsockopt_reuseport(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -578,6 +587,18 @@ static void do_getsockopt_reuseaddr(int fd) assert(reuse =3D=3D 1); } =20 +static void do_getsockopt_reuseport(int fd) +{ + socklen_t len; + int reuse; + + len =3D sizeof(reuse); + if (getsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &reuse, &len)) + perror("getsockopt(SO_REUSEPORT)"); + + assert(reuse =3D=3D 1); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -590,6 +611,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_mptcp_full_info(s, fd); =20 do_getsockopt_reuseaddr(fd); + + do_getsockopt_reuseport(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 2f6b16cd51af..271d9777da54 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -277,6 +277,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "SO_REUSEADDR sockopt v4" =20 + print_title "SO_REUSEPORT sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "SO_REUSEPORT sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -295,6 +299,10 @@ do_mptcp_sockopt_tests() print_title "SO_REUSEADDR sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "SO_REUSEADDR sockopt v6" + + print_title "SO_REUSEPORT sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "SO_REUSEPORT sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C16231A054 for ; Tue, 19 Aug 2025 09:00:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594030; cv=none; b=f3NpdZMu1D8tFOHyePraLrdrrPADg2kVbSlJKpa4Dr2t+u4ETZSK4YzH+VJrmO1nY9JkZgCoD7L9loFzCvu6vdCjHYJjqOTfJ5QwM/5ng6gdOYu4/OrQlBT95gWgxWz752fjInatFZkjlgS3C5TXI4KlBjOjjyxZS8JiuOUpRT0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594030; c=relaxed/simple; bh=Z1qk1/ZDPKobj+mm3LAy/LCsv+6hoaK8lxJFYM87v4s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mugNHPpZFviRiQWlF4fYemIMKXzaBWZS8XG7xzeyd4AWY0E/Iwv6/pDj+3O67H66zFcgG5hbMoTG4U/z2u7vFKXswLfUvj3OiERuTT0eEwHNNZnuQwkrTyZqNSKQChbvn+C70YM7CYb2uHeY0I6PtRTrFtDYgkl13f7d8/AqInU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sXxfBCKG; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sXxfBCKG" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 90152C113D0; Tue, 19 Aug 2025 09:00:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594029; bh=Z1qk1/ZDPKobj+mm3LAy/LCsv+6hoaK8lxJFYM87v4s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sXxfBCKGxVl+X3bf8CAL13GS0Q8fjWG/AMNUeRQgI75Z7ml6qLPaANjGvjO3ygPMp TckCWTm/lvQmS8Ic3PARJeD5jTGZAX+4PIuIS+AQpIANJeHW8J9BIVobDulyCCrskk A0aG2msxpAdCQITO0PFCj+e+xSjfeK1wGwwXqtD/XfRRpZXIHc4wgbqh9tnlo/xSH9 VC7eI39Au1UB8AXUtak4n4pef5Bsj1d0t7t3YpuQBVBKxa3ZcWxCU3WJJJRzmRyP5/ 5P6RFIQpNNuMsdIekY1cdZW12DKy+1/Odaynl9bFBuYG3mGVpf9mwXpfyDUy76BjtB jDGrNMQ9cNcQg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 04/11] selftests: mptcp: sockopt: add SO_BINDTODEVICE test Date: Tue, 19 Aug 2025 17:00:10 +0800 Message-ID: <95adea00b5a39d25ffa2f02fa050ea0928c402c6.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add tests for the SO_BINDTODEVICE socket option: - Binds sockets to the loopback device ("lo") - Verifies the binding via getsockopt - Includes IPv4 and IPv6 test cases - Reports results explicitly in the test script Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 25 +++++++++++++++++++ .../selftests/net/mptcp/mptcp_sockopt.sh | 8 ++++++ 2 files changed, 33 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 816d71706f7d..df4f85f129f7 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -23,6 +23,7 @@ =20 #include #include +#include =20 #include =20 @@ -198,10 +199,20 @@ static void do_setsockopt_reuseport(int fd) perror("setsockopt(SO_REUSEPORT)"); } =20 +static void do_setsockopt_bindtodevice(int fd) +{ + const char *interface =3D "lo"; + + if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, + interface, strlen(interface))) + perror("setsockopt(SO_BINDTODEVICE)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); do_setsockopt_reuseport(fd); + do_setsockopt_bindtodevice(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -599,6 +610,18 @@ static void do_getsockopt_reuseport(int fd) assert(reuse =3D=3D 1); } =20 +static void do_getsockopt_bindtodevice(int fd) +{ + char ifname[IFNAMSIZ] =3D { 0 }; + socklen_t len; + + len =3D sizeof(ifname); + if (getsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifname, &len)) + die_perror("getsockopt(SO_BINDTODEVICE)"); + + assert(!memcmp(ifname, "lo", len)); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -613,6 +636,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_reuseaddr(fd); =20 do_getsockopt_reuseport(fd); + + do_getsockopt_bindtodevice(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 271d9777da54..948e54b50c43 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -281,6 +281,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "SO_REUSEPORT sockopt v4" =20 + print_title "SO_BINDTODEVICE sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "SO_BINDTODEVICE sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -303,6 +307,10 @@ do_mptcp_sockopt_tests() print_title "SO_REUSEPORT sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "SO_REUSEPORT sockopt v6" + + print_title "SO_BINDTODEVICE sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "SO_BINDTODEVICE sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9DDFF22424E for ; Tue, 19 Aug 2025 09:00:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594031; cv=none; b=s5wq+MfYIYCXBxgqGPgqraQBPEzaW8ThbL7Fx5bI+Et8W93N6bV8IOyTZCyhh+pkIeVRPESAOJHD1iyhFxjOHbDuRQ/+uwkjmuPWCfuDOitCOcZ4A/VGgQqLnzW1pg2tV1F+RAVACSS92bD6ER2mag7FBoOsiRAvbH+aQtr8qf0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594031; c=relaxed/simple; bh=J87gRu+lhUbmNeEj0rm9Cx+3jrK/nERyWETPs/7IZWw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QLqQIg8kIfNSjoc1WJKXQdk7YbRv+c2UsRw6MIsHjTJqkMoh+WSfrqj7BfqMnkInW6kWW6qi9lQ1+RcL5PsdiCyFlzRs2OEL/lTqG9AOD1Btha0veN3N7u53cYcSblBdrivWZJgPdk8I8P0OdR37CHAkoksNPSwq3KPqU71ZnNY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=fha2bkCP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="fha2bkCP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D0DCFC116B1; Tue, 19 Aug 2025 09:00:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594031; bh=J87gRu+lhUbmNeEj0rm9Cx+3jrK/nERyWETPs/7IZWw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fha2bkCP2BzfX+2tup/KBV76RLmaa9z3GFi+GY6oe/z6cPg4CCt8Lo5Np4HpURgD0 kwkbXb45AlvsLVecBLIugfq6lWnDIAZxRWO7IgEJpS+sG+HAZNmzMDZ1BB6bGhKnLN nYVO/cDk4rvGbN9nZKNA1qhjxsvwAIvms08dMNoaPeuUuDMyZwUN5qFXnv7uQjysJJ 2R0S0DV9OE/p3jTbnKKfBbaZWFXMtTh0xBVHfko3H9tDHtb1sRZzNAaR68UF9TZouH qRoFG53EZSi8Q0F6QV2tWyTj7hGr3vC7XuoI4LvRWvFgeWmoZMIKNQI1rQI2TMLW3w AMHeCNcImqnEQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 05/11] selftests: mptcp: sockopt: add SO_BINDTOIFINDEX test Date: Tue, 19 Aug 2025 17:00:11 +0800 Message-ID: <0888dbece9afe24eab9e838fec4d3809d2afc3e5.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Implement tests for the SO_BINDTOIFINDEX socket option: - Uses ioctl to get the loopback interface index - Sets the option to bind to "lo" - Validates the bound index via getsockopt - Supports both IPv4 and IPv6 Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 41 +++++++++++++++++++ .../selftests/net/mptcp/mptcp_sockopt.sh | 8 ++++ 2 files changed, 49 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index df4f85f129f7..25456e540cad 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -20,6 +20,7 @@ #include #include #include +#include =20 #include #include @@ -208,11 +209,36 @@ static void do_setsockopt_bindtodevice(int fd) perror("setsockopt(SO_BINDTODEVICE)"); } =20 +static int get_ifindex(int fd, const char *ifname) +{ + struct ifreq ifr; + + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, ifname, IFNAMSIZ); + + if (ioctl(fd, SIOCGIFINDEX, &ifr) < 0) { + perror("ioctl"); + return -1; + } + + return ifr.ifr_ifindex; +} + +static void do_setsockopt_bindtoifindex(int fd) +{ + int ifindex =3D get_ifindex(fd, "lo"); + + if (setsockopt(fd, SOL_SOCKET, SO_BINDTOIFINDEX, + &ifindex, sizeof(ifindex))) + perror("setsockopt(SO_BINDTOIFINDEX)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); do_setsockopt_reuseport(fd); do_setsockopt_bindtodevice(fd); + do_setsockopt_bindtoifindex(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -622,6 +648,19 @@ static void do_getsockopt_bindtodevice(int fd) assert(!memcmp(ifname, "lo", len)); } =20 +static void do_getsockopt_bindtoifindex(int fd) +{ + socklen_t len; + int ifindex; + + len =3D sizeof(ifindex); + if (getsockopt(fd, SOL_SOCKET, SO_BINDTOIFINDEX, + &ifindex, &len)) + die_perror("getsockopt(SO_BINDTOIFINDEX)"); + + assert(ifindex =3D=3D get_ifindex(fd, "lo")); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -638,6 +677,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_reuseport(fd); =20 do_getsockopt_bindtodevice(fd); + + do_getsockopt_bindtoifindex(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 948e54b50c43..8eae13f4da38 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -285,6 +285,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "SO_BINDTODEVICE sockopt v4" =20 + print_title "SO_BINDTOIFINDEX sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "SO_BINDTOIFINDEX sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -311,6 +315,10 @@ do_mptcp_sockopt_tests() print_title "SO_BINDTODEVICE sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "SO_BINDTODEVICE sockopt v6" + + print_title "SO_BINDTOIFINDEX sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "SO_BINDTOIFINDEX sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D1ABF315783 for ; Tue, 19 Aug 2025 09:00:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594033; cv=none; b=G7Q61WVdnkGAA/+AOI8exw35+5GuYvRy4FsxX97VmyS0rvvyRfClYgT4JR3jPAcik4CKLRiqTjDwS6DH7FDUd8o8rY9Gat2nfM1HD85P2aqwMHuUFJNI5pvFjX8Cp7EC8OpqPYIs3M2jFdrI2/LHBSawvzbYU3SknAq9dP+A5jk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594033; c=relaxed/simple; bh=scA2SXNdUoj25SWcsE5w5ASFDSdk6qYDSapiowBEs4Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m/FEolqTkM9JZvYezDsOxS5tLL04SfR3scsmcesYuOVmG3sB1BGfCuiMM3z94mwyOiKLA9wsVqATAwNzRrrYULHwawrxpZd84CFaNgqR+c7nhOMAQ8hDaeFcuttwitk+Xa2EzFv2lphJAt3eSDB3mhpg73ECvpx8sLnGafLkEtE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IyyMrsle; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IyyMrsle" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 027ACC116C6; Tue, 19 Aug 2025 09:00:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594033; bh=scA2SXNdUoj25SWcsE5w5ASFDSdk6qYDSapiowBEs4Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IyyMrslepsob+UXuB0Qv6uuodNolAh2kZjohmf1wV5lQ9DFZCmcREIqz2BRTzVPPw gl4K7XId2UhCqHQlbNIzQhbaHwIKFJ75dnXxL4ehcizN1jdUyfL+VGrJWjGJAwKBu/ AeSv/GDOv3V4B/SChYzSs7EPWKTuLNvd4FgeYghGfj4zw0gLZNjTCEvlpcrAQpSEnp yerzdUEPnQtVRDdndNBwtaLMAERGxJYrkstCVUESvDoETC+gcVWgFj3he47xNfIRbc coTUoeJRdvQayymM1EvRnBlzHzNQb9mpuCxCsIpH7oYxlKNGvEj8fUnFyokDibjTCN Wo3RlbwXXKQhg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 06/11] selftests: mptcp: sockopt: add IP_TOS socket option test Date: Tue, 19 Aug 2025 17:00:12 +0800 Message-ID: <08f2e503f85ff7b5afe4869941f88f4b088df4bd.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add comprehensive testing for IP_TOS (Type of Service): - Sets a random TOS value and verifies it - Tests edge cases (zero-length buffer, negative size) - Validates proper error handling - Covers both IPv4 and IPv6 Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 85 ++++++++++--------- .../selftests/net/mptcp/mptcp_sockopt.sh | 8 ++ 2 files changed, 53 insertions(+), 40 deletions(-) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 25456e540cad..3bef535ce981 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -29,6 +29,7 @@ #include =20 static int pf =3D AF_INET; +static uint8_t tos_in; =20 #ifndef IPPROTO_MPTCP #define IPPROTO_MPTCP 262 @@ -233,12 +234,20 @@ static void do_setsockopt_bindtoifindex(int fd) perror("setsockopt(SO_BINDTOIFINDEX)"); } =20 +static void do_setsockopt_tos(int fd) +{ + tos_in =3D rand() & 0xfc; + if (setsockopt(fd, SOL_IP, IP_TOS, &tos_in, sizeof(tos_in))) + die_perror("setsockopt(IP_TOS)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); do_setsockopt_reuseport(fd); do_setsockopt_bindtodevice(fd); do_setsockopt_bindtoifindex(fd); + do_setsockopt_tos(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -661,6 +670,40 @@ static void do_getsockopt_bindtoifindex(int fd) assert(ifindex =3D=3D get_ifindex(fd, "lo")); } =20 +static void do_getsockopt_tos(int fd) +{ + uint8_t tos_out; + socklen_t s; + int r; + + tos_out =3D 0; + s =3D sizeof(tos_out); + if (getsockopt(fd, SOL_IP, IP_TOS, &tos_out, &s)) + die_perror("getsockopt IP_TOS"); + + if (!tos_in) + xerror("tos_in shouldn't be 0"); + + if (tos_in !=3D tos_out) + xerror("tos %x !=3D %x socklen_t %d\n", tos_in, tos_out, s); + + if (s !=3D 1) + xerror("tos should be 1 byte"); + + s =3D 0; + if (getsockopt(fd, SOL_IP, IP_TOS, &tos_out, &s)) + die_perror("getsockopt IP_TOS 0"); + if (s !=3D 0) + xerror("expect socklen_t =3D=3D 0"); + + s =3D -1; + r =3D getsockopt(fd, SOL_IP, IP_TOS, &tos_out, &s); + if (r !=3D -1 && errno !=3D EINVAL) + die_perror("getsockopt IP_TOS did not indicate -EINVAL"); + if (s !=3D -1) + xerror("expect socklen_t =3D=3D -1"); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -679,6 +722,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_bindtodevice(fd); =20 do_getsockopt_bindtoifindex(fd); + + do_getsockopt_tos(fd); } =20 static void connect_one_server(int fd, int pipefd) @@ -840,44 +885,6 @@ static int server(int pipefd) return 0; } =20 -static void test_ip_tos_sockopt(int fd) -{ - uint8_t tos_in, tos_out; - socklen_t s; - int r; - - tos_in =3D rand() & 0xfc; - r =3D setsockopt(fd, SOL_IP, IP_TOS, &tos_in, sizeof(tos_out)); - if (r !=3D 0) - die_perror("setsockopt IP_TOS"); - - tos_out =3D 0; - s =3D sizeof(tos_out); - r =3D getsockopt(fd, SOL_IP, IP_TOS, &tos_out, &s); - if (r !=3D 0) - die_perror("getsockopt IP_TOS"); - - if (tos_in !=3D tos_out) - xerror("tos %x !=3D %x socklen_t %d\n", tos_in, tos_out, s); - - if (s !=3D 1) - xerror("tos should be 1 byte"); - - s =3D 0; - r =3D getsockopt(fd, SOL_IP, IP_TOS, &tos_out, &s); - if (r !=3D 0) - die_perror("getsockopt IP_TOS 0"); - if (s !=3D 0) - xerror("expect socklen_t =3D=3D 0"); - - s =3D -1; - r =3D getsockopt(fd, SOL_IP, IP_TOS, &tos_out, &s); - if (r !=3D -1 && errno !=3D EINVAL) - die_perror("getsockopt IP_TOS did not indicate -EINVAL"); - if (s !=3D -1) - xerror("expect socklen_t =3D=3D -1"); -} - static int client(int pipefd) { int fd =3D -1; @@ -895,8 +902,6 @@ static int client(int pipefd) xerror("Unknown pf %d\n", pf); } =20 - test_ip_tos_sockopt(fd); - connect_one_server(fd, pipefd); =20 return 0; diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 8eae13f4da38..9972012d08f6 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -289,6 +289,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "SO_BINDTOIFINDEX sockopt v4" =20 + print_title "IP_TOS sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IP_TOS sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -319,6 +323,10 @@ do_mptcp_sockopt_tests() print_title "SO_BINDTOIFINDEX sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "SO_BINDTOIFINDEX sockopt v6" + + print_title "IP_TOS sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IP_TOS sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3FE1B31577D for ; Tue, 19 Aug 2025 09:00:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594036; cv=none; b=X01PXucWQR6wzIVrO++bLbJzKu1dEbRtqbSdN5y+XBD4gGFU1rXS09nXHWCTtyleqbvYUBj8wQ494q9UUVTnRzkFMJVWrcQsesRxdEEvqpUB5+q2c54mtoRJ5DDeR/WXIvYdfL5P5JPaNqzanZTOhKI53W+iLlRaYPp1iaXuOvw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594036; c=relaxed/simple; bh=gAnSShawOksymIf9itbH5poxQY94AOV5E34yjtagJu0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Hc7k9+JhpSF39esdFWHSl23EDvp7PM5SWuKiVYMQpHV9PhdjJLkyNVeDzbFJcirEAWnl9zZJvdqbQ3caf9/7q5A5Kyp2VXZKGNrpwei773sXvB2/C/Pn7XkMkn4lMsTaC7D7+EuvyzDbwwT7WEW/3sjD1JD4jkabsAKUZ6/QuGg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NUjRqWZI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NUjRqWZI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 706D4C116B1; Tue, 19 Aug 2025 09:00:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594035; bh=gAnSShawOksymIf9itbH5poxQY94AOV5E34yjtagJu0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NUjRqWZIEyv3amWPgltI2QLg8n5TB1H2umCHtZcl64PLgqKWC2KFGA8QV0372TkBf +D7fTns3SeS7hANkltQVz4jU6kNOCw4L+7lLg6XkXhlS2ddKt3P1xjef8mbSAIWEhQ cPdvHEVaqbs97cmP3F3L2Q/LN42KDDahhxtvQYisCnGMPamHS4iUM/kv56wdUUs5pl HabS3rFvbfnbUCdxlcETrMQuQ+q3piLkDBDqi10oHsIM4+UboVCLE/Z9oUmBDVAK88 k715jJnxG0H8q+0ijtezrXEEWM2emkpQw0SxNsoDbf5ysQQN5N1u3ACXTehfwqLVrS QTlur2xumVQJg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 07/11] selftests: mptcp: sockopt: add IP_FREEBIND tests Date: Tue, 19 Aug 2025 17:00:13 +0800 Message-ID: <611145c75ad6579a523a03c4305139174c2f5ae4.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add tests for IP_FREEBIND (IPv4) and IPV6_FREEBIND (IPv6): - Setsockopt helpers to enable FREEBIND - Getsockopt validation of the enabled state - Test integration for both address families - Script result reporting Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 37 +++++++++++++++++++ .../selftests/net/mptcp/mptcp_sockopt.sh | 8 ++++ 2 files changed, 45 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 3bef535ce981..1e7cacdebc72 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -241,6 +241,21 @@ static void do_setsockopt_tos(int fd) die_perror("setsockopt(IP_TOS)"); } =20 +static void do_setsockopt_freebind(int fd) +{ + int optname =3D IP_FREEBIND; + int level =3D SOL_IP; + int enable =3D 1; + + if (pf =3D=3D AF_INET6) { + level =3D SOL_IPV6; + optname =3D IPV6_FREEBIND; + } + + if (setsockopt(fd, level, optname, &enable, sizeof(enable))) + perror("setsockopt(IP_FREEBIND)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); @@ -248,6 +263,7 @@ static void do_setsockopts(int fd) do_setsockopt_bindtodevice(fd); do_setsockopt_bindtoifindex(fd); do_setsockopt_tos(fd); + do_setsockopt_freebind(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -704,6 +720,25 @@ static void do_getsockopt_tos(int fd) xerror("expect socklen_t =3D=3D -1"); } =20 +static void do_getsockopt_freebind(int fd) +{ + int optname =3D IP_FREEBIND; + int level =3D SOL_IP; + socklen_t len; + int enable; + + if (pf =3D=3D AF_INET6) { + level =3D SOL_IPV6; + optname =3D IPV6_FREEBIND; + } + + len =3D sizeof(enable); + if (getsockopt(fd, level, optname, &enable, &len)) + die_perror("getsockopt(IP_FREEBIND)"); + + assert(enable =3D=3D 1); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -724,6 +759,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_bindtoifindex(fd); =20 do_getsockopt_tos(fd); + + do_getsockopt_freebind(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 9972012d08f6..b5054533872b 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -293,6 +293,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "IP_TOS sockopt v4" =20 + print_title "IP_FREEBIND sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IP_FREEBIND sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -327,6 +331,10 @@ do_mptcp_sockopt_tests() print_title "IP_TOS sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "IP_TOS sockopt v6" + + print_title "IPV6_FREEBIND sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IPV6_FREEBIND sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E9559315779 for ; Tue, 19 Aug 2025 09:00:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594038; cv=none; b=pZgDeDZNDrYTPAW8UInqMCWZs+AUovBOoTlP1/Fw8f1IyzAOWQOFyEnX6kZmPLr9Z7bPqfdndVK3DOsMekw/W3IPZQ0vv8ap/YPKqZvOj+gBA0v3Q/1Hw/bqaJY1BuSnrtftQaHEXJ/HY0dLZpncO6jh8Fpmiv9SyIYVJPXHb1A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594038; c=relaxed/simple; bh=huId9eEblWu60Eo75YpwbQrUGA7hIi+zvdlRHKWU2RU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uYcYukj6fDWWQnMTJGatiC/DahC+tliYYs+/eUhJfgWeTCQfQCPp1FKWf2UYFNpysvwVE24Ddu/YJF4drQCY0Zg+/Mmn71i9kMpwbVSP7wYOwZ8YXfO19QL8138q/BPIhuSjFeVB+HGI48D3jG0EYg4FsqeopVtjZZb7nivuGZc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NlvWHR6G; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NlvWHR6G" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 644D1C4CEF1; Tue, 19 Aug 2025 09:00:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594037; bh=huId9eEblWu60Eo75YpwbQrUGA7hIi+zvdlRHKWU2RU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NlvWHR6GbN+Z4M823HCej1c+sv0g+PoQzL8K9SkpZiAjEIFkCK8K2FSfeELinj9qx jlKpbKyfHiSsZqxj4GPQx9AaF3E8J2XmdsKOvEkD/tkuWvW5G7wejWV9HZmY9g6GPC XorHNzaNIK+G1cJYKuzPGLO+eK+K5ULnaxqvn10itqrsvppWyItsTrQTcu8rywbmxj qQR1AGIl+R9F+rqEoFfiiyWvi9/6mutsp2ZnWT3858F05qjQDrqF48v2Gsj6QpYOON IUJlS95WHHuyOKxMozq1QU2OUxSrkb3yenBCVqv1A8ORHGnniUTKMiiU5nEtRJX60R +2tUphU1mMgSQ== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 08/11] selftests: mptcp: sockopt: add IP_TRANSPARENT tests Date: Tue, 19 Aug 2025 17:00:14 +0800 Message-ID: <754dcbcd5da7af5eb8a44393002f74864fbb8830.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Implement tests for transparent socket options: - IP_TRANSPARENT (IPv4) and IPV6_TRANSPARENT (IPv6) - Setsockopt and getsockopt helpers - State verification after setting - IPv4/IPv6 coverage in test script Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 37 +++++++++++++++++++ .../selftests/net/mptcp/mptcp_sockopt.sh | 8 ++++ 2 files changed, 45 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 1e7cacdebc72..fe54c333e455 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -256,6 +256,21 @@ static void do_setsockopt_freebind(int fd) perror("setsockopt(IP_FREEBIND)"); } =20 +static void do_setsockopt_transparent(int fd) +{ + int optname =3D IP_TRANSPARENT; + int level =3D SOL_IP; + int enable =3D 1; + + if (pf =3D=3D AF_INET6) { + level =3D SOL_IPV6; + optname =3D IPV6_TRANSPARENT; + } + + if (setsockopt(fd, level, optname, &enable, sizeof(enable))) + perror("setsockopt(IP_TRANSPARENT)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); @@ -264,6 +279,7 @@ static void do_setsockopts(int fd) do_setsockopt_bindtoifindex(fd); do_setsockopt_tos(fd); do_setsockopt_freebind(fd); + do_setsockopt_transparent(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -739,6 +755,25 @@ static void do_getsockopt_freebind(int fd) assert(enable =3D=3D 1); } =20 +static void do_getsockopt_transparent(int fd) +{ + int optname =3D IP_FREEBIND; + int level =3D SOL_IP; + socklen_t len; + int enable; + + if (pf =3D=3D AF_INET6) { + level =3D SOL_IPV6; + optname =3D IPV6_FREEBIND; + } + + len =3D sizeof(enable); + if (getsockopt(fd, level, optname, &enable, &len)) + die_perror("getsockopt(IP_TRANSPARENT)"); + + assert(enable =3D=3D 1); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -761,6 +796,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_tos(fd); =20 do_getsockopt_freebind(fd); + + do_getsockopt_transparent(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index b5054533872b..ed73ad7bba66 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -297,6 +297,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "IP_FREEBIND sockopt v4" =20 + print_title "IP_TRANSPARENT sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IP_TRANSPARENT sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -335,6 +339,10 @@ do_mptcp_sockopt_tests() print_title "IPV6_FREEBIND sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "IPV6_FREEBIND sockopt v6" + + print_title "IPV6_TRANSPARENT sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IPV6_TRANSPARENT sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0549931577D for ; Tue, 19 Aug 2025 09:00:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594040; cv=none; b=q4XOgceeLXcEAW9nk8f8dpH0QEvf+1/ZPs9WLxPzT1cpeD9BfaOIkGrD04qVyUchOfZnTe7kaO+Aw2cyL5enO6ZPW7MmnGhwtLdQnXNyOs4gCIc5Do4tPs4f6lAz96kopFqxk51/lWFfszblux8bbJMcJI52dtVovpoTW4iK8Ao= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594040; c=relaxed/simple; bh=KV3bTDYQw3aJTuMs/eRT42XhnKRabo0IyCTn3wBe8lw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rjdtwxILiVu6RTou0+cJ0P6Yr2i8XV9rdO/5LDLTWOn2SbBVIi10ZnTkrAw5rKNOtH6xSohz55Yzj3SCW2gOqGXOhG9pJPaTyBHupAisaIlHQ5e1TVVeRzOZafcLT964dV4K6ivNYOTG1eCsmVYOUNtofDi6+D6rOa2sbQJFphI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Jnuk/wbc; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Jnuk/wbc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 273ABC4CEF1; Tue, 19 Aug 2025 09:00:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594039; bh=KV3bTDYQw3aJTuMs/eRT42XhnKRabo0IyCTn3wBe8lw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Jnuk/wbc2ljubLZJaAgoGEBPkRNHjCizfq24tetimWuSQmo4gFltjTqYGuaDE/Wxw R2IapaHLy5c0skUL6odFqJk9Hcf7YVZ7tPUSC4AJenP0X3IhfWjg9g0FHQnmtG8SPV GNuyPoZ+6jBDkVQHJw1Xfr5fYNv1AcwLRDwHP15HvkXe2UfM7HpxjPciBQI/LTvKG0 OCt5OAENg3kyugmmPvpKux11yqMUgUlMLR9uVc/jYfyeWwVXF9Robu9z/MpklMIbb0 2RAXn1xuzp6FjpVUuqJwVxy7i2jkvcNRcSrH3/DklrgenFFwOb0hq81FCNBAIqvT1g hCCP5brJ4JEsA== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 09/11] selftests: mptcp: sockopt: add IP_BIND_ADDRESS_NO_PORT test Date: Tue, 19 Aug 2025 17:00:15 +0800 Message-ID: <23fff5bbf1251eeb2bd5561fe4c283ff6dd1fbd0.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add tests for the IP_BIND_ADDRESS_NO_PORT socket option: - Enables the option via setsockopt - Verifies the enabled state via getsockopt - Includes tests for both IPv4 and IPv6 - Updates test script output Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 25 +++++++++++++++++++ .../selftests/net/mptcp/mptcp_sockopt.sh | 8 ++++++ 2 files changed, 33 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index fe54c333e455..02b7ec774b86 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -271,6 +271,15 @@ static void do_setsockopt_transparent(int fd) perror("setsockopt(IP_TRANSPARENT)"); } =20 +static void do_setsockopt_bind_address_no_port(int fd) +{ + int enable =3D 1; + + if (setsockopt(fd, SOL_IP, IP_BIND_ADDRESS_NO_PORT, &enable, + sizeof(enable))) + perror("setsockopt(IP_BIND_ADDRESS_NO_PORT)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); @@ -280,6 +289,7 @@ static void do_setsockopts(int fd) do_setsockopt_tos(fd); do_setsockopt_freebind(fd); do_setsockopt_transparent(fd); + do_setsockopt_bind_address_no_port(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -774,6 +784,19 @@ static void do_getsockopt_transparent(int fd) assert(enable =3D=3D 1); } =20 +static void do_getsockopt_bind_address_no_port(int fd) +{ + socklen_t len; + int enable; + + len =3D sizeof(enable); + if (getsockopt(fd, SOL_IP, IP_BIND_ADDRESS_NO_PORT, + &enable, &len)) + die_perror("getsockopt(IP_TRANSPARENT)"); + + assert(enable =3D=3D 1); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -798,6 +821,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_freebind(fd); =20 do_getsockopt_transparent(fd); + + do_getsockopt_bind_address_no_port(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index ed73ad7bba66..1bee46c9b29a 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -301,6 +301,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "IP_TRANSPARENT sockopt v4" =20 + print_title "IP_BIND_ADDRESS_NO_PORT sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IP_BIND_ADDRESS_NO_PORT sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -343,6 +347,10 @@ do_mptcp_sockopt_tests() print_title "IPV6_TRANSPARENT sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "IPV6_TRANSPARENT sockopt v6" + + print_title "IP_BIND_ADDRESS_NO_PORT sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IP_BIND_ADDRESS_NO_PORT sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 96A8B315779 for ; Tue, 19 Aug 2025 09:00:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594041; cv=none; b=fBHAcnE3yhNSvakcLbjc30B67gbRX8shbybpD+CQNxUs/pinxtbQoYjyvvpSjYNVozozvJ/yVMWMC93inKhzJm5ski40mOJ5WtzIPDU/jmzJWwbgPm0zvOiolUAD2vnvLrkemXPHlaCnfbZAGkLRQyUQ/G1b4r/sZ+J4ev7YmM8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594041; c=relaxed/simple; bh=qR9rkROvrKtDJG35Qv5DT6JcxECGdEl8tEKB/1Zy5oY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=T15MoLagmQaTbroAhSCohRQALBcdX3gIKcPil9sHnfmL3tBobfTayEUE5ZjLtl82r8HAiT0n2blv+1JGRO6oOji05y1mDWw7nY/qy3ccIacwKjS5ySHPx76IIPu8dAZsOhdhehm9zTf2YlEC+FiO+dQ5KECUdzh9B3m9TY0IG80= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DS/4rQHH; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DS/4rQHH" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4C301C116C6; Tue, 19 Aug 2025 09:00:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594041; bh=qR9rkROvrKtDJG35Qv5DT6JcxECGdEl8tEKB/1Zy5oY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DS/4rQHHBnhIxLcFa8HXtu+R4DFxgUVWYiakUTyLn/Jy15PXtOEYVDUQbFB9yxcLv maRDK2AT3XybsI8Dj5fXUffpF8lEP+RoSOLqXsoceHCSpJ/rGUAG3tmdy6Qane3kPu vHHnZ/LJWu1aiYZX7vikD2BCk0dAVO13OjCBH0Xnnx75yc66xw9sqJ5OChWQtcVw5f Z/nXoaM13ZYnJuxJlIz6Ch9AMSOcTTtMHGxnyPEY9WfXHiOgX1vBLL07YXXlcIsAeA dZCF1JdZf+3IPwMpc9CfAvxgSScafXEMXaNfhXF0Ie5w72t/YMEJsHTBxQ4vVe73OI 81ERn1Z4Qmfbw== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 10/11] selftests: mptcp: sockopt: add IP_LOCAL_PORT_RANGE test Date: Tue, 19 Aug 2025 17:00:16 +0800 Message-ID: <956a9318bb687f41652b7a73642ea7a536ce2f0f.1755592822.git.tanggeliang@kylinos.cn> X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add tests for IP_LOCAL_PORT_RANGE: - Sets port range to 30000-31000 - Verifies the range via getsockopt - Covers both IPv4 and IPv6 - Reports results in test script Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 25 +++++++++++++++++++ .../selftests/net/mptcp/mptcp_sockopt.sh | 8 ++++++ 2 files changed, 33 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 02b7ec774b86..3e2072869527 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -280,6 +280,15 @@ static void do_setsockopt_bind_address_no_port(int fd) perror("setsockopt(IP_BIND_ADDRESS_NO_PORT)"); } =20 +static void do_setsockopt_local_port_range(int fd) +{ + uint32_t port_range =3D (31000 << 16 | 30000); // [30000 - 31000] + + if (setsockopt(fd, SOL_IP, IP_LOCAL_PORT_RANGE, &port_range, + sizeof(port_range))) + perror("setsockopt(IP_LOCAL_PORT_RANGE)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); @@ -290,6 +299,7 @@ static void do_setsockopts(int fd) do_setsockopt_freebind(fd); do_setsockopt_transparent(fd); do_setsockopt_bind_address_no_port(fd); + do_setsockopt_local_port_range(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -797,6 +807,19 @@ static void do_getsockopt_bind_address_no_port(int fd) assert(enable =3D=3D 1); } =20 +static void do_getsockopt_local_port_range(int fd) +{ + uint32_t port_range; + socklen_t len; + + len =3D sizeof(port_range); + if (getsockopt(fd, SOL_IP, IP_LOCAL_PORT_RANGE, + &port_range, &len)) + die_perror("getsockopt(IP_LOCAL_PORT_RANGE)"); + + assert(port_range =3D=3D (31000 << 16 | 30000)); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -823,6 +846,8 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_transparent(fd); =20 do_getsockopt_bind_address_no_port(fd); + + do_getsockopt_local_port_range(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index 1bee46c9b29a..a688917a13c1 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -305,6 +305,10 @@ do_mptcp_sockopt_tests() mptcp_lib_pr_ok mptcp_lib_result_pass "IP_BIND_ADDRESS_NO_PORT sockopt v4" =20 + print_title "IP_LOCAL_PORT_RANGE sockopt v4" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IP_LOCAL_PORT_RANGE sockopt v4" + ip netns exec "$ns_sbox" ./mptcp_sockopt -6 lret=3D$? =20 @@ -351,6 +355,10 @@ do_mptcp_sockopt_tests() print_title "IP_BIND_ADDRESS_NO_PORT sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "IP_BIND_ADDRESS_NO_PORT sockopt v6" + + print_title "IP_LOCAL_PORT_RANGE sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IP_LOCAL_PORT_RANGE sockopt v6" } =20 run_tests() --=20 2.48.1 From nobody Wed Sep 17 18:08:12 2025 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D117F25F79A for ; Tue, 19 Aug 2025 09:00:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594043; cv=none; b=GvQpb37a40otr/4Dzsh2uGwFUWGYi4GUzZiJpASp7MmpLRxUqLe93LR/HBRNxuvXHKJJAuAy/IFvWpdMNU1E//PvAwphTxQBYrnW7/OWIQh+PbBQKETn9MFO9CYAQJUMl2PXpFncFI6CyyeBJfcLRWsvff2uHiV7KCZ6e1eIn6s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755594043; c=relaxed/simple; bh=/x/jziq25RQCXehcntFgaQALn386mKczQ1osaeu4bT8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e20VPmedIyqwWoTjSu8n+bCjMTaCfu2AZ3a4sga/y7Wvmdg03txMl1zJ1u0oA2j6b8qF5wNTC2nT4iepPNzdqHfu2GBulKpoe2KsVEA/Rtsc/8XOZAD9k0LVWwR23k01FDJVIpssYStCDsW+Bv2TRJezTJ2mtZ2lG5d85peSI98= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ltM9EIqY; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ltM9EIqY" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 25E42C116B1; Tue, 19 Aug 2025 09:00:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1755594043; bh=/x/jziq25RQCXehcntFgaQALn386mKczQ1osaeu4bT8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ltM9EIqYB1FfClziZTLkpuT2A0KJPQgco5Wltfq9Ne5XVlzPjV2WrtWEx3TNty/Uh k0830YgL+13vaKvGd8wyRk5NcEq52y0E937ACChNKtPozEAjSenfv4QTJxVO6eMgvU 3NdkE+DMQlev76srlj7akfpc8X1ATejttq0xPYxLS8CZyVVkmBmrTXyJUlfW22dNNV /6rBhOMhKxNh2riNL8lUkzmSwdx1ftCs/z3m5Q4YB5FkqHAUvYjF9qAB/wYReZDMTG ggmxkYW/aLcgaH2yvJwXkjWpt8Fw1hwV0SKc4/WCnIq+sAuqVUndYR0SB+qsi/OuAi V0497hisnEKfg== From: Geliang Tang To: mptcp@lists.linux.dev Cc: Geliang Tang Subject: [PATCH mptcp-next 11/11] selftests: mptcp: sockopt: add IPV6_V6ONLY test Date: Tue, 19 Aug 2025 17:00:17 +0800 Message-ID: X-Mailer: git-send-email 2.48.1 In-Reply-To: References: Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Geliang Tang Add IPv6-specific testing for IPV6_V6ONLY: - Enables the option and verifies its state - Restricted to IPv6 sockets - Reports results in the test script Signed-off-by: Geliang Tang --- .../selftests/net/mptcp/mptcp_sockopt.c | 27 +++++++++++++++++++ .../selftests/net/mptcp/mptcp_sockopt.sh | 4 +++ 2 files changed, 31 insertions(+) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c b/tools/test= ing/selftests/net/mptcp/mptcp_sockopt.c index 3e2072869527..3d01cc20afb1 100644 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.c +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.c @@ -289,6 +289,15 @@ static void do_setsockopt_local_port_range(int fd) perror("setsockopt(IP_LOCAL_PORT_RANGE)"); } =20 +static void do_setsockopt_v6only(int fd) +{ + int v6only =3D 1; + + if (setsockopt(fd, SOL_IPV6, IPV6_V6ONLY, &v6only, + sizeof(v6only))) + perror("setsockopt(IPV6_V6ONLY)"); +} + static void do_setsockopts(int fd) { do_setsockopt_reuseaddr(fd); @@ -300,6 +309,9 @@ static void do_setsockopts(int fd) do_setsockopt_transparent(fd); do_setsockopt_bind_address_no_port(fd); do_setsockopt_local_port_range(fd); + + if (pf =3D=3D AF_INET6) + do_setsockopt_v6only(fd); } =20 static int sock_listen_mptcp(const char * const listenaddr, @@ -820,6 +832,18 @@ static void do_getsockopt_local_port_range(int fd) assert(port_range =3D=3D (31000 << 16 | 30000)); } =20 +static void do_getsockopt_v6only(int fd) +{ + socklen_t len; + int v6only; + + len =3D sizeof(v6only); + if (getsockopt(fd, SOL_IPV6, IPV6_V6ONLY, &v6only, &len)) + die_perror("getsockopt(IPV6_V6ONLY)"); + + assert(v6only =3D=3D 1); +} + static void do_getsockopts(struct so_state *s, int fd, size_t r, size_t w) { do_getsockopt_mptcp_info(s, fd, w); @@ -848,6 +872,9 @@ static void do_getsockopts(struct so_state *s, int fd, = size_t r, size_t w) do_getsockopt_bind_address_no_port(fd); =20 do_getsockopt_local_port_range(fd); + + if (pf =3D=3D AF_INET6) + do_getsockopt_v6only(fd); } =20 static void connect_one_server(int fd, int pipefd) diff --git a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh b/tools/tes= ting/selftests/net/mptcp/mptcp_sockopt.sh index a688917a13c1..6664f8f0733d 100755 --- a/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh +++ b/tools/testing/selftests/net/mptcp/mptcp_sockopt.sh @@ -359,6 +359,10 @@ do_mptcp_sockopt_tests() print_title "IP_LOCAL_PORT_RANGE sockopt v6" mptcp_lib_pr_ok mptcp_lib_result_pass "IP_LOCAL_PORT_RANGE sockopt v6" + + print_title "IPV6_V6ONLY sockopt v6" + mptcp_lib_pr_ok + mptcp_lib_result_pass "IPV6_V6ONLY sockopt v6" } =20 run_tests() --=20 2.48.1