From: Geliang Tang <tanggeliang@kylinos.cn>
Implement mptcp_setsockopt_first_sf_only() helper to manage setsockopt
operations applied solely to the first subflow. This centralizes handling
of TCP-level options that require synchronization only with the initial
subflow.
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
net/mptcp/sockopt.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index 2c267aff95be..6cc073fab17c 100644
--- a/net/mptcp/sockopt.c
+++ b/net/mptcp/sockopt.c
@@ -776,8 +776,8 @@ static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname,
return -EOPNOTSUPP;
}
-static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
- sockptr_t optval, unsigned int optlen)
+static int mptcp_setsockopt_sol_tcp_first_sf_only(struct mptcp_sock *msk, int optname,
+ sockptr_t optval, unsigned int optlen)
{
struct sock *sk = (struct sock *)msk;
struct sock *ssk;
@@ -791,13 +791,26 @@ static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int
goto unlock;
}
- ret = tcp_setsockopt(ssk, level, optname, optval, optlen);
+ ret = tcp_setsockopt(ssk, SOL_TCP, optname, optval, optlen);
unlock:
release_sock(sk);
return ret;
}
+static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level,
+ int optname, sockptr_t optval,
+ unsigned int optlen)
+{
+ switch (level) {
+ case SOL_TCP:
+ return mptcp_setsockopt_sol_tcp_first_sf_only(msk, optname,
+ optval, optlen);
+ }
+
+ return -EOPNOTSUPP;
+}
+
static int mptcp_setsockopt_all_sf(struct mptcp_sock *msk, int level,
int optname, sockptr_t optval,
unsigned int optlen)
--
2.48.1