Commit e3b2870b authored by Geliang Tang's avatar Geliang Tang Committed by Jakub Kicinski

mptcp: add a new sysctl scheduler

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: default avatarPaolo Abeni <pabeni@redhat.com>
Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
Signed-off-by: default avatarGeliang Tang <geliang.tang@suse.com>
Signed-off-by: default avatarMat Martineau <martineau@kernel.org>
Link: https://lore.kernel.org/r/20230821-upstream-net-next-20230818-v1-4-0c860fb256a8@kernel.orgSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 740ebe35
...@@ -74,3 +74,11 @@ stale_loss_cnt - INTEGER ...@@ -74,3 +74,11 @@ stale_loss_cnt - INTEGER
This is a per-namespace sysctl. This is a per-namespace sysctl.
Default: 4 Default: 4
scheduler - STRING
Select the scheduler of your choice.
Support for selection of different schedulers. This is a per-namespace
sysctl.
Default: "default"
...@@ -32,6 +32,7 @@ struct mptcp_pernet { ...@@ -32,6 +32,7 @@ struct mptcp_pernet {
u8 checksum_enabled; u8 checksum_enabled;
u8 allow_join_initial_addr_port; u8 allow_join_initial_addr_port;
u8 pm_type; u8 pm_type;
char scheduler[MPTCP_SCHED_NAME_MAX];
}; };
static struct mptcp_pernet *mptcp_get_pernet(const struct net *net) static struct mptcp_pernet *mptcp_get_pernet(const struct net *net)
...@@ -69,6 +70,11 @@ int mptcp_get_pm_type(const struct net *net) ...@@ -69,6 +70,11 @@ int mptcp_get_pm_type(const struct net *net)
return mptcp_get_pernet(net)->pm_type; 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) static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
{ {
pernet->mptcp_enabled = 1; pernet->mptcp_enabled = 1;
...@@ -77,6 +83,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet) ...@@ -77,6 +83,7 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
pernet->allow_join_initial_addr_port = 1; pernet->allow_join_initial_addr_port = 1;
pernet->stale_loss_cnt = 4; pernet->stale_loss_cnt = 4;
pernet->pm_type = MPTCP_PM_TYPE_KERNEL; pernet->pm_type = MPTCP_PM_TYPE_KERNEL;
strcpy(pernet->scheduler, "default");
} }
#ifdef CONFIG_SYSCTL #ifdef CONFIG_SYSCTL
...@@ -128,6 +135,12 @@ static struct ctl_table mptcp_sysctl_table[] = { ...@@ -128,6 +135,12 @@ static struct ctl_table mptcp_sysctl_table[] = {
.extra1 = SYSCTL_ZERO, .extra1 = SYSCTL_ZERO,
.extra2 = &mptcp_pm_type_max .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) ...@@ -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[3].data = &pernet->allow_join_initial_addr_port;
table[4].data = &pernet->stale_loss_cnt; table[4].data = &pernet->stale_loss_cnt;
table[5].data = &pernet->pm_type; table[5].data = &pernet->pm_type;
table[6].data = &pernet->scheduler;
hdr = register_net_sysctl(net, MPTCP_SYSCTL_PATH, table); hdr = register_net_sysctl(net, MPTCP_SYSCTL_PATH, table);
if (!hdr) if (!hdr)
......
...@@ -623,6 +623,7 @@ int mptcp_is_checksum_enabled(const struct net *net); ...@@ -623,6 +623,7 @@ int mptcp_is_checksum_enabled(const struct net *net);
int mptcp_allow_join_id0(const struct net *net); int mptcp_allow_join_id0(const struct net *net);
unsigned int mptcp_stale_loss_cnt(const struct net *net); unsigned int mptcp_stale_loss_cnt(const struct net *net);
int mptcp_get_pm_type(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, void mptcp_subflow_fully_established(struct mptcp_subflow_context *subflow,
const struct mptcp_options_received *mp_opt); const struct mptcp_options_received *mp_opt);
bool __mptcp_retransmit_pending_data(struct sock *sk); bool __mptcp_retransmit_pending_data(struct sock *sk);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment