diff --git a/gtests/net/mptcp/remove_addr/remove_addr_client.pkt b/gtests/net/mptcp/remove_addr/remove_addr_client.pkt new file mode 100644 index 00000000..d4bd32d5 --- /dev/null +++ b/gtests/net/mptcp/remove_addr/remove_addr_client.pkt @@ -0,0 +1,37 @@ +// connection initiated by the kernel +--tolerance_usecs=100000 +`../common/defaults.sh` + ++0 `../common/client.sh` + ++0.0 socket(..., SOCK_STREAM, IPPROTO_MPTCP) = 3 ++0.0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 ++0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 + ++0.0 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) ++0.0 > S 0:0(0) ++0.0 < S. 0:0(0) ack 1 win 65535 ++0.0 > . 1:1(0) ack 1 + ++0.200 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 ++0.205 fcntl(3, F_SETFL, O_RDWR) = 0 // set back to blocking + ++0.01 write(3, ..., 100) = 100 ++0.0 > P. 1:101(100) ack 1 + + +// explicit ACK then ADD_ADDR: on some slow env, injecting ADD_ADDR can take +// time, causing the host to retransmit its last data packet. Here we ensure +// this previous packet is acked then we can send the ADD_ADDR ++0.0 < . 1:1(0) ack 101 win 256 ++0.0 < . 1:1(0) ack 101 win 256 + +// ADD_ADDR echo (without hmac) ++0.0 > . 101:101(0) ack 1 + +// remove address ++0.0 < . 1:1(0) ack 101 win 256 + ++0.0 close(3) = 0 ++0.0 > . 101:101(0) ack 1 diff --git a/gtests/net/mptcp/remove_addr/remove_addr_server_v4.pkt b/gtests/net/mptcp/remove_addr/remove_addr_server_v4.pkt new file mode 100644 index 00000000..e6b87549 --- /dev/null +++ b/gtests/net/mptcp/remove_addr/remove_addr_server_v4.pkt @@ -0,0 +1,28 @@ +// connection initiated by packetdrill +--tolerance_usecs=100000 +`../common/defaults.sh` + ++0 `ip mptcp endpoint flush` ++0 `ip mptcp endpoint add 198.51.100.2 id 10 signal` + ++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 ++0 < S 0:0(0) win 32792 ++0 > S. 0:0(0) ack 1 ++0.01 < . 1:1(0) ack 1 win 257 ++0 accept(3, ..., ...) = 4 + +// ADD_ADDR is sent directly (>= 5.12), not after first data (< 5.12) ++0 > . 1:1(0) ack 1 ++0 < . 1:1(0) ack 1 win 257 + +// remove address from the server ++0 `ip mptcp endpoint delete id 10` ++0 > . 1:1(0) ack 1 + + ++0 close(4) = 0 ++0 > . 1:1(0) ack 1 diff --git a/gtests/net/mptcp/remove_addr/remove_addr_server_v6.pkt b/gtests/net/mptcp/remove_addr/remove_addr_server_v6.pkt new file mode 100644 index 00000000..7eee8103 --- /dev/null +++ b/gtests/net/mptcp/remove_addr/remove_addr_server_v6.pkt @@ -0,0 +1,28 @@ +// connection initiated by packetdrill +--tolerance_usecs=100000 +`../common/defaults.sh` + ++0 `ip mptcp endpoint flush` ++0 `ip mptcp endpoint add 2001:db8:1::1 id 10 signal` + ++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 ++0 < S 0:0(0) win 32792 ++0 > S. 0:0(0) ack 1 ++0.01 < . 1:1(0) ack 1 win 257 ++0 accept(3, ..., ...) = 4 + +// ADD_ADDR is sent directly (>= 5.12), not after first data (< 5.12) ++0 > . 1:1(0) ack 1 ++0 < . 1:1(0) ack 1 win 257 + +// remove address from the server ++0 `ip mptcp endpoint delete id 10` ++0 > . 1:1(0) ack 1 + + ++0 close(4) = 0 ++0 > . 1:1(0) ack 1