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