[quicwg/base-drafts] SetLossDetectionTimer pseudocode is wrong (#3564)

martinduke <notifications@github.com> Wed, 01 April 2020 19:51 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 850D33A185C for <quic-issues@ietfa.amsl.com>; Wed, 1 Apr 2020 12:51:14 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.482
X-Spam-Level:
X-Spam-Status: No, score=-1.482 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_IMAGE_ONLY_24=1.618, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AbyqhldIKLUS for <quic-issues@ietfa.amsl.com>; Wed, 1 Apr 2020 12:51:13 -0700 (PDT)
Received: from out-1.smtp.github.com (out-1.smtp.github.com [192.30.252.192]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D8F303A185B for <quic-issues@ietf.org>; Wed, 1 Apr 2020 12:51:12 -0700 (PDT)
Received: from github-lowworker-45eca55.ac4-iad.github.net (github-lowworker-45eca55.ac4-iad.github.net [10.52.25.70]) by smtp.github.com (Postfix) with ESMTP id 94FB8C611FE for <quic-issues@ietf.org>; Wed, 1 Apr 2020 12:51:11 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1585770671; bh=mellz3MegDxX2vk0CoU2X9x+m7sXRSpZcVrvVTWMN9c=; h=Date:From:Reply-To:To:Cc:Subject:List-ID:List-Archive:List-Post: List-Unsubscribe:From; b=cNr++c120zWexGhfXk+Lhru95g4/ruIBrgDvWQJZAG8W+BCjVSPEx48Zd3ece7oSw jTxZFfeHITTlb86gl6U+knUml+wfDBftWbpehE9O/X3c6NHhcL3ox5Kny/pQxlIim9 L5f+UtOV9ebV4/DNnhza57jSM2aqQqfN8Wnv+aFQ=
Date: Wed, 01 Apr 2020 12:51:11 -0700
From: martinduke <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+AFTOJK3GKIPBP5PUB7YC7354SDI27EVBNHHCGS5UJA@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/3564@github.com>
Subject: [quicwg/base-drafts] SetLossDetectionTimer pseudocode is wrong (#3564)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5e84f0af82d71_6663f8593ecd96812424d"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: martinduke
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/g7nhj7oDQhULaS8_2eDsYKdRASU>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 01 Apr 2020 19:51:15 -0000

in section 5.2.1:

> the timer MUST be set for the packet number space with the earliest *timeout*, except for ApplicationData, which MUST be ignored until the handshake completes;

When the client sends its Finished, it declares the handshake complete, meaning it can have ApplicationData and HandshakeData simultaneously in flight. The PTOs are different for these, because the ApplicationData uses max_ack_delay > 0.

At the end of A.7 (SetLossDetectionTimer())
```
  sent_time, _ = GetEarliestTimeAndSpace(
    time_of_last_sent_ack_eliciting_packet)
  loss_detection_timer.update(sent_time + timeout)
```
The problem here is that if the ApplicationData was sent less than max_ack_delay before the Finished, then the handshake timer should fire first. The correct approach would be to compute the timeout separately for each pn_space and then take the min of all timeouts.

As the pseudocode is non-normative, I believe this is editorial.



-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/3564