diff --git a/gtests/net/packetdrill/lexer.l b/gtests/net/packetdrill/lexer.l index a308a5720e05004033a48917cbebad037378c826..41035ebd6ad86e55ca6d230def89b4664d30da73 100644 --- a/gtests/net/packetdrill/lexer.l +++ b/gtests/net/packetdrill/lexer.l @@ -210,14 +210,18 @@ ce return CE; iov_base return IOV_BASE; iov_len return IOV_LEN; [.][.][.] return ELLIPSIS; +assoc_id return ASSOC_ID; assoc_value return ASSOC_VALUE; stream_id return STREAM_ID; stream_value return STREAM_VALUE; +sack_assoc_id return SACK_ASSOC_ID; sack_delay return SACK_DELAY; sack_freq return SACK_FREQ; +srto_assoc_id return SRTO_ASSOC_ID; srto_initial return SRTO_INITIAL; srto_max return SRTO_MAX; srto_min return SRTO_MIN; +sasoc_assoc_id return SASOC_ASSOC_ID; sasoc_asocmaxrxt return SASOC_ASOCMAXRXT; sasoc_number_peer_destinations return SASOC_NUMBER_PEER_DESTINATIONS; sasoc_peer_rwnd return SASOC_PEER_RWND; @@ -227,6 +231,7 @@ sinit_num_ostreams return SINIT_NUM_OSTREAMS; sinit_max_instreams return SINIT_MAX_INSTREAMS; sinit_max_attempts return SINIT_MAX_ATTEMPTS; sinit_max_init_timeo return SINIT_MAX_INIT_TIMEO; +sstat_assoc_id return SSTAT_ASSOC_ID; sstat_state return SSTAT_STATE; sstat_rwnd return SSTAT_RWND; sstat_unackdata return SSTAT_UNACKDATA; @@ -235,12 +240,14 @@ sstat_instrms return SSTAT_INSTRMS; sstat_outstrms return SSTAT_OUTSTRMS; sstat_fragmentation_point return SSTAT_FRAGMENTATION_POINT; sstat_primary return SSTAT_PRIMARY; +spinfo_assoc_id return SPINFO_ASSOC_ID; spinfo_address return SPINFO_ADDRESS; spinfo_state return SPINFO_STATE; spinfo_cwnd return SPINFO_CWND; spinfo_srtt return SPINFO_SRTT; spinfo_rto return SPINFO_RTO; spinfo_mtu return SPINFO_MTU; +spp_assoc_id return SPP_ASSOC_ID; spp_address return SPP_ADDRESS; spp_hbinterval return SPP_HBINTERVAL; spp_pathmaxrxt return SPP_PATHMAXRXT; @@ -248,6 +255,7 @@ spp_pathmtu return SPP_PATHMTU; spp_flags return SPP_FLAGS; spp_ipv6_flowlabel return SPP_IPV6_FLOWLABEL_; /* avoid name clash */ spp_dscp return SPP_DSCP_; /* avoid name clash */ +se_assoc_id return SE_ASSOC_ID; se_type return SE_TYPE; se_on return SE_ON; sctp_data_io_event return _SCTP_DATA_IO_EVENT_; @@ -265,6 +273,8 @@ snd_flags return SND_FLAGS; snd_ppid return SND_PPID; snd_context return SND_CONTEXT; snd_assoc_id return SND_ASSOC_ID; +ssp_assoc_id return SSP_ASSOC_ID; +ssp_addr return SSP_ADDR; ssb_adaptation_ind return SSB_ADAPTATION_IND; sinfo_stream return SINFO_STREAM; sinfo_ssn return SINFO_SSN; @@ -283,6 +293,7 @@ serinfo_next_length return SERINFO_NEXT_LENGTH; serinfo_next_ppid return SERINFO_NEXT_PPID; pr_policy return PR_POLICY; pr_value return PR_VALUE; +pr_assoc_id return PR_ASSOC_ID; sendv_flags return SENDV_FLAGS; sendv_sndinfo return SENDV_SNDINFO; sendv_prinfo return SENDV_PRINFO; @@ -312,6 +323,7 @@ recvv_nxtinfo return RECVV_NXTINFO; sse_type return SSE_TYPE; sse_flags return SSE_FLAGS; sse_length return SSE_LENGTH; +sse_assoc_id return SSE_ASSOC_ID; sac_type return SAC_TYPE; sac_flags return SAC_FLAGS; sac_length return SAC_LENGTH; diff --git a/gtests/net/packetdrill/parser.y b/gtests/net/packetdrill/parser.y index cb23b55eedfa2174d366821ca29f1aadb9a19fcf..3ee8ff41e39d472238bc4ca10b9f8522c0449120 100644 --- a/gtests/net/packetdrill/parser.y +++ b/gtests/net/packetdrill/parser.y @@ -503,16 +503,16 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %token <reserved> IPV4 IPV6 ICMP SCTP UDP UDPLITE GRE MTU %token <reserved> MPLS LABEL TC TTL %token <reserved> OPTION -%token <reserved> SRTO_INITIAL SRTO_MAX SRTO_MIN +%token <reserved> SRTO_ASSOC_ID SRTO_INITIAL SRTO_MAX SRTO_MIN %token <reserved> SINIT_NUM_OSTREAMS SINIT_MAX_INSTREAMS SINIT_MAX_ATTEMPTS %token <reserved> SINIT_MAX_INIT_TIMEO -%token <reserved> ASSOC_VALUE +%token <reserved> ASSOC_ID ASSOC_VALUE %token <reserved> STREAM_ID STREAM_VALUE -%token <reserved> SACK_DELAY SACK_FREQ -%token <reserved> SSTAT_STATE SSTAT_RWND SSTAT_UNACKDATA SSTAT_PENDDATA +%token <reserved> SACK_ASSOC_ID SACK_DELAY SACK_FREQ +%token <reserved> SSTAT_ASSOC_ID SSTAT_STATE SSTAT_RWND SSTAT_UNACKDATA SSTAT_PENDDATA %token <reserved> SSTAT_INSTRMS SSTAT_OUTSTRMS SSTAT_FRAGMENTATION_POINT %token <reserved> SSTAT_PRIMARY -%token <reserved> SPINFO_ADDRESS SPINFO_STATE SPINFO_CWND SPINFO_SRTT SPINFO_RTO +%token <reserved> SPINFO_ASSOC_ID SPINFO_ADDRESS SPINFO_STATE SPINFO_CWND SPINFO_SRTT SPINFO_RTO %token <reserved> SPINFO_MTU %token <reserved> CHUNK DATA INIT INIT_ACK HEARTBEAT HEARTBEAT_ACK ABORT %token <reserved> SHUTDOWN SHUTDOWN_ACK ERROR COOKIE_ECHO COOKIE_ACK ECNE CWR @@ -534,21 +534,22 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %token <reserved> COOKIE_RECEIVED_WHILE_SHUTDOWN RESTART_WITH_NEW_ADDRESSES %token <reserved> USER_INITIATED_ABORT PROTOCOL_VIOLATION %token <reserved> STALENESS CHK PARAM UNRECOGNIZED_PARAMETERS -%token <reserved> SPP_ADDRESS SPP_HBINTERVAL SPP_PATHMAXRXT SPP_PATHMTU +%token <reserved> SPP_ASSOC_ID SPP_ADDRESS SPP_HBINTERVAL SPP_PATHMAXRXT SPP_PATHMTU %token <reserved> SPP_FLAGS SPP_IPV6_FLOWLABEL_ SPP_DSCP_ -%token <reserved> SASOC_ASOCMAXRXT SASOC_NUMBER_PEER_DESTINATIONS SASOC_PEER_RWND -%token <reserved> SASOC_LOCAL_RWND SASOC_COOKIE_LIFE SE_TYPE SE_ON +%token <reserved> SASOC_ASOCMAXRXT SASOC_ASSOC_ID SASOC_NUMBER_PEER_DESTINATIONS SASOC_PEER_RWND +%token <reserved> SASOC_LOCAL_RWND SASOC_COOKIE_LIFE SE_ASSOC_ID SE_TYPE SE_ON +%token <reserved> SSP_ASSOC_ID SSP_ADDR %token <reserved> SND_SID SND_FLAGS SND_PPID SND_CONTEXT SND_ASSOC_ID SSB_ADAPTATION_IND %token <reserved> BAD_CRC32C NULL_ %token <reserved> SINFO_STREAM SINFO_SSN SINFO_FLAGS SINFO_PPID SINFO_CONTEXT SINFO_ASSOC_ID %token <reserved> SINFO_TIMETOLIVE SINFO_TSN SINFO_CUMTSN SINFO_PR_VALUE SERINFO_NEXT_FLAGS %token <reserved> SERINFO_NEXT_STREAM SERINFO_NEXT_AID SERINFO_NEXT_LENGTH SERINFO_NEXT_PPID -%token <reserved> PR_POLICY PR_VALUE AUTH_KEYNUMBER SENDV_FLAGS SENDV_SNDINFO +%token <reserved> PR_POLICY PR_VALUE PR_ASSOC_ID AUTH_KEYNUMBER SENDV_FLAGS SENDV_SNDINFO %token <reserved> SENDV_PRINFO SENDV_AUTHINFO %token <reserved> RCV_SID RCV_SSN RCV_FLAGS RCV_PPID RCV_TSN RCV_CUMTSN RCV_CONTEXT RCV_ASSOC_ID %token <reserved> NXT_SID NXT_FLAGS NXT_PPID NXT_LENGTH NXT_ASSOC_ID %token <reserved> RECVV_RCVINFO RECVV_NXTINFO -%token <reserved> SSE_TYPE SSE_FLAGS SSE_LENGTH +%token <reserved> SSE_TYPE SSE_FLAGS SSE_LENGTH SSE_ASSOC_ID %token <reserved> SENDER_DRY_TYPE SENDER_DRY_FLAGS SENDER_DRY_LENGTH SENDER_DRY_ASSOC_ID %token <reserved> _SCTP_DATA_IO_EVENT_ _SCTP_ASSOCIATION_EVENT_ _SCTP_ADDRESS_EVENT_ %token <reserved> _SCTP_SEND_FAILURE_EVENT_ _SCTP_PEER_ERROR_EVENT_ _SCTP_SHUTDOWN_EVENT_ @@ -601,7 +602,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %type <expression> decimal_integer hex_integer data %type <expression> inaddr sockaddr msghdr cmsghdr cmsg_level cmsg_type cmsg_data %type <expression> iovec pollfd opt_revents -%type <expression> linger l_onoff l_linger +%type <expression> linger l_onoff l_linger sctp_assoc_id %type <expression> sctp_status sstat_state sstat_rwnd sstat_unackdata sstat_penddata %type <expression> sstat_instrms sstat_outstrms sstat_fragmentation_point sstat_primary %type <expression> sctp_initmsg sinit_num_ostreams sinit_max_instreams sinit_max_attempts @@ -613,26 +614,26 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %type <expression> spinfo_address spinfo_state spinfo_cwnd spinfo_srtt spinfo_rto spinfo_mtu %type <expression> sasoc_asocmaxrxt sasoc_number_peer_destinations sasoc_peer_rwnd %type <expression> sasoc_local_rwnd sasoc_cookie_life sctp_assocparams -%type <expression> sctp_sndinfo snd_sid snd_flags snd_ppid snd_assoc_id snd_context -%type <expression> sctp_event se_type se_on sctp_setadaptation null +%type <expression> sctp_sndinfo snd_sid snd_flags snd_ppid snd_context +%type <expression> sctp_event se_type se_on sctp_setadaptation sctp_setprim null %type <expression> sctp_sndrcvinfo sinfo_stream sinfo_ssn sinfo_flags sinfo_ppid sinfo_context -%type <expression> sinfo_timetolive sinfo_tsn sinfo_cumtsn sinfo_assoc_id sinfo_pr_value serinfo_next_flags +%type <expression> sinfo_timetolive sinfo_tsn sinfo_cumtsn sinfo_pr_value serinfo_next_flags %type <expression> serinfo_next_stream serinfo_next_aid serinfo_next_length serinfo_next_ppid sctp_extrcvinfo -%type <expression> sctp_prinfo sctp_authinfo pr_policy sctp_sendv_spa -%type <expression> sctp_rcvinfo rcv_sid rcv_ssn rcv_flags rcv_ppid rcv_tsn rcv_cumtsn rcv_context rcv_assoc_id -%type <expression> sctp_nxtinfo nxt_sid nxt_flags nxt_ppid nxt_length nxt_assoc_id sctp_recvv_rn +%type <expression> sctp_prinfo sctp_authinfo pr_policy sctp_sendv_spa sctp_default_prinfo +%type <expression> sctp_rcvinfo rcv_sid rcv_ssn rcv_flags rcv_ppid rcv_tsn rcv_cumtsn rcv_context +%type <expression> sctp_nxtinfo nxt_sid nxt_flags nxt_ppid nxt_length sctp_recvv_rn %type <expression> sctp_shutdown_event sse_type sse_flags sse_length -%type <expression> sctp_sender_dry_event sender_dry_type sender_dry_flags sender_dry_length sender_dry_assoc_id +%type <expression> sctp_sender_dry_event sender_dry_type sender_dry_flags sender_dry_length %type <expression> sctp_event_subscribe %type <expression> sctp_assoc_change sac_type sac_flags sac_length sac_state sac_error sac_outbound_streams -%type <expression> sac_inbound_streams sac_assoc_id sac_info -%type <expression> sctp_send_failed_event ssfe_type ssfe_flags ssfe_length ssfe_error ssfe_assoc_id ssfe_data -%type <expression> sctp_authkey_event auth_type auth_flags auth_length auth_keynumber auth_indication auth_assoc_id -%type <expression> sctp_remote_error sre_type sre_flags sre_length sre_error sre_assoc_id sre_data -%type <expression> sctp_pdapi_event pdapi_type pdapi_flags pdapi_length pdapi_indication pdapi_stream pdapi_seq pdapi_assoc_id -%type <expression> sctp_paddr_change spc_type spc_flags spc_length spc_aaddr spc_error spc_state spc_assoc_id -%type <expression> sctp_send_failed ssf_type ssf_length ssf_flags ssf_error ssf_info ssf_assoc_id ssf_data -%type <expression> sctp_adaptation_event sai_type sai_flags sai_length sai_adaptation_ind sai_assoc_id +%type <expression> sac_inbound_streams sac_info +%type <expression> sctp_send_failed_event ssfe_type ssfe_flags ssfe_length ssfe_error ssfe_data +%type <expression> sctp_authkey_event auth_type auth_flags auth_length auth_keynumber auth_indication +%type <expression> sctp_remote_error sre_type sre_flags sre_length sre_error sre_data +%type <expression> sctp_pdapi_event pdapi_type pdapi_flags pdapi_length pdapi_indication pdapi_stream pdapi_seq +%type <expression> sctp_paddr_change spc_type spc_flags spc_length spc_aaddr spc_error spc_state +%type <expression> sctp_send_failed ssf_type ssf_length ssf_flags ssf_error ssf_info ssf_data +%type <expression> sctp_adaptation_event sai_type sai_flags sai_length sai_adaptation_ind %type <expression> sctp_tlv sn_type sn_flags sn_length %type <errno_info> opt_errno %type <chunk_list> sctp_chunk_list_spec @@ -2509,6 +2510,9 @@ expression | sctp_sndinfo { $$ = $1; } +| sctp_setprim { + $$ = $1; +} | sctp_setadaptation{ $$ = $1; } @@ -2518,6 +2522,9 @@ expression | sctp_prinfo { $$ = $1; } +|sctp_default_prinfo{ + $$ = $1; +} | sctp_authinfo { $$ = $1; } @@ -2796,13 +2803,28 @@ srto_min | SRTO_MIN '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; +sctp_assoc_id +: INTEGER { + if (!is_valid_u32($1)) { + semantic_error("value for sctp_assoc_t out of range"); + } + $$ = new_integer_expression($1, "%u"); +} +| WORD { + $$ = new_expression(EXPR_WORD); + $$->value.string = $1; +} +| ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } +; + sctp_rtoinfo -: '{' srto_initial ',' srto_max ',' srto_min '}' { +: '{' SRTO_ASSOC_ID '=' sctp_assoc_id ',' srto_initial ',' srto_max ',' srto_min '}' { $$ = new_expression(EXPR_SCTP_RTOINFO); $$->value.sctp_rtoinfo = calloc(1, sizeof(struct sctp_rtoinfo_expr)); - $$->value.sctp_rtoinfo->srto_initial = $2; - $$->value.sctp_rtoinfo->srto_max = $4; - $$->value.sctp_rtoinfo->srto_min = $6; + $$->value.sctp_rtoinfo->srto_assoc_id = $4; + $$->value.sctp_rtoinfo->srto_initial = $6; + $$->value.sctp_rtoinfo->srto_max = $8; + $$->value.sctp_rtoinfo->srto_min = $10; } ; @@ -2868,10 +2890,11 @@ sctp_stream_value ; sctp_assoc_value -: '{' ASSOC_VALUE '=' expression '}' { +: '{' ASSOC_ID '=' sctp_assoc_id ',' ASSOC_VALUE '=' expression '}' { $$ = new_expression(EXPR_SCTP_ASSOC_VALUE); $$->value.sctp_assoc_value = calloc(1, sizeof(struct sctp_assoc_value_expr)); - $$->value.sctp_assoc_value->assoc_value = $4; + $$->value.sctp_assoc_value->assoc_id = $4; + $$->value.sctp_assoc_value->assoc_value = $8; } ; @@ -2894,11 +2917,12 @@ sack_freq | SACK_FREQ '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } sctp_sackinfo -: '{' sack_delay ',' sack_freq '}' { +: '{' SACK_ASSOC_ID '=' sctp_assoc_id ',' sack_delay ',' sack_freq '}' { $$ = new_expression(EXPR_SCTP_SACKINFO); $$->value.sctp_sack_info = calloc(1, sizeof(struct sctp_sack_info_expr)); - $$->value.sctp_sack_info->sack_delay = $2; - $$->value.sctp_sack_info->sack_freq = $4; + $$->value.sctp_sack_info->sack_assoc_id = $4; + $$->value.sctp_sack_info->sack_delay = $6; + $$->value.sctp_sack_info->sack_freq = $8; } ; @@ -3031,31 +3055,34 @@ spinfo_mtu ; sctp_paddrinfo -: '{' spinfo_address ',' spinfo_state ',' spinfo_cwnd ',' spinfo_srtt ',' spinfo_rto ',' spinfo_mtu '}' { +: '{' SPINFO_ASSOC_ID '=' sctp_assoc_id ',' spinfo_address ',' spinfo_state ',' spinfo_cwnd ',' + spinfo_srtt ',' spinfo_rto ',' spinfo_mtu '}' { $$ = new_expression(EXPR_SCTP_PADDRINFO); $$->value.sctp_paddrinfo = calloc(1, sizeof(struct sctp_paddrinfo_expr)); - $$->value.sctp_paddrinfo->spinfo_address = $2; - $$->value.sctp_paddrinfo->spinfo_state = $4; - $$->value.sctp_paddrinfo->spinfo_cwnd = $6; - $$->value.sctp_paddrinfo->spinfo_srtt = $8; - $$->value.sctp_paddrinfo->spinfo_rto = $10; - $$->value.sctp_paddrinfo->spinfo_mtu = $12; + $$->value.sctp_paddrinfo->spinfo_assoc_id = $4; + $$->value.sctp_paddrinfo->spinfo_address = $6; + $$->value.sctp_paddrinfo->spinfo_state = $8; + $$->value.sctp_paddrinfo->spinfo_cwnd = $10; + $$->value.sctp_paddrinfo->spinfo_srtt = $12; + $$->value.sctp_paddrinfo->spinfo_rto = $14; + $$->value.sctp_paddrinfo->spinfo_mtu = $16; } ; sctp_status -: '{' sstat_state ',' sstat_rwnd ',' sstat_unackdata ',' sstat_penddata ',' sstat_instrms ',' sstat_outstrms ',' - sstat_fragmentation_point ',' sstat_primary '}' { +: '{' SSTAT_ASSOC_ID '=' sctp_assoc_id ',' sstat_state ',' sstat_rwnd ',' sstat_unackdata ',' sstat_penddata ',' sstat_instrms ',' sstat_outstrms ',' + sstat_fragmentation_point ',' sstat_primary '}' { $$ = new_expression(EXPR_SCTP_STATUS); $$->value.sctp_status = calloc(1, sizeof(struct sctp_status_expr)); - $$->value.sctp_status->sstat_state = $2; - $$->value.sctp_status->sstat_rwnd = $4; - $$->value.sctp_status->sstat_unackdata = $6; - $$->value.sctp_status->sstat_penddata = $8; - $$->value.sctp_status->sstat_instrms = $10; - $$->value.sctp_status->sstat_outstrms = $12; - $$->value.sctp_status->sstat_fragmentation_point = $14; - $$->value.sctp_status->sstat_primary = $16; + $$->value.sctp_status->sstat_assoc_id = $4; + $$->value.sctp_status->sstat_state = $6; + $$->value.sctp_status->sstat_rwnd = $8; + $$->value.sctp_status->sstat_unackdata = $10; + $$->value.sctp_status->sstat_penddata = $12; + $$->value.sctp_status->sstat_instrms = $14; + $$->value.sctp_status->sstat_outstrms = $16; + $$->value.sctp_status->sstat_fragmentation_point = $18; + $$->value.sctp_status->sstat_primary = $20; } ; @@ -3119,16 +3146,18 @@ spp_dscp ; sctp_paddrparams -: '{' spp_address ',' spp_hbinterval ',' spp_pathmaxrxt ',' spp_pathmtu ','spp_flags ',' spp_ipv6_flowlabel ',' spp_dscp'}' { +: '{' SPP_ASSOC_ID '=' sctp_assoc_id ',' spp_address ',' spp_hbinterval ',' spp_pathmaxrxt ',' spp_pathmtu ','spp_flags ',' + spp_ipv6_flowlabel ',' spp_dscp'}' { $$ = new_expression(EXPR_SCTP_PEER_ADDR_PARAMS); $$->value.sctp_paddrparams = calloc(1, sizeof(struct sctp_paddrparams_expr)); - $$->value.sctp_paddrparams->spp_address = $2; - $$->value.sctp_paddrparams->spp_hbinterval = $4; - $$->value.sctp_paddrparams->spp_pathmaxrxt = $6; - $$->value.sctp_paddrparams->spp_pathmtu = $8; - $$->value.sctp_paddrparams->spp_flags = $10; - $$->value.sctp_paddrparams->spp_ipv6_flowlabel = $12; - $$->value.sctp_paddrparams->spp_dscp = $14; + $$->value.sctp_paddrparams->spp_assoc_id = $4; + $$->value.sctp_paddrparams->spp_address = $6; + $$->value.sctp_paddrparams->spp_hbinterval = $8; + $$->value.sctp_paddrparams->spp_pathmaxrxt = $10; + $$->value.sctp_paddrparams->spp_pathmtu = $12; + $$->value.sctp_paddrparams->spp_flags = $14; + $$->value.sctp_paddrparams->spp_ipv6_flowlabel = $16; + $$->value.sctp_paddrparams->spp_dscp = $18; } ; @@ -3183,14 +3212,16 @@ sasoc_cookie_life ; sctp_assocparams -: '{' sasoc_asocmaxrxt ',' sasoc_number_peer_destinations ',' sasoc_peer_rwnd ',' sasoc_local_rwnd ',' sasoc_cookie_life '}' { +: '{' SASOC_ASSOC_ID '=' sctp_assoc_id ',' sasoc_asocmaxrxt ',' sasoc_number_peer_destinations ',' + sasoc_peer_rwnd ',' sasoc_local_rwnd ',' sasoc_cookie_life '}' { $$ = new_expression(EXPR_SCTP_ASSOCPARAMS); $$->value.sctp_assocparams = calloc(1, sizeof(struct sctp_assocparams_expr)); - $$->value.sctp_assocparams->sasoc_asocmaxrxt = $2; - $$->value.sctp_assocparams->sasoc_number_peer_destinations = $4; - $$->value.sctp_assocparams->sasoc_peer_rwnd = $6; - $$->value.sctp_assocparams->sasoc_local_rwnd = $8; - $$->value.sctp_assocparams->sasoc_cookie_life = $10; + $$->value.sctp_assocparams->sasoc_assoc_id = $4; + $$->value.sctp_assocparams->sasoc_asocmaxrxt = $6; + $$->value.sctp_assocparams->sasoc_number_peer_destinations = $8; + $$->value.sctp_assocparams->sasoc_peer_rwnd = $10; + $$->value.sctp_assocparams->sasoc_local_rwnd = $12; + $$->value.sctp_assocparams->sasoc_cookie_life = $14; } ; @@ -3218,11 +3249,12 @@ se_on ; sctp_event -: '{' se_type ',' se_on '}' { +: '{' SE_ASSOC_ID '=' sctp_assoc_id ',' se_type ',' se_on '}' { $$ = new_expression(EXPR_SCTP_EVENT); $$->value.sctp_event = calloc(1, sizeof(struct sctp_event_expr)); - $$->value.sctp_event->se_type = $2; - $$->value.sctp_event->se_on = $4; + $$->value.sctp_event->se_assoc_id = $4; + $$->value.sctp_event->se_type = $6; + $$->value.sctp_event->se_on = $8; } ; @@ -3311,30 +3343,24 @@ snd_context | SND_CONTEXT '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -snd_assoc_id -: SND_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("snd_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SND_ASSOC_ID '=' WORD { - $$ = new_expression(EXPR_WORD); - $$->value.string = $3; -} -| SND_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - - sctp_sndinfo -: '{' snd_sid ',' snd_flags ',' snd_ppid ',' snd_context ',' snd_assoc_id'}' { +: '{' snd_sid ',' snd_flags ',' snd_ppid ',' snd_context ',' SND_ASSOC_ID '=' sctp_assoc_id'}' { $$ = new_expression(EXPR_SCTP_SNDINFO); $$->value.sctp_sndinfo = calloc(1, sizeof(struct sctp_sndinfo_expr)); $$->value.sctp_sndinfo->snd_sid = $2; $$->value.sctp_sndinfo->snd_flags = $4; $$->value.sctp_sndinfo->snd_ppid = $6; $$->value.sctp_sndinfo->snd_context = $8; - $$->value.sctp_sndinfo->snd_assoc_id = $10; + $$->value.sctp_sndinfo->snd_assoc_id = $12; +} +; + +sctp_setprim +: '{' SSP_ASSOC_ID '=' sctp_assoc_id ',' SSP_ADDR '=' sockaddr'}' { + $$ = new_expression(EXPR_SCTP_SETPRIM); + $$->value.sctp_setprim = calloc(1, sizeof(struct sctp_setprim_expr)); + $$->value.sctp_setprim->ssp_assoc_id = $4; + $$->value.sctp_setprim->ssp_addr = $8; } ; @@ -3423,18 +3449,9 @@ sinfo_cumtsn | SINFO_CUMTSN '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -sinfo_assoc_id -: SINFO_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("sinfo_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SINFO_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sctp_sndrcvinfo -: '{' sinfo_stream ',' sinfo_ssn ',' sinfo_flags ',' sinfo_ppid ',' sinfo_context ',' sinfo_timetolive ',' sinfo_tsn ',' sinfo_cumtsn ',' sinfo_assoc_id '}' { +: '{' sinfo_stream ',' sinfo_ssn ',' sinfo_flags ',' sinfo_ppid ',' sinfo_context ',' sinfo_timetolive ',' + sinfo_tsn ',' sinfo_cumtsn ',' SINFO_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_SNDRCVINFO); $$->value.sctp_sndrcvinfo = calloc(1, sizeof(struct sctp_sndrcvinfo_expr)); $$->value.sctp_sndrcvinfo->sinfo_stream = $2; @@ -3445,7 +3462,7 @@ sctp_sndrcvinfo $$->value.sctp_sndrcvinfo->sinfo_timetolive = $12; $$->value.sctp_sndrcvinfo->sinfo_tsn = $14; $$->value.sctp_sndrcvinfo->sinfo_cumtsn = $16; - $$->value.sctp_sndrcvinfo->sinfo_assoc_id = $18; + $$->value.sctp_sndrcvinfo->sinfo_assoc_id = $20; }; sinfo_pr_value @@ -3502,7 +3519,7 @@ serinfo_next_ppid sctp_extrcvinfo : '{' sinfo_stream ',' sinfo_ssn ',' sinfo_flags ',' sinfo_ppid ',' sinfo_context ',' sinfo_pr_value ',' sinfo_tsn ',' sinfo_cumtsn ',' -serinfo_next_flags ',' serinfo_next_stream ',' serinfo_next_aid ',' serinfo_next_length ',' serinfo_next_ppid ',' sinfo_assoc_id '}' { +serinfo_next_flags ',' serinfo_next_stream ',' serinfo_next_aid ',' serinfo_next_length ',' serinfo_next_ppid ',' SINFO_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_EXTRCVINFO); $$->value.sctp_extrcvinfo = calloc(1, sizeof(struct sctp_extrcvinfo_expr)); $$->value.sctp_extrcvinfo->sinfo_stream = $2; @@ -3518,10 +3535,9 @@ serinfo_next_flags ',' serinfo_next_stream ',' serinfo_next_aid ',' serinfo_next $$->value.sctp_extrcvinfo->serinfo_next_aid = $22; $$->value.sctp_extrcvinfo->serinfo_next_length = $24; $$->value.sctp_extrcvinfo->serinfo_next_ppid = $26; - $$->value.sctp_extrcvinfo->sinfo_assoc_id = $28; + $$->value.sctp_extrcvinfo->sinfo_assoc_id = $30; }; - rcv_sid : RCV_SID '=' INTEGER { if (!is_valid_u16($3)) { @@ -3586,19 +3602,8 @@ rcv_context | RCV_CONTEXT '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -rcv_assoc_id -: RCV_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("rcv_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| RCV_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - - sctp_rcvinfo -: '{' rcv_sid ',' rcv_ssn ',' rcv_flags ',' rcv_ppid ',' rcv_tsn ',' rcv_cumtsn ',' rcv_context ',' rcv_assoc_id'}' { +: '{' rcv_sid ',' rcv_ssn ',' rcv_flags ',' rcv_ppid ',' rcv_tsn ',' rcv_cumtsn ',' rcv_context ',' RCV_ASSOC_ID '=' sctp_assoc_id'}' { $$ = new_expression(EXPR_SCTP_RCVINFO); $$->value.sctp_rcvinfo = calloc(1, sizeof(struct sctp_rcvinfo_expr)); $$->value.sctp_rcvinfo->rcv_sid = $2; @@ -3608,7 +3613,7 @@ sctp_rcvinfo $$->value.sctp_rcvinfo->rcv_tsn = $10; $$->value.sctp_rcvinfo->rcv_cumtsn = $12; $$->value.sctp_rcvinfo->rcv_context = $14; - $$->value.sctp_rcvinfo->rcv_assoc_id = $16; + $$->value.sctp_rcvinfo->rcv_assoc_id = $18; } ; @@ -3624,8 +3629,21 @@ pr_policy $$ = new_integer_expression($3, "%hu"); }; +sctp_default_prinfo +: '{' pr_policy ',' PR_VALUE '=' INTEGER ',' PR_ASSOC_ID '=' sctp_assoc_id '}' { + $$ = new_expression(EXPR_SCTP_DEFAULT_PRINFO); + $$->value.sctp_default_prinfo = calloc(1, sizeof(struct sctp_default_prinfo_expr)); + $$->value.sctp_default_prinfo->pr_policy = $2; + if (!is_valid_u32($6)) { + semantic_error("pr_value out of range"); + } + $$->value.sctp_default_prinfo->pr_value = new_integer_expression($6, "%u"); + $$->value.sctp_default_prinfo->pr_assoc_id = $10; +} +; + sctp_prinfo -: '{' pr_policy ',' PR_VALUE '=' INTEGER'}' { +: '{' pr_policy ',' PR_VALUE '=' INTEGER '}' { $$ = new_expression(EXPR_SCTP_PRINFO); $$->value.sctp_prinfo = calloc(1, sizeof(struct sctp_prinfo_expr)); $$->value.sctp_prinfo->pr_policy = $2; @@ -3692,25 +3710,15 @@ nxt_length | NXT_LENGTH '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -nxt_assoc_id -: NXT_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("nxt_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| NXT_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sctp_nxtinfo -: '{' nxt_sid ',' nxt_flags ',' nxt_ppid ',' nxt_length ',' nxt_assoc_id '}' { +: '{' nxt_sid ',' nxt_flags ',' nxt_ppid ',' nxt_length ',' NXT_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_NXTINFO); $$->value.sctp_sendv_spa = calloc(1, sizeof(struct sctp_nxtinfo_expr)); $$->value.sctp_nxtinfo->nxt_sid = $2; $$->value.sctp_nxtinfo->nxt_flags = $4; $$->value.sctp_nxtinfo->nxt_ppid = $6; $$->value.sctp_nxtinfo->nxt_length = $8; - $$->value.sctp_nxtinfo->nxt_assoc_id = $10; + $$->value.sctp_nxtinfo->nxt_assoc_id = $12; } ; @@ -3758,12 +3766,13 @@ sse_length ; sctp_shutdown_event -: '{' sse_type ',' sse_flags ',' sse_length '}' { +: '{' sse_type ',' sse_flags ',' sse_length ',' SSE_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_SHUTDOWN_EVENT); $$->value.sctp_shutdown_event = calloc(1, sizeof(struct sctp_shutdown_event_expr)); $$->value.sctp_shutdown_event->sse_type = $2; $$->value.sctp_shutdown_event->sse_flags = $4; $$->value.sctp_shutdown_event->sse_length = $6; + $$->value.sctp_shutdown_event->sse_assoc_id = $10; }; pdapi_type @@ -3833,18 +3842,8 @@ pdapi_seq | PDAPI_SEQ '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -pdapi_assoc_id -: PDAPI_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("pdapi_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| PDAPI_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sctp_pdapi_event -: '{' pdapi_type',' pdapi_flags ',' pdapi_length ',' pdapi_indication ',' pdapi_stream ',' pdapi_seq ',' pdapi_assoc_id '}' { +: '{' pdapi_type',' pdapi_flags ',' pdapi_length ',' pdapi_indication ',' pdapi_stream ',' pdapi_seq ',' PDAPI_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_PDAPI_EVENT); $$->value.sctp_pdapi_event = calloc(1, sizeof(struct sctp_pdapi_event_expr)); $$->value.sctp_pdapi_event->pdapi_type = $2; @@ -3853,7 +3852,7 @@ sctp_pdapi_event $$->value.sctp_pdapi_event->pdapi_indication = $8; $$->value.sctp_pdapi_event->pdapi_stream = $10; $$->value.sctp_pdapi_event->pdapi_seq = $12; - $$->value.sctp_pdapi_event->pdapi_assoc_id = $14; + $$->value.sctp_pdapi_event->pdapi_assoc_id = $16; } ; @@ -3915,18 +3914,8 @@ auth_indication | AUTH_INDICATION '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -auth_assoc_id -: AUTH_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("auth_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| AUTH_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sctp_authkey_event -: '{' auth_type ',' auth_flags ',' auth_length ',' auth_keynumber ',' auth_indication ',' auth_assoc_id '}' { +: '{' auth_type ',' auth_flags ',' auth_length ',' auth_keynumber ',' auth_indication ',' AUTH_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_AUTHKEY_EVENT); $$->value.sctp_authkey_event = calloc(1, sizeof(struct sctp_authkey_event_expr)); $$->value.sctp_authkey_event->auth_type = $2; @@ -3934,7 +3923,7 @@ sctp_authkey_event $$->value.sctp_authkey_event->auth_length = $6; $$->value.sctp_authkey_event->auth_keynumber = $8; $$->value.sctp_authkey_event->auth_indication = $10; - $$->value.sctp_authkey_event->auth_assoc_id = $12; + $$->value.sctp_authkey_event->auth_assoc_id = $14; } ; @@ -3972,26 +3961,17 @@ sender_dry_length | SENDER_DRY_LENGTH '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -sender_dry_assoc_id -: SENDER_DRY_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("sender_dry_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SENDER_DRY_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sctp_sender_dry_event -: '{'sender_dry_type ',' sender_dry_flags ',' sender_dry_length ',' sender_dry_assoc_id '}' { +: '{'sender_dry_type ',' sender_dry_flags ',' sender_dry_length ',' SENDER_DRY_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_SENDER_DRY_EVENT); $$->value.sctp_sender_dry_event = calloc(1, sizeof(struct sctp_sender_dry_event_expr)); $$->value.sctp_sender_dry_event->sender_dry_type = $2; $$->value.sctp_sender_dry_event->sender_dry_flags = $4; $$->value.sctp_sender_dry_event->sender_dry_length = $6; - $$->value.sctp_sender_dry_event->sender_dry_assoc_id = $8; + $$->value.sctp_sender_dry_event->sender_dry_assoc_id = $10; } ; + ssfe_type : SSFE_TYPE '=' INTEGER { if (!is_valid_u16($3)) { @@ -4040,23 +4020,13 @@ ssfe_error | SSFE_ERROR '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -ssfe_assoc_id -: SSFE_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("ssfe_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SSFE_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - ssfe_data : SSFE_DATA '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } | SSFE_DATA '=' array { $$ = $3; } ; sctp_send_failed_event -: '{' ssfe_type ',' ssfe_flags ',' ssfe_length ',' ssfe_error ',' SSFE_INFO '=' sctp_sndinfo ',' ssfe_assoc_id ',' ssfe_data '}' { +: '{' ssfe_type ',' ssfe_flags ',' ssfe_length ',' ssfe_error ',' SSFE_INFO '=' sctp_sndinfo ',' SSFE_ASSOC_ID '=' sctp_assoc_id ',' ssfe_data '}' { $$ = new_expression(EXPR_SCTP_SEND_FAILED_EVENT); $$->value.sctp_send_failed_event = calloc(1, sizeof(struct sctp_send_failed_event_expr)); $$->value.sctp_send_failed_event->ssfe_type = $2; @@ -4064,8 +4034,8 @@ sctp_send_failed_event $$->value.sctp_send_failed_event->ssfe_length = $6; $$->value.sctp_send_failed_event->ssfe_error = $8; $$->value.sctp_send_failed_event->ssfe_info = $12; - $$->value.sctp_send_failed_event->ssfe_assoc_id = $14; - $$->value.sctp_send_failed_event->ssfe_data = $16; + $$->value.sctp_send_failed_event->ssfe_assoc_id = $16; + $$->value.sctp_send_failed_event->ssfe_data = $18; }; sac_type @@ -4146,16 +4116,6 @@ sac_inbound_streams | SAC_INBOUND_STREAMS '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -sac_assoc_id -: SAC_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("sac_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SAC_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sac_info : SAC_INFO '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } | SAC_INFO '=' array { $$ = $3; } @@ -4163,7 +4123,7 @@ sac_info sctp_assoc_change : '{' sac_type ',' sac_flags ',' sac_length ',' sac_state ',' sac_error ',' sac_outbound_streams ',' -sac_inbound_streams ',' sac_assoc_id ',' sac_info '}' { +sac_inbound_streams ',' SAC_ASSOC_ID '=' sctp_assoc_id ',' sac_info '}' { $$ = new_expression(EXPR_SCTP_ASSOC_CHANGE); $$->value.sctp_assoc_change = calloc(1, sizeof(struct sctp_assoc_change_expr)); $$->value.sctp_assoc_change->sac_type = $2; @@ -4173,8 +4133,8 @@ sac_inbound_streams ',' sac_assoc_id ',' sac_info '}' { $$->value.sctp_assoc_change->sac_error = $10; $$->value.sctp_assoc_change->sac_outbound_streams = $12; $$->value.sctp_assoc_change->sac_inbound_streams = $14; - $$->value.sctp_assoc_change->sac_assoc_id = $16; - $$->value.sctp_assoc_change->sac_info = $18; + $$->value.sctp_assoc_change->sac_assoc_id = $18; + $$->value.sctp_assoc_change->sac_info = $20; } ; @@ -4222,31 +4182,21 @@ sre_error | SRE_ERROR '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -sre_assoc_id -: SRE_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("sre_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SRE_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sre_data : SRE_DATA '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } | SRE_DATA '=' array { $$ = $3; } ; sctp_remote_error -: '{' sre_type ',' sre_flags ',' sre_length ',' sre_error ',' sre_assoc_id ',' sre_data '}' { +: '{' sre_type ',' sre_flags ',' sre_length ',' sre_error ',' SRE_ASSOC_ID '=' sctp_assoc_id ',' sre_data '}' { $$ = new_expression(EXPR_SCTP_REMOTE_ERROR); $$->value.sctp_remote_error = calloc(1, sizeof(struct sctp_remote_error_expr)); $$->value.sctp_remote_error->sre_type = $2; $$->value.sctp_remote_error->sre_flags = $4; $$->value.sctp_remote_error->sre_length = $6; $$->value.sctp_remote_error->sre_error = $8; - $$->value.sctp_remote_error->sre_assoc_id = $10; - $$->value.sctp_remote_error->sre_data = $12; + $$->value.sctp_remote_error->sre_assoc_id = $12; + $$->value.sctp_remote_error->sre_data = $14; } ; @@ -4317,18 +4267,8 @@ spc_error | SPC_ERROR '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -spc_assoc_id -: SPC_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("spc_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SPC_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sctp_paddr_change -: '{' spc_type ',' spc_flags ',' spc_length ',' spc_aaddr ',' spc_state ',' spc_error ',' spc_assoc_id '}' { +: '{' spc_type ',' spc_flags ',' spc_length ',' spc_aaddr ',' spc_state ',' spc_error ',' SPC_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_PADDR_CHANGE); $$->value.sctp_paddr_change = calloc(1, sizeof(struct sctp_paddr_change_expr)); $$->value.sctp_paddr_change->spc_type = $2; @@ -4337,7 +4277,7 @@ sctp_paddr_change $$->value.sctp_paddr_change->spc_aaddr = $8; $$->value.sctp_paddr_change->spc_state = $10; $$->value.sctp_paddr_change->spc_error = $12; - $$->value.sctp_paddr_change->spc_assoc_id = $14; + $$->value.sctp_paddr_change->spc_assoc_id = $16; } ; ssf_type @@ -4397,23 +4337,13 @@ ssf_info | SSF_INFO '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -ssf_assoc_id -: SSF_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("ssf_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SSF_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - ssf_data : SSF_DATA '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } | SSF_DATA '=' array { $$ = $3; } ; sctp_send_failed -: '{' ssf_type ',' ssf_flags ',' ssf_length ',' ssf_error ',' ssf_info ',' ssf_assoc_id ',' ssf_data '}' { +: '{' ssf_type ',' ssf_flags ',' ssf_length ',' ssf_error ',' ssf_info ',' SSF_ASSOC_ID '=' sctp_assoc_id ',' ssf_data '}' { $$ = new_expression(EXPR_SCTP_SEND_FAILED); $$->value.sctp_send_failed = calloc(1, sizeof(struct sctp_send_failed_expr)); $$->value.sctp_send_failed->ssf_type = $2; @@ -4421,8 +4351,8 @@ sctp_send_failed $$->value.sctp_send_failed->ssf_length = $6; $$->value.sctp_send_failed->ssf_error = $8; $$->value.sctp_send_failed->ssf_info = $10; - $$->value.sctp_send_failed->ssf_assoc_id = $12; - $$->value.sctp_send_failed->ssf_data = $14; + $$->value.sctp_send_failed->ssf_assoc_id = $14; + $$->value.sctp_send_failed->ssf_data = $16; } ; @@ -4470,25 +4400,15 @@ sai_adaptation_ind | SAI_ADAPTATION_IND '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; -sai_assoc_id -: SAI_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("sai_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SAI_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sctp_adaptation_event -: '{' sai_type ',' sai_flags ',' sai_length ',' sai_adaptation_ind ',' sai_assoc_id '}' { +: '{' sai_type ',' sai_flags ',' sai_length ',' sai_adaptation_ind ',' SAI_ASSOC_ID '=' sctp_assoc_id '}' { $$ = new_expression(EXPR_SCTP_ADAPTATION_EVENT); $$->value.sctp_adaptation_event = calloc(1, sizeof(struct sctp_adaptation_event_expr)); $$->value.sctp_adaptation_event->sai_type = $2; $$->value.sctp_adaptation_event->sai_flags = $4; $$->value.sctp_adaptation_event->sai_length = $6; $$->value.sctp_adaptation_event->sai_adaptation_ind = $8; - $$->value.sctp_adaptation_event->sai_assoc_id = $10; + $$->value.sctp_adaptation_event->sai_assoc_id = $12; } ; diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 7403cc711344cc476b5e5a9e3639f708ba87488e..017b7ee7baef599ebc8b858243e1d73ec38b524e 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -269,6 +269,31 @@ static int get_size_t(struct expression *expression, } #endif +#if defined(linux) || defined(__FreeBSD__) +/* Sets the value from the expression argument, checking that it is a + * valid sctp_assoc_t, and matches the expected type. Returns STATUS_OK on + * success; on failure returns STATUS_ERR and sets error message. + */ +static int get_sctp_assoc_t(struct expression *expression, + sctp_assoc_t *value, char **error) +{ + if (expression->type == EXPR_ELLIPSIS) { + value = 0; + } else { + if (check_type(expression, EXPR_INTEGER, error)) + return STATUS_ERR; + if (expression->value.num < 0) { + asprintf(error, + "Value out of range for sctp_assoc_t: %lld", + expression->value.num); + return STATUS_ERR; + } + *value = expression->value.num; + } + return STATUS_OK; +} +#endif + /* Sets the value from the expression argument, checking that it is a * valid u32, and matches the expected type. Returns STATUS_OK on * success; on failure returns STATUS_ERR and sets error message. @@ -639,6 +664,23 @@ int check_u32_expr(struct expression *expr, u32 value, char *val_name, char **er return STATUS_OK; } +#if defined(__FreeBSD__) || defined(linux) +int check_sctp_assoc_t_expr(struct expression *expr, sctp_assoc_t value, char *val_name, char **error) { + if (expr->type != EXPR_ELLIPSIS) { + sctp_assoc_t script_val; + + if (get_sctp_assoc_t(expr, &script_val, error)) { + return STATUS_ERR; + } + if (script_val != value) { + asprintf(error, "%s: expected: %u actual: %u", val_name, script_val, value); + return STATUS_ERR; + } + } + return STATUS_OK; +} +#endif + int check_socklen_t_expr(struct expression *expr, socklen_t value, char *val_name, char **error) { if (expr->type != EXPR_ELLIPSIS) { socklen_t script_val; @@ -2488,6 +2530,9 @@ static int check_linger(struct linger_expr *expr, static int check_sctp_rtoinfo(struct sctp_rtoinfo_expr *expr, struct sctp_rtoinfo *sctp_rtoinfo, char **error) { + if (check_sctp_assoc_t_expr(expr->srto_assoc_id, sctp_rtoinfo->srto_assoc_id, + "sctp_rtoinfo.srto_assoc_id", error)) + return STATUS_ERR; if (check_u32_expr(expr->srto_initial, sctp_rtoinfo->srto_initial, "sctp_rtoinfo.srto_initial", error)) return STATUS_ERR; @@ -2528,6 +2573,9 @@ static int check_sctp_sack_info(struct sctp_sack_info_expr *expr, struct sctp_sack_info *sctp_sack_info, char **error) { + if (check_sctp_assoc_t_expr(expr->sack_assoc_id, sctp_sack_info->sack_assoc_id, + "sctp_sack_info.sack_assoc_id", error)) + return STATUS_ERR; if (check_u32_expr(expr->sack_delay, sctp_sack_info->sack_delay, "sctp_sack_info.sack_delay", error)) return STATUS_ERR; @@ -2544,6 +2592,9 @@ static int check_sctp_paddrinfo(struct sctp_paddrinfo_expr *expr, struct sctp_paddrinfo *sctp_paddrinfo, char **error) { + if (check_sctp_assoc_t_expr(expr->spinfo_assoc_id, sctp_paddrinfo->spinfo_assoc_id, + "sctp_paddrinfo.spinfo_assoc_id", error)) + return STATUS_ERR; if (check_s32_expr(expr->spinfo_state, sctp_paddrinfo->spinfo_state, "sctp_paddrinfo.spinfo_state", error)) return STATUS_ERR; @@ -2569,6 +2620,9 @@ static int check_sctp_status(struct sctp_status_expr *expr, struct sctp_status *sctp_status, char **error) { + if (check_sctp_assoc_t_expr(expr->sstat_assoc_id, sctp_status->sstat_assoc_id, + "sctp_status.sstat_assoc_id", error)) + return STATUS_ERR; if (check_s32_expr(expr->sstat_state, sctp_status->sstat_state, "sctp_status.sstat_state", error)) return STATUS_ERR; @@ -2647,6 +2701,9 @@ static int check_sctp_assoc_value(struct sctp_assoc_value_expr *expr, struct sctp_assoc_value *sctp_assoc_value, char **error) { + if (check_sctp_assoc_t_expr(expr->assoc_id, sctp_assoc_value->assoc_id, + "sctp_assoc_value.assoc_id", error)) + return STATUS_ERR; if (check_u16_expr(expr->assoc_value, sctp_assoc_value->assoc_value, "sctp_assoc_value.stream_id", error)) return STATUS_ERR; @@ -2676,6 +2733,9 @@ static int check_sctp_assocparams(struct sctp_assocparams_expr *expr, struct sctp_assocparams *sctp_assocparams, char **error) { + if (check_sctp_assoc_t_expr(expr->sasoc_assoc_id, sctp_assocparams->sasoc_assoc_id, + "sctp_assocparams.sasoc_assoc_id", error)) + return STATUS_ERR; if (check_u16_expr(expr->sasoc_asocmaxrxt, sctp_assocparams->sasoc_asocmaxrxt, "sctp_assocparams.sasoc_asocmaxrxt", error)) return STATUS_ERR; @@ -2701,6 +2761,9 @@ static int check_sctp_event(struct sctp_event_expr *expr, struct sctp_event *sctp_event, char **error) { + if (check_sctp_assoc_t_expr(expr->se_assoc_id, sctp_event->se_assoc_id, + "sctp_event.se_assoc_id", error)) + return STATUS_ERR; if (check_u16_expr(expr->se_type, sctp_event->se_type, "sctp_event.se_type", error)) return STATUS_ERR; @@ -2778,8 +2841,41 @@ static int check_sctp_sndinfo(struct sctp_sndinfo_expr *expr, if (check_u32_expr(expr->snd_context, sctp_sndinfo->snd_context, "sctp_sndinfo.snd_context", error)) return STATUS_ERR; - if (check_u32_expr(expr->snd_assoc_id, sctp_sndinfo->snd_assoc_id, - "sctp_sndinfo.snd_assoc_id", error)) + if (check_sctp_assoc_t_expr(expr->snd_assoc_id, sctp_sndinfo->snd_assoc_id, + "sctp_sndinfo.snd_assoc_id", error)) + return STATUS_ERR; + + return STATUS_OK; +} +#endif +#ifdef SCTP_DEFAULT_PRINFO +static int check_sctp_default_prinfo(struct sctp_default_prinfo_expr *expr, + struct sctp_default_prinfo *info, + char **error) +{ + if (check_sctp_assoc_t_expr(expr->pr_assoc_id, info->pr_assoc_id, + "sctp_default_prinfo.pr_assoc_id", error)) + return STATUS_ERR; + if (check_u16_expr(expr->pr_policy, info->pr_policy, + "sctp_default_prinfo.pr_policy", error)) + return STATUS_ERR; + if (check_u32_expr(expr->pr_value, info->pr_value, + "sctp_default_prinfo.pr_value", error)) + return STATUS_ERR; + + return STATUS_OK; +} +#endif + +#ifdef SCTP_PRIMARY_ADDR +static int check_sctp_setprim(struct sctp_setprim_expr *expr, + struct sctp_setprim *sctp_setprim, + char **error) +{ + if (check_sctp_assoc_t_expr(expr->ssp_assoc_id, sctp_setprim->ssp_assoc_id, + "sctp_setprim.ssp_assoc_id", error)) + return STATUS_ERR; + if (check_sockaddr(expr->ssp_addr, (struct sockaddr *)&sctp_setprim->ssp_addr, error)) return STATUS_ERR; return STATUS_OK; @@ -2835,14 +2931,24 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, case EXPR_SCTP_RTOINFO: live_optval = malloc(sizeof(struct sctp_rtoinfo)); live_optlen = (socklen_t)sizeof(struct sctp_rtoinfo); - ((struct sctp_rtoinfo*)live_optval)->srto_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_rtoinfo->srto_assoc_id, + &((struct sctp_rtoinfo*)live_optval)->srto_assoc_id, + error)) { + free(live_optval); + return STATUS_ERR; + } break; #endif #ifdef SCTP_ASSOCINFO case EXPR_SCTP_ASSOCPARAMS: live_optval = malloc(sizeof(struct sctp_assocparams)); live_optlen = (socklen_t)sizeof(struct sctp_assocparams); - ((struct sctp_assocparams*) live_optval)->sasoc_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_assocparams->sasoc_assoc_id, + &((struct sctp_assocparams*) live_optval)->sasoc_assoc_id, + error)) { + free(live_optval); + return STATUS_ERR; + } break; #endif #ifdef SCTP_INITMSG @@ -2855,23 +2961,37 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, case EXPR_SCTP_SACKINFO: live_optval = malloc(sizeof(struct sctp_sack_info)); live_optlen = (socklen_t)sizeof(struct sctp_sack_info); - ((struct sctp_sack_info*) live_optval)->sack_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_sack_info->sack_assoc_id, + &((struct sctp_sack_info*) live_optval)->sack_assoc_id, + error)) { + free(live_optval); + return STATUS_ERR; + } break; #endif #ifdef SCTP_STATUS case EXPR_SCTP_STATUS: live_optval = malloc(sizeof(struct sctp_status)); - live_optlen = (socklen_t)sizeof(struct sctp_status); - ((struct sctp_status*) live_optval)->sstat_assoc_id = 0; + live_optlen = (socklen_t) sizeof(struct sctp_status); + if (get_sctp_assoc_t(val_expression->value.sctp_status->sstat_assoc_id, + &((struct sctp_status*) live_optval)->sstat_assoc_id, + error)) { + free(live_optval); + return STATUS_ERR; + } break; #endif #ifdef SCTP_GET_PEER_ADDR_INFO case EXPR_SCTP_PADDRINFO: { struct sctp_paddrinfo_expr *expr_paddrinfo = val_expression->value.sctp_paddrinfo; struct sctp_paddrinfo *live_paddrinfo = malloc(sizeof(struct sctp_paddrinfo)); - live_optlen = (socklen_t)sizeof(struct sctp_paddrinfo); + live_optlen = (socklen_t) sizeof(struct sctp_paddrinfo); memset(live_paddrinfo, 0, sizeof(struct sctp_paddrinfo)); - live_paddrinfo->spinfo_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_paddrinfo->spinfo_assoc_id, + &(live_paddrinfo->spinfo_assoc_id), error)) { + free(live_paddrinfo); + return STATUS_ERR; + } if (get_sockstorage_arg(expr_paddrinfo->spinfo_address, &(live_paddrinfo->spinfo_address), live_fd)) { asprintf(error, "can't determine spinfo_address"); @@ -2888,13 +3008,15 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, struct sctp_paddrparams *live_params = malloc(sizeof(struct sctp_paddrparams)); memset(live_params, 0, sizeof(struct sctp_paddrparams)); live_optlen = sizeof(struct sctp_paddrparams); - if (get_sockstorage_arg(expr_params->spp_address, &live_params->spp_address, - live_fd)) { + if (get_sockstorage_arg(expr_params->spp_address, &live_params->spp_address, live_fd)) { asprintf(error, "can't determine spp_address"); free(live_params); return STATUS_ERR; } - live_params->spp_assoc_id = 0; + if (get_sctp_assoc_t(expr_params->spp_assoc_id, &live_params->spp_assoc_id, error)) { + free(live_params); + return STATUS_ERR; + } live_optval = live_params; break; } @@ -2903,7 +3025,11 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, case EXPR_SCTP_ASSOC_VALUE: live_optval = malloc(sizeof(struct sctp_assoc_value)); live_optlen = (socklen_t)sizeof(struct sctp_assoc_value); - ((struct sctp_assoc_value *) live_optval)->assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_assoc_value->assoc_id, + &((struct sctp_assoc_value *) live_optval)->assoc_id, error)) { + free(live_optval); + return STATUS_ERR; + } break; #endif #ifdef SCTP_SS_VALUE @@ -2923,7 +3049,12 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, case EXPR_SCTP_EVENT: live_optval = malloc(sizeof(struct sctp_event)); live_optlen = sizeof(struct sctp_event); - ((struct sctp_event *)live_optval)->se_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_event->se_assoc_id, + &((struct sctp_event *)live_optval)->se_assoc_id, + error)) { + free(live_optval); + return STATUS_ERR; + } if (get_u16(val_expression->value.sctp_event->se_type, &((struct sctp_event *)live_optval)->se_type, error)) { @@ -2942,9 +3073,33 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, case EXPR_SCTP_SNDINFO: live_optval = malloc(sizeof(struct sctp_sndinfo)); live_optlen = sizeof(struct sctp_sndinfo); - if (get_u32(val_expression->value.sctp_sndinfo->snd_assoc_id, - &((struct sctp_sndinfo *)live_optval)->snd_assoc_id, - error)) { + if (get_sctp_assoc_t(val_expression->value.sctp_sndinfo->snd_assoc_id, + &((struct sctp_sndinfo *)live_optval)->snd_assoc_id, + error)) { + free(live_optval); + return STATUS_ERR; + } + break; +#endif +#ifdef SCTP_DEFAULT_PRINFO + case EXPR_SCTP_DEFAULT_PRINFO: + live_optval = malloc(sizeof(struct sctp_default_prinfo)); + live_optlen = sizeof(struct sctp_default_prinfo); + if (get_sctp_assoc_t(val_expression->value.sctp_default_prinfo->pr_assoc_id, + &((struct sctp_default_prinfo *)live_optval)->pr_assoc_id, + error)) { + free(live_optval); + return STATUS_ERR; + } + break; +#endif +#ifdef SCTP_PRIMARY_ADDR + case EXPR_SCTP_SETPRIM: + live_optval = malloc(sizeof(struct sctp_setprim)); + live_optlen = sizeof(struct sctp_setprim); + if (get_sctp_assoc_t(val_expression->value.sctp_setprim->ssp_assoc_id, + &((struct sctp_setprim *)live_optval)->ssp_assoc_id, + error)) { free(live_optval); return STATUS_ERR; } @@ -3047,6 +3202,16 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, result = check_sctp_sndinfo(val_expression->value.sctp_sndinfo, live_optval, error); break; #endif +#ifdef SCTP_DEFAULT_PRINFO + case EXPR_SCTP_DEFAULT_PRINFO: + result = check_sctp_default_prinfo(val_expression->value.sctp_default_prinfo, live_optval, error); + break; +#endif +#ifdef SCTP_PRIMARY_ADDR + case EXPR_SCTP_SETPRIM: + result = check_sctp_setprim(val_expression->value.sctp_setprim, live_optval, error); + break; +#endif #ifdef SCTP_ADAPTATION_LAYER case EXPR_SCTP_SETADAPTATION: result = check_sctp_setadaptation(val_expression->value.sctp_setadaptation, live_optval, error); @@ -3108,6 +3273,12 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #ifdef SCTP_DEFAULT_SNDINFO struct sctp_sndinfo sndinfo; #endif +#ifdef SCTP_DEFAULT_PRINFO + struct sctp_default_prinfo default_prinfo; +#endif +#ifdef SCTP_PRIMARY_ADDR + struct sctp_setprim setprim; +#endif #ifdef SCTP_ADAPTATION_LAYER struct sctp_setadaptation setadaptation; #endif @@ -3152,7 +3323,10 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, break; #ifdef SCTP_RTOINFO case EXPR_SCTP_RTOINFO: - rtoinfo.srto_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_rtoinfo->srto_assoc_id, + &rtoinfo.srto_assoc_id, error)) { + return STATUS_ERR; + } if (get_u32(val_expression->value.sctp_rtoinfo->srto_initial, &rtoinfo.srto_initial, error)) { return STATUS_ERR; @@ -3170,7 +3344,10 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #endif #ifdef SCTP_ASSOCINFO case EXPR_SCTP_ASSOCPARAMS: - assocparams.sasoc_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_assocparams->sasoc_assoc_id, + &assocparams.sasoc_assoc_id, error)) { + return STATUS_ERR; + } if (get_u16(val_expression->value.sctp_assocparams->sasoc_asocmaxrxt, &assocparams.sasoc_asocmaxrxt, error)) { return STATUS_ERR; @@ -3204,7 +3381,10 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #endif #if defined(SCTP_MAXSEG) || defined(SCTP_MAX_BURST) || defined(SCTP_INTERLEAVING_SUPPORTED) case EXPR_SCTP_ASSOC_VALUE: - assoc_value.assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_assoc_value->assoc_id, + &assoc_value.assoc_id, error)) { + return STATUS_ERR; + } if (get_u32(val_expression->value.sctp_assoc_value->assoc_value, &assoc_value.assoc_value, error)) { return STATUS_ERR; @@ -3228,7 +3408,10 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #endif #ifdef SCTP_DELAYED_SACK case EXPR_SCTP_SACKINFO: - sack_info.sack_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_sack_info->sack_assoc_id, + &sack_info.sack_assoc_id, error)) { + return STATUS_ERR; + } if (get_u32(val_expression->value.sctp_sack_info->sack_delay, &sack_info.sack_delay, error)) { return STATUS_ERR; @@ -3242,13 +3425,19 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #endif #ifdef SCTP_STATUS case EXPR_SCTP_STATUS: - status.sstat_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_status->sstat_assoc_id, + &status.sstat_assoc_id, error)) { + return STATUS_ERR; + } optval = &status; break; #endif #ifdef SCTP_GET_PEER_ADDR_INFO case EXPR_SCTP_PADDRINFO: - paddrinfo.spinfo_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_paddrinfo->spinfo_assoc_id, + &paddrinfo.spinfo_assoc_id, error)) { + return STATUS_ERR; + } if (get_sockstorage_arg(val_expression->value.sctp_paddrinfo->spinfo_address, &paddrinfo.spinfo_address, live_fd)) { asprintf(error, "can't determine spp_address"); @@ -3259,7 +3448,10 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #endif #ifdef SCTP_EVENT case EXPR_SCTP_EVENT: - event.se_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_event->se_assoc_id, + &event.se_assoc_id, error)) { + return STATUS_ERR; + } if (get_u16(val_expression->value.sctp_event->se_type, &event.se_type, error)) { return STATUS_ERR; @@ -3334,13 +3526,43 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, &sndinfo.snd_context, error)) { return STATUS_ERR; } - if (get_u32(val_expression->value.sctp_sndinfo->snd_assoc_id, - &sndinfo.snd_assoc_id, error)) { + if (get_sctp_assoc_t(val_expression->value.sctp_sndinfo->snd_assoc_id, + &sndinfo.snd_assoc_id, error)) { return STATUS_ERR; } optval = &sndinfo; break; #endif +#ifdef SCTP_DEFAULT_PRINFO + case EXPR_SCTP_DEFAULT_PRINFO: + if (get_u16(val_expression->value.sctp_default_prinfo->pr_policy, + &default_prinfo.pr_policy, error)) { + return STATUS_ERR; + } + if (get_u32(val_expression->value.sctp_default_prinfo->pr_value, + &default_prinfo.pr_value, error)) { + return STATUS_ERR; + } + if (get_sctp_assoc_t(val_expression->value.sctp_default_prinfo->pr_assoc_id, + &default_prinfo.pr_assoc_id, error)) { + return STATUS_ERR; + } + optval = &default_prinfo; + break; +#endif +#ifdef SCTP_PRIMARY_ADDR + case EXPR_SCTP_SETPRIM: + if (get_sctp_assoc_t(val_expression->value.sctp_setprim->ssp_assoc_id, + &setprim.ssp_assoc_id, error)) { + return STATUS_ERR; + } + if (get_sockstorage_arg(val_expression->value.sctp_setprim->ssp_addr, + &setprim.ssp_addr, live_fd)) { + return STATUS_ERR; + } + optval = &setprim; + break; +#endif #ifdef SCTP_ADAPTATION_LAYER case EXPR_SCTP_SETADAPTATION: if (get_u32(val_expression->value.sctp_setadaptation->ssb_adaptation_ind, @@ -3352,7 +3574,10 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #endif #ifdef SCTP_PEER_ADDR_PARAMS case EXPR_SCTP_PEER_ADDR_PARAMS: - paddrparams.spp_assoc_id = 0; + if (get_sctp_assoc_t(val_expression->value.sctp_paddrparams->spp_assoc_id, + &paddrparams.spp_assoc_id, error)) { + return STATUS_ERR; + } if (get_sockstorage_arg(val_expression->value.sctp_paddrparams->spp_address, &paddrparams.spp_address, live_fd)) { asprintf(error, "can't determine spp_address"); @@ -3578,8 +3803,8 @@ static int check_sctp_sndrcvinfo(struct sctp_sndrcvinfo_expr *expr, if (check_u32_expr(expr->sinfo_cumtsn, sctp_sndrcvinfo->sinfo_cumtsn, "sctp_sndrcvinfo.sinfo_cumtsn", error)) return STATUS_ERR; - if (check_u32_expr(expr->sinfo_assoc_id, sctp_sndrcvinfo->sinfo_assoc_id, - "sctp_sndrcvinfo.sinfo_assoc_id", error)) + if (check_sctp_assoc_t_expr(expr->sinfo_assoc_id, sctp_sndrcvinfo->sinfo_assoc_id, + "sctp_sndrcvinfo.sinfo_assoc_id", error)) return STATUS_ERR; return STATUS_OK; @@ -3653,8 +3878,8 @@ static int check_sctp_extrcvinfo(struct sctp_extrcvinfo_expr *expr, "sctp_extrcvinfo.serinfo_next_ppid", error)) return STATUS_ERR; #endif - if (check_u32_expr(expr->sinfo_assoc_id, sctp_extrcvinfo->sinfo_assoc_id, - "sctp_extrcvinfo.sinfo_assoc_id", error)) + if (check_sctp_assoc_t_expr(expr->sinfo_assoc_id, sctp_extrcvinfo->sinfo_assoc_id, + "sctp_extrcvinfo.sinfo_assoc_id", error)) return STATUS_ERR; return STATUS_OK; @@ -3862,7 +4087,7 @@ static int parse_expression_to_sctp_sndrcvinfo(struct expression *expr, info->sinfo_assoc_id = 0; } } else { - if (get_u32(sndrcvinfo_expr->sinfo_assoc_id, (u32 *)&info->sinfo_assoc_id, error)) { + if (get_sctp_assoc_t(sndrcvinfo_expr->sinfo_assoc_id, &info->sinfo_assoc_id, error)) { return STATUS_ERR; } } @@ -3889,7 +4114,7 @@ static int parse_expression_to_sctp_sndinfo(struct expression *expr, struct sctp if (get_u32(sndinfo_expr->snd_context, &info->snd_context, error)) { return STATUS_ERR; } - if (get_u32(sndinfo_expr->snd_assoc_id, &info->snd_assoc_id, error)) { + if (get_sctp_assoc_t(sndinfo_expr->snd_assoc_id, &info->snd_assoc_id, error)) { return STATUS_ERR; } } else { @@ -4266,8 +4491,8 @@ static int check_sctp_rcvinfo(struct sctp_rcvinfo_expr *expr, if (check_u32_expr(expr->rcv_context, sctp_rcvinfo->rcv_context, "sctp_rcvinfo.rcv_context", error)) return STATUS_ERR; - if (check_u32_expr(expr->rcv_assoc_id, sctp_rcvinfo->rcv_assoc_id, - "sctp_rcvinfo.rcv_assoc_id", error)) + if (check_sctp_assoc_t_expr(expr->rcv_assoc_id, sctp_rcvinfo->rcv_assoc_id, + "sctp_rcvinfo.rcv_assoc_id", error)) return STATUS_ERR; return STATUS_OK; @@ -4279,15 +4504,20 @@ static int check_sctp_nxtinfo(struct sctp_nxtinfo_expr *expr, struct sctp_nxtinfo *sctp_nxtinfo, char **error) { - if (check_u16_expr(expr->nxt_sid, sctp_nxtinfo->nxt_sid, "sctp_nxtinfo.nxt_sid", error)) + if (check_u16_expr(expr->nxt_sid, sctp_nxtinfo->nxt_sid, + "sctp_nxtinfo.nxt_sid", error)) return STATUS_ERR; - if (check_u16_expr(expr->nxt_flags, sctp_nxtinfo->nxt_flags, "sctp_nxtinfo.nxt_flags", error)) + if (check_u16_expr(expr->nxt_flags, sctp_nxtinfo->nxt_flags, + "sctp_nxtinfo.nxt_flags", error)) return STATUS_ERR; - if (check_u32_hton_expr(expr->nxt_ppid, sctp_nxtinfo->nxt_ppid, "sctp_nxtinfo.nxt_ppid", error)) + if (check_u32_hton_expr(expr->nxt_ppid, sctp_nxtinfo->nxt_ppid, + "sctp_nxtinfo.nxt_ppid", error)) return STATUS_ERR; - if (check_u32_expr(expr->nxt_length, sctp_nxtinfo->nxt_length, "sctp_nxtinfo.nxt_length", error)) + if (check_u32_expr(expr->nxt_length, sctp_nxtinfo->nxt_length, + "sctp_nxtinfo.nxt_length", error)) return STATUS_ERR; - if (check_u32_expr(expr->nxt_assoc_id, sctp_nxtinfo->nxt_assoc_id, "sctp_nxtinfo.nxt_assoc_id", error)) + if (check_sctp_assoc_t_expr(expr->nxt_assoc_id, sctp_nxtinfo->nxt_assoc_id, + "sctp_nxtinfo.nxt_assoc_id", error)) return STATUS_ERR; return STATUS_OK; @@ -4319,7 +4549,7 @@ static int check_sctp_assoc_change(struct sctp_assoc_change_expr *expr, if (check_u16_expr(expr->sac_inbound_streams, sctp_event->sac_inbound_streams, "sctp_assoc_change.sac_inbound_streams", error)) return STATUS_ERR; - if (check_u32_expr(expr->sac_assoc_id, sctp_event->sac_assoc_id, + if (check_sctp_assoc_t_expr(expr->sac_assoc_id, sctp_event->sac_assoc_id, "sctp_assoc_change.sac_assoc_id", error)) return STATUS_ERR; if (check_u8array_expr(expr->sac_info, sctp_event->sac_info, sctp_event->sac_length - sizeof(struct sctp_assoc_change), @@ -4352,7 +4582,7 @@ static int check_sctp_paddr_change(struct sctp_paddr_change_expr *expr, if (check_u32_expr(expr->spc_error, sctp_event->spc_error, "sctp_paddr_change.spc_error", error)) return STATUS_ERR; - if (check_u32_expr(expr->spc_assoc_id, sctp_event->spc_assoc_id, + if (check_sctp_assoc_t_expr(expr->spc_assoc_id, sctp_event->spc_assoc_id, "sctp_paddr_change.spc_assoc_id", error)) return STATUS_ERR; @@ -4376,7 +4606,7 @@ static int check_sctp_remote_error(struct sctp_remote_error_expr *expr, if (check_u16_expr(expr->sre_error, sctp_event->sre_error, "sctp_remote_error.sre_error", error)) return STATUS_ERR; - if (check_u32_expr(expr->sre_assoc_id, sctp_event->sre_assoc_id, + if (check_sctp_assoc_t_expr(expr->sre_assoc_id, sctp_event->sre_assoc_id, "sctp_remote_error.sre_assoc_id", error)) return STATUS_ERR; if (check_u8array_expr(expr->sre_data, sctp_event->sre_data, sctp_event->sre_length - sizeof(struct sctp_remote_error), @@ -4409,7 +4639,7 @@ static int check_sctp_send_failed(struct sctp_send_failed_expr *expr, &sctp_event->ssf_info, error)) return STATUS_ERR; } - if (check_u32_expr(expr->ssf_assoc_id, sctp_event->ssf_assoc_id, + if (check_sctp_assoc_t_expr(expr->ssf_assoc_id, sctp_event->ssf_assoc_id, "sctp_send_failed.ssf_assoc_id", error)) return STATUS_ERR; if (check_u8array_expr(expr->ssf_data, sctp_event->ssf_data, sctp_event->ssf_length - sizeof(struct sctp_send_failed), @@ -4434,6 +4664,9 @@ static int check_sctp_shutdown_event(struct sctp_shutdown_event_expr *expr, if (check_u32_expr(expr->sse_length, sctp_event->sse_length, "sctp_shutdown_event.sse_length", error)) return STATUS_ERR; + if (check_sctp_assoc_t_expr(expr->sse_assoc_id, sctp_event->sse_assoc_id, + "sctp_shutdown_event.sse_assoc_id", error)) + return STATUS_ERR; return STATUS_OK; } @@ -4456,7 +4689,7 @@ static int check_sctp_adaptation_event(struct sctp_adaptation_event_expr *expr, if (check_u32_expr(expr->sai_adaptation_ind, sctp_event->sai_adaptation_ind, "sctp_adaptation_event.sai_adaptation_ind", error)) return STATUS_ERR; - if (check_u32_expr(expr->sai_assoc_id, sctp_event->sai_assoc_id, + if (check_sctp_assoc_t_expr(expr->sai_assoc_id, sctp_event->sai_assoc_id, "sctp_adaptation_event.sai_assoc_id", error)) return STATUS_ERR; @@ -4501,7 +4734,7 @@ static int check_sctp_pdapi_event(struct sctp_pdapi_event_expr *expr, "sctp_pdapi_event.pdapi_seq", error)) return STATUS_ERR; #endif - if (check_u32_expr(expr->pdapi_assoc_id, sctp_event->pdapi_assoc_id, + if (check_sctp_assoc_t_expr(expr->pdapi_assoc_id, sctp_event->pdapi_assoc_id, "sctp_pdapi_event.pdapi_assoc_id", error)) return STATUS_ERR; @@ -4529,7 +4762,7 @@ static int check_sctp_authkey_event(struct sctp_authkey_event_expr *expr, if (check_u32_expr(expr->auth_indication, sctp_event->auth_indication, "sctp_authkey_event.auth_indication", error)) return STATUS_ERR; - if (check_u32_expr(expr->auth_assoc_id, sctp_event->auth_assoc_id, + if (check_sctp_assoc_t_expr(expr->auth_assoc_id, sctp_event->auth_assoc_id, "sctp_authkey_event.auth_assoc_id", error)) return STATUS_ERR; @@ -4551,7 +4784,7 @@ static int check_sctp_sender_dry_event(struct sctp_sender_dry_event_expr *expr, if (check_u32_expr(expr->sender_dry_length, sctp_event->sender_dry_length, "sctp_sender_dry.sender_dry_length", error)) return STATUS_ERR; - if (check_u32_expr(expr->sender_dry_assoc_id, sctp_event->sender_dry_assoc_id, + if (check_sctp_assoc_t_expr(expr->sender_dry_assoc_id, sctp_event->sender_dry_assoc_id, "sctp_sender_dry.sender_dry_assoc_id", error)) return STATUS_ERR; @@ -4579,7 +4812,7 @@ static int check_sctp_send_failed_event(struct sctp_send_failed_event_expr *expr if (check_sctp_sndinfo(expr->ssfe_info->value.sctp_sndinfo, &sctp_event->ssfe_info, error)) return STATUS_ERR; } - if (check_u32_expr(expr->ssfe_assoc_id, sctp_event->ssfe_assoc_id, + if (check_sctp_assoc_t_expr(expr->ssfe_assoc_id, sctp_event->ssfe_assoc_id, "sctp_send_failed.ssfe_assoc_id", error)) return STATUS_ERR; if (check_u8array_expr(expr->ssfe_data, sctp_event->ssfe_data, @@ -4964,7 +5197,7 @@ static int syscall_sctp_connectx(struct state *state, struct syscall_spec *sysca if (check_arg_count(assoc_expr->value.list, 1, error)) return STATUS_ERR; assoc_expr = get_arg(assoc_expr->value.list, 0, error); - if (check_u32_expr(assoc_expr, (u32)live_associd, + if (check_sctp_assoc_t_expr(assoc_expr, live_associd, "sctp_connectx assoc_id", error)) return STATUS_ERR; @@ -4991,7 +5224,7 @@ static int syscall_sctp_peeloff(struct state *state, struct syscall_spec *syscal if (to_live_fd(state, script_fd, &live_fd, error)) return STATUS_ERR; expr_assoc = get_arg(args, 1, error); - if (get_u32(expr_assoc, (u32 *)&assoc_id, error)) + if (get_sctp_assoc_t(expr_assoc, &assoc_id, error)) return STATUS_ERR; //check connection Type and set assoc_id if one-to-many style socket @@ -5038,7 +5271,7 @@ static int syscall_sctp_getpaddrs(struct state *state, struct syscall_spec *sysc if (to_live_fd(state, script_fd, &live_fd, error)) return STATUS_ERR; assoc_expr = get_arg(args, 1, error); - if (get_u32(assoc_expr, (u32 *)&assoc_id, error)) + if (get_sctp_assoc_t(assoc_expr, &assoc_id, error)) return STATUS_ERR; begin_syscall(state, syscall); @@ -5123,7 +5356,7 @@ static int syscall_sctp_getladdrs(struct state *state, struct syscall_spec *sysc if (to_live_fd(state, script_fd, &live_fd, error)) return STATUS_ERR; assoc_expr = get_arg(args, 1, error); - if (get_u32(assoc_expr, (u32 *)&assoc_id, error)) + if (get_sctp_assoc_t(assoc_expr, &assoc_id, error)) return STATUS_ERR; begin_syscall(state, syscall); diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c index 47d6c43b72f57f6699bec8c45031b025e24c7218..e51c89f6119fbc1cadfd60e5fb0ec8457864be9a 100644 --- a/gtests/net/packetdrill/script.c +++ b/gtests/net/packetdrill/script.c @@ -79,9 +79,11 @@ struct expression_type_entry expression_type_table[] = { { EXPR_SCTP_EVENT, "sctp_event" }, { EXPR_SCTP_EVENT_SUBSCRIBE, "sctp_event_subscribe"}, { EXPR_SCTP_SNDINFO, "sctp_sndinfo" }, + { EXPR_SCTP_SETPRIM, "sctp_setprim" }, { EXPR_SCTP_SETADAPTATION, "sctp_setadaptation"}, { EXPR_SCTP_SNDRCVINFO, "sctp_sndrcvinfo" }, { EXPR_SCTP_PRINFO, "sctp_prinfo" }, + { EXPR_SCTP_DEFAULT_PRINFO, "sctp_default_prinfo"}, { EXPR_SCTP_AUTHINFO, "sctp_authinfo" }, { EXPR_SCTP_SENDV_SPA, "sctp_sendv_spa" }, { EXPR_SCTP_RCVINFO, "sctp_rcvinfo" }, @@ -313,12 +315,14 @@ void free_expression(struct expression *expression) break; case EXPR_SCTP_RTOINFO: assert(expression->value.sctp_rtoinfo); + free_expression(expression->value.sctp_rtoinfo->srto_assoc_id); free_expression(expression->value.sctp_rtoinfo->srto_initial); free_expression(expression->value.sctp_rtoinfo->srto_max); free_expression(expression->value.sctp_rtoinfo->srto_min); break; case EXPR_SCTP_ASSOC_VALUE: assert(expression->value.sctp_assoc_value); + free_expression(expression->value.sctp_assoc_value->assoc_id); free_expression(expression->value.sctp_assoc_value->assoc_value); break; case EXPR_SCTP_INITMSG: @@ -330,11 +334,13 @@ void free_expression(struct expression *expression) break; case EXPR_SCTP_SACKINFO: assert(expression->value.sctp_sack_info); + free_expression(expression->value.sctp_sack_info->sack_assoc_id); free_expression(expression->value.sctp_sack_info->sack_delay); - free_expression(expression->value.sctp_sack_info->sack_freq); + free_expression(expression->value.sctp_sack_info->sack_freq); break; case EXPR_SCTP_PADDRINFO: assert(expression->value.sctp_paddrinfo); + free_expression(expression->value.sctp_paddrinfo->spinfo_assoc_id); free_expression(expression->value.sctp_paddrinfo->spinfo_address); free_expression(expression->value.sctp_paddrinfo->spinfo_state); free_expression(expression->value.sctp_paddrinfo->spinfo_cwnd); @@ -344,6 +350,7 @@ void free_expression(struct expression *expression) break; case EXPR_SCTP_STATUS: assert(expression->value.sctp_status); + free_expression(expression->value.sctp_status->sstat_assoc_id); free_expression(expression->value.sctp_status->sstat_state); free_expression(expression->value.sctp_status->sstat_rwnd); free_expression(expression->value.sctp_status->sstat_unackdata); @@ -355,6 +362,7 @@ void free_expression(struct expression *expression) break; case EXPR_SCTP_PEER_ADDR_PARAMS: assert(expression->value.sctp_paddrparams); + free_expression(expression->value.sctp_paddrparams->spp_assoc_id); free_expression(expression->value.sctp_paddrparams->spp_address); free_expression(expression->value.sctp_paddrparams->spp_hbinterval); free_expression(expression->value.sctp_paddrparams->spp_pathmaxrxt); @@ -369,6 +377,7 @@ void free_expression(struct expression *expression) free_expression(expression->value.sctp_stream_value->stream_value); break; case EXPR_SCTP_ASSOCPARAMS: + free_expression(expression->value.sctp_assocparams->sasoc_assoc_id); free_expression(expression->value.sctp_assocparams->sasoc_asocmaxrxt); free_expression(expression->value.sctp_assocparams->sasoc_number_peer_destinations); free_expression(expression->value.sctp_assocparams->sasoc_peer_rwnd); @@ -376,6 +385,7 @@ void free_expression(struct expression *expression) free_expression(expression->value.sctp_assocparams->sasoc_cookie_life); break; case EXPR_SCTP_EVENT: + free_expression(expression->value.sctp_event->se_assoc_id); free_expression(expression->value.sctp_event->se_type); free_expression(expression->value.sctp_event->se_on); break; @@ -397,6 +407,10 @@ void free_expression(struct expression *expression) free_expression(expression->value.sctp_sndinfo->snd_ppid); free_expression(expression->value.sctp_sndinfo->snd_context); free_expression(expression->value.sctp_sndinfo->snd_assoc_id); + break; + case EXPR_SCTP_SETPRIM: + free_expression(expression->value.sctp_setprim->ssp_assoc_id); + free_expression(expression->value.sctp_setprim->ssp_addr); break; case EXPR_SCTP_SETADAPTATION: free_expression(expression->value.sctp_setadaptation->ssb_adaptation_ind); @@ -416,6 +430,11 @@ void free_expression(struct expression *expression) free_expression(expression->value.sctp_prinfo->pr_policy); free_expression(expression->value.sctp_prinfo->pr_value); break; + case EXPR_SCTP_DEFAULT_PRINFO: + free_expression(expression->value.sctp_default_prinfo->pr_policy); + free_expression(expression->value.sctp_default_prinfo->pr_value); + free_expression(expression->value.sctp_default_prinfo->pr_assoc_id); + break; case EXPR_SCTP_AUTHINFO: free_expression(expression->value.sctp_authinfo->auth_keynumber); break; @@ -487,6 +506,7 @@ void free_expression(struct expression *expression) free_expression(expression->value.sctp_shutdown_event->sse_type); free_expression(expression->value.sctp_shutdown_event->sse_flags); free_expression(expression->value.sctp_shutdown_event->sse_length); + free_expression(expression->value.sctp_shutdown_event->sse_assoc_id); break; case EXPR_SCTP_ADAPTATION_EVENT: free_expression(expression->value.sctp_adaptation_event->sai_type); @@ -787,6 +807,10 @@ static int evaluate_sctp_rtoinfo_expression(struct expression *in, in_rtoinfo = in->value.sctp_rtoinfo; out_rtoinfo = out->value.sctp_rtoinfo; + if (evaluate(in_rtoinfo->srto_assoc_id, + &out_rtoinfo->srto_assoc_id, + error)) + return STATUS_ERR; if (evaluate(in_rtoinfo->srto_initial, &out_rtoinfo->srto_initial, error)) @@ -854,6 +878,10 @@ static int evaluate_sctp_assoc_value_expression(struct expression *in, in_value = in->value.sctp_assoc_value; out_value = out->value.sctp_assoc_value; + if (evaluate(in_value->assoc_id, + &out_value->assoc_id, + error)) + return STATUS_ERR; if (evaluate(in_value->assoc_value, &out_value->assoc_value, error)) @@ -878,6 +906,10 @@ static int evaluate_sctp_sack_info_expression(struct expression *in, in_sack_info = in->value.sctp_sack_info; out_sack_info = out->value.sctp_sack_info; + if (evaluate(in_sack_info->sack_assoc_id, + &out_sack_info->sack_assoc_id, + error)) + return STATUS_ERR; if (evaluate(in_sack_info->sack_delay, &out_sack_info->sack_delay, error)) @@ -906,6 +938,10 @@ static int evaluate_sctp_paddrinfo_expression(struct expression *in, in_paddrinfo = in->value.sctp_paddrinfo; out_paddrinfo = out->value.sctp_paddrinfo; + if (evaluate(in_paddrinfo->spinfo_assoc_id, + &out_paddrinfo->spinfo_assoc_id, + error)) + return STATUS_ERR; if (evaluate(in_paddrinfo->spinfo_address, &out_paddrinfo->spinfo_address, error)) @@ -950,6 +986,10 @@ static int evaluate_sctp_status_expression(struct expression *in, in_status = in->value.sctp_status; out_status = out->value.sctp_status; + if (evaluate(in_status->sstat_assoc_id, + &out_status->sstat_assoc_id, + error)) + return STATUS_ERR; if (evaluate(in_status->sstat_state, &out_status->sstat_state, error)) @@ -1001,6 +1041,10 @@ static int evaluate_sctp_peer_addr_param_expression(struct expression *in, in_paddrparams = in->value.sctp_paddrparams; out_paddrparams = out->value.sctp_paddrparams; + if (evaluate(in_paddrparams->spp_assoc_id, + &out_paddrparams->spp_assoc_id, + error)) + return STATUS_ERR; if (evaluate(in_paddrparams->spp_address, &out_paddrparams->spp_address, error)) @@ -1076,6 +1120,10 @@ static int evaluate_sctp_event_expression(struct expression *in, in_event = in->value.sctp_event; out_event = out->value.sctp_event; + if (evaluate(in_event->se_assoc_id, + &out_event->se_assoc_id, + error)) + return STATUS_ERR; if (evaluate(in_event->se_type, &out_event->se_type, error)) @@ -1164,6 +1212,10 @@ static int evaluate_sctp_accocparams_expression(struct expression *in, in_params = in->value.sctp_assocparams; out_params = out->value.sctp_assocparams; + if (evaluate(in_params->sasoc_assoc_id, + &out_params->sasoc_assoc_id, + error)) + return STATUS_ERR; if (evaluate(in_params->sasoc_asocmaxrxt, &out_params->sasoc_asocmaxrxt, error)) @@ -1227,6 +1279,34 @@ static int evaluate_sctp_sndinfo_expression(struct expression *in, return STATUS_OK; } +static int evaluate_sctp_setprim_expression(struct expression *in, + struct expression *out, + char **error) +{ + struct sctp_setprim_expr *in_prim; + struct sctp_setprim_expr *out_prim; + + assert(in->type == EXPR_SCTP_SETPRIM); + assert(in->value.sctp_setprim); + assert(out->type == EXPR_SCTP_SETPRIM); + + out->value.sctp_setprim = calloc(1, sizeof(struct sctp_setprim_expr)); + + in_prim = in->value.sctp_setprim; + out_prim = out->value.sctp_setprim; + + if (evaluate(in_prim->ssp_assoc_id, + &out_prim->ssp_assoc_id, + error)) + return STATUS_ERR; + if (evaluate(in_prim->ssp_addr, + &out_prim->ssp_addr, + error)) + return STATUS_ERR; + + return STATUS_OK; +} + static int evaluate_sctp_setadaptation_expression(struct expression *in, struct expression *out, char **error) @@ -1335,6 +1415,38 @@ static int evaluate_sctp_prinfo_expression(struct expression *in, return STATUS_OK; } +static int evaluate_sctp_default_prinfo_expression(struct expression *in, + struct expression *out, + char **error) +{ + struct sctp_default_prinfo_expr *in_info; + struct sctp_default_prinfo_expr *out_info; + + assert(in->type == EXPR_SCTP_DEFAULT_PRINFO); + assert(in->value.sctp_default_prinfo); + assert(out->type == EXPR_SCTP_DEFAULT_PRINFO); + + out->value.sctp_default_prinfo = calloc(1, sizeof(struct sctp_default_prinfo_expr)); + + in_info = in->value.sctp_default_prinfo; + out_info = out->value.sctp_default_prinfo; + + if (evaluate(in_info->pr_policy, + &out_info->pr_policy, + error)) + return STATUS_ERR; + if (evaluate(in_info->pr_value, + &out_info->pr_value, + error)) + return STATUS_ERR; + if (evaluate(in_info->pr_assoc_id, + &out_info->pr_assoc_id, + error)) + return STATUS_ERR; + + return STATUS_OK; +} + static int evaluate_sctp_authinfo_expression(struct expression *in, struct expression *out, char **error) @@ -1737,6 +1849,10 @@ static int evaluate_sctp_shutdown_event_expression(struct expression *in, &out_event->sse_length, error)) return STATUS_ERR; + if (evaluate(in_event->sse_assoc_id, + &out_event->sse_assoc_id, + error)) + return STATUS_ERR; return STATUS_OK; } @@ -2125,6 +2241,9 @@ static int evaluate(struct expression *in, case EXPR_SCTP_SNDINFO: result = evaluate_sctp_sndinfo_expression(in, out, error); break; + case EXPR_SCTP_SETPRIM: + result = evaluate_sctp_setprim_expression(in, out, error); + break; case EXPR_SCTP_SETADAPTATION: result = evaluate_sctp_setadaptation_expression(in, out, error); break; @@ -2134,6 +2253,9 @@ static int evaluate(struct expression *in, case EXPR_SCTP_PRINFO: result = evaluate_sctp_prinfo_expression(in, out, error); break; + case EXPR_SCTP_DEFAULT_PRINFO: + result = evaluate_sctp_default_prinfo_expression(in, out, error); + break; case EXPR_SCTP_AUTHINFO: result = evaluate_sctp_authinfo_expression(in, out, error); break; diff --git a/gtests/net/packetdrill/script.h b/gtests/net/packetdrill/script.h index 00ab1b4b1c1be7cad8b2a3084b82cfb7f03d0888..df4e1d763213dd9c5ba142f232c9c136daeebfb2 100644 --- a/gtests/net/packetdrill/script.h +++ b/gtests/net/packetdrill/script.h @@ -59,9 +59,11 @@ enum expression_t { EXPR_SCTP_EVENT, /* struct sctp_event for SCTP_EVENT */ EXPR_SCTP_EVENT_SUBSCRIBE,/* struct sctp_event_subscribe for SCTP_EVENTS */ EXPR_SCTP_SNDINFO, /* struct sctp_sndinfo for SCTP_DEFAULT_SNDINFO */ + EXPR_SCTP_SETPRIM, /* expression tree for sctp_setprim SCTP_PRIMARY_ADDR */ EXPR_SCTP_SETADAPTATION, /* struct sctp_setadaptation for SCTP_ADATTATION_LAYER */ EXPR_SCTP_SNDRCVINFO, /* struct sctp_sndrcvinfo for syscall sctp_recvmsg */ EXPR_SCTP_PRINFO, /* struct sctp_prinfo for syscall sctp_sendv */ + EXPR_SCTP_DEFAULT_PRINFO, /* expression tree for struct sctp_default_prinfo for syscall [gs]etsockopt */ EXPR_SCTP_AUTHINFO, /* struct sctp_authinfo for syscall sctp_sendv */ EXPR_SCTP_SENDV_SPA, /* struct sctp_sendv_spa for syscall sctp_sendv */ EXPR_SCTP_RCVINFO, /* struct sctp_rcvinfo for syscall sctp_recvv */ @@ -111,9 +113,11 @@ struct expression { struct sctp_event_expr *sctp_event; struct sctp_event_subscribe_expr *sctp_event_subscribe; struct sctp_sndinfo_expr *sctp_sndinfo; + struct sctp_setprim_expr *sctp_setprim; struct sctp_setadaptation_expr *sctp_setadaptation; struct sctp_sndrcvinfo_expr *sctp_sndrcvinfo; struct sctp_prinfo_expr *sctp_prinfo; + struct sctp_default_prinfo_expr *sctp_default_prinfo; struct sctp_authinfo_expr *sctp_authinfo; struct sctp_sendv_spa_expr *sctp_sendv_spa; struct sctp_rcvinfo_expr *sctp_rcvinfo; @@ -190,6 +194,7 @@ struct linger_expr { /* Parse tree for a sctp_rtoinfo struct in a [gs]etsockopt syscall. */ struct sctp_rtoinfo_expr { + struct expression *srto_assoc_id; struct expression *srto_initial; struct expression *srto_max; struct expression *srto_min; @@ -205,6 +210,7 @@ struct sctp_initmsg_expr { /* Parse tree for a sctp_assoc_value struct in a [gs]etsockopt syscall. */ struct sctp_assoc_value_expr { + struct expression *assoc_id; struct expression *assoc_value; }; @@ -216,12 +222,14 @@ struct sctp_stream_value_expr { /* Parse tree for a sctp_sack_info struct in a [gs]etsockopt syscall. */ struct sctp_sack_info_expr { + struct expression *sack_assoc_id; struct expression *sack_delay; struct expression *sack_freq; }; /* Parse tree for a sctp_status struct in a [gs]etsockopt syscall. */ struct sctp_status_expr { + struct expression *sstat_assoc_id; struct expression *sstat_state; struct expression *sstat_rwnd; struct expression *sstat_unackdata; @@ -234,6 +242,7 @@ struct sctp_status_expr { /* Parse tree for a sctp_paddrinfo struct in a [gs]etsockopt syscall. */ struct sctp_paddrinfo_expr { + struct expression *spinfo_assoc_id; struct expression *spinfo_address; struct expression *spinfo_state; struct expression *spinfo_cwnd; @@ -244,6 +253,7 @@ struct sctp_paddrinfo_expr { /* Parse tree for a sctp_paddrparams struct in a [gs]etsockopt syscall. */ struct sctp_paddrparams_expr { + struct expression *spp_assoc_id; struct expression *spp_address; struct expression *spp_hbinterval; struct expression *spp_pathmaxrxt; @@ -255,6 +265,7 @@ struct sctp_paddrparams_expr { /* Parse tree for sctp_assocparams struct in [gs]etsockopt syscall. */ struct sctp_assocparams_expr { + struct expression *sasoc_assoc_id; struct expression *sasoc_asocmaxrxt; struct expression *sasoc_number_peer_destinations; struct expression *sasoc_peer_rwnd; @@ -264,6 +275,7 @@ struct sctp_assocparams_expr { /* Parse tree for sctp_event struct in [gs]etsockopt syscall. */ struct sctp_event_expr { + struct expression *se_assoc_id; struct expression *se_type; struct expression *se_on; }; @@ -291,6 +303,12 @@ struct sctp_sndinfo_expr { struct expression *snd_assoc_id; }; +/* Parse tree for sctp_setadaptation struct in [gs]etsockopt syscall. */ +struct sctp_setprim_expr { + struct expression *ssp_assoc_id; + struct expression *ssp_addr; +}; + /* Parse tree for sctp_setadaptation struct in [gs]etsockopt syscall. */ struct sctp_setadaptation_expr { struct expression *ssb_adaptation_ind; @@ -315,6 +333,13 @@ struct sctp_prinfo_expr { struct expression *pr_value; }; +/* Parse tree for sctp_default_prinfo in [gs]etsockopt syscall. */ +struct sctp_default_prinfo_expr { + struct expression *pr_policy; + struct expression *pr_value; + struct expression *pr_assoc_id; +}; + /* Parse tree for sctp_authinfo in sctp_sendv syscall. */ struct sctp_authinfo_expr { struct expression *auth_keynumber; @@ -405,6 +430,7 @@ struct sctp_shutdown_event_expr { struct expression *sse_type; struct expression *sse_flags; struct expression *sse_length; + struct expression *sse_assoc_id; }; /* Parse tree for sctp_adaptation_event for notifications. */ diff --git a/gtests/net/packetdrill/symbols_freebsd.c b/gtests/net/packetdrill/symbols_freebsd.c index a3adfe351b873ca8a1ef0b973b198922e7852b75..4f4f2c1700edd8b10a27b7fd5a8a41eea2e3b90c 100644 --- a/gtests/net/packetdrill/symbols_freebsd.c +++ b/gtests/net/packetdrill/symbols_freebsd.c @@ -84,6 +84,7 @@ struct int_symbol platform_symbols_table[] = { { SCTP_INITMSG, "SCTP_INITMSG" }, { SCTP_INIT, "SCTP_INIT" }, { SCTP_NODELAY, "SCTP_NODELAY" }, + { SCTP_PRIMARY_ADDR, "SCTP_PRIMARY_ADDR" }, { SCTP_ADAPTATION_LAYER, "SCTP_ADAPTATION_LAYER" }, { SCTP_MAXSEG, "SCTP_MAXSEG" }, { SCTP_DELAYED_SACK, "SCTP_DELAYED_SACK" }, @@ -92,6 +93,7 @@ struct int_symbol platform_symbols_table[] = { { SCTP_EVENT, "SCTP_EVENT" }, { SCTP_EVENTS, "SCTP_EVENTS" }, { SCTP_DEFAULT_SNDINFO, "SCTP_DEFAULT_SNDINFO" }, + { SCTP_DEFAULT_PRINFO, "SCTP_DEFAULT_PRINFO" }, { SCTP_STATUS, "SCTP_STATUS" }, { SCTP_GET_PEER_ADDR_INFO, "SCTP_GET_PEER_ADDR_INFO" }, { SCTP_FRAGMENT_INTERLEAVE, "SCTP_FRAGMENT_INTERLEAVE" }, diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_adaptation_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_adaptation_event.pkt index 282b383885d289485e3e1b9d225fd6387131e6bf..6a3a663b916a0543f451d1dd829aa62698a5b6de 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_adaptation_event.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_adaptation_event.pkt @@ -6,8 +6,8 @@ +0.0 listen(3, 1) = 0 // Enable Event notification -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {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_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 // Send Adaptation Indication with Init chunk +0.0 < sctp: INIT[flgs=0, tag=1, a_rwnd=1500, os=1, is=1, tsn=0, diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_assoc_change_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_assoc_change_event.pkt index 78467aad5dacfba214c238767bc8a1f831f938fb..f110cab2989614c5b5b299738950d857e10833d6 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_assoc_change_event.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_assoc_change_event.pkt @@ -3,8 +3,8 @@ +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_type=SCTP_ASSOC_CHANGE, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ASSOC_CHANGE, se_on=1}, [8]) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ASSOC_CHANGE, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_ASSOC_CHANGE, 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=...] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_authentication_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_authentication_event.pkt index cf7a4ce7ec91e5ddd463685b57cb12342a8c4595..4b216e9877183a0104c96f4216955d6829fce983 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_authentication_event.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_authentication_event.pkt @@ -3,8 +3,8 @@ +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_type=SCTP_AUTHENTICATION_EVENT, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_AUTHENTICATION_EVENT, se_on=1}, [8]) = 0 ++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=...] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications.pkt deleted file mode 100644 index 6df07beeb907fdf8d0cd3fa52e0797af1252b672..0000000000000000000000000000000000000000 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications.pkt +++ /dev/null @@ -1,60 +0,0 @@ -+0.0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 -+0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) -+0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 -// Check the handshake with an empty(!) cookie -+0.1 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) -+0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=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_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, [8]) = 0 - -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, sctp_association_event=1, sctp_address_event=0, sctp_send_failure_event=1, -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}, 11) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0 - -//Deactivate all 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=0}, 11) = 0 - -//test for SENDER_DRY_EVENT -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SENDER_DRY_EVENT, se_on=1}, 8) = 0 -+0.0 sctp_recvv(3, [{iov_base={sender_dry_type=SCTP_SENDER_DRY_EVENT, sender_dry_flags=0, sender_dry_length=12, sender_dry_assoc_id=3}, iov_len=1000}], -1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SENDER_DRY_EVENT, se_on=0}, 8) = 0 - -//test for SEND_FAILED_EVENT -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SEND_FAILED_EVENT, se_on=1}, 8) = 0 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {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=...}, ssfe_assoc_id=3, ssfe_data=...}, iov_len=1000}], -1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SEND_FAILED_EVENT, se_on=0}, 8) = 0 - -//+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, [8]) = 0 -//+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 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_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 12 -//+0.0 sctp_recvv(3, [{iov_base={sse_type=SCTP_SHUTDOWN_EVENT, sse_flags=1, sse_length=12}, iov_len=1000}], 1, -//..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications_stopped_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications_stopped_event.pkt index 6adecb8f05d09a6964e5db5d966391bbfe01e71b..65a7771b77639237c0e5b8b27846dccc007f1bd3 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications_stopped_event.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_notifications_stopped_event.pkt @@ -3,9 +3,9 @@ +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_type=SCTP_ADAPTATION_INDICATION, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_ADAPTATION_INDICATION, se_on=1}, [8]) = 0 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_NOTIFICATIONS_STOPPED_EVENT, se_on=1}, 8) = 0 ++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=...]] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_partial_delivery_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_partial_delivery_event.pkt index b1c619e8dfcb773fed123181ce3e1774165ebdba..68ffb5bba20a025be8a21d819098957a32e38dda 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_partial_delivery_event.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_partial_delivery_event.pkt @@ -3,18 +3,24 @@ +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_type=SCTP_PARTIAL_DELIVERY_EVENT, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_PARTIAL_DELIVERY_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] +//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, pdapi_assoc_id=3 }, iov_len=1000}], 2, ..., 20, NULL, [0], -[SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 21 ++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, + pdapi_assoc_id=3 }, iov_len=1000}], 2, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 21 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_peer_addr_change.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_peer_addr_change.pkt index ffd6eabc1bdaa607a7fae91a60e6e7b6c93ab3e9..1e9238b66c0356f596b239491ccaa5e2610a4a8c 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_peer_addr_change.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_peer_addr_change.pkt @@ -3,8 +3,8 @@ +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_type=SCTP_PEER_ADDR_CHANGE, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_PEER_ADDR_CHANGE, se_on=1}, [8]) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_PEER_ADDR_CHANGE, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_PEER_ADDR_CHANGE, 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=...] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_remote_error.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_remote_error.pkt index 4d245235197b7f22585e70aa63536206b03cb82d..7479fdc1554e6a87cb508fad6418678d8b26e856 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_remote_error.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_remote_error.pkt @@ -3,8 +3,8 @@ +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_type=SCTP_REMOTE_ERROR, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_REMOTE_ERROR, se_on=1}, [8]) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_REMOTE_ERROR, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_REMOTE_ERROR, 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=...] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed.pkt index 6a55b3dc6db8f738d6f1dc25008c0547089ca008..db09d5fd93e19fe1df8c6dbe55b9bb1b896d91a1 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed.pkt @@ -13,8 +13,14 @@ spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 0 //test for SEND_FAILED_EVENT -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SEND_FAILED, se_on=1}, 8) = 0 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=150, srto_min=50}, 16) = 0 ++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] @@ -24,7 +30,18 @@ spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 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_assoc_id=3, ssf_data=...}, iov_len=1000}], -1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000 ++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, + sinfo_assoc_id=3}, + ssf_assoc_id=3, + ssf_data=...}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed_event.pkt index 69780e2574b8fe6729948c558e8225cd930d268e..51cd97210d8ade8af2dd814c259eb5041a766240 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed_event.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_send_failed_event.pkt @@ -7,14 +7,26 @@ +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_address=..., spp_hbinterval=0, spp_pathmaxrxt=100, spp_pathmtu=1468, spp_flags=SPP_HB_DISABLE, -spp_ipv6_flowlabel=0, -spp_dscp=0}, 152) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {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_type=SCTP_SEND_FAILED_EVENT, se_on=1}, 8) = 0 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=150, srto_min=50}, 16) = 0 ++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] @@ -24,6 +36,14 @@ spp_dscp=0}, 152) = 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_assoc_id=3, ssfe_data=...}, iov_len=1000}], -1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION]) = 1000 ++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/bsd/sctp/notifications/sctp_sender_dry_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_sender_dry_event.pkt index bbca55239d311473133ee2758b7f5125c5553db6..f060cbee7b38827f4911d3e33fc8726c2c70a954 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_sender_dry_event.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_sender_dry_event.pkt @@ -8,20 +8,27 @@ +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_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, 8) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=0}, [8]) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, + sctp_association_event=1, + sctp_address_event=0, + sctp_send_failure_event=1, + 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}, 11) = 0 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENTS, {sctp_data_io_event=1, sctp_association_event=1, sctp_address_event=0, sctp_send_failure_event=1, -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}, 11) = 0 -+0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0 //test for SENDER_DRY_EVENT -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SENDER_DRY_EVENT, se_on=1}, 8) = 0 -+0.0 sctp_recvv(3, [{iov_base={sender_dry_type=SCTP_SENDER_DRY_EVENT, sender_dry_flags=0, sender_dry_length=12, sender_dry_assoc_id=3}, iov_len=1000}], -1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SENDER_DRY_EVENT, se_on=0}, 8) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SENDER_DRY_EVENT, se_on=1}, 8) = 0 ++0.0 sctp_recvv(3, [{iov_base={sender_dry_type=SCTP_SENDER_DRY_EVENT, + sender_dry_flags=0, + sender_dry_length=12, + sender_dry_assoc_id=3}, iov_len=1000}], 1, ..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12 + ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SENDER_DRY_EVENT, se_on=0}, 8) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt index 5488096702167b2676227eb07311a68f16270323..9671000ddce4f8021868cd7a2e38d9caa8a01be6 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt @@ -8,15 +8,21 @@ +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_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0 ++0.0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_assoc_id=0, se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 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_iov(1)=[{iov_base={sse_type=SCTP_SHUTDOWN_EVENT, + sse_flags=0, + sse_length=12, + sse_assoc_id=3}, iov_len=1000}], + msg_control(0)=[], msg_flags=MSG_NOTIFICATION|MSG_EOR}, 0) = 12 //+0.0 sctp_recvv(3, [{iov_base={sse_type=SCTP_SHUTDOWN_EVENT, sse_flags=1, sse_length=12}, iov_len=1000}], 1, //..., 20, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_NOTIFICATION|MSG_EOR]) = 12 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/recvmsg.pkt b/gtests/net/packetdrill/tests/bsd/sctp/recvmsg.pkt index e81c3d2844ad6afc21e959902ab3320a094da092..bf44947527a16a98c19550410182fff1011606e2 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/recvmsg.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/recvmsg.pkt @@ -13,7 +13,8 @@ +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_address=..., + {spp_assoc_id=0, + spp_address=..., spp_hbinterval=0, spp_pathmaxrxt=8, spp_pathmtu=1468, diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_get_socket_options.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_get_socket_options.pkt index a33a6d1950fec9df17d13a79b78dd047d694a1fb..d0e775b51c49dcefbad4f5f3b68663db5d14ba7c 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_get_socket_options.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_get_socket_options.pkt @@ -8,72 +8,78 @@ +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 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 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 setsockopt(3, IPPROTO_SCTP, SCTP_PRIMARY_ADDR, {ssp_assoc_id=0, 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=0, 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_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=...}, [176]) = 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 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_state=..., sstat_rwnd=1500, sstat_unackdata=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_state=8, sstat_rwnd=..., sstat_unackdata=0, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=3, 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=3, sstat_state=8, 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_state=8, sstat_rwnd=1500, sstat_unackdata=..., ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=3, sstat_state=8, 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_state=8, sstat_rwnd=1500, sstat_unackdata=0, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=3, sstat_state=8, 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_state=8, sstat_rwnd=1500, sstat_unackdata=0, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=3, sstat_state=8, 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_state=8, sstat_rwnd=1500, sstat_unackdata=0, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=3, sstat_state=8, 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_state=8, sstat_rwnd=1500, sstat_unackdata=0, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=3, sstat_state=8, 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_state=SCTP_ESTABLISHED, sstat_rwnd=1500, sstat_unackdata=0, sstat_penddata=0, -sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=..., sstat_primary={spinfo_address={sa_family=AF_INET,sin_port=htons(8080), ++0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=3, sstat_state=SCTP_ESTABLISHED, sstat_rwnd=1500, sstat_unackdata=0, sstat_penddata=0, +sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=..., sstat_primary={spinfo_assoc_id=3, spinfo_address={sa_family=AF_INET,sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, spinfo_state=SCTP_ACTIVE, spinfo_cwnd=4464, spinfo_srtt=..., spinfo_rto=1000, spinfo_mtu=1468} }, [176]) = 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")}, ++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=4464, spinfo_srtt=111, spinfo_rto=1000, spinfo_mtu=1468}, 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")}, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=3, spinfo_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, spinfo_state=..., spinfo_cwnd=4464, spinfo_srtt=..., spinfo_rto=1000, spinfo_mtu=1468}, [152]) = 0 -+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")}, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=3, 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=1000, spinfo_mtu=1468}, [152]) = 0 -+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")}, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=3, spinfo_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, spinfo_state=SCTP_ACTIVE, spinfo_cwnd=4464, spinfo_srtt=..., spinfo_rto=..., spinfo_mtu=1468}, [152]) = 0 -+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")}, ++0 getsockopt(3, IPPROTO_SCTP, SCTP_GET_PEER_ADDR_INFO, {spinfo_assoc_id=3, spinfo_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, spinfo_state=SCTP_ACTIVE, spinfo_cwnd=4464, spinfo_srtt=..., spinfo_rto=1000, spinfo_mtu=...}, [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")}, ++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_DSCP|SPP_HB_ENABLE, 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")}, ++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=1468, spp_flags=SPP_DSCP|SPP_HB_ENABLE|SPP_PMTUD_ENABLE, 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")}, ++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=..., spp_pathmaxrxt=..., spp_pathmtu=1468, spp_flags=..., 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")}, ++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=..., spp_pathmtu=..., spp_flags=521, 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")}, ++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=..., spp_pathmtu=1468, spp_flags=521, spp_ipv6_flowlabel=..., 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")}, ++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=..., spp_pathmtu=1468, spp_flags=521, spp_ipv6_flowlabel=0, spp_dscp=...}, [152]) = 0 @@ -83,12 +89,14 @@ spp_hbinterval=300, spp_pathmaxrxt=..., spp_pathmtu=1468, spp_flags=521, spp_ipv +0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=..., linger=30}, [8]) = 0 +0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=..., linger=...}, [8]) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=200, srto_min=50}, [16]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=..., srto_max=200, srto_min=50}, [16]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=..., srto_min=50}, [16]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=200, srto_min=...}, [16]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_value=1452}, [8]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=50}, 16) = 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=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=..., srto_max=200, srto_min=50}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=..., srto_min=50}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=...}, [16]) = 0 + ++0 getsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=1452}, [8]) = 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 @@ -96,24 +104,24 @@ spp_hbinterval=300, spp_pathmaxrxt=..., spp_pathmtu=1468, spp_flags=521, spp_ipv +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 setsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {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_asocmaxrxt=5, sasoc_number_peer_destinations=1, sasoc_peer_rwnd=1500, sasoc_local_rwnd=1864135, -sasoc_cookie_life=40000}, [20]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=..., sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., sasoc_local_rwnd=..., -sasoc_cookie_life=40000}, [20]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., sasoc_local_rwnd=..., -sasoc_cookie_life=40000}, [20]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., sasoc_local_rwnd=..., -sasoc_cookie_life=...}, [20]) = 0 - -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=250, sack_freq=1}, 12) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=250, sack_freq=1}, [12]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=..., sack_freq=1}, [12]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=250, sack_freq=...}, [12]) = 0 - -+0 setsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, 8) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_EVENT, {se_type=SCTP_SHUTDOWN_EVENT, se_on=1}, [8]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=0, 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=0, sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=1, sasoc_peer_rwnd=1500, + sasoc_local_rwnd=1864135, sasoc_cookie_life=40000}, [20]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=0, sasoc_asocmaxrxt=..., sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., + sasoc_local_rwnd=..., sasoc_cookie_life=40000}, [20]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=0, sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., + sasoc_local_rwnd=..., sasoc_cookie_life=40000}, [20]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_ASSOCINFO, {sasoc_assoc_id=0, sasoc_asocmaxrxt=5, sasoc_number_peer_destinations=..., sasoc_peer_rwnd=..., + sasoc_local_rwnd=..., sasoc_cookie_life=...}, [20]) = 0 + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=250, sack_freq=1}, 12) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=..., sack_freq=1}, [12]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=..., sack_freq=1}, [12]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=250, sack_freq=...}, [12]) = 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_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 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_init_rtx.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_init_rtx.pkt index ed3759cd09697ed5d1a6f876dabe4a7680eb9046..75debec3c601438cb50dd309b2d1b0b1e528b03a 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_init_rtx.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_init_rtx.pkt @@ -9,7 +9,7 @@ +0.0 bind(3, ..., ...) = 0 +0.0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) +0.0 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0 -+0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 ++0.0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 +0.0 connect(3, ..., ...) = -1 EINPROGRESS (Operation now in progress) // Check the number and the timing of the restransmissions +0.0 > sctp: INIT[flgs=0, tag=1, a_rwnd=..., os=..., is=..., tsn=0, ...] diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_recvv.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_recvv.pkt index 17f94900394fa8e5d1e1fc44c00d53120dcdc19f..e19e4f64bb4b4ceb1867ac2b8913264e5dbe129a 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_recvv.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_recvv.pkt @@ -56,20 +56,41 @@ rcv_assoc_id=...}, * > sctp: SACK[flgs=0, cum_tsn=7, a_rwnd=..., gaps=[], dups=[]] +0.0 < sctp: DATA[flgs=BE, len=1016, tsn=8, sid=0, ssn=7, ppid=10] * > sctp: SACK[flgs=0, cum_tsn=8, a_rwnd=..., gaps=[], dups=[]] -+0.0 sctp_recvv(3, [{iov_base=..., iov_len=1000}], 1, ..., 16, { -recvv_rcvinfo={rcv_sid=0, rcv_ssn=6, rcv_flags=0, rcv_ppid=htonl(0), rcv_tsn=7, rcv_cumtsn=8, rcv_context=0, rcv_assoc_id=3}, -recvv_nxtinfo={nxt_sid=0, nxt_flags=32, nxt_ppid=htonl(10), nxt_length=1000, nxt_assoc_id=4}}, [44], [SCTP_RECVV_RN], [MSG_EOR]) = 1000 ++0.0 sctp_recvv(3, [{iov_base=..., iov_len=1000}], 1, ..., 16, {recvv_rcvinfo={rcv_sid=0, + rcv_ssn=6, + rcv_flags=0, + rcv_ppid=htonl(0), + rcv_tsn=7, + rcv_cumtsn=8, + rcv_context=0, + rcv_assoc_id=3}, + recvv_nxtinfo={nxt_sid=0, + nxt_flags=32, + nxt_ppid=htonl(10), + nxt_length=1000, + nxt_assoc_id=3}}, [44], [SCTP_RECVV_RN], [MSG_EOR]) = 1000 +0.0 < sctp: DATA[flgs=BE, len=1016, tsn=9, sid=0, ssn=8, ppid=11] * > sctp: SACK[flgs=0, cum_tsn=9, a_rwnd=..., gaps=[], dups=[]] -+0.0 sctp_recvv(3, [{iov_base=..., iov_len=1000}], 1, ..., 16, { -recvv_rcvinfo={rcv_sid=0, rcv_ssn=7, rcv_flags=0, rcv_ppid=htonl(10), rcv_tsn=8, rcv_cumtsn=9, rcv_context=0, rcv_assoc_id=...}, recvv_nxtinfo=...}, -[44], [SCTP_RECVV_RN], [MSG_EOR]) = 1000 ++0.0 sctp_recvv(3, [{iov_base=..., iov_len=1000}], 1, ..., 16, {recvv_rcvinfo={rcv_sid=0, + rcv_ssn=7, + rcv_flags=0, + rcv_ppid=htonl(10), + rcv_tsn=8, + rcv_cumtsn=9, + rcv_context=0, + rcv_assoc_id=3}, + recvv_nxtinfo=...}, [44], [SCTP_RECVV_RN], [MSG_EOR]) = 1000 + +0.0 < sctp: DATA[flgs=BE, len=1016, tsn=10, sid=0, ssn=9, ppid=10] * > sctp: SACK[flgs=0, cum_tsn=10, a_rwnd=..., gaps=[], dups=[]] -+0.0 sctp_recvv(3, [{iov_base=..., iov_len=1000}], 1, ..., 16, { -recvv_rcvinfo=..., recvv_nxtinfo={nxt_sid=0, nxt_flags=32, nxt_ppid=htonl(10), nxt_length=1000, nxt_assoc_id=3}}, [44], [SCTP_RECVV_RN], [8]) = 1000 ++0.0 sctp_recvv(3, [{iov_base=..., iov_len=1000}], 1, ..., 16, {recvv_rcvinfo=..., + recvv_nxtinfo={nxt_sid=0, + nxt_flags=32, + nxt_ppid=htonl(10), + nxt_length=1000, + nxt_assoc_id=3}}, [44], [SCTP_RECVV_RN], [8]) = 1000 +0.0 sctp_recvv(3, [{iov_base=..., iov_len=1000}], 1, ..., 16, NULL, [0], [SCTP_RECVV_NOINFO], [MSG_EOR]) = 1000 +0.0 close(3) = 0 diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_send.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_send.pkt index dd3e13911825b78a56cb92b365c497f847661f3b..7557027687e2b91999fe733de8cd29b01bbd8255 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_send.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_send.pkt @@ -13,8 +13,16 @@ +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_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 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=3, + spp_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spp_hbinterval=0, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152)= 0 +1.0 sctp_send(3, ..., 1000, {sinfo_stream=3, sinfo_ssn=3, diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_sendx.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_sendx.pkt index 20b4eb9a6734766192c57c6cb71147925d9dbd43..ed2b27ba3325391f1e143c442830d3606f68a443 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_sendx.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_sendx.pkt @@ -13,8 +13,16 @@ +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_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 setsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_assoc_id=3, + spp_address={sa_family=AF_INET, + sin_port=htons(8080), + sin_addr=inet_addr("192.0.2.1")}, + spp_hbinterval=0, + spp_pathmaxrxt=8, + spp_pathmtu=1468, + spp_flags=SPP_HB_DISABLE, + spp_ipv6_flowlabel=0, + spp_dscp=0}, 152) = 0 +1.0 sctp_sendx(3, ..., 1000, ..., 1, {sinfo_stream=3, sinfo_ssn=3, diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt index af811a60bd4158cad8ed03642210684a2fde792f..d7fdcc7d2da222517d3d9ac8f60c50fe4ccef853 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt @@ -1,14 +1,14 @@ 0 socket(..., SOCK_STREAM, IPPROTO_SCTP) = 3 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=50, srto_max=200, srto_min=50}, 16) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=200, srto_max=200, srto_min=50}, 16) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=50, srto_max=50, srto_min=50}, 16) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=100, srto_max=200, srto_min=50}, 17) = 0 -//+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=..., srto_max=200, srto_min=50}, 15) = -1 EINVAL (Invalid argument) -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=25, srto_max=200, srto_min=50}, 16) = -1 EINVAL (Invalid argument) -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=225, srto_max=200, srto_min=50}, 16) = -1 EINVAL (Invalid argument) -+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_initial=50, srto_max=50, srto_min=200}, 16) = -1 EINVAL (Invalid argument) ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=0, srto_initial=100, srto_max=200, srto_min=50}, 16) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=50, srto_max=200, srto_min=50}, 16) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=200, srto_max=200, srto_min=50}, 16) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=50, srto_max=50, srto_min=50}, 16) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=100, srto_max=200, srto_min=50}, 17) = 0 +//+0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=..., srto_max=200, srto_min=50}, 15) = -1 EINVAL (Invalid argument) ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=25, srto_max=200, srto_min=50}, 16) = -1 EINVAL (Invalid argument) ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=225, srto_max=200, srto_min=50}, 16) = -1 EINVAL (Invalid argument) ++0 setsockopt(3, IPPROTO_SCTP, SCTP_RTOINFO, {srto_assoc_id=..., srto_initial=50, srto_max=50, srto_min=200}, 16) = -1 EINVAL (Invalid argument) +0 setsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=1024, sinit_max_instreams=1024, sinit_max_attempts=5, sinit_max_init_timeo=100}, 8) = 0 +0 setsockopt(3, IPPROTO_SCTP, SCTP_INITMSG, {sinit_num_ostreams=1024, sinit_max_instreams=1024, sinit_max_attempts=5, sinit_max_init_timeo=100}, 9) = 0 @@ -19,30 +19,30 @@ +0 setsockopt(3, IPPROTO_SCTP, SCTP_NODELAY, [1], 5) = 0 +0 setsockopt(3, IPPROTO_SCTP, SCTP_NODELAY, [1], 3) = -1 (Invalid argument) -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_value=1}, 8) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_value=0}, 8) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_value=1024}, 8) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_value=1}, 9) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_value=1}, 7) = -1 (Invalid argument) - -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=1000, sack_freq=0}, 12) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=500, sack_freq=0}, 12) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=200, sack_freq=0}, 12) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=100, sack_freq=0}, 12) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=10, sack_freq=0}, 12) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=0, sack_freq=1}, 12) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=0, sack_freq=2}, 12) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=0, sack_freq=4}, 12) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=200, sack_freq=2}, 13) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_delay=200, sack_freq=2}, 11) = -1 (Invalid argument) - -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=1}, 8) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=0}, 8) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=1024}, 8) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=1}, 9) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_value=1}, 7) = -1 (Invalid argument) - -+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")}, ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=1}, 8) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=0}, 8) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=1024}, 8) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=1}, 9) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAXSEG, {assoc_id=0, assoc_value=1}, 7) = -1 (Invalid argument) + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=1000, sack_freq=0}, 12) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=500, sack_freq=0}, 12) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=200, sack_freq=0}, 12) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=100, sack_freq=0}, 12) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=10, sack_freq=0}, 12) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=0, sack_freq=1}, 12) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=0, sack_freq=2}, 12) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=0, sack_freq=4}, 12) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=200, sack_freq=2}, 13) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DELAYED_SACK, {sack_assoc_id=0, sack_delay=200, sack_freq=2}, 11) = -1 (Invalid argument) + ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_id=0, assoc_value=1}, 8) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_id=0, assoc_value=0}, 8) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_id=0, assoc_value=1024}, 8) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_id=0, assoc_value=1}, 9) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_MAX_BURST, {assoc_id=0, assoc_value=1}, 7) = -1 (Invalid argument) + ++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=30000, spp_pathmaxrxt=100, spp_pathmtu=1468, spp_flags=0, spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 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, diff --git a/gtests/net/packetdrill/tests/bsd/sctp/sendmsg.pkt b/gtests/net/packetdrill/tests/bsd/sctp/sendmsg.pkt index 67d100db2f55d740ee8cc9868d7849dbc481ba8a..67f5857ff451ffa04e7d8fb676ce6411b124d6a0 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sendmsg.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sendmsg.pkt @@ -13,69 +13,138 @@ +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_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 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 -+1.0 sendmsg(3, {msg_name(...)=..., msg_iov(1)=[{iov_base=..., iov_len=1000}], msg_control(0)=[], msg_flags=0}, 0) = 1000 ++1.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 -+1.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 ++1.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 -+1.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 ++1.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 -+1.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 ++1.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 2 cmsg -+1.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 +// test with 4 cmsg ++1.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 -+1.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 ++1.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=[]]