mptcp: add local addr info in mptcp_info
authorGeliang Tang <geliangtang@gmail.com>
Sat, 13 Feb 2021 00:52:02 +0000 (16:52 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 15 Feb 2021 23:09:14 +0000 (15:09 -0800)
Add mptcpi_local_addr_used and mptcpi_local_addr_max in struct mptcp_info.

Signed-off-by: Geliang Tang <geliangtang@gmail.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/uapi/linux/mptcp.h
net/mptcp/mptcp_diag.c
net/mptcp/pm_netlink.c
net/mptcp/protocol.h

index c91578a..e1172c1 100644 (file)
@@ -103,6 +103,8 @@ struct mptcp_info {
        __u64   mptcpi_write_seq;
        __u64   mptcpi_snd_una;
        __u64   mptcpi_rcv_nxt;
+       __u8    mptcpi_local_addr_used;
+       __u8    mptcpi_local_addr_max;
 };
 
 /*
index 00ed742..f16d9b5 100644 (file)
@@ -128,11 +128,13 @@ static void mptcp_diag_get_info(struct sock *sk, struct inet_diag_msg *r,
        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))
index 229fd1a..8e8e35f 100644 (file)
@@ -228,13 +228,14 @@ unsigned int mptcp_pm_get_subflows_max(struct mptcp_sock *msk)
 }
 EXPORT_SYMBOL_GPL(mptcp_pm_get_subflows_max);
 
-static unsigned int mptcp_pm_get_local_addr_max(struct mptcp_sock *msk)
+unsigned int mptcp_pm_get_local_addr_max(struct mptcp_sock *msk)
 {
        struct pm_nl_pernet *pernet;
 
        pernet = net_generic(sock_net((struct sock *)msk), pm_nl_pernet_id);
        return READ_ONCE(pernet->local_addr_max);
 }
+EXPORT_SYMBOL_GPL(mptcp_pm_get_local_addr_max);
 
 static void check_work_pending(struct mptcp_sock *msk)
 {
index d31edba..1b6ec17 100644 (file)
@@ -725,6 +725,7 @@ int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc);
 unsigned int mptcp_pm_get_add_addr_signal_max(struct mptcp_sock *msk);
 unsigned int mptcp_pm_get_add_addr_accept_max(struct mptcp_sock *msk);
 unsigned int mptcp_pm_get_subflows_max(struct mptcp_sock *msk);
+unsigned int mptcp_pm_get_local_addr_max(struct mptcp_sock *msk);
 
 static inline struct mptcp_ext *mptcp_get_ext(struct sk_buff *skb)
 {