[PATCH v5 mptcp-next 0/4] mptcp: more self-tests improvements

Paolo Abeni posted 4 patches 2 years, 2 months ago
Failed in applying to current master (apply log)
include/uapi/linux/mptcp.h                    |   1 +
net/mptcp/pm_netlink.c                        |  84 ++++++------
net/mptcp/protocol.c                          |   3 +
net/mptcp/protocol.h                          |   3 +-
net/mptcp/subflow.c                           |  67 ++++++++--
.../testing/selftests/net/mptcp/mptcp_join.sh | 121 +++++++++++++++++-
tools/testing/selftests/net/mptcp/pm_nl_ctl.c |   7 +
7 files changed, 234 insertions(+), 52 deletions(-)
[PATCH v5 mptcp-next 0/4] mptcp: more self-tests improvements
Posted by Paolo Abeni 2 years, 2 months ago
This iteration tries to address the feedback from Mat on v4.

patch 1/4 is new and tries to address the problem behind issues/225 with
stricted RFC compliance
patch 2 and 3 clean-up endpoint management as per past discussion
patch 4 introduce new self-tests, as deserved the previous patch

Paolo Abeni (4):
  mptcp: more careful RM_ADDR generation
  mptcp: introduce implicit endpoints
  mptcp: strict local address ID selection.
  selftests: mptcp: add implicit endpoint test case

 include/uapi/linux/mptcp.h                    |   1 +
 net/mptcp/pm_netlink.c                        |  84 ++++++------
 net/mptcp/protocol.c                          |   3 +
 net/mptcp/protocol.h                          |   3 +-
 net/mptcp/subflow.c                           |  67 ++++++++--
 .../testing/selftests/net/mptcp/mptcp_join.sh | 121 +++++++++++++++++-
 tools/testing/selftests/net/mptcp/pm_nl_ctl.c |   7 +
 7 files changed, 234 insertions(+), 52 deletions(-)

-- 
2.34.1


Re: [PATCH v5 mptcp-next 0/4] mptcp: more self-tests improvements
Posted by Mat Martineau 2 years, 2 months ago
On Thu, 17 Feb 2022, Paolo Abeni wrote:

> This iteration tries to address the feedback from Mat on v4.
>
> patch 1/4 is new and tries to address the problem behind issues/225 with
> stricted RFC compliance
> patch 2 and 3 clean-up endpoint management as per past discussion
> patch 4 introduce new self-tests, as deserved the previous patch
>

Hi Paolo -

These changes and tests are working well on my system and fits with what 
we discussed on the previous revisions - thanks!

I was taking another look at the RFC and saw this paragraph:

    The MP_JOIN option includes an "Address ID".  This is an identifier
    generated by the sender of the option, used to identify the source
    address of this packet, even if the IP header has been changed in
    transit by a middlebox.  The numeric value of this field is generated
    by the sender and must map uniquely to a source IP address for the
    sending host.  The Address ID allows address removal (Section 3.4.2)
    without needing to know what the source address at the receiver is,
    thus allowing address removal through NATs.  The Address ID also
    allows correlation between new subflow setup attempts and address
    signaling (Section 3.4.1), to prevent setting up duplicate subflows
    on the same path, if an MP_JOIN and ADD_ADDR are sent at the same
    time.

That made me wonder if we are supposed to treat this address ID as a type 
of advertisement which would require us to not reuse id 0? I think the 
answer is "no" because nothing in the REMOVE_ADDR section (3.4.2) seems to 
apply to joins, and it's also pretty permissive about not sending 
REMOVE_ADDR. We also won't be sending REMOVE_ADDR for id 0, so the new 
code seems safe in that regard.

Hopefully you agree with the above and I'm just catching up to what you 
understood about the RFC already :)

That's a long way to say, I think this patch set looks ok for the export 
branch:

Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>


> Paolo Abeni (4):
>  mptcp: more careful RM_ADDR generation
>  mptcp: introduce implicit endpoints
>  mptcp: strict local address ID selection.
>  selftests: mptcp: add implicit endpoint test case
>
> include/uapi/linux/mptcp.h                    |   1 +
> net/mptcp/pm_netlink.c                        |  84 ++++++------
> net/mptcp/protocol.c                          |   3 +
> net/mptcp/protocol.h                          |   3 +-
> net/mptcp/subflow.c                           |  67 ++++++++--
> .../testing/selftests/net/mptcp/mptcp_join.sh | 121 +++++++++++++++++-
> tools/testing/selftests/net/mptcp/pm_nl_ctl.c |   7 +
> 7 files changed, 234 insertions(+), 52 deletions(-)
>
> -- 
> 2.34.1
>
>
>

--
Mat Martineau
Intel

