diff --git a/gtests/net/mptcp/dss/dss_drop_after_data_fallback.pkt b/gtests/net/mptcp/dss/dss_drop_after_data_fallback.pkt new file mode 100644 index 00000000..8d01d008 --- /dev/null +++ b/gtests/net/mptcp/dss/dss_drop_after_data_fallback.pkt @@ -0,0 +1,30 @@ +--tolerance_usecs=100000 +`../common/defaults.sh` + +0.0 socket(..., SOCK_STREAM, IPPROTO_MPTCP) = 3 ++0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 + ++0 bind(3, ..., ...) = 0 ++0 listen(3, 1) = 0 + +// 3WHS is OK ++0.0 < S 0:0(0) win 65535 ++0.0 > S. 0:0(0) ack 1 ++0.1 < . 1:1(0) ack 1 win 2048 ++0 accept(3, ..., ...) = 4 + +// Data from the client with valid MPTCP options (no DATA_ACK: normal) ++0.1 < P. 1:501(500) ack 1 win 2048 +// From here, the MPTCP options will be dropped by a middlebox ++0.0 > . 1:1(0) ack 501 ++0.1 read(4, ..., 500) = 500 ++0 write(4, ..., 100) = 100 + +// The server replies with data, still thinking MPTCP is being used ++0.0 > P. 1:101(100) ack 501 +// But the client already did a fallback to TCP, because the two previous packets have been received without MPTCP options ++0.1 < . 501:501(0) ack 101 win 2048 + ++0.0 < P. 501:601(100) ack 101 win 2048 +// The server should fallback to TCP, not reset: it didn't get a DATA_ACK, nor data for more than the initial window ++0.0 > . 101:101(0) ack 601