diff --git a/gtests/net/packetdrill/run_packet.c b/gtests/net/packetdrill/run_packet.c index b62447482c67935ca1dbead8bd6cf188d4dbe54d..aa9ef94cbb0fda4df919a8db65c0cc85516d7354 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;