mptcp: Add a member to mptcp_pm_data to track kernel vs userspace mode
authorMat Martineau <mathew.j.martineau@linux.intel.com>
Wed, 27 Apr 2022 22:49:58 +0000 (15:49 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 30 Apr 2022 00:25:13 +0000 (17:25 -0700)
When adding support for netlink path management commands, the kernel
needs to know whether paths are being controlled by the in-kernel path
manager or a userspace PM.

Acked-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/pm.c
net/mptcp/protocol.h

index 4de90e618be311ea4a716e75b1868ca6ccf068d0..f9f1bf4be95ed505124ee69f50f34b7d7f299e85 100644 (file)
@@ -424,6 +424,10 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk)
        pm->subflows = 0;
        pm->rm_list_tx.nr = 0;
        pm->rm_list_rx.nr = 0;
+       WRITE_ONCE(pm->pm_type, MPTCP_PM_TYPE_KERNEL);
+       /* pm->work_pending must be only be set to 'true' when
+        * pm->pm_type is set to MPTCP_PM_TYPE_KERNEL
+        */
        WRITE_ONCE(pm->work_pending,
                   (!!mptcp_pm_get_local_addr_max(msk) && subflows_allowed) ||
                   !!mptcp_pm_get_add_addr_signal_max(msk));
index 0316605de559ba35334a2cbb0264fe3945da90f6..f65395f04f811921c2544fafa4e22006ab777235 100644 (file)
@@ -184,6 +184,14 @@ enum mptcp_pm_status {
                                         */
 };
 
+enum mptcp_pm_type {
+       MPTCP_PM_TYPE_KERNEL = 0,
+       MPTCP_PM_TYPE_USERSPACE,
+
+       __MPTCP_PM_TYPE_NR,
+       __MPTCP_PM_TYPE_MAX = __MPTCP_PM_TYPE_NR - 1,
+};
+
 /* Status bits below MPTCP_PM_ALREADY_ESTABLISHED need pm worker actions */
 #define MPTCP_PM_WORK_MASK ((1 << MPTCP_PM_ALREADY_ESTABLISHED) - 1)
 
@@ -212,6 +220,7 @@ struct mptcp_pm_data {
        u8              add_addr_signaled;
        u8              add_addr_accepted;
        u8              local_addr_used;
+       u8              pm_type;
        u8              subflows;
        u8              status;
        DECLARE_BITMAP(id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);