From 3bb64180d3d37614aecb4abaa9d3dffc87f38caa Mon Sep 17 00:00:00 2001 From: hoelscher <jens.hoelscher@fh-muenster.de> Date: Thu, 26 Nov 2015 19:19:48 +0100 Subject: [PATCH] add sse_assoc_id in shutdown_event --- gtests/net/packetdrill/lexer.l | 1 + gtests/net/packetdrill/parser.y | 17 ++++++++++++++--- gtests/net/packetdrill/run_system_call.c | 3 +++ gtests/net/packetdrill/script.c | 5 +++++ gtests/net/packetdrill/script.h | 1 + .../sctp/notifications/sctp_shutdown_event.pkt | 6 +++++- 6 files changed, 29 insertions(+), 4 deletions(-) diff --git a/gtests/net/packetdrill/lexer.l b/gtests/net/packetdrill/lexer.l index 530db0f4..9e191c23 100644 --- a/gtests/net/packetdrill/lexer.l +++ b/gtests/net/packetdrill/lexer.l @@ -313,6 +313,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 b459a755..ff640f28 100644 --- a/gtests/net/packetdrill/parser.y +++ b/gtests/net/packetdrill/parser.y @@ -548,7 +548,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %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_ @@ -621,7 +621,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %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_shutdown_event sse_type sse_flags sse_length +%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_event_subscribe %type <expression> sctp_assoc_change sac_type sac_flags sac_length sac_state sac_error sac_outbound_streams @@ -3734,6 +3734,16 @@ 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)) { @@ -3769,12 +3779,13 @@ sse_length ; sctp_shutdown_event -: '{' sse_type ',' sse_flags ',' sse_length '}' { +: '{' sse_type ',' sse_flags ',' sse_length ',' sse_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; }; pdapi_type diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 2ad5a7f3..139d71f9 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -4453,6 +4453,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_u32_expr(expr->sse_assoc_id, sctp_event->sse_assoc_id, + "sctp_shutdown_event.sse_assoc_id", error)) + return STATUS_ERR; return STATUS_OK; } diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c index c32024a1..49579d9a 100644 --- a/gtests/net/packetdrill/script.c +++ b/gtests/net/packetdrill/script.c @@ -488,6 +488,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); @@ -1742,6 +1743,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; } diff --git a/gtests/net/packetdrill/script.h b/gtests/net/packetdrill/script.h index d61168d7..b7fbf882 100644 --- a/gtests/net/packetdrill/script.h +++ b/gtests/net/packetdrill/script.h @@ -406,6 +406,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/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt b/gtests/net/packetdrill/tests/bsd/sctp/notifications/sctp_shutdown_event.pkt index 54880967..01793f13 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 @@ -16,7 +16,11 @@ * > 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 -- GitLab