Re: [rtcweb] AD Review: draft-ietf-rtcweb-jsep
Adam Roach <adam@nostrum.com> Wed, 19 April 2017 16:07 UTC
Return-Path: <adam@nostrum.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 57CCF128896; Wed, 19 Apr 2017 09:07:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.879
X-Spam-Level:
X-Spam-Status: No, score=-1.879 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RP_MATCHES_RCVD=-0.001, T_SPF_HELO_PERMERROR=0.01, T_SPF_PERMERROR=0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
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 iUTrocU_X6Sd; Wed, 19 Apr 2017 09:07:05 -0700 (PDT)
Received: from nostrum.com (raven-v6.nostrum.com [IPv6:2001:470:d:1130::1]) (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 B3F0C128DE5; Wed, 19 Apr 2017 09:07:05 -0700 (PDT)
Received: from Orochi.local (99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228]) (authenticated bits=0) by nostrum.com (8.15.2/8.15.2) with ESMTPSA id v3JG73EU030378 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO); Wed, 19 Apr 2017 11:07:03 -0500 (CDT) (envelope-from adam@nostrum.com)
X-Authentication-Warning: raven.nostrum.com: Host 99-152-146-228.lightspeed.dllstx.sbcglobal.net [99.152.146.228] claimed to be Orochi.local
From: Adam Roach <adam@nostrum.com>
To: draft-ietf-rtcweb-jsep@ietf.org, "rtcweb@ietf.org" <rtcweb@ietf.org>, Ted Hardie <ted.ietf@gmail.com>
References: <c76dd321-c854-91ce-b101-36ccf794c213@nostrum.com>
Message-ID: <27ce2a51-5474-11ad-2130-379ed55c68c5@nostrum.com>
Date: Wed, 19 Apr 2017 11:06:57 -0500
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:52.0) Gecko/20100101 Thunderbird/52.0.1
MIME-Version: 1.0
In-Reply-To: <c76dd321-c854-91ce-b101-36ccf794c213@nostrum.com>
Content-Type: multipart/alternative; boundary="------------072A448ACA78C99BA4E5307C"
Content-Language: en-US
Archived-At: <https://mailarchive.ietf.org/arch/msg/rtcweb/JDbkncjiD86FGnRcz1LuPaKGRxM>
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: Wed, 19 Apr 2017 16:07:10 -0000
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/> 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 list > rtcweb@ietf.org > https://www.ietf.org/mailman/listinfo/rtcweb
- [rtcweb] AD Review: draft-ietf-rtcweb-jsep Adam Roach
- Re: [rtcweb] AD Review: draft-ietf-rtcweb-jsep Adam Roach
- Re: [rtcweb] AD Review: draft-ietf-rtcweb-jsep Justin Uberti