From a107d82f5f66cd450cf093d4d10bb1b4082946d2 Mon Sep 17 00:00:00 2001 From: hoelscher <jens.hoelscher@fh-muenster.de> Date: Tue, 27 Oct 2015 11:05:20 +0100 Subject: [PATCH] modify error text in check_u8array --- gtests/net/packetdrill/parser.y | 11 ++- gtests/net/packetdrill/run_system_call.c | 87 +++++++++++++----------- 2 files changed, 55 insertions(+), 43 deletions(-) diff --git a/gtests/net/packetdrill/parser.y b/gtests/net/packetdrill/parser.y index f88812d5..04d2e4aa 100644 --- a/gtests/net/packetdrill/parser.y +++ b/gtests/net/packetdrill/parser.y @@ -618,7 +618,7 @@ static struct tcp_option *new_tcp_fast_open_option(const char *cookie_string, %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 +%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 <errno_info> opt_errno @@ -3779,8 +3779,13 @@ ssfe_assoc_id | 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 '=' ELLIPSIS '}' { +: '{' ssfe_type ',' ssfe_flags ',' ssfe_length ',' ssfe_error ',' SSFE_INFO '=' sctp_sndinfo ',' ssfe_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; @@ -3789,7 +3794,7 @@ sctp_send_failed_event $$->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 = new_expression(EXPR_ELLIPSIS); + $$->value.sctp_send_failed_event->ssfe_data = $16; }; sac_type diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index fe1c166e..15d1f85a 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -480,6 +480,48 @@ int check_u32_expr(struct expression *expr, u16 value, char *val_name, char **er } #endif +#if defined(__FreeBSD__) || defined(linux) +static int check_u8array_expr(struct expression *expr_list, u8 *data, size_t data_len, char *val_name, char **error) { + if ( expr_list->type != EXPR_ELLIPSIS) { + struct expression *expr = NULL; + unsigned int i; + + switch(expr_list->type) { + case EXPR_LIST: + if (data_len != expression_list_length(expr_list->value.list)) { + asprintf(error, "%s length: expected: %u actual %zu", + val_name, expression_list_length(expr_list->value.list), data_len); + return STATUS_ERR; + } + for (i = 0; i < data_len; i++) { + expr = get_arg(expr_list->value.list, i, error); + if (expr->type != EXPR_ELLIPSIS) { + u8 script_val; + + if (get_u8(expr, &script_val, error)) { + return STATUS_ERR; + } + if (script_val != data[i]) { + asprintf(error, "%s[%d]: expected: %hhu actual: %hhu", + val_name, i, script_val, data[i]); + return STATUS_ERR; + } + } + } + break; + case EXPR_NULL: + if (data != NULL) + return STATUS_ERR; + break; + default: asprintf(error, "Bad expressiontype for %s", val_name); + return STATUS_ERR; + break; + } + } + return STATUS_OK; +} +#endif + /* Free all the space used by the given iovec. */ static void iovec_free(struct iovec *iov, size_t iov_len) { @@ -3340,46 +3382,6 @@ static int check_sctp_nxtinfo(struct sctp_nxtinfo_expr *expr, } #endif -static int check_u8array_expr(struct expression *expr_list, u8 *data, size_t data_len, char *val_name, char **error) { - if ( expr_list->type != EXPR_ELLIPSIS) { - struct expression *expr = NULL; - unsigned int i; - - switch(expr_list->type) { - case EXPR_LIST: - if (data_len != expression_list_length(expr_list->value.list)) { - asprintf(error, "%s length: expected: %u actual %zu", - val_name, expression_list_length(expr_list->value.list), data_len); - return STATUS_ERR; - } - for (i = 0; i < data_len; i++) { - expr = get_arg(expr_list->value.list, i, error); - if (expr->type != EXPR_ELLIPSIS) { - u8 script_val; - - if (get_u8(expr, &script_val, error)) { - return STATUS_ERR; - } - if (script_val != data[i]) { - asprintf(error, "%s[%d]: expected: %hhu actual: %hhu", - val_name, i, script_val, data[i]); - return STATUS_ERR; - } - } - } - break; - case EXPR_NULL: - if (data != NULL) - return STATUS_ERR; - break; - default: asprintf(error, "Bad expressiontype for sac_info"); - return STATUS_ERR; - break; - } - } - return STATUS_OK; -} - #if defined(__FreeBSD__) || defined(linux) static int check_sctp_assoc_change(struct sctp_assoc_change_expr *expr, struct sctp_assoc_change *sctp_event, @@ -3411,6 +3413,7 @@ static int check_sctp_assoc_change(struct sctp_assoc_change_expr *expr, if (check_u8array_expr(expr->sac_info, sctp_event->sac_info, sctp_event->sac_length - sizeof(struct sctp_assoc_change), "sctp_assoc_change.sac_info", error)) return STATUS_ERR; + return STATUS_OK; } #endif @@ -3534,6 +3537,10 @@ static int check_sctp_send_failed_event(struct sctp_send_failed_event_expr *expr if (check_u32_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, + sctp_event->ssfe_length - sizeof(struct sctp_send_failed_event), + "sctp_send_failed_event.ssfe_data", error)) + return STATUS_ERR; return STATUS_OK; } -- GitLab