mptcp: add new mptcp_fill_diag helper
Will be re-used from getsockopt path. Since diag can be a module, we can't export the helper from diag, it needs to be moved to core. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
95dca2d578
commit
61bc6e82f9
@@ -670,6 +670,38 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
void mptcp_diag_fill_info(struct mptcp_sock *msk, struct mptcp_info *info)
|
||||
{
|
||||
struct sock *sk = &msk->sk.icsk_inet.sk;
|
||||
bool slow = lock_sock_fast(sk);
|
||||
u32 flags = 0;
|
||||
u8 val;
|
||||
|
||||
info->mptcpi_subflows = READ_ONCE(msk->pm.subflows);
|
||||
info->mptcpi_add_addr_signal = READ_ONCE(msk->pm.add_addr_signaled);
|
||||
info->mptcpi_add_addr_accepted = READ_ONCE(msk->pm.add_addr_accepted);
|
||||
info->mptcpi_local_addr_used = READ_ONCE(msk->pm.local_addr_used);
|
||||
info->mptcpi_subflows_max = mptcp_pm_get_subflows_max(msk);
|
||||
val = mptcp_pm_get_add_addr_signal_max(msk);
|
||||
info->mptcpi_add_addr_signal_max = val;
|
||||
val = mptcp_pm_get_add_addr_accept_max(msk);
|
||||
info->mptcpi_add_addr_accepted_max = val;
|
||||
info->mptcpi_local_addr_max = mptcp_pm_get_local_addr_max(msk);
|
||||
if (test_bit(MPTCP_FALLBACK_DONE, &msk->flags))
|
||||
flags |= MPTCP_INFO_FLAG_FALLBACK;
|
||||
if (READ_ONCE(msk->can_ack))
|
||||
flags |= MPTCP_INFO_FLAG_REMOTE_KEY_RECEIVED;
|
||||
info->mptcpi_flags = flags;
|
||||
info->mptcpi_token = READ_ONCE(msk->token);
|
||||
info->mptcpi_write_seq = READ_ONCE(msk->write_seq);
|
||||
info->mptcpi_snd_una = READ_ONCE(msk->snd_una);
|
||||
info->mptcpi_rcv_nxt = READ_ONCE(msk->ack_seq);
|
||||
info->mptcpi_csum_enabled = READ_ONCE(msk->csum_enabled);
|
||||
|
||||
unlock_sock_fast(sk, slow);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(mptcp_diag_fill_info);
|
||||
|
||||
static int mptcp_getsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
|
||||
char __user *optval, int __user *optlen)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user