Re: [PATCH v5 mptcp-next 0/4] mptcp: more self-tests improvements
Posted by Paolo Abeni 2 years, 2 months ago
On Thu, 2022-02-17 at 17:35 -0800, Mat Martineau wrote:
> On Thu, 17 Feb 2022, Paolo Abeni wrote:
> 
> > This iteration tries to address the feedback from Mat on v4.
> > 
> > patch 1/4 is new and tries to address the problem behind issues/225 with
> > stricted RFC compliance
> > patch 2 and 3 clean-up endpoint management as per past discussion
> > patch 4 introduce new self-tests, as deserved the previous patch
> > 
> 
> Hi Paolo -
> 
> These changes and tests are working well on my system and fits with what 
> we discussed on the previous revisions - thanks!
> 
> I was taking another look at the RFC and saw this paragraph:
> 
>     The MP_JOIN option includes an "Address ID".  This is an identifier
>     generated by the sender of the option, used to identify the source
>     address of this packet, even if the IP header has been changed in
>     transit by a middlebox.  The numeric value of this field is generated
>     by the sender and must map uniquely to a source IP address for the
>     sending host.  The Address ID allows address removal (Section 3.4.2)
>     without needing to know what the source address at the receiver is,
>     thus allowing address removal through NATs.  The Address ID also
>     allows correlation between new subflow setup attempts and address
>     signaling (Section 3.4.1), to prevent setting up duplicate subflows
>     on the same path, if an MP_JOIN and ADD_ADDR are sent at the same
>     time.
> 
> That made me wonder if we are supposed to treat this address ID as a type 
> of advertisement which would require us to not reuse id 0? I think the 
> answer is "no" because nothing in the REMOVE_ADDR section (3.4.2) seems to 
> apply to joins, and it's also pretty permissive about not sending 
> REMOVE_ADDR. We also won't be sending REMOVE_ADDR for id 0, so the new 
> code seems safe in that regard.

Double checking if I parsed the above correctly. The main
point/question is: which ID should use additional MPJ subflows with the
same source address of the initial MPC subflow? My answer/what the
current code is doing prior and after this patch is 'id 0'. I read the
above as this is also your answer.

Please correct me if I misinterpret something!

> 
> Hopefully you agree with the above and I'm just catching up to what you 
> understood about the RFC already :)
> 
> That's a long way to say, I think this patch set looks ok for the export 
> branch:
> 
> Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>

Thanks!

/P


Re: [PATCH v5 mptcp-next 0/4] mptcp: more self-tests improvements
Posted by Mat Martineau 2 years, 2 months ago
On Fri, 18 Feb 2022, Paolo Abeni wrote:

> On Thu, 2022-02-17 at 17:35 -0800, Mat Martineau wrote:
>> On Thu, 17 Feb 2022, Paolo Abeni wrote:
>>
>>> This iteration tries to address the feedback from Mat on v4.
>>>
>>> patch 1/4 is new and tries to address the problem behind issues/225 with
>>> stricted RFC compliance
>>> patch 2 and 3 clean-up endpoint management as per past discussion
>>> patch 4 introduce new self-tests, as deserved the previous patch
>>>
>>
>> Hi Paolo -
>>
>> These changes and tests are working well on my system and fits with what
>> we discussed on the previous revisions - thanks!
>>
>> I was taking another look at the RFC and saw this paragraph:
>>
>>     The MP_JOIN option includes an "Address ID".  This is an identifier
>>     generated by the sender of the option, used to identify the source
>>     address of this packet, even if the IP header has been changed in
>>     transit by a middlebox.  The numeric value of this field is generated
>>     by the sender and must map uniquely to a source IP address for the
>>     sending host.  The Address ID allows address removal (Section 3.4.2)
>>     without needing to know what the source address at the receiver is,
>>     thus allowing address removal through NATs.  The Address ID also
>>     allows correlation between new subflow setup attempts and address
>>     signaling (Section 3.4.1), to prevent setting up duplicate subflows
>>     on the same path, if an MP_JOIN and ADD_ADDR are sent at the same
>>     time.
>>
>> That made me wonder if we are supposed to treat this address ID as a type
>> of advertisement which would require us to not reuse id 0? I think the
>> answer is "no" because nothing in the REMOVE_ADDR section (3.4.2) seems to
>> apply to joins, and it's also pretty permissive about not sending
>> REMOVE_ADDR. We also won't be sending REMOVE_ADDR for id 0, so the new
>> code seems safe in that regard.
>
> Double checking if I parsed the above correctly. The main
> point/question is: which ID should use additional MPJ subflows with the
> same source address of the initial MPC subflow? My answer/what the
> current code is doing prior and after this patch is 'id 0'. I read the
> above as this is also your answer.
>
> Please correct me if I misinterpret something!
>

That's part of it. I also wasn't sure if the MPJ syn could also be sent 
with addr id 0 if the kernel picked some other interface for sending that 
syn that had not been configured in the path manager - a corner case that 
I thought had been mentioned earlier in discussion of this patch series.

