Lines Matching defs: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);
191 return mptcp_sol_socket_intval(msk, optname, val);
193 mptcp_so_incoming_cpu(msk, val);
199 return mptcp_setsockopt_sol_socket_tstamp(msk, optname, val);
205 static int mptcp_setsockopt_sol_socket_timestamping(struct mptcp_sock *msk,
211 struct sock *sk = (struct sock *)msk;
236 mptcp_for_each_subflow(msk, subflow) {
249 static int mptcp_setsockopt_sol_socket_linger(struct mptcp_sock *msk, sockptr_t optval,
253 struct sock *sk = (struct sock *)msk;
270 sockopt_seq_inc(msk);
271 mptcp_for_each_subflow(msk, subflow) {
282 subflow->setsockopt_seq = msk->setsockopt_seq;
290 static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname,
293 struct sock *sk = (struct sock *)msk;
303 ssk = __mptcp_nmpc_sk(msk);
335 return mptcp_setsockopt_sol_socket_int(msk, optname, optval,
339 return mptcp_setsockopt_sol_socket_timestamping(msk, optname,
342 return mptcp_setsockopt_sol_socket_linger(msk, optval, optlen);
351 /* No need to copy: only relevant for msk */
387 static int mptcp_setsockopt_v6(struct mptcp_sock *msk, int optname,
390 struct sock *sk = (struct sock *)msk;
399 ssk = __mptcp_nmpc_sk(msk);
411 sockopt_seq_inc(msk);
582 static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t optval,
586 struct sock *sk = (struct sock *)msk;
605 sockopt_seq_inc(msk);
606 mptcp_for_each_subflow(msk, subflow) {
614 subflow->setsockopt_seq = msk->setsockopt_seq;
619 strscpy(msk->ca_name, name, sizeof(msk->ca_name));
625 static int __mptcp_setsockopt_set_val(struct mptcp_sock *msk, int max,
632 mptcp_for_each_subflow(msk, subflow) {
644 sockopt_seq_inc(msk);
650 static int __mptcp_setsockopt_sol_tcp_cork(struct mptcp_sock *msk, int val)
653 struct sock *sk = (struct sock *)msk;
655 sockopt_seq_inc(msk);
656 msk->cork = !!val;
657 mptcp_for_each_subflow(msk, subflow) {
670 static int __mptcp_setsockopt_sol_tcp_nodelay(struct mptcp_sock *msk, int val)
673 struct sock *sk = (struct sock *)msk;
675 sockopt_seq_inc(msk);
676 msk->nodelay = !!val;
677 mptcp_for_each_subflow(msk, subflow) {
689 static int mptcp_setsockopt_sol_ip_set(struct mptcp_sock *msk, int optname,
692 struct sock *sk = (struct sock *)msk;
702 ssk = __mptcp_nmpc_sk(msk);
730 sockopt_seq_inc(msk);
735 static int mptcp_setsockopt_v4_set_tos(struct mptcp_sock *msk, int optname,
739 struct sock *sk = (struct sock *)msk;
748 sockopt_seq_inc(msk);
750 mptcp_for_each_subflow(msk, subflow) {
763 static int mptcp_setsockopt_v4(struct mptcp_sock *msk, int optname,
771 return mptcp_setsockopt_sol_ip_set(msk, optname, optval, optlen);
773 return mptcp_setsockopt_v4_set_tos(msk, optname, optval, optlen);
779 static int mptcp_setsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
782 struct sock *sk = (struct sock *)msk;
788 ssk = __mptcp_nmpc_sk(msk);
801 static int mptcp_setsockopt_all_sf(struct mptcp_sock *msk, int level,
808 mptcp_for_each_subflow(msk, subflow) {
818 static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
821 struct sock *sk = (void *)msk;
828 return mptcp_setsockopt_sol_tcp_congestion(msk, optval, optlen);
831 mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen);
837 return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname,
841 ret = mptcp_get_int_option(msk, optval, optlen, &val);
851 msk->recvmsg_inq = !!val;
854 WRITE_ONCE(msk->notsent_lowat, val);
858 ret = __mptcp_setsockopt_sol_tcp_cork(msk, val);
861 ret = __mptcp_setsockopt_sol_tcp_nodelay(msk, val);
864 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPIDLE,
866 &msk->keepalive_idle, val);
869 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPINTVL,
871 &msk->keepalive_intvl, val);
874 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPCNT,
876 &msk->keepalive_cnt,
880 msk->maxseg = val;
881 ret = mptcp_setsockopt_all_sf(msk, SOL_TCP, optname, optval,
895 struct mptcp_sock *msk = mptcp_sk(sk);
898 pr_debug("msk=%p\n", msk);
901 return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen);
913 ssk = __mptcp_tcp_fallback(msk);
919 return mptcp_setsockopt_v4(msk, optname, optval, optlen);
922 return mptcp_setsockopt_v6(msk, optname, optval, optlen);
925 return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen);
930 static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
933 struct sock *sk = (struct sock *)msk;
938 ssk = msk->first;
942 ssk = __mptcp_nmpc_sk(msk);
956 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
958 struct sock *sk = (struct sock *)msk;
965 info->mptcpi_subflows = READ_ONCE(msk->pm.subflows);
966 info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled);
967 info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted);
968 info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used);
974 if (mptcp_pm_is_kernel(msk)) {
976 mptcp_pm_get_subflows_max(msk);
978 mptcp_pm_get_add_addr_signal_max(msk);
980 mptcp_pm_get_add_addr_accept_max(msk);
982 mptcp_pm_get_local_addr_max(msk);
985 if (__mptcp_check_fallback(msk))
987 if (READ_ONCE(msk->can_ack))
992 info->mptcpi_csum_enabled = READ_ONCE(msk->csum_enabled);
993 info->mptcpi_token = msk->token;
994 info->mptcpi_write_seq = msk->write_seq;
996 info->mptcpi_bytes_sent = msk->bytes_sent;
997 info->mptcpi_bytes_received = msk->bytes_received;
998 info->mptcpi_bytes_retrans = msk->bytes_retrans;
1000 __mptcp_has_initial_subflow(msk);
1002 info->mptcpi_last_data_sent = jiffies_to_msecs(now - msk->last_data_sent);
1003 info->mptcpi_last_data_recv = jiffies_to_msecs(now - msk->last_data_recv);
1007 info->mptcpi_last_ack_recv = jiffies_to_msecs(now - msk->last_ack_recv);
1008 info->mptcpi_snd_una = msk->snd_una;
1009 info->mptcpi_rcv_nxt = msk->ack_seq;
1010 info->mptcpi_bytes_acked = msk->bytes_acked;
1015 static int mptcp_getsockopt_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen)
1029 mptcp_diag_fill_info(msk, &m_info);
1099 static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval,
1103 struct sock *sk = (struct sock *)msk;
1121 mptcp_for_each_subflow(msk, subflow) {
1191 static int mptcp_getsockopt_subflow_addrs(struct mptcp_sock *msk, char __user *optval,
1195 struct sock *sk = (struct sock *)msk;
1213 mptcp_for_each_subflow(msk, subflow) {
1289 static int mptcp_getsockopt_full_info(struct mptcp_sock *msk, char __user *optval,
1294 struct sock *sk = (struct sock *)msk;
1307 mptcp_diag_fill_info(msk, &mfi.mptcp_info);
1321 mptcp_for_each_subflow(msk, subflow) {
1363 static int mptcp_put_int_option(struct mptcp_sock *msk, char __user *optval,
1392 static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
1395 struct sock *sk = (void *)msk;
1407 return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname,
1410 return mptcp_put_int_option(msk, optval, optlen, msk->recvmsg_inq);
1412 return mptcp_put_int_option(msk, optval, optlen, msk->cork);
1414 return mptcp_put_int_option(msk, optval, optlen, msk->nodelay);
1416 return mptcp_put_int_option(msk, optval, optlen,
1417 msk->keepalive_idle ? :
1420 return mptcp_put_int_option(msk, optval, optlen,
1421 msk->keepalive_intvl ? :
1424 return mptcp_put_int_option(msk, optval, optlen,
1425 msk->keepalive_cnt ? :
1428 return mptcp_put_int_option(msk, optval, optlen, msk->notsent_lowat);
1430 return mptcp_put_int_option(msk, optval, optlen, 1);
1432 return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname,
1438 static int mptcp_getsockopt_v4(struct mptcp_sock *msk, int optname,
1441 struct sock *sk = (void *)msk;
1445 return mptcp_put_int_option(msk, optval, optlen, READ_ONCE(inet_sk(sk)->tos));
1447 return mptcp_put_int_option(msk, optval, optlen,
1450 return mptcp_put_int_option(msk, optval, optlen,
1453 return mptcp_put_int_option(msk, optval, optlen,
1456 return mptcp_put_int_option(msk, optval, optlen,
1463 static int mptcp_getsockopt_v6(struct mptcp_sock *msk, int optname,
1466 struct sock *sk = (void *)msk;
1470 return mptcp_put_int_option(msk, optval, optlen,
1473 return mptcp_put_int_option(msk, optval, optlen,
1476 return mptcp_put_int_option(msk, optval, optlen,
1483 static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname,
1488 return mptcp_getsockopt_info(msk, optval, optlen);
1490 return mptcp_getsockopt_full_info(msk, optval, optlen);
1492 return mptcp_getsockopt_tcpinfo(msk, optval, optlen);
1494 return mptcp_getsockopt_subflow_addrs(msk, optval, optlen);
1503 struct mptcp_sock *msk = mptcp_sk(sk);
1506 pr_debug("msk=%p\n", msk);
1515 ssk = __mptcp_tcp_fallback(msk);
1521 return mptcp_getsockopt_v4(msk, optname, optval, option);
1523 return mptcp_getsockopt_v6(msk, optname, optval, option);
1525 return mptcp_getsockopt_sol_tcp(msk, optname, optval, option);
1527 return mptcp_getsockopt_sol_mptcp(msk, optname, optval, option);
1531 static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
1534 struct sock *sk = (struct sock *)msk;
1574 tcp_set_congestion_control(ssk, msk->ca_name, false, true);
1575 __tcp_sock_set_cork(ssk, !!msk->cork);
1576 __tcp_sock_set_nodelay(ssk, !!msk->nodelay);
1577 tcp_sock_set_keepidle_locked(ssk, msk->keepalive_idle);
1578 tcp_sock_set_keepintvl(ssk, msk->keepalive_intvl);
1579 tcp_sock_set_keepcnt(ssk, msk->keepalive_cnt);
1580 tcp_sock_set_maxseg(ssk, msk->maxseg);
1588 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk)
1592 msk_owned_by_me(msk);
1597 * the user-space - only the msk is relevant - but will foul the
1602 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) {
1603 sync_socket_options(msk, ssk);
1605 subflow->setsockopt_seq = msk->setsockopt_seq;