Re: [rtcweb] AD Review: draft-ietf-rtcweb-jsep

Justin Uberti <juberti@google.com> Thu, 20 April 2017 05:28 UTC

Return-Path: <juberti@google.com>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id BABA3129450 for <rtcweb@ietfa.amsl.com>; Wed, 19 Apr 2017 22:28:01 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.701
X-Spam-Level:
X-Spam-Status: No, score=-2.701 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.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 uhohwVeATHRh for <rtcweb@ietfa.amsl.com>; Wed, 19 Apr 2017 22:27:57 -0700 (PDT)
Received: from mail-io0-x22d.google.com (mail-io0-x22d.google.com [IPv6:2607:f8b0:4001:c06::22d]) (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 471B8129420 for <rtcweb@ietf.org>; Wed, 19 Apr 2017 22:27:57 -0700 (PDT)
Received: by mail-io0-x22d.google.com with SMTP id o22so58779185iod.3 for <rtcweb@ietf.org>; Wed, 19 Apr 2017 22:27:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Pxa0fRLaUe0NB/tj7HoEcd/KKj9ElkogQheJylsZ5NE=; b=Gu05MpNx8puNFoxNe8rBrvcFQw0RIP5T/4/in+JNfb4rBMBgDlAEZ2g1TVCcGu65FG S3eU/xgeex8DcPqAWedLzd9gFElvw46W+HXiNW2imgjuIJAcZzWbg31NTrxfkg5yggAr lU4esFwreHYIXehQ9q5McSonCOpPcAXW/uZ3E219oZb3sVkBMhtoScbV4xfg4LuibjCL qImO2DiNsGcH5wDdhXZncUmDXsJsKRYaAzixLWmLg9iWhrjoLClkxsk2dJ1wnivockSo qtZki2/p13rpXdWtoBpE7a+LYc2Q13oy5qjCm5HWmWQ6rhUOYtVSLckyEfwX3wN4iUr/ Biyg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Pxa0fRLaUe0NB/tj7HoEcd/KKj9ElkogQheJylsZ5NE=; b=gLVEBgkf/etUdFzXLlIu4kUhUGp2cWdZHjqfn12a5MmEonKWLJM5IZEnsJbsyC/xfP mchVssOFV/JUTSYH+Y8K5qU7i83UcPOvxgGAG1PCMHzmPUxr0gzAEmGbbeuK+RrenNc6 LlrOBKrLaCvsFZUhE3ZtEe/JrKgGrWfTwAcfdUzfvC6mpyT1Q1/ryywj4GCExP0lwa65 BK5g9n+Rcy4BScoypERVJK3NUe5dO05Zzxroj6ki32USPo1eYCzOjPWV/aDalbFou8y5 KWjAscqbCWJHTe/EiMrii8GevybrwIXmYpXIdp2/ileLmlwb4N4TTWEWYv+Br/Siiydu 0YHg==
X-Gm-Message-State: AN3rC/6QY3eK3xe4pMW+y8cNJ0/Cxyc171wxswC6OfNr6Uq+FFrITlPf WXp+GUMv4Q2CN9YYiKI0a/wHa59cZ8Q/
X-Received: by 10.36.17.139 with SMTP id 133mr1777585itf.97.1492666062222; Wed, 19 Apr 2017 22:27:42 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.107.138.143 with HTTP; Wed, 19 Apr 2017 22:27:21 -0700 (PDT)
In-Reply-To: <27ce2a51-5474-11ad-2130-379ed55c68c5@nostrum.com>
References: <c76dd321-c854-91ce-b101-36ccf794c213@nostrum.com> <27ce2a51-5474-11ad-2130-379ed55c68c5@nostrum.com>
From: Justin Uberti <juberti@google.com>
Date: Wed, 19 Apr 2017 22:27:21 -0700
Message-ID: <CAOJ7v-3O48WGSd3Wzj2a-m3RpaHxp+EkdBZRYVyyCsY8+DANeQ@mail.gmail.com>
To: Adam Roach <adam@nostrum.com>
Cc: draft-ietf-rtcweb-jsep@ietf.org, "rtcweb@ietf.org" <rtcweb@ietf.org>, Ted Hardie <ted.ietf@gmail.com>
Content-Type: multipart/alternative; boundary="001a114458206886da054d926646"
Archived-At: <https://mailarchive.ietf.org/arch/msg/rtcweb/wuKmLJvPLWnInj2tE0hJSuk49HY>
Subject: Re: [rtcweb] AD Review: draft-ietf-rtcweb-jsep
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <rtcweb.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rtcweb/>
List-Post: <mailto:rtcweb@ietf.org>
List-Help: <mailto:rtcweb-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 20 Apr 2017 05:28:02 -0000

Thanks for the detailed review. https://github.com/rtcweb-wg/jsep/issues is
tracking these 50 issues and their blocker status.

On Wed, Apr 19, 2017 at 9:06 AM, Adam Roach <adam@nostrum.com> wrote:

> One quick follow-up -- as was discussed in MMUSIC in Chicago, the
> 'dtls-id' attribute defined in draft-ietf-mmusic-dtls-sdp has been renamed
> to 'tls-id' as of the -23 version that was submitted yesterday. This
> necessitates changes in the JSEP spec.
>
> /a
>
>
> On 4/19/17 00:42, Adam Roach wrote:
>
> RTCWEB working group --
>
> I have completed my AD review for JSEP. I want to start by saying that
> this is an impressive body of work, and that everyone who has contributed
> to getting it to its current state deserves a round of applause. The volume
> of comments below does not represent that the document is of poor quality.
> Rather, the number of comments reflects on the breath, depth, and size of
> the document itself.
>
> All of that said, I'm going to need to see a new version of this document
> before I put it in front of the IETF for last call. The document has a
> number of issues that I suspect will trip people up in their LC reviews.
> Most of these are feedback that the document authors should treat as normal
> last call comments. The feedback that I consider to block progressing the
> document, in my role as AD, is explicitly marked with the prefix "BLOCKER",
> and these will need to be resolved in a new version of the document before
> progressing it further. Note that it is entirely possible that something I
> have marked "BLOCKER" may stem from an error on my part; so recognize that
> these are not demands for change, as much as a need to have things either
> fixed in the document or explained to me.
>
> Some general, top-level comments:
>
> BLOCKER: The nits tool reports (and a cursory hand check supports this)
> that six of the references are unused, and RFC4572 has been (recently)
> obsoleted. The remaining references are largely out of date by many
> versions, which I believe the current tools will automatically handle if
> version numbers are simply pulled out of the source. Finally, a large
> number of the referenced working group documents still use the individual
> name (e.g., draft-nandakumar-rtcweb-sdp instead of draft-ietf-rtcweb-sdp).
>
> There is a lot of text that should have been removed when the decision to
> prohibit SDP munging was taken. I will call these out individually, but
> wanted to call it out here at the top since it has impacts in many places.
> (In this sentence and elsewhere, I use "munging" exclusively to refer to
> changing SDP between a createOffer or createAnswer and the corresponding
> setLocalDescription. In particular, I *do* *not* use it to refer to changes
> applied to SDP sent to or received from the remote party). Although I
> repeat it below, I want to be clear in my position: if an implementation
> creates SDP, verifies that it has not changed since its creation, and then
> has difficulty processing it, that is a programming error, not a protocol
> error. It is not appropriate to call out how to recover from programming
> errors in a protocol document.
>
> BLOCKER: Several of the SDP-building procedures in this document call out
> addition of "a=fingerprint" to individual media sections, while the
> canonical definition of "a=fingerprint" allows these to be added at either
> the session level or the media level. The same is true of ice-pwd and
> ice-ufrag. While the process of SDP building in this document appears to be
> prescriptive on purpose, one assumes that it is allowed some variation so
> as to accommodate deployment of future SDP extensions. Because of this
> state of affairs, it is unclear whether implementations that consolidate
> these attributes at the session level when they would otherwise be
> identical among all media sections is such an allowable variation.
> Ambiguity in specifications is never a good thing, so I believe that the
> draft needs to do one of: (a) specifically call out this kind of
> aggregation as allowed; (b) specifically call out this kind of aggregation
> as disallowed; or (c) include a blanket statement that implementations are
> allowed to emit SDP that is semantically equivalent to that which is
> generated by the procedures in this document, but which may vary in exact
> structure. I have a strong preference for (c) -- implementations will be
> required to deal with such variations anyway to interop with legacy SDP, so
> prohibiting JSEP clients from generating them serves no goal.
>
> BLOCKER: The text in the third paragraph of section 5.7.1 intentionally
> contradicts language in RFC 5245; as such, this document needs to formally
> update that RFC. Note that updated RFCs are expected to be mentioned in the
> Abstract as well as the document metadata.
>
> The rest of my comments are in document order.
>
> Section 1.1 talks about Jingle as a potential transport, but the remainder
> of the document calls out a slew of MTI SDP features that don't have
> analogs for signaling in Jingle. I recommend either qualifying the
> discussion of Jingle with some mention of it requiring as-yet undefined
> extensions, or removing mention of Jingle altogether.
>
> Section 1.2 uses the term "glare" without describing it. This term may be
> unfamiliar to readers, and should be explained or cited.
>
> Section 3.2 has a paragraph starting "Lastly, while the actual media
> parameters are only know after an offer..."; the entire contents of this
> paragraph appear to be actually false if both ICE and DTLS are in use. I
> know there's conversation underway on MMUSIC and the WebRTC mailing lists
> on this topic, but none of them have yet described a situation in which
> this paragraph is actually true. Please remove it or add a sequence diagram
> showing how it arises.
>
> The state labels in Figure 2 ("Remote-Offer") do not match the state names
> used in the document text ("have-remote-offer"). Please make these
> consistent.
>
> Section 3.3, paragraph 3 is an example of text that should have been
> removed with SDP munging. Please remove it.
>
> The same is true of the final three words in the first paragraph of
> section 3.4.
>
> Section 3.5.1 talks about a "recycled m= section" without any context for
> what this means. Please provide a forward reference to the section that
> discusses m= section recycling.
>
> BLOCKER: The final paragraph in section 3.5.1 says that candidates are
> *only* gathered for m= sections referenced in BUNDLE tags. Section 3.5.4
> talks about gathering more candidates than that under certain
> circumstances. Please make these consistent with each other.
>
> Since it has been the cause of actual interop issues in the field, it is
> probably worth mentioning, in section 3.5.2.1, that the IceCandidate
> strings explicitly *do not* start with "a=".
>
> The second paragraph of section 3.6.1 seems odd when talking about
> creating answers, and downright incorrect when talking about offers.
> Minimally, it needs text to explain why  x=0/y=0 would ever make more sense
> than using "a=sendonly/recvonly/inactive."
>
> Section 3.6.2 talks about "original resolution" where it appears to want
> to reference the current resolution. This happens in three different places.
>
> BLOCKER: Section 3.6.2, second paragraph, second sentence says a sender
> MUST scale to match imageattr. The same section, paragraph seven, says it
> SHOULD scale to match imageattr. There needs to be only one normative
> statement on this topic, so as to avoid confusion among implementors.
>
> Section 3.6.2 would ideally include a disclaimer, like we have for many
> other features, indicating that -- despite normative statements in this
> section -- the remote side might not honor imageattr because of legacy
> behavior, and that implementations MUST be prepared to handle such
> situations.
>
> Section 4.1.9 paragraph one includes an enumeration of things that can
> appear in the "type" field, but omits "rollback" from the list.
>
> Section 4.2.6, second paragraph says that codec preferences cannot add
> formats that were negotiated away in previous offer/answer exchanges. My
> recollection is that this conflicts with the decision taken by the WebRTC
> working group; and a quick read of the description of setCodecPreferences()
> in their current spec seems to confirm this (at least, by omitting this
> restriction). Unless I'm mistaken about the state of play, this paragraph
> should be modified to indicate that codec preferences *can* add back in
> codecs were not negotiated in previous offer/answer exchanges.
>
> BLOCKER: The first bullet on page 35 has a normative statement about the
> AVT profile strings that must be accepted, but uses an unspecified grammar
> to actually specify the string. If this is normative, it needs to be
> formal. Either specify the string using a formal and cited grammar, or
> provide an exhaustive list.
>
> Section 5.2.1 contains the statement "both 'o=' and 's=' are meaningless"
> -- this should be qualified with "in JSEP." These fields are not generally
> meaningless in all uses of SDP.
>
> BLOCKER: The first bullet on page 37 says that port 9 "MUST be used,"
> which contradicts the behavior required of BUNDLE-only sections (for which
> port 0 MUST be used). Clarify.
>
> Page 37 contains a statement that "attributes of category IDENTICAL or
> TRANSPORT should not be repeated in bundled m= sections". Two issues: this
> reads as normative, so consider "SHOULD NOT" rather than "should not."
> Also, I *think* this is true of bundle-only sections, not bundled sections
> in general.
>
> Page 38, second-to-last bullet refers to "an 'a=rtcp-fb' mechanism" where
> it should say "an 'a=rtcp-fb' line".
>
> Page 41 contains a statement reading "This promotes readability," which
> might be read by some as promoting machine parsing rather than
> troubleshooting. I propose replacing "readability" with "troubleshooting."
>
> BLOCKER: The bullet at the bottom of of page 42 ("If any RtpTranceiver has
> been added...") is normative and redundant with the bullet in the middle of
> page 44 ("If any RtpTranceiver has been added..."), which is also
> normative. Remove one.
>
> BLOCKER: The second bullet on page 43 ("If an RtpTranceiver has been
> stopped and is associated..." is normative and redundant with (and slightly
> contradictory to) the bullet on page 44 starting "If any RtpTranceiver has
> been slopped...") which is also normative. Remove one.
>
> The bullets on page 45 use the construct "MUST only" three times. This is
> confusing, and likely to lead to implementors doing the wrong thing. Please
> rewrite in the form "The 'a=rtcp' line MUST NOT be added unless..."
>
> The paragraph that spans pages 46 and 47 claims that the
> "VoiceActivityDetection" parameter has no impact on whether the local
> endpoint does silence suppression for the audio it sends. The paragraph
> immediately preceding it says that JSEP implementations MUST NOT emit "CN"
> codecs if this parameter is set to "false." This only makes sense because
> RFC 3264 allows SDP to specify codecs that you want to receive by do not
> plan to generate (i.e., you can send CN even if your offer doesn't have CN
> in it, as long as the answer *does*). This is slightly counter-intuitive to
> many implementors, so it probably bears mention.
>
> Page 51, bullet starting "For each supported RTCP feedback...": replace
> "an 'a=rtcp-fb' mechanism" with "an 'a=rtcp-fb' line".
>
> Page 52, bullet starting "An 'a=setup' line": add the words "when allowed"
> to the end of the bullet.
>
> Section 5.5, bullet 4 talks about parsing the local session description.
> This is legacy from when SDP munging was allowed, and should be removed
> (especially the normative statement about parsing errors: the check that
> the SDP has not changed will catch changes, and any implementation that
> cannot parse its own SDP is exhibiting an internal error, not a protocol
> error).
>
> Section 5.7, first paragraph: similar to above, change
> "setLocal/RemoteDescription" to "setRemoteDescription."
>
> BLOCKER: Section 5.7.1, first paragraph: this claims that a= lines are
> order insensitive. Nothing in SDP's base definition makes this true, and
> nothing precludes specific attributes from assigning meaning to the order
> in which they appear. See draft-ietf-slim-negotiating-human-language-08
> for an example of an SDP extension that *does* apply meaning to the order
> in which attributes appear (for better or worse).
>
> Section 5.7.2 should include a statement (probably at the end) that
> implementations may know and process attributes other than those described
> in this section.
>
> Page 62 has a bullet ending "If this is a local description, the
> 'ice-lite' attribute MUST NOT be specified." This sentence is leftover from
> before SDP munging was prohibited and should be removed.
>
> Section 5.8 describes the behavior of an implementation processing its own
> unmodified SDP. It contains significant error language that should have
> been removed when SDP munging was removed. In particular, please remove all
> of the following:
>
>    - "If an error is returned, the session MUST be restored to the state
>    it was in before performing these steps."
>    - "If RTCP mux is not indicated, but was previously negotiated, i.e.,
>    the RTCP ICE component no longer exists, this MUST result in an error."
>    - "If any indicated RTP header extension is not supported, this MUST
>    result in an error."
>    - "If any indicated media format is not supported, this MUST result in
>    an error."
>    - "If any referenced primary payload types are not present, this MUST
>    result in an error."
>
> The first bullet of section 5.8 includes: "...unless it has been marked as
> bundle-only...," and the second includes "...and it has not been marked as
> bundle-only..." -- in both cases, I believe the indicated behavior is
> supposed to happen for any bundled section (e.g., in a re-offer or
> re-answer), regardless of whether it is bundle-only.
>
> Section 5.8 contains the sentence: "If there is no RtpTransceiver
> associated with this m= section (which will only happen when applying an
> offer)..." -- it is grammatically ambiguous whether this says that the
> *absence* of an RtpTranceiver can only happen with an offer, or if the
> *presence* of an RtpTranceiver can only happen with an offer. Suggest
> rephrasing as: "If applying an offer and there is no RtpTransceiver
> associated with this m= section, find one..."
>
> BLOCKER: Section 5.9 discusses remote description handling. This means
> that the first bullet on page 65 talks about remote description handling in
> the "have-local-offer" state. This means that the second sentence of that
> bullet talks about remote offer handling when in the "have-local-offer"
> state. That... doesn't seem right. I'm particularly concerned that the
> language regarding ICE restart probably belongs somewhere else, since it
> doesn't appear to belong where it is, but I can't quickly figure out where
> it's missing from.
>
> The bullet in the middle of page 66 (starting "For each specified media
> format...") states that unsupported media formats must be ignored. The
> following bullet specifies that "rtx" media formats that refer to "primary
> payload types [that] are not present" MUST result in an error. Read
> naïvely, implementors may very well discard a payload type for lack of
> understanding, and then discover an "rtx" for that discarded PT, and
> generate an error ("it's not present!"). These bullets need additional text
> regarding how they interact with each other.
>
> It's nice that you describe how you get from AS to TIAS, but as the
> formula here isn't intended to be tuned, please simplify it for imlementors
> as "TIAS = (950 * AS) - 16000". Minimally, include parentheses around the
> first three terms and the final two; while most people will assume proper
> order of operations, leaving these ungrouped is asking for trouble. (I once
> had an argument with an implementor reading an RFC who insisted that 96
> wasn't an even multiple of 32; they asserted, with great vehemence, that 96
> is 32 times three, and three is odd, so 96 is an *odd* multiple of 32.
> Don't underestimate the ingenuity of some of the people who will end up
> implement these specifications.)
>
> Page 67 contains the acronym "DTX" without expanding it. Please expand it.
>
> BLOCKER: Page 68 contains a sub-bullet that says "If the m= section
> references any media formats, RTP header extensions, or RTCP feedback
> mechanisms that were not present in the corresponding m= section in the
> offer, this indicates a negotiation problem and MUST result in an error."
> No. This is a violation of RFC 3264. Section 6.1 of that document, when
> talking about generating answers, specifically stipulates:
>
>    The stream MAY indicate additional media formats, not listed in the
>    corresponding stream in the offer, that the answerer is willing to
>    send or receive (of course, it will not be able to send them at this
>    time, since it was not listed in the offer).
>
> Note, for example, that this is *exactly* the behavior that the CN
> handling I describe above relies on. General handling for header extensions
> and (I believe) feedback mechanisms is intended to operate the same way.
> This sub-bullet needs to be remove in its entirety.
>
> BLOCKER: The final bullet of page 68 refers to answer directionality of
> "sendrecv" and "sendonly." These are incorrect when applying remote
> answers, for which these should be "sendrecv" and "recvonly." Please
> rephrase in terms of whether media is to be sent, or fix in some other way
> that doesn't get the sense reversed for remote answers.
>
> BLOCKER: The first bullet on page 70 exhibits the same error.
>
> Section 7 does not acknowledge IPv6. The IAB statement on IPv6
> <https://www.iab.org/2016/11/07/iab-statement-on-ipv6/>
> <https://www.iab.org/2016/11/07/iab-statement-on-ipv6/> has a
> recommendation that all protocol specifications have IPv6 examples in them.
> Since we have a separate example document, and Suhas has indicated that he
> will be including some IPv6 examples in it, I think you can get away in
> this document by amending the final paragraph of section 7 as: "More
> examples of SDP for WebRTC call flows, including examples of IPv6
> addresses, can be found in [I-D.ietf-rtcweb-sdp]." I make no promise that
> other IESG members will find this sufficient, but I'm personally okay with
> it.
>
> For the examples, please expand the acronyms "JS" and "UA".
>
> BLOCKER: This is an issue with all of the examples. Page 37 contains a
> bullet that asserts that (unless excluded by rare circumstances which the
> examples do not stipulate), media formats MUST include those specified in
> [draft-ietf-rtcweb-video], section 5. None of the examples comply with this
> normative requirement.
>
> All examples include telephone-event audio codecs, but omit a
> corresponding "a=fmtp" line. RFC4733 specifies:
>
>    SDP descriptions using the event payload MUST contain an fmtp format
>    attribute that lists the event values that the receiver can process.
>
> While this is a little hinky for implementations that plan to send, but
> not to receive, DTMF (and that's the only reason I'm not marking this as a
> blocker), I don't believe that such implementations are exempted from the
> normative requirement (as SDP recipients may not be expecting such a
> situation). Including such fmtp lines in the examples is probably the best
> way to avoid resulting interop issues.
> BLOCKER: The example on page 83 includes "a=rid" attributes, but omits a
> corresponding "a=extmap" attribute to indicate which value is to be used
> for the associated header extensions.
>
> /a
>
>
> _______________________________________________
> rtcweb mailing listrtcweb@ietf.orghttps://www.ietf.org/mailman/listinfo/rtcweb
>
>
>
> _______________________________________________
> rtcweb mailing list
> rtcweb@ietf.org
> https://www.ietf.org/mailman/listinfo/rtcweb
>
>