From 39087f0cc1dd43b1a79b07f6d02d8bd2a960d8f5 Mon Sep 17 00:00:00 2001
From: hoelscher <jens.hoelscher@fh-muenster.de>
Date: Wed, 30 Sep 2015 23:22:09 +0200
Subject: [PATCH] Add for sctp_status symbolic names for sstat_state

---
 gtests/net/packetdrill/script.c               | 21 +++++++++++++++----
 .../bsd/sctp/sctp_get_socket_options.pkt      |  2 +-
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git a/gtests/net/packetdrill/script.c b/gtests/net/packetdrill/script.c
index 56a74a77..f5d21c2f 100644
--- a/gtests/net/packetdrill/script.c
+++ b/gtests/net/packetdrill/script.c
@@ -514,7 +514,20 @@ static int evaluate_sctp_status_expression(struct expression *in,
 
 	in_status = in->value.sctp_status;
 	out_status = out->value.sctp_status;
-	if (evaluate(in_status->sstat_state,
+	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,
 			&out_status->sstat_state,
 			error))
 		return STATUS_ERR;
@@ -624,11 +637,11 @@ static int evaluate(struct expression *in,
 #endif
 #ifdef SCTP_STATUS
 	case EXPR_SCTP_PADDRINFO:
-		result = evaluate_sctp_status_expression(in, out, error);
+		memcpy(&out->value.sctp_paddrinfo, &in->value.sctp_paddrinfo,
+		       sizeof(in->value.sctp_paddrinfo));
 		break;
 	case EXPR_SCTP_STATUS:	/* copy as-is */
-		memcpy(&out->value.sctp_status, &in->value.sctp_status,
-		       sizeof(in->value.sctp_status));
+		result = evaluate_sctp_status_expression(in, out, error);
 		break;
 #endif
 #ifdef SCTP_PEER_ADDR_PARAMS
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 173449ba..7bc70cd2 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
@@ -11,7 +11,7 @@
 //+0.0 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
 
 
-+0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=..., sstat_rwnd=1500, 
++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
 
 +0 getsockopt(3, IPPROTO_SCTP, SCTP_STATUS, {sstat_state=..., sstat_rwnd=1500, sstat_unackdata=0, 
-- 
GitLab