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()
116 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sol_socket_sync_intval()
123 static int mptcp_sol_socket_intval(struct mptcp_sock *msk, int optname, int val) in mptcp_sol_socket_intval() argument
126 struct sock *sk = (struct sock *)msk; in mptcp_sol_socket_intval()
134 mptcp_sol_socket_sync_intval(msk, optname, val); in mptcp_sol_socket_intval()
138 static void mptcp_so_incoming_cpu(struct mptcp_sock *msk, int val) in mptcp_so_incoming_cpu() argument
140 struct sock *sk = (struct sock *)msk; in mptcp_so_incoming_cpu()
144 mptcp_sol_socket_sync_intval(msk, SO_INCOMING_CPU, val); in mptcp_so_incoming_cpu()
147 static int mptcp_setsockopt_sol_socket_tstamp(struct mptcp_sock *msk, int optname, int val) in mptcp_setsockopt_sol_socket_tstamp() argument
151 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_socket_tstamp()
160 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_socket_tstamp()
172 static int mptcp_setsockopt_sol_socket_int(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_socket_int() argument
178 ret = mptcp_get_int_option(msk, optval, optlen, &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 ssk = __mptcp_nmpc_sk(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()
387 static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v6() argument
390 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_v6()
399 ssk = __mptcp_nmpc_sk(msk); in mptcp_setsockopt_v6()
411 sockopt_seq_inc(msk); in mptcp_setsockopt_v6()
581 static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_congestion() argument
585 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_tcp_congestion()
604 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_tcp_congestion()
605 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_tcp_congestion()
613 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_setsockopt_sol_tcp_congestion()
618 strcpy(msk->ca_name, name); in mptcp_setsockopt_sol_tcp_congestion()
624 static int __mptcp_setsockopt_set_val(struct mptcp_sock *msk, int max, in __mptcp_setsockopt_set_val() argument
631 mptcp_for_each_subflow(msk, subflow) { in __mptcp_setsockopt_set_val()
643 sockopt_seq_inc(msk); in __mptcp_setsockopt_set_val()
649 static int __mptcp_setsockopt_sol_tcp_cork(struct mptcp_sock *msk, int val) in __mptcp_setsockopt_sol_tcp_cork() argument
652 struct sock *sk = (struct sock *)msk; in __mptcp_setsockopt_sol_tcp_cork()
654 sockopt_seq_inc(msk); in __mptcp_setsockopt_sol_tcp_cork()
655 msk->cork = !!val; in __mptcp_setsockopt_sol_tcp_cork()
656 mptcp_for_each_subflow(msk, subflow) { in __mptcp_setsockopt_sol_tcp_cork()
669 static int __mptcp_setsockopt_sol_tcp_nodelay(struct mptcp_sock *msk, int val) in __mptcp_setsockopt_sol_tcp_nodelay() argument
672 struct sock *sk = (struct sock *)msk; in __mptcp_setsockopt_sol_tcp_nodelay()
674 sockopt_seq_inc(msk); in __mptcp_setsockopt_sol_tcp_nodelay()
675 msk->nodelay = !!val; in __mptcp_setsockopt_sol_tcp_nodelay()
676 mptcp_for_each_subflow(msk, subflow) { in __mptcp_setsockopt_sol_tcp_nodelay()
688 static int mptcp_setsockopt_sol_ip_set_transparent(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_ip_set_transparent() argument
691 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_ip_set_transparent()
701 ssk = __mptcp_nmpc_sk(msk); in mptcp_setsockopt_sol_ip_set_transparent()
721 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_ip_set_transparent()
726 static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v4_set_tos() argument
730 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_v4_set_tos()
739 sockopt_seq_inc(msk); in mptcp_setsockopt_v4_set_tos()
741 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_v4_set_tos()
754 static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v4() argument
760 return mptcp_setsockopt_sol_ip_set_transparent(msk, optname, optval, optlen); in mptcp_setsockopt_v4()
762 return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen); in mptcp_setsockopt_v4()
768 static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname, in mptcp_setsockopt_first_sf_only() argument
771 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_first_sf_only()
777 ssk = __mptcp_nmpc_sk(msk); in mptcp_setsockopt_first_sf_only()
790 static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_tcp() argument
793 struct sock *sk = (void *)msk; in mptcp_setsockopt_sol_tcp()
800 return mptcp_setsockopt_sol_tcp_congestion(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
803 mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen); in mptcp_setsockopt_sol_tcp()
809 return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, in mptcp_setsockopt_sol_tcp()
813 ret = mptcp_get_int_option(msk, optval, optlen, &val); in mptcp_setsockopt_sol_tcp()
823 msk->recvmsg_inq = !!val; in mptcp_setsockopt_sol_tcp()
826 ret = __mptcp_setsockopt_sol_tcp_cork(msk, val); in mptcp_setsockopt_sol_tcp()
829 ret = __mptcp_setsockopt_sol_tcp_nodelay(msk, val); in mptcp_setsockopt_sol_tcp()
832 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPIDLE, in mptcp_setsockopt_sol_tcp()
834 &msk->keepalive_idle, val); in mptcp_setsockopt_sol_tcp()
837 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPINTVL, in mptcp_setsockopt_sol_tcp()
839 &msk->keepalive_intvl, val); in mptcp_setsockopt_sol_tcp()
842 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPCNT, in mptcp_setsockopt_sol_tcp()
844 &msk->keepalive_cnt, in mptcp_setsockopt_sol_tcp()
858 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_setsockopt() local
861 pr_debug("msk=%p", msk); in mptcp_setsockopt()
864 return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen); in mptcp_setsockopt()
876 ssk = __mptcp_tcp_fallback(msk); in mptcp_setsockopt()
882 return mptcp_setsockopt_v4(msk, optname, optval, optlen); in mptcp_setsockopt()
885 return mptcp_setsockopt_v6(msk, optname, optval, optlen); in mptcp_setsockopt()
888 return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen); in mptcp_setsockopt()
893 static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname, in mptcp_getsockopt_first_sf_only() argument
896 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_first_sf_only()
901 ssk = msk->first; in mptcp_getsockopt_first_sf_only()
907 ssk = __mptcp_nmpc_sk(msk); in mptcp_getsockopt_first_sf_only()
920 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info) in mptcp_diag_fill_info() argument
922 struct sock *sk = (struct sock *)msk; in mptcp_diag_fill_info()
928 info->mptcpi_subflows = READ_ONCE(msk->pm.subflows); in mptcp_diag_fill_info()
929 info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled); in mptcp_diag_fill_info()
930 info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted); in mptcp_diag_fill_info()
931 info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used); in mptcp_diag_fill_info()
937 if (mptcp_pm_is_kernel(msk)) { in mptcp_diag_fill_info()
939 mptcp_pm_get_subflows_max(msk); in mptcp_diag_fill_info()
941 mptcp_pm_get_add_addr_signal_max(msk); in mptcp_diag_fill_info()
943 mptcp_pm_get_add_addr_accept_max(msk); in mptcp_diag_fill_info()
945 mptcp_pm_get_local_addr_max(msk); in mptcp_diag_fill_info()
948 if (test_bit(MPTCP_FALLBACK_DONE, &msk->flags)) in mptcp_diag_fill_info()
950 if (READ_ONCE(msk->can_ack)) in mptcp_diag_fill_info()
954 info->mptcpi_snd_una = msk->snd_una; in mptcp_diag_fill_info()
955 info->mptcpi_rcv_nxt = msk->ack_seq; in mptcp_diag_fill_info()
956 info->mptcpi_bytes_acked = msk->bytes_acked; in mptcp_diag_fill_info()
960 info->mptcpi_csum_enabled = msk->csum_enabled; in mptcp_diag_fill_info()
961 info->mptcpi_token = msk->token; in mptcp_diag_fill_info()
962 info->mptcpi_write_seq = msk->write_seq; in mptcp_diag_fill_info()
964 info->mptcpi_bytes_sent = msk->bytes_sent; in mptcp_diag_fill_info()
965 info->mptcpi_bytes_received = msk->bytes_received; in mptcp_diag_fill_info()
966 info->mptcpi_bytes_retrans = msk->bytes_retrans; in mptcp_diag_fill_info()
971 static int mptcp_getsockopt_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen) in mptcp_getsockopt_info() argument
981 mptcp_diag_fill_info(msk, &m_info); in mptcp_getsockopt_info()
1051 static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_tcpinfo() argument
1055 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_tcpinfo()
1073 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_tcpinfo()
1143 static int mptcp_getsockopt_subflow_addrs(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_subflow_addrs() argument
1147 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_subflow_addrs()
1165 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_subflow_addrs()
1241 static int mptcp_getsockopt_full_info(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_full_info() argument
1246 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_full_info()
1259 mptcp_diag_fill_info(msk, &mfi.mptcp_info); in mptcp_getsockopt_full_info()
1273 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_full_info()
1315 static int mptcp_put_int_option(struct mptcp_sock *msk, char __user *optval, in mptcp_put_int_option() argument
1344 static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_sol_tcp() argument
1347 struct sock *sk = (void *)msk; in mptcp_getsockopt_sol_tcp()
1359 return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname, in mptcp_getsockopt_sol_tcp()
1362 return mptcp_put_int_option(msk, optval, optlen, msk->recvmsg_inq); in mptcp_getsockopt_sol_tcp()
1364 return mptcp_put_int_option(msk, optval, optlen, msk->cork); in mptcp_getsockopt_sol_tcp()
1366 return mptcp_put_int_option(msk, optval, optlen, msk->nodelay); in mptcp_getsockopt_sol_tcp()
1368 return mptcp_put_int_option(msk, optval, optlen, in mptcp_getsockopt_sol_tcp()
1369 msk->keepalive_idle ? : in mptcp_getsockopt_sol_tcp()
1372 return mptcp_put_int_option(msk, optval, optlen, in mptcp_getsockopt_sol_tcp()
1373 msk->keepalive_intvl ? : in mptcp_getsockopt_sol_tcp()
1376 return mptcp_put_int_option(msk, optval, optlen, in mptcp_getsockopt_sol_tcp()
1377 msk->keepalive_cnt ? : in mptcp_getsockopt_sol_tcp()
1383 static int mptcp_getsockopt_v4(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_v4() argument
1386 struct sock *sk = (void *)msk; in mptcp_getsockopt_v4()
1390 return mptcp_put_int_option(msk, optval, optlen, inet_sk(sk)->tos); in mptcp_getsockopt_v4()
1396 static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_sol_mptcp() argument
1401 return mptcp_getsockopt_info(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1403 return mptcp_getsockopt_full_info(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1405 return mptcp_getsockopt_tcpinfo(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1407 return mptcp_getsockopt_subflow_addrs(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
1416 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_getsockopt() local
1419 pr_debug("msk=%p", msk); in mptcp_getsockopt()
1428 ssk = __mptcp_tcp_fallback(msk); in mptcp_getsockopt()
1434 return mptcp_getsockopt_v4(msk, optname, optval, option); in mptcp_getsockopt()
1436 return mptcp_getsockopt_sol_tcp(msk, optname, optval, option); in mptcp_getsockopt()
1438 return mptcp_getsockopt_sol_mptcp(msk, optname, optval, option); in mptcp_getsockopt()
1442 static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk) in sync_socket_options() argument
1445 struct sock *sk = (struct sock *)msk; in sync_socket_options()
1485 tcp_set_congestion_control(ssk, msk->ca_name, false, true); in sync_socket_options()
1486 __tcp_sock_set_cork(ssk, !!msk->cork); in sync_socket_options()
1487 __tcp_sock_set_nodelay(ssk, !!msk->nodelay); in sync_socket_options()
1488 tcp_sock_set_keepidle_locked(ssk, msk->keepalive_idle); in sync_socket_options()
1489 tcp_sock_set_keepintvl(ssk, msk->keepalive_intvl); in sync_socket_options()
1490 tcp_sock_set_keepcnt(ssk, msk->keepalive_cnt); in sync_socket_options()
1496 static void __mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) in __mptcp_sockopt_sync() argument
1500 sync_socket_options(msk, ssk); in __mptcp_sockopt_sync()
1505 void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) in mptcp_sockopt_sync() argument
1509 msk_owned_by_me(msk); in mptcp_sockopt_sync()
1511 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) { in mptcp_sockopt_sync()
1512 __mptcp_sockopt_sync(msk, ssk); in mptcp_sockopt_sync()
1514 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sockopt_sync()
1518 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk) in mptcp_sockopt_sync_locked() argument
1522 msk_owned_by_me(msk); in mptcp_sockopt_sync_locked()
1526 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) { in mptcp_sockopt_sync_locked()
1527 sync_socket_options(msk, ssk); in mptcp_sockopt_sync_locked()
1529 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sockopt_sync_locked()