Skip to content

Conversation

@matttbe
Copy link
Member

@matttbe matttbe commented Nov 4, 2025

The MPTCP CI recently caught an issue with the mptcp_connect.sh test, where one subtest timeout.

When this happens, 'ss -Mt' reports:

  • listener:

    • tcp ESTAB
    • mptcp LAST-ACK
  • connector:

    • tcp ESTAB
    • mptcp FIN-WAIT-2

As spotted by Paolo, all bytes have been exchanged, the last data packet has been received 60 seconds ago. So it looks like one data-fin didn't get retransmitted.

In this case, both sides have the connection closed by the userspace: data-fin have been sent to be in such MPTCP states. The listener sent a data-fin, and is waiting for an ACK. The connector side is waiting for a data-fin.

That's what the two new tests are checking:

  • Is the data-fin retransmitted as expected?

  • Is the data-fin ACK retransmitted when received with a delay?

These tests pass with the current MPTCP tree.

Link: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/19047087376

The MPTCP CI recently caught an issue with the mptcp_connect.sh test,
where one subtest timeout.

When this happens, 'ss -Mt' reports:

 - listener:
   - tcp   ESTAB
   - mptcp LAST-ACK

 - connector:
   - tcp   ESTAB
   - mptcp FIN-WAIT-2

As spotted by Paolo, all bytes have been exchanged, the last data packet
has been received 60 seconds ago. So it looks like one data-fin didn't
get retransmitted.

In this case, both sides have the connection closed by the userspace:
data-fin have been sent to be in such MPTCP states. The listener sent a
data-fin, and is waiting for an ACK. The connector side is waiting for a
data-fin.

That's what the two new tests are checking:

 - Is the data-fin retransmitted as expected?

 - Is the data-fin ACK retransmitted when received with a delay?

These tests pass with the current MPTCP tree.

Link: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/19047087376
Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
We were suspecting this case not to be supported, but it is apparently.

After having closed the connection, some data are injected with the FIN.
It is still possible to read them after the close().

Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
@matttbe
Copy link
Member Author

matttbe commented Nov 8, 2025

Just added a few new tests: they pass on the export branch, not helping to reproduce #595 so far.

To make sure data are not exchanged after a data-fin, and see if it is
possible to read data after the shutdown().

Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
@matttbe matttbe force-pushed the dss-fin-retrans-last-ack-fin-wait2 branch from b14f78c to 99fe905 Compare November 10, 2025 10:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant