From 42f71b149289a50bd0fccd3c3cbe13c92149e02e Mon Sep 17 00:00:00 2001
From: Hoelscher <jens.hoelscher@fh-muenster.de>
Date: Fri, 11 Mar 2016 17:15:35 +0100
Subject: [PATCH] add testcases for reconfig chunk

---
 .../sctp/sctp_reconfig/reset_outgoing_ssn.pkt | 48 +++++++++++++++++++
 .../reset_outgoing_ssn_passiv.pkt             | 40 ++++++++++++++++
 2 files changed, 88 insertions(+)
 create mode 100644 gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn.pkt
 create mode 100644 gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn_passiv.pkt

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
new file mode 100644
index 00000000..211afdd6
--- /dev/null
+++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn.pkt
@@ -0,0 +1,48 @@
+--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
+
+// 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]
+
++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=3,
+                                                         spp_address={sa_family=AF_INET,
+                                                                      sin_port=htons(8080),
+                                                                      sin_addr=inet_addr("192.0.2.1")},
+                                                         spp_hbinterval=0,
+                                                         spp_pathmaxrxt=8,
+                                                         spp_pathmtu=1468,
+                                                         spp_flags=SPP_HB_DISABLE,
+                                                         spp_ipv6_flowlabel=0,
+                                                         spp_dscp=0}, 152) = 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=1,
+						      srs_stream_list=[0]}, 10) = 0
++0.0 > sctp: RECONFIG[flgs=0, OUTGOING_SSN_RESET[reqsn=1, respsn=0, last_tsn=1, sids=[0]]]
+
++1.0 close(3) = 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
new file mode 100644
index 00000000..0e6e391a
--- /dev/null
+++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/reset_outgoing_ssn_passiv.pkt
@@ -0,0 +1,40 @@
+	--tolerance_usecs=100000
++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_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=[RECONFIG]],
+                  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=[]]
+
+// Send some data.
++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_STREAMS, {srs_flags=SCTP_STREAM_RESET_OUTGOING,
+                                                    srs_number_streams=1,
+                                                    srs_stream_list=[0]}, 10) = 0
++0.0 > sctp: RECONFIG[flgs=0, OUTGOING_SSN_RESET[reqsn=1, respsn=1, last_tsn=11, sids=[0]]]
-- 
GitLab