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);
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_sol_tcp(struct mptcp_sock *msk, int optname,
804 struct sock *sk = (void *)msk;
811 return mptcp_setsockopt_sol_tcp_congestion(msk, optval, optlen);
814 mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname, optval, optlen);
820 return mptcp_setsockopt_first_sf_only(msk, SOL_TCP, optname,
824 ret = mptcp_get_int_option(msk, optval, optlen, &val);
834 msk->recvmsg_inq = !!val;
837 WRITE_ONCE(msk->notsent_lowat, val);
841 ret = __mptcp_setsockopt_sol_tcp_cork(msk, val);
844 ret = __mptcp_setsockopt_sol_tcp_nodelay(msk, val);
847 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPIDLE,
849 &msk->keepalive_idle, val);
852 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPINTVL,
854 &msk->keepalive_intvl, val);
857 ret = __mptcp_setsockopt_set_val(msk, MAX_TCP_KEEPCNT,
859 &msk->keepalive_cnt,
873 struct mptcp_sock *msk = mptcp_sk(sk);
876 pr_debug("msk=%p", msk);
879 return mptcp_setsockopt_sol_socket(msk, optname, optval, optlen);
891 ssk = __mptcp_tcp_fallback(msk);
897 return mptcp_setsockopt_v4(msk, optname, optval, optlen);
900 return mptcp_setsockopt_v6(msk, optname, optval, optlen);
903 return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen);
908 static int mptcp_getsockopt_first_sf_only(struct mptcp_sock *msk, int level, int optname,
911 struct sock *sk = (struct sock *)msk;
916 ssk = msk->first;
922 ssk = __mptcp_nmpc_sk(msk);
935 void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
937 struct sock *sk = (struct sock *)msk;
944 info->mptcpi_subflows = READ_ONCE(msk->pm.subflows);
945 info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled);
946 info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted);
947 info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used);
953 if (mptcp_pm_is_kernel(msk)) {
955 mptcp_pm_get_subflows_max(msk);
957 mptcp_pm_get_add_addr_signal_max(msk);
959 mptcp_pm_get_add_addr_accept_max(msk);
961 mptcp_pm_get_local_addr_max(msk);
964 if (__mptcp_check_fallback(msk))
966 if (READ_ONCE(msk->can_ack))
971 info->mptcpi_csum_enabled = READ_ONCE(msk->csum_enabled);
972 info->mptcpi_token = msk->token;
973 info->mptcpi_write_seq = msk->write_seq;
975 info->mptcpi_bytes_sent = msk->bytes_sent;
976 info->mptcpi_bytes_received = msk->bytes_received;
977 info->mptcpi_bytes_retrans = msk->bytes_retrans;
979 __mptcp_has_initial_subflow(msk);
981 info->mptcpi_last_data_sent = jiffies_to_msecs(now - msk->last_data_sent);
982 info->mptcpi_last_data_recv = jiffies_to_msecs(now - msk->last_data_recv);
986 info->mptcpi_last_ack_recv = jiffies_to_msecs(now - msk->last_ack_recv);
987 info->mptcpi_snd_una = msk->snd_una;
988 info->mptcpi_rcv_nxt = msk->ack_seq;
989 info->mptcpi_bytes_acked = msk->bytes_acked;
994 static int mptcp_getsockopt_info(struct mptcp_sock *msk, char __user *optval, int __user *optlen)
1008 mptcp_diag_fill_info(msk, &m_info);
1078 static int mptcp_getsockopt_tcpinfo(struct mptcp_sock *msk, char __user *optval,
1082 struct sock *sk = (struct sock *)msk;
1100 mptcp_for_each_subflow(msk, subflow) {
1170 static int mptcp_getsockopt_subflow_addrs(struct mptcp_sock *msk, char __user *optval,
1174 struct sock *sk = (struct sock *)msk;
1192 mptcp_for_each_subflow(msk, subflow) {
1268 static int mptcp_getsockopt_full_info(struct mptcp_sock *msk, char __user *optval,
1273 struct sock *sk = (struct sock *)msk;
1286 mptcp_diag_fill_info(msk, &mfi.mptcp_info);
1300 mptcp_for_each_subflow(msk, subflow) {
1342 static int mptcp_put_int_option(struct mptcp_sock *msk, char __user *optval,
1371 static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
1374 struct sock *sk = (void *)msk;
1386 return mptcp_getsockopt_first_sf_only(msk, SOL_TCP, optname,
1389 return mptcp_put_int_option(msk, optval, optlen, msk->recvmsg_inq);
1391 return mptcp_put_int_option(msk, optval, optlen, msk->cork);
1393 return mptcp_put_int_option(msk, optval, optlen, msk->nodelay);
1395 return mptcp_put_int_option(msk, optval, optlen,
1396 msk->keepalive_idle ? :
1399 return mptcp_put_int_option(msk, optval, optlen,
1400 msk->keepalive_intvl ? :
1403 return mptcp_put_int_option(msk, optval, optlen,
1404 msk->keepalive_cnt ? :
1407 return mptcp_put_int_option(msk, optval, optlen, msk->notsent_lowat);
1409 return mptcp_put_int_option(msk, optval, optlen, 1);
1414 static int mptcp_getsockopt_v4(struct mptcp_sock *msk, int optname,
1417 struct sock *sk = (void *)msk;
1421 return mptcp_put_int_option(msk, optval, optlen, READ_ONCE(inet_sk(sk)->tos));
1423 return mptcp_put_int_option(msk, optval, optlen,
1426 return mptcp_put_int_option(msk, optval, optlen,
1433 static int mptcp_getsockopt_sol_mptcp(struct mptcp_sock *msk, int optname,
1438 return mptcp_getsockopt_info(msk, optval, optlen);
1440 return mptcp_getsockopt_full_info(msk, optval, optlen);
1442 return mptcp_getsockopt_tcpinfo(msk, optval, optlen);
1444 return mptcp_getsockopt_subflow_addrs(msk, optval, optlen);
1453 struct mptcp_sock *msk = mptcp_sk(sk);
1456 pr_debug("msk=%p", msk);
1465 ssk = __mptcp_tcp_fallback(msk);
1471 return mptcp_getsockopt_v4(msk, optname, optval, option);
1473 return mptcp_getsockopt_sol_tcp(msk, optname, optval, option);
1475 return mptcp_getsockopt_sol_mptcp(msk, optname, optval, option);
1479 static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
1482 struct sock *sk = (struct sock *)msk;
1522 tcp_set_congestion_control(ssk, msk->ca_name, false, true);
1523 __tcp_sock_set_cork(ssk, !!msk->cork);
1524 __tcp_sock_set_nodelay(ssk, !!msk->nodelay);
1525 tcp_sock_set_keepidle_locked(ssk, msk->keepalive_idle);
1526 tcp_sock_set_keepintvl(ssk, msk->keepalive_intvl);
1527 tcp_sock_set_keepcnt(ssk, msk->keepalive_cnt);
1535 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk)
1539 msk_owned_by_me(msk);
1544 * the user-space - only the msk is relevant - but will foul the
1549 if (READ_ONCE(subflow->setsockopt_seq) != msk->setsockopt_seq) {
1550 sync_socket_options(msk, ssk);
1552 subflow->setsockopt_seq = msk->setsockopt_seq;