@@ -96,6 +96,43 @@ static void mptcp_pernet_set_defaults(struct mptcp_pernet *pernet)
96
96
}
97
97
98
98
#ifdef CONFIG_SYSCTL
99
+ static int mptcp_set_scheduler (const struct net * net , const char * name )
100
+ {
101
+ struct mptcp_pernet * pernet = mptcp_get_pernet (net );
102
+ struct mptcp_sched_ops * sched ;
103
+ int ret = 0 ;
104
+
105
+ rcu_read_lock ();
106
+ sched = mptcp_sched_find (name );
107
+ if (sched )
108
+ strscpy (pernet -> scheduler , name , MPTCP_SCHED_NAME_MAX );
109
+ else
110
+ ret = - ENOENT ;
111
+ rcu_read_unlock ();
112
+
113
+ return ret ;
114
+ }
115
+
116
+ static int proc_scheduler (struct ctl_table * ctl , int write ,
117
+ void * buffer , size_t * lenp , loff_t * ppos )
118
+ {
119
+ const struct net * net = current -> nsproxy -> net_ns ;
120
+ char val [MPTCP_SCHED_NAME_MAX ];
121
+ struct ctl_table tbl = {
122
+ .data = val ,
123
+ .maxlen = MPTCP_SCHED_NAME_MAX ,
124
+ };
125
+ int ret ;
126
+
127
+ strscpy (val , mptcp_get_scheduler (net ), MPTCP_SCHED_NAME_MAX );
128
+
129
+ ret = proc_dostring (& tbl , write , buffer , lenp , ppos );
130
+ if (write && ret == 0 )
131
+ ret = mptcp_set_scheduler (net , val );
132
+
133
+ return ret ;
134
+ }
135
+
99
136
static struct ctl_table mptcp_sysctl_table [] = {
100
137
{
101
138
.procname = "enabled" ,
@@ -148,7 +185,7 @@ static struct ctl_table mptcp_sysctl_table[] = {
148
185
.procname = "scheduler" ,
149
186
.maxlen = MPTCP_SCHED_NAME_MAX ,
150
187
.mode = 0644 ,
151
- .proc_handler = proc_dostring ,
188
+ .proc_handler = proc_scheduler ,
152
189
},
153
190
{
154
191
.procname = "close_timeout" ,
0 commit comments