mbox series

[0/5] mptcp: add reset and fastclose option support

Message ID 20201105170126.5627-1-fw@strlen.de
Headers show
Series mptcp: add reset and fastclose option support | expand

Message

Florian Westphal Nov. 5, 2020, 5:01 p.m. UTC
This series adds reset and fast close options.
Both need common infrastructure:
 1. need to parse mptcp option in tcp reset packets, and making
    them available to the stack
 2. ability to add mptcp option to tcp reset packets

First two patches move code around and add mptcp-callsite for
option deciding from rst packets.

Patch 3 adds reset support (both decoding and adding them).
Patch 4 adds the fastclose receive processing.
Patch 5 sends a fastclose packet when userspace calls close()
while there is unread data in the mptcp rx queue.

Patch 2) is not strictly need ATM, I could rework the series
to remove it and only handle fastclose for the time being.
Last patch could be removed as well so we only handle the rx case
(there is nothing in RFC that says we must send fastclose).

Comments welcome.

Comments

Mat Martineau Nov. 12, 2020, 1:44 a.m. UTC | #1
On Thu, 5 Nov 2020, Florian Westphal wrote:

> This series adds reset and fast close options.
> Both need common infrastructure:
> 1. need to parse mptcp option in tcp reset packets, and making
>    them available to the stack
> 2. ability to add mptcp option to tcp reset packets
>
> First two patches move code around and add mptcp-callsite for
> option deciding from rst packets.
>
> Patch 3 adds reset support (both decoding and adding them).
> Patch 4 adds the fastclose receive processing.
> Patch 5 sends a fastclose packet when userspace calls close()
> while there is unread data in the mptcp rx queue.
>
> Patch 2) is not strictly need ATM, I could rework the series
> to remove it and only handle fastclose for the time being.
> Last patch could be removed as well so we only handle the rx case
> (there is nothing in RFC that says we must send fastclose).
>
> Comments welcome.

I had a couple of minor questions on patch 3, but nothing that would keep 
this from going in to the export branch for some more testing. Might be 
easier to coordinate with Paolo's refactor changes to the workqueue that 
way.

Do the selftests get any code coverage on this, for example in the 
new-subflow-not-allowed case? And thanks for looking at packetdrill tests 
for this, saw the conversation on IRC.

--
Mat Martineau
Intel
Florian Westphal Nov. 12, 2020, 9:48 a.m. UTC | #2
Mat Martineau <mathew.j.martineau@linux.intel.com> wrote:
> I had a couple of minor questions on patch 3, but nothing that would keep
> this from going in to the export branch for some more testing. Might be
> easier to coordinate with Paolo's refactor changes to the workqueue that
> way.
> 
> Do the selftests get any code coverage on this, for example in the
> new-subflow-not-allowed case?

How would you do that?  I could add a mib counter and check that in the
script.  But other than that I do not see how to expose any of this to
the script/mptcp_connect.

> And thanks for looking at packetdrill tests for this,
> saw the conversation on IRC.

Yes, I plan to send a pull request for fastclose and reset.

As for further direction, I think next step is to add genl notifications
so mptcpd can learn about subflows that are added/removed, the reset
code could then be exposed to userspace in the 'subflow was reset'
case.
Mat Martineau Nov. 12, 2020, 10:55 p.m. UTC | #3
On Thu, 12 Nov 2020, Florian Westphal wrote:

> Mat Martineau <mathew.j.martineau@linux.intel.com> wrote:
>> I had a couple of minor questions on patch 3, but nothing that would keep
>> this from going in to the export branch for some more testing. Might be
>> easier to coordinate with Paolo's refactor changes to the workqueue that
>> way.
>>
>> Do the selftests get any code coverage on this, for example in the
>> new-subflow-not-allowed case?
>
> How would you do that?  I could add a mib counter and check that in the
> script.  But other than that I do not see how to expose any of this to
> the script/mptcp_connect.

I meant it in a different sense: not that there's a specific self test 
result that looks at a count of MPTCP_RST, but that there is some self 
test (such as denying an additional subflow due to a configured limit) 
that would cause MPTCP_RST to be sent and processed. That way the new code 
is at least running during self test and, if memory leak 
checks/lockdep/etc. were enabled we would at least know some portion of 
the MPTCP_RST code was being exercised and checked during the tests even 
if they aren't explictly part of the results.

I should just answer my own question by capturing the pcaps during the 
self tests, but I haven't had a chance to build & run the changes yet and 
was curious if you had already checked.

If there are MIBs that make sense for real-world use, that's great and 
would make for better tests, but I'm not pushing for that now.

>
>> And thanks for looking at packetdrill tests for this,
>> saw the conversation on IRC.
>
> Yes, I plan to send a pull request for fastclose and reset.
>
> As for further direction, I think next step is to add genl notifications
> so mptcpd can learn about subflows that are added/removed, the reset
> code could then be exposed to userspace in the 'subflow was reset'
> case.
>

Good plan. Thanks.

--
Mat Martineau
Intel