Splitting transport and application error code spaces

Martin Thomson <martin.thomson@gmail.com> Fri, 11 August 2017 05:40 UTC

Return-Path: <martin.thomson@gmail.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 3DC2C132487 for <quic@ietfa.amsl.com>; Thu, 10 Aug 2017 22:40:12 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Level:
X-Spam-Status: No, score=-2.7 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.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 2EshufBTTxIA for <quic@ietfa.amsl.com>; Thu, 10 Aug 2017 22:40:10 -0700 (PDT)
Received: from mail-io0-x22b.google.com (mail-io0-x22b.google.com [IPv6:2607:f8b0:4001:c06::22b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 059421324AA for <quic@ietf.org>; Thu, 10 Aug 2017 22:40:10 -0700 (PDT)
Received: by mail-io0-x22b.google.com with SMTP id c74so16671417iod.4 for <quic@ietf.org>; Thu, 10 Aug 2017 22:40:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=eLHuLUsWDHy6Tuk3yHWpwsg0QwhDeq+muSXlPoch3gI=; b=Tpy+P+mH0eySqEsUKJHunQdKlHBEaxRaqZ5/eZFa7GItCh2hje4K6qyhtdsTFdHmcG N67idd0I4M2BCimeh1RD9UMokqnmjZrJquPaN6Z+dj0CAbxFZNrcf5DnCUgFC6I9nHDD A3oOEAlus5+mcivm2mUpOW6itI9k1DlEpFAWpwS+wy3duqDp5a+GpV1+yj1gA2PPebKO 180Kzvig0fkarzytDJdqMEpR6BsQuJ2u3BfWDSTXOG+CXfs0X3j+ZtPggKEvAdwemQe2 Y8WgCARu7JIHNFSsUSIjzyaLL3pQPjJYn/QZaC151p7vulSy5cOBaGeZKAuvettuaNK1 fjvQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=eLHuLUsWDHy6Tuk3yHWpwsg0QwhDeq+muSXlPoch3gI=; b=pSnAFpcCYwJ11vy36T7hfmbhLkKbB1xJNKdHkw/NAnIQGVFHSj4AtwHBTjMPJwj1+B hdusHAkuswkS/CMvJEph0a1QQOQm/fKhtq8mg/FG3P6R71rfD1+dVbc82bVq6fduUy5J 0U/5GkVAzVhXRJfClA882uk1YvEQkbqu23LJj8NP8SFTckN5j9FQuv6DJmZX85U68eD7 v7SoELb/G/VTy8XYAaMFtg3/E505u4ffHmwBi0RmEcAMnnrlb16XX1bBmYDzpUhFUgsC npR8TXCn8nR+uM3hm01Gl/1+tjD5I0MA4yIG3CiIu1tONYsrYrKJgvg/XMoy6hvAMvGC 1IQQ==
X-Gm-Message-State: AHYfb5jxYta5uLW0uOx1uYI4wPsfyE6eArpPCeJKOYrtiMi2Mho7nymW lxjZTBmwJpOhnifRqFTqiBmvemJtP9CnGB8=
X-Received: by 10.107.137.30 with SMTP id l30mr13068649iod.279.1502430009203; Thu, 10 Aug 2017 22:40:09 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.107.164.42 with HTTP; Thu, 10 Aug 2017 22:40:08 -0700 (PDT)
From: Martin Thomson <martin.thomson@gmail.com>
Date: Fri, 11 Aug 2017 15:40:08 +1000
Message-ID: <CABkgnnXcjaqXeRLq=+W98HnubFSEy_DWB7PbaK8GEDUK+Wvetg@mail.gmail.com>
Subject: Splitting transport and application error code spaces
To: QUIC WG <quic@ietf.org>
Content-Type: text/plain; charset="UTF-8"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/9PiAHSsZC1urXQZZpvxSJmrgap8>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 11 Aug 2017 05:40:12 -0000

A while back we decided to use a single error code space.  But in
https://github.com/quicwg/base-drafts/issues/485, I noticed that we
have an implicit requirement in the protocol not to have the transport
close streams.  If the transport resets streams, it could destroy
critical application state.

The neatest way to enforce the separation of application and transport
is to create an application error space:

  https://github.com/quicwg/base-drafts/pull/722

This splits the error codes for application protocols from the
transport codes.  To do this, it splits CONNECTION_CLOSE into
TRANSPORT_CLOSE and APPLICATION_CLOSE.  These two frames have
identical format and semantics, but use different error code spaces.
RST_STREAM and STOP_SENDING now only carry application error codes,
making it clear that resetting streams is the domain of the
application protocol.

In doing this, I noticed that the error code space is ludicrously
large.  So I have a companion PR that shrinks it to a much more
manageable 16 bits:

  https://github.com/quicwg/base-drafts/pull/723