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()
384 static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_v6() argument
387 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_v6()
394 ssock = __mptcp_nmpc_socket(msk); in mptcp_setsockopt_v6()
557 static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t optval, in mptcp_setsockopt_sol_tcp_congestion() argument
561 struct sock *sk = (struct sock *)msk; in mptcp_setsockopt_sol_tcp_congestion()
580 sockopt_seq_inc(msk); in mptcp_setsockopt_sol_tcp_congestion()
581 mptcp_for_each_subflow(msk, subflow) { in mptcp_setsockopt_sol_tcp_congestion()
589 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_setsockopt_sol_tcp_congestion()
594 strcpy(msk->ca_name, name); in mptcp_setsockopt_sol_tcp_congestion()
600 static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname, in mptcp_setsockopt_sol_tcp() argument
607 return mptcp_setsockopt_sol_tcp_congestion(msk, optval, optlen); in mptcp_setsockopt_sol_tcp()
616 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_setsockopt() local
619 pr_debug("msk=%p", msk); in mptcp_setsockopt()
622 return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen); in mptcp_setsockopt()
634 ssk = __mptcp_tcp_fallback(msk); in mptcp_setsockopt()
640 return mptcp_setsockopt_v6(msk, optname, optval, optlen); in mptcp_setsockopt()
643 return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen); in mptcp_setsockopt()
648 static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname, in mptcp_getsockopt_first_sf_only() argument
651 struct sock *sk = (struct sock *)msk; in mptcp_getsockopt_first_sf_only()
657 ssk = msk->first; in mptcp_getsockopt_first_sf_only()
663 ssock = __mptcp_nmpc_socket(msk); in mptcp_getsockopt_first_sf_only()
674 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info) in mptcp_diag_fill_info() argument
676 struct sock *sk = &msk->sk.icsk_inet.sk; in mptcp_diag_fill_info()
685 info->mptcpi_subflows = READ_ONCE(msk->pm.subflows); in mptcp_diag_fill_info()
686 info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled); in mptcp_diag_fill_info()
687 info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted); in mptcp_diag_fill_info()
688 info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used); in mptcp_diag_fill_info()
689 info->mptcpi_subflows_max = mptcp_pm_get_subflows_max(msk); in mptcp_diag_fill_info()
690 val = mptcp_pm_get_add_addr_signal_max(msk); in mptcp_diag_fill_info()
692 val = mptcp_pm_get_add_addr_accept_max(msk); in mptcp_diag_fill_info()
694 info->mptcpi_local_addr_max = mptcp_pm_get_local_addr_max(msk); in mptcp_diag_fill_info()
695 if (test_bit(MPTCP_FALLBACK_DONE, &msk->flags)) in mptcp_diag_fill_info()
697 if (READ_ONCE(msk->can_ack)) in mptcp_diag_fill_info()
700 info->mptcpi_token = READ_ONCE(msk->token); in mptcp_diag_fill_info()
701 info->mptcpi_write_seq = READ_ONCE(msk->write_seq); in mptcp_diag_fill_info()
702 info->mptcpi_snd_una = READ_ONCE(msk->snd_una); in mptcp_diag_fill_info()
703 info->mptcpi_rcv_nxt = READ_ONCE(msk->ack_seq); in mptcp_diag_fill_info()
704 info->mptcpi_csum_enabled = READ_ONCE(msk->csum_enabled); in mptcp_diag_fill_info()
710 static int mptcp_getsockopt_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen) in mptcp_getsockopt_info() argument
720 mptcp_diag_fill_info(msk, &m_info); in mptcp_getsockopt_info()
789 static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_tcpinfo() argument
793 struct sock *sk = &msk->sk.icsk_inet.sk; in mptcp_getsockopt_tcpinfo()
811 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_tcpinfo()
881 static int mptcp_getsockopt_subflow_addrs(struct mptcp_sock *msk, char __user *optval, in mptcp_getsockopt_subflow_addrs() argument
884 struct sock *sk = &msk->sk.icsk_inet.sk; in mptcp_getsockopt_subflow_addrs()
903 mptcp_for_each_subflow(msk, subflow) { in mptcp_getsockopt_subflow_addrs()
934 static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_sol_tcp() argument
942 return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname, in mptcp_getsockopt_sol_tcp()
948 static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname, in mptcp_getsockopt_sol_mptcp() argument
953 return mptcp_getsockopt_info(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
955 return mptcp_getsockopt_tcpinfo(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
957 return mptcp_getsockopt_subflow_addrs(msk, optval, optlen); in mptcp_getsockopt_sol_mptcp()
966 struct mptcp_sock *msk = mptcp_sk(sk); in mptcp_getsockopt() local
969 pr_debug("msk=%p", msk); in mptcp_getsockopt()
978 ssk = __mptcp_tcp_fallback(msk); in mptcp_getsockopt()
984 return mptcp_getsockopt_sol_tcp(msk, optname, optval, option); in mptcp_getsockopt()
986 return mptcp_getsockopt_sol_mptcp(msk, optname, optval, option); in mptcp_getsockopt()
990 static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk) in sync_socket_options() argument
993 struct sock *sk = (struct sock *)msk; in sync_socket_options()
1029 tcp_set_congestion_control(ssk, msk->ca_name, false, true); in sync_socket_options()
1032 static void __mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) in __mptcp_sockopt_sync() argument
1036 sync_socket_options(msk, ssk); in __mptcp_sockopt_sync()
1041 void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk) in mptcp_sockopt_sync() argument
1045 msk_owned_by_me(msk); in mptcp_sockopt_sync()
1047 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) { in mptcp_sockopt_sync()
1048 __mptcp_sockopt_sync(msk, ssk); in mptcp_sockopt_sync()
1050 subflow->setsockopt_seq = msk->setsockopt_seq; in mptcp_sockopt_sync()
1054 void mptcp_sockopt_sync_all(struct mptcp_sock *msk) in mptcp_sockopt_sync_all() argument
1057 struct sock *sk = (struct sock *)msk; in mptcp_sockopt_sync_all()
1062 mptcp_for_each_subflow(msk, subflow) { in mptcp_sockopt_sync_all()
1066 if (sseq != msk->setsockopt_seq) { in mptcp_sockopt_sync_all()
1067 __mptcp_sockopt_sync(msk, ssk); in mptcp_sockopt_sync_all()
1076 msk->setsockopt_seq = seq; in mptcp_sockopt_sync_all()