diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 52de7a51a2351413decdee45f1edda28568f3394..0f90f5503c64714f34f42df6e64089fb3f462b36 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -2884,18 +2884,9 @@ static int check_sctp_sndinfo(struct sctp_sndinfo_expr *expr, if (check_u16_expr(expr->snd_flags, sctp_sndinfo->snd_flags, "sctp_sndinfo.snd_flags", error)) return STATUS_ERR; - if (expr->snd_ppid->type != EXPR_ELLIPSIS) { - u32 snd_ppid; - - if (get_u32(expr->snd_ppid, &snd_ppid, error)) { - return STATUS_ERR; - } - if (sctp_sndinfo->snd_ppid != snd_ppid) { - asprintf(error, "sctp_sndinfo.snd_ppid: expected: %u actual: %u", - snd_ppid, sctp_sndinfo->snd_ppid); - return STATUS_ERR; - } - } + if (check_u32_hton_expr(expr->snd_ppid, sctp_sndinfo->snd_ppid, + "sctp_sndinfo.snd_ppid", error)) + return STATUS_ERR; if (check_u32_expr(expr->snd_context, sctp_sndinfo->snd_context, "sctp_sndinfo.snd_context", error)) return STATUS_ERR; @@ -3790,8 +3781,8 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, if (parse_expression_to_sctp_sndrcvinfo(val_expression, &sndrcvinfo, true, error)) { return STATUS_ERR; } - optval = &sndrcvinfo; - break; + optval = &sndrcvinfo; + break; #endif #ifdef SCTP_DEFAULT_SNDINFO case EXPR_SCTP_SNDINFO: @@ -4254,7 +4245,7 @@ static int syscall_sctp_recvmsg(struct state *state, struct syscall_spec *syscal char **error) { #if defined(__FreeBSD__) || defined(linux) - int script_fd, live_fd, live_msg_flags, result; + int script_fd, live_fd, live_msg_flags = 0, result; void *msg; u32 len; struct sockaddr live_from; @@ -4288,21 +4279,14 @@ static int syscall_sctp_recvmsg(struct state *state, struct syscall_spec *syscal } script_from_expr = get_arg(args, 3, error); - if (check_sockaddr(script_from_expr, &live_from, error)) + if (check_sockaddr(script_from_expr, &live_from, error)) { return STATUS_ERR; - + } script_fromlen_expr = get_arg(args, 4, error); - if (script_fromlen_expr->type != EXPR_ELLIPSIS) { - int script_fromlen; - if (get_s32(script_fromlen_expr, &script_fromlen, error)) - return STATUS_ERR; - if (script_fromlen != live_fromlen) { - asprintf(error, "sctp_recvmsg fromlen: expected: %d actual: %d", - script_fromlen, live_fromlen); - return STATUS_ERR; - } + if (check_socklen_t_expr(script_fromlen_expr, live_fromlen, + "sctp_recvmsg fromlen", error)) { + return STATUS_ERR; } - script_sinfo_expr = get_arg(args, 5, error); if (script_sinfo_expr->type != EXPR_ELLIPSIS) { if (check_sctp_sndrcvinfo(script_sinfo_expr->value.sctp_sndrcvinfo, &live_sinfo, error)) { @@ -4310,16 +4294,11 @@ static int syscall_sctp_recvmsg(struct state *state, struct syscall_spec *syscal } } script_msg_flags_expr = get_arg(args, 6, error); - if (script_msg_flags_expr->type != EXPR_ELLIPSIS) { - int script_msg_flags; - if (get_s32(script_msg_flags_expr, &script_msg_flags, error)) - return STATUS_ERR; - if (script_msg_flags != live_msg_flags) { - asprintf(error, "sctp_recvmsg msg_flags: expected: %d actual: %d", - script_msg_flags, live_msg_flags); - return STATUS_ERR; - } + if (check_s32_expr(script_msg_flags_expr, live_msg_flags, + "sctp_recvmsg msg_flags", error)) { + return STATUS_ERR; } + return STATUS_OK; #else asprintf(error, "sctp_recvmsg is not supported"); diff --git a/gtests/net/packetdrill/symbols_linux.c b/gtests/net/packetdrill/symbols_linux.c index 3f7deb541fb5344433a242a706ae2e14ab70fe34..64e2e0f96ffa8b963aa8bd84ec75e29b78c3d99d 100644 --- a/gtests/net/packetdrill/symbols_linux.c +++ b/gtests/net/packetdrill/symbols_linux.c @@ -104,9 +104,25 @@ struct int_symbol platform_symbols_table[] = { { SCTP_ASSOCINFO, "SCTP_ASSOCINFO" }, { SCTP_INITMSG, "SCTP_INITMSG" }, { SCTP_NODELAY, "SCTP_NODELAY" }, + { SCTP_AUTOCLOSE, "SCTP_AUTOCLOSE" }, + { SCTP_PRIMARY_ADDR, "SCTP_PRIMARY_ADDR" }, + { SCTP_I_WANT_MAPPED_V4_ADDR, "SCTP_I_WANT_MAPPED_V4_ADDR" }, + { SCTP_DISABLE_FRAGMENTS, "SCTP_DISABLE_FRAGMENTS" }, + { SCTP_DEFAULT_SEND_PARAM, "SCTP_DEFAULT_SEND_PARAM" }, { SCTP_MAXSEG, "SCTP_MAXSEG" }, + { SCTP_HMAC_IDENT, "SCTP_HMAC_IDENT" }, + { SCTP_AUTH_ACTIVE_KEY, "SCTP_AUTH_ACTIVE_KEY" }, { SCTP_DELAYED_SACK, "SCTP_DELAYED_SACK" }, + { SCTP_PARTIAL_DELIVERY_POINT, "SCTP_PARTIAL_DELIVERY_POINT" }, { SCTP_MAX_BURST, "SCTP_MAX_BURST" }, + { SCTP_CONTEXT, "SCTP_CONTEXT" }, + { SCTP_PEER_AUTH_CHUNKS, "SCTP_PEER_AUTH_CHUNKS" }, + { SCTP_LOCAL_AUTH_CHUNKS, "SCTP_LOCAL_AUTH_CHUNKS" }, + { SCTP_GET_ASSOC_NUMBER, "SCTP_GET_ASSOC_NUMBER" }, + { SCTP_SET_PEER_PRIMARY_ADDR, "SCTP_SET_PEER_PRIMARY_ADDR" }, + { SCTP_AUTH_CHUNK, "SCTP_AUTH_CHUNK" }, + { SCTP_AUTH_KEY, "SCTP_AUTH_KEY" }, + { SCTP_AUTH_DELETE_KEY, "SCTP_AUTH_DELETE_KEY" }, #if 0 { SCTP_DEFAULT_SNDINFO, "SCTP_DEFAULT_SNDINFO" }, #endif @@ -204,6 +220,36 @@ struct int_symbol platform_symbols_table[] = { { SCTP_SENDALL, "SCTP_SENDALL" }, { SCTP_EOR, "SCTP_EOR" }, #endif +//sctp auth hmac ident + { SCTP_AUTH_HMAC_ID_SHA1, "SCTP_AUTH_HMAC_ID_SHA1" }, + { SCTP_AUTH_HMAC_ID_SHA1, "SCTP_AUTH_HMAC_ID_SHA256" }, +//cmsgs type for sctp + { SCTP_INIT, "SCTP_INIT" }, + { SCTP_SNDRCV, "SCTP_SNDRCV" }, +//flags for sctp_assoc_change + { SCTP_COMM_UP, "SCTP_COMM_UP" }, + { SCTP_COMM_LOST, "SCTP_COMM_LOST" }, + { SCTP_RESTART, "SCTP_RESTART" }, + { SCTP_SHUTDOWN_COMP, "SCTP_SHUTDOWN_COMP" }, + { SCTP_CANT_STR_ASSOC, "SCTP_CANT_STR_ASSOC" }, +#if 0 + { SCTP_ASSOC_SUPPORTS_PR, "SCTP_ASSOC_SUPPORTS_PR" }, + { SCTP_ASSOC_SUPPORTS_AUTH, "SCTP_ASSOC_SUPPORTS_AUTH" }, + { SCTP_ASSOC_SUPPORTS_ASCONF, "SCTP_ASSOC_SUPPORTS_ASCONF" }, + { SCTP_ASSOC_SUPPORTS_MULTIBUF, "SCTP_ASSOC_SUPPORTS_MULTIBUF" }, +#endif +//flags for sctp_send_failed + { SCTP_DATA_UNSENT, "SCTP_DATA_UNSENT" }, + { SCTP_DATA_SENT, "SCTP_DATA_SENT" }, +//flags for sctp_peer_addr_change + { SCTP_ADDR_AVAILABLE, "SCTP_ADDR_AVAILABLE" }, + { SCTP_ADDR_UNREACHABLE, "SCTP_ADDR_UNREACHABLE" }, + { SCTP_ADDR_REMOVED, "SCTP_ADDR_REMOVED" }, + { SCTP_ADDR_ADDED, "SCTP_ADDR_ADDED" }, + { SCTP_ADDR_MADE_PRIM, "SCTP_ADDR_MADE_PRIM" }, +//flags for sctp_partial_delivery_event + { SCTP_PARTIAL_DELIVERY_ABORTED, "SCTP_PARTIAL_DELIVERY_ABORTED" }, + { SCTP_BINDX_ADD_ADDR, "SCTP_BINDX_ADD_ADDR" }, { SCTP_BINDX_REM_ADDR, "SCTP_BINDX_REM_ADDR" }, { SCTP_SACK_IMMEDIATELY, "SCTP_SACK_IMMEDIATELY" }, @@ -301,6 +347,7 @@ struct int_symbol platform_symbols_table[] = { { MSG_MORE, "MSG_MORE" }, { MSG_CMSG_CLOEXEC, "MSG_CMSG_CLOEXEC" }, { MSG_FASTOPEN, "MSG_FASTOPEN" }, + { MSG_NOTIFICATION, "MSG_NOTIFICATION" }, #ifdef SIOCINQ { SIOCINQ, "SIOCINQ" }, diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt index d92e3f7ac26bde06922d8f6e75af91759c7e045a..bf9c337fc31d7818c82676ac806f687fc4dfdd3e 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt @@ -28,7 +28,8 @@ cmsg_type=SCTP_DSTADDRV4, cmsg_data={sa_family=AF_INET, sin_port=htons(8080), - sin_addr=inet_addr("192.0.2.1")}}], msg_flags=0}, 0) = 1000 + sin_addr=inet_addr("192.0.2.1")}}], + msg_flags=0}, 0) = 1000 * > 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=...]] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt index 1b0fbf0fbe6b0f38cb633bf67e652ab638084fc2..5ad5fcdc6287d097f3a29235d03fa33ce0257678 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt @@ -1,3 +1,4 @@ + --ip_version=ipv6 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 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_nodelay.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_nodelay.pkt index 0745ab4b59b6c24ba55ae4853e023ce977292589..3bcaeb635def94163aa9f593606fc857a923afbc 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_nodelay.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_nodelay.pkt @@ -10,8 +10,9 @@ +0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 -+0 getsockopt(3, SOL_SOCKET, SCTP_NODELAY, [0], [4]) = 0 -+0 setsockopt(3, SOL_SOCKET, SCTP_NODELAY, [1], 4) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_NODELAY, [1], 4) = 0 +0 getsockopt(3, SOL_SOCKET, SCTP_NODELAY, [4], [4]) = 0 ++0 setsockopt(3, SOL_SOCKET, SCTP_NODELAY, [0], 4) = 0 ++0 getsockopt(3, SOL_SOCKET, SCTP_NODELAY, [0], [4]) = 0 +0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_reuse_port.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_reuse_port.pkt index 7f0849265f6b3272df860899682335de2c2b0fef..04e9728f883a7092fcda52a85d141400b67ba078 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_reuse_port.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_reuse_port.pkt @@ -1,7 +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 -+0.0 bind(3, ..., ...) = 0 +0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt index 554879b17acbc5504ea78c29dbef9c23f7ec236f..edfa41e0a87b34175803a673930d6c57a9aae12d 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt @@ -1,3 +1,4 @@ +--tolerance_usecs=1000000 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 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg.pkt new file mode 100644 index 0000000000000000000000000000000000000000..bf44947527a16a98c19550410182fff1011606e2 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg.pkt @@ -0,0 +1,168 @@ +--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 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 +//recvmsg(sd, msghdr, flags) ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, + {spp_assoc_id=0, + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 +//base test ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_EOR}, 0) = 1000 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [0], 4) = 0 ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=2, sid=0, ssn=0, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(40)=[{cmsg_len=40, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_RCVINFO, + cmsg_data={rcv_sid=0, + rcv_ssn=0, + rcv_flags=SCTP_UNORDERED, + rcv_ppid=htonl(0), + rcv_tsn=2, + rcv_cumtsn=2, + rcv_context=0, + rcv_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], 4) = 0 ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=3, sid=0, ssn=1, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=4, sid=0, ssn=2, ppid=1234] +* > sctp: SACK[flgs=0, cum_tsn=4, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(28)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_NXTINFO, + cmsg_data={nxt_sid=0, + nxt_flags=SCTP_COMPLETE, + nxt_ppid=htonl(1234), + nxt_length=1000, + nxt_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], 4) = 0 ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=5, sid=0, ssn=0, ppid=9876] +* > sctp: SACK[flgs=0, cum_tsn=5, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(68)=[{cmsg_len=40, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_RCVINFO, + cmsg_data={rcv_sid=0, + rcv_ssn=2, + rcv_flags=0, + rcv_ppid=htonl(1234), + rcv_tsn=4, + rcv_cumtsn=5, + rcv_context=0, + rcv_assoc_id=...}}, + {cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_NXTINFO, + cmsg_data= {nxt_sid=0, + nxt_flags=SCTP_UNORDERED|SCTP_COMPLETE, + nxt_ppid=htonl(9876), + nxt_length=1000, + nxt_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 11) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_USE_EXT_RCVINFO, [0], 4) = 0 ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=0, + sinfo_flags=SCTP_UNORDERED, + sinfo_ppid=htonl(9876), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=5, + sinfo_cumtsn=5, + sinfo_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_USE_EXT_RCVINFO, [1], 4) = 0 ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=6, sid=0, ssn=3, ppid=9877] +* > sctp: SACK[flgs=0, cum_tsn=6, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_EXTRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(9877), + sinfo_context=0, + sinfo_pr_value=0, + sinfo_tsn=6, + sinfo_cumtsn=6, + serinfo_next_flags=0, + serinfo_next_stream=0, + serinfo_next_aid=0, + serinfo_next_length=0, + serinfo_next_ppid=htonl(0), + sinfo_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=7, sid=0, ssn=4, ppid=9878] +* > sctp: SACK[flgs=0, cum_tsn=7, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=8, sid=1, ssn=0, ppid=9879] +* > sctp: SACK[flgs=0, cum_tsn=8, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_EXTRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=4, + sinfo_flags=0, + sinfo_ppid=htonl(9878), + sinfo_context=0, + sinfo_pr_value=0, + sinfo_tsn=7, + sinfo_cumtsn=8, + serinfo_next_flags=SCTP_NEXT_MSG_AVAIL|SCTP_NEXT_MSG_ISCOMPLETE|SCTP_NEXT_MSG_IS_UNORDERED, + serinfo_next_stream=1, + serinfo_next_aid=..., + serinfo_next_length=1000, + serinfo_next_ppid=htonl(9879), + sinfo_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_extrcv.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_extrcv.pkt new file mode 100644 index 0000000000000000000000000000000000000000..3609bc3178d1483ed66ca38296cf41326b284f91 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_extrcv.pkt @@ -0,0 +1,108 @@ +--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 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 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, + {spp_assoc_id=0, + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 11) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_USE_EXT_RCVINFO, [1], 4) = 0 + ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=1, sid=0, ssn=0, ppid=9877] +* > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_EXTRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=0, + sinfo_flags=0, + sinfo_ppid=htonl(9877), + sinfo_context=0, + sinfo_pr_value=0, + sinfo_tsn=1, + sinfo_cumtsn=1, + serinfo_next_flags=0, + serinfo_next_stream=0, + serinfo_next_aid=0, + serinfo_next_length=0, + serinfo_next_ppid=htonl(0), + sinfo_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=2, sid=0, ssn=1, ppid=9878] +* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=3, sid=1, ssn=0, ppid=9879] +* > sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_EXTRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=1, + sinfo_flags=0, + sinfo_ppid=htonl(9878), + sinfo_context=0, + sinfo_pr_value=0, + sinfo_tsn=2, + sinfo_cumtsn=3, + serinfo_next_flags=SCTP_NEXT_MSG_AVAIL|SCTP_NEXT_MSG_ISCOMPLETE|SCTP_NEXT_MSG_IS_UNORDERED, + serinfo_next_stream=1, + serinfo_next_aid=..., + serinfo_next_length=1000, + serinfo_next_ppid=htonl(9879), + sinfo_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=4, sid=2, ssn=0, ppid=9880] +* > sctp: SACK[flgs=0, cum_tsn=4, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_EXTRCV, + cmsg_data={sinfo_stream=1, + sinfo_ssn=0, + sinfo_flags=SCTP_UNORDERED, + sinfo_ppid=htonl(9879), + sinfo_context=0, + sinfo_pr_value=0, + sinfo_tsn=3, + sinfo_cumtsn=4, + serinfo_next_flags=SCTP_NEXT_MSG_AVAIL|SCTP_NEXT_MSG_ISCOMPLETE|SCTP_NEXT_MSG_IS_UNORDERED, + serinfo_next_stream=2, + serinfo_next_aid=..., + serinfo_next_length=1000, + serinfo_next_ppid=htonl(9880)}}], + msg_flags=MSG_EOR}, 0) = 1000 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_nxtinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_nxtinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..aaea9f59ae4bc3ba1f7a105d6cc79ba0f69ed211 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_nxtinfo.pkt @@ -0,0 +1,93 @@ +--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 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 +//recvmsg(sd, msghdr, flags) ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, + {spp_assoc_id=0, + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], 4) = 0 ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=2, sid=0, ssn=1, ppid=1234] +* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(28)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_NXTINFO, + cmsg_data={nxt_sid=0, + nxt_flags=SCTP_COMPLETE, + nxt_ppid=htonl(1234), + nxt_length=1000, + nxt_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], 4) = 0 ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=3, sid=0, ssn=0, ppid=9876] +* > sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(68)=[{cmsg_len=40, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_RCVINFO, + cmsg_data={rcv_sid=0, + rcv_ssn=1, + rcv_flags=0, + rcv_ppid=htonl(1234), + rcv_tsn=2, + rcv_cumtsn=3, + rcv_context=0, + rcv_assoc_id=3}}, + {cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_NXTINFO, + cmsg_data= {nxt_sid=0, + nxt_flags=SCTP_UNORDERED|SCTP_COMPLETE, + nxt_ppid=htonl(9876), + nxt_length=1000, + nxt_assoc_id=3}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], 4) = 0 ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=4, sid=0, ssn=0, ppid=9876] +* > sctp: SACK[flgs=0, cum_tsn=4, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(68)=[{cmsg_len=40, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_RCVINFO, + cmsg_data={rcv_sid=0, + rcv_ssn=0, + rcv_flags=SCTP_UNORDERED, + rcv_ppid=htonl(9876), + rcv_tsn=3, + rcv_cumtsn=4, + rcv_context=0}}, + {cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_NXTINFO, + cmsg_data= {nxt_sid=0, + nxt_flags=SCTP_UNORDERED|SCTP_COMPLETE, + nxt_ppid=htonl(9876), + nxt_length=1000}}], + msg_flags=MSG_EOR}, 0) = 1000 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_rcvinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_rcvinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..9d19a020045722901690e98a75f633cbd3979295 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_rcvinfo.pkt @@ -0,0 +1,149 @@ +--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 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 +//recvmsg(sd, msghdr, flags) ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, + {spp_assoc_id=0, + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 +//base test ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_EOR}, 0) = 1000 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [0], 4) = 0 ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=2, sid=0, ssn=0, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(40)=[{cmsg_len=40, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_RCVINFO, + cmsg_data={rcv_sid=0, + rcv_ssn=0, + rcv_flags=SCTP_UNORDERED, + rcv_ppid=htonl(0), + rcv_tsn=2, + rcv_cumtsn=2, + rcv_context=0, + rcv_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], 4) = 0 ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=3, sid=0, ssn=1, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=4, sid=0, ssn=2, ppid=1234] +* > sctp: SACK[flgs=0, cum_tsn=4, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(28)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_NXTINFO, + cmsg_data={nxt_sid=0, + nxt_flags=SCTP_COMPLETE, + nxt_ppid=htonl(1234), + nxt_length=1000, + nxt_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], 4) = 0 ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=5, sid=0, ssn=0, ppid=9876] +* > sctp: SACK[flgs=0, cum_tsn=5, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(68)=[{cmsg_len=40, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_RCVINFO, + cmsg_data={rcv_sid=0, + rcv_ssn=2, + rcv_flags=0, + rcv_ppid=htonl(1234), + rcv_tsn=4, + rcv_cumtsn=5, + rcv_context=0, + rcv_assoc_id=...}}, + {cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_NXTINFO, + cmsg_data= {nxt_sid=0, + nxt_flags=SCTP_UNORDERED|SCTP_COMPLETE, + nxt_ppid=htonl(9876), + nxt_length=1000, + nxt_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 11) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_USE_EXT_RCVINFO, [0], 4) = 0 ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=0, + sinfo_flags=SCTP_UNORDERED, + sinfo_ppid=htonl(9876), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=5, + sinfo_cumtsn=5, + sinfo_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [0], 4) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 11) = 0 ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=6, sid=0, ssn=0, ppid=9876] +* > sctp: SACK[flgs=0, cum_tsn=6, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(40)=[{cmsg_len=40, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_RCVINFO, + cmsg_data={rcv_sid=0, + rcv_ssn=0, + rcv_flags=SCTP_UNORDERED, + rcv_ppid=htonl(9876), + rcv_tsn=6, + rcv_cumtsn=6, + rcv_context=0}}], + msg_flags=MSG_EOR}, 0) = 1000 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_sndrcv.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_sndrcv.pkt new file mode 100644 index 0000000000000000000000000000000000000000..3e1c7fc76ade256d3abffece9dd5def28b48a93f --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/recvmsg_sctp_sndrcv.pkt @@ -0,0 +1,89 @@ +--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 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 +//recvmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 11) = 0 + + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, + {spp_assoc_id=0, + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + ++0.0 < sctp: DATA[flgs=IBE, len=1016, tsn=1, sid=0, ssn=0, ppid=9877] +* > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=0, + sinfo_flags=0, + sinfo_ppid=htonl(9877), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=1, + sinfo_cumtsn=1, + sinfo_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=2, sid=0, ssn=1, ppid=9878] +* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=1, + sinfo_flags=SCTP_UNORDERED, + sinfo_ppid=htonl(9878), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=2, + sinfo_cumtsn=2, + sinfo_assoc_id=...}}], + msg_flags=MSG_EOR}, 0) = 1000 + ++0.0 < sctp: DATA[flgs=IUBE, len=1016, tsn=3, sid=0, ssn=2, ppid=9879] +* > sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=..., gaps=[], dups=[]] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=0, + sinfo_ssn=2, + sinfo_flags=SCTP_UNORDERED, + sinfo_ppid=htonl(9879), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=3, + sinfo_cumtsn=3}}], + msg_flags=MSG_EOR}, 0) = 1000 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg.pkt new file mode 100644 index 0000000000000000000000000000000000000000..7dec990876a50acf1949cf4c9a10ea43c7510f4b --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg.pkt @@ -0,0 +1,154 @@ +--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 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 +//sendmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=0, + 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 + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(0)=[], + msg_flags=0}, 0) = 1000 +* > 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=[]] + +//base test ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(28)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(3), + snd_context=2, + snd_assoc_id=0}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=2, ssn=0, ppid=3] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + +// test with 2 cmsg ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(44)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(4), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_DSTADDRV4, + cmsg_data={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=3, sid=2, ssn=1, ppid=4] ++0.0 < sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=1500, gaps=[], dups=[]] + +// test with 2 cmsg ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(64)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(5), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_DSTADDRV4, + cmsg_data={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}, + {cmsg_len=18, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_PRINFO, + cmsg_data={pr_policy=SCTP_PR_SCTP_TTL, pr_value=30}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=4, sid=2, ssn=2, ppid=5] ++0.0 < sctp: SACK[flgs=0, cum_tsn=4, a_rwnd=1500, gaps=[], dups=[]] + +// test with 4 cmsg ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(80)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(6), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_DSTADDRV4, + cmsg_data={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}, + {cmsg_len=18, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_PRINFO, + cmsg_data={pr_policy=SCTP_PR_SCTP_TTL, pr_value=30}}, + {cmsg_len=14, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_AUTHINFO, + cmsg_data={auth_keynumber=123}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=5, sid=2, ssn=3, ppid=6] ++0.0 < sctp: SACK[flgs=0, cum_tsn=5, a_rwnd=1500, gaps=[], dups=[]] + +//test for sndrcvinfo ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(168)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(6), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=6, + sinfo_cumtsn=6, + sinfo_assoc_id=3}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=6, sid=3, ssn=0, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=6, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_authinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_authinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..73287130a3a050b27916cf1e786abff955ab266d --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_authinfo.pkt @@ -0,0 +1,58 @@ +--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 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 +//sendmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=0, + 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 + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(44)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(6), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_AUTHINFO, + cmsg_data={auth_keynumber=123}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=2, ssn=0, ppid=6] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(16)=[{cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_AUTHINFO, + cmsg_data={auth_keynumber=123}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=0, ssn=0, ppid=0] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_dstaddrv4.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_dstaddrv4.pkt new file mode 100644 index 0000000000000000000000000000000000000000..c298b1777c8c2c2a304873edaf5fc9431cb56b22 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_dstaddrv4.pkt @@ -0,0 +1,62 @@ +--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 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 +//sendmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=0, + 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 + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(16)=[{cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_DSTADDRV4, + cmsg_data={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}], + msg_flags=0}, 0) = 1000 +* > 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 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(44)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(5), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_DSTADDRV4, + cmsg_data={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=2, ssn=0, ppid=5] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_dstaddrv6.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_dstaddrv6.pkt new file mode 100644 index 0000000000000000000000000000000000000000..60530f1f9ca496e6f85282a9c7123cd06257ea06 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_dstaddrv6.pkt @@ -0,0 +1,62 @@ +--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 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 +//sendmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=0, + spp_address={sa_family=AF_INET6, + sin_port=htons(8080), + sin_addr=inet_addr("2001:DB8::1")}, + spp_hbinterval=0, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(16)=[{cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_DSTADDRV6, + cmsg_data={sa_family=AF_INET6, + sin_port=htons(8080), + sin_addr=inet_addr("2001:DB8::1")}}], + msg_flags=0}, 0) = 1000 +* > 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 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(44)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(5), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_DSTADDRV6, + cmsg_data={sa_family=AF_INET6, + sin_port=htons(8080), + sin_addr=inet_addr("2001:DB8::1")}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=2, ssn=0, ppid=5] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt new file mode 100644 index 0000000000000000000000000000000000000000..ce84ba4a1b4a8943bc453d09b308adb9d807f0c6 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt @@ -0,0 +1,23 @@ +--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 bind(3, ..., ...) = 0 +// Check the handshake with an empty(!) cookie + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(20)=[{cmsg_len=20, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_INIT, + cmsg_data={sinit_num_ostreams=1, + sinit_max_instreams=1, + sinit_max_attempts=1, + sinit_max_init_timeo=0}}], + msg_flags=0}, 0) = 1000 + +* > 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=...]] +* > sctp: COOKIE_ECHO[flgs=0, len=4, val=...]; DATA[flgs=BE, len=1016, tsn=1, sid=2, ssn=0, ppid=1234] ++0.1 < sctp: COOKIE_ACK[flgs=0]; SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_init_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_init_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..d92e3f7ac26bde06922d8f6e75af91759c7e045a --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_init_2.pkt @@ -0,0 +1,36 @@ +--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 bind(3, ..., ...) = 0 +// Check the handshake with an empty(!) cookie + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(64)=[{cmsg_len=20, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_INIT, + cmsg_data={sinit_num_ostreams=1, + sinit_max_instreams=1, + sinit_max_attempts=1, + sinit_max_init_timeo=100}}, + {cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(1234), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=16, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_DSTADDRV4, + cmsg_data={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}], msg_flags=0}, 0) = 1000 + +* > 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=...]] +* > sctp: COOKIE_ECHO[flgs=0, len=4, val=...]; DATA[flgs=BE, len=1016, tsn=1, sid=2, ssn=0, ppid=1234] ++0.1 < sctp: COOKIE_ACK[flgs=0]; SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_prinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_prinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..c4b32245c416cf9deea5da37838636cb601d4dc3 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_prinfo.pkt @@ -0,0 +1,58 @@ +--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 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 +//sendmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=0, + 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 + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(48)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(6), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=20, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_PRINFO, + cmsg_data={pr_policy=SCTP_PR_SCTP_TTL, pr_value=30}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=2, ssn=0, ppid=6] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(20)=[{cmsg_len=20, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_PRINFO, + cmsg_data={pr_policy=SCTP_PR_SCTP_TTL, pr_value=30}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=0, ssn=0, ppid=0] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_sndinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_sndinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..b773b1b2b93f64f5e5013adabf46c4614560a4e1 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_sndinfo.pkt @@ -0,0 +1,87 @@ +--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 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 +//sendmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=0, + 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 + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(28)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=1, + snd_flags=0, + snd_ppid=htonl(3), + snd_context=2, + snd_assoc_id=0}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=1, ssn=0, ppid=3] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(28)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=1, + snd_flags=0, + snd_ppid=htonl(3), + snd_context=2, + snd_assoc_id=...}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=2, sid=1, ssn=1, ppid=3] ++0.0 < sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(28)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=3, + snd_flags=0, + snd_ppid=htonl(32), + snd_context=2, + snd_assoc_id=...}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=3, sid=3, ssn=0, ppid=32] ++0.0 < sctp: SACK[flgs=0, cum_tsn=3, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(28)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=4, + snd_flags=0, + snd_ppid=htonl(33), + snd_context=2}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=4, sid=4, ssn=0, ppid=33] ++0.0 < sctp: SACK[flgs=0, cum_tsn=4, a_rwnd=1500, gaps=[], dups=[]] + + + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_sndrcv.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_sndrcv.pkt new file mode 100644 index 0000000000000000000000000000000000000000..4485ccf4c78d65f6ef91b9977becefec768bef37 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/cmsgs/sendmsg_sctp_sndrcv.pkt @@ -0,0 +1,124 @@ +--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 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 +//sendmsg(sd, msghdr, flags) + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=0, + 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 ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(140)=[{cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=3, + sinfo_ssn=0, + sinfo_flags=SCTP_SENDALL, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=1, + sinfo_cumtsn=1, + sinfo_assoc_id=3}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=3, ssn=0, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + +//test for sndrcvinfo ++0.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(168)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(6), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=3, + sinfo_cumtsn=3, + sinfo_assoc_id=3}}], + msg_flags=0}, 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 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(168)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(6), + snd_context=2, + snd_assoc_id=0}}, + {cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=..., + sinfo_cumtsn=..., + sinfo_assoc_id=3}}], + msg_flags=0}, 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.0 sendmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base=..., iov_len=1000}], + msg_control(168)=[{cmsg_len=28, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDINFO, + cmsg_data={snd_sid=2, + snd_flags=0, + snd_ppid=htonl(6), + snd_context=2}}, + {cmsg_len=140, + cmsg_level=IPPROTO_SCTP, + cmsg_type=SCTP_SNDRCV, + cmsg_data={sinfo_stream=3, + sinfo_ssn=3, + sinfo_flags=0, + sinfo_ppid=htonl(7), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=..., + sinfo_cumtsn=...}}], + msg_flags=0}, 0) = 1000 +* > sctp: DATA[flgs=BE, len=1016, tsn=4, sid=3, ssn=3, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=4, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_adaptation_layer.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_adaptation_layer.pkt new file mode 100644 index 0000000000000000000000000000000000000000..145d3e6c49ac508a4bd85dae9853934b1b2460a1 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_adaptation_layer.pkt @@ -0,0 +1,17 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ADAPTATION_LAYER, {ssb_adaptation_ind=...}, [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_ADAPTATION_LAYER, {ssb_adaptation_ind=2}, 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ADAPTATION_LAYER, {ssb_adaptation_ind=2}, [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_associnfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_associnfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..8e7a17a3c6898a452acd91b57601ce54c7f39782 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_associnfo.pkt @@ -0,0 +1,55 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=..., + sasoc_asocmaxrxt=5, + sasoc_number_peer_destinations=3, + sasoc_peer_rwnd=1800, + sasoc_local_rwnd=2000, + sasoc_cookie_life=40000}, 20) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=..., + sasoc_asocmaxrxt=5, + sasoc_number_peer_destinations=1, + sasoc_peer_rwnd=1500, + sasoc_local_rwnd=81920, + sasoc_cookie_life=40000}, [20]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=..., + sasoc_asocmaxrxt=..., + sasoc_number_peer_destinations=..., + sasoc_peer_rwnd=1500, + sasoc_local_rwnd=..., + sasoc_cookie_life=40000}, [20]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=..., + sasoc_asocmaxrxt=5, + sasoc_number_peer_destinations=1, + sasoc_peer_rwnd=1500, + sasoc_local_rwnd=..., + sasoc_cookie_life=40000}, [20]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=..., + sasoc_asocmaxrxt=..., + sasoc_number_peer_destinations=..., + sasoc_peer_rwnd=..., + sasoc_local_rwnd=..., + sasoc_cookie_life=...}, [20]) = 0 +//now test structure without associd ++0 setsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=5, + sasoc_number_peer_destinations=2, + sasoc_peer_rwnd=1800, + sasoc_local_rwnd=2000, + sasoc_cookie_life=40000}, 20) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=5, + sasoc_number_peer_destinations=1, + sasoc_peer_rwnd=1500, + sasoc_local_rwnd=81920, + sasoc_cookie_life=40000}, [20]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_active_key.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_active_key.pkt new file mode 100644 index 0000000000000000000000000000000000000000..f7a3996dd0273c4b3e692bd1ff98b00772fe504a --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_active_key.pkt @@ -0,0 +1,18 @@ + --tolerance_usecs=100000 +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, {scact_assoc_id=0, scact_keynumber=0}, [8]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, {scact_assoc_id=0, scact_keynumber=0}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_AUTH_ACTIVE_KEY, {scact_assoc_id=0, scact_keynumber=0}, [8]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_chunk.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_chunk.pkt new file mode 100644 index 0000000000000000000000000000000000000000..05e7fdd02c10db81693749936ce7d9327a9558a7 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_chunk.pkt @@ -0,0 +1,18 @@ + --tolerance_usecs=100000 +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_CHUNK, {sauth_chunk=0}, 1) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_CHUNK, {sauth_chunk=1}, 1) = -1 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_CHUNK, {sauth_chunk=4}, 1) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_deactivate_key.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_deactivate_key.pkt new file mode 100644 index 0000000000000000000000000000000000000000..06103c6ba81797f4aeee310542a2dd9b50bc4392 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_deactivate_key.pkt @@ -0,0 +1,16 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_DEACTIVATE_KEY, {scact_assoc_id=..., scact_keynumber=0}, 6) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_DEACTIVATE_KEY, {scact_keynumber=0}, 6) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_delete_key.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_delete_key.pkt new file mode 100644 index 0000000000000000000000000000000000000000..86d0fa1f4d1a62ae993270d175c603c88ab91280 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_delete_key.pkt @@ -0,0 +1,16 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, {scact_assoc_id=..., scact_keynumber=0}, 8) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_DELETE_KEY, {scact_keynumber=0}, 8) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_key.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_key.pkt new file mode 100644 index 0000000000000000000000000000000000000000..58b63eccc76dec085f0d9740fcb2d925a622b4dd --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auth_key.pkt @@ -0,0 +1,16 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_KEY, {sca_assoc_id=..., sca_keynumber=123, sca_keylength=2, sca_key=[0x00, 0x00]}, 10) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTH_KEY, {sca_keynumber=123, sca_keylength=2, sca_key=[0x00, 0x00]}, 10) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auto_asconf.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auto_asconf.pkt new file mode 100644 index 0000000000000000000000000000000000000000..d6b3c8481dcd4638c9594c628c928d509e5ffe7a --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_auto_asconf.pkt @@ -0,0 +1,17 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_AUTO_ASCONF, [1], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTO_ASCONF, [0], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_AUTO_ASCONF, [0], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_autoclose.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_autoclose.pkt new file mode 100644 index 0000000000000000000000000000000000000000..b7e923431729907fc26ee89e5fd21f3640385148 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_autoclose.pkt @@ -0,0 +1,17 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_AUTOCLOSE, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_AUTOCLOSE, [1], 4) = -1 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_AUTOCLOSE, [0], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_context.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_context.pkt new file mode 100644 index 0000000000000000000000000000000000000000..f5f0cd67804565fa0ef5f03911b8e3177c367f89 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_context.pkt @@ -0,0 +1,19 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_CONTEXT, {assoc_id=0, assoc_value=1100}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_CONTEXT, {assoc_id=..., assoc_value=0}, [8]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_CONTEXT, {assoc_value=1200}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_CONTEXT, {assoc_value=1200}, [8]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_prinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_prinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..86b3b89b0add8207034a0c488c786fc20465094e --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_prinfo.pkt @@ -0,0 +1,28 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_PRINFO, {pr_policy=SCTP_PR_SCTP_TTL, + pr_value=5, + pr_assoc_id=3}, 12) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_PRINFO, {pr_policy=SCTP_PR_SCTP_TTL, + pr_value=5, + pr_assoc_id=3}, [12]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_PRINFO, {pr_policy=SCTP_PR_SCTP_TTL, + pr_value=5, + pr_assoc_id=...}, [12]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_PRINFO, {pr_policy=SCTP_PR_SCTP_TTL, + pr_value=5}, 12) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_PRINFO, {pr_policy=SCTP_PR_SCTP_TTL, + pr_value=5}, [12]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_send_param.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_send_param.pkt new file mode 100644 index 0000000000000000000000000000000000000000..a5d50dc29107cd7bd2b2ed12f618ad83a650fb52 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_send_param.pkt @@ -0,0 +1,62 @@ + --tolerance_usecs=100000 +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SEND_PARAM, {sinfo_stream=0, + sinfo_ssn=2071, + sinfo_flags=0, + sinfo_ppid=htonl(0), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=0, + sinfo_cumtsn=0, + sinfo_assoc_id=0}, [32]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SEND_PARAM, {sinfo_stream=0, + sinfo_ssn=0, + sinfo_flags=0, + sinfo_ppid=htonl(123), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=2, + sinfo_cumtsn=1, + sinfo_assoc_id=3}, 32) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SEND_PARAM, {sinfo_stream=0, + sinfo_ssn=2071, + sinfo_flags=0, + sinfo_ppid=htonl(123), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=0, + sinfo_cumtsn=0, + sinfo_assoc_id=0}, [32]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SEND_PARAM, {sinfo_stream=0, + sinfo_ssn=2071, + sinfo_flags=0, + sinfo_ppid=htonl(123), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=0, + sinfo_cumtsn=0}, 32) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SEND_PARAM, {sinfo_stream=0, + sinfo_ssn=2071, + sinfo_flags=0, + sinfo_ppid=htonl(123), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=0, + sinfo_cumtsn=0}, [32]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_sndinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_sndinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..aa7732ca66ab0b8385575c6df0150a718d94c6d1 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_default_sndinfo.pkt @@ -0,0 +1,54 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, + snd_flags=0, + snd_ppid=htonl(1), + snd_context=1, + snd_assoc_id=0}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, + snd_flags=0, + snd_ppid=htonl(1), + snd_context=1, + snd_assoc_id=0}, [16]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, + snd_flags=SCTP_UNORDERED, + snd_ppid=htonl(2), + snd_context=2, + snd_assoc_id=0}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, + snd_flags=SCTP_UNORDERED, + snd_ppid=htonl(2), + snd_context=2, + snd_assoc_id=...}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, + snd_flags=SCTP_UNORDERED, + snd_ppid=htonl(2), + snd_context=..., + snd_assoc_id=...}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, + snd_flags=SCTP_UNORDERED, + snd_ppid=..., + snd_context=2, + snd_assoc_id=...}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, + snd_flags=..., + snd_ppid=htonl(2), + snd_context=2, + snd_assoc_id=...}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=..., + snd_flags=SCTP_UNORDERED, + snd_ppid=htonl(2), + snd_context=2, + snd_assoc_id=...}, [16]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_delayed_sack.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_delayed_sack.pkt new file mode 100644 index 0000000000000000000000000000000000000000..db97982ef38db9bf444efb90388f6e401d46518c --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_delayed_sack.pkt @@ -0,0 +1,24 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=400, sack_freq=2}, 12) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=400, sack_freq=2}, [12]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=..., sack_delay=400, sack_freq=2}, 12) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=..., sack_delay=400, sack_freq=2}, [12]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=..., sack_delay=..., sack_freq=2}, [12]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=..., sack_delay=400, sack_freq=...}, [12]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=400, sack_freq=2}, 12) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=400, sack_freq=2}, [12]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_disable_fragments.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_disable_fragments.pkt new file mode 100644 index 0000000000000000000000000000000000000000..5498560b078b643fe0d8f1d2320d8c7aef4d266e --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_disable_fragments.pkt @@ -0,0 +1,17 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, [1], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DISABLE_FRAGMENTS, [1], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..d817e4150f47ab2084c1e652eb89515c85f55eba --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_event.pkt @@ -0,0 +1,20 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, [8]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, [8]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_events.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_events.pkt new file mode 100644 index 0000000000000000000000000000000000000000..8cbd363c0fa211fa8f627e2310b32c058dcf7c78 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_events.pkt @@ -0,0 +1,48 @@ + --tolerance_usecs=1000000 +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=1, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=1, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_explicit_eor.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_explicit_eor.pkt new file mode 100644 index 0000000000000000000000000000000000000000..e2cfe119980df381910c5701e16c76ac92470d39 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_explicit_eor.pkt @@ -0,0 +1,17 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EXPLICIT_EOR, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EXPLICIT_EOR, [1], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EXPLICIT_EOR, [1], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_fragment_interleave.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_fragment_interleave.pkt new file mode 100644 index 0000000000000000000000000000000000000000..b0e1ba1aa8cc6f9b1ba94dc509a9d6932b5f935a --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_fragment_interleave.pkt @@ -0,0 +1,18 @@ + --tolerance_usecs=100000 +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, [2], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_FRAGMENT_INTERLEAVE, [2], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_assoc_id_list.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_assoc_id_list.pkt new file mode 100644 index 0000000000000000000000000000000000000000..e09f741ffa43b803f4dfb217bd2ce7f9f5d040f6 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_assoc_id_list.pkt @@ -0,0 +1,15 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_ASSOC_ID_LIST, {gaids_number_of_ids=1, gaids_assoc_id=[3]}, [8]) = -1 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_assoc_number.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_assoc_number.pkt new file mode 100644 index 0000000000000000000000000000000000000000..333a24f6474894861b8d92d3e350f10a6cea15af --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_assoc_number.pkt @@ -0,0 +1,15 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_ASSOC_NUMBER, [0], [4]) = -1 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_peer_addr_info.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_peer_addr_info.pkt new file mode 100644 index 0000000000000000000000000000000000000000..4a2226b1e85e67dbfafa0fc12c0bcfc347349b74 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_get_peer_addr_info.pkt @@ -0,0 +1,101 @@ +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 + + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=..., + spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=4380, + spinfo_srtt=111, + spinfo_rto=3000, + spinfo_mtu=1500}, 152) = -1 (ENOPROTOOPT) + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=..., + spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=4380, + spinfo_srtt=..., + spinfo_rto=3000, + spinfo_mtu=1500}, [152]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=..., + spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=4380, + spinfo_srtt=..., + spinfo_rto=3000, + spinfo_mtu=1500}, [152]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=..., + spinfo_address=..., + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=..., + spinfo_srtt=..., + spinfo_rto=3000, + spinfo_mtu=1500}, [152]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=..., + spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=..., + spinfo_cwnd=..., + spinfo_srtt=..., + spinfo_rto=3000, + spinfo_mtu=1500}, [152]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=..., + spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=..., + spinfo_srtt=..., + spinfo_rto=..., + spinfo_mtu=1500}, [152]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=..., + spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=4380, + spinfo_srtt=..., + spinfo_rto=3000, + spinfo_mtu=...}, [152]) = 0 + + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=4380, + spinfo_srtt=111, + spinfo_rto=3000, + spinfo_mtu=1500}, 152) = -1 (ENOPROTOOPT) + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=4380, + spinfo_srtt=..., + spinfo_rto=3000, + spinfo_mtu=1500}, [152]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_hmac_ident.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_hmac_ident.pkt new file mode 100644 index 0000000000000000000000000000000000000000..2388a9c2ccc873ae78914deac891e092a7fbd1bf --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_hmac_ident.pkt @@ -0,0 +1,16 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_HMAC_IDENT, {shmac_number_of_idents=2, shmac_idents=[SCTP_AUTH_HMAC_ID_SHA1, SCTP_AUTH_HMAC_ID_SHA256]}, [8]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_HMAC_IDENT, {shmac_number_of_idents=2, shmac_idents=[SCTP_AUTH_HMAC_ID_SHA1, SCTP_AUTH_HMAC_ID_SHA256]}, 8) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt new file mode 100644 index 0000000000000000000000000000000000000000..da91cff68455db2cd35aab326705c2b477684d12 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_i_want_mapped_v4_addr.pkt @@ -0,0 +1,18 @@ + --ip_version=ipv6 +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, [1], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, [0], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_I_WANT_MAPPED_V4_ADDR, [0], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_initmsg.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_initmsg.pkt new file mode 100644 index 0000000000000000000000000000000000000000..adaa43af3223218add8d476ef981e83407edcdec --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_initmsg.pkt @@ -0,0 +1,42 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, + sinit_max_instreams=2, + sinit_max_attempts=2, + sinit_max_init_timeo=30}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, + sinit_max_instreams=2, + sinit_max_attempts=2, + sinit_max_init_timeo=30}, [8]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=..., + sinit_max_instreams=2, + sinit_max_attempts=2, + sinit_max_init_timeo=30}, [8]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, + sinit_max_instreams=..., + sinit_max_attempts=2, + sinit_max_init_timeo=30}, [8]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, + sinit_max_instreams=2, + sinit_max_attempts=..., + sinit_max_init_timeo=30}, [8]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=2, + sinit_max_instreams=2, + sinit_max_attempts=2, + sinit_max_init_timeo=...}, [8]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=..., + sinit_max_instreams=..., + sinit_max_attempts=..., + sinit_max_init_timeo=...}, [8]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_local_auth_chunks.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_local_auth_chunks.pkt new file mode 100644 index 0000000000000000000000000000000000000000..fab0f1c5d9b81d73fb138a48124d8b031d95d233 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_local_auth_chunks.pkt @@ -0,0 +1,20 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, {gauth_assoc_id=3, + gauth_number_of_chunks=2, + gauth_chunks=[0x80,0xC1]}, [10]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_LOCAL_AUTH_CHUNKS, {gauth_number_of_chunks=2, + gauth_chunks=[0x80,0xC1]}, [10]) = 0 + + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_max_burst.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_max_burst.pkt new file mode 100644 index 0000000000000000000000000000000000000000..9f3dd90242304adfd252d70b8895af41bb689850 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_max_burst.pkt @@ -0,0 +1,20 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_id=0, assoc_value=4}, [8]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_id=0, assoc_value=5}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_id=0, assoc_value=5}, [8]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=4}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=4}, [8]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_maxseg.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_maxseg.pkt new file mode 100644 index 0000000000000000000000000000000000000000..5a941be44d88d394bc0ea71646ae091fc009e81d --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_maxseg.pkt @@ -0,0 +1,20 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=1452}, [8]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=1200}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=1200}, [8]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_value=1452}, 8) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_value=1452}, [8]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_nodelay.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_nodelay.pkt new file mode 100644 index 0000000000000000000000000000000000000000..9def93121d4fba7620b1c7db690e3f5b4edc1025 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_nodelay.pkt @@ -0,0 +1,18 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_NODELAY, [1], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_NODELAY, [1], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_NODELAY, [0], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_NODELAY, [0], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_partial_delivery_point.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_partial_delivery_point.pkt new file mode 100644 index 0000000000000000000000000000000000000000..b98d0b231ac856257905d7f01e4b2ea17d4d533e --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_partial_delivery_point.pkt @@ -0,0 +1,17 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PARTIAL_DELIVERY_POINT, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_PARTIAL_DELIVERY_POINT, [1000], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PARTIAL_DELIVERY_POINT, [1000], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_peer_addr_params.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_peer_addr_params.pkt new file mode 100644 index 0000000000000000000000000000000000000000..68fc57ff33ee3702a5b78b31013734a0a181fdb9 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_peer_addr_params.pkt @@ -0,0 +1,130 @@ +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 + ++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=300, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_ENABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=0, + spp_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=..., + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=300, + spp_pathmaxrxt=..., + spp_pathmtu=1500, + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=..., + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=..., + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_ENABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spp_hbinterval=300, + spp_pathmaxrxt=8, + spp_pathmtu=1500, + spp_flags=SPP_HB_DISABLE|SPP_PMTUD_ENABLE|SPP_SACKDELAY_ENABLE, + spp_ipv6_flowlabel=..., + spp_dscp=...}, [152]) = 0 + + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_peer_auth_chunks.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_peer_auth_chunks.pkt new file mode 100644 index 0000000000000000000000000000000000000000..e97bfe5954fd2e17b74e0a5676bf2f9ef11108ab --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_peer_auth_chunks.pkt @@ -0,0 +1,17 @@ +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 + +//only dummy values, unimplemented in packetdrill ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, {gauth_assoc_id=..., gauth_number_of_chunks=0, gauth_chunks=[]}, [8]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_AUTH_CHUNKS, {gauth_number_of_chunks=0, gauth_chunks=[]}, [8]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_primary_addr.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_primary_addr.pkt new file mode 100644 index 0000000000000000000000000000000000000000..db160a48f491c9541e8f87a8b8af24035b05e340 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_primary_addr.pkt @@ -0,0 +1,31 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, {ssp_assoc_id=..., + ssp_addr={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}, 136) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, {ssp_assoc_id=..., + ssp_addr={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}, [136]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, {ssp_assoc_id=..., + ssp_addr=...}, [136]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, {ssp_addr={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}, 136) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, {ssp_addr={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}, [136]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_recvnxtinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_recvnxtinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..59eea97afadd197ac065fcdd4b5ef08b6cd048c7 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_recvnxtinfo.pkt @@ -0,0 +1,17 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RECVNXTINFO, [1], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_recvrcvinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_recvrcvinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..037533c8e9725833a469487ca2629bb64fda98fe --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_recvrcvinfo.pkt @@ -0,0 +1,17 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RECVRCVINFO, [1], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_reuse_port.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_reuse_port.pkt new file mode 100644 index 0000000000000000000000000000000000000000..7f0849265f6b3272df860899682335de2c2b0fef --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_reuse_port.pkt @@ -0,0 +1,12 @@ +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 bind(3, ..., ...) = 0 + ++0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_REUSE_PORT, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_REUSE_PORT, [1], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_REUSE_PORT, [1], [4]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..ef5cdcc0a6c7c637416eee9d2092832b7278d3a9 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_rtoinfo.pkt @@ -0,0 +1,42 @@ +--tolerance_usecs=1000000 +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., + srto_initial=100, + srto_max=200, + srto_min=50}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., + srto_initial=100, + srto_max=200, + srto_min=52}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., + srto_initial=..., + srto_max=200, + srto_min=52}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, + srto_initial=100, + srto_max=..., + srto_min=52}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, + srto_initial=100, + srto_max=200, + srto_min=...}, [16]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=150, + srto_max=200, + srto_min=50}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=152, + srto_max=200, + srto_min=52}, [16]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_set_peer_primary_addr.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_set_peer_primary_addr.pkt new file mode 100644 index 0000000000000000000000000000000000000000..4a3e7b8886287e753d001cf9bbd251806417c0c4 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_set_peer_primary_addr.pkt @@ -0,0 +1,21 @@ +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_SET_PEER_PRIMARY_ADDR, {sspp_addr={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}, 136) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_SET_PEER_PRIMARY_ADDR, {sspp_assoc_id=..., + sspp_addr={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}}, 136) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_status.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_status.pkt new file mode 100644 index 0000000000000000000000000000000000000000..5a37b4914a4791d23f9ea8bc6c0f8a3e2f7ef717 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_status.pkt @@ -0,0 +1,167 @@ + --tolerance_usecs=1000000 +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 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=..., + sstat_rwnd=..., + sstat_unackdata=..., sstat_penddata=..., + sstat_instrms=..., + sstat_outstrms=..., + sstat_fragmentation_point=..., + sstat_primary=...}, 176) = -1 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary={spinfo_assoc_id=..., + spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=4380, + spinfo_srtt=..., + spinfo_rto=3000, + spinfo_mtu=1500}}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=..., + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=..., + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=..., + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=..., + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=..., + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=..., + sstat_fragmentation_point=1452, + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=..., + sstat_primary=...}, [176]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=..., + sstat_state=4, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=..., + sstat_primary=...}, [176]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=..., + sstat_rwnd=..., + sstat_unackdata=..., sstat_penddata=..., + sstat_instrms=..., + sstat_outstrms=..., + sstat_fragmentation_point=..., + sstat_primary=...}, 176) = -1 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=SCTP_ESTABLISHED, + sstat_rwnd=1500, + sstat_unackdata=0, + sstat_penddata=0, + sstat_instrms=1, + sstat_outstrms=1, + sstat_fragmentation_point=1452, + sstat_primary={spinfo_assoc_id=..., + spinfo_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spinfo_state=SCTP_ACTIVE, + spinfo_cwnd=4380, + spinfo_srtt=..., + spinfo_rto=3000, + spinfo_mtu=1500}}, [176]) = 0 + + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_use_ext_rcvinfo.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_use_ext_rcvinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..64defd820a9033a8d91bda101de1bdb420ae4615 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/sctp_use_ext_rcvinfo.pkt @@ -0,0 +1,18 @@ +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 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_USE_EXT_RCVINFO, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_USE_EXT_RCVINFO, [1], 4) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_USE_EXT_RCVINFO, [1], [4]) = 0 + + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/so_linger.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/so_linger.pkt new file mode 100644 index 0000000000000000000000000000000000000000..0d1fa45efcee66f946ef835da8850ed4423d1ccb --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/getsockopt/so_linger.pkt @@ -0,0 +1,19 @@ +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 + ++0 setsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=30}, 8) = 0 ++0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=30}, [8]) = 0 ++0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=...}, [8]) = 0 ++0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=..., linger=30}, [8]) = 0 ++0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=..., linger=...}, [8]) = 0 + ++0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_adaptation_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_adaptation_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..7f9a12182176ea9528d2c24f733e823d3d74e8b7 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_adaptation_event.pkt @@ -0,0 +1,54 @@ ++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.0 bind(3, ..., ...) = 0 ++0.0 listen(3, 1) = 0 + +// Enable Event notification ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=1, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=1, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + + + +// Send Adaptation Indication with Init chunk ++0.0 < sctp: INIT[flgs=0, tag=1, a_rwnd=1500, os=1, is=1, tsn=0, + ECN_CAPABLE[], + ADAPTATION_INDICATION[adaptation_code_point=3], + COOKIE_PRESERVATIVE[incr=12345], + SUPPORTED_ADDRESS_TYPES[types=[IPv4]]] + +* > sctp: INIT_ACK[flgs=0, tag=2, a_rwnd=..., os=..., is=..., tsn=10, ...] ++0.0 < sctp: COOKIE_ECHO[flgs=0, len=..., val=...] +* > sctp: COOKIE_ACK[flgs=0] + ++0.0 accept(3, ..., ...) = 4 + +//TODO: Packetdrill does not support Path reconfiguration, after that update this test ++0.0 recvmsg(4, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sai_type=SCTP_ADAPTATION_INDICATION, + sai_flags=0, + sai_length=16, + sai_adaptation_ind=3, + sai_assoc_id=...}, iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 16 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_assoc_change_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_assoc_change_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..03408580c91fbc69f21331a9b3c2b834502e5864 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_assoc_change_event.pkt @@ -0,0 +1,66 @@ ++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 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=1, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=1, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + + + ++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.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sac_type=SCTP_ASSOC_CHANGE, + sac_flags=0, + sac_length=20, + sac_state=SCTP_COMM_UP, + sac_error=0, + sac_outbound_streams=1, + sac_inbound_streams=1, + sac_assoc_id=..., + sac_info=[]}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 20 + + ++0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 ++0.0 < sctp: SHUTDOWN[flgs=0, cum_tsn=0] +* > sctp: SHUTDOWN_ACK[flgs=0] ++0.0 < sctp: SHUTDOWN_COMPLETE[flgs=0] ++0.5 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sac_type=SCTP_ASSOC_CHANGE, + sac_flags=0, + sac_length=20, + sac_state=SCTP_SHUTDOWN_COMP, + sac_error=0, + sac_outbound_streams=1, + sac_inbound_streams=1, + sac_assoc_id=..., + sac_info=[]}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 20 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_authentication_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_authentication_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..ca23f26da53614e2faaac26fab3a40611d5550c3 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_authentication_event.pkt @@ -0,0 +1,50 @@ ++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 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=1, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=1, + sctp_sender_dry_event=0}, [10]) = 0 + + ++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.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={auth_type=SCTP_AUTHENTICATION_EVENT, + auth_flags=0, + auth_length=20, + auth_keynumber=0, + auth_indication=SCTP_AUTH_NO_AUTH, + auth_assoc_id=3}, iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 20 + ++0.0 < sctp: SHUTDOWN[flgs=0, cum_tsn=0] +* > sctp: SHUTDOWN_ACK[flgs=0] ++0.0 < sctp: SHUTDOWN_COMPLETE[flgs=0] + diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_authentication_event_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_authentication_event_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..b43bf482f1002b4a2d4f18292021b411be65e33b --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_authentication_event_2.pkt @@ -0,0 +1,23 @@ ++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 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_AUTHENTICATION_EVENT, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_AUTHENTICATION_EVENT, se_on=1}, [8]) = 0 ++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.0 sctp_recvv(3, [{iov_base={auth_type=SCTP_AUTHENTICATION_EVENT, + auth_flags=0, + auth_length=20, + auth_keynumber=0, + auth_indication=SCTP_AUTH_NO_AUTH}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 20 + ++0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 ++0.0 < sctp: SHUTDOWN[flgs=0, cum_tsn=0] +* > sctp: SHUTDOWN_ACK[flgs=0] ++0.0 < sctp: SHUTDOWN_COMPLETE[flgs=0] + diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_notifications_stopped_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_notifications_stopped_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..9cdbacb710da7e97d976396617f4877629515203 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_notifications_stopped_event.pkt @@ -0,0 +1,22 @@ ++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 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, [8]) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_NOTIFICATIONS_STOPPED_EVENT, se_on=1}, 8) = 0 + ++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] +// No implementation provides this messages, so it can't be tested +// as discribed in rfc, create an notification storm so that the implementation disable notifications ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sn_type=SCTP_NOTIFICATIONS_STOPPED_EVENT, + sn_flags=0, + sn_length=8}, iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 21 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_partial_delivery_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_partial_delivery_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..356c31cbb8c3c087ef092877c51632d31da997e0 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_partial_delivery_event.pkt @@ -0,0 +1,48 @@ ++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=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] +//Enable Partial delivery event ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=1, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=1, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + ++0.0 < sctp: DATA[flgs=B, len=300, tsn=1, sid=0, ssn=0, ppid=0] ++0.0 > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: DATA[flgs=0, len=300, tsn=2, sid=0, ssn=0, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: ABORT[flgs=0] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(2)=[{iov_base=..., iov_len=1000}, + {iov_base={pdapi_type=SCTP_PARTIAL_DELIVERY_EVENT, + pdapi_flags=0, + pdapi_length=24, + pdapi_indication=SCTP_PARTIAL_DELIVERY_ABORTED, + pdapi_stream=0, + pdapi_seq=0, + pdapi_assoc_id=...}, iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 21 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_partial_delivery_event_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_partial_delivery_event_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..53dfa5436c70311f318a7f98a058a77fc15dd2c2 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_partial_delivery_event_2.pkt @@ -0,0 +1,25 @@ ++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=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] +//Enable Partial delivery event ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_PARTIAL_DELIVERY_EVENT, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_PARTIAL_DELIVERY_EVENT, se_on=1}, [8]) = 0 + ++0.0 < sctp: DATA[flgs=B, len=300, tsn=1, sid=0, ssn=0, ppid=0] ++0.0 > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: DATA[flgs=0, len=300, tsn=2, sid=0, ssn=0, ppid=0] +* > sctp: SACK[flgs=0, cum_tsn=2, a_rwnd=..., gaps=[], dups=[]] ++0.0 < sctp: ABORT[flgs=0] ++1.5 sctp_recvv(3, [{iov_base=..., iov_len=1000}, + {iov_base={pdapi_type=SCTP_PARTIAL_DELIVERY_EVENT, + pdapi_flags=0, + pdapi_length=24, + pdapi_indication=SCTP_PARTIAL_DELIVERY_ABORTED, + pdapi_stream=0, + pdapi_seq=0}, iov_len=1000}], 2, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 21 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_peer_addr_change.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_peer_addr_change.pkt new file mode 100644 index 0000000000000000000000000000000000000000..ccd2210044c09a3ab47717725234b3f7fbeb31ee --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_peer_addr_change.pkt @@ -0,0 +1,75 @@ ++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) + +//test for enable socketoptions with SCTP_EVENTS ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=1, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=1, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + + ++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.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=1, + spp_pathmaxrxt=3, + spp_pathmtu=1468, + spp_flags=SPP_HB_ENABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] + ++0.5 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={spc_type=SCTP_PEER_ADDR_CHANGE, + spc_flags=0, + spc_length=148, + spc_aaddr=..., + spc_state=SCTP_ADDR_UNREACHABLE, + spc_error=0, + spc_assoc_id=...}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 148 + + ++0.0 < sctp: HEARTBEAT_ACK[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] + ++0.5 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={spc_type=SCTP_PEER_ADDR_CHANGE, + spc_flags=0, + spc_length=148, + spc_aaddr=..., + spc_state=SCTP_ADDR_AVAILABLE, + spc_error=2, + spc_assoc_id=...}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 148 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_peer_addr_change_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_peer_addr_change_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..7ffba6ee682125650bfbb42443be29d4dddc5364 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_peer_addr_change_2.pkt @@ -0,0 +1,73 @@ ++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) + +//test for enable socketoptions with SCTP_EVENTS ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=1, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=1, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + + ++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.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=1, + spp_pathmaxrxt=3, + spp_pathmtu=1468, + spp_flags=SPP_HB_ENABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] +* > sctp: HEARTBEAT[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] + ++0.5 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={spc_type=SCTP_PEER_ADDR_CHANGE, + spc_flags=0, + spc_length=148, + spc_aaddr=..., + spc_state=SCTP_ADDR_UNREACHABLE, + spc_error=0}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 148 + + ++0.0 < sctp: HEARTBEAT_ACK[flgs=0, HEARTBEAT_INFORMATION[len=..., val=...]] + ++0.5 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={spc_type=SCTP_PEER_ADDR_CHANGE, + spc_flags=0, + spc_length=148, + spc_aaddr=..., + spc_state=SCTP_ADDR_AVAILABLE, + spc_error=2}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 148 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_remote_error.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_remote_error.pkt new file mode 100644 index 0000000000000000000000000000000000000000..308f661e6a01a7d813346a48ea0f82456eef3208 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_remote_error.pkt @@ -0,0 +1,51 @@ + --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 +// Check the handshake with an empty(!) cookie ++0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) + +//test for enable socketoptions with SCTP_EVENTS ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=1, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + +//test for enable socketoptions with SCTP_EVENTS ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=1, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + + ++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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 < sctp: ERROR[flgs=0, INVALID_STREAM_IDENTIFIER[sid=1]] + ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sre_type=SCTP_REMOTE_ERROR, + sre_flags=0, + sre_length=20, + sre_error=256, + sre_assoc_id=..., + sre_data=[0x00, 0x01, 0x00, 0x00]}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 20 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_remote_error_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_remote_error_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..23f81705327789632689a7dab0ddf5a3443d9c9b --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_remote_error_2.pkt @@ -0,0 +1,50 @@ + --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 +// Check the handshake with an empty(!) cookie ++0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) + +//test for enable socketoptions with SCTP_EVENTS ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=1, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + +//test for enable socketoptions with SCTP_EVENTS ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=1, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + + ++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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 < sctp: ERROR[flgs=0, INVALID_STREAM_IDENTIFIER[sid=1]] + ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sre_type=SCTP_REMOTE_ERROR, + sre_flags=0, + sre_length=20, + sre_error=256, + sre_data=[0x00, 0x01, 0x00, 0x00]}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 20 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed.pkt new file mode 100644 index 0000000000000000000000000000000000000000..627892ad90a159dd33128ce6e181b20d8b444548 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed.pkt @@ -0,0 +1,78 @@ ++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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=100, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + +//test for enable socketoptions with SCTP_EVENTS ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=1, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=1, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, + srto_initial=100, + srto_max=150, + srto_min=50}, 16) = 0 + ++0.0 write(3, ..., 1000) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] + ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={ssf_type=SCTP_SEND_FAILED, + ssf_flags=SCTP_DATA_SENT, + ssf_length=1144, + ssf_error=0, + ssf_info={sinfo_stream=0, + sinfo_ssn=0, + sinfo_flags=3, + sinfo_ppid=htonl(0), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=0, + sinfo_cumtsn=0, + sinfo_assoc_id=...}, + ssf_assoc_id=..., + ssf_data=...}, iov_len=1500}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 1144 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..2244a1678b11af7a859dd9bd99b01ad3db4495b5 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_2.pkt @@ -0,0 +1,51 @@ ++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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=100, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + +//test for SEND_FAILED_EVENT ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SEND_FAILED, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SEND_FAILED, se_on=1}, [8]) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, + srto_initial=100, + srto_max=150, + srto_min=50}, 16) = 0 + ++0.0 write(3, ..., 1000) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] ++1.0 sctp_recvv(3, [{iov_base={ssf_type=SCTP_SEND_FAILED, + ssf_flags=SCTP_DATA_SENT, + ssf_length=1144, + ssf_error=0, + ssf_info={sinfo_stream=0, + sinfo_ssn=0, + sinfo_flags=3, + sinfo_ppid=htonl(0), + sinfo_context=0, + sinfo_timetolive=0, + sinfo_tsn=0, + sinfo_cumtsn=0}, + ssf_data=...}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..3febfbd9c61efa0aa4c736063585dca7504f570e --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_event.pkt @@ -0,0 +1,50 @@ ++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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=100, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + +//test for SEND_FAILED_EVENT ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, + se_type=SCTP_SEND_FAILED_EVENT, + se_on=1}, 8) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, + srto_initial=100, + srto_max=150, + srto_min=50}, 16) = 0 + ++0.0 write(3, ..., 1000) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] ++1.0 sctp_recvv(3, [{iov_base={ssfe_type=SCTP_SEND_FAILED_EVENT, + ssfe_flags=SCTP_DATA_SENT, + ssfe_length=1032, + ssfe_error=0, + ssfe_info={snd_sid=0, + snd_flags=3, + snd_ppid=htonl(0), + snd_context=0, + snd_assoc_id=3}, + ssfe_assoc_id=3, + ssfe_data=...}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_event_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_event_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..39d8113ee59bbacccee271cfd29d2d2f7b95ab70 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_send_failed_event_2.pkt @@ -0,0 +1,48 @@ ++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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + spp_address=..., + spp_hbinterval=0, + spp_pathmaxrxt=100, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 + +//test for SEND_FAILED_EVENT ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, + se_type=SCTP_SEND_FAILED_EVENT, + se_on=1}, 8) = 0 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, + srto_initial=100, + srto_max=150, + srto_min=50}, 16) = 0 + ++0.0 write(3, ..., 1000) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] +* > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0] ++1.0 sctp_recvv(3, [{iov_base={ssfe_type=SCTP_SEND_FAILED_EVENT, + ssfe_flags=SCTP_DATA_SENT, + ssfe_length=1032, + ssfe_error=0, + ssfe_info={snd_sid=0, + snd_flags=3, + snd_ppid=htonl(0), + snd_context=0}, + ssfe_data=...}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_sender_dry_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_sender_dry_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..edfd4014aa2ec37eba9bb5a7842bd4b12e1d721b --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_sender_dry_event.pkt @@ -0,0 +1,43 @@ ++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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + +//test for enable socketoptions with SCTP_EVENT and SCTP_EVENTS ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=1}, 10) = 0 + ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=1}, [10]) = 0 + + ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sender_dry_type=SCTP_SENDER_DRY_EVENT, + sender_dry_flags=0, + sender_dry_length=12, + sender_dry_assoc_id=...}, iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 12 + diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_sender_dry_event_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_sender_dry_event_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..d1d2fc8c003b947b440fe117756286532e4be58e --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_sender_dry_event_2.pkt @@ -0,0 +1,42 @@ ++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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + +//test for enable socketoptions with SCTP_EVENT and SCTP_EVENTS ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=1}, 10) = 0 + ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=0, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=1}, [10]) = 0 + + ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sender_dry_type=SCTP_SENDER_DRY_EVENT, + sender_dry_flags=0, + sender_dry_length=12}, iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 12 + diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_shutdown_event.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_shutdown_event.pkt new file mode 100644 index 0000000000000000000000000000000000000000..c9b1409fe54342d5608ddda10f8f8d99b62d2827 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_shutdown_event.pkt @@ -0,0 +1,45 @@ ++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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + +//test for enable socketoptions with SCTP_EVENTS ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=1, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=1, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + +// Tear down the association ++0.0 < sctp: SHUTDOWN[flgs=0, cum_tsn=0] +* > sctp: SHUTDOWN_ACK[flgs=0] ++0.0 < sctp: SHUTDOWN_COMPLETE[flgs=0] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sse_type=SCTP_SHUTDOWN_EVENT, + sse_flags=0, + sse_length=12, + sse_assoc_id=...}, iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 12 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_shutdown_event_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_shutdown_event_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..c564062cb015ad332f9b4c7c92e92d2b05e35e99 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/notifications/sctp_shutdown_event_2.pkt @@ -0,0 +1,45 @@ ++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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + +//test for enable socketoptions with SCTP_EVENTS ++0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=1, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, 10) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=0, + sctp_association_event=0, + sctp_address_event=0, + sctp_send_failure_event=0, + sctp_peer_error_event=0, + sctp_shutdown_event=1, + sctp_partial_delivery_event=0, + sctp_adaptation_layer_event=0, + sctp_authentication_event=0, + sctp_sender_dry_event=0}, [10]) = 0 + +// Tear down the association ++0.0 < sctp: SHUTDOWN[flgs=0, cum_tsn=0] +* > sctp: SHUTDOWN_ACK[flgs=0] ++0.0 < sctp: SHUTDOWN_COMPLETE[flgs=0] ++0.0 recvmsg(3, {msg_name(...)=..., + msg_iov(1)=[{iov_base={sse_type=SCTP_SHUTDOWN_EVENT, + sse_flags=0, + sse_length=12}, + iov_len=1000}], + msg_control(0)=[], + msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 12 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/run-all-tests b/gtests/net/packetdrill/tests/linux/sctp/api_tests/run-all-tests new file mode 100755 index 0000000000000000000000000000000000000000..8121ea5fc2d3e7935ea70e5fb8693e579ff828b4 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/run-all-tests @@ -0,0 +1,176 @@ +#!/usr/bin/env tcsh + +# +# Copyright (c) 2015 Michael Tuexen +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# + +set packetdrill = ./../../../../packetdrill +set delay = 1 +set testcases = (setsockopt/sctp_rtoinfo_1 \ + setsockopt/sctp_rtoinfo_2 \ + setsockopt/sctp_rtoinfo_3 \ + getsockopt/sctp_rtoinfo \ + getsockopt/sctp_associnfo \ + getsockopt/sctp_initmsg \ + getsockopt/so_linger \ + getsockopt/sctp_nodelay \ + getsockopt/sctp_autoclose \ + getsockopt/sctp_primary_addr \ + getsockopt/sctp_adaptation_layer \ + getsockopt/sctp_disable_fragments \ + getsockopt/sctp_peer_addr_params \ + getsockopt/sctp_default_send_param \ + getsockopt/sctp_events \ + getsockopt/sctp_i_want_mapped_v4_addr \ + getsockopt/sctp_maxseg \ + getsockopt/sctp_hmac_ident \ + getsockopt/sctp_auth_active_key \ + getsockopt/sctp_delayed_sack \ + getsockopt/sctp_fragment_interleave \ + getsockopt/sctp_partial_delivery_point \ + getsockopt/sctp_use_ext_rcvinfo \ + getsockopt/sctp_auto_asconf \ + getsockopt/sctp_max_burst \ + getsockopt/sctp_context \ + getsockopt/sctp_explicit_eor \ + getsockopt/sctp_reuse_port \ + getsockopt/sctp_event \ + getsockopt/sctp_recvrcvinfo \ + getsockopt/sctp_recvnxtinfo \ + getsockopt/sctp_default_sndinfo \ + getsockopt/sctp_default_prinfo \ + getsockopt/sctp_status \ + getsockopt/sctp_get_peer_addr_info \ + getsockopt/sctp_peer_auth_chunks \ + getsockopt/sctp_local_auth_chunks \ + getsockopt/sctp_get_assoc_number \ + getsockopt/sctp_get_assoc_id_list \ + getsockopt/sctp_set_peer_primary_addr \ + getsockopt/sctp_auth_chunk \ + getsockopt/sctp_auth_key \ + getsockopt/sctp_auth_deactivate_key \ + getsockopt/sctp_auth_delete_key \ + notifications/sctp_adaptation_event \ + notifications/sctp_notifications_stopped_event \ + notifications/sctp_remote_error \ + notifications/sctp_remote_error_2 \ + notifications/sctp_sender_dry_event \ + notifications/sctp_sender_dry_event_2 \ + notifications/sctp_assoc_change_event \ + notifications/sctp_partial_delivery_event \ + notifications/sctp_partial_delivery_event_2 \ + notifications/sctp_send_failed \ + notifications/sctp_send_failed_2 \ + notifications/sctp_shutdown_event \ + notifications/sctp_shutdown_event_2 \ + notifications/sctp_authentication_event \ + notifications/sctp_authentication_event_2 \ + notifications/sctp_peer_addr_change \ + notifications/sctp_peer_addr_change_2 \ + notifications/sctp_send_failed_event \ + notifications/sctp_send_failed_event_2 \ + cmsgs/sendmsg_sctp_init \ + cmsgs/sendmsg_sctp_sndrcv \ + cmsgs/sendmsg_sctp_sndinfo \ + cmsgs/sendmsg_sctp_authinfo \ + cmsgs/sendmsg_sctp_prinfo \ + cmsgs/sendmsg_sctp_dstaddrv4 \ + cmsgs/sendmsg_sctp_dstaddrv6 \ + cmsgs/recvmsg_sctp_extrcv \ + cmsgs/recvmsg_sctp_nxtinfo \ + cmsgs/recvmsg_sctp_rcvinfo \ + cmsgs/recvmsg_sctp_sndrcv \ + cmsgs/recvmsg \ + cmsgs/sendmsg \ + sctp_send/sctp_send_1 \ + sctp_send/sctp_send_2 \ + sctp_bindx/sctp_bindx \ + sctp_peeloff/sctp_peeloff \ + sctp_getpaddrs/sctp_getpaddrs \ + sctp_getladdrs/sctp_getladdrs \ + sctp_sendmsg/sctp_sendmsg_1 \ + sctp_sendmsg/sctp_sendmsg_2 \ + sctp_sendmsg/sctp_sendmsg_3 \ + sctp_recvmsg/sctp_recvmsg_1 \ + sctp_recvmsg/sctp_recvmsg_2 \ + sctp_recvmsg/sctp_recvmsg_3 \ + sctp_connectx/sctp_connectx \ + sctp_sendx/sctp_sendx \ + sctp_sendv/sctp_sendv \ + sctp_recvv/sctp_recvv ) + +set rootdir = `/usr/bin/dirname $0` +set os = `uname -s | tr '[A-Z]' '[a-z]'` +set passed = 0 +set failed = 0 +set run = 0 +set skipped = 0 +set first = 1 + +printf "Name Verdict\n" +printf "===================================================\n" +foreach testcase ($testcases) + printf "%-40.40s " `/usr/bin/basename $testcase` + if ($first == 0) then + if ($delay != 0) then + printf "\033[33m%10s\033[0m" "WAITING" + sleep $delay + printf "\b\b\b\b\b\b\b\b\b\b" + endif + else + set first = 0 + endif + printf "\033[33m%10s\033[0m" "RUNNING" + if (-f ${rootdir}/${testcase}-$os.pkt) then + $packetdrill ${rootdir}/${testcase}-$os.pkt >& /dev/null + set result = $status + set found = 1 + else if (-f ${rootdir}/${testcase}.pkt) then + $packetdrill ${rootdir}/${testcase}.pkt >& /dev/null + set result = $status + set found = 1 + else + set found = 0 + endif + printf "\b\b\b\b\b\b\b\b\b\b" + if ($found == 1) then + if ($result == 0) then + @ passed++ + printf "\033[32m%10s\033[0m\n" "PASSED" + else + @ failed++ + printf "\033[31m%10s\033[0m\n" "FAILED" + endif + @ run++ + else + printf "\033[34m%10s\033[0m\n" "SKIPPED" + @ skipped++ + endif +end +printf "===================================================\n" +printf "Summary: Number of tests run: %3u\n" $run +printf " Number of tests passed: %3u\n" $passed +printf " Number of tests failed: %3u\n" $failed +printf " Number of tests skipped: %3u\n" $skipped diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_bindx/sctp_bindx.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_bindx/sctp_bindx.pkt new file mode 100644 index 0000000000000000000000000000000000000000..664ca300e40758a088790ed15a7f6759908a762e --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_bindx/sctp_bindx.pkt @@ -0,0 +1,6 @@ + + 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 sctp_bindx(3, [...], 1, SCTP_BINDX_ADD_ADDR) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_connectx/sctp_connectx.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_connectx/sctp_connectx.pkt new file mode 100644 index 0000000000000000000000000000000000000000..8e33925643afae0accb16042ac8dbc7cc6ab48eb --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_connectx/sctp_connectx.pkt @@ -0,0 +1,17 @@ + + 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 sctp_bindx(3, [...], 1, SCTP_BINDX_ADD_ADDR) = 0 + +// Check the handshake with an empty(!) cookie ++0.1 sctp_connectx(3, [...], 1, [3]) = 0 ++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 < sctp: SHUTDOWN[flgs=0, cum_tsn=0] +* > sctp: SHUTDOWN_ACK[flgs=0] ++0.0 < sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_getladdrs/sctp_getladdrs.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_getladdrs/sctp_getladdrs.pkt new file mode 100644 index 0000000000000000000000000000000000000000..df23f4aff645690ef739dd7b9a723e3f1790ae53 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_getladdrs/sctp_getladdrs.pkt @@ -0,0 +1,19 @@ + + 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 sctp_bindx(3, [...], 1, SCTP_BINDX_ADD_ADDR) = 0 + +// Check the handshake with an empty(!) cookie ++0.1 sctp_connectx(3, [...], 1, [...]) = -1 ++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 sctp_getladdrs(3, 3, [...]) = 1 ++0.0 sctp_freeladdrs([...]) = 0 + ++0.0 sctp_getladdrs(3, 3, [{sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.168.0.1")}]) = 1 ++0.0 sctp_freeladdrs([...]) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_getpaddrs/sctp_getpaddrs.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_getpaddrs/sctp_getpaddrs.pkt new file mode 100644 index 0000000000000000000000000000000000000000..78e7f064c35da3c3764bfcd21ca4097003d97cca --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_getpaddrs/sctp_getpaddrs.pkt @@ -0,0 +1,19 @@ + + 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 sctp_bindx(3, [...], 1, SCTP_BINDX_ADD_ADDR) = 0 + +// Check the handshake with an empty(!) cookie ++0.1 sctp_connectx(3, [...], 1, [...]) = -1 ++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 sctp_getpaddrs(3, 3, [...]) = 1 ++0.0 sctp_freepaddrs([...]) = 0 + ++0.0 sctp_getpaddrs(3, 3, [{sa_family=AF_INET,sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}]) = 1 ++0.0 sctp_freepaddrs([...]) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_peeloff/sctp_peeloff.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_peeloff/sctp_peeloff.pkt new file mode 100644 index 0000000000000000000000000000000000000000..de7c9edfe1119689b45e514f6427d0e58c4944d3 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_peeloff/sctp_peeloff.pkt @@ -0,0 +1,15 @@ + + 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 sctp_bindx(3, [...], 1, SCTP_BINDX_ADD_ADDR) = 0 + +// Check the handshake with an empty(!) cookie ++0.1 sctp_connectx(3, [...], 1, [3]) = 0 ++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 sctp_peeloff(3, 3) = 4 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_1.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_1.pkt new file mode 100644 index 0000000000000000000000000000000000000000..569fae58952a350ebbbf755449b608e449e90305 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_1.pkt @@ -0,0 +1,20 @@ ++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 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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 < 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 sctp_recvmsg(3, ..., 1000, ..., ..., ..., MSG_EOR) = 1000 + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=1] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..ef3af18f24aa5cadd0cbf1d88ced9d137114cd5b --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_2.pkt @@ -0,0 +1,28 @@ ++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 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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 < sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=1234] +* > sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=..., gaps=[], dups=[]] ++0.0 sctp_recvmsg(3, ..., 1000, ..., ..., {sinfo_stream=..., + sinfo_ssn=..., + sinfo_flags=0, + sinfo_ppid=htonl(205526792), + sinfo_context=..., + sinfo_timetolive=..., + sinfo_tsn=..., + sinfo_cumtsn=..., + sinfo_assoc_id=...}, 128) = 1000 + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=1] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_3.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_3.pkt new file mode 100644 index 0000000000000000000000000000000000000000..79dffa221038e8549d17df1b0aef6f4d8b87dc4f --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_recvmsg/sctp_recvmsg_3.pkt @@ -0,0 +1,49 @@ ++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 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=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.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0 + ++0.0 < 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 sctp_recvmsg(3, ..., 1000, + {sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + 16, + {sinfo_stream=..., + sinfo_ssn=..., + sinfo_flags=0, + sinfo_ppid=htonl(205526792), + sinfo_context=..., + sinfo_timetolive=..., + sinfo_tsn=..., + sinfo_cumtsn=..., + sinfo_assoc_id=...}, MSG_EOR) = 1000 + ++0.0 < 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 sctp_recvmsg(3, ..., 1000, + {sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + 16, + {sinfo_stream=..., + sinfo_ssn=..., + sinfo_flags=0, + sinfo_ppid=htonl(205526792), + sinfo_context=..., + sinfo_timetolive=..., + sinfo_tsn=..., + sinfo_cumtsn=...}, MSG_EOR) = 1000 + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=2] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_send/sctp_send_1.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_send/sctp_send_1.pkt new file mode 100644 index 0000000000000000000000000000000000000000..ceff10fc530e27fdcb245ec691d348a3cf0c0e2d --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_send/sctp_send_1.pkt @@ -0,0 +1,42 @@ +--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 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 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + 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 + ++1.0 sctp_send(3, ..., 1000, {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=1, sid=3, ssn=0, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_send/sctp_send_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_send/sctp_send_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..940f5485eeeb3f949cc05899ad3764e49147388a --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_send/sctp_send_2.pkt @@ -0,0 +1,55 @@ +--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 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 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=..., + 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 + ++1.0 sctp_send(3, ..., 1000, {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=1, sid=3, ssn=0, ppid=7] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++1.0 sctp_send(3, ..., 1000, {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 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_1.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_1.pkt new file mode 100644 index 0000000000000000000000000000000000000000..2144bf4d295c4e7600160d8c39d3b015f4a78615 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_1.pkt @@ -0,0 +1,20 @@ ++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 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 sctp_sendmsg(3, ..., 1000, ..., ..., htonl(1234), SCTP_UNORDERED, 1, 0, 0) = 1000 ++0.0 > sctp: DATA[flgs=UBE, len=1016, tsn=1, sid=1, ssn=0, ppid=1234] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..4e916dca4981c3ea01a7ff47854dd63f0397d60c --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_2.pkt @@ -0,0 +1,23 @@ ++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 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 sctp_sendmsg(3, ..., 1000, {sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + 16, htonl(0x1234), 0, 0, 0, 0) = 1000 ++0.0 > sctp: DATA[flgs=BE, len=1016, tsn=1, sid=0, ssn=0, ppid=0x1234] ++0.0 < sctp: SACK[flgs=0, cum_tsn=1, a_rwnd=1500, gaps=[], dups=[]] + ++0.0 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_3.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_3.pkt new file mode 100644 index 0000000000000000000000000000000000000000..b02ac279aaae3b92db943cb7e2fc8e6827440f12 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/sctp_sendmsg/sctp_sendmsg_3.pkt @@ -0,0 +1,20 @@ ++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 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 sctp_sendmsg(3, ..., 1000, NULL, 0, 0, 0, 0, 0, 0) = 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 close(3) = 0 ++0.0 > sctp: SHUTDOWN[flgs=0, cum_tsn=0] ++0.1 < sctp: SHUTDOWN_ACK[flgs=0] ++0.0 > sctp: SHUTDOWN_COMPLETE[flgs=0] diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_1.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_1.pkt new file mode 100644 index 0000000000000000000000000000000000000000..1a6fe6762e9cf441ad426da25915b5a532e0e457 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_1.pkt @@ -0,0 +1,9 @@ +--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 bind(3, ..., ...) = 0 + +// Check sctp_rtoinfo before connection startup ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=..., srto_max=..., srto_min=...}, [16]) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_2.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_2.pkt new file mode 100644 index 0000000000000000000000000000000000000000..80305cd4fb022a8b65f08aa9f847ddd08b11b96e --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_2.pkt @@ -0,0 +1,10 @@ +--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 bind(3, ..., ...) = 0 + +// Check sctp_rtoinfo before connection startup ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=50}, [16]) = 0 diff --git a/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_3.pkt b/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_3.pkt new file mode 100644 index 0000000000000000000000000000000000000000..164ace174e5380211078cf1eb8b541825b2c1be4 --- /dev/null +++ b/gtests/net/packetdrill/tests/linux/sctp/api_tests/setsockopt/sctp_rtoinfo_3.pkt @@ -0,0 +1,11 @@ +--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 bind(3, ..., ...) = 0 + +// Check sctp_rtoinfo for one-to-one style check if srto_assoc_id is ignored ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=200, srto_max=400, srto_min=100}, 16) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=3, srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=50}, [16]) = 0