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