From d9f02651662748e8588e53c0d62c4744f00969d9 Mon Sep 17 00:00:00 2001
From: Michael Tuexen <tuexen@fh-muenster.de>
Date: Thu, 15 Oct 2015 17:43:04 +0200
Subject: [PATCH] Allow multiple COOKIE-ECHO to be injected.

---
 gtests/net/packetdrill/run_packet.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/gtests/net/packetdrill/run_packet.c b/gtests/net/packetdrill/run_packet.c
index b6244748..aa9ef94c 100644
--- a/gtests/net/packetdrill/run_packet.c
+++ b/gtests/net/packetdrill/run_packet.c
@@ -2522,8 +2522,7 @@ static int do_inbound_script_packet(
 				}
 				break;
 			case SCTP_COOKIE_ECHO_CHUNK_TYPE:
-				if ((socket->state == SOCKET_PASSIVE_INIT_ACK_SENT) &&
-				    (item->flags & FLAG_CHUNK_VALUE_NOCHECK)) {
+				if (item->flags & FLAG_CHUNK_VALUE_NOCHECK) {
 					temp_offset = socket->prepared_cookie_echo_length - item->length;
 					assert(packet->ip_bytes + temp_offset <= packet->buffer_bytes);
 					memmove((u8 *)item->chunk + item->length + temp_offset,
@@ -2550,9 +2549,14 @@ static int do_inbound_script_packet(
 					assert(packet->headers[i + 1].type == HEADER_SCTP);
 					packet->headers[i].total_bytes += temp_offset;
 					packet->headers[i + 1].total_bytes += temp_offset;
-					socket->state = SOCKET_PASSIVE_COOKIE_ECHO_RECEIVED;
 					offset += temp_offset;
 				}
+				if (((packet->flags & FLAGS_SCTP_BAD_CRC32C) == 0) &&
+				    (((packet->flags & FLAGS_SCTP_EXPLICIT_TAG) == 0) ||
+				     ((ntohl(packet->sctp->v_tag) == socket->script.local_initiate_tag) &&
+				      (socket->script.local_initiate_tag != 0)))) {
+					socket->state = SOCKET_PASSIVE_COOKIE_ECHO_RECEIVED;
+				}
 				break;
 			case SCTP_HEARTBEAT_ACK_CHUNK_TYPE:
 				temp_offset = socket->prepared_heartbeat_ack_length - item->length;
-- 
GitLab