Skip to content

Commit 6459838

Browse files
author
Paolo Abeni
committed
Merge branch 'mptcp-socket-option-updates'
Mat Martineau says: ==================== mptcp: Socket option updates Patches 1 and 3 refactor a recent socket option helper function for more generic use, and make use of it in a couple of places. Patch 2 adds TCP_FASTOPEN_NO_COOKIE functionality to MPTCP sockets, similar to TCP_FASTOPEN_CONNECT support recently added in v6.1 ==================== Link: https://lore.kernel.org/r/20221022004505.160988-1-mathew.j.martineau@linux.intel.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2 parents 818a260 + caea646 commit 6459838

File tree

1 file changed

+14
-20
lines changed

1 file changed

+14
-20
lines changed

net/mptcp/sockopt.c

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,7 @@ static bool mptcp_supported_sockopt(int level, int optname)
560560
case TCP_TX_DELAY:
561561
case TCP_INQ:
562562
case TCP_FASTOPEN_CONNECT:
563+
case TCP_FASTOPEN_NO_COOKIE:
563564
return true;
564565
}
565566

@@ -568,8 +569,8 @@ static bool mptcp_supported_sockopt(int level, int optname)
568569
/* TCP_REPAIR, TCP_REPAIR_QUEUE, TCP_QUEUE_SEQ, TCP_REPAIR_OPTIONS,
569570
* TCP_REPAIR_WINDOW are not supported, better avoid this mess
570571
*/
571-
/* TCP_FASTOPEN_KEY, TCP_FASTOPEN, TCP_FASTOPEN_NO_COOKIE,
572-
* are not supported fastopen is currently unsupported
572+
/* TCP_FASTOPEN_KEY, TCP_FASTOPEN are not supported because
573+
* fastopen for the listener side is currently unsupported
573574
*/
574575
}
575576
return false;
@@ -757,29 +758,17 @@ static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname,
757758
return -EOPNOTSUPP;
758759
}
759760

760-
static int mptcp_setsockopt_sol_tcp_defer(struct mptcp_sock *msk, sockptr_t optval,
761-
unsigned int optlen)
762-
{
763-
struct socket *listener;
764-
765-
listener = __mptcp_nmpc_socket(msk);
766-
if (!listener)
767-
return 0; /* TCP_DEFER_ACCEPT does not fail */
768-
769-
return tcp_setsockopt(listener->sk, SOL_TCP, TCP_DEFER_ACCEPT, optval, optlen);
770-
}
771-
772-
static int mptcp_setsockopt_sol_tcp_fastopen_connect(struct mptcp_sock *msk, sockptr_t optval,
773-
unsigned int optlen)
761+
static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
762+
sockptr_t optval, unsigned int optlen)
774763
{
775764
struct socket *sock;
776765

777-
/* Limit to first subflow */
766+
/* Limit to first subflow, before the connection establishment */
778767
sock = __mptcp_nmpc_socket(msk);
779768
if (!sock)
780769
return -EINVAL;
781770

782-
return tcp_setsockopt(sock->sk, SOL_TCP, TCP_FASTOPEN_CONNECT, optval, optlen);
771+
return tcp_setsockopt(sock->sk, level, optname, optval, optlen);
783772
}
784773

785774
static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
@@ -809,9 +798,13 @@ static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
809798
case TCP_NODELAY:
810799
return mptcp_setsockopt_sol_tcp_nodelay(msk, optval, optlen);
811800
case TCP_DEFER_ACCEPT:
812-
return mptcp_setsockopt_sol_tcp_defer(msk, optval, optlen);
801+
/* See tcp.c: TCP_DEFER_ACCEPT does not fail */
802+
mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen);
803+
return 0;
813804
case TCP_FASTOPEN_CONNECT:
814-
return mptcp_setsockopt_sol_tcp_fastopen_connect(msk, optval, optlen);
805+
case TCP_FASTOPEN_NO_COOKIE:
806+
return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname,
807+
optval, optlen);
815808
}
816809

817810
return -EOPNOTSUPP;
@@ -1174,6 +1167,7 @@ static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
11741167
case TCP_CC_INFO:
11751168
case TCP_DEFER_ACCEPT:
11761169
case TCP_FASTOPEN_CONNECT:
1170+
case TCP_FASTOPEN_NO_COOKIE:
11771171
return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname,
11781172
optval, optlen);
11791173
case TCP_INQ:

0 commit comments

Comments
 (0)