Lines Matching refs:msk
19 static struct sock *__mptcp_tcp_fallback(struct mptcp_sock *msk) in __mptcp_tcp_fallback() argument
21 sock_owned_by_me((const struct sock *)msk); in __mptcp_tcp_fallback()
23 if (likely(!__mptcp_check_fallback(msk))) in __mptcp_tcp_fallback()
26 return msk->first; in __mptcp_tcp_fallback()
50 static void sockopt_seq_inc(struct mptcp_sock *msk) in sockopt_seq_inc() argument
52 u32 seq = (msk->setsockopt_seq + 1) & 0x00ffffff; in sockopt_seq_inc()
54 msk->setsockopt_seq = sockopt_seq_reset((struct sock *)msk) + seq; in sockopt_seq_inc()
57 static int mptcp_get_int_option(struct mptcp_sock *msk, sockptr_t optval, in mptcp_get_int_option() argument
69 static void mptcp_sol_socket_sync_intval(struct mptcp_sock *msk, int optname, int val) in mptcp_sol_socket_sync_intval() argument
72 struct sock *sk = (struct sock *)msk; in mptcp_sol_socket_sync_intval()
75 sockopt_seq_inc(msk); in mptcp_sol_socket_sync_intval()
77 mptcp_for_each_subflow(msk, subflow) { in mptcp_sol_socket_sync_intval()
114 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sol_socket_sync_intval()
121 static int mptcp_sol_socket_intval(struct mptcp_sock *msk, int optname, int val) in mptcp_sol_socket_intval() argument
124 struct sock *sk = (struct sock *)msk; in mptcp_sol_socket_intval()
132 mptcp_sol_socket_sync_intval(msk, optname, val); in mptcp_sol_socket_intval()
136 static void mptcp_so_incoming_cpu(struct mptcp_sock *msk, int val) in mptcp_so_incoming_cpu() argument
138 struct sock *sk = (struct sock *)msk; in mptcp_so_incoming_cpu()
142 mptcp_sol_socket_sync_intval(msk, SO_INCOMING_CPU, val); in mptcp_so_incoming_cpu()
145 static int mptcp_setsockopt_sol_socket_tstamp(struct mptcp_sock *msk, int optname, int val) in mptcp_setsockopt_sol_socket_tstamp() argument
149 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket_tstamp()
158 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_socket_tstamp()
170 static int mptcp_setsockopt_sol_socket_int(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_socket_int() argument
176 ret = mptcp_get_int_option(msk, optval, optlen, &val); in mptcp_setsockopt_sol_socket_int()
182 mptcp_sol_socket_sync_intval(msk, optname, val); in mptcp_setsockopt_sol_socket_int()
191 return mptcp_sol_socket_intval(msk, optname, val); in mptcp_setsockopt_sol_socket_int()
193 mptcp_so_incoming_cpu(msk, val); in mptcp_setsockopt_sol_socket_int()
199 return mptcp_setsockopt_sol_socket_tstamp(msk, optname, val); in mptcp_setsockopt_sol_socket_int()
205 static int mptcp_setsockopt_sol_socket_timestamping(struct mptcp_sock *msk, in mptcp_setsockopt_sol_socket_timestamping() argument
211 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket_timestamping()
236 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_socket_timestamping()
249 static int mptcp_setsockopt_sol_socket_linger(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_socket_linger() argument
253 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket_linger()
270 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_socket_linger()
271 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_socket_linger()
282 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_setsockopt_sol_socket_linger()
290 static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_socket() argument
293 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket()
303 ssock = __mptcp_nmpc_socket(msk); in mptcp_setsockopt_sol_socket()
335 return mptcp_setsockopt_sol_socket_int(msk, optname, optval, in mptcp_setsockopt_sol_socket()
339 return mptcp_setsockopt_sol_socket_timestamping(msk, optname, in mptcp_setsockopt_sol_socket()
342 return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen); in mptcp_setsockopt_sol_socket()
386 static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v6() argument
389 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_v6()
398 ssock = __mptcp_nmpc_socket(msk); in mptcp_setsockopt_v6()
410 sockopt_seq_inc(msk); in mptcp_setsockopt_v6()
578 static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_congestion() argument
582 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_tcp_congestion()
601 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_tcp_congestion()
602 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_tcp_congestion()
610 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_setsockopt_sol_tcp_congestion()
615 strcpy(msk->ca_name, name); in mptcp_setsockopt_sol_tcp_congestion()
621 static int mptcp_setsockopt_sol_tcp_cork(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_cork() argument
625 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_tcp_cork()
635 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_tcp_cork()
636 msk->cork = !!val; in mptcp_setsockopt_sol_tcp_cork()
637 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_tcp_cork()
651 static int mptcp_setsockopt_sol_tcp_nodelay(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_nodelay() argument
655 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_tcp_nodelay()
665 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_tcp_nodelay()
666 msk->nodelay = !!val; in mptcp_setsockopt_sol_tcp_nodelay()
667 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_tcp_nodelay()
681 static int mptcp_setsockopt_sol_ip_set_transparent(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_ip_set_transparent() argument
684 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_ip_set_transparent()
695 ssock = __mptcp_nmpc_socket(msk); in mptcp_setsockopt_sol_ip_set_transparent()
716 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_ip_set_transparent()
721 static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v4_set_tos() argument
725 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_v4_set_tos()
734 sockopt_seq_inc(msk); in mptcp_setsockopt_v4_set_tos()
736 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_v4_set_tos()
746 static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v4() argument
752 return mptcp_setsockopt_sol_ip_set_transparent(msk, optname, optval, optlen); in mptcp_setsockopt_v4()
754 return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen); in mptcp_setsockopt_v4()
760 static int mptcp_setsockopt_sol_tcp_defer(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_defer() argument
765 listener = __mptcp_nmpc_socket(msk); in mptcp_setsockopt_sol_tcp_defer()
772 static int mptcp_setsockopt_sol_tcp_fastopen_connect(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_fastopen_connect() argument
778 sock = __mptcp_nmpc_socket(msk); in mptcp_setsockopt_sol_tcp_fastopen_connect()
785 static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_tcp() argument
788 struct sock *sk = (void *)msk; in mptcp_setsockopt_sol_tcp()
793 ret = mptcp_get_int_option(msk, optval, optlen, &val); in mptcp_setsockopt_sol_tcp()
800 msk->recvmsg_inq = !!val; in mptcp_setsockopt_sol_tcp()
806 return mptcp_setsockopt_sol_tcp_congestion(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
808 return mptcp_setsockopt_sol_tcp_cork(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
810 return mptcp_setsockopt_sol_tcp_nodelay(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
812 return mptcp_setsockopt_sol_tcp_defer(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
814 return mptcp_setsockopt_sol_tcp_fastopen_connect(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
823 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_setsockopt() local
826 pr_debug("msk=%p", msk); in mptcp_setsockopt()
829 return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen); in mptcp_setsockopt()
841 ssk = __mptcp_tcp_fallback(msk); in mptcp_setsockopt()
847 return mptcp_setsockopt_v4(msk, optname, optval, optlen); in mptcp_setsockopt()
850 return mptcp_setsockopt_v6(msk, optname, optval, optlen); in mptcp_setsockopt()
853 return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen); in mptcp_setsockopt()
858 static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname, in mptcp_getsockopt_first_sf_only() argument
861 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_first_sf_only()
867 ssk = msk->first; in mptcp_getsockopt_first_sf_only()
873 ssock = __mptcp_nmpc_socket(msk); in mptcp_getsockopt_first_sf_only()
884 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info) in mptcp_diag_fill_info() argument
891 info->mptcpi_subflows = READ_ONCE(msk->pm.subflows); in mptcp_diag_fill_info()
892 info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled); in mptcp_diag_fill_info()
893 info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted); in mptcp_diag_fill_info()
894 info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used); in mptcp_diag_fill_info()
895 info->mptcpi_subflows_max = mptcp_pm_get_subflows_max(msk); in mptcp_diag_fill_info()
896 val = mptcp_pm_get_add_addr_signal_max(msk); in mptcp_diag_fill_info()
898 val = mptcp_pm_get_add_addr_accept_max(msk); in mptcp_diag_fill_info()
900 info->mptcpi_local_addr_max = mptcp_pm_get_local_addr_max(msk); in mptcp_diag_fill_info()
901 if (test_bit(MPTCP_FALLBACK_DONE, &msk->flags)) in mptcp_diag_fill_info()
903 if (READ_ONCE(msk->can_ack)) in mptcp_diag_fill_info()
906 info->mptcpi_token = READ_ONCE(msk->token); in mptcp_diag_fill_info()
907 info->mptcpi_write_seq = READ_ONCE(msk->write_seq); in mptcp_diag_fill_info()
908 info->mptcpi_snd_una = READ_ONCE(msk->snd_una); in mptcp_diag_fill_info()
909 info->mptcpi_rcv_nxt = READ_ONCE(msk->ack_seq); in mptcp_diag_fill_info()
910 info->mptcpi_csum_enabled = READ_ONCE(msk->csum_enabled); in mptcp_diag_fill_info()
914 static int mptcp_getsockopt_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen) in mptcp_getsockopt_info() argument
924 mptcp_diag_fill_info(msk, &m_info); in mptcp_getsockopt_info()
993 static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_tcpinfo() argument
997 struct sock *sk = &msk->sk.icsk_inet.sk; in mptcp_getsockopt_tcpinfo()
1015 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_tcpinfo()
1085 static int mptcp_getsockopt_subflow_addrs(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_subflow_addrs() argument
1088 struct sock *sk = &msk->sk.icsk_inet.sk; in mptcp_getsockopt_subflow_addrs()
1107 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_subflow_addrs()
1138 static int mptcp_put_int_option(struct mptcp_sock *msk, char __user *optval, in mptcp_put_int_option() argument
1167 static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_sol_tcp() argument
1177 return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname, in mptcp_getsockopt_sol_tcp()
1180 return mptcp_put_int_option(msk, optval, optlen, msk->recvmsg_inq); in mptcp_getsockopt_sol_tcp()
1182 return mptcp_put_int_option(msk, optval, optlen, msk->cork); in mptcp_getsockopt_sol_tcp()
1184 return mptcp_put_int_option(msk, optval, optlen, msk->nodelay); in mptcp_getsockopt_sol_tcp()
1189 static int mptcp_getsockopt_v4(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_v4() argument
1192 struct sock *sk = (void *)msk; in mptcp_getsockopt_v4()
1196 return mptcp_put_int_option(msk, optval, optlen, inet_sk(sk)->tos); in mptcp_getsockopt_v4()
1202 static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_sol_mptcp() argument
1207 return mptcp_getsockopt_info(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1209 return mptcp_getsockopt_tcpinfo(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1211 return mptcp_getsockopt_subflow_addrs(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1220 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_getsockopt() local
1223 pr_debug("msk=%p", msk); in mptcp_getsockopt()
1232 ssk = __mptcp_tcp_fallback(msk); in mptcp_getsockopt()
1238 return mptcp_getsockopt_v4(msk, optname, optval, option); in mptcp_getsockopt()
1240 return mptcp_getsockopt_sol_tcp(msk, optname, optval, option); in mptcp_getsockopt()
1242 return mptcp_getsockopt_sol_mptcp(msk, optname, optval, option); in mptcp_getsockopt()
1246 static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk) in sync_socket_options() argument
1249 struct sock *sk = (struct sock *)msk; in sync_socket_options()
1286 tcp_set_congestion_control(ssk, msk->ca_name, false, true); in sync_socket_options()
1287 __tcp_sock_set_cork(ssk, !!msk->cork); in sync_socket_options()
1288 __tcp_sock_set_nodelay(ssk, !!msk->nodelay); in sync_socket_options()
1294 static void __mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) in __mptcp_sockopt_sync() argument
1298 sync_socket_options(msk, ssk); in __mptcp_sockopt_sync()
1303 void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) in mptcp_sockopt_sync() argument
1307 msk_owned_by_me(msk); in mptcp_sockopt_sync()
1309 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) { in mptcp_sockopt_sync()
1310 __mptcp_sockopt_sync(msk, ssk); in mptcp_sockopt_sync()
1312 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sockopt_sync()
1316 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk) in mptcp_sockopt_sync_locked() argument
1320 msk_owned_by_me(msk); in mptcp_sockopt_sync_locked()
1322 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) { in mptcp_sockopt_sync_locked()
1323 sync_socket_options(msk, ssk); in mptcp_sockopt_sync_locked()
1325 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sockopt_sync_locked()