@@ -100,9 +100,18 @@ struct mptcp_out_options {
#define MPTCP_SCHED_MAX 128
#define MPTCP_SCHED_BUF_MAX (MPTCP_SCHED_NAME_MAX * MPTCP_SCHED_MAX)
+#define MPTCP_SUBFLOWS_MAX 8
+
+struct mptcp_sched_data {
+ u8 subflows;
+ struct mptcp_subflow_context *contexts[MPTCP_SUBFLOWS_MAX];
+};
+
struct mptcp_sched_ops {
- int (*get_send)(struct mptcp_sock *msk);
- int (*get_retrans)(struct mptcp_sock *msk);
+ int (*get_send)(struct mptcp_sock *msk,
+ struct mptcp_sched_data *data);
+ int (*get_retrans)(struct mptcp_sock *msk,
+ struct mptcp_sched_data *data);
char name[MPTCP_SCHED_NAME_MAX];
struct module *owner;
@@ -16,7 +16,8 @@
static DEFINE_SPINLOCK(mptcp_sched_list_lock);
static LIST_HEAD(mptcp_sched_list);
-static int mptcp_sched_default_get_send(struct mptcp_sock *msk)
+static int mptcp_sched_default_get_send(struct mptcp_sock *msk,
+ struct mptcp_sched_data *data)
{
struct sock *ssk;
@@ -28,7 +29,8 @@ static int mptcp_sched_default_get_send(struct mptcp_sock *msk)
return 0;
}
-static int mptcp_sched_default_get_retrans(struct mptcp_sock *msk)
+static int mptcp_sched_default_get_retrans(struct mptcp_sock *msk,
+ struct mptcp_sched_data *data)
{
struct sock *ssk;
@@ -155,6 +157,7 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
int mptcp_sched_get_send(struct mptcp_sock *msk)
{
struct mptcp_subflow_context *subflow;
+ struct mptcp_sched_data *data = NULL;
msk_owned_by_me(msk);
@@ -175,13 +178,14 @@ int mptcp_sched_get_send(struct mptcp_sock *msk)
}
if (msk->sched == &mptcp_sched_default || !msk->sched)
- return mptcp_sched_default_get_send(msk);
- return msk->sched->get_send(msk);
+ return mptcp_sched_default_get_send(msk, data);
+ return msk->sched->get_send(msk, data);
}
int mptcp_sched_get_retrans(struct mptcp_sock *msk)
{
struct mptcp_subflow_context *subflow;
+ struct mptcp_sched_data *data = NULL;
msk_owned_by_me(msk);
@@ -195,8 +199,8 @@ int mptcp_sched_get_retrans(struct mptcp_sock *msk)
}
if (msk->sched == &mptcp_sched_default || !msk->sched)
- return mptcp_sched_default_get_retrans(msk);
+ return mptcp_sched_default_get_retrans(msk, data);
if (msk->sched->get_retrans)
- return msk->sched->get_retrans(msk);
- return msk->sched->get_send(msk);
+ return msk->sched->get_retrans(msk, data);
+ return msk->sched->get_send(msk, data);
}