diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_active.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_active.pkt index c2c8ab13ec9482ef2f3ccdbe375cc81b8f055818..2104291a47b4bd52cdbbe33a25a60396f96cdd79 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_active.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_active.pkt @@ -1,13 +1,15 @@ + --tolerance_usecs=75000 + 0.0 `sysctl -w net.inet.sctp.ecn_enable=1` +0.0 `sysctl -w net.inet.sctp.pr_enable=0` +0.0 `sysctl -w net.inet.sctp.asconf_enable=0` -+0.0 `sysctl -w net.inet.sctp.auth_enable=0` ++0.0 `sysctl -w net.inet.sctp.auth_disable=1` +0.0 `sysctl -w net.inet.sctp.reconfig_enable=0` -+0.0 `sysctl -w net.inet.sctp.nrsack_enable=0` -+0.0 `sysctl -w net.inet.sctp.pktdrop_enable=0` + +0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 +0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 + // Check the handshake with an empty(!) cookie +0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) +0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=0, @@ -19,7 +21,9 @@ PARAMETER[type=0xbf11, len=5, val=[0x01]]] +0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...] +0.1 < sctp: COOKIE_ACK[flgs=0] + +0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + // Send some data +0.5 < sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=9, val=...]]; PAD[flgs=0, len=1300, val=...] @@ -27,14 +31,17 @@ +1.0 write(3, ..., 1000) = 1000 +0.0 > sctp: DATA[flgs=BE, len=1016, tsn=0, sid=0, ssn=0, ppid=0] +0.1 < sctp: SACK[flgs=0, cum_tsn=0, a_rwnd=1500, gaps=[], dups=[]] + // Receive some data +1.0 < sctp: DATA[flgs=BE, len=1016, tsn=3, sid=0, ssn=0, ppid=0] +0.0 read(3, ..., 2000) = 1000 +0.0 > sctp: SACK[flgs=..., cum_tsn=3, a_rwnd=..., gaps=..., dups=...] + // Receive more data, observe a non-delayed SACK +1.0 < sctp: DATA[flgs=IBE, len=1016, tsn=4, sid=0, ssn=1, ppid=0] +0.0 read(3, ..., 2000) = 1000 +0.0 > sctp: SACK[flgs=0, cum_tsn=4, a_rwnd=..., gaps=..., dups=...] + // Tear down the association +0.0 close(3) = 0 +0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=4] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/add_incoming_streams.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/add_incoming_streams.pkt index 756ffe60766cd3a9e2b95a687e4f7d24d35ad212..ffad425063577c4ecc36623c51169224449c8adb 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/add_incoming_streams.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/add_incoming_streams.pkt @@ -31,5 +31,9 @@ sas_instrms=10, sas_outstrms=0}, 8) = 0 +0.0 > sctp: RECONFIG[flgs=0, ADD_INCOMING_STREAMS[req_sn=1, number_of_new_streams=10]] ++0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=2]] +1.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/add_outgoing_streams.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/add_outgoing_streams.pkt index 18d5175b2a3ae3f43da376275795a18633493b04..5eac7fe3e3fa482aa93b1b3559283c8c6ed132ed 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/add_outgoing_streams.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/add_outgoing_streams.pkt @@ -31,5 +31,9 @@ sas_instrms=0, sas_outstrms=10}, 8) = 0 +0.0 > sctp: RECONFIG[flgs=0, ADD_OUTGOING_STREAMS[req_sn=1, number_of_new_streams=10]] ++0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1]] +1.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_incoming_ssn.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_incoming_ssn.pkt index 1f6ef829eaf57128b79e5c45ecbc4a8b56f80729..2c8abb4770b9ddd20f5de99554b78dcacfbacfe7 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_incoming_ssn.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_incoming_ssn.pkt @@ -36,3 +36,6 @@ +0.0 > sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1]] +1.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_incoming_ssn_passiv.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_incoming_ssn_passiv.pkt index 85d71afdd2e14d109c22679aa6189541f798d1db..a033896c445efd0dd084b08d49a76656b7b3492d 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_incoming_ssn_passiv.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_incoming_ssn_passiv.pkt @@ -41,3 +41,9 @@ +0.0 < sctp: RECONFIG[flgs=0, INCOMING_SSN_RESET[req_sn=1, sids=[0]]] +0.0 > sctp: RECONFIG[flgs=0, OUTGOING_SSN_RESET[req_sn=..., resp_sn=..., last_tsn=..., sids=[]]]; RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1]] +0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=10, result=1]] + ++0.0 close(3) = 0 ++0.0 close(4) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=3] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn.pkt index 21c179cb224a9f5c82e224845825ff42e2d7f1cf..122bd8c770331800134374d346bc7a3e73128454 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn.pkt @@ -35,3 +35,6 @@ +0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1]] +1.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn_passiv.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn_passiv.pkt index e130bb9792abc07930d7f6b71d5fbf870ba45311..1e5aa44a66f9e3b1216781f62ed7f980c403fb26 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn_passiv.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn_passiv.pkt @@ -34,5 +34,11 @@ * > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] +0.0 read(4, ..., 1000) = 1000 -+0.0 < sctp: RECONFIG[flgs=0, OUTGOING_SSN_RESET[req_sn=0, resp_sn=0, last_tsn=11, sids=[0]]] -+0.0 > sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=..., result=...]] ++0.0 < sctp: RECONFIG[flgs=0, OUTGOING_SSN_RESET[req_sn=1, resp_sn=10, last_tsn=2, sids=[0]]] ++0.0 > sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1]] + ++0.0 close(4) = 0 ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=2] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_ssn_tsn.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_ssn_tsn.pkt index be613ee1d9df5844f8ceca40fa7208d28a8564ae..d25f153835554a3cead9e6627c707ae62d8fecc2 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_ssn_tsn.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_ssn_tsn.pkt @@ -29,6 +29,9 @@ // Reset Stream 0 +0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RESET_ASSOC, [3], 4) = 0 +0.0 > sctp: RECONFIG[flgs=0, SSN_TSN_RESET[req_sn=1]] -+0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1]] ++0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1, sender_next_tsn=1, receiver_next_tsn=1]] +1.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_ssn_tsn_passiv.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_ssn_tsn_passiv.pkt index 76e0a88a1938ab70800a308e2c8d429b566654b3..614ec43912bcf75a7d344e683af0b662b43143fa 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_ssn_tsn_passiv.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_ssn_tsn_passiv.pkt @@ -2,7 +2,7 @@ +0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 // Check the handshake with en empty(!) cookie -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_ASSOC_REQ}, 8) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ|SCTP_ENABLE_RESET_ASSOC_REQ|SCTP_ENABLE_CHANGE_ASSOC_REQ}, 8) = 0 +0.0 bind(3, ..., ...) = 0 +0.0 listen(3, 1) = 0 @@ -35,4 +35,10 @@ +0.0 read(4, ..., 1000) = 1000 +0.0 < sctp: RECONFIG[flgs=0, SSN_TSN_RESET[req_sn=0]] -+0.0 > sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=0, result=0, sender_next_tsn=0, receiver_next_tsn=0]] ++0.0 > sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=0, result=0, sender_next_tsn=..., receiver_next_tsn=...]] + ++0.0 close(3) = 0 ++0.0 close(4) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=...] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_add_streams.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_change_streams_event.pkt similarity index 52% rename from gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_add_streams.pkt rename to gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_change_streams_event.pkt index 88fdd7cc9608f823bbd1f0e93f1ad87a9876b5d0..a19135cc6582f325626d1d62ae7c6b84a876bd50 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_add_streams.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_change_streams_event.pkt @@ -2,7 +2,9 @@ +0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ}, 8) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_CHANGE_ASSOC_REQ}, 8) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_STREAM_CHANGE_EVENT, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_STREAM_CHANGE_EVENT, se_on=1}, [8]) = 0 +0.0 bind(3, ..., ...) = 0 +0.0 listen(3, 1) = 0 @@ -33,8 +35,24 @@ * > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] +0.0 read(4, ..., 1000) = 1000 -+0 setsockopt(4, IPPROTO_SCTP, SCTP_ADD_STREAMS, {sas_instrms=20, - sas_outstrms=20}, 8) = 0 ++0.0 setsockopt(4, IPPROTO_SCTP, SCTP_ADD_STREAMS, {sas_instrms=0, + sas_outstrms=10}, 8) = 0 ++0.0 > sctp: RECONFIG[flgs=0, ADD_OUTGOING_STREAMS[req_sn=10, number_of_new_streams=10]] ++0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=10, result=1]] + ++0.2 recvmsg(4, {msg_name(...)=..., + msg_iov(1)=[{iov_base={strchange_type=SCTP_STREAM_CHANGE_EVENT, + strchange_flags=0, + strchange_length=16, + strchange_assoc_id=3, + strchange_instrms=1, + strchange_outstrms=11}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 16 +0 close(3) = 0 +0 close(4) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=2] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_enable_stream_reset.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_enable_stream_reset.pkt index 7bcf95857e55622c661e3fe29b40d0bae3c40391..fcf84a5fbf9a14bb0ab68dd8c2eaecaa51be2d48 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_enable_stream_reset.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_enable_stream_reset.pkt @@ -1,12 +1,6 @@ 0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 +0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 -// Check the handshake with an empty(!) cookie -+0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) -+0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=1, ...] -+0.1 < sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=1500, os=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...]] -+0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...] -+0.1 < sctp: COOKIE_ACK[flgs=0] +0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 @@ -27,4 +21,3 @@ +0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ|SCTP_ENABLE_RESET_ASSOC_REQ|SCTP_ENABLE_CHANGE_ASSOC_REQ}, 8) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ|SCTP_ENABLE_RESET_ASSOC_REQ|SCTP_ENABLE_CHANGE_ASSOC_REQ}, [8]) = 0 -+0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_assoc.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_assoc.pkt deleted file mode 100644 index 26b66e02e7425618bc864c82060022168d6b71ce..0000000000000000000000000000000000000000 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_assoc.pkt +++ /dev/null @@ -1,39 +0,0 @@ ---tolerance_usecs=100000 - -+0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 - -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ}, 8) = 0 - -+0.0 bind(3, ..., ...) = 0 -+0.0 listen(3, 1) = 0 -+0.0 < sctp: INIT[flgs=0, tag=1, a_rwnd=1500, os=1, is=1, tsn=1, - ECN_CAPABLE[], - SUPPORTED_EXTENSIONS[types=[0x82]], - COOKIE_PRESERVATIVE[incr=12345], - SUPPORTED_ADDRESS_TYPES[types=[IPv4]]] -+0.0 > sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=..., os=..., is=..., tsn=10, ...] -+0.1 < sctp: COOKIE_ECHO[flgs=0, len=..., val=...] -+0.0 > sctp: COOKIE_ACK[flgs=0] - -+0.0 accept(3, ..., ...) = 4 - -+1.0 write(4, ..., 1000) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=10, sid=0, ssn=0, ppid=0] -+0.1 < sctp: SACK[flgs=0, cum_tsn=10, a_rwnd=1500, gaps=[], dups=[]] - -+1.0 write(4, ..., 1000) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=11, sid=0, ssn=1, ppid=0] -+0.0 < sctp: SACK[flgs=0, cum_tsn=11, a_rwnd=1500, gaps=[], dups=[]] - -+0.1 < sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] -* > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] -+0.0 read(4, ..., 1000) = 1000 - -+0.1 < sctp: DATA[flgs=BE, len=1016, tsn=2, sid=0, ssn=1, ppid=0] -* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] -+0.0 read(4, ..., 1000) = 1000 - -+0 setsockopt(4, IPPROTO_SCTP, SCTP_RESET_ASSOC, [0], 4) = 0 - -+0 close(3) = 0 -+0 close(4) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_assoc_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_assoc_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..d30e40b41124959a0682de48952c4190faaa81c5 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_assoc_event.pkt @@ -0,0 +1,50 @@ +--tolerance_usecs=100000 + +// Create a non-blocking 1-to-1 style socket + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 ++0.0 fcntl(3, F_GETFL) = 0x02 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR | O_NONBLOCK) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=3, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ|SCTP_ENABLE_RESET_ASSOC_REQ|SCTP_ENABLE_CHANGE_ASSOC_REQ}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=3, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ|SCTP_ENABLE_RESET_ASSOC_REQ|SCTP_ENABLE_CHANGE_ASSOC_REQ}, [8]) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ASSOC_RESET_EVENT, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ASSOC_RESET_EVENT, se_on=1}, [8]) = 0 + +// Trigger the active associtation setup ++0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) ++0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=1, ...] ++0.0 < sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=1500, os=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...], SUPPORTED_EXTENSIONS[types=[0x82]]] ++0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...] ++0.0 < sctp: COOKIE_ACK[flgs=0] + +// Check if the setup was sucessful ++0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 +// Generate some traffic so the tsn and ssn increase ++0.0 write(3, ..., 1000) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 write(3, ..., 1000) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=0, ssn=1, ppid=0] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + +// Reset Stream 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RESET_ASSOC, [3], 4) = 0 ++0.0 > sctp: RECONFIG[flgs=0, SSN_TSN_RESET[req_sn=1]] ++0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1, sender_next_tsn=1, receiver_next_tsn=1]] + ++0.2 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={assocreset_type=SCTP_ASSOC_RESET_EVENT, + assocreset_flags=0, + assocreset_length=20, + assocreset_assoc_id=3, + assocreset_local_tsn=1, + assocreset_remote_tsn=2}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 20 + ++1.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_stream_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_stream_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..60213420907bfbd102db7b1f58d54ad0fbf3c38e --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_stream_event.pkt @@ -0,0 +1,52 @@ +--tolerance_usecs=100000 + +// Create a non-blocking 1-to-1 style socket + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 ++0.0 fcntl(3, F_GETFL) = 0x02 (flags O_RDWR) ++0.0 fcntl(3, F_SETFL, O_RDWR | O_NONBLOCK) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=3, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=3, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ}, [8]) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_STREAM_RESET_EVENT, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_STREAM_RESET_EVENT, se_on=1}, [8]) = 0 + +// Trigger the active associtation setup ++0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) ++0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=1, ...] ++0.0 < sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=1500, os=1, is=1, tsn=1, STATE_COOKIE[len=4, val=...], SUPPORTED_EXTENSIONS[types=[0x82]]] ++0.0 > sctp: COOKIE_ECHO[flgs=0, len=4, val=...] ++0.0 < sctp: COOKIE_ACK[flgs=0] + +// Check if the setup was sucessful ++0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 +// Generate some traffic so the tsn and ssn increase ++0.0 write(3, ..., 1000) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 write(3, ..., 1000) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=0, ssn=1, ppid=0] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + +// Reset Stream 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RESET_STREAMS, {srs_assoc_id=3, + srs_flags=SCTP_STREAM_RESET_OUTGOING, + srs_number_streams=0, + srs_stream_list=[]}, 8) = 0 ++0.0 > sctp: RECONFIG[flgs=0, OUTGOING_SSN_RESET[req_sn=1, resp_sn=0, last_tsn=2, sids=[]]] ++0.0 < sctp: RECONFIG[flgs=0, RECONFIG_RESPONSE[resp_sn=1, result=1]] + ++0.2 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={strreset_type=SCTP_STREAM_RESET_EVENT, + strreset_flags=SCTP_STREAM_RESET_OUTGOING, + strreset_length=12, + strreset_assoc_id=3, + strreset_stream_list=[]}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 12 + ++1.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.0 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_streams.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_streams.pkt deleted file mode 100644 index effc8b65aead031c9632d619d39444a71cebf3b6..0000000000000000000000000000000000000000 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_streams.pkt +++ /dev/null @@ -1,38 +0,0 @@ ---tolerance_usecs=100000 - -+0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 - -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ}, 8) = 0 - -+0.0 bind(3, ..., ...) = 0 -+0.0 listen(3, 1) = 0 -+0.0 < sctp: INIT[flgs=0, tag=1, a_rwnd=1500, os=1, is=1, tsn=1, - ECN_CAPABLE[], - SUPPORTED_EXTENSIONS[types=[0x82]], - COOKIE_PRESERVATIVE[incr=12345], - SUPPORTED_ADDRESS_TYPES[types=[IPv4]]] -+0.0 > sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=..., os=..., is=..., tsn=10, ...] -+0.1 < sctp: COOKIE_ECHO[flgs=0, len=..., val=...] -+0.0 > sctp: COOKIE_ACK[flgs=0] - -+0.0 accept(3, ..., ...) = 4 - -+1.0 write(4, ..., 1000) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=10, sid=0, ssn=0, ppid=0] -+0.1 < sctp: SACK[flgs=0, cum_tsn=10, a_rwnd=1500, gaps=[], dups=[]] - -+1.0 write(4, ..., 1000) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=11, sid=0, ssn=1, ppid=0] -+0.0 < sctp: SACK[flgs=0, cum_tsn=11, a_rwnd=1500, gaps=[], dups=[]] - -+0.1 < sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] -* > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] -+0.0 read(4, ..., 1000) = 1000 - -+0.1 < sctp: DATA[flgs=BE, len=1016, tsn=2, sid=0, ssn=1, ppid=0] -* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] -+0.0 read(4, ..., 1000) = 1000 - -+0.0 setsockopt(4, IPPROTO_SCTP, SCTP_RESET_STREAMS, {srs_flags=SCTP_STREAM_RESET_OUTGOING, - srs_number_streams=1, - srs_stream_list=[0]}, 10) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_simple_active.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_simple_active.pkt index 09e364662934daa94335502a41d0902920937d3a..662fbde6f51935315758ae3d034a9cb437c94a52 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_simple_active.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_simple_active.pkt @@ -1,4 +1,4 @@ -+0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 + 0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 +0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 // Check the handshake with an empty(!) cookie