diff --git a/gtests/net/packetdrill/lexer.l b/gtests/net/packetdrill/lexer.l index 1f7ed9d5064590e085dc2c59e8cfae27fa5ac099..fdb44cee35561ae2acb22dda80adef64199016f9 100644 --- a/gtests/net/packetdrill/lexer.l +++ b/gtests/net/packetdrill/lexer.l @@ -245,6 +245,16 @@ spp_ipv6_flowlabel return SPP_IPV6_FLOWLABEL_; /* avoid name clash */ spp_dscp return SPP_DSCP_; /* avoid name clash */ se_type return SE_TYPE; se_on return SE_ON; +sctp_data_io_event return _SCTP_DATA_IO_EVENT_; +sctp_association_event return _SCTP_ASSOCIATION_EVENT_; +sctp_address_event return _SCTP_ADDRESS_EVENT_; +sctp_send_failure_event return _SCTP_SEND_FAILURE_EVENT_; +sctp_peer_error_event return _SCTP_PEER_ERROR_EVENT_; +sctp_shutdown_event return _SCTP_SHUTDOWN_EVENT_; +sctp_partial_delivery_event return _SCTP_PARTIAL_DELIVERY_EVENT_; +sctp_adaptation_layer_event return _SCTP_ADAPTATION_LAYER_EVENT_; +sctp_authentication_event return _SCTP_AUTHENTICATION_EVENT_; +sctp_sender_dry_event return _SCTP_SENDER_DRY_EVENT_; snd_sid return SND_SID; snd_flags return SND_FLAGS; snd_ppid return SND_PPID; diff --git a/gtests/net/packetdrill/parser.y b/gtests/net/packetdrill/parser.y index 9fac14bf21998dc08c0e7aba9042eebb0d8f6a00..344826a81c11729b3bc2c8455968157078dfd886 100644 --- a/gtests/net/packetdrill/parser.y +++ b/gtests/net/packetdrill/parser.y @@ -548,6 +548,10 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %token <reserved> NXT_SID NXT_FLAGS NXT_PPID NXT_LENGTH %token <reserved> RECVV_RCVINFO RECVV_NXTINFO %token <reserved> SSE_TYPE SSE_FLAGS SSE_LENGTH +%token <rexerved> _SCTP_DATA_IO_EVENT_ _SCTP_ASSOCIATION_EVENT_ _SCTP_ADDRESS_EVENT_ +%token <reserved> _SCTP_SEND_FAILURE_EVENT_ _SCTP_PEER_ERROR_EVENT_ _SCTP_SHUTDOWN_EVENT_ +%token <reserved> _SCTP_PARTIAL_DELIVERY_EVENT_ _SCTP_ADAPTATION_LAYER_EVENT_ +%token <reserved> _SCTP_AUTHENTICATION_EVENT_ _SCTP_SENDER_DRY_EVENT_ %token <floating> FLOAT %token <integer> INTEGER HEX_INTEGER %token <string> WORD STRING BACK_QUOTED CODE IPV4_ADDR IPV6_ADDR @@ -604,6 +608,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %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_event_subscribe %type <errno_info> opt_errno %type <chunk_list> sctp_chunk_list_spec %type <chunk_list_item> sctp_chunk_spec @@ -2461,6 +2466,9 @@ expression | sctp_event { $$ = $1; } +| sctp_event_subscribe { + $$ = $1; +} | sctp_sndinfo { $$ = $1; } @@ -3116,6 +3124,57 @@ sctp_event } ; +sctp_event_subscribe +: '{' _SCTP_DATA_IO_EVENT_ '=' INTEGER ',' _SCTP_ASSOCIATION_EVENT_ '=' INTEGER ',' + _SCTP_ADDRESS_EVENT_ '=' INTEGER ',' _SCTP_SEND_FAILURE_EVENT_ '=' INTEGER ',' + _SCTP_PEER_ERROR_EVENT_ '=' INTEGER ',' _SCTP_SHUTDOWN_EVENT_ '=' INTEGER ',' + _SCTP_PARTIAL_DELIVERY_EVENT_ '=' INTEGER ',' _SCTP_ADAPTATION_LAYER_EVENT_ '=' INTEGER ',' + _SCTP_AUTHENTICATION_EVENT_ '=' INTEGER ',' _SCTP_SENDER_DRY_EVENT_ '=' INTEGER '}' { + $$ = new_expression(EXPR_SCTP_EVENT_SUBSCRIBE); + $$->value.sctp_event_subscribe = calloc(1, sizeof(struct sctp_event_subscribe_expr)); + if (!is_valid_u8($4)) { + semantic_error("sctp_data_io_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_data_io_event = new_integer_expression($4, "%hhu"); + if (!is_valid_u8($8)) { + semantic_error("sctp_association_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_association_event = new_integer_expression($8, "%hhu"); + if (!is_valid_u8($12)) { + semantic_error("sctp_address_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_address_event = new_integer_expression($12, "%hhu"); + if (!is_valid_u8($16)) { + semantic_error("sctp_send_failure_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_send_failure_event = new_integer_expression($16, "%hhu"); + if (!is_valid_u8($20)) { + semantic_error("sctp_peer_error_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_peer_error_event = new_integer_expression($20, "%hhu"); + if (!is_valid_u8($24)) { + semantic_error("sctp_shutdown_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_shutdown_event = new_integer_expression($24, "%hhu"); + if (!is_valid_u8($28)) { + semantic_error("sctp_partial_delivery_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_partial_delivery_event = new_integer_expression($28, "%hhu"); + if (!is_valid_u8($32)) { + semantic_error("sctp_adaptation_layer_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_adaptation_layer_event = new_integer_expression($32, "%hhu"); + if (!is_valid_u8($36)) { + semantic_error("sctp_authentication_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_authentication_event = new_integer_expression($36, "%hhu"); + if (!is_valid_u8($40)) { + semantic_error("sctp_sender_dry_event out of range"); + } + $$->value.sctp_event_subscribe->sctp_sender_dry_event = new_integer_expression($40, "%hhu"); +} +; + snd_sid : SND_SID '=' INTEGER { if (!is_valid_u16($3)) { diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 7e687115d6ecef1ceba2774fe577efba054f479d..db8e46ca27c804c4eba886630ee41e9a0c8e3c1d 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -2316,6 +2316,135 @@ static int check_sctp_event(struct sctp_event_expr *expr, } #endif +#ifdef SCTP_EVENT +static int check_sctp_event_subscribe(struct sctp_event_subscribe_expr *expr, + struct sctp_event_subscribe *sctp_events, + char **error) +{ + if (expr->sctp_data_io_event->type != EXPR_ELLIPSIS) { + u8 sctp_data_io_event; + + if (get_u8(expr->sctp_data_io_event, &sctp_data_io_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_data_io_event != sctp_data_io_event) { + asprintf(error, "sctp_event_subscribe.sctp_data_io_event: expected: %hhu actual: %hhu", + sctp_data_io_event, sctp_events->sctp_data_io_event); + return STATUS_ERR; + } + } + if (expr->sctp_association_event->type != EXPR_ELLIPSIS) { + u8 sctp_association_event; + + if (get_u8(expr->sctp_association_event, &sctp_association_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_association_event != sctp_association_event) { + asprintf(error, "sctp_event_subscribe.sctp_association_event: expected: %hhu actual: %hhu", + sctp_association_event, sctp_events->sctp_association_event); + return STATUS_ERR; + } + } + if (expr->sctp_address_event->type != EXPR_ELLIPSIS) { + u8 sctp_address_event; + + if (get_u8(expr->sctp_address_event, &sctp_address_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_address_event != sctp_address_event) { + asprintf(error, "sctp_event_subscribe.sctp_address_event: expected: %hhu actual: %hhu", + sctp_address_event, sctp_events->sctp_address_event); + return STATUS_ERR; + } + } + if (expr->sctp_send_failure_event->type != EXPR_ELLIPSIS) { + u8 sctp_send_failure_event; + + if (get_u8(expr->sctp_send_failure_event, &sctp_send_failure_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_send_failure_event != sctp_send_failure_event) { + asprintf(error, "sctp_event_subscribe.sctp_send_failure_event: expected: %hhu actual: %hhu", + sctp_send_failure_event, sctp_events->sctp_send_failure_event); + return STATUS_ERR; + } + } + if (expr->sctp_peer_error_event->type != EXPR_ELLIPSIS) { + u8 sctp_peer_error_event; + + if (get_u8(expr->sctp_peer_error_event, &sctp_peer_error_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_peer_error_event != sctp_peer_error_event) { + asprintf(error, "sctp_event_subscribe.sctp_peer_error_event: expected: %hhu actual: %hhu", + sctp_peer_error_event, sctp_events->sctp_peer_error_event); + return STATUS_ERR; + } + } + if (expr->sctp_shutdown_event->type != EXPR_ELLIPSIS) { + u8 sctp_shutdown_event; + + if (get_u8(expr->sctp_shutdown_event, &sctp_shutdown_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_shutdown_event != sctp_shutdown_event) { + asprintf(error, "sctp_event_subscribe.sctp_shutdown_event: expected: %hhu actual: %hhu", + sctp_shutdown_event, sctp_events->sctp_shutdown_event); + return STATUS_ERR; + } + } + if (expr->sctp_partial_delivery_event->type != EXPR_ELLIPSIS) { + u8 sctp_partial_delivery_event; + + if (get_u8(expr->sctp_partial_delivery_event, &sctp_partial_delivery_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_partial_delivery_event != sctp_partial_delivery_event) { + asprintf(error, "sctp_event_subscribe.sctp_partial_delivery_event: expected: %hhu actual: %hhu", + sctp_partial_delivery_event, sctp_events->sctp_partial_delivery_event); + return STATUS_ERR; + } + } + if (expr->sctp_adaptation_layer_event->type != EXPR_ELLIPSIS) { + u8 sctp_adaptation_layer_event; + + if (get_u8(expr->sctp_adaptation_layer_event, &sctp_adaptation_layer_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_adaptation_layer_event != sctp_adaptation_layer_event) { + asprintf(error, "sctp_event_subscribe.sctp_adaptation_layer_event: expected: %hhu actual: %hhu", + sctp_adaptation_layer_event, sctp_events->sctp_adaptation_layer_event); + return STATUS_ERR; + } + } + if (expr->sctp_authentication_event->type != EXPR_ELLIPSIS) { + u8 sctp_authentication_event; + + if (get_u8(expr->sctp_authentication_event, &sctp_authentication_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_authentication_event != sctp_authentication_event) { + asprintf(error, "sctp_event_subscribe.sctp_authentication_event: expected: %hhu actual: %hhu", + sctp_authentication_event, sctp_events->sctp_authentication_event); + return STATUS_ERR; + } + } + if (expr->sctp_sender_dry_event->type != EXPR_ELLIPSIS) { + u8 sctp_sender_dry_event; + + if (get_u8(expr->sctp_sender_dry_event, &sctp_sender_dry_event, error)) { + return STATUS_ERR; + } + if (sctp_events->sctp_sender_dry_event != sctp_sender_dry_event) { + asprintf(error, "sctp_event_subscribe.sctp_sender_dry_event: expected: %hhu actual: %hhu", + sctp_sender_dry_event, sctp_events->sctp_sender_dry_event); + return STATUS_ERR; + } + } + + return STATUS_OK; +} +#endif #ifdef SCTP_DEFAULT_SNDINFO static int check_sctp_sndinfo(struct sctp_sndinfo_expr *expr, struct sctp_sndinfo *sctp_sndinfo, @@ -2527,6 +2656,12 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, } break; #endif +#ifdef SCTP_EVENTS + case EXPR_SCTP_EVENT_SUBSCRIBE: + live_optval = malloc(sizeof(struct sctp_event_subscribe)); + live_optlen = sizeof(struct sctp_event_subscribe); + break; +#endif #ifdef SCTP_DEFAULT_SNDINFO case EXPR_SCTP_SNDINFO: live_optval = malloc(sizeof(struct sctp_sndinfo)); @@ -2621,6 +2756,11 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, result = check_sctp_event(val_expression->value.sctp_event, live_optval, error); break; #endif +#ifdef SCTP_EVENTS + case EXPR_SCTP_EVENT_SUBSCRIBE: + result = check_sctp_event_subscribe(val_expression->value.sctp_event_subscribe, live_optval, error); + break; +#endif #ifdef SCTP_DEFAULT_SNDINFO case EXPR_SCTP_SNDINFO: result = check_sctp_sndinfo(val_expression->value.sctp_sndinfo, live_optval, error); @@ -2681,6 +2821,9 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, #ifdef SCTP_EVENT struct sctp_event event; #endif +#ifdef SCTP_EVENTS + struct sctp_event_subscribe event_subscribe; +#endif #ifdef SCTP_DEFAULT_SNDINFO struct sctp_sndinfo sndinfo; #endif @@ -2694,7 +2837,6 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, u8 spp_dscp; #endif #endif - if (check_arg_count(args, 5, error)) return STATUS_ERR; if (s32_arg(args, 0, &script_fd, error)) @@ -2861,6 +3003,51 @@ static int syscall_setsockopt(struct state *state, struct syscall_spec *syscall, optval = &event; break; #endif +#ifdef SCTP_EVENTS + case EXPR_SCTP_EVENT_SUBSCRIBE: + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_data_io_event, + &event_subscribe.sctp_data_io_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_association_event, + &event_subscribe.sctp_association_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_address_event, + &event_subscribe.sctp_address_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_send_failure_event, + &event_subscribe.sctp_send_failure_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_peer_error_event, + &event_subscribe.sctp_peer_error_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_shutdown_event, + &event_subscribe.sctp_shutdown_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_partial_delivery_event, + &event_subscribe.sctp_partial_delivery_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_adaptation_layer_event, + &event_subscribe.sctp_adaptation_layer_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_authentication_event, + &event_subscribe.sctp_authentication_event, error)) { + return STATUS_ERR; + } + if (get_u8(val_expression->value.sctp_event_subscribe->sctp_sender_dry_event, + &event_subscribe.sctp_sender_dry_event, error)) { + return STATUS_ERR; + } + optval = &event_subscribe; + break; +#endif #ifdef SCTP_DEFAULT_SNDINFO case EXPR_SCTP_SNDINFO: sndinfo.snd_assoc_id = 0; diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c index adf37cd849c1c5e791bc09045a4612691b65473a..9f162ddf5f8eee300a0f0ac97c1719674728af61 100644 --- a/gtests/net/packetdrill/script.c +++ b/gtests/net/packetdrill/script.c @@ -938,8 +938,8 @@ static int evaluate_sctp_event_expression(struct expression *in, } static int evaluate_sctp_event_subscribe_expression(struct expression *in, - struct expression *out, - char **error) + struct expression *out, + char **error) { struct sctp_event_subscribe_expr *in_event; struct sctp_event_subscribe_expr *out_event; @@ -994,7 +994,7 @@ static int evaluate_sctp_event_subscribe_expression(struct expression *in, error)) return STATUS_ERR; - return STATUS_ERR; + return STATUS_OK; } static int evaluate_sctp_accocparams_expression(struct expression *in, diff --git a/gtests/net/packetdrill/symbols_freebsd.c b/gtests/net/packetdrill/symbols_freebsd.c index 284e156cd32a93f6df81bf10e15037c7d78eb383..8f8bd758060100cac0c0075508e1b80ab12ed73d 100644 --- a/gtests/net/packetdrill/symbols_freebsd.c +++ b/gtests/net/packetdrill/symbols_freebsd.c @@ -89,6 +89,7 @@ struct int_symbol platform_symbols_table[] = { { SCTP_MAX_BURST, "SCTP_MAX_BURST" }, { SCTP_PEER_ADDR_PARAMS, "SCTP_PEER_ADDR_PARAMS" }, { SCTP_EVENT, "SCTP_EVENT" }, + { SCTP_EVENTS, "SCTP_EVENTS" }, { SCTP_DEFAULT_SNDINFO, "SCTP_DEFAULT_SNDINFO" }, { SCTP_STATUS, "SCTP_STATUS" }, { SCTP_GET_PEER_ADDR_INFO, "SCTP_GET_PEER_ADDR_INFO" }, 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 1c5977792ac854e857f3733b7803f8826aaa9c57..2b9f57a45ab668a1797af277c6744b7bd6fe6933 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 @@ -115,16 +115,24 @@ sasoc_cookie_life=...}, [20]) = 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_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=0, snd_ppid=1, snd_context=1}, 16) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=0, snd_ppid=1, snd_context=1}, [16]) = 0 -+0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=SCTP_UNORDERED, snd_ppid=2, snd_context=2}, 16) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=SCTP_UNORDERED, snd_ppid=2, snd_context=2}, [16]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=SCTP_UNORDERED, snd_ppid=2, snd_context=...}, [16]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=0, snd_ppid=htonl(1), snd_context=1}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=0, snd_ppid=htonl(1), snd_context=1}, [16]) = 0 ++0 setsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=SCTP_UNORDERED, snd_ppid=htonl(2), snd_context=2}, 16) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=SCTP_UNORDERED, snd_ppid=htonl(2), snd_context=2}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=SCTP_UNORDERED, snd_ppid=htonl(2), snd_context=...}, [16]) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=SCTP_UNORDERED, snd_ppid=..., snd_context=2}, [16]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=..., snd_ppid=2, snd_context=2}, [16]) = 0 -+0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=..., snd_flags=SCTP_UNORDERED, snd_ppid=2, snd_context=2}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=0, snd_flags=..., snd_ppid=htonl(2), snd_context=2}, [16]) = 0 ++0 getsockopt(3, IPPROTO_SCTP, SCTP_DEFAULT_SNDINFO, {snd_sid=..., snd_flags=SCTP_UNORDERED, snd_ppid=htonl(2), snd_context=2}, [16]) = 0 +0 setsockopt(3, IPPROTO_SCTP, SCTP_ADAPTATION_LAYER, {ssb_adaptation_ind=2}, 4) = 0 +0 getsockopt(3, IPPROTO_SCTP, SCTP_ADAPTATION_LAYER, {ssb_adaptation_ind=2}, [4]) = 0 ++0 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 getsockopt(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 close(3) = 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 4fab681e2a1c615bf8af2793620f9873cbb1c59c..af811a60bd4158cad8ed03642210684a2fde792f 100644 --- a/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt +++ b/gtests/net/packetdrill/tests/bsd/sctp/sctp_socket_options.pkt @@ -45,4 +45,8 @@ +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_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, +sctp_peer_error_event=0, sctp_shutdown_event=0, sctp_partial_delivery_event=0, sctp_adaptation_layer_event=0, sctp_authentication_event=0, +sctp_sender_dry_event=0}, 11) = 0 + +0 close(3) = 0