mptcp: add a new sysctl scheduler
authorGeliang Tang <geliang.tang@suse.com>
Mon, 21 Aug 2023 22:25:15 +0000 (15:25 -0700)
committerJakub Kicinski <kuba@kernel.org>
Wed, 23 Aug 2023 00:31:18 +0000 (17:31 -0700)
This patch adds a new sysctl, named scheduler, to support for selection
of different schedulers. Export mptcp_get_scheduler helper to get this
sysctl.

Acked-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Geliang Tang <geliang.tang@suse.com>
Signed-off-by: Mat Martineau <martineau@kernel.org>
Link: https://lore.kernel.org/r/20230821-upstream-net-next-20230818-v1-4-0c860fb256a8@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/networking/mptcp-sysctl.rst
net/mptcp/ctrl.c
net/mptcp/protocol.h

index 2135106..15f1919 100644 (file)
@@ -74,3 +74,11 @@ stale_loss_cnt - INTEGER
        This is a per-namespace sysctl.
 
        Default: 4
+
+scheduler - STRING
+       Select the scheduler of your choice.
+
+       Support for selection of different schedulers. This is a per-namespace
+       sysctl.
+
+       Default: "default"
index ae20b7d..c46c22a 100644 (file)
@@ -32,6 +32,7 @@ struct mptcp_pernet {
        u8 checksum_enabled;
        u8 allow_join_initial_addr_port;
        u8 pm_type;
+       char scheduler[MPTCP_SCHED_NAME_MAX];
 };
 
 static struct mptcp_pernet *mptcp_get_pernet(const struct net *net)
@@ -69,6 +70,11 @@ int mptcp_get_pm_type(const struct net *net)
        return mptcp_get_pernet(net)->pm_type;
 }
 
+const char *mptcp_get_scheduler(const struct net *net)
+{
+       return mptcp_get_pernet(net)->scheduler;
+}
+
 static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
 {
        pernet->mptcp_enabled = 1;
@@ -77,6 +83,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
        pernet->allow_join_initial_addr_port = 1;
        pernet->stale_loss_cnt = 4;
        pernet->pm_type = MPTCP_PM_TYPE_KERNEL;
+       strcpy(pernet->scheduler, "default");
 }
 
 #ifdef CONFIG_SYSCTL
@@ -128,6 +135,12 @@ static struct ctl_table mptcp_sysctl_table[] = {
                .extra1       = SYSCTL_ZERO,
                .extra2       = &mptcp_pm_type_max
        },
+       {
+               .procname = "scheduler",
+               .maxlen = MPTCP_SCHED_NAME_MAX,
+               .mode = 0644,
+               .proc_handler = proc_dostring,
+       },
        {}
 };
 
@@ -149,6 +162,7 @@ static int mptcp_pernet_new_table(struct net *net, struct mptcp_pernet *pernet)
        table[3].data = &pernet->allow_join_initial_addr_port;
        table[4].data = &pernet->stale_loss_cnt;
        table[5].data = &pernet->pm_type;
+       table[6].data = &pernet->scheduler;
 
        hdr = register_net_sysctl(net, MPTCP_SYSCTL_PATH, table);
        if (!hdr)
index 985e8f8..bfa13a5 100644 (file)
@@ -623,6 +623,7 @@ int mptcp_is_checksum_enabled(const struct net *net);
 int mptcp_allow_join_id0(const struct net *net);
 unsigned int mptcp_stale_loss_cnt(const struct net *net);
 int mptcp_get_pm_type(const struct net *net);
+const char *mptcp_get_scheduler(const struct net *net);
 void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow,
                                     const struct mptcp_options_received *mp_opt);
 bool __mptcp_retransmit_pending_data(struct sock *sk);