From 1c695b75c93ad6d6d68c7ca47f53a30292ec32fc Mon Sep 17 00:00:00 2001 From: Hoelscher <jens.hoelscher@fh-muenster.de> Date: Fri, 11 Mar 2016 17:31:44 +0100 Subject: [PATCH] fix for sctp_reconfiguration socketoptions and tests --- gtests/net/packetdrill/run_system_call.c | 2 +- .../sctp/sctp_reconfig/sctp_add_streams.pkt | 44 ++++++--- .../sctp/sctp_reconfig/sctp_reset_assoc.pkt | 86 +++++++----------- .../sctp/sctp_reconfig/sctp_reset_streams.pkt | 91 +++++++------------ 4 files changed, 102 insertions(+), 121 deletions(-) diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index c786b08a..d3f1332a 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -4021,7 +4021,7 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, get_u16(expr, &(reset_streams->srs_stream_list[i]), error); } - optval = &reset_streams; + optval = reset_streams; break; } #endif 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_add_streams.pkt index 1f7a50af..88fdd7cc 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_add_streams.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_add_streams.pkt @@ -1,20 +1,40 @@ --tolerance_usecs=100000 - 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 ++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 -// 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=16, is=16, 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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 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 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ}, 8) = 0 ++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(3, IPPROTO_SCTP, SCTP_ADD_STREAMS, {sas_instrms=20, ++0 setsockopt(4, IPPROTO_SCTP, SCTP_ADD_STREAMS, {sas_instrms=20, sas_outstrms=20}, 8) = 0 +0 close(3) = 0 ++0 close(4) = 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 index e5081031..26b66e02 100644 --- 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 @@ -1,57 +1,39 @@ --tolerance_usecs=100000 - 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 ++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 -// 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=16, is=16, 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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 - -+0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_ASSOC_REQ}, 8) = 0 - -+0.0 sctp_sendx(3, ..., 1000, ..., 1, {sinfo_stream=3, - sinfo_ssn=3, - sinfo_flags=0, - sinfo_ppid=htonl(1234), - sinfo_context=0, - sinfo_timetolive=0, - sinfo_tsn=2, - sinfo_cumtsn=2, - sinfo_assoc_id=3}, 0) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=3, ssn=0, ppid=1234] -+0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] - - -+0.0 sctp_sendx(3, ..., 1000, ..., 1, {sinfo_stream=3, - sinfo_ssn=3, - sinfo_flags=0, - sinfo_ppid=htonl(7), - sinfo_context=0, - sinfo_timetolive=0, - sinfo_tsn=1, - sinfo_cumtsn=6, - sinfo_assoc_id=3}, 0) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=3, ssn=1, ppid=7] -+0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] - -+0.0 sctp_sendx(3, ..., 1000, ..., 1, - {sinfo_stream=3, - sinfo_ssn=3, - sinfo_flags=0, - sinfo_ppid=htonl(7), - sinfo_context=0, - sinfo_timetolive=0, - sinfo_tsn=1, - sinfo_cumtsn=6, - sinfo_assoc_id=3}, 0) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=3, sid=3, ssn=2, ppid=7] -+0.0 < sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=1500, gaps=[], dups=[]] - -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RESET_ASSOC, [0], 4) = 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_streams.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_reconfig/sctp_reset_streams.pkt index 1e6e1969..effc8b65 100644 --- 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 @@ -1,59 +1,38 @@ --tolerance_usecs=100000 - 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 ++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 -// 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=16, is=16, 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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 - -+0 setsockopt(3, IPPROTO_SCTP, SCTP_ENABLE_STREAM_RESET, {assoc_id=0, assoc_value=SCTP_ENABLE_RESET_STREAM_REQ}, 8) = 0 - -+0.0 sctp_sendx(3, ..., 1000, ..., 1, {sinfo_stream=3, - sinfo_ssn=3, - sinfo_flags=0, - sinfo_ppid=htonl(1234), - sinfo_context=0, - sinfo_timetolive=0, - sinfo_tsn=2, - sinfo_cumtsn=2, - sinfo_assoc_id=3}, 0) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=3, ssn=0, ppid=1234] -+0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] - - -+0.0 sctp_sendx(3, ..., 1000, ..., 1, {sinfo_stream=3, - sinfo_ssn=3, - sinfo_flags=0, - sinfo_ppid=htonl(7), - sinfo_context=0, - sinfo_timetolive=0, - sinfo_tsn=1, - sinfo_cumtsn=6, - sinfo_assoc_id=3}, 0) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=3, ssn=1, ppid=7] -+0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] - -+0.0 sctp_sendx(3, ..., 1000, ..., 1, - {sinfo_stream=3, - sinfo_ssn=3, - sinfo_flags=0, - sinfo_ppid=htonl(7), - sinfo_context=0, - sinfo_timetolive=0, - sinfo_tsn=1, - sinfo_cumtsn=6, - sinfo_assoc_id=3}, 0) = 1000 -* > sctp: DATA[flgs=BE, len=1016, tsn=3, sid=3, ssn=2, ppid=7] -+0.0 < sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=1500, gaps=[], dups=[]] - -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RESET_STREAMS, {srs_flags=SCTP_STREAM_RESET_OUTGOING, - srs_number_streams=1, - srs_stream_list=[0]}, 10) = 0 - -+0 close(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 -- GitLab