diff --git a/gtests/net/packetdrill/lexer.l b/gtests/net/packetdrill/lexer.l index 9d0f88664a339769743a81b80772ffca8b34e67f..95d44be0a6c201ea4e0843d90b1bc26d649a5450 100644 --- a/gtests/net/packetdrill/lexer.l +++ b/gtests/net/packetdrill/lexer.l @@ -231,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; diff --git a/gtests/net/packetdrill/parser.y b/gtests/net/packetdrill/parser.y index db0fd2cdd6adfa1cb8d889db9dc8c97d02402427..eca3d27cc76c9a892f16c0298ccd55adea389ea4 100644 --- a/gtests/net/packetdrill/parser.y +++ b/gtests/net/packetdrill/parser.y @@ -509,7 +509,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %token <reserved> ASSOC_ID ASSOC_VALUE %token <reserved> STREAM_ID STREAM_VALUE %token <reserved> SACK_ASSOC_ID SACK_DELAY SACK_FREQ -%token <reserved> SSTAT_STATE SSTAT_RWND SSTAT_UNACKDATA SSTAT_PENDDATA +%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 @@ -602,38 +602,38 @@ 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 %type <expression> sinit_max_init_timeo sctp_assoc_value sctp_stream_value %type <expression> sctp_sackinfo sack_delay sack_freq -%type <expression> sctp_rtoinfo srto_assoc_id srto_initial srto_max srto_min sctp_paddrinfo -%type <expression> sctp_paddrparams spp_assoc_id spp_address spp_hbinterval spp_pathmtu spp_pathmaxrxt +%type <expression> sctp_rtoinfo srto_initial srto_max srto_min sctp_paddrinfo +%type <expression> sctp_paddrparams spp_address spp_hbinterval spp_pathmtu spp_pathmaxrxt %type <expression> spp_flags spp_ipv6_flowlabel spp_dscp %type <expression> spinfo_address spinfo_state spinfo_cwnd spinfo_srtt spinfo_rto spinfo_mtu -%type <expression> sasoc_assoc_id sasoc_asocmaxrxt sasoc_number_peer_destinations sasoc_peer_rwnd +%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_assoc_id se_type se_on sctp_setadaptation sctp_setprim ssp_assoc_id 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 sctp_default_prinfo -%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_shutdown_event sse_type sse_flags sse_length sse_assoc_id -%type <expression> sctp_sender_dry_event sender_dry_type sender_dry_flags sender_dry_length sender_dry_assoc_id +%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 %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 @@ -2773,16 +2773,6 @@ linger } ; -srto_assoc_id -: SRTO_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)){ - semantic_error("srto_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SRTO_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - srto_initial : SRTO_INITIAL '=' INTEGER { if (!is_valid_u32($3)){ @@ -2813,14 +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_assoc_id ',' 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_assoc_id = $2; - $$->value.sctp_rtoinfo->srto_initial = $4; - $$->value.sctp_rtoinfo->srto_max = $6; - $$->value.sctp_rtoinfo->srto_min = $8; + $$->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; } ; @@ -2886,7 +2890,7 @@ sctp_stream_value ; sctp_assoc_value -: '{' ASSOC_ID '=' expression ',' 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_id = $4; @@ -2913,7 +2917,7 @@ sack_freq | SACK_FREQ '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } sctp_sackinfo -: '{' SACK_ASSOC_ID '=' expression ',' 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_assoc_id = $4; @@ -3064,29 +3068,20 @@ sctp_paddrinfo ; 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; -} -; - -spp_assoc_id -: SPP_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("spp_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); + $$->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; } -| SPP_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; spp_address @@ -3149,31 +3144,21 @@ spp_dscp ; sctp_paddrparams -: '{' spp_assoc_id ',' spp_address ',' spp_hbinterval ',' spp_pathmaxrxt ',' spp_pathmtu ','spp_flags ',' +: '{' 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_assoc_id = $2; - $$->value.sctp_paddrparams->spp_address = $4; - $$->value.sctp_paddrparams->spp_hbinterval = $6; - $$->value.sctp_paddrparams->spp_pathmaxrxt = $8; - $$->value.sctp_paddrparams->spp_pathmtu = $10; - $$->value.sctp_paddrparams->spp_flags = $12; - $$->value.sctp_paddrparams->spp_ipv6_flowlabel = $14; - $$->value.sctp_paddrparams->spp_dscp = $16; + $$->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; } ; -sasoc_assoc_id -: SASOC_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("sasoc_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SASOC_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sasoc_asocmaxrxt : SASOC_ASOCMAXRXT '=' INTEGER { if (!is_valid_u16($3)) { @@ -3225,27 +3210,17 @@ sasoc_cookie_life ; sctp_assocparams -: '{' sasoc_assoc_id ',' sasoc_asocmaxrxt ',' sasoc_number_peer_destinations ',' +: '{' 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_assoc_id = $2; - $$->value.sctp_assocparams->sasoc_asocmaxrxt = $4; - $$->value.sctp_assocparams->sasoc_number_peer_destinations = $6; - $$->value.sctp_assocparams->sasoc_peer_rwnd = $8; - $$->value.sctp_assocparams->sasoc_local_rwnd = $10; - $$->value.sctp_assocparams->sasoc_cookie_life = $12; -} -; - -se_assoc_id -: SE_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("se_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); + $$->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; } -| SE_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; se_type @@ -3272,12 +3247,12 @@ se_on ; sctp_event -: '{' se_assoc_id ',' 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_assoc_id = $2; - $$->value.sctp_event->se_type = $4; - $$->value.sctp_event->se_on = $6; + $$->value.sctp_event->se_assoc_id = $4; + $$->value.sctp_event->se_type = $6; + $$->value.sctp_event->se_on = $8; } ; @@ -3366,54 +3341,27 @@ 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; -} -; -ssp_assoc_id -: SSP_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("ssp_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SSP_ASSOC_ID '=' WORD { - $$ = new_expression(EXPR_WORD); - $$->value.string = $3; + $$->value.sctp_sndinfo->snd_assoc_id = $12; } -| SSP_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; sctp_setprim -: '{' ssp_assoc_id ',' SSP_ADDR '=' sockaddr'}' { +: '{' 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 = $2; - $$->value.sctp_setprim->ssp_addr = $6; + $$->value.sctp_setprim->ssp_assoc_id = $4; + $$->value.sctp_setprim->ssp_addr = $8; } ; + sctp_setadaptation : '{' SSB_ADAPTATION_IND '=' INTEGER '}' { $$ = new_expression(EXPR_SCTP_SETADAPTATION); @@ -3499,18 +3447,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; @@ -3521,7 +3460,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 @@ -3578,7 +3517,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; @@ -3594,10 +3533,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)) { @@ -3662,19 +3600,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; @@ -3684,7 +3611,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; } ; @@ -3701,7 +3628,7 @@ pr_policy }; sctp_default_prinfo -: '{' pr_policy ',' PR_VALUE '=' INTEGER ',' PR_ASSOC_ID '=' expression'}' { +: '{' 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; @@ -3781,25 +3708,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; } ; @@ -3812,16 +3729,6 @@ sctp_recvv_rn } ; -sse_assoc_id -: SSE_ASSOC_ID '=' INTEGER { - if (!is_valid_u32($3)) { - semantic_error("sse_assoc_id out of range"); - } - $$ = new_integer_expression($3, "%u"); -} -| SSE_ASSOC_ID '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } -; - sse_type : SSE_TYPE '=' INTEGER { if (!is_valid_u16($3)) { @@ -3857,13 +3764,13 @@ sse_length ; sctp_shutdown_event -: '{' sse_type ',' sse_flags ',' sse_length ',' sse_assoc_id '}' { +: '{' 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 = $8; + $$->value.sctp_shutdown_event->sse_assoc_id = $10; }; pdapi_type @@ -3933,18 +3840,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; @@ -3953,7 +3850,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; } ; @@ -4015,18 +3912,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; @@ -4034,7 +3921,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; } ; @@ -4072,26 +3959,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)) { @@ -4140,23 +4018,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; @@ -4164,8 +4032,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 @@ -4246,16 +4114,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; } @@ -4263,7 +4121,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; @@ -4273,8 +4131,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; } ; @@ -4322,31 +4180,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; } ; @@ -4417,18 +4265,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; @@ -4437,7 +4275,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 @@ -4497,23 +4335,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; @@ -4521,8 +4349,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; } ; @@ -4570,25 +4398,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 40c26cb47fac457cd5ede35781c598c69f7c6523..87b6e9ecd320a149a31a890c0182909422426207 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -2613,6 +2613,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; @@ -2963,7 +2966,12 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, 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; + 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 @@ -3393,7 +3401,6 @@ 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; @@ -3411,7 +3418,10 @@ 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 diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c index 887b1a0b5ead5d9db444de495fa8c4deec015121..c6159bba745c5defe5b9724ea57647803beb8143 100644 --- a/gtests/net/packetdrill/script.c +++ b/gtests/net/packetdrill/script.c @@ -349,6 +349,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); @@ -980,6 +981,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)) diff --git a/gtests/net/packetdrill/script.h b/gtests/net/packetdrill/script.h index b2b1580390df545334ab7f0c2763064e2db53630..99876144b95df136282343b1cdefd3f6ec3dabbb 100644 --- a/gtests/net/packetdrill/script.h +++ b/gtests/net/packetdrill/script.h @@ -229,6 +229,7 @@ struct sctp_sack_info_expr { /* 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; 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 d11d2c327910f0eeaf5a7768bfe75bf432a8d544..1315c9f3e54706d98531fa8213613a7dc70f8f23 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 @@ -16,34 +16,34 @@ +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_state=..., sstat_rwnd=..., sstat_unackdata=..., sstat_penddata=..., ++0 setsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_assoc_id=3, sstat_state=..., sstat_rwnd=..., sstat_unackdata=..., sstat_penddata=..., sstat_instrms=..., sstat_outstrms=..., sstat_fragmentation_point=..., sstat_primary=...}, 176) = -1 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=SCTP_ESTABLISHED, sstat_rwnd=1500, -sstat_unackdata=0, sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176]) = 0 - -+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=3, 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, ++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_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 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,