Lines Matching refs:msk
20 static struct sock *__mptcp_tcp_fallback(struct mptcp_sock *msk) in __mptcp_tcp_fallback() argument
22 msk_owned_by_me(msk); in __mptcp_tcp_fallback()
24 if (likely(!__mptcp_check_fallback(msk))) in __mptcp_tcp_fallback()
27 return msk->first; in __mptcp_tcp_fallback()
51 static void sockopt_seq_inc(struct mptcp_sock *msk) in sockopt_seq_inc() argument
53 u32 seq = (msk->setsockopt_seq + 1) & 0x00ffffff; in sockopt_seq_inc()
55 msk->setsockopt_seq = sockopt_seq_reset((struct sock *)msk) + seq; in sockopt_seq_inc()
58 static int mptcp_get_int_option(struct mptcp_sock *msk, sockptr_t optval, in mptcp_get_int_option() argument
70 static void mptcp_sol_socket_sync_intval(struct mptcp_sock *msk, int optname, int val) in mptcp_sol_socket_sync_intval() argument
73 struct sock *sk = (struct sock *)msk; in mptcp_sol_socket_sync_intval()
76 sockopt_seq_inc(msk); in mptcp_sol_socket_sync_intval()
78 mptcp_for_each_subflow(msk, subflow) { in mptcp_sol_socket_sync_intval()
115 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sol_socket_sync_intval()
122 static int mptcp_sol_socket_intval(struct mptcp_sock *msk, int optname, int val) in mptcp_sol_socket_intval() argument
125 struct sock *sk = (struct sock *)msk; in mptcp_sol_socket_intval()
133 mptcp_sol_socket_sync_intval(msk, optname, val); in mptcp_sol_socket_intval()
137 static void mptcp_so_incoming_cpu(struct mptcp_sock *msk, int val) in mptcp_so_incoming_cpu() argument
139 struct sock *sk = (struct sock *)msk; in mptcp_so_incoming_cpu()
143 mptcp_sol_socket_sync_intval(msk, SO_INCOMING_CPU, val); in mptcp_so_incoming_cpu()
146 static int mptcp_setsockopt_sol_socket_tstamp(struct mptcp_sock *msk, int optname, int val) in mptcp_setsockopt_sol_socket_tstamp() argument
150 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket_tstamp()
159 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_socket_tstamp()
171 static int mptcp_setsockopt_sol_socket_int(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_socket_int() argument
177 ret = mptcp_get_int_option(msk, optval, optlen, &val); in mptcp_setsockopt_sol_socket_int()
183 mptcp_sol_socket_sync_intval(msk, optname, val); in mptcp_setsockopt_sol_socket_int()
192 return mptcp_sol_socket_intval(msk, optname, val); in mptcp_setsockopt_sol_socket_int()
194 mptcp_so_incoming_cpu(msk, val); in mptcp_setsockopt_sol_socket_int()
200 return mptcp_setsockopt_sol_socket_tstamp(msk, optname, val); in mptcp_setsockopt_sol_socket_int()
206 static int mptcp_setsockopt_sol_socket_timestamping(struct mptcp_sock *msk, in mptcp_setsockopt_sol_socket_timestamping() argument
212 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket_timestamping()
237 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_socket_timestamping()
250 static int mptcp_setsockopt_sol_socket_linger(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_socket_linger() argument
254 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket_linger()
271 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_socket_linger()
272 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_socket_linger()
283 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_setsockopt_sol_socket_linger()
291 static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_socket() argument
294 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket()
304 ssk = __mptcp_nmpc_sk(msk); in mptcp_setsockopt_sol_socket()
336 return mptcp_setsockopt_sol_socket_int(msk, optname, optval, in mptcp_setsockopt_sol_socket()
340 return mptcp_setsockopt_sol_socket_timestamping(msk, optname, in mptcp_setsockopt_sol_socket()
343 return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen); in mptcp_setsockopt_sol_socket()
388 static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v6() argument
391 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_v6()
400 ssk = __mptcp_nmpc_sk(msk); in mptcp_setsockopt_v6()
412 sockopt_seq_inc(msk); in mptcp_setsockopt_v6()
582 static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_congestion() argument
586 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_tcp_congestion()
605 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_tcp_congestion()
606 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_tcp_congestion()
614 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_setsockopt_sol_tcp_congestion()
619 strcpy(msk->ca_name, name); in mptcp_setsockopt_sol_tcp_congestion()
625 static int mptcp_setsockopt_sol_tcp_cork(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_cork() argument
629 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_tcp_cork()
639 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_tcp_cork()
640 msk->cork = !!val; in mptcp_setsockopt_sol_tcp_cork()
641 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_tcp_cork()
655 static int mptcp_setsockopt_sol_tcp_nodelay(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_nodelay() argument
659 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_tcp_nodelay()
669 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_tcp_nodelay()
670 msk->nodelay = !!val; in mptcp_setsockopt_sol_tcp_nodelay()
671 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_tcp_nodelay()
685 static int mptcp_setsockopt_sol_ip_set_transparent(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_ip_set_transparent() argument
688 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_ip_set_transparent()
698 ssk = __mptcp_nmpc_sk(msk); in mptcp_setsockopt_sol_ip_set_transparent()
718 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_ip_set_transparent()
723 static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v4_set_tos() argument
727 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_v4_set_tos()
736 sockopt_seq_inc(msk); in mptcp_setsockopt_v4_set_tos()
738 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_v4_set_tos()
748 static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v4() argument
754 return mptcp_setsockopt_sol_ip_set_transparent(msk, optname, optval, optlen); in mptcp_setsockopt_v4()
756 return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen); in mptcp_setsockopt_v4()
762 static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname, in mptcp_setsockopt_first_sf_only() argument
765 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_first_sf_only()
771 ssk = __mptcp_nmpc_sk(msk); in mptcp_setsockopt_first_sf_only()
784 static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_tcp() argument
787 struct sock *sk = (void *)msk; in mptcp_setsockopt_sol_tcp()
792 ret = mptcp_get_int_option(msk, optval, optlen, &val); in mptcp_setsockopt_sol_tcp()
799 msk->recvmsg_inq = !!val; in mptcp_setsockopt_sol_tcp()
805 return mptcp_setsockopt_sol_tcp_congestion(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
807 return mptcp_setsockopt_sol_tcp_cork(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
809 return mptcp_setsockopt_sol_tcp_nodelay(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
812 mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen); in mptcp_setsockopt_sol_tcp()
818 return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, in mptcp_setsockopt_sol_tcp()
828 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_setsockopt() local
831 pr_debug("msk=%p", msk); in mptcp_setsockopt()
834 return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen); in mptcp_setsockopt()
846 ssk = __mptcp_tcp_fallback(msk); in mptcp_setsockopt()
852 return mptcp_setsockopt_v4(msk, optname, optval, optlen); in mptcp_setsockopt()
855 return mptcp_setsockopt_v6(msk, optname, optval, optlen); in mptcp_setsockopt()
858 return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen); in mptcp_setsockopt()
863 static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname, in mptcp_getsockopt_first_sf_only() argument
866 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_first_sf_only()
871 ssk = msk->first; in mptcp_getsockopt_first_sf_only()
877 ssk = __mptcp_nmpc_sk(msk); in mptcp_getsockopt_first_sf_only()
890 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info) in mptcp_diag_fill_info() argument
892 struct sock *sk = (struct sock *)msk; in mptcp_diag_fill_info()
898 info->mptcpi_subflows = READ_ONCE(msk->pm.subflows); in mptcp_diag_fill_info()
899 info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled); in mptcp_diag_fill_info()
900 info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted); in mptcp_diag_fill_info()
901 info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used); in mptcp_diag_fill_info()
907 if (mptcp_pm_is_kernel(msk)) { in mptcp_diag_fill_info()
909 mptcp_pm_get_subflows_max(msk); in mptcp_diag_fill_info()
911 mptcp_pm_get_add_addr_signal_max(msk); in mptcp_diag_fill_info()
913 mptcp_pm_get_add_addr_accept_max(msk); in mptcp_diag_fill_info()
915 mptcp_pm_get_local_addr_max(msk); in mptcp_diag_fill_info()
918 if (test_bit(MPTCP_FALLBACK_DONE, &msk->flags)) in mptcp_diag_fill_info()
920 if (READ_ONCE(msk->can_ack)) in mptcp_diag_fill_info()
924 info->mptcpi_snd_una = msk->snd_una; in mptcp_diag_fill_info()
925 info->mptcpi_rcv_nxt = msk->ack_seq; in mptcp_diag_fill_info()
926 info->mptcpi_bytes_acked = msk->bytes_acked; in mptcp_diag_fill_info()
930 info->mptcpi_csum_enabled = msk->csum_enabled; in mptcp_diag_fill_info()
931 info->mptcpi_token = msk->token; in mptcp_diag_fill_info()
932 info->mptcpi_write_seq = msk->write_seq; in mptcp_diag_fill_info()
934 info->mptcpi_bytes_sent = msk->bytes_sent; in mptcp_diag_fill_info()
935 info->mptcpi_bytes_received = msk->bytes_received; in mptcp_diag_fill_info()
936 info->mptcpi_bytes_retrans = msk->bytes_retrans; in mptcp_diag_fill_info()
941 static int mptcp_getsockopt_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen) in mptcp_getsockopt_info() argument
951 mptcp_diag_fill_info(msk, &m_info); in mptcp_getsockopt_info()
1021 static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_tcpinfo() argument
1025 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_tcpinfo()
1043 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_tcpinfo()
1113 static int mptcp_getsockopt_subflow_addrs(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_subflow_addrs() argument
1117 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_subflow_addrs()
1135 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_subflow_addrs()
1211 static int mptcp_getsockopt_full_info(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_full_info() argument
1216 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_full_info()
1229 mptcp_diag_fill_info(msk, &mfi.mptcp_info); in mptcp_getsockopt_full_info()
1243 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_full_info()
1285 static int mptcp_put_int_option(struct mptcp_sock *msk, char __user *optval, in mptcp_put_int_option() argument
1314 static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_sol_tcp() argument
1327 return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname, in mptcp_getsockopt_sol_tcp()
1330 return mptcp_put_int_option(msk, optval, optlen, msk->recvmsg_inq); in mptcp_getsockopt_sol_tcp()
1332 return mptcp_put_int_option(msk, optval, optlen, msk->cork); in mptcp_getsockopt_sol_tcp()
1334 return mptcp_put_int_option(msk, optval, optlen, msk->nodelay); in mptcp_getsockopt_sol_tcp()
1339 static int mptcp_getsockopt_v4(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_v4() argument
1342 struct sock *sk = (void *)msk; in mptcp_getsockopt_v4()
1346 return mptcp_put_int_option(msk, optval, optlen, inet_sk(sk)->tos); in mptcp_getsockopt_v4()
1352 static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_sol_mptcp() argument
1357 return mptcp_getsockopt_info(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1359 return mptcp_getsockopt_full_info(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1361 return mptcp_getsockopt_tcpinfo(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1363 return mptcp_getsockopt_subflow_addrs(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1372 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_getsockopt() local
1375 pr_debug("msk=%p", msk); in mptcp_getsockopt()
1384 ssk = __mptcp_tcp_fallback(msk); in mptcp_getsockopt()
1390 return mptcp_getsockopt_v4(msk, optname, optval, option); in mptcp_getsockopt()
1392 return mptcp_getsockopt_sol_tcp(msk, optname, optval, option); in mptcp_getsockopt()
1394 return mptcp_getsockopt_sol_mptcp(msk, optname, optval, option); in mptcp_getsockopt()
1398 static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk) in sync_socket_options() argument
1401 struct sock *sk = (struct sock *)msk; in sync_socket_options()
1439 tcp_set_congestion_control(ssk, msk->ca_name, false, true); in sync_socket_options()
1440 __tcp_sock_set_cork(ssk, !!msk->cork); in sync_socket_options()
1441 __tcp_sock_set_nodelay(ssk, !!msk->nodelay); in sync_socket_options()
1447 static void __mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) in __mptcp_sockopt_sync() argument
1451 sync_socket_options(msk, ssk); in __mptcp_sockopt_sync()
1456 void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) in mptcp_sockopt_sync() argument
1460 msk_owned_by_me(msk); in mptcp_sockopt_sync()
1462 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) { in mptcp_sockopt_sync()
1463 __mptcp_sockopt_sync(msk, ssk); in mptcp_sockopt_sync()
1465 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sockopt_sync()
1469 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk) in mptcp_sockopt_sync_locked() argument
1473 msk_owned_by_me(msk); in mptcp_sockopt_sync_locked()
1475 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) { in mptcp_sockopt_sync_locked()
1476 sync_socket_options(msk, ssk); in mptcp_sockopt_sync_locked()
1478 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sockopt_sync_locked()