diff --git a/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/recvmsg.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/recvmsg.pkt new file mode 100644 index 0000000000000000000000000000000000000000..bf44947527a16a98c19550410182fff1011606e2 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/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/bsd/sctp/api_tests/cmsgs/sendmsg.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg.pkt new file mode 100644 index 0000000000000000000000000000000000000000..7dec990876a50acf1949cf4c9a10ea43c7510f4b --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/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/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_authinfo.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_authinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..73287130a3a050b27916cf1e786abff955ab266d --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/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/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_dstaddrv4.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_dstaddrv4.pkt new file mode 100644 index 0000000000000000000000000000000000000000..c298b1777c8c2c2a304873edaf5fc9431cb56b22 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/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/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.pkt new file mode 100644 index 0000000000000000000000000000000000000000..d92e3f7ac26bde06922d8f6e75af91759c7e045a --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_init.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/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_prinfo.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_prinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..c4b32245c416cf9deea5da37838636cb601d4dc3 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/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/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_sndinfo.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_sndinfo.pkt new file mode 100644 index 0000000000000000000000000000000000000000..b0ec2423b804e0b6bfa3e78c4960e2d891409394 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_sndinfo.pkt @@ -0,0 +1,74 @@ +--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 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/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_sndrcv.pkt b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_sndrcv.pkt new file mode 100644 index 0000000000000000000000000000000000000000..983b51e791d3c029fecc3c86bf9eec224f319233 --- /dev/null +++ b/gtests/net/packetdrill/tests/bsd/sctp/api_tests/cmsgs/sendmsg_sctp_sndrcv.pkt @@ -0,0 +1,100 @@ +--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 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]