rfc8864xml2.original.xml | rfc8864.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="UTF-8"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "http://xml.resource.org/authoring/rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | ||||
nce.RFC.2119.xml"> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" | |||
<!ENTITY RFC3264 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | submissionType="IETF" docName="draft-ietf-mmusic-data-channel-sdpneg-28" | |||
nce.RFC.3264.xml"> | number="8864" | |||
<!ENTITY RFC3629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | consensus="true" ipr="trust200902" tocInclude="true" symRefs="true" sortRef | |||
nce.RFC.3629.xml"> | s="true" version="3"> | |||
<!ENTITY RFC3758 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <!-- xml2rfc v2v3 conversion 2.38.0 --> | |||
nce.RFC.3758.xml"> | <front> | |||
<!ENTITY RFC4960 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <title abbrev="SDP-Based Data Channel Negotiation"> | |||
nce.RFC.4960.xml"> | Negotiation Data Channels Using the Session Description Protocol (SDP)</title> | |||
<!ENTITY RFC4582 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <seriesInfo name="RFC" value="8864"/> | |||
nce.RFC.4582.xml"> | <author initials="K." surname="Drage" fullname="Keith Drage"> | |||
<!ENTITY RFC4975 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <organization>Unaffiliated</organization> | |||
nce.RFC.4975.xml"> | <address> | |||
<!ENTITY RFC5234 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <email>drageke@ntlworld.com</email> | |||
nce.RFC.5234.xml"> | </address> | |||
<!ENTITY RFC6455 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | </author> | |||
nce.RFC.6455.xml"> | <author initials="M." surname="Makaraju" fullname="Maridi R. Makaraju (Raju) | |||
<!ENTITY RFC6525 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | "> | |||
nce.RFC.6525.xml"> | <organization>Nokia</organization> | |||
<!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/refere | <address> | |||
nce.RFC.8174.xml"> | <postal> | |||
<!ENTITY DATAREQ SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refer | <street>2000 Lucent Lane</street> | |||
ence.I-D.ietf-rtcweb-data-channel.xml"> | <city>Naperville</city> | |||
<!ENTITY DATAPROTO SYSTEM "http://xml.resource.org/public/rfc/bibxml3/ref | <region>Illinois</region> | |||
erence.I-D.ietf-rtcweb-data-protocol.xml"> | <country>United States of America</country> | |||
<!ENTITY SDPSCTP SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refer | </postal> | |||
ence.I-D.ietf-mmusic-sctp-sdp.xml"> | <email> Raju.Makaraju@nokia.com</email> | |||
<!ENTITY SDPBIS SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refere | </address> | |||
nce.I-D.draft-ietf-mmusic-rfc4566bis-32.xml"> | </author> | |||
<!ENTITY SDPMUXATTR SYSTEM "http://xml.resource.org/public/rfc/bibxml3/re | ||||
ference.I-D.ietf-mmusic-sdp-mux-attributes.xml"> | <author fullname="Richard Ejzak" initials="R." surname="Ejzak"> | |||
<!ENTITY CLUEDATA SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refe | <organization>Unaffiliated</organization> | |||
rence.I-D.ietf-clue-datachannel.xml"> | <address> | |||
<!ENTITY MSRPDATA SYSTEM "http://xml.resource.org/public/rfc/bibxml3/refe | <email>richard.ejzak@gmail.com</email> | |||
rence.I-D.ietf-mmusic-msrp-usage-data-channel.xml"> | </address> | |||
]> | </author> | |||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> | <author fullname="Jerome Marcon" initials="J." surname="Marcon"> | |||
<?rfc toc="yes" ?> | <organization>Unaffiliated</organization> | |||
<?rfc symrefs="yes" ?> | <address> | |||
<?rfc iprnotified="no" ?> | <email>jeromee.marcon@free.fr</email> | |||
<?rfc strict="no" ?> | </address> | |||
<?rfc compact="yes" ?> | </author> | |||
<?rfc subcompact="no"?> | <author initials="R." surname="Even" fullname="Roni Even" role="editor"> | |||
<?rfc sortrefs="yes" ?> | <organization></organization> | |||
<rfc category="std" docName="draft-ietf-mmusic-data-channel-sdpneg-28" ipr="trus | <address> | |||
t200902"> | <email>ron.even.tlv@gmail.com</email> | |||
<front> | </address> | |||
<title abbrev="SDP-based Data Channel Negotiation"> | </author> | |||
SDP-based Data Channel Negotiation | ||||
</title> | <date month="September" year="2020"/> | |||
<author initials="K. E." surname="Drage" fullname="Keith Drage"> | ||||
<organization>Unaffiliated</organization> | <abstract> | |||
<address> | <t> Data channel setup can be done using either the in-band Data Channel | |||
<email>drageke@ntlworld.com</email> | Establishment Protocol (DCEP) or some out-of-band non-DCEP protocol. This docum | |||
</address> | ent specifies how the SDP (Session | |||
</author> | ||||
<author initials="M. R." surname="Makaraju" fullname="Maridi R. M | ||||
akaraju (Raju)"> | ||||
<organization>Nokia</organization> | ||||
<address> | ||||
<postal> | ||||
<street>2000 Lucent Lane</street> | ||||
<city>Naperville</city> | ||||
<region>Illinois</region> | ||||
<country>US</country> | ||||
</postal> | ||||
<email> Raju.Makaraju@nokia.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Richard Ejzak" initials="R.P." surname="Ejzak"> | ||||
<organization>Unaffiliated</organization> | ||||
<address> | ||||
<email>richard.ejzak@gmail.com</email> | ||||
</address> | ||||
</author> | ||||
<author fullname="Jerome Marcon" initials="J.M." surname="Marcon" | ||||
> | ||||
<organization>Unaffiliated</organization> | ||||
<address> | ||||
<email>jeromee.marcon@free.fr</email> | ||||
</address> | ||||
</author> | ||||
<author initials="R. E." surname="Even" fullname="Roni Even" role | ||||
="editor"> | ||||
<organization>Huawei</organization> | ||||
<address> | ||||
<email>roni.even@huawei.com</email> | ||||
</address> | ||||
</author> | ||||
<date month="May" year="2019"/> | ||||
<area>ART</area> | ||||
<workgroup>MMUSIC</workgroup> | ||||
<abstract> | ||||
<t> Data channel setup can be done using either the in-b | ||||
and Data Channel Establishment Protocol (DCEP) or using some out-of-band non-DCE | ||||
P protocol. This document specifies how the SDP (Session | ||||
Description Protocol) offer/answer exchange can be used to achieve | Description Protocol) offer/answer exchange can be used to achieve | |||
an out-of-band non-DCEP negotiation for establishing a data channel. | an out-of-band non-DCEP negotiation for establishing a data channel. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction" anchor="introduction"> | <section anchor="introduction"> | |||
<t> The concept of establishing a bi-directional | <name>Introduction</name> | |||
<t> The concept of establishing a bidirectional | ||||
data channel running on top of the Stream Control Transmission | data channel running on top of the Stream Control Transmission | |||
Protocol (SCTP) is in | Protocol (SCTP) is discussed in | |||
<xref target="I-D.ietf-rtcweb-data-channel"/> allowing applications to use data | <xref target="RFC8831"/>, allowing applications to use data channels. An in-ban | |||
channels. An in-band Data | d Data | |||
Channel Establishment Protocol (DCEP) is in <xref target="I-D.ietf-rtcweb-dat | Channel Establishment Protocol (DCEP) is described in <xref target="RFC8832"/ | |||
a-protocol"/>, | >; | |||
however other in-band or out-of-band | however, other in-band or out-of-band | |||
protocols may be used for establishing data channels. Each data | protocols may be used for establishing data channels. Each data | |||
channel consists of paired SCTP streams sharing the same SCTP Stream | channel consists of paired SCTP streams sharing the same SCTP Stream | |||
Identifier. Data channels are created by endpoint applications using | Identifier. Data channels are created by endpoint applications using | |||
the WebRTC API (Application Programming Interface), or other protocols | (1) the WebRTC API (Application Programming Interface) <xref | |||
like CLUE | target="WebRtcAPI"/> or (2) other protocols | |||
<xref target="I-D.ietf-clue-datachannel"/>. The protocols can be signaled | (e.g., Controlling Multiple Streams for Telepresence (CLUE) | |||
by the data channel "subprotocol" parameter, conceptually similar to | <xref target="RFC8850"/>). The protocols can be signaled | |||
the WebSocket <xref target="RFC5234"/> "subprotocol". However, apart from the | by the data channel 'subprotocol' parameter, conceptually similar to | |||
a WebSocket subprotocol as described in <xref target="RFC6455"/>. | ||||
However, apart from the | ||||
"subprotocol" value transmitted to the peer, an endpoint application can agre e on how to instantiate a given | "subprotocol" value transmitted to the peer, an endpoint application can agre e on how to instantiate a given | |||
subprotocol on a data channel, and whether it is signaled in-band | subprotocol on a data channel, and whether it is signaled in-band | |||
using DCEP or out-of-band using a non-DCEP protocol (or both). </t> | using DCEP or out-of-band using a non-DCEP protocol (or both).</t> | |||
<t>This document defines SDP offer/answer <xref target="R | <t>This document defines Session Description Protocol (SDP) offer/answer | |||
FC3264"/> procedures that enable out-of-band negotiation | procedures <xref target="RFC3264"/> that enable out-of-band negotiation | |||
for establishing data channels for transport of well-defined subprotocols. | for establishing data channels for transport of well-defined subprotocols. | |||
These procedures are based on generic SDP offer/answer negotiation rules for | These procedures are based on generic SDP offer/answer negotiation rules for | |||
SCTP | SCTP-based media transport as specified in <xref target="RFC8841"/> for | |||
based media transport as specified in <xref target="I-D.ietf-mmusic-sctp-sdp" | the SDP "m=" line proto values UDP/DTLS/SCTP and TCP/DTLS/SCTP. | |||
/> for | </t> | |||
the SDP "m" line proto values UDP/DTLS/SCTP and TCP/DTLS/SCTP. | <t>This document uses MSRP (the Message Session Relay Protocol) <xref targ | |||
et="RFC4975"/> | ||||
</t> | and BFCP (the Binary Floor Control Protocol) <xref target="RFC4582"/> in seve | |||
<t>This document uses MSRP (Message Session Relay Protoco | ral examples. It does not provide a | |||
l) <xref target="RFC4975"/> | ||||
and BFCP (Binary Floor Control Protocol) <xref target="RFC4582"/> in many of | ||||
the examples. It does not provide a | ||||
complete specification of how to negotiate the use of a data channel to trans port | complete specification of how to negotiate the use of a data channel to trans port | |||
MSRP. Procedures specific to each | MSRP. Procedures specific to each | |||
subprotocol would have to be documented elsewhere. For MSRP they are document ed in <xref target="I-D.ietf-mmusic-msrp-usage-data-channel"/> . The use of MSRP in some examples is only to show how the generic | subprotocol would have to be documented elsewhere. For MSRP, they are documen ted in <xref target="MSRP-over-Data-Channels"/>. The use of MSRP in some example s is only to show how the generic | |||
procedures described herein might apply to a specific subprotocol. | procedures described herein might apply to a specific subprotocol. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Conventions"> | <section> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", | <name>Conventions</name> | |||
"SHALL NOT", | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED","MAY", and "OPTIONAL | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
" in this | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
document are to be interpreted as described in BCP14 <xref target="RFC2119"/ | "<bcp14>SHOULD NOT</bcp14>", | |||
> | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
<xref target="RFC8174"/> when, and only when, the | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | |||
y | to be interpreted as described in BCP 14 <xref target="RFC2119"/> | |||
appear in all capitals, as shown here. | <xref target="RFC8174"/> when, and only when, they appear in all capitals, | |||
as shown here.</t> | ||||
</t> | </section> | |||
</section> | <section anchor="terminology"> | |||
<section title="Terminology" anchor="terminology"> | <name>Terminology</name> | |||
<t>This document uses the following terms: | <t>This document uses the following terms: | |||
<list style="hanging"> | </t> | |||
<t>Data channel: A WebRTC data channel as | <dl newline="false" spacing="normal"> | |||
specified in | <dt>Data channel:</dt> | |||
<xref target="I-D.ietf-rtcweb-data-channel"/>.</t> | <dd>A WebRTC data channel as specified in | |||
<t>Data channel stack: An entity which, u | <xref target="RFC8831"/>.</dd> | |||
pon application request, | <dt>Data channel stack:</dt> | |||
runs the data channel protocol to keep track of states, sending and receivi | <dd>An entity that, upon application request, | |||
ng | runs the data channel protocol to keep track of states as well as the | |||
data. If the application is a browser based JavaScript application | sending and receiving of data. If the application is a browser-based JavaSc | |||
ript application, | ||||
then this stack resides in the browser. If the application is a | then this stack resides in the browser. If the application is a | |||
native application then this stack resides in the application and is access | native application, then this stack resides in the application and is acces | |||
ible | sible | |||
via some sort of APIs.</t> | via some sort of API or APIs.</dd> | |||
<t>Data channel properties: Fixed propert | <dt>Data channel properties:</dt> | |||
ies assigned to a data | <dd>Fixed properties assigned to a data | |||
channel at the time of its creation. Some of these properties | channel at the time of its creation. Some of these properties | |||
determine the way the data channel stack transmits data on this | determine the way the data channel stack transmits data on this | |||
channel (e.g., stream identifier, reliability, order of delivery, etc.).</t | channel (e.g., stream identifier, reliability, order of delivery).</dd> | |||
> | <dt>Data channel subprotocol:</dt> | |||
<t>Data channel subprotocol: The applicat | <dd>The application protocol that is transported | |||
ion protocol which is transported | ||||
over a single data channel. Data channel subprotocol messages are sent as d ata | over a single data channel. Data channel subprotocol messages are sent as d ata | |||
channel payload over an established data channel. SDP offer/answer exchange can be used | channel payload over an established data channel. An SDP offer/answer excha nge can be used | |||
as specified in this document to negotiate the establishment of data channe ls, | as specified in this document to negotiate the establishment of data channe ls, | |||
corresponding data channel properties, associated data channel subprotocols | corresponding data channel properties, associated data channel subprotocols | |||
and data | , and data | |||
channel subprotocol properties. In this case the data channel subprotocols | channel subprotocol properties. In this case, the data channel subprotocols | |||
may be identified | may be identified | |||
by the values of the "subprotocol" parameters of the SDP "a=dcmap" attribut | by the values of the 'subprotocol' parameters of the SDP "a=dcmap:" attribu | |||
e as | te as | |||
described in <xref target="subprotocol-parameter"/>. Within this document t | described in <xref target="subprotocol-parameter"/>. Within this document, | |||
he term | the term | |||
"data channel subprotocol" is often abbreviated as just "subprotocol". | "data channel subprotocol" is often abbreviated as just "subprotocol". | |||
</t> | </dd> | |||
<t>DCEP: Data Channel Establishment Proto | <dt>DCEP:</dt> | |||
col defined in | <dd>Data Channel Establishment Protocol, as defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | <xref target="RFC8832"/>.</dd> | |||
<t>In-band: Transmission through the peer | <dt>In-band:</dt> | |||
-to-peer SCTP association.</t> | <dd>Transmission through the peer-to-peer SCTP association.</dd> | |||
<t>Out-of-band: Transmission through the | <dt>Out-of-band:</dt> | |||
application signaling path.</t> | <dd>Transmission through the application signaling path.</dd> | |||
<t>Peer: From the perspective of one of t | <dt>Peer:</dt> | |||
he agents in a session, its | <dd>From the perspective of one of the agents in a session, its | |||
peer is the other agent. Specifically, from the perspective of the | peer is the other agent. Specifically, from the perspective of the | |||
SDP offerer, the peer is the SDP answerer. From the perspective of | SDP offerer, the peer is the SDP answerer. From the perspective of | |||
the SDP answerer, the peer is the SDP offerer.</t> | the SDP answerer, the peer is the SDP offerer.</dd> | |||
<t>SCTP Stream Sequence Number (SSN): the | <dt>SCTP Stream Sequence Number (SSN):</dt> | |||
SCTP stream sequence number as specified | <dd>The SCTP Stream Sequence Number, as specified | |||
in <xref target="RFC4960"/>.</t> | in <xref target="RFC4960"/>.</dd> | |||
<t>Stream identifier: The identifier of t | <dt>Stream identifier:</dt> | |||
he outbound and inbound | <dd>The identifier of the outbound and inbound | |||
SCTP streams composing a data channel.</t> | SCTP streams composing a data channel.</dd> | |||
</list> | </dl> | |||
</t> | </section> | |||
</section> | <section anchor="appl_statement"> | |||
<section title=" Applicability Statement" anchor="appl_statement" | <name>Applicability Statement</name> | |||
> | <t> The mechanism described in this document only applies to SDP <xref tar | |||
<t> The mechanism in this document only applies to the Se | get="RFC8866"/> when used together with the SDP offer/answer | |||
ssion Description | ||||
Protocol (SDP) <xref target="I-D.ietf-mmusic-rfc4566bis"/> when used together | ||||
with the SDP offer/answer | ||||
mechanism <xref target="RFC3264"/>. Declarative usage of SDP is out of scope for this | mechanism <xref target="RFC3264"/>. Declarative usage of SDP is out of scope for this | |||
document, and is thus undefined.</t> | document and is thus undefined.</t> | |||
</section> | </section> | |||
<section title="SDP Data Channel Attributes" anchor="sdp_synt"> | <section anchor="sdp_synt"> | |||
<t>This section defines two new SDP media-level attribute | <name>SDP Data Channel Attributes</name> | |||
s that can be used together with the SDP Offer/Answer mechanism to negotiate dat | <t>This section defines two new SDP media-level attributes that can be | |||
a channel-specific and subprotocol-specific parameters without the usage of DCEP | used together with the SDP Offer/Answer mechanism to negotiate | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. The first attribute provides fo | data-channel-specific and subprotocol-specific parameters without the | |||
r negotiation of | usage of DCEP <xref target="RFC8832"/>. The first attribute (<xref | |||
channel-specific parameters. The second attribute provides for | target="subsec-sdp-attr-for-dc-par-neg"/>) provides for negotiation of | |||
channel-specific parameters. The second attribute (<xref target="prot_att"/ | ||||
>) provides for | ||||
negotiation of subprotocol-specific parameters.</t> | negotiation of subprotocol-specific parameters.</t> | |||
<t> | <aside><t> | |||
Note: Appendix A provides information how data channels work in general and | Note: <xref target="generic-out-of-band-aspects"/> provides information | |||
especially summarizes some key aspects, which should be considered | regarding how data channels work in general. In particular, it | |||
for the negotiation of data channels if DCEP is not used. | summarizes some key aspects that should be considered | |||
</t> | for the negotiation of data channels if DCEP is not used.</t> | |||
<section title="SDP DCMAP Attribute " anchor="subsec-sdp- | </aside> | |||
attr-for-dc-par-neg"> | <section anchor="subsec-sdp-attr-for-dc-par-neg"> | |||
<t>This section defines a new media level attribu | <name>SDP DCMAP Attribute</name> | |||
te "a=dcmap:" that defines the data channel parameters for | <t>This section defines a new media-level attribute, "a=dcmap:", that de | |||
fines the data channel parameters for | ||||
each data channel to be negotiated. </t> | each data channel to be negotiated. </t> | |||
<t>The attribute is used to create bi-directional SCTP data channels | <t>This attribute is used to create bidirectional SCTP data channels | |||
having the same set of attributes. The data channel properties | having the same set of attributes. The data channel properties | |||
(reliable/partially reliable, ordered/unordered) need to be suitable per the subprotocol transport requirements. | (reliable / partially reliable, ordered/unordered) need to be suitable per th e subprotocol transport requirements. | |||
</t> | </t> | |||
<section title="DCMAP Attribute Syntax" anchor="d | <section anchor="dcmap-attr-definition"> | |||
cmap-attr-definition"> | <name>DCMAP Attribute Syntax</name> | |||
<t>"a=dcmap:" is a media level attribute | <t>"a=dcmap:" is a media-level attribute having the following | |||
having the following ABNF | definition and ABNF (Augmented Backus-Naur Form) syntax <xref target=" | |||
(Augmented Backus-Naur Form, <xref target="RFC5234"/>) syntax. | RFC5234"/>. | |||
<figure align="left" title=""> | ||||
<artwork align="left"><![ | ||||
CDATA[ | ||||
Formal Syntax: | ||||
Name: dcmap | ||||
Value: dcmap-value | ||||
Usage Level: media | ||||
Charset Dependent: no | </t> | |||
<table anchor="dcmap-attrib"> | ||||
<name>"a=dcmap:" Attribute Definition</name> | ||||
<thead> | ||||
<tr> | ||||
<th colspan="2" align="center">"a=dcmap:" Attribute</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>Name</td> | ||||
<td>dcmap</td> | ||||
</tr> | ||||
<tr> | ||||
<td>Value</td> | ||||
<td>dcmap-value</td> | ||||
</tr> | ||||
<tr> | ||||
<td>Usage Level</td> | ||||
<td>media</td> | ||||
</tr> | ||||
<tr> | ||||
<td>Charset Dependent</td> | ||||
<td>No</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
Syntax: | <t>Formal syntax:</t> | |||
<sourcecode name="abnf-1" type="abnf"><![CDATA[ | ||||
dcmap-value = dcmap-stream-id | dcmap-value = dcmap-stream-id | |||
[ SP dcmap-opt *(";" dcmap-opt) ] | [ SP dcmap-opt *(";" dcmap-opt) ] | |||
dcmap-opt = ordering-opt / subprotocol-opt / label-opt | dcmap-opt = ordering-opt / subprotocol-opt / label-opt | |||
/ maxretr-opt / maxtime-opt / priority-opt | / maxretr-opt / maxtime-opt / priority-opt | |||
; maxretr-opt and maxtime-opt are mutually exclusive | ; maxretr-opt and maxtime-opt are | |||
; | ; mutually exclusive | |||
dcmap-stream-id = 1*5DIGIT | dcmap-stream-id = 1*5DIGIT | |||
ordering-opt = "ordered=" ordering-value | ordering-opt = "ordered=" ordering-value | |||
ordering-value = "true" / "false" | ordering-value = "true" / "false" | |||
subprotocol-opt = "subprotocol=" quoted-string | subprotocol-opt = "subprotocol=" quoted-string | |||
label-opt = "label=" quoted-string | label-opt = "label=" quoted-string | |||
maxretr-opt = "max-retr=" maxretr-value | maxretr-opt = "max-retr=" maxretr-value | |||
maxretr-value = "0" / integer | maxretr-value = "0" / integer | |||
; number of retransmissions, | ; number of retransmissions, | |||
; less than 2^32, | ; less than 2^32, | |||
; derived from 'Reliability Parameter' of | ; derived from 'Reliability Parameter' [RFC8832] | |||
; [I-D.ietf-rtcweb-data-protocol] | ||||
maxtime-opt = "max-time=" maxtime-value | maxtime-opt = "max-time=" maxtime-value | |||
maxtime-value = "0" / integer | maxtime-value = "0" / integer | |||
; milliseconds, | ; milliseconds, | |||
; less than 2^32, | ; less than 2^32, | |||
; derived from 'Reliability Parameter' of | ; derived from 'Reliability Parameter' [RFC8832] | |||
; [I-D.ietf-rtcweb-data-protocol] | ||||
priority-opt = "priority=" priority-value | priority-opt = "priority=" priority-value | |||
priority-value = "0" / integer | priority-value = "0" / integer | |||
; unsigned integer value indicating the priority of | ; unsigned integer value indicating the priority of | |||
; the data channel, | ; the data channel, | |||
; less than 2^16, | ; less than 2^16, | |||
; derived from 'Priority' of | ; derived from 'Priority' [RFC8832] | |||
; [I-D.ietf-rtcweb-data-protocol] | ||||
quoted-string = DQUOTE *(quoted-char / escaped-char) DQUOTE | quoted-string = DQUOTE *(quoted-char / escaped-char) DQUOTE | |||
quoted-char = SP / quoted-visible | quoted-char = SP / quoted-visible | |||
quoted-visible = %x21 / %x23-24 / %x26-7E ; VCHAR without " or % | quoted-visible = %x21 / %x23-24 / %x26-7E ; VCHAR without " or % | |||
escaped-char = "%" HEXDIG HEXDIG | escaped-char = "%" HEXDIG HEXDIG | |||
DQUOTE = <from-RFC5234> | DQUOTE = <from RFC 5234> | |||
integer = <from-RFC4566> | integer = <from RFC 4566>]]></sourcecode> | |||
Examples: | ||||
<t>Examples:</t> | ||||
<sourcecode name="sdp-1" type="sdp"><![CDATA[ | ||||
a=dcmap:0 | a=dcmap:0 | |||
a=dcmap:1 subprotocol="bfcp";max-time=60000;priority=512 | a=dcmap:1 subprotocol="bfcp";max-time=60000;priority=512 | |||
a=dcmap:2 subprotocol="msrp";ordered=true;label="msrp" | a=dcmap:2 subprotocol="msrp";ordered=true;label="msrp" | |||
a=dcmap:3 label="Label 1";ordered=false;max-retr=5;priority=128 | a=dcmap:3 label="Label 1";ordered=false;max-retr=5;priority=128 | |||
a=dcmap:4 label="foo%09bar";ordered=true;max-time=15000 | a=dcmap:4 label="foo%09bar";ordered=true;max-time=15000]]></sourcecode> | |||
]]></artwork> | ||||
</figure> | <aside><t>Note: The last example (a=dcmap:4) shows a 'label' paramet | |||
</t> | er value | |||
<t> | that contains one nonprintable 'escaped-char' character | |||
<list style="hanging"> | (the tabulator character).</t></aside> | |||
<t>Note: The last example | ||||
(a=dcmap:4) shows a 'label' parameter value | <t>Within an "a=dcmap:" attribute line's 'dcmap-opt' value, only one | |||
which contains one non-printable 'escaped-char' character | ||||
(the tabulator character).</t> | ||||
</list> | ||||
</t> | ||||
<t>Within an 'a=dcmap:' attribute line's | ||||
'dcmap-opt' value only one | ||||
'maxretr-opt' parameter or one 'maxtime-opt' parameter may be present. | 'maxretr-opt' parameter or one 'maxtime-opt' parameter may be present. | |||
Both MUST NOT be present.</t> | Both <bcp14>MUST NOT</bcp14> be present.</t> | |||
</section> | </section> | |||
<section title="Dcmap-stream-id Parameter" anchor | <section anchor="dcmap-stream-id-param-definition"> | |||
="dcmap-stream-id-param-definition"> | <name>'dcmap-stream-id' Parameter</name> | |||
<t>The 'dcmap-stream-id' parameter indica | <t>The 'dcmap-stream-id' parameter indicates the SCTP stream identifie | |||
tes the SCTP stream identifier | r | |||
within the SCTP association used to form the data channel.</t> | within the SCTP association used to form the data channel.</t> | |||
</section> | </section> | |||
<section title="Label Parameter"> | <section> | |||
<t>The 'label' parameter indicates the na | <name>'label' Parameter</name> | |||
me of the | <t>The 'label' parameter indicates the name of the | |||
channel. It represents a label that can be used to distinguish, | channel. It represents a label that can be used to distinguish, | |||
in the context of the WebRTC API <xref target="WebRtcAPI"/>, | in the context of the WebRTC API <xref target="WebRtcAPI"/>, | |||
an RTCDataChannel object from other RTCDataChannel objects. | an RTCDataChannel object from other RTCDataChannel objects. | |||
This parameter maps to the 'Label' parameter defined in | This parameter maps to the 'Label' parameter defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. | <xref target="RFC8832"/>. | |||
The 'label' parameter is optional. If it is not | The 'label' parameter is optional. If it is not | |||
present, then its value defaults to the empty string. | present, then its value defaults to the empty string. | |||
</t> | </t> | |||
<t>In order to communicate with WEbRTC AP | <t>In order to communicate with the WebRTC API, the 'label' parameter | |||
I the label attribute should: | should | |||
<list style="symbols"> | </t> | |||
<t>Serialize the WebRTC l | <ul spacing="normal"> | |||
abel as a UTF-8 string <xref target="RFC3629"/>.</t> | <li>Serialize the WebRTC label as a UTF-8 string <xref target="RFC36 | |||
<t>Treat the UTF-8 serial | 29"/>.</li> | |||
ization as a series of bytes</t> | <li>Treat the UTF-8 serialization as a series of bytes.</li> | |||
<t>For each byte in the s | <li> | |||
erialization: | <t>For each byte in the serialization, | |||
</t> | ||||
<list style="symb | <ul spacing="normal"> | |||
ols"> | <li>If the byte can be expressed as a 'quoted-char', do so.</li> | |||
<t>If the | <li>Otherwise, express the byte as an 'escaped-char'.</li> | |||
byte can be expressed as a `quoted-char`, do so</t> | </ul> | |||
<t>Otherw | </li> | |||
ise, express the byte as an `escaped-char`.</t> | </ul> | |||
</list> | <aside><t>Note: The empty string <bcp14>MAY</bcp14> also be explicitly | |||
</t> | used as a 'label' value, | |||
</list> | ||||
</t> | ||||
<t>Note: The empty string MAY also be exp | ||||
licitly used as a 'label' value, | ||||
such that 'label=""' is equivalent to the 'label' parameter not being | such that 'label=""' is equivalent to the 'label' parameter not being | |||
present at all. | present at all. | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/> allows the DATA_CHANNEL_OP | <xref target="RFC8832"/> allows the DATA_CHANNEL_OPEN | |||
EN | message's 'Label' value to be an empty string.</t></aside> | |||
message's 'Label' value to be an empty string.</t> | </section> | |||
</section> | <section anchor="subprotocol-parameter"> | |||
<section title="Subprotocol Parameter" anchor="su | <name>'subprotocol' Parameter</name> | |||
bprotocol-parameter"> | <t>The 'subprotocol' parameter indicates which protocol the | |||
<t>The 'subprotocol' parameter indicates | ||||
which protocol the | ||||
client expects to exchange via the channel. | client expects to exchange via the channel. | |||
This parameter maps to the 'Protocol' parameter defined in | This parameter maps to the 'Protocol' parameter defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. | <xref target="RFC8832"/>. | |||
<xref target="IANA_subproto_ids"/> specifies how new subprotocol paramete | <xref target="IANA_subproto_ids"/> specifies how values for new subprotoc | |||
r | ol parameters are registered. | |||
values are registered. | ||||
'subprotocol' is an optional parameter. | 'subprotocol' is an optional parameter. | |||
If the 'subprotocol' parameter is not present, then its value | If the 'subprotocol' parameter is not present, then its value | |||
defaults to an empty string.</t> | defaults to an empty string.</t> | |||
<t> Note: The empty string MAY also be ex | <aside><t> Note: The empty string <bcp14>MAY</bcp14> also be | |||
plicitly used as 'subprotocol' value, | explicitly used as a 'subprotocol' value, | |||
such that 'subprotocol=""' is equivalent to the 'subprotocol' parameter n ot being | such that 'subprotocol=""' is equivalent to the 'subprotocol' parameter n ot being | |||
present at all. <xref target="I-D.ietf-rtcweb-data-protocol"/> allows the | present at all. <xref target="RFC8832"/> allows the | |||
DATA_CHANNEL_OPEN message's 'Subprotocol' value to be an empty string. | DATA_CHANNEL_OPEN message's 'Protocol' value to be an empty string. | |||
</t> | </t></aside> | |||
</section> | </section> | |||
<section title="Max-retr Parameter" anchor="max-r | <section anchor="max-retr-param-definition"> | |||
etr-param-definition"> | <name>'max-retr' Parameter</name> | |||
<t>This parameter indicates that the data | <t>This parameter indicates that the data channel is partially reliabl | |||
channel is partially reliable. | e. | |||
The 'max-retr' parameter indicates the maximal number of times a user mes sage will | The 'max-retr' parameter indicates the maximal number of times a user mes sage will | |||
be retransmitted. The max-retr parameter is optional. If | be retransmitted. The 'max-retr' parameter is optional. If | |||
the max-retr parameter and the max-time parameter are not present, then r | the 'max-retr' parameter and the 'max-time' parameter are not present, th | |||
eliable | en reliable | |||
transmission is performed as specified in <xref target="RFC4960"/>. | transmission is performed as specified in <xref target="RFC4960"/>. | |||
This parameter maps to the 'Number of RTX' parameter | This parameter maps to the 'Number of RTX' parameter | |||
defined in <xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | defined in <xref target="RFC8832"/>.</t> | |||
</section> | </section> | |||
<section title="Max-time Parameter"> | <section> | |||
<t> This parameter indicates that the dat | <name>'max-time' Parameter</name> | |||
a channel is partially reliable. | <t> This parameter indicates that the data channel is partially reliab | |||
le. | ||||
A user message will no longer be transmitted or retransmitted after | A user message will no longer be transmitted or retransmitted after | |||
a specified life-time given in milliseconds in the 'max-time' | a specified lifetime, given in milliseconds, in the 'max-time' | |||
parameter. The life-time starts when providing the user message to the pr | parameter. The lifetime starts when providing the user message to the pro | |||
otocol stack. | tocol stack. | |||
The max-time parameter is optional. If the max-retr parameter and the max-time | The 'max-time' parameter is optional. If the 'max-retr' parameter and the 'max- | |||
parameter are not present, then reliable | time' parameter are not present, then reliable | |||
transmission is performed as specified in <xref target="RFC4960"/>. | transmission is performed as specified in <xref target="RFC4960"/>. | |||
This parameter maps to the 'Lifetime in ms' parameter | This parameter maps to the 'Lifetime in ms' parameter | |||
defined in <xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | defined in <xref target="RFC8832"/>.</t> | |||
</section> | </section> | |||
<section title="Ordered Parameter" anchor="ordere | <section anchor="ordered-param-description"> | |||
d-param-description"> | <name>'ordered' Parameter</name> | |||
<t>The 'ordered' parameter with value "tr | <t>The 'ordered' parameter with value "true" indicates that the receiv | |||
ue" indicates that the receiver will | er will | |||
dispatch DATA chunks in the data channel to the upper layer | dispatch DATA chunks in the data channel to the upper layer | |||
while preserving the order. The ordered parameter is optional and | while preserving the order. The 'ordered' parameter is optional and | |||
takes two values: "true" for ordered and "false" for unordered delivery | takes two values -- "true" for ordered delivery and "false" for unordered | |||
delivery -- | ||||
with "true" as the default value. | with "true" as the default value. | |||
Any other value is ignored and default "ordered=true" is assumed. | Any other value is ignored, and the default "ordered=true" is assumed. | |||
In the absence of this parameter "ordered=true" is assumed. | In the absence of this parameter, "ordered=true" is assumed. | |||
This parameter maps to | This parameter maps to | |||
the ordered or unordered data channel types as defined in | the ordered or unordered data channel types as defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | <xref target="RFC8832"/>.</t> | |||
</section> | </section> | |||
<section title="Priority Parameter" anchor="prior | <section anchor="priority-param-description"> | |||
ity-param-description"> | <name>'priority' Parameter</name> | |||
<t>The 'priority' parameter indicates the | <t>The 'priority' parameter indicates the data channel's priority | |||
data channel's priority | ||||
relative to the priorities of other data channels, which may | relative to the priorities of other data channels, which may | |||
additionally exist over the same SCTP association. | additionally exist over the same SCTP association. | |||
The 'priority' parameter maps to the 'Priority' parameter defined in | The 'priority' parameter maps to the 'Priority' parameter defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. | <xref target="RFC8832"/>. | |||
The 'priority' parameter is optional. | The 'priority' parameter is optional. | |||
In the absence of this parameter "priority=256" is assumed. | In the absence of this parameter, "priority=256" is assumed. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="DCMAP Multiplexing Category" anch | <section anchor="dcmap-mux-category"> | |||
or="dcmap-mux-category"> | <name>DCMAP Multiplexing Category</name> | |||
<t>The multiplexing category <xref target | <t>The multiplexing category <xref target="RFC8859"/> of the "a=dcmap: | |||
="I-D.ietf-mmusic-sdp-mux-attributes"/> of the "a=dcmap:" attribute is SPECIAL. | " attribute is SPECIAL. | |||
</t> | </t> | |||
<t>As the usage of multiple SCTP associat | <t>As the usage of multiple SCTP associations on top of a single DTLS | |||
ions on top of a single DTLS | association is outside the scope of <xref target="RFC8841"/>, | |||
association is outside the scope of <xref target="I-D.ietf-mmusic-sctp-sd | ||||
p"/>, | ||||
no "a=dcmap:" attribute multiplexing rules are specified for the UDP/DTLS /SCTP and | no "a=dcmap:" attribute multiplexing rules are specified for the UDP/DTLS /SCTP and | |||
TCP/DTLS/SCTP proto values. | TCP/DTLS/SCTP proto values. | |||
If future extensions of <xref target="I-D.ietf-mmusic-sctp-sdp"/> define how to | If future extensions of <xref target="RFC8841"/> define how to | |||
negotiate multiplexing of multiple SCTP associations on top of a single D TLS | negotiate multiplexing of multiple SCTP associations on top of a single D TLS | |||
association, or how to add multiple SCTP associations to one BUNDLE group , then | association or how to add multiple SCTP associations to one BUNDLE group, then | |||
multiplexing rules for the "a=dcmap:" attribute need to be | multiplexing rules for the "a=dcmap:" attribute need to be | |||
defined as well, for instance in an extension of this SDP offer/answer ba | defined as well -- for instance, in an extension of this specification. | |||
sed data channel | </t> | |||
negotiation specification. | </section> | |||
</t> | </section> | |||
</section> | <section anchor="prot_att"> | |||
</section> | <name>SDP DCSA Attribute</name> | |||
<!-- subsec-sdp-attr-for-dc-par-neg --> | <t>In the SDP media description, each data channel declaration | |||
<section title="SDP DCSA Attribute" anchor="prot_att"> | <bcp14>MAY</bcp14> also be followed by other SDP attributes, which | |||
<t>In the SDP media description, each data channe | apply to the corresponding data channel and its subprotocol. Each of | |||
l declaration MAY also be followed | these attributes is represented by one new "a=dcsa:" attribute line | |||
by other media level SDP attributes, which are either specifically defined | that references another SDP attribute defined for use with this data | |||
for or | channel's subprotocol. Instructions for registering attributes for use | |||
applied to the subprotocol in use. | with a data channel are given in <xref target="IANA-reg-data-channel-att | |||
Each of these attributes is represented by one new attribute line, and | ribs"/>.</t> | |||
it includes the contents of a media-level SDP attribute already | <t>Each SDP attribute that is related to the subprotocol and that would | |||
defined for use with this (sub)protocol in another IETF document. | normally | |||
Subprotocol specific attributes MAY also be defined for exclusive | be used to negotiate the subprotocol using the SDP offer/answer mechanism | |||
use with data channel transport, but MUST use the same syntax | is replaced with | |||
described here for other subprotocol related attributes.</t> | an attribute of the form "a=dcsa:stream-id original&nbhy;attribute", | |||
<t>Each SDP attribute, related to the subprotocol | where "dcsa" stands for "data channel subprotocol attribute", | |||
, that would normally | "stream-id" is the SCTP stream identifier assigned to this subprotocol | |||
be used to negotiate the subprotocol using SDP offer/answer is replaced wi | instance, and "original-attribute" represents the contents of the | |||
th | subprotocol-related attribute to be included.</t> | |||
an attribute of the form "a=dcsa:stream-id original-attribute", | <t>The same syntax applies to any other SDP attribute required for | |||
where dcsa stands for "data channel subprotocol attribute", | ||||
stream-id is the SCTP stream identifier assigned to this subprotocol | ||||
instance, and original-attribute represents the contents of the | ||||
subprotocol related attribute to be included.</t> | ||||
<t>The same syntax applies to any other SDP attri | ||||
bute required for | ||||
negotiation of this instance of the subprotocol.</t> | negotiation of this instance of the subprotocol.</t> | |||
<t>The detailed offer/answer procedures for the d | <t>The detailed offer/answer procedures for the dcsa attribute are | |||
csa attribute are dependent on the associated sub-protocol. If no offer/answer p | dependent on the associated subprotocol. If no offer/answer | |||
rocedures exist for the sub-protocol when used outside of the dcsa attribute, no | procedures exist for the subprotocol when used outside of the dcsa | |||
specification is needed for use with dcsa. The IANA registration procedures for | attribute, no specification is needed for use with dcsa. The IANA | |||
the WebSocket Subprotocol Name Registry (<xref target="IANA_subproto_ids"/>) do | (Internet Assigned Numbers Authority) registration procedures for the "W | |||
not strictly require a specification of the offer/answer procedures for the sub | ebSocket Subprotocol Name Registry" (<xref target="IANA_subproto_ids"/>) do not | |||
-protocol when used with dcsa. If the sub-protocol has defined offer/answer proc | strictly require a specification of the offer/answer procedures for the subproto | |||
edures when used outside of dcsa, such a specification is encouraged to ensure i | col when used with dcsa. If the subprotocol has defined offer/answer procedures | |||
nteroperability. If the sub-protocol has defined offer/answer procedures when us | when used outside of dcsa, such a specification is encouraged to ensure interope | |||
ed outside of dcsa, but no specification exists for the offer/answer procedures | rability. If the subprotocol has defined offer/answer procedures when used outsi | |||
for the sub-protocol when used with dcsa, implementations SHOULD assume the use | de of dcsa but no specification exists for the offer/answer procedures for the s | |||
of the default values for all otherwise-negotiable and applicable sub-protocol p | ubprotocol when used with dcsa, implementations <bcp14>SHOULD</bcp14> assume the | |||
arameters. | use of the default values for all otherwise-negotiable and applicable subprotoc | |||
ol parameters. | ||||
</t> | ||||
<section anchor="dcsa-attribute"> | ||||
<name>DCSA Attribute Syntax</name> | ||||
<t>"a=dcsa:" is a media-level attribute having the following definition and | ||||
ABNF (Augmented Backus-Naur Form) syntax <xref target="RFC5234"/>. | ||||
</t> | </t> | |||
<section title="DCSA Syntax" anchor="dcsa-attribu | ||||
te"> | ||||
<t> | ||||
<figure align="left" title=""> | ||||
<artwork align="left"><![ | ||||
CDATA[ | ||||
Formal Syntax: | ||||
Name: dcsa | ||||
Value: dcsa-value | ||||
Usage Level: media | ||||
Charset Dependent: no | ||||
Syntax: | <table anchor="dcsa-attrib"> | |||
<name>"a=dcsa:" Attribute Definition</name> | ||||
<thead> | ||||
<tr> | ||||
<th colspan="2" align="center">"a=dcsa:" Attribute</th> | ||||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td>Name</td> | ||||
<td>dcsa</td> | ||||
</tr> | ||||
<tr> | ||||
<td>Value</td> | ||||
<td>dcsa-value</td> | ||||
</tr> | ||||
<tr> | ||||
<td>Usage Level</td> | ||||
<td>media</td> | ||||
</tr> | ||||
<tr> | ||||
<td>Charset Dependent</td> | ||||
<td>No</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
<t>Formal syntax:</t> | ||||
<sourcecode name="abnf-2" type="abnf"><![CDATA[ | ||||
dcsa-value = stream-id SP attribute | dcsa-value = stream-id SP attribute | |||
stream-id = 1*5DIGIT | stream-id = 1*5DIGIT | |||
attribute = <from-RFC4566> | attribute = <from RFC 4566>]]></sourcecode> | |||
Example: | ||||
<t>Example:</t> | ||||
<sourcecode name="sdp-2" type="sdp"><![CDATA[ | ||||
a=dcmap:2 subprotocol="msrp";ordered=true;label="msrp" | a=dcmap:2 subprotocol="msrp";ordered=true;label="msrp" | |||
a=dcsa:2 accept-types:text/plain | a=dcsa:2 accept-types:text/plain]]></sourcecode> | |||
]]></artwork> | ||||
</figure> | <t>Note that the reference to <xref target="RFC8866"/> defines where t | |||
</t> | he | |||
<t>Note that the reference to <xref targe | ||||
t="I-D.ietf-mmusic-rfc4566bis"/> defines where the | ||||
attribute definition can be found; | attribute definition can be found; | |||
it does not provide any limitation on support of attributes | it does not provide any limitations on support of attributes | |||
defined in other documents in accordance with this attribute | defined in other documents in accordance with this attribute | |||
definition. Note however that not all SDP attributes are suitable | definition. Note, however, that not all SDP attributes are suitable | |||
as a "a=dcsa:" parameter. IANA SDP parameters contains | as an "a=dcsa:" parameter. The registry of IANA SDP parameters contains | |||
the lists of IANA (Internet Assigned Numbers Authority) | the lists of IANA-registered session-level and media-level or | |||
registered session and media level or | media-level-only SDP attributes. | |||
media level only SDP attributes.</t> | </t> | |||
<t>Thus in the example above, the origina | <t>Thus, in the example above, the original attribute line | |||
l attribute line | "a=accept&nbhy;types:text/plain" is represented by the attribute line | |||
"a=accept-types:text/plain" is represented by the attribute line | ||||
"a=dcsa:2 accept-types:text/plain", which specifies that this | "a=dcsa:2 accept-types:text/plain", which specifies that this | |||
instance of the MSRP subprotocol being transported on the SCTP association using | instance of the MSRP subprotocol being transported on the SCTP association using | |||
the data channel with stream id 2 accepts | the data channel with stream id 2 accepts | |||
plain text files.</t> | plaintext files.</t> | |||
<t>As opposed to the data channel "a=dcma | <t>As opposed to the data channel "a=dcmap:" attribute parameters, | |||
p:" attribute parameters, | ||||
these parameters | these parameters | |||
are subject to offer/answer negotiation following the procedures | are subject to offer/answer negotiation, following the procedures | |||
defined in the subprotocol specific documents.</t> | defined in the subprotocol-specific documents.</t> | |||
<t>It is assumed that in general the usag | <t>It is assumed that in general the usages of subprotocol-related | |||
es of subprotocol related media | media-level attributes are independent from the subprotocol's transport pr | |||
level attributes are independent from the subprotocol's transport protocol | otocol. | |||
. | Such transport-protocol-independent subprotocol-related attributes are | |||
Such transport protocol independent subprotocol related attributes are | ||||
used in the same way as defined in the original subprotocol specification, | used in the same way as defined in the original subprotocol specification, | |||
also if the subprotocol is transported over a data channel and if the | also if the subprotocol is transported over a data channel and if the | |||
attribute is correspondingly embedded in a "a=dcsa" attribute. | attribute is correspondingly embedded in an "a=dcsa:" attribute. | |||
</t> | </t> | |||
<t>There may be cases, where the usage of | <t>There may be cases where the usage of a subprotocol-related | |||
a subprotocol related media level | media-level | |||
attribute depends on the subprotocol's transport protocol. | attribute depends on the subprotocol's transport protocol. | |||
In such cases the subprotocol related usage of the attribute is expected t | In such cases, the subprotocol-related usage of the attribute is expected | |||
o be | to be | |||
described for the data channel transport. A data channel specific usage of | described for the data channel transport. A data-channel-specific usage of | |||
a | a | |||
subprotocol attribute is expected to be specified in the same document tha t | subprotocol attribute is expected to be specified in the same document tha t | |||
registers the subprotocol's identifier for data channel usage as described in | registers the subprotocol's identifier for data channel usage as described in | |||
<xref target="IANA_subproto_ids"/>. | <xref target="IANA_subproto_ids"/>. | |||
</t> | </t> | |||
<t>SDP attributes that are only defined f | </section> | |||
or use at the | <section anchor="dcsa-mux-category"> | |||
dcsa usage level, SHALL use the dcsa usage level when registering the | <name>DCSA Multiplexing Category</name> | |||
attribute. If existing media attributes are used in a datachannel | <t>The multiplexing category of the "a=dcsa:" attribute is SPECIAL. | |||
subprotocol specific way, then a new dcsa usage level | </t> | |||
MUST be defined for the existing media attribute. Where the SDP | <t>As the usage of multiple SCTP associations on top of a single DTLS | |||
attribute is applicable to a particular subprotocol/s this SHALL also | association is outside the scope of <xref target="RFC8841"/>, | |||
be registered by indicating the applicable subprotocol identifiers | ||||
(see /<xref target="I-D.ietf-mmusic-rfc4566bis"/> section-8.5) along with the | ||||
dcsa usage level. | ||||
</t> | ||||
</section> | ||||
<section title="DCSA Multiplexing Category" ancho | ||||
r="dcsa-mux-category"> | ||||
<t>The multiplexing category of the "a=dc | ||||
sa:" attribute is SPECIAL. | ||||
</t> | ||||
<t>As the usage of multiple SCTP associat | ||||
ions on top of a single DTLS | ||||
association is outside the scope of <xref target="I-D.ietf-mmusic-sctp-sd | ||||
p"/>, | ||||
no "a=dcsa:" attribute multiplexing rules are specified for the UDP/DTLS/ SCTP and | no "a=dcsa:" attribute multiplexing rules are specified for the UDP/DTLS/ SCTP and | |||
TCP/DTLS/SCTP proto values. | TCP&wj;/DTLS&wj;/SCTP proto values. | |||
If future extensions of <xref target="I-D.ietf-mmusic-sctp-sdp"/> define | If future extensions of <xref target="RFC8841"/> define how to | |||
how to | ||||
negotiate multiplexing of multiple SCTP associations on top of a single D TLS | negotiate multiplexing of multiple SCTP associations on top of a single D TLS | |||
association, or how to add multiple SCTP associations to one BUNDLE group , then | association or how to add multiple SCTP associations to one BUNDLE group, then | |||
multiplexing rules for the "a=dcsa:" attribute need to be | multiplexing rules for the "a=dcsa:" attribute need to be | |||
defined as well, for instance in an extension of this SDP based data chan | defined as well -- for instance, in an extension of this specification. | |||
nel | </t> | |||
negotiation specification. | </section> | |||
</t> | </section> | |||
</section> | </section> | |||
</section> | <section anchor="section_procedures"> | |||
<!-- prot_att --> | <name>SDP Offer/Answer Procedures</name> | |||
</section> | <t>This section defines how data channels can be negotiated using the SDP | |||
<!-- sdp_sync --> | ||||
<section title="SDP Offer/Answer Procedures" anchor="section_proc | ||||
edures"> | ||||
<t>This section defines how data channels can be negotiat | ||||
ed using the SDP | ||||
offer/answer mechanism. A given media description can describe multiple | offer/answer mechanism. A given media description can describe multiple | |||
data channels (each represented by a separate SDP dcmap attribute) that | data channels (each represented by a separate SDP dcmap attribute) that | |||
can be created, modified and closed using different offer/answer exchange s. | can be created, modified, and closed using different offer/answer exchang es. | |||
The procedures in this section apply for a given data channel. | The procedures in this section apply for a given data channel. | |||
</t> | </t> | |||
<t>The generic offer/answer procedures for negotiating th | <t>The generic offer/answer procedures for negotiating the SCTP associatio | |||
e SCTP association used to realize data channels are defined in <xref target="I- | n used to realize data channels are defined in <xref target="RFC8841"/>. This se | |||
D.ietf-mmusic-sctp-sdp"/>. This section only defines the data channel specific p | ction only defines the data-channel-specific procedures.</t> | |||
rocedures.</t> | <t> "Initial offer" refers to the offer in which a data channel is | |||
<t> “Initial offer” refers to the offer in which a data c | opened. It can be either the initial offer or a subsequent offer of the as | |||
hannel is opened. It can be the initial offer, or a subsequent offer, of the ass | sociated SDP session.</t> | |||
ociated SDP session.</t> | <t>The detailed offer/answer procedures for the dcsa attribute are depende | |||
<t>The detailed offer/answer procedures for the dcsa attr | nt on the associated subprotocol; see <xref target="prot_att"/>. | |||
ibute are dependent on the associated sub-protocol see <xref target="prot_att"/> | ||||
. | ||||
</t> | </t> | |||
<section title="Managing Stream Identifiers" anchor="id_m | <section anchor="id_mgmt"> | |||
ngt"> | <name>Managing Stream Identifiers</name> | |||
<t> | <t> | |||
In order to avoid SCTP Stream identifier collisions, in alignment with | ||||
In order to avoid SCTP Stream identifier collisio | <xref target="RFC8832"/>, the endpoint acting as a DTLS client (for | |||
ns, in alignment with <xref target="I-D.ietf-rtcweb-data-protocol"/>, the endpoi | the SCTP association used to realize data channels) <bcp14>MUST</bcp14> use even | |||
nt acting as DTLS client (for | identifier values, | |||
the SCTP association used to realize data channels) MUST use even identifier val | and the endpoint acting as a DTLS server <bcp14>MUST</bcp14> use odd identifier | |||
ues, | values. </t> | |||
and the endpoint acting as DTLS server MUST use odd identifier values. </t> | <t>SCTP stream identifiers associated with data channels that have been | |||
<t>SCTP stream identifiers associated with data c | negotiated using DCEP <bcp14>MUST NOT</bcp14> be included in SDP offers and answ | |||
hannels that have been negotiated using DCEP MUST NOT be included in SDP offers | ers. | |||
and answers. | </t> | |||
</t> | </section> | |||
</section> | <section anchor="param_negotiation"> | |||
<!-- id_mngt --> | <name>Negotiating Data Channel Parameters</name> | |||
<section title="Negotiating Data Channel Parameters" anch | <t> | |||
or="param_negotiation"> | The data channel types defined in <xref target="RFC8832"/> are | |||
<t> | mapped to the dcmap SDP attribute parameters in the following manner, where " | |||
The data channel types defined in <xref target="I-D.ietf-rtcweb-data-protocol | ordered=true" is the default and may be omitted: | |||
"/> are | ||||
mapped to the dcmap SDP attribute parameters in the following manner where "o | ||||
rdered=true" is the default and may be omitted: | ||||
</t> | </t> | |||
<t> | <sourcecode name="data-channel-items" type="sdp"><![CDATA[ | |||
<figure align="left" title=""> | ||||
<artwork align="left"><![CDATA[ | ||||
DATA_CHANNEL_RELIABLE | DATA_CHANNEL_RELIABLE | |||
ordered=true | ordered=true | |||
DATA_CHANNEL_RELIABLE_UNORDERED | DATA_CHANNEL_RELIABLE_UNORDERED | |||
ordered=false | ordered=false | |||
DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT | DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT | |||
ordered=true;max-retr=<number of retransmissions> | ordered=true;max-retr=<number of retransmissions> | |||
DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED | DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED | |||
ordered=false;max-retr=<number of retransmissions> | ordered=false;max-retr=<number of retransmissions> | |||
DATA_CHANNEL_PARTIAL_RELIABLE_TIMED | DATA_CHANNEL_PARTIAL_RELIABLE_TIMED | |||
ordered=true;max-time=<lifetime in milliseconds> | ordered=true;max-time=<lifetime in milliseconds> | |||
DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED | DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED | |||
ordered=false;max-time=<lifetime in milliseconds> | ordered=false;max-time=<lifetime in milliseconds>]]></sourcecode> | |||
]]></artwork> | ||||
</figure> | ||||
</t> | ||||
<t> | ||||
By definition max-retr and max-time are mutually exclusive, | ||||
so both MUST NOT be present in the "a=dcmap:" attribute | ||||
line. If an SDP offer contains both of these parameters then the | ||||
receiver of such an SDP offer MUST reject the SDP offer. If an SDP | ||||
answer contains both of these parameters then the offerer MUST treat | ||||
the associated SDP offer/answer as failed. </t> | ||||
</section> | ||||
<!-- ="Negotiating Data Channel Parameters" --> | ||||
<section title="Generating the Initial Offer for A Data C | ||||
hannel" anchor="opendc"> | ||||
<t>When an offerer sends an initial offer, in ord | ||||
er to negotiate an SCTP stream for a data channel, the offerer: | ||||
<list style="symbols"> | <t> | |||
<t>SHALL include an SDP dcmap att | By definition, 'max-retr' and 'max-time' are mutually exclusive, | |||
ribute (<xref target="sdp_synt"/> and <xref target="param_negotiation"/>) assoc | so both <bcp14>MUST NOT</bcp14> be present in the "a=dcmap:" attribute | |||
iated with the data channel in the “m=” section representing the SCTP associatio | line. If an SDP offer contains both of these parameters, then the | |||
n used to realize the data channel; and | receiver of such an SDP offer <bcp14>MUST</bcp14> reject the SDP offer. If a | |||
</t> | n SDP | |||
<t>MAY include one or more SDP dc | answer contains both of these parameters, then the offerer <bcp14>MUST</bcp14 | |||
sa attributes (<xref target="prot_att"/>) associated with the | > treat | |||
data channel. The value of the stream-id part of each attribute SHALL matc | the associated SDP offer/answer as failed. </t> | |||
h the dcmap-stream-id value of the dcmap attribute. | </section> | |||
</t> | <section anchor="opendc"> | |||
</list> | <name>Generating the Initial Offer for a Data Channel</name> | |||
</t> | <t>When an offerer sends an initial offer, in order to negotiate an SCTP | |||
</section> | stream for a data channel, the offerer | |||
<section title="Generating SDP Answer"> | ||||
<t>When an answerer receives an offer that includ | ||||
es an “m=" section for an SCTP association, that describes an SCTP stream for a | ||||
data channel, if the answerer accepts the data channel it: | ||||
<list style="symbols"> | </t> | |||
<t>SHALL include an SDP dcmap att | <ul spacing="normal"> | |||
ribute (<xref target="sdp_synt"/> and <xref target="param_negotiation"/>) | <li><bcp14>SHALL</bcp14> include an SDP dcmap attribute | |||
(Sections <xref target="subsec-sdp-attr-for-dc-par-neg" format="c | ||||
ounter"/> and <xref | ||||
target="param_negotiation" format="counter"/>) associated with the dat | ||||
a channel in the "m=" section representing the SCTP association used to realize | ||||
the data channel, and | ||||
</li> | ||||
<li><bcp14>MAY</bcp14> include one or more SDP dcsa attributes (<xref | ||||
target="prot_att"/>) associated with the | ||||
data channel. The value of the 'stream-id' part of each attribute <bcp14>S | ||||
HALL</bcp14> match the 'dcmap-stream-id' value of the dcmap attribute. | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
<section> | ||||
<name>Generating the SDP Answer</name> | ||||
<t>When an answerer receives an offer that includes an "m=" section | ||||
for an SCTP association, the offer describes an SCTP stream for a data c | ||||
hannel, if the answerer accepts the data channel, it | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li><bcp14>SHALL</bcp14> include an SDP dcmap attribute | ||||
(Sections <xref target="subsec-sdp-attr-for-dc-par-neg" format="c | ||||
ounter"/> and <xref | ||||
target="param_negotiation" format="counter"/>) | ||||
associated | associated | |||
with the data channel in the "m=" section representing the SCTP association used | with the data channel in the "m=" section representing the SCTP association used | |||
to realize the data channel. The value of the dcmap-stream-id, max-retr and max- | to realize the data channel. The value of the 'dcmap-stream-id', 'max-retr', and | |||
time | 'max-time' | |||
values of the dcmap attribute SHALL be identical to the value used for the data | values of the dcmap attribute <bcp14>SHALL</bcp14> be identical to the value use | |||
channel | d for the data channel | |||
in the offer; and | in the offer, and | |||
</li> | ||||
</t> | <li><bcp14>MAY</bcp14> include one or more SDP dcsa attributes (<xref | |||
<t>MAY include one or more SDP dc | target="prot_att"/>) associated with the | |||
sa attributes (<xref target="prot_att"/>) associated with the | ||||
data channel. | data channel. | |||
</t> | </li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section> | |||
<section title="Offerer Processing of the SDP Answer"> | <name>Offerer Processing of the SDP Answer</name> | |||
<t>An offerer receiving an SDP answer performs th | <t>An offerer receiving an SDP answer performs the following: | |||
e following: | ||||
<list style="symbols"> | </t> | |||
<t>SHALL close any created data c | <ul spacing="normal"> | |||
hannels as described in | <li>It <bcp14>SHALL</bcp14> close any created data channels as describ | |||
ed in | ||||
<xref target="close-dc"/> | <xref target="close-dc"/> | |||
for which the expected "a=dcmap:" attributes are not | for which the expected "a=dcmap:" attributes are not | |||
present in the SDP answer. If the SDP answer has no "a=dcmap" attribute e | present in the SDP answer. If the SDP answer has no "a=dcmap:" attributes | |||
ither the peer does not support "a=dcmap:" attributes or | , either the peer does not support "a=dcmap:" attributes or | |||
it rejected all the data channels. In either case the offerer closes | it rejected all the data channels. In either case, the offerer | |||
all the SDP offered | closes all the data channels offered by SDP that were open at the ti | |||
data channels that were open at the time of offer. | me of the offer. | |||
The DTLS association and SCTP association will still be setup. At th | The DTLS association and SCTP association will still be set up. At t | |||
is | his | |||
point the offerer may use DCEP negotiation <xref target="I-D.ietf-rtcweb-data | point, the offerer may use DCEP negotiation <xref target="RFC8832"/> to open | |||
-protocol"/> to open data channels</t> | data channels.</li> | |||
</list> | </ul> | |||
</t> | <t>Each agent application <bcp14>MUST</bcp14> wait to send data until it | |||
<t>Each agent application MUST wait to send data | has | |||
until it has | ||||
confirmation that the data channel at the peer is instantiated. | confirmation that the data channel at the peer is instantiated. | |||
For WebRTC, this is when both data channel stacks have channel | For WebRTC, this is when both data channel stacks have channel | |||
parameters instantiated. This occurs: | parameters instantiated and occurs as follows: | |||
<list style="symbols"> | </t> | |||
<t>At both peers when a data chan | <ul spacing="normal"> | |||
nel is created without a previously | <li>At both peers when a data channel is created without a previously | |||
established SCTP association, as soon as the SCTP association | established SCTP association, as soon as the SCTP association | |||
is successfully established.</t> | is successfully established.</li> | |||
<t>At the agent receiving an SDP | <li>At the agent receiving an SDP offer for which there is an | |||
offer for which there is an | ||||
established SCTP association, as soon as it creates the | established SCTP association, as soon as it creates the | |||
negotiated data channel based on information | negotiated data channel based on information | |||
signaled in the SDP offer.</t> | signaled in the SDP offer.</li> | |||
<t>At the agent sending an SDP of | <li>At the agent sending an SDP offer to create a new data channel for | |||
fer to create a new data channel for which there is an established SCTP | which there is an established SCTP | |||
association, when it receives the SDP answer confirming acceptance | association, when it receives the SDP answer confirming acceptance | |||
of the data channel or when it begins to receive data on the | of the data channel or when it begins to receive data on the | |||
data channel from the peer, whichever occurs first.</t> | data channel from the peer, whichever occurs first.</li> | |||
</list> | </ul> | |||
</t> | </section> | |||
</section> | <section> | |||
<!-- opendc --> | <name>Modifying the Session</name> | |||
<section title="Modifying the Session"> | <t>When an offerer sends a subsequent offer that includes information fo | |||
<t>When an offer sends a subsequent offer, that i | r | |||
ncludes information for | ||||
a previously negotiated data channel, unless the offerer intends to | a previously negotiated data channel, unless the offerer intends to | |||
close the data channel (<xref target="close-dc"/>), the offerer SHALL include the | close the data channel (<xref target="close-dc"/>), the offerer <bcp14>SHALL< /bcp14> include the | |||
previously negotiated SDP attributes and attribute values associated with the | previously negotiated SDP attributes and attribute values associated with the | |||
data channel. The answerer may reject the offer. The means for rejecting an o ffer are dependent on | data channel. The answerer may reject the offer. The means for rejecting an o ffer are dependent on | |||
the higher layer protocol. The offer/answer exchange is atomic; if the answe r is rejected, the session reverts to the state prior to the | the higher-layer protocol. The offer/answer exchange is atomic; if the answe r is rejected, the session reverts to the state prior to the | |||
offer <xref target="RFC3264"/>. | offer <xref target="RFC3264"/>. | |||
</t> | </t> | |||
<section title="Closing a Data Channel" anchor="c | <section anchor="close-dc"> | |||
lose-dc"> | <name>Closing a Data Channel</name> | |||
<t>In order to close a data channel, the | <t>In order to close a data channel, the endpoint that wants to | |||
endpoint that wants to close | close the data channel | |||
SHALL send the SCTP SSN reset message <xref target="RFC6525"/>, following the | <bcp14>SHALL</bcp14> send an SCTP SSN Reset message <xref target="RFC6525"/>, | |||
procedures in section 6.7 of <xref target="I-D.ietf-rtcweb-data-channel"/>. | following the procedure in <xref target="RFC8831" sectionFormat="of" section="6 | |||
.7"/>. | ||||
In addition, if the closed data channel was negotiated using the offer/answer me | In addition, if the closed data channel was negotiated using the offer/answer | |||
chanism <xref target="opendc"/>, the endpoint that closed the data channel SHALL | mechanism (<xref target="opendc"/>), the endpoint that closed the data channel | |||
send a subsequent offer in which it either: | <bcp14>SHALL</bcp14> send a subsequent offer in which it does one of the followi | |||
ng: | ||||
</t> | </t> | |||
<t> | <ul spacing="normal"> | |||
<list style="symbols"> | <li>Removes the SDP dcmap attribute and SDP dcsa attributes | |||
<t> | associated with the closed data channel. Once the endpoint | |||
removes the SDP dcmap attribute and SDP dcsa attributes associated with the c | receives a successful answer, the SCTP stream identifier value can | |||
losed data channel. Once the endpoint receives a successful answer, the SCTP str | later be used for a new data channel (negotiated using either SCTP | |||
eam identifier value can later be used for a new data channel (negotiated using | or the offer/answer mechanism), or | |||
DCTP or using the offer/answer mechanism); or</t> | </li> | |||
<t>after a reset has been | <li>After a reset has been performed, reuses the SCTP stream used fo | |||
performed re-uses the SCTP stream used for the closed data channel for a new da | r the closed data channel for a new data channel, following the procedure in <xr | |||
ta channel, using the procedures in <xref target="opendc"/>. The offerer SHALL u | ef target="opendc"/>. The offerer <bcp14>SHALL</bcp14> use a different SDP dcmap | |||
se a different SDP dcmap attribute value for the data channel using the same SCT | attribute value for the data channel using the same SCTP stream. | |||
P stream. | </li> | |||
</ul> | ||||
</section> | ||||
</section> | ||||
<section anchor="various_SDP_OA_considerations"> | ||||
<name>Various SDP Offer/Answer Considerations</name> | ||||
<t>An SDP offer or answer has no "a=dcmap:" attributes but has "a=dc | ||||
sa:" attributes: | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>This is considered an error case. In this case, the receiver o | ||||
f such an | ||||
SDP offer or answer <bcp14>MUST</bcp14> discard the "a=dcsa:" attrib | ||||
utes. | ||||
</li> | ||||
</ul> | ||||
<t>An SDP offer or answer has an "a=dcsa:" attribute whose subprotoc | ||||
ol attribute | ||||
is unknown: | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>The receiver of such an SDP offer or answer <bcp14>SHOULD</bcp | ||||
14> ignore this | ||||
entire "a=dcsa:" attribute line. | ||||
</li> | ||||
</ul> | ||||
<t>An SDP offer or answer has an "a=dcsa:" attribute whose subprotoc | ||||
ol attribute | ||||
is known but whose subprotocol attribute semantic is not known for the | ||||
data channel transport case: | ||||
</t> | ||||
<ul spacing="normal"> | ||||
<li>The receiver of such an SDP offer or answer <bcp14>SHOULD</bcp | ||||
14> ignore this | ||||
entire "a=dcsa:" attribute line. | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
</section> | ||||
<section anchor="examples"> | ||||
<name>Examples</name> | ||||
</t> | <t><xref target="example1"/> shows an example of an SDP offer and answer | |||
</list> | where the SDP answerer rejects the data channel | |||
</t> | with stream id 0 either for explicit reasons or because it does not | |||
</section> | understand the "a=dcmap:" attribute. | |||
<!-- Closing a Data Channel --> | As a result, the offerer will close the data channel created with the | |||
</section> | SDP offer/answer negotiation option. | |||
<section title="Various SDP Offer/Answer Considerations" | The SCTP association will still be set up over DTLS. | |||
anchor="various_SDP_OA_considerations"> | At this point, the offerer or the answerer may use DCEP negotiation to open d | |||
<t> | ata | |||
<list> | channels.</t> | |||
<t>An SDP offer or answer has no | ||||
"a=dcmap:" attributes but has "a=dcsa:" attributes. | ||||
<list style="symbols"> | ||||
<t>This is consid | ||||
ered an error case. In this case the receiver of such an | ||||
SDP offer or answer MUST discard this "a=dcsa:" attributes. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t>SDP offer or answer has an "a= | ||||
dcsa" attribute, whose subprotocol attribute | ||||
is unknown. | ||||
<list style="symbols"> | ||||
<t>The receiver o | ||||
f such an SDP offer or answer SHOULD ignore this | ||||
entire "a=dcsa" attribute line. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t>SDP offer or answer has an "a= | ||||
dcsa" attribute, whose subprotocol attribute | ||||
is known, but whose subprotocol attribute semantic is not known for the | ||||
data channel transport case. | ||||
<list style="symbols"> | ||||
<t>The receiver o | ||||
f such an SDP offer or answer SHOULD ignore this | ||||
entire "a=dcsa" attribute line. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<!-- various SDP offer/answer ... --> | ||||
</section> | ||||
<!-- Procedures --> | ||||
<section title="Examples" anchor="examples"> | ||||
<figure align="left" title="Example 1" anchor="example1"> | ||||
<artwork align="left"><![CDATA[ | ||||
SDP offer: | ||||
<figure anchor="example1"> | ||||
<name>Example 1</name> | ||||
<sourcecode name="example-1-sdp-offer" type="sdp"><![CDATA[ | ||||
m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP6 2001:db8::3 | c=IN IP6 2001:db8::3 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5000 | a=sctp-port:5000 | |||
a=setup:actpass | a=setup:actpass | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | |||
a=tls-id:abc3de65cddef001be82 | a=tls-id:abc3de65cddef001be82 | |||
a=dcmap:0 subprotocol="bfcp";label="bfcp" | a=dcmap:0 subprotocol="bfcp";label="bfcp"]]></sourcecode> | |||
<sourcecode name="example-1-sdp-answer" type="sdp"><![CDATA[ | ||||
SDP answer: | ||||
m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP6 2001:db8::1 | c=IN IP6 2001:db8::1 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5002 | a=sctp-port:5002 | |||
a=setup:passive | a=setup:passive | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | 5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | |||
a=tls-id:dcb3ae65cddef0532d42 | a=tls-id:dcb3ae65cddef0532d42]]></sourcecode> </figure> | |||
]]></artwork> | ||||
</figure> | ||||
<t>In the example in <xref target="example1"/> the SDP an | ||||
swerer rejected the data channel | ||||
with stream id 0 either for explicit reasons or because it does not | ||||
understand the "a=dcmap:" attribute. | ||||
As a result the offerer will close the data channel created with the | ||||
SDP offer/answer negotiation option. | ||||
The SCTP association will still be setup over DTLS. | ||||
At this point the offerer or the answerer may use DCEP negotiation to open da | ||||
ta | ||||
channels.</t> | ||||
<figure align="left" title="Example 2" anchor="example2"> | ||||
<artwork align="left"><![CDATA[ | ||||
SDP offer: | ||||
<t><xref target="example2"/> shows an example of an SDP offer and answer | ||||
where the SDP offer contains data channels for BFCP and | ||||
MSRP subprotocols. The SDP answer rejects BFCP and accepts MSRP. | ||||
So, the offerer closes the data channel for BFCP, and both the offerer | ||||
and the answerer may start using the MSRP data channel | ||||
(after the SCTP association is set up). | ||||
The data channel with stream id 0 is free and can be used for future | ||||
DCEP or SDP offer/answer negotiation.</t> | ||||
<figure anchor="example2"> | ||||
<name>Example 2</name> | ||||
<sourcecode name="example-2-sdp-offer" type="sdp"><![CDATA[ | ||||
m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.1 | c=IN IP4 192.0.2.1 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5000 | a=sctp-port:5000 | |||
a=setup:actpass | a=setup:actpass | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | |||
a=tls-id:abc3de65cddef001be82 | a=tls-id:abc3de65cddef001be82 | |||
a=dcmap:0 subprotocol="bfcp";label="bfcp" | a=dcmap:0 subprotocol="bfcp";label="bfcp" | |||
a=dcmap:2 subprotocol="msrp";label="msrp" | a=dcmap:2 subprotocol="msrp";label="msrp" | |||
a=dcsa:2 accept-types:message/cpim text/plain | a=dcsa:2 accept-types:message/cpim text/plain | |||
a=dcsa:2 path:msrp://alice.example.com:10001/2s93i93idj;dc | a=dcsa:2 path:msrp://alice.example.com:10001/2s93i93idj;dc]]></sourcecode> | |||
<sourcecode name="example-2-sdp-answer" type="sdp"><![CDATA[ | ||||
SDP answer: | ||||
m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.2 | c=IN IP4 192.0.2.2 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5002 | a=sctp-port:5002 | |||
a=setup:passive | a=setup:passive | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | 5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | |||
a=tls-id:dcb3ae65cddef0532d42 | a=tls-id:dcb3ae65cddef0532d42 | |||
a=dcmap:2 subprotocol="msrp";label="msrp" | a=dcmap:2 subprotocol="msrp";label="msrp" | |||
a=dcsa:2 accept-types:message/cpim text/plain | a=dcsa:2 accept-types:message/cpim text/plain | |||
a=dcsa:2 path:msrp://bob.example.com:10002/si438dsaodes;dc | a=dcsa:2 path:msrp://bob.example.com:10002/si438dsaodes;dc]]></sourcecode> </f | |||
]]></artwork> | igure> | |||
</figure> | ||||
<t>In the example in <xref target="example2"/> the SDP of | <t>The example in <xref target="example3"/> is a continuation of the examp | |||
fer contains data channels for BFCP | le in <xref target="example2"/>. | |||
(Binary Floor Control Protocol) and | The SDP offerer now removes the MSRP data channel with stream id 2 | |||
MSRP subprotocols. The SDP answer rejected BFCP and accepted MSRP. | but opens a new MSRP data channel with stream id 4. | |||
So, the offerer closes the data channel for BFCP and both offerer | The answerer accepts the entire offer. | |||
and answerer may start using the MSRP data channel | As a result, the offerer closes the previously negotiated MSRP-related data c | |||
(after the SCTP association is set up). | hannel, | |||
The data channel with stream id 0 is free and can be used for future | and both the offerer and the answerer may start using the new MSRP-related da | |||
DCEP or SDP offer/answer negotiation.</t> | ta | |||
<t>Continuing the example in <xref target="example2"/>.</ | channel.</t> | |||
t> | ||||
<figure align="left" title="Example 3" anchor="example3"> | ||||
<artwork align="left"><![CDATA[ | ||||
Subsequent SDP offer: | ||||
<figure anchor="example3"> | ||||
<name>Example 3</name> | ||||
<sourcecode name="example-3-sdp-offer" type="sdp"><![CDATA[ | ||||
m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | m=application 10001 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.1 | c=IN IP4 192.0.2.1 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5000 | a=sctp-port:5000 | |||
a=setup:actpass | a=setup:actpass | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | |||
a=tls-id:abc3de65cddef001be82 | a=tls-id:abc3de65cddef001be82 | |||
a=dcmap:4 subprotocol="msrp";label="msrp" | a=dcmap:4 subprotocol="msrp";label="msrp" | |||
a=dcsa:4 accept-types:message/cpim text/plain | a=dcsa:4 accept-types:message/cpim text/plain | |||
a=dcsa:4 path:msrp://alice.example.com:10001/2s93i93idj;dc | a=dcsa:4 path:msrp://alice.example.com:10001/2s93i93idj;dc]]></sourcecode> | |||
<sourcecode name="example-3-sdp-answer" type="sdp"><![CDATA[ | ||||
Subsequent SDP answer: | ||||
m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | m=application 10002 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.2 | c=IN IP4 192.0.2.2 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5002 | a=sctp-port:5002 | |||
a=setup:passive | a=setup:passive | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | 5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA | |||
a=tls-id:dcb3ae65cddef0532d42 | a=tls-id:dcb3ae65cddef0532d42 | |||
a=dcmap:4 subprotocol="msrp";label="msrp" | a=dcmap:4 subprotocol="msrp";label="msrp" | |||
a=dcsa:4 accept-types:message/cpim text/plain | a=dcsa:4 accept-types:message/cpim text/plain | |||
a=dcsa:4 path:msrp://bob.example.com:10002/si438dsaodes;dc | a=dcsa:4 path:msrp://bob.example.com:10002/si438dsaodes;dc]]></sourcecode> </f | |||
]]></artwork> | igure> | |||
</figure> | </section> | |||
<t>The example in <xref target="example3"/> is a continua | <section anchor="sec-cons"> | |||
tion of the example in <xref target="example2"/>. | <name>Security Considerations</name> | |||
The SDP offerer now removes the MSRP data channel with stream id 2, | <t>This document specifies new SDP attributes used in the negotiation of d | |||
but opens a new MSRP data channel with stream id 4. | ata channel parameters. </t> | |||
The answerer accepts the entire offer. | <t> | |||
As a result the offerer closes the earlier negotiated MSRP related data chann | These parameters are negotiated as part of opening an SCTP channel over DTLS as | |||
el | specified in <xref target="RFC8841"/>. Each | |||
and both offerer and answerer may start using new the MSRP related data chann | subprotocol may come with its own security considerations that need to be docume | |||
el.</t> | nted as part of the subprotocol definition. | |||
</section> | Otherwise, this document does not add any security considerations to those speci | |||
<!-- Examples --> | fied in <xref target="RFC8841"/>. | |||
<section title="Security Considerations" anchor="sec-cons"> | </t> | |||
<t>This document specifies new SDP attributes used in the | <t>Such error cases as the use of unknown parameter values or violations | |||
negotiation of the DATA channel parameters. </t> | of the odd/even rule (<xref target="id_mgmt"/>) <bcp14>MUST</bcp14> | |||
<t> | be handled by closing the corresponding data channel.</t> | |||
These parameter are negotiated as part of opening a SCTP channel over DTLS as sp | </section> | |||
ecified in <xref target="I-D.ietf-mmusic-sctp-sdp"/>. Each | <section anchor="IANA"> | |||
subprotocol may come with it’s own security considerations that need to be docum | <name>IANA Considerations</name> | |||
ented as part of the subprotocol definition. | <section anchor="IANA_subproto_ids"> | |||
Otherwise this document does not add any security considerations to the ones spe | <name>Subprotocol Identifiers</name> | |||
cified in <xref target="I-D.ietf-mmusic-sctp-sdp"/> | <t>Registration of new subprotocol identifiers is performed using the ex | |||
</t> | isting IANA | |||
<t>Error cases like the use of unknown parameter values o | ||||
r violation the odd/even rule MUST | ||||
be handled by closing the corresponding Data Channel.</t> | ||||
</section> | ||||
<section title="IANA Considerations" anchor="IANA"> | ||||
<section title="Subprotocol Identifiers" anchor="IANA_sub | ||||
proto_ids"> | ||||
<t>Registration of new subprotocol identifiers is | ||||
performed using the existing IANA | ||||
"WebSocket Subprotocol Name Registry" table.</t> | "WebSocket Subprotocol Name Registry" table.</t> | |||
<t>The following text should be added following t | <t>The following text has been added below the title of the table.</t> | |||
he title of the table.</t> | <t>"This table also includes subprotocol identifiers specified for usage | |||
<t>"This table also includes subprotocol identifi | within a | |||
ers specified for usage within a | ||||
WebRTC data channel."</t> | WebRTC data channel."</t> | |||
<t>The following reference should be added to und | <t>This document (RFC 8864) has been added to the "Reference" list for | |||
er the heading reference: | the registry.</t> | |||
"RFC XXXX".</t> | <t>This document assigns no new values to this table.</t> | |||
<t>This document assigns no new values to this ta | <t>A subprotocol may simultaneously be defined for data channel transpor | |||
ble.</t> | t | |||
<t>A subprotocol may simultaneously be defined fo | and for WebSocket transport. | |||
r data channel transport | In such a case, the "Subprotocol Definition" and "Reference" cells in the | |||
and for Websocket transport. | ||||
In such a case the "Subprotocol Definition" and "Reference" cells in the | ||||
subprotocol's row of the IANA "WebSocket Subprotocol Name Registry" table sh ould | subprotocol's row of the IANA "WebSocket Subprotocol Name Registry" table sh ould | |||
contain two entries. | contain two entries. | |||
One entry in each of these cells should refer to the Websocket related | One entry in each of these cells should refer to the WebSocket-related | |||
subprotocol specification, and the other entry should refer to the data | subprotocol specification, and the other entry should refer to the | |||
channel related subprotocol specification. | data-channel-related subprotocol specification. | |||
</t> | </t> | |||
<t>NOTE to RFC Editor: Please replace "XXXX" with | </section> | |||
the number of this RFC.</t> | <section> | |||
</section> | <name>New SDP Attributes</name> | |||
<section title="New SDP Attributes"> | <section anchor="IANA-reg-dcmap"> | |||
<section title="dcmap" anchor="IANA-reg-dcmap"> | <name>dcmap</name> | |||
<t>NOTE to RFC Editor: Please replace "XX | <t>This document defines a new SDP media-level attribute, "a=dcmap:", | |||
XX" with the number of this RFC.</t> | as follows: | |||
<t>This document defines a new SDP media- | </t> | |||
level attribute "a=dcmap:" as follows: | <table anchor="dcmap-iana"> | |||
</t> | <name>New "a=dcmap:" Attribute</name> | |||
<texttable title=""> | <thead> | |||
<ttcol align="left" width="35%"/> | <tr> | |||
<ttcol align="left" width="65%"/> | <th colspan="2" align="center">"a=dcmap:"</th> | |||
<c>Contact name:</c> | </tr> | |||
<c>IESG</c> | </thead> | |||
<c>Contact email:</c> | <tbody> | |||
<c>iesg@ietf.org</c> | <tr> | |||
<c>Attribute name:</c> | <td align="left">Contact name</td> | |||
<c>dcmap</c> | <td align="left">IESG</td> | |||
<c>Attribute syntax:</c> | </tr> | |||
<c>As per <xref target="dcmap-att | <tr> | |||
r-definition"/> | <td align="left">Contact email</td> | |||
</c> | <td align="left">iesg@ietf.org</td> | |||
<c>Attribute semantics:</c> | </tr> | |||
<c>As per <xref target="dcmap-att | <tr> | |||
r-definition"/> | <td align="left">Attribute name</td> | |||
</c> | <td align="left">dcmap</td> | |||
<c>Usage level:</c> | </tr> | |||
<c>media</c> | <tr> | |||
<c>Charset dependent:</c> | <td align="left">Attribute syntax</td> | |||
<c>No</c> | <td align="left">As per <xref target="dcmap-attr-definition"/> | |||
<c>Purpose:</c> | </td> | |||
<c>Define data channel specific p | </tr> | |||
arameters</c> | <tr> | |||
<c>Appropriate values:</c> | <td align="left">Attribute semantics</td> | |||
<c>As per <xref target="dcmap-att | <td align="left">As per <xref target="dcmap-attr-definition"/> | |||
r-definition"/> | </td> | |||
</c> | </tr> | |||
<c>O/A procedures:</c> | <tr> | |||
<c>As per <xref target="section_p | <td align="left">Usage level</td> | |||
rocedures"/> | <td align="left">media</td> | |||
</c> | </tr> | |||
<c>Mux category:</c> | <tr> | |||
<c>SPECIAL. See <xref target="dcm | <td align="left">Charset dependent</td> | |||
ap-mux-category"/> | <td align="left">No</td> | |||
</c> | </tr> | |||
<c>Reference:</c> | <tr> | |||
<c>RFCXXXX</c> | <td align="left">Purpose</td> | |||
</texttable> | <td align="left">To define data-channel-specific parameters</td> | |||
</section> | </tr> | |||
<section title="dcsa" anchor="IANA-reg-dcsa"> | <tr> | |||
<t>NOTE to RFC Editor: Please replace "XX | <td align="left">Appropriate values</td> | |||
XX" with the number of this RFC.</t> | <td align="left">As per <xref target="dcmap-attr-definition"/> | |||
<t>This document defines a new SDP media- | </td> | |||
level attribute "a=dcsa:" as follows: | </tr> | |||
</t> | <tr> | |||
<texttable title=""> | <td align="left">O/A procedures</td> | |||
<ttcol align="left" width="35%"/> | <td align="left">SDP offer/answer procedures as per <xref target | |||
<ttcol align="left" width="65%"/> | ="section_procedures"/> | |||
<c>Contact name:</c> | </td> | |||
<c>IESG</c> | </tr> | |||
<c>Contact email:</c> | <tr> | |||
<c>iesg@ietf.org</c> | <td align="left">Mux category</td> | |||
<c>Attribute name:</c> | <td align="left">SPECIAL. See <xref target="dcmap-mux-category"/ | |||
<c>dcsa</c> | > | |||
<c>Attribute syntax:</c> | </td> | |||
<c>As per <xref target="dcsa-attr | </tr> | |||
ibute"/> | <tr> | |||
</c> | <td align="left">Reference</td> | |||
<c>Attribute semantics:</c> | <td align="left">RFC 8864</td> | |||
<c>As per <xref target="dcsa-attr | </tr> | |||
ibute"/> | </tbody> | |||
</c> | </table> | |||
<c>Usage level:</c> | </section> | |||
<c>media</c> | <section anchor="IANA-reg-dcsa"> | |||
<c>Charset dependent:</c> | <name>dcsa</name> | |||
<c>No</c> | <t>This document defines a new SDP media-level attribute, "a=dcsa:", a | |||
<c>Purpose:</c> | s follows: | |||
<c>Define data channel subprotoco | </t> | |||
l specific attributes</c> | ||||
<c>Appropriate values:</c> | ||||
<c>As per <xref target="dcsa-attr | ||||
ibute"/> | ||||
</c> | ||||
<c>O/A procedures:</c> | ||||
<c>As per <xref target="section_p | ||||
rocedures"/> | ||||
</c> | ||||
<c>Mux category:</c> | ||||
<c>SPECIAL. See <xref target="dcs | ||||
a-mux-category"/> | ||||
</c> | ||||
<c>Reference:</c> | ||||
<c>RFCXXXX</c> | ||||
</texttable> | ||||
</section> | ||||
</section> | ||||
</section> | ||||
<section title="Contributors"> | ||||
<t>Juergen Stoetzer-Bradler co-authored this document.</t | ||||
> | ||||
</section> | ||||
<section title="Acknowledgments"> | ||||
<t>The authors wish to acknowledge the borrowing of ideas | ||||
from other | ||||
internet drafts by Salvatore Loreto, Gonzalo Camarillo, Peter Dunkley | ||||
and Gavin Llewellyn, and to thank Flemming Andreasen, Christian Groves, | ||||
Gunnar Hellstrom, Paul Kyzivat, Jonathan Lennox, | ||||
Uwe Rauschenbach and Roman Shpount for their invaluable comments.</t> | ||||
<t>Special thanks to Christer Holmberg for helping finish | ||||
the document and cleaning the SDP offer/answer section.</t> | ||||
</section> | ||||
<section title="CHANGE LOG"> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-15'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Editorial changes separate se | ||||
ctions for offer/answer procedures.</t> | ||||
<t>Update security section.</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-14'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Change "dtls-id" to "tls-id" a | ||||
nd assign 20 octet long values</t> | ||||
<t>Remove of RFC4566bis draft fro | ||||
m list of normative references. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-12'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Modification of Keith's addres | ||||
s information. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-11'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>dcmap-stream-id syntax change | ||||
to limit size to 5 digits. | ||||
</t> | ||||
<t>Add missing 'x' prefix to quot | ||||
ed-visible syntax. | ||||
</t> | ||||
<t>Align SDP offerer and answerer | ||||
handling when both max-retr and max-time are present. | ||||
</t> | ||||
<t>Use of TEST-NET-1 ip addresses | ||||
in examples. | ||||
</t> | ||||
<t>Add missing a=dtls-id in one e | ||||
xample. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-10'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Removal of the "a=connection" | ||||
attribute lines from all SDP examples. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-09'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>In the introduction: | ||||
<list style="symbols"> | ||||
<t>Replacement of | ||||
the sentence "The RTCWeb working group has defined the concept of | ||||
bi-directional data channels running on top of SCTP/DTLS (SCTP over the Dat | ||||
agram | ||||
Transport Layer Security protocol)" with "The RTCWeb working group has defi | ||||
ned the | ||||
concept of bi-directional data channels running on top of the Stream Contro | ||||
l | ||||
Transmission Protocol (SCTP)". | ||||
</t> | ||||
<t>Addition of fo | ||||
llowing sentences to the second paragraph: "These procedures are | ||||
based on generic SDP offer/answer negotiation rules for SCTP | ||||
based media transport as specified in <xref target="I-D.ietf-mmusic-sctp-sd | ||||
p"/> for | ||||
the SDP "m" line proto values UDP/DTLS/SCTP and TCP/DTLS/SCTP. | ||||
In the future, data channels could be defined over other SCTP based protoco | ||||
ls, such as | ||||
SCTP over IP. However, corresponding potential other "m" line proto values | ||||
are not | ||||
considered in this document." | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t>Replacement of "DTLS connectio | ||||
n" with "DTLS association" throughout the document. | ||||
</t> | ||||
<t>In sections <xref target="dcma | ||||
p-mux-category"/> and | ||||
<xref target="dcsa-mux-category"/> removal of the sentences "This document al | ||||
so | ||||
does not specify multiplexing rules for this attribute for SCTP or | ||||
SCTP/DTLS proto values". | ||||
</t> | ||||
<t>In the text related to "Subseq | ||||
uent SDP answer" in section | ||||
<xref target="various_SDP_OA_considerations"/> replacement of "The DTLS/SCTP | ||||
association remains open ..." with "The SCTP association remains open ...". | ||||
</t> | ||||
<t>In the text after the second S | ||||
DP answer in section | ||||
<xref target="examples"/> replacement of "... (after SCTP/DTLS association is | ||||
setup)" | ||||
with "... (after the SCTP association is set up)". | ||||
</t> | ||||
<t>Addition of draft-ietf-mmusic- | ||||
dtls-sdp to the list of informative | ||||
references. | ||||
</t> | ||||
<t>Addition of "a=dtls-id" attrib | ||||
ute lines to the SDP offer/answer examples in | ||||
<xref target="examples"/>. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-08'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Addition of definition of "dat | ||||
a channel subprotocol" to | ||||
<xref target="terminology"/> as proposed on the MMUSIC list, | ||||
https://www.ietf.org/mail-archive/web/mmusic/current/msg15827.html. | ||||
</t> | ||||
<t>Addition of RFC4566bis draft | ||||
to list of normative references. | ||||
</t> | ||||
<t>Updates of tables in <xref tar | ||||
get="IANA-reg-dcmap"/> and | ||||
<xref target="IANA-reg-dcsa"/> as per section 8.2.4 | ||||
of RFC4566bis draft. | ||||
</t> | ||||
<t>Addition of new "new-usage-lev | ||||
el">. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-07'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Addition of two new paragraphs | ||||
to <xref target="dcsa-attribute"/> regarding | ||||
subprotocol attribute relationship with transport protocol. | ||||
</t> | ||||
<t>Addition of a note to <xref ta | ||||
rget="IANA_subproto_ids"/> regarding subprotocols | ||||
simultaneously defined for data channel and Websocket usage. | ||||
</t> | ||||
<t>Addition of two further SDP of | ||||
fer/answer considerations to | ||||
<xref target="various_SDP_OA_considerations"/> regarding unknown subprotocol | ||||
attributes and known subprotocol attributes with unknown data channel transp | ||||
ort | ||||
related semantic. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-06'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Changes addressing Christian G | ||||
roves's WGLC review comments raised in | ||||
http://www.ietf.org/mail-archive/web/mmusic/current/msg15357.html and | ||||
http://www.ietf.org/mail-archive/web/mmusic/current/msg15359.html. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-05'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>In IANA registration <xref tar | ||||
get="IANA-reg-dcmap"/> and | ||||
<xref target="IANA-reg-dcsa"/> replacement of contact name and e-mail address | ||||
with "MMUSIC Chairs" and "mmusic-chairs@ietf.org". | ||||
</t> | ||||
<t>In <xref target="dcsa-attribut | ||||
e"/> replacement of "Thus in the example above, the | ||||
original attribute line "a=accept- | ||||
types:text/plain" is represented by the attribute line "a=dcsa:2 | ||||
accept-types:text/plain", which specifies that this instance of MSRP | ||||
being transported on the SCTP association using the data channel with | ||||
stream id 2 accepts plain text files." with "... which specifies that this | ||||
instance of the MSRP subprotocol being transported ...". | ||||
</t> | ||||
<t>The last paragraph of <xref ta | ||||
rget="dcsa-attribute"/> started with | ||||
"Note: This document does not provide a complete specification ...". | ||||
Removal of "Note:" and move of this paragraph to the introduction in | ||||
<xref target="introduction"/> as last paragraph. | ||||
</t> | ||||
<t> | ||||
<xref target="prot_att"/> | ||||
's headline was "Subprotocol Specific Attributes". | ||||
Change of this headline to "Other Media Level Attributes" and adaptations of | ||||
the first | ||||
paragraph of this section and the first paragraph of <xref target="dcsa-attri | ||||
bute"/> | ||||
in order to clarify that not only those attributes may be | ||||
encapsulated in a "dcsa" attribute, which are specifically defined for the | ||||
subprotocol, but that also other attributes may be encapsulated if | ||||
they are related to the specific subprotocol instance. | ||||
</t> | ||||
<t>Move of the last but one parag | ||||
raph of <xref target="dcsa-attribute"/> starting with | ||||
"The same syntax applies to ..." right in front of the formal syntax definiti | ||||
on of the | ||||
"dcsa" attribute. | ||||
</t> | ||||
<t>Modifications of the text in < | ||||
xref target="dcmap-mux-category"/> and | ||||
<xref target="dcsa-mux-category"/> in order not to explicitly restrict usage | ||||
of the | ||||
"a=dcmap:" and "a=dcsa:" attributes to "m" lines with proto values "UDP/DTLS/ | ||||
SCTP" | ||||
or "TCP/DTLS/SCTP". | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-04'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>In <xref target="subprotocol-p | ||||
arameter"/> the first (and only) paragraph was | ||||
"The 'subprotocol' parameter indicates which protocol the | ||||
client expects to exchange via the channel. | ||||
'subprotocol' is an optional parameter. | ||||
If the 'subprotocol' parameter is not present, then its value | ||||
defaults to the empty string." | ||||
Replacement of this paragraph with following two paragraphs: | ||||
<list style="symbols"> | ||||
<t> The 'subproto | ||||
col' parameter indicates which protocol the | ||||
client expects to exchange via the channel. | ||||
This parameter maps to the 'Protocol' parameter defined in | ||||
<xref target="I-D.ietf-rtcweb-data-protocol"/>. | ||||
<xref target="IANA_subproto_ids"/> specifies how new subprotocol parameter | ||||
values are registered. | ||||
'subprotocol' is an optional parameter. | ||||
If the 'subprotocol' parameter is not present, then its value | ||||
defaults to the empty string. | ||||
</t> | ||||
<t>Note: The empt | ||||
y string MAY also be explicitly used as 'subprotocol' value, | ||||
such that 'subprotocol=""' is equivalent to the 'subprotocol' parameter no | ||||
t being | ||||
present at all. <xref target="I-D.ietf-rtcweb-data-protocol"/> allows the | ||||
DATA_CHANNEL_OPEN message's 'subprotocol' value to be an empty string. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t>Addition of <xref target="I-D. | ||||
ietf-mmusic-sdp-mux-attributes"/> | ||||
to list the of normative references. | ||||
</t> | ||||
<t>Addition of dcmap attribute sp | ||||
ecific IANA registration | ||||
<xref target="IANA-reg-dcmap"/>. | ||||
</t> | ||||
<t>Addition of dcsa attribute spe | ||||
cific IANA registration | ||||
<xref target="IANA-reg-dcsa"/>. | ||||
</t> | ||||
<t>Addition of new <xref target=" | ||||
dcmap-mux-category"/> describing the mux category | ||||
of the dcmap SDP attribute. This section and the new "a=dcsa:" attribute rel | ||||
ated | ||||
mux category section are similar to the "Mux Category" sections of | ||||
the "a=sctp-port:" and "a=max-message-size:" attributes in | ||||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>. | ||||
</t> | ||||
<t>Addition of new <xref target=" | ||||
dcsa-mux-category"/> describing the mux category | ||||
of the dcsa SDP attribute. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-03'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>In <xref target="introduction" | ||||
/> replacement of | ||||
"RTCWeb leaves it open for other applications to use data channels and its in | ||||
-band | ||||
DCEP or out-of-band non-DCEP protocols for creating them" with | ||||
"... to use data channels and its in-band DCEP or other in-band or out-of-ban | ||||
d | ||||
protocols for creating them". | ||||
Additionally replacement of | ||||
"In particular, the SDP offer generated by the application | ||||
includes no channel-specific information" with | ||||
"... generated by the RTCweb data channel stack includes | ||||
no channel-specific information". | ||||
</t> | ||||
<t>Move of former section 5 ("Dat | ||||
a Channels") to new | ||||
<xref target="generic-out-of-band-aspects"/> and removal of JavaScript API sp | ||||
ecific | ||||
discussions from this moved text (like mentioning of data channel stack speci | ||||
fic | ||||
states). Therefore former section 6 ("SDP Offer/Answer Negotiation") is now | ||||
<xref target="sdp_synt"/>. | ||||
</t> | ||||
<t>In <xref target="sdp_synt"/>: | ||||
<list style="symbols"> | ||||
<t>Relacement of | ||||
<xref target="sdp_synt"/>'s | ||||
first paragraph | ||||
"This section defines a method of non-DCEP negotiation by which two | ||||
clients can negotiate data channel-specific and subprotocol-specific | ||||
parameters, using the out-of-band SDP offer/answer exchange. This | ||||
SDP extension can only be used with the SDP offer/answer model." with | ||||
"This section defines an SDP extension by which | ||||
two clients can negotiate data channel-specific and subprotocol-specific | ||||
parameters without using DCEP <xref target="I-D.ietf-rtcweb-data-protocol"/ | ||||
>. | ||||
This SDP extension only defines usage in the context of SDP offer/answer." | ||||
</t> | ||||
<t>Addition of ne | ||||
w paragraph: | ||||
"<xref target="generic-out-of-band-aspects"/> provides information how data | ||||
channels | ||||
work in general and especially summarizes some key aspects, which should be | ||||
considered for the negotiation of data channels if DCEP is not used." | ||||
</t> | ||||
</list> | ||||
</t> | ||||
<t>In <xref target="subsec-sdp-at | ||||
tr-for-dc-par-neg"/> replacement of "The intention of | ||||
exchanging these attributes is to create data channels on both the peers with | ||||
the same | ||||
set of attributes without actually using the DCEP | ||||
<xref target="I-D.ietf-rtcweb-data-protocol"/>" with "The intention in exchan | ||||
ging | ||||
these attributes is to create, on two peers, without use of DCEP | ||||
<xref target="I-D.ietf-rtcweb-data-protocol"/>, | ||||
matched pairs of oppositely directed data channels having the same set of att | ||||
ributes". | ||||
</t> | ||||
<t>In <xref target="max-retr-para | ||||
m-definition"/> replacement of "The 'max-retr' | ||||
parameter indicates the maximal number a user message will be retransmitted" | ||||
with "The | ||||
'max-retr' parameter indicates the maximal number of times a user message wil | ||||
l | ||||
be retransmitted". | ||||
</t> | ||||
<t>In <xref target="id_mngt"/> re | ||||
placement of "However, an SDP offer/answer exchange | ||||
MUST NOT be initiated if the associated SCTP stream is already negotiated via | ||||
DCEP" | ||||
with "However, an SCTP stream MUST NOT be referenced in a dcmap or dcsa | ||||
attribute of an SDP offer/answer exchange if the associated SCTP stream has a | ||||
lready | ||||
been negotiated via DCEP". | ||||
</t> | ||||
<t>In the examples in <xref targe | ||||
t="examples"/> addition of the previously missing | ||||
colons to the "a=sctp-port" attribute lines. | ||||
</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-02'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Move of reference draft-ietf-r | ||||
tcweb-jsep from the list of normative | ||||
references to the list of informative references. Remover in -07 since not ref | ||||
erenced</t> | ||||
<t>Addition of IANA SDP parameter | ||||
s to the list of informative | ||||
references | ||||
and addition of following two sentences to the first paragraph after the ABNF | ||||
definition: "Note however that not all SDP attributes are suitable | ||||
as "a=dcsa:" parameter. IANA SDP parameters contains | ||||
the lists of IANA registered session and media level or | ||||
media level only SDP attributes."</t> | ||||
<t>In the introduction replacemen | ||||
t of last sentence | ||||
"This document defines SDP-based out-of-band negotiation procedures | ||||
to establish data channels for transport of well-defined subprotocols" | ||||
with | ||||
"This document defines SDP offer/answer negotiation procedures | ||||
to establish data channels for transport of well-defined subprotocols, | ||||
to enable out-of-band negotiation". | ||||
</t> | ||||
<t>Throughout the document replac | ||||
ement of "external negotiation" with | ||||
"SDP offer/answer negotiation" and removal of term "external negotiation" from | ||||
the | ||||
terminology list in <xref target="terminology"/>.</t> | ||||
<t> Throughout the document repla | ||||
cement of "internal negotiation" with | ||||
"DCEP" and removal of terms "internal negotiation" and "in-band negotiation" | ||||
from the terminology list in <xref target="terminology"/>.</t> | ||||
<t>Addition of "SCTP Stream Seque | ||||
nce Number (SSN)" to the list of terms.</t> | ||||
<t>In <xref target="id_mngt"/> re | ||||
placement of sentence | ||||
"However, a single stream is managed using one method at a time." with | ||||
"However, an SDP offer/answer exchange MUST NOT be initiated | ||||
if the associated SCTP stream is already negotiated via DCEP".</t> | ||||
<t>In <xref target="param_negotia | ||||
tion"/> replacement of sentence | ||||
"By definition max-retr and max-time are mutually exclusive, so only one of | ||||
them can be present in a=dcmap" with | ||||
"By definition max-retr and max-time are mutually exclusive, | ||||
so aBoth MUST NOT be present in a=dcmap".</t> | ||||
<t>Move of reference <xref target | ||||
="WebRtcAPI"/> from list of normative references | ||||
to list of informative references.</t> | ||||
<t>Removal of almost all text par | ||||
ts, which discussed JavaScript or other API specific | ||||
aspects. Such API specific aspects were mainly discussed in sub-sections of Se | ||||
ction 5 | ||||
and <xref target="sdp_synt"/> | ||||
of draft-ietf-mmusic-data-channel-sdpneg-02.</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-01'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>New <xref target="appl_stateme | ||||
nt"/> regarding applicability to | ||||
SDP offer/answer only.</t> | ||||
<t>Addition of new <xref target=" | ||||
IANA_subproto_ids"/> "Subprotocol identifiers" as | ||||
subsection of the "IANA Considerations" related <xref target="IANA"/>. | ||||
Also removal of the temporary note | ||||
"To be completed. As [I-D.ietf-rtcweb-data-protocol] this document should re | ||||
fer to | ||||
IANA's WebSocket Subprotocol Name Registry defined in <xref target="RFC6455"/ | ||||
>"</t> | ||||
<t> In <xref target="param_negoti | ||||
ation"/>: | ||||
<list style="symbols"> | ||||
<t>In the first p | ||||
aragraph | ||||
replacement of the sentence "If an SDP offer | ||||
contains both of these parameters then such an SDP offer will be rejected." | ||||
with "If | ||||
an SDP offer contains both of these parameters then the receiver of such an | ||||
SDP | ||||
offer MUST reject the SDP offer." </t> | ||||
<t>In the second | ||||
paragraph | ||||
capitalization of "shall" and "may" such that both sentences now read: | ||||
"The SDP answer SHALL echo the same subprotocol, max-retr, max-time, | ||||
ordered parameters, if those were present in the offer, and MAY include | ||||
a label parameter. They MAY appear in any order, which could be | ||||
different from the SDP offer, in the SDP answer."</t> | ||||
<t>In the third p | ||||
aragraph | ||||
replacement of the sentence | ||||
"The same information MUST be replicated without changes in any subsequent | ||||
offer or | ||||
answer, as long as the data channel is still opened at the time of offer or | ||||
answer | ||||
generation." with | ||||
"When sending a subsequent offer or an answer, and for as long as the data | ||||
channel | ||||
is still open, the sender MUST replicate the same information.".</t> | ||||
</list> | ||||
</t> | ||||
<t>In <xref target="param_negotia | ||||
tion"/> the mapping of data channel types defined in | ||||
<xref target="I-D.ietf-rtcweb-data-protocol"/> to the SDP "a=dcmap" attribute | ||||
parameters were illustrated using example "a=dcmap" attribute lines. | ||||
Replacement of these example "a=dcmap" attribute lines with just the "a=dcmap | ||||
" | ||||
attribute parameters being relevant for the channel type.</t> | ||||
<t>In <xref target="various_SDP_O | ||||
A_considerations"/> the description of bullet | ||||
point "SDP offer has no a=dcmap attributes - Initial SDP offer:" was | ||||
"Initial SDP offer: No data channel negotiated yet." | ||||
Replacement of this description with | ||||
"Initial SDP offer: No data channel is negotiated yet. | ||||
The DTLS connection and SCTP association is | ||||
negotiated and, if agreed, established as per | ||||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>."</t> | ||||
<t>In <xref target="various_SDP_O | ||||
A_considerations"/> in both bullet points related to | ||||
"Subsequent SDP offer" and "Subsequent SDP answer" replacement of | ||||
"All the externally negotiated data channels must be closed now." with | ||||
"All the externally negotiated data channels are expected to be closed now.". | ||||
</t> | ||||
<t>In <xref target="ext_open"/>'s | ||||
sixth paragraph | ||||
replacement of the two occurrences of "must" with "MUST".</t> | ||||
<t>In <xref target="dcmap-attr-de | ||||
finition"/> in the definition of the ABNF rule | ||||
"dcmap-opt" there was a comment saying that | ||||
"Only maxretr-opt or maxtime-opt is present. Both MUST NOT be present." | ||||
Removal of the second normative sentence and instead addition of following ne | ||||
w | ||||
paragraph to the end of this section: | ||||
"Within an 'a=dcmap' attribute line's 'dcmap-opt' value only one | ||||
'maxretr-opt' parameter or one 'maxtime-opt' parameter is present. | ||||
Both MUST NOT be present."</t> | ||||
<t>In <xref target="ordered-param | ||||
-description"/> replacement of the first sentence | ||||
"The 'ordered' parameter with value "true" indicates that DATA chunks in the | ||||
channel | ||||
MUST be dispatched to the upper layer by the receiver while preserving the or | ||||
der." | ||||
with | ||||
"The 'ordered' parameter with value "true" indicates that the receiver MUST d | ||||
ispatch | ||||
DATA chunks in the data channel to the upper layer while preserving the order | ||||
.".</t> | ||||
<t>In <xref target="opendc"/>'s f | ||||
irst paragraph replacement of the one occurrence of | ||||
"must" with "..., it MUST wait until ...".</t> | ||||
<t>In <xref target="close-dc"/>: | ||||
<list style="symbols"> | ||||
<t>In the second | ||||
paragraph replacement of "must" with "... whether this closing MUST | ||||
in addition ..."</t> | ||||
<t>In the third p | ||||
aragraph replacement of the sentence | ||||
"The port value for the "m" line SHOULD NOT be changed (e.g., to zero) | ||||
when closing a data channel ..." with | ||||
"The offerer SHOULD NOT change the port value for the "m" line (e.g., to ze | ||||
ro) when | ||||
closing a data channel ...".</t> | ||||
<t>In the last bu | ||||
t two paragraph replacement of the sentence | ||||
"... then an SDP offer which excludes this closed data channel SHOULD be ge | ||||
nerated." | ||||
with | ||||
"... then the client SHOULD generate an SDP offer which excludes this close | ||||
d data | ||||
channel.".</t> | ||||
<t>In the last bu | ||||
t one paragraph replacement of "must" with | ||||
"The application MUST also close...".</t> | ||||
</list> | ||||
</t> | ||||
<t>In <xref target="prot_att"/> a | ||||
ddition of following note after the formal definition | ||||
of the 'a=dcsa' attribute: | ||||
"Note that the above reference to RFC 4566 defines were the | ||||
attribute definition can be found; | ||||
it does not provide any limitation on support of attributes | ||||
defined in other documents in accordance with this attribute | ||||
definition."</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ietf-mmusic-data-c | ||||
hannel-sdpneg-00'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>In <xref target="terminology"/ | ||||
> "WebRTC data channel" was defined as | ||||
"A bidirectional channel consisting of paired | ||||
SCTP outbound and inbound streams." | ||||
Replacement of this definition with | ||||
"Data channel: A WebRTC data channel as specified in | ||||
<xref target="I-D.ietf-rtcweb-data-channel"/>", and consistent usage | ||||
of "data channel" in the remainder of the document including the | ||||
document's headline."</t> | ||||
<t>In Section 5 removal of follow | ||||
ing note: | ||||
'OPEN ISSUE: The syntax in <xref target="I-D.ietf-mmusic-sctp-sdp"/> may | ||||
change as that document progresses. In particular we expect | ||||
"webrtc-datachannel" to become a more general term.'</t> | ||||
<t>Consistent usage of '"m" line' | ||||
in whole document as per RFC4566.</t> | ||||
<t>In <xref target="subsec-sdp-at | ||||
tr-for-dc-par-neg"/> | ||||
removal of the example dcmap attribute line | ||||
'a=dcmap:2 subprotocol="bfcp";label="channel 2' as there are already | ||||
four examples right after the ABNF rules in | ||||
<xref target="dcmap-attr-definition"/>. | ||||
Corresponding removal of following related note: | ||||
"Note: This document does not provide a complete specification | ||||
of how to negotiate the use of a WebRTC data channel to transport BFCP. | ||||
Procedures specific to each subprotocol such as BFCP will be | ||||
documented elsewhere. The use of BFCP is only an example of how | ||||
the generic procedures described herein might apply to a specific | ||||
subprotocol."</t> | ||||
<t>In <xref target="subsec-sdp-at | ||||
tr-for-dc-par-neg"/> | ||||
removal of following note: | ||||
"Note: This attribute is derived from attribute "webrtc-DataChannel", | ||||
which was defined in old version 03 of the | ||||
following draft, but which was removed along with any support for SDP | ||||
external negotiation in subsequent versions: | ||||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>."</t> | ||||
<t>Insertion of following new sen | ||||
tence to the beginning of | ||||
<xref target="dcmap-attr-definition"/>: | ||||
"dcmap is a media level attribute having following ABNF syntax:"</t> | ||||
<t>Insertion of new <xref target= | ||||
"dcmap-stream-id-param-definition"/> | ||||
containing the dcmap-stream-id specifying sentence, which previously | ||||
was placed right before the formal ABNF rules. | ||||
Removal of the sentence 'Stream is a mandatory | ||||
parameter and is noted directly after the "a=dcmap:" attribute's | ||||
colon' as this information is part of the ABNF specification.</t> | ||||
<t>In <xref target="dcmap-attr-de | ||||
finition"/> modification of the | ||||
'ordering-value' values from "0" or "1" to "true" or "false". | ||||
Corresponding text modifications in <xref target="ordered-param-description"/ | ||||
>.</t> | ||||
<t>In <xref target="dcmap-attr-de | ||||
finition"/> the ABNF definition of "quoted-string" | ||||
referred to rule name "escaped-char", which was not defined. | ||||
Instead a rule with name "escaped" was defined. Renamed that rule's name | ||||
to "escaped-char".</t> | ||||
<t>Insertion of a dedicated note | ||||
right after the "a=dcmap:4" attribute example | ||||
in <xref target="dcmap-attr-definition"/> regarding the non-printable | ||||
"escaped-char" character within the "label" value.</t> | ||||
<t>In <xref target="prot_att"/>'s | ||||
second paragraph replacement of | ||||
"sctp stream identifier" with "SCTP stream identifier".</t> | ||||
<t>In first paragraph of <xref ta | ||||
rget="id_mngt"/> replacement of first two sentences | ||||
'For the SDP-based external negotiation described in this document, | ||||
the initial offerer based "SCTP over DTLS" owns by convention the | ||||
even stream identifiers whereas the initial answerer owns the odd stream | ||||
identifiers. This ownership is invariant for the whole | ||||
lifetime of the signaling session, e.g. it does not change if the | ||||
initial answerer sends a new offer to the initial offerer.' | ||||
with | ||||
'If an SDP offer/answer exchange | ||||
(could be the initial or a subsequent one) | ||||
results in a UDP/DTLS/SCTP or TCP/DTLS/SCTP based media description being | ||||
accepted, and if this SDP offer/answer exchange results in the | ||||
establishment of a new SCTP association, then the SDP offerer owns the | ||||
even SCTP stream ids of this new SCTP association and the answerer owns | ||||
the odd SCTP stream identifiers. | ||||
If this "m" line is removed from the signaling session (its port number | ||||
set to zero), and if usage of this or of a new UDP/DTLS/SCTP or | ||||
TCP/DTLS/SCTP based "m" line is renegotiated later on, | ||||
then the even and odd SCTP stream identifier | ||||
ownership is redetermined as well as described above.'</t> | ||||
<t>In <xref target="opendc"/> the | ||||
first action of an SDP answerer, | ||||
when receiving an SDP offer, was described as | ||||
"Applies the SDP offer. Note that the browser ignores data channel | ||||
specific attributes in the SDP." | ||||
Replacement of these two sentences with | ||||
"Parses and applies the SDP offer. Note that the typical parser | ||||
normally ignores unknown SDP attributes, which includes data | ||||
channel related attributes."</t> | ||||
<t>In <xref target="opendc"/> the | ||||
second sentence of the third | ||||
SDP answerer action was | ||||
"Note that the browser is asked to create data | ||||
channels with stream identifiers not "owned" by the agent.". | ||||
Replacement of this sentence with | ||||
"Note that the agent is asked to | ||||
create data channels with SCTP stream identifiers | ||||
contained in the SDP offer if the SDP offer is accepted."</t> | ||||
<t>In <xref target="close-dc"/> t | ||||
he third paragraph began with | ||||
"A data channel can be closed by sending a new SDP offer which | ||||
excludes the dcmap and dcsa attribute lines for the data channel. | ||||
The port value for the m line SHOULD NOT be changed (e.g., to zero) | ||||
when closing a data channel (unless all data channels are being | ||||
closed and the SCTP association is no longer needed), since this | ||||
would close the SCTP association and impact all of the data channels. | ||||
If the answerer accepts the SDP offer then it MUST also exclude the | ||||
corresponding attribute lines in the answer. ..." | ||||
Replacement of this part with | ||||
"The intention to close a data channel can be signaled | ||||
by sending a new SDP offer which | ||||
excludes the "a=dcmap:" and "a=dcsa:" attribute lines for the data channel. | ||||
The port value for the "m" line SHOULD NOT be changed (e.g., to zero) | ||||
when closing a data channel (unless all data channels are being | ||||
closed and the SCTP association is no longer needed), since this | ||||
would close the SCTP association and impact all of the data channels. | ||||
If the answerer accepts the SDP offer then it MUST close those data channels | ||||
whose "a=dcmap:" and "a=dcsa:" attribute lines were excluded from the receive | ||||
d | ||||
SDP offer, unless those data channels were already closed, | ||||
and it MUST also exclude the | ||||
corresponding attribute lines in the answer."</t> | ||||
<t>In <xref target="close-dc"/> t | ||||
he hanging text after the third paragraph was | ||||
"This delayed close is to handle cases where a successful SDP | ||||
answer is not received, in which case the state of session should | ||||
be kept per the last successful SDP offer/answer." | ||||
Replacement of this sentence with | ||||
"This delayed closure is RECOMMENDED in order | ||||
to handle cases where a successful SDP answer is not received, in | ||||
which case the state of the session SHOULD be kept per the last | ||||
successful SDP offer/answer."</t> | ||||
<t>Although dedicated to "a=dcmap | ||||
" and "a=dcsa" SDP syntax aspects | ||||
<xref target="subsec-sdp-attr-for-dc-par-neg"/> contained already | ||||
procedural descriptions related to data channel reliability negotiation. | ||||
Creation of new <xref target="param_negotiation"/> and moval of | ||||
reliability negotiation related text to this new section.</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against 'draft-ejzak-mmusic-data- | ||||
channel-sdpneg-02'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Removal of note "ACTION ITEM" | ||||
from section "subprotocol parameter". | ||||
As <xref target="I-D.ietf-rtcweb-data-protocol"/> this document should refer | ||||
to IANA's | ||||
WebSocket Subprotocol Name Registry defined in <xref target="RFC6455"/> | ||||
</t> | ||||
<t>In whole document, replacement | ||||
of "unreliable" with "partially reliable", | ||||
which is used in <xref target="I-D.ietf-rtcweb-data-channel"/> and in | ||||
<xref target="I-D.ietf-rtcweb-data-protocol"/> in most places.</t> | ||||
<t>Clarification of the semantic | ||||
if the "max-retr" parameter is not present in | ||||
an "a=dcmap" attribute line. In section "max-retr parameter" the sentence | ||||
"The max-retr parameter is optional with default value unbounded" | ||||
was replaced with "The max-retr parameter is optional. If | ||||
the max-retr parameter is not present, then the maximal number of | ||||
retransmissions is determined as per the generic SCTP retransmission | ||||
rules as specified in <xref target="RFC4960"/>".</t> | ||||
<t>Clarification of the semantic | ||||
if the "max-time" parameter is not present in | ||||
an "a=dcmap" attribute line. In section "max-time parameter" the sentence | ||||
"The max-time parameter is optional with default value unbounded" | ||||
was replaced with "The max-time parameter is optional. If | ||||
the max-time parameter is not present, then the generic SCTP | ||||
retransmission timing rules apply as specified in <xref target="RFC4960"/>".< | ||||
/t> | ||||
<t>In section "label parameter" t | ||||
he sentence "Label is a mandatory parameter." | ||||
was removed and following new sentences (including the note) were added: | ||||
"The 'label' parameter is optional. If it is not | ||||
present, then its value defaults to the empty string. | ||||
Note: The empty string may also be explicitly used as 'label' value, | ||||
such that 'label=""' is equivalent to the 'label' parameter not being | ||||
present at all. | ||||
<xref target="I-D.ietf-rtcweb-data-protocol"/> allows the DATA_CHANNEL_OPEN | ||||
message's 'Label' value to be an empty string."</t> | ||||
<t>In section "subprotocol parame | ||||
ter" the sentence | ||||
"subprotocol is a mandatory parameter." was replaced with | ||||
"'subprotocol' is an optional | ||||
parameter. If the 'subprotocol' parameter is not present, then its | ||||
value defaults to the empty string."</t> | ||||
<t>In the "Examples" section, in | ||||
the first two SDP offer examples in | ||||
the "a=dcmap" attribute lines 'label="BGCP"' was replaced with 'label="bfcp"' | ||||
.</t> | ||||
<t>In all examples, the "m" line | ||||
proto value "DTLS/SCTP" was replaced with | ||||
"UDP/DTLS/SCTP" and the "a=fmtp" attribute lines were replaced with | ||||
"a=max-message-size" attribute lines, as per draft-ietf-mmusic-sctp-sdp-12.</ | ||||
t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against '-01'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Formal syntax for dcmap and dc | ||||
sa attribute lines. </t> | ||||
<t>Making subprotocol as an optio | ||||
nal parameter in dcmap. </t> | ||||
<t>Specifying disallowed paramete | ||||
r combinations for max-time and max-retr. </t> | ||||
<t>Clarifications on WebRTC data | ||||
channel close procedures. </t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
<section title="Changes against '-00'"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t> Revisions to identify differe | ||||
nce between internal and external | ||||
negotiation and their usage.</t> | ||||
<t>Introduction of more generic t | ||||
erminology, e.g. "application" instead of | ||||
"browser".</t> | ||||
<t>Clarification of how "max-retr | ||||
and max-time affect the usage of | ||||
unreliable and reliable WebRTC data channels.</t> | ||||
<t>Updates of examples to take in | ||||
to account the SDP syntax changes | ||||
introduced with draft-ietf-mmusic-sctp-sdp-07.</t> | ||||
<t>Removal of the SCTP port numbe | ||||
r from the "a=dcmap" and "a=dcsa" attributes | ||||
as this is now contained in the a=sctp-port attribute, | ||||
and as draft-ietf-mmusic-sctp-sdp-07 supports only one SCTP association | ||||
on top of the DTLS connection.</t> | ||||
</list> | ||||
</t> | ||||
</section> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<references title="Normative References"> | ||||
&RFC2119; | ||||
&RFC4960; | ||||
&RFC8174; | ||||
&RFC3264; | ||||
&RFC5234; | ||||
&RFC6525; | ||||
&RFC3629; | ||||
&DATAREQ; | ||||
&SDPBIS; | ||||
&SDPSCTP; | ||||
&SDPMUXATTR; | ||||
&DATAPROTO; | ||||
</references> | ||||
<references title="Informative References"> | ||||
&RFC4582; | <table anchor="dcsa-iana"> | |||
&RFC4975; | <name>New "a=dcsa:" Attribute</name> | |||
&RFC6455; | <thead> | |||
&CLUEDATA; | <tr> | |||
&MSRPDATA; | <th colspan="2" align="center">"a=dcsa:"</th> | |||
</tr> | ||||
</thead> | ||||
<tbody> | ||||
<tr> | ||||
<td align="left">Contact name</td> | ||||
<td align="left">IESG</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Contact email</td> | ||||
<td align="left">iesg@ietf.org</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Attribute name</td> | ||||
<td align="left">dcsa</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Attribute syntax</td> | ||||
<td align="left">As per <xref target="dcsa-attribute"/> | ||||
</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Attribute semantics</td> | ||||
<td align="left">As per <xref target="dcsa-attribute"/> | ||||
</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Usage level</td> | ||||
<td align="left">media</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Charset dependent</td> | ||||
<td align="left">No</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Purpose</td> | ||||
<td align="left">To define attributes that are specific to data | ||||
channel subprotocols</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Appropriate values</td> | ||||
<td align="left">As per <xref target="dcsa-attribute"/> | ||||
</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">O/A procedures</td> | ||||
<td align="left">SDP offer/answer procedures as per <xref target | ||||
="section_procedures"/> | ||||
</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Mux category</td> | ||||
<td align="left">SPECIAL. See <xref target="dcsa-mux-category"/> | ||||
</td> | ||||
</tr> | ||||
<tr> | ||||
<td align="left">Reference</td> | ||||
<td align="left">RFC 8864</td> | ||||
</tr> | ||||
</tbody> | ||||
</table> | ||||
</section> | ||||
</section> | ||||
<section anchor="IANA-reg-data-channel-attribs"> | ||||
<name>Registering Attributes for Use with Data Channels</name> | ||||
<t>When a subprotocol is defined for use over data channels with | ||||
the SDP offer/answer mechanism, any SDP attributes that may be | ||||
negotiated using the "a=dcsa:" attribute MUST be added to the IANA | ||||
"attribute-name" registry (formerly "att-field"), as specified in | ||||
<xref target="RFC8866" sectionFormat="comma" section="8.2.4"/>. This | ||||
document specifies that new Usage Levels of the form "dcsa (foo)" | ||||
(where "foo" is a placeholder for the subprotocol name) should be | ||||
registered by documents that specify negotiation of particular | ||||
subprotocols.</t> | ||||
</section> | ||||
</section> | ||||
</middle> | ||||
<back> | ||||
<reference anchor="WebRtcAPI" target="https://www.w3.org/ | <references> | |||
TR/2018/CR-webrtc-20180927/"> | <name>References</name> | |||
<front> | <references> | |||
<title> | <name>Normative References</name> | |||
WebRTC 1.0: Real-time Communication Between Browsers | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
</title> | xml"/> | |||
<author initials="A." surname="Bergkvist" | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4960. | |||
fullname="Adam Bergkvist"> | xml"/> | |||
<organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
</author> | xml"/> | |||
<author initials="D." surname="Burnett" f | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3264. | |||
ullname="Daniel Burnett"> | xml"/> | |||
<organization/> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5234. | |||
</author> | xml"/> | |||
<author initials="C." surname="Jennings" | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6525. | |||
fullname="Cullen Jennings"> | xml"/> | |||
<organization/> | <xi:include | |||
</author> | href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml"/> | |||
<author initials="A." surname="Narayanan" | ||||
fullname="Anant Narayanan"> | <!-- draft-ietf-rtcweb-data-channel (RFC 8831) --> | |||
<organization/> | <reference anchor="RFC8831" target="https://www.rfc-editor.org/info/rfc8831"> | |||
</author> | <front> | |||
<author initials="B." surname="Aboba" ful | <title>WebRTC Data Channels</title> | |||
lname="Bernard Aboba"> | <author initials="R" surname="Jesup" fullname="Randell Jesup"> | |||
<organization/> | <organization/> | |||
</author> | </author> | |||
<author initials="T." surname="Brandstett | <author initials="S" surname="Loreto" fullname="Salvatore Loreto"> | |||
er" fullname="Taylor Brandstetter"> | <organization/> | |||
<organization/> | </author> | |||
</author> | <author initials="M" surname="Tüxen" fullname="Michael Tüxen"> | |||
<author initials="J." surname="Bruaroey" | <organization/> | |||
fullname="Jan-Ivar Bruaroey"> | </author> | |||
<organization/> | <date month='September' year='2020'/> | |||
</author> | </front> | |||
<date month="September" day="27" year="20 | <seriesInfo name="RFC" value="8831"/> | |||
18"/> | <seriesInfo name="DOI" value="10.17487/RFC8831"/> | |||
</front> | </reference> | |||
<seriesInfo name="World Wide Web Consortium CR" v | ||||
alue="CR-webrtc-20180927"/> | <!-- draft-ietf-mmusic-rfc4566bis (RFC 8866) --> | |||
<format type="HTML" target="https://www.w3.org/TR | <reference anchor="RFC8866" target="https://www.rfc-editor.org/info/rfc8 | |||
/2018/CR-webrtc-20180927"/> | 866"> | |||
</reference> | <front> | |||
</references> | <title>SDP: Session Description Protocol</title> | |||
<section title="Generic Data Channel Negotiation Aspects When Not | <author initials="A" surname="Begen" fullname="Ali Begen"> | |||
Using DCEP" anchor="generic-out-of-band-aspects"> | <organization/> | |||
<t>This appendix summarizes how data channels work in gen | </author> | |||
eral and discusses | <author initials="P" surname="Kyzivat" fullname="Paul Kyzivat"> | |||
some key aspects, which should be considered for the out-of-band negotiation | <organization/> | |||
of data | </author> | |||
<author initials="C" surname="Perkins" fullname="Colin Perkins"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M" surname="Handley" fullname="Mark Handley"> | ||||
<organization/> | ||||
</author> | ||||
<date month="September" year="2020"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8866"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8866"/> | ||||
</reference> | ||||
<!-- draft-ietf-mmusic-sctp-sdp (RFC 8841) --> | ||||
<reference anchor="RFC8841" target="https://www.rfc-editor.org/info/rfc8841"> | ||||
<front> | ||||
<title>Session Description Protocol (SDP) Offer/Answer Procedures for | ||||
Stream Control Transmission Protocol (SCTP) over Datagram Transport Layer | ||||
Security (DTLS) Transport</title> | ||||
<author initials="C." surname="Holmberg" fullname="Christer Holmberg"> | ||||
<organization /> | ||||
</author> | ||||
<author initials="R." surname="Shpount" fullname="Roman Shpount"> | ||||
<organization /> | ||||
</author> | ||||
<author initials="S." surname="Loreto" fullname="Salvatore Loreto"> | ||||
<organization /> | ||||
</author> | ||||
<author initials="G." surname="Camarillo" fullname="Gonzalo Camarillo"> | ||||
<organization /> | ||||
</author> | ||||
<date month="September" year="2020" /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8841" /> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8841"/> | ||||
</reference> | ||||
<!-- draft-ietf-mmusic-sdp-mux-attributes (RFC 8859) --> | ||||
<reference anchor="RFC8859" target="https://www.rfc-editor.org/info/rfc8 | ||||
859"> | ||||
<front> | ||||
<title>A Framework for Session Description Protocol (SDP) | ||||
Attributes When Multiplexing</title> | ||||
<author initials="S" surname="Nandakumar" fullname="Suhas Nandakumar | ||||
"> | ||||
<organization/> | ||||
</author> | ||||
<date month="September" year="2020"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8859"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8859"/> | ||||
</reference> | ||||
<!--draft-ietf-rtcweb-data-protocol (RFC 8832) --> | ||||
<reference anchor="RFC8832" target="https://www.rfc-editor.org/info/rfc8832"> | ||||
<front> | ||||
<title>WebRTC Data Channel Establishment Protocol</title> | ||||
<author initials='R.' surname='Jesup' fullname='Randell Jesup'> | ||||
<organization/> | ||||
</author> | ||||
<author initials='S.' surname='Loreto' fullname='Salvatore Loreto'> | ||||
<organization/> | ||||
</author> | ||||
<author initials='M' surname='Tüxen' fullname='Michael Tüxen'> | ||||
<organization/> | ||||
</author> | ||||
<date month='September' year='2020'/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8832"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8832"/> | ||||
</reference> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<!-- Watch to see if 4582bis gets published before this doc. --> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4582. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4975. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6455. | ||||
xml"/> | ||||
<!--draft-ietf-clue-datachannel (RFC 8850) --> | ||||
<reference anchor='RFC8850' target='https://www.rfc-editor.org/info/rfc8850'> | ||||
<front> | ||||
<title>Controlling Multiple Streams for Telepresence (CLUE) Protocol Data Channe | ||||
l</title> | ||||
<author initials='C' surname='Holmberg' fullname='Christer Holmberg'> | ||||
<organization /> | ||||
</author> | ||||
<date month='September' year='2020' /> | ||||
</front> | ||||
<seriesInfo name='RFC' value='8850' /> | ||||
<seriesInfo name='DOI' value='10.17487/RFC8850' /> | ||||
</reference> | ||||
<!-- draft-ietf-mmusic-msrp-usage-data-channel (Submitted to IESG for Pub) | ||||
Needs "long way" because Jose Recio is an editor --> | ||||
<reference anchor='MSRP-over-Data-Channels'> | ||||
<front> | ||||
<title>MSRP over Data Channels</title> | ||||
<author initials='J' surname='Recio' fullname='Jose Recio' role='editor'> | ||||
<organization /> | ||||
</author> | ||||
<author initials='C' surname='Holmberg' fullname='Christer Holmberg'> | ||||
<organization /> | ||||
</author> | ||||
<date month='August' day='18' year='2020' /> | ||||
</front> | ||||
<seriesInfo name='Internet-Draft' | ||||
value='draft-ietf-mmusic-msrp-usage-data-channel-24' /> | ||||
</reference> | ||||
<reference anchor="WebRtcAPI" target="https://www.w3.org/TR/2019/CR-webr | ||||
tc-20191213/"> | ||||
<front> | ||||
<title>WebRTC 1.0: Real-time Communication Between Browsers</title> | ||||
<author initials="C." surname="Jennings" fullname="Cullen Jennings"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="H." surname="Boström" fullname="Henrik Boström"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J-I." surname="Bruaroey" fullname="Jan-Ivar Bruaro | ||||
ey"> | ||||
<organization/> | ||||
</author> | ||||
<date year="2019" month="December" day="13"/> | ||||
</front> | ||||
<refcontent>W3C Candidate Recommendation</refcontent> | ||||
</reference> | ||||
<reference anchor="T38" | ||||
target="https://www.itu.int/rec/T-REC-T.38-201511-I/en"> | ||||
<front> | ||||
<title>Procedures for real-time Group 3 facsimile communication over IP netwo | ||||
rks</title> | ||||
<author> | ||||
<organization>International Telecommunication Union</organization> | ||||
</author> | ||||
<date month="November" year="2015"/> | ||||
</front> | ||||
<seriesInfo name="ITU-T Recommendation" value="T.38"/> | ||||
</reference> | ||||
</references> | ||||
</references> | ||||
<section anchor="generic-out-of-band-aspects"> | ||||
<name>Generic Data Channel Negotiation Aspects when Not Using DCEP</name> | ||||
<t>This appendix summarizes how data channels work in general and discusse | ||||
s | ||||
some key aspects that should be considered for the out-of-band negotiation of | ||||
data | ||||
channels if DCEP is not used.</t> | channels if DCEP is not used.</t> | |||
<t>A WebRTC application creates a data channel | <t>A WebRTC application creates a data channel | |||
by providing a number of setup parameters (subprotocol, label, | by providing a number of setup parameters (subprotocol, label, | |||
maximal number of retransmissions, maximal retransmission time, order of deli very, | maximal number of retransmissions, maximal retransmission time, order of deli very, | |||
priority). The application also specifies | priority). The application also specifies whether | |||
if it wants to make use of the negotiation using the DCEP | it wants to make use of the negotiation using DCEP | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>, or if the application | <xref target="RFC8832"/> or | |||
intends to negotiate data channels using the SDP offer/answer protocol.</t> | intends to negotiate data channels using the SDP offer/answer protocol.</t> | |||
<t>In any case, the SDP offer generated by the applicatio | <t>In any case, the SDP offer generated by the application is per | |||
n is per | <xref target="RFC8841"/>. In brief, it contains one | |||
<xref target="I-D.ietf-mmusic-sctp-sdp"/>. In brief, it contains one | "m=" line for the SCTP association on top of which the data channels will run | |||
"m" line for the SCTP association on top of which data channels will run:</t> | : | |||
<figure align="left" title=""> | </t> | |||
<artwork align="left"><![CDATA[ | <sourcecode name="app-a-sdp-example" type="sdp"><![CDATA[ | |||
m=application 54111 UDP/DTLS/SCTP webrtc-datachannel | m=application 54111 UDP/DTLS/SCTP webrtc-datachannel | |||
c=IN IP4 192.0.2.1 | c=IN IP4 192.0.2.1 | |||
a=max-message-size:100000 | a=max-message-size:100000 | |||
a=sctp-port:5000 | a=sctp-port:5000 | |||
a=tls-id:abc3de65cddef001be82 | a=tls-id:abc3de65cddef001be82 | |||
a=setup:actpass | a=setup:actpass | |||
a=fingerprint:SHA-1 \ | a=fingerprint:SHA-1 \ | |||
4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB | 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB]]></sourcecode> | |||
]]></artwork> | ||||
</figure> | <aside><t>Note: A WebRTC application will only use the "m=" line format "w | |||
<t>Note: A WebRTC application will only use "m" line form | ebrtc-datachannel" | |||
at "webrtc-datachannel", | and will not use other formats in the "m=" line for other protocols | |||
and will not use other formats in the "m" line for other protocols | such as T.38 <xref target="T38"/>. | |||
such as t38. | <xref target="RFC8841"/> supports only one SCTP | |||
<xref target="I-D.ietf-mmusic-sctp-sdp"/> supports only one SCTP | ||||
association to be established on top of a DTLS association. | association to be established on top of a DTLS association. | |||
</t> | </t></aside> | |||
<t>Note: The above SDP media description does not contain | <aside><t>Note: The above SDP media description does not contain any chann | |||
any channel-specific | el-specific | |||
information.</t> | information.</t></aside> | |||
<section title="Stream Identifier Numbering" anchor="si_n | <section anchor="si_num"> | |||
um"> | <name>Stream Identifier Numbering</name> | |||
<t>Independently from the requested type of negot | <t>Independently from the requested type of negotiation, the application | |||
iation, the application | creating a data channel can either (1) pass the stream identifier to th | |||
creating a data channel can either pass the stream identifier to the data ch | e data channel stack to assign | |||
annel stack to assign | to the data channel or (2) let the data channel stack pick | |||
to the data channel or else let the data channel stack pick | ||||
one identifier from the unused ones.</t> | one identifier from the unused ones.</t> | |||
<t>To avoid glare situations <xref target="RFC326 4"/>, each endpoint can moreover own an | <t>Moreover, to avoid glare situations <xref target="RFC3264"/>, each en dpoint can own an | |||
exclusive set of stream identifiers, in which case an endpoint can | exclusive set of stream identifiers, in which case an endpoint can | |||
only create a data channel with a stream identifier it owns.</t> | only create a data channel with a stream identifier it owns.</t> | |||
<t>Which set of stream identifiers is owned by wh ich endpoint is | <t>Which set of stream identifiers is owned by which endpoint is | |||
determined by convention or other means. | determined by convention or other means. | |||
<list style="hanging"> | </t> | |||
<t>Note:For data channels negotia | <aside><t>Note: For data channels negotiated with DCEP, one endpoint o | |||
ted with the DCEP, one endpoint owns by | wns by | |||
convention the even stream identifiers, whereas the other owns the | convention the even stream identifiers, whereas the other owns the | |||
odd stream identifiers, as defined in | odd stream identifiers, as defined in | |||
<xref target="I-D.ietf-rtcweb-data-protocol"/>.</t> | <xref target="RFC8832"/>.</t></aside> | |||
<t>Note:For data channels negotia | ||||
ted via different protocol from DCEP, | <aside><t>Note: For data channels negotiated via a protocol other than D | |||
no convention is defined by default.</t> | CEP, | |||
</list> | no convention is defined by default.</t></aside> | |||
</t> | </section> | |||
</section> | <section anchor="sec-gen-ext-neg"> | |||
<section title="Generic Data Channel Negotiation Not Usin | <name>Generic Data Channel Negotiation Not Using DCEP</name> | |||
g DCEP" anchor="sec-gen-ext-neg"> | <section> | |||
<section title="Overview"> | <name>Overview</name> | |||
<t>DCEP negotiation only provides for neg | <t>DCEP negotiation only provides for negotiation of data channel | |||
otiation of data channel | transport parameters and does not provide for negotiation of | |||
transport parameters and does not provide for negotiation of subprotocol | subprotocol-specific parameters. Non-DCEP data channel negotiation can be d | |||
specific parameters. DCEP-less data channel negotiation can be defined to | efined to | |||
allow negotiation of parameters beyond those handled by DCEP, | allow negotiation of parameters beyond those handled by DCEP, | |||
e.g., parameters specific to the subprotocol instantiated on a | e.g., parameters specific to the subprotocol instantiated on a | |||
particular data channel.</t> | particular data channel.</t> | |||
<t>The following procedures are common to all methods of data channel | <t>The following procedures are common to all methods of data channel | |||
negotiation not using DCEP, whether in-band (communicated using proprietary means on | negotiation not using DCEP, whether in-band (communicated using proprietary means on | |||
an already established data channel) or out-of-band (using SDP offer/answer | an already-established data channel) or out-of-band (using the SDP | |||
or | offer/answer mechanism or | |||
some other protocol associated with the signaling channel).</t> | some other protocol associated with the signaling channel).</t> | |||
</section> | </section> | |||
<section title="Opening a Data Channel" anchor="e | <section anchor="ext_open"> | |||
xt_open"> | <name>Opening a Data Channel</name> | |||
<t>In the case of DCEP-less negotiation, | <t>In the case of non-DCEP negotiation, the endpoint application has t | |||
the endpoint application has the | he | |||
option to fully control the stream identifier assignments. However | option to fully control the stream identifier assignments. However, | |||
these assignments have to coexist with the assignments controlled by | these assignments have to coexist with the assignments controlled by | |||
the data channel stack for the DCEP negotiated data channels (if | the data channel stack for data channels negotiated using DCEP (if | |||
any). It is the responsibility of the application to ensure consistent | any). It is the responsibility of the application to ensure consistent | |||
assignment of stream identifiers.</t> | assignment of stream identifiers.</t> | |||
<t>When the application requests the crea | <t>When the application requests that the creation of a new data chann | |||
tion of a new data channel to | el | |||
be set up via DCEP-less negotiation, the data channel stack creates | be set up via non-DCEP negotiation, the data channel stack creates | |||
the data channel locally without sending any DATA_CHANNEL_OPEN message | the data channel locally without sending any DATA_CHANNEL_OPEN messages | |||
in-band. | in-band. | |||
However, even if the ICE (Interactive Connectivity Establishment), | However, even if the ICE (Interactive Connectivity Establishment), | |||
DTLS and SCTP procedures were already successfully | DTLS, and SCTP procedures were already successfully | |||
completed, the application can't send data on this data channel until the | completed, the application can't send data on this data channel until the | |||
negotiation is complete with the peer. This is because the peer needs | negotiation with the peer is complete. This is because the peer needs | |||
to be aware of and accept the usage of this data channel. The | to be aware of and accept the usage of this data channel. The | |||
peer, after accepting the data channel offer, can start sending data | peer, after accepting the data channel offer, can start sending data | |||
immediately. This implies that the offerer may receive data channel | immediately. This implies that the offerer may receive data channel | |||
subprotocol messages | subprotocol messages | |||
before the negotiation is complete and the application should be | before the negotiation is complete, and the application should be | |||
ready to handle it.</t> | ready to handle it.</t> | |||
<t>If the peer rejects the data channel p | <t>If the peer rejects the data channel part of the offer, then it | |||
art of the offer then it | doesn't have to do anything, as the data channel was not created using | |||
doesn't have to do anything as the data channel was not created using | the stack. The offerer, on the other hand, needs to close the data | |||
the stack. The offerer on the other hand needs to close the data | ||||
channel that was opened by invoking relevant data channel stack API | channel that was opened by invoking relevant data channel stack API | |||
procedures.</t> | procedures.</t> | |||
<t>It is also worth noting that a data ch | <t>It is also worth noting that a data channel stack implementation ma | |||
annel stack implementation may | y | |||
not provide any API to create and close data channels; instead the | not provide any APIs to create and close data channels; instead, the | |||
data channels may be used on the fly as needed just by communicating | data channels may be used on the fly as needed, just by communicating | |||
via non-DCEP means or by even having some local configuration/assumptions | via non-DCEP means or even by having some local configuration/assumptions | |||
on both the peers.</t> | on both of the peers.</t> | |||
<t>The application then negotiates the da | <t>The application then negotiates the data channel | |||
ta channel | ||||
properties and subprotocol properties with the peer's application | properties and subprotocol properties with the peer's application | |||
using a mechanism different from DCEP.</t> | using a mechanism different from DCEP.</t> | |||
<t>The peer then symmetrically creates a data channel | <t>The peer then symmetrically creates a data channel | |||
with these negotiated data channel properties. This is the only way | with these negotiated data channel properties. This is the only way | |||
for the peer's data channel stack to know which properties to apply | for the peer's data channel stack to know which properties to apply | |||
when transmitting data on this channel. | when transmitting data on this channel. | |||
The data channel stack must | The data channel stack must | |||
allow data channel creation with any non-conflicting stream identifier | allow data channel creation with any nonconflicting stream identifier | |||
so that both peers can create the data channel with the same | so that both peers can create the data channel with the same | |||
stream identifier. | stream identifier. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Closing a Data Channel"> | <section> | |||
<t>When the application requests the clos | <name>Closing a Data Channel</name> | |||
ing of a | <t>When the application requests the closing of a | |||
data channel negotiated without DCEP, | data channel negotiated without DCEP, | |||
the data channel stack always performs an SCTP SSN | the data channel stack always performs an SCTP SSN | |||
reset for this channel.</t> | Reset for this channel.</t> | |||
<t>Depending upon the method used for DCE | <t>Depending upon the method used for non-DCEP negotiation and the | |||
P-less negotiation and the | subprotocol associated with the data channel, the closing of the data chann | |||
subprotocol associated with the data channel, the closing might in | el might also be signaled to the peer via SDP offer/answer negotiation.</t> | |||
addition be signaled to the peer via SDP offer/answer negotiation.</t> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<!-- sec-gen-ext-neg --> | <section anchor="acknowledgements" numbered="false"> | |||
</section> | <name>Acknowledgements</name> | |||
<!-- generic-out-of-band-aspects --> | <t>The authors wish to acknowledge the borrowing of ideas from other | |||
</back> | draft documents by <contact fullname="Salvatore Loreto"/>, <contact | |||
fullname="Gonzalo Camarillo"/>, <contact fullname="Peter Dunkley"/>, and | ||||
<contact fullname="Gavin Llewellyn"/>. The authors also wish to thank <contac | ||||
t | ||||
fullname="Flemming Andreasen"/>, <contact fullname="Christian Groves"/>, | ||||
<contact fullname="Gunnar Hellström"/>, <contact fullname="Paul | ||||
Kyzivat"/>, <contact fullname="Jonathan Lennox"/>, | ||||
<contact fullname="Uwe Rauschenbach"/>, and <contact fullname="Roman Shpount" | ||||
/> for their invaluable comments.</t> | ||||
<t>Special thanks to <contact fullname="Christer Holmberg"/> for helping | ||||
finish the document and cleaning up <xref target="section_procedures"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="contributors" numbered="false"> | ||||
<name>Contributors</name> | ||||
<t><contact fullname="Juergen Stoetzer-Bradler"/> made significant | ||||
contributions to this document and should be considered a coauthor.</t> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 129 change blocks. | ||||
1902 lines changed or deleted | 1201 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |