Lines Matching refs:msk

20 static struct sock *__mptcp_tcp_fallback(struct mptcp_sock *msk)
22 msk_owned_by_me(msk);
24 if (likely(!__mptcp_check_fallback(msk)))
27 return msk->first;
42 * Needs sync from mptcp join logic, but ssk->seq == msk->seq
44 * Set High order bits to sk_state so ssk->seq == msk->seq test
51 static void sockopt_seq_inc(struct mptcp_sock *msk)
53 u32 seq = (msk->setsockopt_seq + 1) & 0x00ffffff;
55 msk->setsockopt_seq = sockopt_seq_reset((struct sock *)msk) + seq;
58 static int mptcp_get_int_option(struct mptcp_sock *msk, sockptr_t optval,
70 static void mptcp_sol_socket_sync_intval(struct mptcp_sock *msk, int optname, int val)
73 struct sock *sk = (struct sock *)msk;
76 sockopt_seq_inc(msk);
78 mptcp_for_each_subflow(msk, subflow) {
116 subflow->setsockopt_seq = msk->setsockopt_seq;
123 static int mptcp_sol_socket_intval(struct mptcp_sock *msk, int optname, int val)
126 struct sock *sk = (struct sock *)msk;
134 mptcp_sol_socket_sync_intval(msk, optname, val);
138 static void mptcp_so_incoming_cpu(struct mptcp_sock *msk, int val)
140 struct sock *sk = (struct sock *)msk;
144 mptcp_sol_socket_sync_intval(msk, SO_INCOMING_CPU, val);
147 static int mptcp_setsockopt_sol_socket_tstamp(struct mptcp_sock *msk, int optname, int val)
151 struct sock *sk = (struct sock *)msk;
160 mptcp_for_each_subflow(msk, subflow) {
172 static int mptcp_setsockopt_sol_socket_int(struct mptcp_sock *msk, int optname,
178 ret = mptcp_get_int_option(msk, optval, optlen, &val);
184 mptcp_sol_socket_sync_intval(msk, optname, val);
193 return mptcp_sol_socket_intval(msk, optname, val);
195 mptcp_so_incoming_cpu(msk, val);
201 return mptcp_setsockopt_sol_socket_tstamp(msk, optname, val);
207 static int mptcp_setsockopt_sol_socket_timestamping(struct mptcp_sock *msk,
213 struct sock *sk = (struct sock *)msk;
238 mptcp_for_each_subflow(msk, subflow) {
251 static int mptcp_setsockopt_sol_socket_linger(struct mptcp_sock *msk, sockptr_t optval,
255 struct sock *sk = (struct sock *)msk;
272 sockopt_seq_inc(msk);
273 mptcp_for_each_subflow(msk, subflow) {
284 subflow->setsockopt_seq = msk->setsockopt_seq;
292 static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname,
295 struct sock *sk = (struct sock *)msk;
305 ssk = __mptcp_nmpc_sk(msk);
337 return mptcp_setsockopt_sol_socket_int(msk, optname, optval,
341 return mptcp_setsockopt_sol_socket_timestamping(msk, optname,
344 return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen);
353 /* No need to copy: only relevant for msk */
389 static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname,
392 struct sock *sk = (struct sock *)msk;
401 ssk = __mptcp_nmpc_sk(msk);
413 sockopt_seq_inc(msk);
583 static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t optval,
587 struct sock *sk = (struct sock *)msk;
606 sockopt_seq_inc(msk);
607 mptcp_for_each_subflow(msk, subflow) {
615 subflow->setsockopt_seq = msk->setsockopt_seq;
620 strcpy(msk->ca_name, name);
626 static int mptcp_setsockopt_sol_tcp_cork(struct mptcp_sock *msk, sockptr_t optval,
630 struct sock *sk = (struct sock *)msk;
640 sockopt_seq_inc(msk);
641 msk->cork = !!val;
642 mptcp_for_each_subflow(msk, subflow) {
656 static int mptcp_setsockopt_sol_tcp_nodelay(struct mptcp_sock *msk, sockptr_t optval,
660 struct sock *sk = (struct sock *)msk;
670 sockopt_seq_inc(msk);
671 msk->nodelay = !!val;
672 mptcp_for_each_subflow(msk, subflow) {
686 static int mptcp_setsockopt_sol_ip_set_transparent(struct mptcp_sock *msk, int optname,
689 struct sock *sk = (struct sock *)msk;
699 ssk = __mptcp_nmpc_sk(msk);
719 sockopt_seq_inc(msk);
724 static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname,
728 struct sock *sk = (struct sock *)msk;
737 sockopt_seq_inc(msk);
739 mptcp_for_each_subflow(msk, subflow) {
752 static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname,
758 return mptcp_setsockopt_sol_ip_set_transparent(msk, optname, optval, optlen);
760 return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen);
766 static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
769 struct sock *sk = (struct sock *)msk;
775 ssk = __mptcp_nmpc_sk(msk);
788 static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
791 struct sock *sk = (void *)msk;
796 ret = mptcp_get_int_option(msk, optval, optlen, &val);
803 msk->recvmsg_inq = !!val;
809 return mptcp_setsockopt_sol_tcp_congestion(msk, optval, optlen);
811 return mptcp_setsockopt_sol_tcp_cork(msk, optval, optlen);
813 return mptcp_setsockopt_sol_tcp_nodelay(msk, optval, optlen);
816 mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen);
822 return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname,
832 struct mptcp_sock *msk = mptcp_sk(sk);
835 pr_debug("msk=%p", msk);
838 return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen);
850 ssk = __mptcp_tcp_fallback(msk);
856 return mptcp_setsockopt_v4(msk, optname, optval, optlen);
859 return mptcp_setsockopt_v6(msk, optname, optval, optlen);
862 return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen);
867 static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
870 struct sock *sk = (struct sock *)msk;
875 ssk = msk->first;
881 ssk = __mptcp_nmpc_sk(msk);
894 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
896 struct sock *sk = (struct sock *)msk;
902 info->mptcpi_subflows = READ_ONCE(msk->pm.subflows);
903 info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled);
904 info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted);
905 info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used);
911 if (mptcp_pm_is_kernel(msk)) {
913 mptcp_pm_get_subflows_max(msk);
915 mptcp_pm_get_add_addr_signal_max(msk);
917 mptcp_pm_get_add_addr_accept_max(msk);
919 mptcp_pm_get_local_addr_max(msk);
922 if (test_bit(MPTCP_FALLBACK_DONE, &msk->flags))
924 if (READ_ONCE(msk->can_ack))
928 info->mptcpi_snd_una = msk->snd_una;
929 info->mptcpi_rcv_nxt = msk->ack_seq;
930 info->mptcpi_bytes_acked = msk->bytes_acked;
934 info->mptcpi_csum_enabled = msk->csum_enabled;
935 info->mptcpi_token = msk->token;
936 info->mptcpi_write_seq = msk->write_seq;
938 info->mptcpi_bytes_sent = msk->bytes_sent;
939 info->mptcpi_bytes_received = msk->bytes_received;
940 info->mptcpi_bytes_retrans = msk->bytes_retrans;
945 static int mptcp_getsockopt_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen)
955 mptcp_diag_fill_info(msk, &m_info);
1025 static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval,
1029 struct sock *sk = (struct sock *)msk;
1047 mptcp_for_each_subflow(msk, subflow) {
1117 static int mptcp_getsockopt_subflow_addrs(struct mptcp_sock *msk, char __user *optval,
1121 struct sock *sk = (struct sock *)msk;
1139 mptcp_for_each_subflow(msk, subflow) {
1215 static int mptcp_getsockopt_full_info(struct mptcp_sock *msk, char __user *optval,
1220 struct sock *sk = (struct sock *)msk;
1233 mptcp_diag_fill_info(msk, &mfi.mptcp_info);
1247 mptcp_for_each_subflow(msk, subflow) {
1289 static int mptcp_put_int_option(struct mptcp_sock *msk, char __user *optval,
1318 static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
1331 return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname,
1334 return mptcp_put_int_option(msk, optval, optlen, msk->recvmsg_inq);
1336 return mptcp_put_int_option(msk, optval, optlen, msk->cork);
1338 return mptcp_put_int_option(msk, optval, optlen, msk->nodelay);
1343 static int mptcp_getsockopt_v4(struct mptcp_sock *msk, int optname,
1346 struct sock *sk = (void *)msk;
1350 return mptcp_put_int_option(msk, optval, optlen, inet_sk(sk)->tos);
1356 static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname,
1361 return mptcp_getsockopt_info(msk, optval, optlen);
1363 return mptcp_getsockopt_full_info(msk, optval, optlen);
1365 return mptcp_getsockopt_tcpinfo(msk, optval, optlen);
1367 return mptcp_getsockopt_subflow_addrs(msk, optval, optlen);
1376 struct mptcp_sock *msk = mptcp_sk(sk);
1379 pr_debug("msk=%p", msk);
1388 ssk = __mptcp_tcp_fallback(msk);
1394 return mptcp_getsockopt_v4(msk, optname, optval, option);
1396 return mptcp_getsockopt_sol_tcp(msk, optname, optval, option);
1398 return mptcp_getsockopt_sol_mptcp(msk, optname, optval, option);
1402 static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
1405 struct sock *sk = (struct sock *)msk;
1445 tcp_set_congestion_control(ssk, msk->ca_name, false, true);
1446 __tcp_sock_set_cork(ssk, !!msk->cork);
1447 __tcp_sock_set_nodelay(ssk, !!msk->nodelay);
1453 static void __mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk)
1457 sync_socket_options(msk, ssk);
1462 void mptcp_sockopt_sync(struct mptcp_sock *msk, struct sock *ssk)
1466 msk_owned_by_me(msk);
1468 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) {
1469 __mptcp_sockopt_sync(msk, ssk);
1471 subflow->setsockopt_seq = msk->setsockopt_seq;
1475 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk)
1479 msk_owned_by_me(msk);
1481 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) {
1482 sync_socket_options(msk, ssk);
1484 subflow->setsockopt_seq = msk->setsockopt_seq;