If the outgoing MPJ only has addr id 0 if the MPC source addr is used then 
that's definitely not any kind of problem.

--
Mat Martineau
Intel

Re: [PATCH v5 mptcp-next 0/4] mptcp: more self-tests improvements
Posted by Paolo Abeni 2 years, 1 month ago
On Fri, 2022-02-18 at 12:33 -0800, Mat Martineau wrote:
> On Fri, 18 Feb 2022, Paolo Abeni wrote:
> 
> > On Thu, 2022-02-17 at 17:35 -0800, Mat Martineau wrote:
> > > On Thu, 17 Feb 2022, Paolo Abeni wrote:
> > > 
> > > > This iteration tries to address the feedback from Mat on v4.
> > > > 
> > > > patch 1/4 is new and tries to address the problem behind issues/225 with
> > > > stricted RFC compliance
> > > > patch 2 and 3 clean-up endpoint management as per past discussion
> > > > patch 4 introduce new self-tests, as deserved the previous patch
> > > > 
> > > 
> > > Hi Paolo -
> > > 
> > > These changes and tests are working well on my system and fits with what
> > > we discussed on the previous revisions - thanks!
> > > 
> > > I was taking another look at the RFC and saw this paragraph:
> > > 
> > >     The MP_JOIN option includes an "Address ID".  This is an identifier
> > >     generated by the sender of the option, used to identify the source
> > >     address of this packet, even if the IP header has been changed in
> > >     transit by a middlebox.  The numeric value of this field is generated
> > >     by the sender and must map uniquely to a source IP address for the
> > >     sending host.  The Address ID allows address removal (Section 3.4.2)
> > >     without needing to know what the source address at the receiver is,
> > >     thus allowing address removal through NATs.  The Address ID also
> > >     allows correlation between new subflow setup attempts and address
> > >     signaling (Section 3.4.1), to prevent setting up duplicate subflows
> > >     on the same path, if an MP_JOIN and ADD_ADDR are sent at the same
> > >     time.
> > > 
> > > That made me wonder if we are supposed to treat this address ID as a type
> > > of advertisement which would require us to not reuse id 0? I think the
> > > answer is "no" because nothing in the REMOVE_ADDR section (3.4.2) seems to
> > > apply to joins, and it's also pretty permissive about not sending
> > > REMOVE_ADDR. We also won't be sending REMOVE_ADDR for id 0, so the new
> > > code seems safe in that regard.
> > 
> > Double checking if I parsed the above correctly. The main
> > point/question is: which ID should use additional MPJ subflows with the
> > same source address of the initial MPC subflow? My answer/what the
> > current code is doing prior and after this patch is 'id 0'. I read the
> > above as this is also your answer.
> > 
> > Please correct me if I misinterpret something!
> > 
> 
> That's part of it. I also wasn't sure if the MPJ syn could also be sent 
> with addr id 0 if the kernel picked some other interface for sending that 
> syn that had not been configured in the path manager - a corner case that 
> I thought had been mentioned earlier in discussion of this patch series.

I think now it's much clearer to me, thanks!

> If the outgoing MPJ only has addr id 0 if the MPC source addr is used then 
> that's definitely not any kind of problem.

That is addressed by patch 3/4: prior to such patch, MPJ subflows using
local addresses not mapped by user-defined endpoint would select the 0
ID.

After that patch such subflows will create a new IMPLICIT endpoint at
rebuild_header time will use an unique ID number.

Thanks,

Paolo



Re: [PATCH v5 mptcp-next 0/4] mptcp: more self-tests improvements
Posted by Matthieu Baerts 2 years, 1 month ago
Hi Paolo, Mat,

On 17/02/2022 22:44, Paolo Abeni wrote:
> This iteration tries to address the feedback from Mat on v4.
> 
> patch 1/4 is new and tries to address the problem behind issues/225 with
> stricted RFC compliance
> patch 2 and 3 clean-up endpoint management as per past discussion
> patch 4 introduce new self-tests, as deserved the previous patch

Thank you for the patches and reviews!

Now in our tree (feat. for net-next) with Mat's RvB tags and minor
modifications on the last patch:

- 1c0e3277fab9: mptcp: more careful RM_ADDR generation
- 1908304713ea: mptcp: introduce implicit endpoints
- 25124126a6c0: mptcp: strict local address ID selection
- 7532760df8bc: selftests: mptcp: add implicit endpoint test case
  - With minor modifications (missing local + help usage)
  - https://paste.opendev.org/show/812824
- Results: 78bc7e06c12d..785fa0377037

Builds and tests are now in progress:

https://cirrus-ci.com/github/multipath-tcp/mptcp_net-next/export/20220219T171438
https://github.com/multipath-tcp/mptcp_net-next/actions/workflows/build-validation.yml?query=branch:export

Cheers,
Matt
-- 
Tessares | Belgium | Hybrid Access Solutions
www.tessares.net