* [PATCH RFC] Support for SOL_IP for MPTCP setsockopt
@ 2021-10-20 19:56 Poorva Sonparote
2021-10-22 23:49 ` Mat Martineau
0 siblings, 1 reply; 3+ messages in thread
From: Poorva Sonparote @ 2021-10-20 19:56 UTC (permalink / raw)
To: mptcp; +Cc: dcaratti
Hello!
I have been working on adding support for IP_TOS for setsockopt(). I
am attaching the packetdrill test and the patch but it still won't set the TOS value
for the subflows that are created after the setsockopt() call.
https://github.com/multipath-tcp/mptcp_net-next/issues/220#issuecomment-947863717
Thanks,
Poorva
This patch adds support for IP_TOS for setsockopt(.. ,SOL_IP, ..)
https://github.com/multipath-tcp/mptcp_net-next/issues/220
Currently, any new subflows that are created after the setsockopt()
call are not being updated with the set IP_TOS value.
Signed-off-by: Poorva Sonparote <psonparo@redhat.com>
---
net/mptcp/sockopt.c | 39 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index 8137cc3a4296..f5ee49660902 100644
--- a/net/mptcp/sockopt.c
+++ b/net/mptcp/sockopt.c
@@ -598,6 +598,40 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t
return ret;
}
+static int mptcp_setsockopt_sol_ip_set_tos(struct mptcp_sock *msk, int optname,
+ sockptr_t optval, unsigned int optlen)
+{
+ struct mptcp_subflow_context *subflow;
+ struct sock *sk = (struct sock *)msk;
+ int ret, err;
+ int val = 0;
+
+ err = ip_setsockopt(sk, SOL_IP, optname, optval, optlen);
+ val = inet_sk(sk)->tos;
+
+ if (err != 0)
+ return err;
+ lock_sock(sk);
+ mptcp_for_each_subflow(msk, subflow) {
+ struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
+
+ ip_sock_set_tos(ssk, val);
+ }
+ release_sock(sk);
+ return ret;
+}
+
+static int mptcp_setsockopt_sol_ip(struct mptcp_sock *msk, int optname,
+ sockptr_t optval, unsigned int optlen)
+{
+ switch (optname) {
+ case IP_TOS:
+ return mptcp_setsockopt_sol_ip_set_tos(msk, optname, optval, optlen);
+ }
+
+ return -EOPNOTSUPP;
+}
+
static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
sockptr_t optval, unsigned int optlen)
{
@@ -637,12 +671,14 @@ int mptcp_setsockopt(struct sock *sk, int level, int optname,
if (ssk)
return tcp_setsockopt(ssk, level, optname, optval, optlen);
+ if (level == SOL_IP)
+ return mptcp_setsockopt_sol_ip(msk, optname, optval, optlen);
+
if (level == SOL_IPV6)
return mptcp_setsockopt_v6(msk, optname, optval, optlen);
if (level == SOL_TCP)
return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen);
-
return -EOPNOTSUPP;
}
@@ -1000,6 +1036,7 @@ static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
ssk->sk_priority = sk->sk_priority;
ssk->sk_bound_dev_if = sk->sk_bound_dev_if;
ssk->sk_incoming_cpu = sk->sk_incoming_cpu;
+ ip_sock_set_tos(ssk, inet_sk(sk)->tos);
if (sk->sk_userlocks & tx_rx_locks) {
ssk->sk_userlocks |= sk->sk_userlocks & tx_rx_locks;
--
2.18.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH RFC] Support for SOL_IP for MPTCP setsockopt
2021-10-20 19:56 [PATCH RFC] Support for SOL_IP for MPTCP setsockopt Poorva Sonparote
@ 2021-10-22 23:49 ` Mat Martineau
[not found] ` <CADppAWAgBA4qaxA1CrbwhUpaoRkX-aZGfQ8EC=-KkM9eZOMztA@mail.gmail.com>
0 siblings, 1 reply; 3+ messages in thread
From: Mat Martineau @ 2021-10-22 23:49 UTC (permalink / raw)
To: Poorva Sonparote; +Cc: mptcp, dcaratti
On Wed, 20 Oct 2021, Poorva Sonparote wrote:
> Hello!
>
> I have been working on adding support for IP_TOS for setsockopt(). I
> am attaching the packetdrill test and the patch but it still won't set the TOS value
> for the subflows that are created after the setsockopt() call.
>
> https://github.com/multipath-tcp/mptcp_net-next/issues/220#issuecomment-947863717
>
> Thanks,
> Poorva
>
>
>
>
> This patch adds support for IP_TOS for setsockopt(.. ,SOL_IP, ..)
> https://github.com/multipath-tcp/mptcp_net-next/issues/220
>
> Currently, any new subflows that are created after the setsockopt()
> call are not being updated with the set IP_TOS value.
>
Hi Poorva,
Thanks for the patch!
A 'Closes:' tag with the github issue link is also helpful here.
> Signed-off-by: Poorva Sonparote <psonparo@redhat.com>
> ---
> net/mptcp/sockopt.c | 39 ++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 38 insertions(+), 1 deletion(-)
>
If you have more commentary that isn't part of the commit message you want
to be permanently stored in git, this space (after the '---' line above
but before the 'diff --git ...' below) is a good for that! 'git am' will
drop this text when applying. This is especially not a big deal with RFC
patches like this one, since they don't end up getting merged anyway.
> diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
> index 8137cc3a4296..f5ee49660902 100644
> --- a/net/mptcp/sockopt.c
> +++ b/net/mptcp/sockopt.c
> @@ -598,6 +598,40 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t
> return ret;
> }
>
> +static int mptcp_setsockopt_sol_ip_set_tos(struct mptcp_sock *msk, int optname,
> + sockptr_t optval, unsigned int optlen)
> +{
> + struct mptcp_subflow_context *subflow;
> + struct sock *sk = (struct sock *)msk;
> + int ret, err;
> + int val = 0;
> +
> + err = ip_setsockopt(sk, SOL_IP, optname, optval, optlen);
> + val = inet_sk(sk)->tos;
> +
> + if (err != 0)
> + return err;
Minor - need a blank line here.
> + lock_sock(sk);
> + mptcp_for_each_subflow(msk, subflow) {
> + struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
> +
> + ip_sock_set_tos(ssk, val);
> + }
> + release_sock(sk);
and here
> + return ret;
> +}
> +
> +static int mptcp_setsockopt_sol_ip(struct mptcp_sock *msk, int optname,
> + sockptr_t optval, unsigned int optlen)
> +{
> + switch (optname) {
> + case IP_TOS:
> + return mptcp_setsockopt_sol_ip_set_tos(msk, optname, optval, optlen);
> + }
> +
> + return -EOPNOTSUPP;
> +}
> +
> static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
> sockptr_t optval, unsigned int optlen)
> {
> @@ -637,12 +671,14 @@ int mptcp_setsockopt(struct sock *sk, int level, int optname,
> if (ssk)
> return tcp_setsockopt(ssk, level, optname, optval, optlen);
>
> + if (level == SOL_IP)
> + return mptcp_setsockopt_sol_ip(msk, optname, optval, optlen);
> +
> if (level == SOL_IPV6)
> return mptcp_setsockopt_v6(msk, optname, optval, optlen);
>
> if (level == SOL_TCP)
> return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen);
> -
Looks like an accidental line deletion here.
> return -EOPNOTSUPP;
> }
>
> @@ -1000,6 +1036,7 @@ static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
> ssk->sk_priority = sk->sk_priority;
> ssk->sk_bound_dev_if = sk->sk_bound_dev_if;
> ssk->sk_incoming_cpu = sk->sk_incoming_cpu;
> + ip_sock_set_tos(ssk, inet_sk(sk)->tos);
I think this does sync the tos value to new subflows, right? Since the ssk
is already locked, use __ip_sock_set_tos(). Maybe you ran in to a deadlock
here that interfered with the syncing.
>
> if (sk->sk_userlocks & tx_rx_locks) {
> ssk->sk_userlocks |= sk->sk_userlocks & tx_rx_locks;
> --
> 2.18.2
>
>
>
--
Mat Martineau
Intel
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH RFC] Support for SOL_IP for MPTCP setsockopt
[not found] ` <CADppAWAgBA4qaxA1CrbwhUpaoRkX-aZGfQ8EC=-KkM9eZOMztA@mail.gmail.com>
@ 2021-10-25 13:52 ` Poorva Sonparote
0 siblings, 0 replies; 3+ messages in thread
From: Poorva Sonparote @ 2021-10-25 13:52 UTC (permalink / raw)
To: Mat Martineau; +Cc: mptcp, Davide Caratti
Hi Mat,
>
> On Fri, Oct 22, 2021 at 4:50 PM Mat Martineau <mathew.j.martineau@linux.intel.com> wrote:
>>
>> On Wed, 20 Oct 2021, Poorva Sonparote wrote:
>>
>> > Hello!
>> >
>> > I have been working on adding support for IP_TOS for setsockopt(). I
>> > am attaching the packetdrill test and the patch but it still won't set the TOS value
>> > for the subflows that are created after the setsockopt() call.
>> >
>> > https://github.com/multipath-tcp/mptcp_net-next/issues/220#issuecomment-947863717
>> >
>> > Thanks,
>> > Poorva
>> >
>> >
>> >
>> >
>> > This patch adds support for IP_TOS for setsockopt(.. ,SOL_IP, ..)
>> > https://github.com/multipath-tcp/mptcp_net-next/issues/220
>> >
>> > Currently, any new subflows that are created after the setsockopt()
>> > call are not being updated with the set IP_TOS value.
>> >
>>
>> Hi Poorva,
>>
>>> Thanks for the patch!
>>>
>>>
>>> A 'Closes:' tag with the github issue link is also helpful here.
>>
>>
>
Thank you for looking into this. I'll incorporate all the changes and
send out an updated version.
>
>>
>> > Signed-off-by: Poorva Sonparote <psonparo@redhat.com>
>> > ---
>> > net/mptcp/sockopt.c | 39 ++++++++++++++++++++++++++++++++++++++-
>> > 1 file changed, 38 insertions(+), 1 deletion(-)
>> >
>>
>> If you have more commentary that isn't part of the commit message you want
>> to be permanently stored in git, this space (after the '---' line above
>> but before the 'diff --git ...' below) is a good for that! 'git am' will
>> drop this text when applying. This is especially not a big deal with RFC
>> patches like this one, since they don't end up getting merged anyway.
>>
>>
>> > diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
>> > index 8137cc3a4296..f5ee49660902 100644
>> > --- a/net/mptcp/sockopt.c
>> > +++ b/net/mptcp/sockopt.c
>> > @@ -598,6 +598,40 @@ static int mptcp_setsockopt_sol_tcp_congestion(struct mptcp_sock *msk, sockptr_t
>> > return ret;
>> > }
>> >
>> > +static int mptcp_setsockopt_sol_ip_set_tos(struct mptcp_sock *msk, int optname,
>> > + sockptr_t optval, unsigned int optlen)
>> > +{
>> > + struct mptcp_subflow_context *subflow;
>> > + struct sock *sk = (struct sock *)msk;
>> > + int ret, err;
>> > + int val = 0;
>> > +
>> > + err = ip_setsockopt(sk, SOL_IP, optname, optval, optlen);
>> > + val = inet_sk(sk)->tos;
>> > +
>> > + if (err != 0)
>> > + return err;
>>
>> Minor - need a blank line here.
>>
>> > + lock_sock(sk);
>> > + mptcp_for_each_subflow(msk, subflow) {
>> > + struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
>> > +
>> > + ip_sock_set_tos(ssk, val);
>> > + }
>> > + release_sock(sk);
>>
>> and here
>>
>> > + return ret;
>> > +}
>> > +
>> > +static int mptcp_setsockopt_sol_ip(struct mptcp_sock *msk, int optname,
>> > + sockptr_t optval, unsigned int optlen)
>> > +{
>> > + switch (optname) {
>> > + case IP_TOS:
>> > + return mptcp_setsockopt_sol_ip_set_tos(msk, optname, optval, optlen);
>> > + }
>> > +
>> > + return -EOPNOTSUPP;
>> > +}
>> > +
>> > static int mptcp_setsockopt_sol_tcp(struct mptcp_sock *msk, int optname,
>> > sockptr_t optval, unsigned int optlen)
>> > {
>> > @@ -637,12 +671,14 @@ int mptcp_setsockopt(struct sock *sk, int level, int optname,
>> > if (ssk)
>> > return tcp_setsockopt(ssk, level, optname, optval, optlen);
>> >
>> > + if (level == SOL_IP)
>> > + return mptcp_setsockopt_sol_ip(msk, optname, optval, optlen);
>> > +
>> > if (level == SOL_IPV6)
>> > return mptcp_setsockopt_v6(msk, optname, optval, optlen);
>> >
>> > if (level == SOL_TCP)
>> > return mptcp_setsockopt_sol_tcp(msk, optname, optval, optlen);
>> > -
>>
>> Looks like an accidental line deletion here.
>>
>> > return -EOPNOTSUPP;
>> > }
>> >
>> > @@ -1000,6 +1036,7 @@ static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
>> > ssk->sk_priority = sk->sk_priority;
>> > ssk->sk_bound_dev_if = sk->sk_bound_dev_if;
>> > ssk->sk_incoming_cpu = sk->sk_incoming_cpu;
>> > + ip_sock_set_tos(ssk, inet_sk(sk)->tos);
>>
>>> > I think this does sync the tos value to new subflows, right? Since the ssk
>>> > is already locked, use __ip_sock_set_tos(). Maybe you ran in to a deadlock
>>> > here that interfered with the syncing.
>
>
Yes, I did. Thanks for the suggestion!
>>
>>
>> >
>> > if (sk->sk_userlocks & tx_rx_locks) {
>> > ssk->sk_userlocks |= sk->sk_userlocks & tx_rx_locks;
>> > --
>> > 2.18.2
>> >
>> >
>> >
>>
>> --
>> Mat Martineau
>> Intel
>>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-10-25 13:52 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-10-20 19:56 [PATCH RFC] Support for SOL_IP for MPTCP setsockopt Poorva Sonparote
2021-10-22 23:49 ` Mat Martineau
[not found] ` <CADppAWAgBA4qaxA1CrbwhUpaoRkX-aZGfQ8EC=-KkM9eZOMztA@mail.gmail.com>
2021-10-25 13:52 ` Poorva Sonparote
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.