From: Geliang Tang <tanggeliang@kylinos.cn>
Implement mptcp_setsockopt_sol_tcp_all_sf() helper to apply TCP socket
options to all existing subflows. This ensures consistent configuration
across every subflow in the MPTCP connection.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/sockopt.c | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index 964131ef82d8..81cc24125c29 100644
--- a/net/mptcp/sockopt.c
+++ b/net/mptcp/sockopt.c
@@ -848,9 +848,9 @@ static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level,
return -EOPNOTSUPP;
}
-static int mptcp_setsockopt_all_sf(struct mptcp_sock *msk, int level,
- int optname, sockptr_t optval,
- unsigned int optlen)
+static int mptcp_setsockopt_sol_tcp_all_sf(struct mptcp_sock *msk,
+ int optname, sockptr_t optval,
+ unsigned int optlen)
{
struct mptcp_subflow_context *subflow;
int ret = 0;
@@ -858,13 +858,26 @@ static int mptcp_setsockopt_all_sf(struct mptcp_sock *msk, int level,
mptcp_for_each_subflow(msk, subflow) {
struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
- ret = tcp_setsockopt(ssk, level, optname, optval, optlen);
+ ret = tcp_setsockopt(ssk, SOL_TCP, optname, optval, optlen);
if (ret)
break;
}
return ret;
}
+static int mptcp_setsockopt_all_sf(struct mptcp_sock *msk, int level,
+ int optname, sockptr_t optval,
+ unsigned int optlen)
+{
+ switch (level) {
+ case SOL_TCP:
+ return mptcp_setsockopt_sol_tcp_all_sf(msk, optname,
+ optval, optlen);
+ }
+
+ return -EOPNOTSUPP;
+}
+
static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
sockptr_t optval, unsigned int optlen)
{
--
2.48.1