diff --git a/gtests/net/packetdrill/lexer.l b/gtests/net/packetdrill/lexer.l index bc5e376f809b839d21f0f8472d86a1dbd6fb2647..71f72a1dbc26ff52e53e0e4c81d940a4c17963fa 100644 --- a/gtests/net/packetdrill/lexer.l +++ b/gtests/net/packetdrill/lexer.l @@ -229,6 +229,9 @@ spp_address return SPP_ADDRESS; spp_hbinterval return SPP_HBINTERVAL; spp_pathmaxrxt return SPP_PATHMAXRXT; spp_pathmtu return SPP_PATHMTU; +spp_flags return SPP_FLAGS; +spp_ipv6_flowlabel return SPPIPV6FLOWLABEL; +spp_dscp return SPPDSCP; CHUNK return CHUNK; DATA return DATA; INIT return INIT; diff --git a/gtests/net/packetdrill/parser.y b/gtests/net/packetdrill/parser.y index 235e8f460328744de398a84e68f88856f2ebf051..330562dc751db025514d78c0619bad9831cc5246 100644 --- a/gtests/net/packetdrill/parser.y +++ b/gtests/net/packetdrill/parser.y @@ -530,7 +530,8 @@ 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_ADDRESS SPP_HBINTERVAL SPP_PATHMAXRXT SPP_PATHMTU +%token <reserved> SPP_FLAGS SPPIPV6FLOWLABEL SPPDSCP %token <floating> FLOAT %token <integer> INTEGER HEX_INTEGER %token <string> WORD STRING BACK_QUOTED CODE IPV4_ADDR IPV6_ADDR @@ -573,6 +574,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %type <expression> sctp_initmsg sctp_assocval sctp_sackinfo %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_state spinfo_cwnd spinfo_srtt spinfo_rto spinfo_mtu %type <errno_info> opt_errno %type <chunk_list> sctp_chunk_list_spec @@ -2585,7 +2587,8 @@ spp_hbinterval if (!is_valid_u32($3)) { semantic_error("spp_hbinterval out of range"); } - $$ = new_integer_expression($3, "%u"); } + $$ = new_integer_expression($3, "%u"); +} | SPP_HBINTERVAL '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; @@ -2594,7 +2597,8 @@ spp_pathmtu if (!is_valid_u32($3)) { semantic_error("spp_pathmtu out of range"); } - $$ = new_integer_expression($3, "%u"); } + $$ = new_integer_expression($3, "%u"); +} | SPP_PATHMTU '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; @@ -2603,18 +2607,47 @@ spp_pathmaxrxt if (!is_valid_u16($3)) { semantic_error("spp_pathmaxrxt out of range"); } - $$ = new_integer_expression($3, "%hu"); } + $$ = new_integer_expression($3, "%hu"); +} | SPP_PATHMAXRXT '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } ; +spp_flags +: SPP_FLAGS '=' expression { $$ = $3; } +; + +spp_ipv6_flowlabel +: SPPIPV6FLOWLABEL '=' INTEGER { + if (!is_valid_u32($3)) { + semantic_error("spp_ipv6_flowlabel out of range"); + } + $$ = new_integer_expression($3, "%u"); +} +| SPPIPV6FLOWLABEL '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } +; + +spp_dscp +: SPPDSCP '=' INTEGER { + if (!is_valid_u8($3)) { + semantic_error("spp_dscp out of range"); + } + $$ = new_integer_expression($3, "%hhu"); +} +| SPPDSCP '=' ELLIPSIS { $$ = new_expression(EXPR_ELLIPSIS); } +; + sctp_paddrparams -: '{' spp_address ',' spp_hbinterval ',' spp_pathmtu ',' spp_pathmaxrxt '}' { +: '{' spp_address ',' spp_hbinterval ',' spp_pathmtu ',' spp_pathmaxrxt ',' spp_flags + ',' spp_ipv6_flowlabel ',' spp_dscp'}' { $$ = new_expression(EXPR_SCTP_PEER_ADDR_PARAMS); $$->value.sctp_paddrparams = (struct sctp_paddrparams_expr*) calloc(1, sizeof(struct sctp_paddrparams_expr)); $$->value.sctp_paddrparams->spp_address = $2; $$->value.sctp_paddrparams->spp_hbinterval = $4; $$->value.sctp_paddrparams->spp_pathmtu = $6; $$->value.sctp_paddrparams->spp_pathmaxrxt = $8; + $$->value.sctp_paddrparams->spp_flags = $10; + $$->value.sctp_paddrparams->spp_ipv6_flowlabel = $12; + $$->value.sctp_paddrparams->spp_dscp = $14; } ; diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index dae5651ef6f39e2f23c4d4435ec2cbcf9f8a46fc..9e2cc0635b5bc35db20b8bf3c6d4378772b159f8 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -204,7 +204,7 @@ static int get_s32(struct expression *expression, * valid s16 or u16, and matches the expected type. Returns STATUS_OK on * success; on failure returns STATUS_ERR and sets error message. */ -static short get_s16(struct expression *expression, +static int get_s16(struct expression *expression, s16 *value, char **error) { if (check_type(expression, EXPR_INTEGER, error)) @@ -220,6 +220,26 @@ static short get_s16(struct expression *expression, return STATUS_OK; } +/* Sets the value from the expression argument, checking that it is a + * valid s8 or u8, and matches the expected type. Returns STATUS_OK on + * success; on failure returns STATUS_ERR and sets error message. + */ +static int get_s8(struct expression *expression, + s8 *value, char **error) +{ + if (check_type(expression, EXPR_INTEGER, error)) + return STATUS_ERR; + if ((expression->value.num > UCHAR_MAX) || + (expression->value.num < SCHAR_MIN)) { + asprintf(error, + "Value out of range for 8-bit integer: %lld", + expression->value.num); + return STATUS_ERR; + } + *value = expression->value.num; + return STATUS_OK; +} + /* Return the value of the argument with the given index, and verify * that it has the expected type. */ @@ -1900,9 +1920,13 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, struct expression *spp_hbinterval = val_expression->value.sctp_paddrparams->spp_hbinterval; struct expression *spp_pathmaxrxt = val_expression->value.sctp_paddrparams->spp_pathmaxrxt; struct expression *spp_pathmtu = val_expression->value.sctp_paddrparams->spp_pathmtu; + struct expression *spp_flags = val_expression->value.sctp_paddrparams->spp_flags; + struct expression *spp_ipv6_flowlabel = val_expression->value.sctp_paddrparams->spp_ipv6_flowlabel; + struct expression *spp_dscp = val_expression->value.sctp_paddrparams->spp_dscp; struct sctp_paddrparams *live_params = live_optval; - int hbinterval, pathmtu; + int hbinterval, pathmtu, flags, ipv6_flowlabel; short pathmaxrxt; + s8 dscp; if (spp_hbinterval->type != EXPR_ELLIPSIS) { if (get_s32(spp_hbinterval, &hbinterval, error)) { free(live_optval); @@ -1939,6 +1963,46 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, return STATUS_ERR; } } + if (spp_flags->type != EXPR_ELLIPSIS) { + if (get_s32(spp_flags, &flags, error)) { + free(live_optval); + return STATUS_ERR; + } + if (live_params->spp_flags != flags) { + asprintf(error, "Bad getsockopt SCTP_PARAMS flags: expected: %u actual: %u", + flags, live_params->spp_flags); + free(live_optval); + return STATUS_ERR; + } + } +#ifdef SPP_IPV6_FLOWLABEL + if (spp_ipv6_flowlabel->type != EXPR_ELLIPSIS) { + if (get_s32(spp_ipv6_flowlabel, &ipv6_flowlabel, error)) { + free(live_optval); + return STATUS_ERR; + } + if (live_params->spp_ipv6_flowlabel != ipv6_flowlabel) { + asprintf(error, "Bad getsockopt SCTP_PARAMS ipv6_flowlabel: expected: %u actual: %u", + ipv6_flowlabel, live_params->spp_ipv6_flowlabel); + free(live_optval); + return STATUS_ERR; + } + } +#endif +#ifdef SPP_DSCP + if (spp_dscp->type != EXPR_ELLIPSIS) { + if (get_s8(spp_dscp, &dscp, error)) { + free(live_optval); + return STATUS_ERR; + } + if (live_params->spp_dscp != dscp) { + asprintf(error, "Bad getsockopt SCTP_PARAMS dscp: expected: %hhu actual: %hhu", + dscp, live_params->spp_dscp); + free(live_optval); + return STATUS_ERR; + } + } +#endif #endif } else { if (*(int*)live_optval != script_optval) { @@ -2025,7 +2089,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #endif #ifdef SCTP_STATUS } else if (val_expression->type == EXPR_SCTP_STATUS) { - optval = &val_expression->value.sctp_status; + struct sctp_status *status = malloc(sizeof(struct sctp_status)); + status->sstat_assoc_id = 0; + optval = status; #endif #ifdef SCTP_PEER_ADDR_PARAMS } else if (val_expression->type == EXPR_SCTP_PEER_ADDR_PARAMS) { @@ -2056,14 +2122,57 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, return STATUS_ERR; } if (expr_params->spp_hbinterval->type != EXPR_ELLIPSIS) { - params->spp_hbinterval = expr_params->spp_hbinterval->value.num; + int hbinterval; + if (get_s32(expr_params->spp_hbinterval, &hbinterval, error)) { + free(params); + return STATUS_ERR; + } + params->spp_hbinterval = hbinterval; } if (expr_params->spp_pathmaxrxt->type != EXPR_ELLIPSIS) { - params->spp_pathmaxrxt = expr_params->spp_pathmaxrxt->value.num; + short maxrxt; + if (get_s16(expr_params->spp_pathmaxrxt, &maxrxt, error)) { + free(params); + return STATUS_ERR; + } + params->spp_pathmaxrxt = maxrxt; } if (expr_params->spp_pathmtu->type != EXPR_ELLIPSIS) { - params->spp_pathmtu = expr_params->spp_pathmtu->value.num; + int mtu; + if (get_s32(expr_params->spp_pathmtu, &mtu, error)) { + free(params); + return STATUS_ERR; + } + params->spp_pathmtu = mtu; + } + if (expr_params->spp_flags->type != EXPR_ELLIPSIS) { + int flags; + if (get_s32(expr_params->spp_flags, &flags, error)) { + free(params); + return STATUS_ERR; + } + params->spp_flags = flags; } +#ifdef SPP_IPV6_FLOWLABEL + if (expr_params->spp_ipv6_flowlabel->type != EXPR_ELLIPSIS) { + int flowlabel; + if (get_s32(expr_params->spp_ipv6_flowlabel, &flowlabel, error)) { + free(params); + return STATUS_ERR; + } + params->spp_ipv6_flowlabel = flowlabel; + } +#endif +#ifdef SPP_DSCP + if (expr_params->spp_dscp->type != EXPR_ELLIPSIS) { + s8 dscp; + if (get_s8(expr_params->spp_dscp, &dscp, error)) { + free(params); + return STATUS_ERR; + } + params->spp_dscp = dscp; + } +#endif optval = params; #endif } else { @@ -2072,7 +2181,6 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, val_expression->type)); return STATUS_ERR; } - begin_syscall(state, syscall); result = setsockopt(live_fd, level, optname, optval, optlen); diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c index b359a85ae910daaa8c6f9f4912bde70f7afea350..2490e907d6dbcb42a5d7e02eefb8ce6d277c6024 100644 --- a/gtests/net/packetdrill/script.c +++ b/gtests/net/packetdrill/script.c @@ -336,7 +336,9 @@ void free_expression(struct expression *expression) free(expression->value.sctp_paddrparams->spp_hbinterval); free(expression->value.sctp_paddrparams->spp_pathmaxrxt); free(expression->value.sctp_paddrparams->spp_pathmtu); - free(expression->value.sctp_paddrparams->spp_sackdelay); + free(expression->value.sctp_paddrparams->spp_flags); + free(expression->value.sctp_paddrparams->spp_ipv6_flowlabel); + free(expression->value.sctp_paddrparams->spp_dscp); break; #endif case EXPR_WORD: @@ -514,20 +516,8 @@ static int evaluate_sctp_status_expression(struct expression *in, in_status = in->value.sctp_status; out_status = out->value.sctp_status; - if (in_status->sstat_state->type == EXPR_WORD) { - s64 val_state = 0; - if (symbol_to_int(in_status->sstat_state->value.string, - &val_state, error) == STATUS_OK) { - out_status->sstat_state = (struct expression*) - calloc(1, sizeof(struct expression)); - out_status->sstat_state->type = EXPR_INTEGER; - out_status->sstat_state->value.num = val_state; - } else { - asprintf(error, "bad expression unknown symbol for sstat_state %s", - in_status->sstat_state->value.string); - return STATUS_ERR; - } - } else if (evaluate(in_status->sstat_state, + + if (evaluate(in_status->sstat_state, &out_status->sstat_state, error)) return STATUS_ERR; @@ -558,22 +548,7 @@ static int evaluate_sctp_status_expression(struct expression *in, if (evaluate(in_status->sstat_primary, &out_status->sstat_primary, error)) - return STATUS_ERR; - if (in_status->sstat_primary->type == EXPR_SCTP_PADDRINFO) { - struct sctp_paddrinfo_expr *paddrinfo = in_status->sstat_primary->value.sctp_paddrinfo; - if (paddrinfo->spinfo_state->type == EXPR_WORD) { - s64 val_state = 0; - if (symbol_to_int(paddrinfo->spinfo_state->value.string, - &val_state, error) == STATUS_OK) { - paddrinfo->spinfo_state->type = EXPR_INTEGER; - paddrinfo->spinfo_state->value.num = val_state; - } else { - asprintf(error, "bad expression unknown symbol for spinfo_state %s", - paddrinfo->spinfo_state->value.string); - return STATUS_ERR; - } - } - } + return STATUS_ERR; return STATUS_OK; } #endif @@ -654,6 +629,10 @@ static int evaluate(struct expression *in, case EXPR_SCTP_PADDRINFO: memcpy(&out->value.sctp_paddrinfo, &in->value.sctp_paddrinfo, sizeof(in->value.sctp_paddrinfo)); + if (evaluate(in->value.sctp_paddrinfo->spinfo_state, + &out->value.sctp_paddrinfo->spinfo_state, + error)) + return STATUS_ERR; break; case EXPR_SCTP_STATUS: /* copy as-is */ result = evaluate_sctp_status_expression(in, out, error); @@ -663,6 +642,10 @@ static int evaluate(struct expression *in, case EXPR_SCTP_PEER_ADDR_PARAMS: memcpy(&out->value.sctp_paddrparams, &in->value.sctp_paddrparams, sizeof(in->value.sctp_paddrparams)); + if (evaluate(in->value.sctp_paddrparams->spp_flags, + &out->value.sctp_paddrparams->spp_flags, + error)) + return STATUS_ERR; break; #endif case EXPR_WORD: diff --git a/gtests/net/packetdrill/script.h b/gtests/net/packetdrill/script.h index 854d3c5f33b757ca7f6ea8dd5bfa6bb459e87e05..e604d910f73f4d921cb1d693435c06cca6b1677b 100644 --- a/gtests/net/packetdrill/script.h +++ b/gtests/net/packetdrill/script.h @@ -184,7 +184,9 @@ struct sctp_paddrparams_expr { struct expression *spp_hbinterval; struct expression *spp_pathmaxrxt; struct expression *spp_pathmtu; - struct expression *spp_sackdelay; + struct expression *spp_flags; + struct expression *spp_ipv6_flowlabel; + struct expression *spp_dscp; }; /* The errno-related info from strace to summarize a system call error */ diff --git a/gtests/net/packetdrill/symbols_freebsd.c b/gtests/net/packetdrill/symbols_freebsd.c index aed53ffe01e68831c69cc82fcc50dba5e769e2a2..14eda9cf01e377000c9e3fcc118df62461ea40d3 100644 --- a/gtests/net/packetdrill/symbols_freebsd.c +++ b/gtests/net/packetdrill/symbols_freebsd.c @@ -102,7 +102,16 @@ struct int_symbol platform_symbols_table[] = { { SCTP_UNCONFIRMED, "SCTP_UNCONFIRMED" }, { SCTP_ACTIVE, "SCTP_ACTIVE" }, { SCTP_INACTIVE, "SCTP_INACTIVE" }, - + { SPP_HB_ENABLE, "SPP_HB_ENABLE" }, + { SPP_HB_DISABLE, "SPP_HB_DISABLE" }, + { SPP_HB_DEMAND, "SPP_HB_DEMAND" }, + { SPP_PMTUD_ENABLE, "SPP_PMTUD_ENABLE" }, + { SPP_PMTUD_DISABLE, "SPP_PMTUD_DISABLE" }, + { SPP_HB_TIME_IS_ZERO, "SPP_HB_TIME_IS_ZERO" }, + { SPP_IPV6_FLOWLABEL, "SPP_IPV6_FLOWLABEL" }, + { SPP_DSCP, "SPP_DSCP" }, + { SPP_IPV4_TOS, "SPP_IPV4_TOS" }, + /* /usr/include/netinet/tcp.h */ { TCP_NODELAY, "TCP_NODELAY" }, { TCP_MAXSEG, "TCP_MAXSEG" }, 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 6ce974d7dfb9bb33ef7f03c5b79f615aa51b0e93..ab9e46ca990b393d1c2f51fc6039d5837f907ede 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 @@ -10,52 +10,55 @@ //+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 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 +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, -sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 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, -sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 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=..., -sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 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, -sstat_penddata=..., sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 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, -sstat_penddata=0, sstat_instrms=..., sstat_outstrms=1, sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 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, -sstat_penddata=0, sstat_instrms=1, sstat_outstrms=..., sstat_fragmentation_point=1452, sstat_primary=...}, [176])= 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, -sstat_penddata=0, sstat_instrms=1, sstat_outstrms=1, sstat_fragmentation_point=..., sstat_primary=...}, [176])= 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_state=SCTP_ACTIVE, spinfo_cwnd=4464, spinfo_srtt=..., spinfo_rto=1000, spinfo_mtu=1468} }, [176])= 0 +sstat_primary={ spinfo_state=SCTP_ACTIVE, spinfo_cwnd=4464, spinfo_srtt=..., spinfo_rto=1000, spinfo_mtu=1468} }, [176]) = 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=60000, spp_pathmtu=1468, spp_pathmaxrxt=...}, 152) = 0 +spp_hbinterval=300, spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=SPP_DSCP|SPP_HB_ENABLE, spp_ipv6_flowlabel=0, spp_dscp=3}, 152) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, -spp_hbinterval=60000, spp_pathmtu=1468, spp_pathmaxrxt=5}, [152]) = 0 +spp_hbinterval=300, spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=SPP_DSCP|SPP_HB_ENABLE|SPP_PMTUD_ENABLE, spp_ipv6_flowlabel=0, spp_dscp=3}, [152]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, -spp_hbinterval=..., spp_pathmtu=1468, spp_pathmaxrxt=5}, [152]) = 0 +spp_hbinterval=..., spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=..., spp_ipv6_flowlabel=0, spp_dscp=3}, [152]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, -spp_hbinterval=60000, spp_pathmtu=..., spp_pathmaxrxt=5}, [152]) = 0 +spp_hbinterval=300, spp_pathmtu=..., spp_pathmaxrxt=..., spp_flags=521, spp_ipv6_flowlabel=0, spp_dscp=3}, [152]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, -spp_hbinterval=60000, spp_pathmtu=1468, spp_pathmaxrxt=...}, [152]) = 0 +spp_hbinterval=300, spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=521, spp_ipv6_flowlabel=..., spp_dscp=3}, [152]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address=..., spp_hbinterval=60000, spp_pathmtu=1468, spp_pathmaxrxt=...}, [152]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_PEER_ADDR_PARAMS, {spp_address={sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("192.0.2.1")}, +spp_hbinterval=300, spp_pathmtu=1468, spp_pathmaxrxt=..., spp_flags=521, spp_ipv6_flowlabel=0, spp_dscp=...}, [152]) = 0 +0 setsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=1, linger=30}, 8) = 0 +0 getsockopt(3, SOL_SOCKET, SO_LINGER, {onoff=128, linger=30}, [8]) = 0 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 6b0e90a24e57393a77eecfb50e56cacb8ac07b9d..c6ba3996e650b05f17fd958de0e7a9403c874217 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt @@ -43,6 +43,6 @@ +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")}, - spp_hbinterval=30000, spp_pathmtu=1468, spp_pathmaxrxt=100}, 152) = 0 +spp_hbinterval=30000, spp_pathmtu=1468, spp_pathmaxrxt=100, spp_flags=0, spp_ipv6_flowlabel=0, spp_dscp=0}, 152) = 0 +0 close(3) = 0