Re: [Gen-art] [Last-Call] Genart last call review of draft-ietf-taps-interface-20

Lars Eggert <lars@eggert.org> Thu, 07 September 2023 11:00 UTC

Return-Path: <lars@eggert.org>
X-Original-To: gen-art@ietfa.amsl.com
Delivered-To: gen-art@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 6D970C14CE5F; Thu, 7 Sep 2023 04:00:39 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.107
X-Spam-Level:
X-Spam-Status: No, score=-2.107 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=eggert.org
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XhXb6InyWDNX; Thu, 7 Sep 2023 04:00:35 -0700 (PDT)
Received: from mail.eggert.org (mail.eggert.org [IPv6:2a00:ac00:4000:400::25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 18932C14F721; Thu, 7 Sep 2023 04:00:35 -0700 (PDT)
Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 5CE83808A1; Thu, 7 Sep 2023 14:00:30 +0300 (EEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=eggert.org; s=dkim; t=1694084431; h=from:subject:date:message-id:to:cc:mime-version:content-type: in-reply-to:references; bh=oWCa1hAPYx9JdXPEheeI/zMkyF1vEY7b44wWQKdrj8Y=; b=Ri6Cxs7+AMxphXTs5fZfrhHxLE4yFJWQcu0MfXMwARG5KTyltJuZu6BiBnTfSI7xMOUtM0 sQDdWVLj85h7LZ10Yx4+q1gUhlDTQ3ThGF21dvg1ziMouKZOEwxhO627FSGoUV7TibORAM lLcSTvC1G0jdxooriIQHXAXpJgJ+Qdoq/ZKZULqIl7+t88ir8Lc1oX7cVqVUmpOqs1jN62 gbclB5W+JhcEIoommNYcVLtO/QeAx/YAnynB9qVqeR9xpgV7uBKBVKJa5C5c8x8sJWvIEN gnXlkO2EbwIPsCNFmycvpXlTEM4KtJFRzxpzDQBXtJuXrOpgHU/qrZfxLwix0Q==
Content-Type: multipart/signed; boundary="Apple-Mail=_803E917B-B225-4F77-98CD-8A0B358AD1DA"; protocol="application/pgp-signature"; micalg="pgp-sha512"
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.700.6\))
From: Lars Eggert <lars@eggert.org>
In-Reply-To: <168116873941.32681.13446457457828933798@ietfa.amsl.com>
Date: Thu, 07 Sep 2023 14:00:32 +0300
Cc: General Area Review Team <gen-art@ietf.org>, draft-ietf-taps-interface.all@ietf.org, last-call@ietf.org, taps@ietf.org
Message-Id: <BF9A5E71-D8DC-46E7-85CE-D2E13AB5AD4E@eggert.org>
References: <168116873941.32681.13446457457828933798@ietfa.amsl.com>
To: Thomas Fossati <thomas.fossati@arm.com>
X-Last-TLS-Session-Version: TLSv1.2
Archived-At: <https://mailarchive.ietf.org/arch/msg/gen-art/YhTR5aRq03SqUh1FuW43vR0kG_M>
Subject: Re: [Gen-art] [Last-Call] Genart last call review of draft-ietf-taps-interface-20
X-BeenThere: gen-art@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: "GEN-ART: General Area Review Team" <gen-art.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/gen-art>, <mailto:gen-art-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/gen-art/>
List-Post: <mailto:gen-art@ietf.org>
List-Help: <mailto:gen-art-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/gen-art>, <mailto:gen-art-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 07 Sep 2023 11:00:39 -0000

Thomas, thank you for your review and thank you all for the following discussion. I have entered a Discuss ballot for this document based on my own review.

Lars


> On Apr 11, 2023, at 02:18, Thomas Fossati via Datatracker <noreply@ietf.org> wrote:
> 
> Reviewer: Thomas Fossati
> Review result: Ready with Issues
> 
> I am the assigned Gen-ART reviewer for this draft. The General Area
> Review Team (Gen-ART) reviews all IETF documents being processed
> by the IESG for the IETF Chair.  Please treat these comments just
> like any other last call comments.
> 
> For more information, please see the FAQ at
> 
> <https://trac.ietf.org/trac/gen/wiki/GenArtfaq>.
> 
> Document: draft-ietf-taps-interface-??
> Reviewer: Thomas Fossati
> Review Date: 2023-04-10
> IETF LC End Date: 2023-04-14
> IESG Telechat date: Not scheduled for a telechat
> 
> The document describes an API that abstracts the transport services
> available on the platform and aims at replacing the BSD socket
> interface.
> 
> The intended status is standards track which looks appropriate.
> 
> The document makes no requests to IANA.
> 
> The document is generally well written and easy to follow.
> 
> Internationalisation-related concerns are minimal.  Though maybe
> something could be explicitly said about the parts of the API that can
> become visible to human eyes, e.g., Message Contexts, and SendError
> reasons.
> 
> Not a blocking issue - because in general the meaning can be inferred
> quite easily - but I've found the typographic conventions to be not
> super clear / consistent.  Some times input parameters are exemplary
> (e.g., "https", 443), other times they are given generic names (e.g.,
> GroupAddress).  It'd be probably neater if the API were described more
> formally in terms of their (abstract) input and output types to prevent
> the reader from inferring the wrong signatures.  Also, examples could
> use a more self-consistent pseudo-code convention, but as per premise,
> this is not blocking.  However, I'd suggest the authors to do a pass on
> the whole document and see if they see opportunities to improve the API
> presentation language.
> 
> The API objects can be quite complex, and there is no explicit
> validation on construction.  Question: is the assumption that
> implementations will do the same?  Or are they are free to, for example,
> use, say, a builder pattern to provide a safer experience for their
> users?
> 
> Question: should Appendix A be moved to draft-ietf-taps-impl?
> 
> Note: some examples have too long lines which will look suboptimally
> when rendered in text and pdf.
> 
> I was curious about the implementation status but I couldn't find
> further info.  If you happen to have implementations already, it'd be
> nice to give them visibility in a BCP205 "Implementation Status"
> section.
> 
> Eight authors are currently listed, but RFC7322 seems to allow at most
> five [1].
> 
> [1] https://www.rfc-editor.org/rfc/rfc7322.html#section-4.1.1
> 
> I have made a PR that fixes a few typos I stumbled upon while reading:
> https://github.com/ietf-tapswg/api-drafts/pull/1128
> 
> # 1.1
> 
> IPv4 and IPv6 addresses should be also listed among the basic types?
> Also, strings (e.g., used for services, interfaces, hostnames).
> 
> # 3.1.1
> 
> HTTPS with raw public keys is not a great match ;-)
> What about using a PK cert rather than raw PK?
> 
> # 3.1.2
> 
> I have found this example to be rather puzzling.  It looks to be sending
> the same message on two different connections to the same HTTPS endpoint
> at roughly the same time.  What is the use case for this?  Also, I
> couldn't tell whether the same output buffer is used for both responses,
> which added to my confusion.
> 
> The in last para:
> 
>  "Preconnections are reusable after being used to initiate a
>   Connection.  Hence, for example, after the Connections were closed,
>   the following would be correct:"
> 
> the positioning of "for example" is slightly ambiguous: it is not clear
> whether it is necessary that all connections derived from a given
> preconnection are closed before one is able to call Initiate() again, or
> not.
> Could you please clarify this aspect?
> 
> # 3.1.3
> 
> Apologies in advance, but my OCD is triggered by typographic
> inconsistencies :-)
> 
> In this example, are the "..."-prefixed comments supposed to have
> different semantics from those that don't?  If so, please explain,
> otherwise remove the "...".
> 
> It was not immediately clear to me whether "sending the ResolvedLocal
> list to peer via signalling channel" is taken care of by
> Preconnection.AddRemote(RemoteCandidates).
> Could you please clarify this?
> 
> Also, please remove the empty line before
> Preconnection.AddRemote(RemoteCandidates), unless there's a good reason
> for deviating from the rest of the examples, which I have missed.
> 
> # 4
> 
> The five paragraphs are slightly patchwork-y.  For example, the second
> para fluctuates from Selection to Connection and then again to Selection
> props.
> 
> I suggest grouping more tightly around the different properties:
> 
> NEW
> 
> 4.  Transport Properties
> 
>   Each application using the Transport Services API declares its
>   preferences for how the Transport Services system should operate.
>   This is done by using Transport Properties, as defined in
>   [I-D.ietf-taps-arch], at each stage of the lifetime of a connection.
> 
>   Transport Properties are divided into Selection, Connection, and
>   Message Properties.
> 
>   Selection Properties (see Section 6.2) can only be set during pre-
>   establishment.  They are only used to specify which paths and
>   protocol stacks can be used and are preferred by the application.
>   Calling Initiate on a Preconnection creates an outbound Connection or
>   a Listener, and the Selection Properties remain readable from the
>   Connection or Listener, but become immutable.  Selection Properties
>   can be set on Preconnections, and the effect of Selection Properties
>   can be queried on Connections and Messages.
> 
>   Connection Properties (see Section 8.1) are used to inform decisions
>   made during establishment and to fine-tune the established
>   connection.  They can be set during pre-establishment and they may be
>   changed later.  Connection Properties can be set on Connections and
>   Preconnections; when set on Preconnections, they act as an initial
>   default for the resulting Connections.
> 
>   Message Properties (see Section 9.1.3) control the behavior of the
>   selected protocol stack(s) when sending Messages.  Message Properties
>   can be set on Messages, Connections, and Preconnections; when set on
>   the latter two, they act as an initial default for the Messages sent
>   over those Connections.
> 
>   Note that configuring Connection Properties and Message Properties on
>   Preconnections is preferred over setting them later.  Early
>   specification of Connection Properties allows their use as additional
>   input to the selection process.  Protocol-specific Properties, which
>   enable configuration of specialized features of a specific protocol,
>   see Section 3.2 of [I-D.ietf-taps-arch], are not used as an input to
>   the selection process, but only support configuration if the
>   respective protocol has been selected.
> 
> If you find the proposal above OK, I can PR this:
> https://github.com/thomas-fossati/taps-api-drafts/tree/s4-reflow
> 
> 
> I am not sure the following is entirely correct:
> 
>  "Calling Initiate on a Preconnection creates an outbound Connection or
>   a Listener"
> 
> since a Listener is created with a call to Listen(), isn't it?
> 
> # 4.1
> 
> In this sentence:
> 
>  "alphanumeric strings in which words may be separated by hyphens."
> 
> It is not clear what is meant by "words"?  Also, s/hyphens/hyphens and
> underscores"?
> 
> Note: wouldn't allowing only underscores as separators help uniformity
> across languages?
> 
> In this sentence:
> 
>  "[...] and are defined in an RFC."
> 
> I am not sure why being defined in an RFC is relevant here?  Maybe
> adding an example would help to understand the rationale..
> 
> The sentence:
> 
>  "Avoid using any [...]"
> 
> should probably use BCP14 language.
> 
> # 4.2
> 
> I got confused by the use of "Ignore" to mean "I have no preference, do
> whatever".  Not a real problem, just a bit of cognitive dissonance.
> 
> # 6
> 
> 5th para: why SHOULD and not MUST? Specifically, when is it OK for
> multiple remote endpoints to represent different services?
> 
> # 6.1
> 
> Maybe use 4443 for WithPort(): I guess one would normally use
> WithService("https") if they want to use the standard port for the
> service, and WithPort(...) only for alternative/non-default.
> 
> # 6.1.1
> 
> The three options:
> * Initiate() - send only
> * Listen() - receive only
> * Rendezvous() - send and receive
> are well described.
> 
> One source of confusion for me though is the very first para.  Does it
> apply to all three scenarios?  The sentence starts with the very generic
> "To use multicast [...]" so it'd seem so, but then reading the second
> para it looks like that preamble is specific to Initiate().
> 
> Could you please clarify?
> 
> # 6.1.3
> 
> Third para: It'd be probably more meaningful for:
> 
>  RemoteSpecifier.WithProtocol(QUIC)
> 
> to be
> 
>  AlternateRemoteSpecifier.WithProtocol(QUIC)
> 
> so that it chains up with the preceeding AddAlias() statement.
> 
> 
> # 6.1.4
> 
> Same comment as before with regards to WithPort().
> 
> 
> # 6.2.18
> 
> The reference to draft-ietf-taps-impl seems a bit too vague.  I have
> scanned it but couldn't find anything unambiguously applicable.
> 
> # 6.3.1
> 
> Is there a reason for not providing a user-friendly way for configuring
> X.509 verification?
> 
> # 6.3.2
> 
> The case of the trust callback does not match.
> 
> I think it should be one of:
> 
> SecurityParameters.SetTrustVerificationCallback(TrustCallback)
> 
> or
> 
> trustCallback := NewCallback({
>  // Handle trust, return the result
> })
> 
> 
> Ditto for the challenge callback.
> 
> # 8.1.5
> 
> Is this SCTP specific or could it apply more generally?
> 
> # 8.1.10
> 
> You could use "{{Section 4.2.3 of I-D.ietf-taps-arch}}" to make the
> reference for connection contexts separation more precise:
> 
> # 13
> 
> 5th para: not clear to me what is meant for "a protocols or paths" to be
> "raised"?  Same para: not clear what kind of "re-establishment is
> supported"?
> 
> Last para, the bit on visibility, tracing and logging:
> 
>  "Further, a Transport Services system should provide an interface to
>   poll information about which protocol and path is currently in use as
>   well as provide logging about the communication events of each
>   connection."
> 
> I reckon this is a very important point which is maybe worth BCP14 language.
> 
> # 15
> 
> I was a bit surprised that the TCP, SCTP and QUIC RFCs were not
> referenced.  But more generally, I am unsure about the criteria used to
> tell normative references from informative.  To me, BCP14 and
> draft-ietf-taps-arch are the only two normative things, the rest could
> be made informative.
> 
> 
> 
> 
> --
> last-call mailing list
> last-call@ietf.org
> https://www.ietf.org/mailman/listinfo/last-call