summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8864.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc8864.txt')
-rw-r--r--doc/rfc/rfc8864.txt1209
1 files changed, 1209 insertions, 0 deletions
diff --git a/doc/rfc/rfc8864.txt b/doc/rfc/rfc8864.txt
new file mode 100644
index 0000000..9ad764c
--- /dev/null
+++ b/doc/rfc/rfc8864.txt
@@ -0,0 +1,1209 @@
+
+
+
+
+Internet Engineering Task Force (IETF) K. Drage
+Request for Comments: 8864 M. Makaraju
+Category: Standards Track R. Ejzak
+ISSN: 2070-1721 J. Marcon
+ Unaffiliated
+ R. Even, Ed.
+ January 2021
+
+
+ Negotiation Data Channels Using the Session Description Protocol (SDP)
+
+Abstract
+
+ Data channel setup can be done using either the in-band Data Channel
+ Establishment Protocol (DCEP) or some out-of-band non-DCEP protocol.
+ This document specifies how the SDP (Session Description Protocol)
+ offer/answer exchange can be used to achieve an out-of-band non-DCEP
+ negotiation for establishing a data channel.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc8864.
+
+Copyright Notice
+
+ Copyright (c) 2021 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Conventions
+ 3. Terminology
+ 4. Applicability Statement
+ 5. SDP Data Channel Attributes
+ 5.1. SDP DCMAP Attribute
+ 5.1.1. DCMAP Attribute Syntax
+ 5.1.2. 'dcmap-stream-id' Parameter
+ 5.1.3. 'label' Parameter
+ 5.1.4. 'subprotocol' Parameter
+ 5.1.5. 'max-retr' Parameter
+ 5.1.6. 'max-time' Parameter
+ 5.1.7. 'ordered' Parameter
+ 5.1.8. 'priority' Parameter
+ 5.1.9. DCMAP Multiplexing Category
+ 5.2. SDP DCSA Attribute
+ 5.2.1. DCSA Attribute Syntax
+ 5.2.2. DCSA Multiplexing Category
+ 6. SDP Offer/Answer Procedures
+ 6.1. Managing Stream Identifiers
+ 6.2. Negotiating Data Channel Parameters
+ 6.3. Generating the Initial Offer for a Data Channel
+ 6.4. Generating the SDP Answer
+ 6.5. Offerer Processing of the SDP Answer
+ 6.6. Modifying the Session
+ 6.6.1. Closing a Data Channel
+ 6.7. Various SDP Offer/Answer Considerations
+ 7. Examples
+ 8. Security Considerations
+ 9. IANA Considerations
+ 9.1. Subprotocol Identifiers
+ 9.2. New SDP Attributes
+ 9.2.1. dcmap
+ 9.2.2. dcsa
+ 9.3. Registering Attributes for Use with Data Channels
+ 10. References
+ 10.1. Normative References
+ 10.2. Informative References
+ Appendix A. Generic Data Channel Negotiation Aspects when Not
+ Using DCEP
+ A.1. Stream Identifier Numbering
+ A.2. Generic Data Channel Negotiation Not Using DCEP
+ A.2.1. Overview
+ A.2.2. Opening a Data Channel
+ A.2.3. Closing a Data Channel
+ Acknowledgements
+ Contributors
+ Authors' Addresses
+
+1. Introduction
+
+ The concept of establishing a bidirectional data channel running on
+ top of the Stream Control Transmission Protocol (SCTP) is discussed
+ in [RFC8831], allowing applications to use data channels. An in-band
+ Data Channel Establishment Protocol (DCEP) is described in [RFC8832];
+ however, other in-band or out-of-band protocols may be used for
+ establishing data channels. Each data channel consists of paired
+ SCTP streams sharing the same SCTP Stream Identifier. Data channels
+ are created by endpoint applications using (1) the WebRTC API
+ (Application Programming Interface) [WebRtcAPI] or (2) other
+ protocols (e.g., Controlling Multiple Streams for Telepresence (CLUE)
+ [RFC8850]). The protocols can be signaled by the data channel
+ 'subprotocol' parameter, conceptually similar to a WebSocket
+ subprotocol as described in [RFC6455]. However, apart from the
+ "subprotocol" value transmitted to the peer, an endpoint application
+ can agree on how to instantiate a given 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).
+
+ This document defines Session Description Protocol (SDP) offer/answer
+ procedures [RFC3264] that enable out-of-band negotiation for
+ establishing data channels for transport of well-defined
+ subprotocols. These procedures are based on generic SDP offer/answer
+ negotiation rules for SCTP-based media transport as specified in
+ [RFC8841] for the SDP "m=" line proto values UDP/DTLS/SCTP and
+ TCP/DTLS/SCTP.
+
+ This document uses MSRP (the Message Session Relay Protocol)
+ [RFC4975] and BFCP (the Binary Floor Control Protocol) [RFC8855] in
+ several examples. It does not provide a complete specification of
+ how to negotiate the use of a data channel to transport MSRP.
+ Procedures specific to each subprotocol would have to be documented
+ elsewhere. For MSRP, they are documented in [RFC8873]. The use of
+ MSRP in some examples is only to show how the generic procedures
+ described herein might apply to a specific subprotocol.
+
+2. Conventions
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+3. Terminology
+
+ This document uses the following terms:
+
+ Data channel: A WebRTC data channel as specified in [RFC8831].
+
+ Data channel stack: An entity that, upon application request, runs
+ the data channel protocol to keep track of states as well as the
+ sending and receiving of data. If the application is a browser-
+ based JavaScript application, then this stack resides in the
+ browser. If the application is a native application, then this
+ stack resides in the application and is accessible via some sort
+ of API or APIs.
+
+ Data channel properties: Fixed properties assigned to a data channel
+ at the time of its creation. Some of these properties determine
+ the way the data channel stack transmits data on this channel
+ (e.g., stream identifier, reliability, order of delivery).
+
+ Data channel subprotocol: The application protocol that is
+ transported over a single data channel. Data channel subprotocol
+ messages are sent as data channel payload over an established data
+ channel. An SDP offer/answer exchange can be used as specified in
+ this document to negotiate the establishment of data channels,
+ corresponding data channel properties, associated data channel
+ subprotocols, and data channel subprotocol properties. In this
+ case, the data channel subprotocols may be identified by the
+ values of the 'subprotocol' parameters of the SDP "a=dcmap:"
+ attribute as described in Section 5.1.4. Within this document,
+ the term "data channel subprotocol" is often abbreviated as just
+ "subprotocol".
+
+ DCEP: Data Channel Establishment Protocol, as defined in [RFC8832].
+
+ In-band: Transmission through the peer-to-peer SCTP association.
+
+ Out-of-band: Transmission through the application signaling path.
+
+ Peer: From the perspective of one of the agents in a session, its
+ peer is the other agent. Specifically, from the perspective of
+ the SDP offerer, the peer is the SDP answerer. From the
+ perspective of the SDP answerer, the peer is the SDP offerer.
+
+ SCTP Stream Sequence Number (SSN): The SCTP Stream Sequence Number,
+ as specified in [RFC4960].
+
+ Stream identifier: The identifier of the outbound and inbound SCTP
+ streams composing a data channel.
+
+4. Applicability Statement
+
+ The mechanism described in this document only applies to SDP
+ [RFC8866] when used together with the SDP offer/answer mechanism
+ [RFC3264]. Declarative usage of SDP is out of scope for this
+ document and is thus undefined.
+
+5. SDP Data Channel Attributes
+
+ This section defines two new SDP media-level attributes that can be
+ used together with the SDP Offer/Answer mechanism to negotiate data-
+ channel-specific and subprotocol-specific parameters without the
+ usage of DCEP [RFC8832]. The first attribute (Section 5.1) provides
+ for negotiation of channel-specific parameters. The second attribute
+ (Section 5.2) provides for negotiation of subprotocol-specific
+ parameters.
+
+ | Note: Appendix A provides information regarding how data
+ | channels work in general. In particular, it summarizes some
+ | key aspects that should be considered for the negotiation of
+ | data channels if DCEP is not used.
+
+5.1. SDP DCMAP Attribute
+
+ This section defines a new media-level attribute, "a=dcmap:", that
+ defines the data channel parameters for each data channel to be
+ negotiated.
+
+ This attribute is used to create bidirectional SCTP data channels
+ having the same set of attributes. The data channel properties
+ (reliable / partially reliable, ordered/unordered) need to be
+ suitable per the subprotocol transport requirements.
+
+5.1.1. DCMAP Attribute Syntax
+
+ "a=dcmap:" is a media-level attribute having the following definition
+ and ABNF (Augmented Backus-Naur Form) syntax [RFC5234].
+
+ +=================================+
+ | "a=dcmap:" Attribute |
+ +===================+=============+
+ | Name | dcmap |
+ +-------------------+-------------+
+ | Value | dcmap-value |
+ +-------------------+-------------+
+ | Usage Level | media |
+ +-------------------+-------------+
+ | Charset Dependent | No |
+ +-------------------+-------------+
+
+ Table 1: "a=dcmap:" Attribute
+ Definition
+
+ Formal syntax:
+
+ dcmap-value = dcmap-stream-id
+ [ SP dcmap-opt *(";" dcmap-opt) ]
+ dcmap-opt = ordering-opt / subprotocol-opt / label-opt
+ / maxretr-opt / maxtime-opt / priority-opt
+ ; maxretr-opt and maxtime-opt are
+ ; mutually exclusive
+
+ dcmap-stream-id = 1*5DIGIT
+ ordering-opt = "ordered=" ordering-value
+ ordering-value = "true" / "false"
+ subprotocol-opt = "subprotocol=" quoted-string
+ label-opt = "label=" quoted-string
+ maxretr-opt = "max-retr=" maxretr-value
+ maxretr-value = "0" / integer
+ ; number of retransmissions,
+ ; less than 2^32,
+ ; derived from 'Reliability Parameter' [RFC8832]
+ maxtime-opt = "max-time=" maxtime-value
+ maxtime-value = "0" / integer
+ ; milliseconds,
+ ; less than 2^32,
+ ; derived from 'Reliability Parameter' [RFC8832]
+ priority-opt = "priority=" priority-value
+ priority-value = "0" / integer
+ ; unsigned integer value indicating the priority of
+ ; the data channel,
+ ; less than 2^16,
+ ; derived from 'Priority' [RFC8832]
+
+ quoted-string = DQUOTE *(quoted-char / escaped-char) DQUOTE
+ quoted-char = SP / quoted-visible
+ quoted-visible = %x21 / %x23-24 / %x26-7E ; VCHAR without " or %
+ escaped-char = "%" HEXDIG HEXDIG
+ DQUOTE = <from RFC 5234>
+ integer = <from RFC 8866>
+
+ Examples:
+
+ a=dcmap:0
+ a=dcmap:1 subprotocol="bfcp";max-time=60000;priority=512
+ a=dcmap:2 subprotocol="msrp";ordered=true;label="msrp"
+ a=dcmap:3 label="Label 1";ordered=false;max-retr=5;priority=128
+ a=dcmap:4 label="foo%09bar";ordered=true;max-time=15000
+
+ | Note: The last example (a=dcmap:4) shows a 'label' parameter
+ | value that contains one nonprintable 'escaped-char' character
+ | (the tabulator character).
+
+ Within an "a=dcmap:" attribute line's 'dcmap-opt' value, only one
+ 'maxretr-opt' parameter or one 'maxtime-opt' parameter may be
+ present. Both parameters MUST NOT be present.
+
+5.1.2. 'dcmap-stream-id' Parameter
+
+ The 'dcmap-stream-id' parameter indicates the SCTP stream identifier
+ within the SCTP association used to form the data channel.
+
+5.1.3. 'label' Parameter
+
+ The 'label' parameter indicates the name of the channel. It
+ represents a label that can be used to distinguish, in the context of
+ the WebRTC API [WebRtcAPI], an RTCDataChannel object from other
+ RTCDataChannel objects. This parameter maps to the 'Label' parameter
+ defined in [RFC8832]. The 'label' parameter is optional. If it is
+ not present, then its value defaults to the empty string.
+
+ In order to communicate with the WebRTC API, the 'label' parameter
+ should
+
+ * Serialize the WebRTC label as a UTF-8 string [RFC3629].
+
+ * Treat the UTF-8 serialization as a series of bytes.
+
+ * For each byte in the serialization,
+
+ - If the byte can be expressed as a 'quoted-char', do so.
+
+ - Otherwise, express the byte as an 'escaped-char'.
+
+ | Note: The empty string can also be explicitly used as a 'label'
+ | value, such that 'label=""' is equivalent to the 'label'
+ | parameter not being present at all. [RFC8832] allows the
+ | DATA_CHANNEL_OPEN message's 'Label' value to be an empty
+ | string.
+
+5.1.4. 'subprotocol' Parameter
+
+ The 'subprotocol' parameter indicates which protocol the client
+ expects to exchange via the channel. This parameter maps to the
+ 'Protocol' parameter defined in [RFC8832]. Section 9.1 specifies how
+ values for new subprotocol parameters are registered. 'subprotocol'
+ is an optional parameter. If the 'subprotocol' parameter is not
+ present, then its value defaults to an empty string.
+
+ | Note: The empty string can also be explicitly used as a
+ | 'subprotocol' value, such that 'subprotocol=""' is equivalent
+ | to the 'subprotocol' parameter not being present at all.
+ | [RFC8832] allows the DATA_CHANNEL_OPEN message's 'Protocol'
+ | value to be an empty string.
+
+5.1.5. 'max-retr' Parameter
+
+ This parameter indicates that the data channel is partially reliable.
+ The 'max-retr' parameter indicates the maximal number of times a user
+ message will be retransmitted. The 'max-retr' parameter is optional.
+ If the 'max-retr' parameter and the 'max-time' parameter are not
+ present, then reliable transmission is performed as specified in
+ [RFC4960]. This parameter maps to the 'Number of RTX' parameter
+ defined in [RFC8832].
+
+5.1.6. 'max-time' Parameter
+
+ This parameter indicates that the data channel is partially reliable.
+ A user message will no longer be transmitted or retransmitted after a
+ specified lifetime, given in milliseconds, in the 'max-time'
+ parameter. The lifetime starts when providing the user message to
+ the protocol stack. The 'max-time' parameter is optional. If the
+ 'max-retr' parameter and the 'max-time' parameter are not present,
+ then reliable transmission is performed as specified in [RFC4960].
+ This parameter maps to the 'Lifetime in ms' parameter defined in
+ [RFC8832].
+
+5.1.7. 'ordered' Parameter
+
+ The 'ordered' parameter with value "true" indicates that the receiver
+ will dispatch DATA chunks in the data channel to the upper layer
+ while preserving the order. The 'ordered' parameter is optional and
+ takes two values -- "true" for ordered delivery and "false" for
+ unordered delivery -- with "true" as the default value. Any other
+ value is ignored, and the default "ordered=true" is assumed. In the
+ absence of this parameter, "ordered=true" is assumed. This parameter
+ maps to the ordered or unordered data channel types as defined in
+ [RFC8832].
+
+5.1.8. 'priority' Parameter
+
+ The 'priority' parameter indicates the data channel's priority
+ relative to the priorities of other data channels, which may
+ additionally exist over the same SCTP association. The 'priority'
+ parameter maps to the 'Priority' parameter defined in [RFC8832]. The
+ 'priority' parameter is optional. In the absence of this parameter,
+ "priority=256" is assumed.
+
+5.1.9. DCMAP Multiplexing Category
+
+ The multiplexing category [RFC8859] of the "a=dcmap:" attribute is
+ SPECIAL.
+
+ As the usage of multiple SCTP associations on top of a single DTLS
+ association is outside the scope of [RFC8841], no "a=dcmap:"
+ attribute multiplexing rules are specified for the UDP/DTLS/SCTP and
+ TCP/DTLS/SCTP proto values. If future extensions of [RFC8841] define
+ how to negotiate multiplexing of multiple SCTP associations on top of
+ a single DTLS association or how to add multiple SCTP associations to
+ one BUNDLE group, then multiplexing rules for the "a=dcmap:"
+ attribute need to be defined as well -- for instance, in an extension
+ of this specification.
+
+5.2. SDP DCSA Attribute
+
+ In the SDP media description, each data channel declaration MAY also
+ be followed by other SDP attributes, which apply to the corresponding
+ data channel and its subprotocol. Each of these attributes is
+ represented by one new "a=dcsa:" attribute line that references
+ another SDP attribute defined for use with this data channel's
+ subprotocol. Instructions for registering attributes for use with a
+ data channel are given in Section 9.3.
+
+ Each SDP attribute that is related to the subprotocol and that would
+ normally be used to negotiate the subprotocol using the SDP offer/
+ answer mechanism is replaced with an attribute of the form
+ "a=dcsa:stream-id original-attribute", 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.
+
+ The same syntax applies to any other SDP attribute required for
+ negotiation of this instance of the subprotocol.
+
+ The detailed offer/answer procedures for the dcsa attribute are
+ dependent on the associated subprotocol. If no offer/answer
+ procedures exist for the subprotocol when used outside of the dcsa
+ attribute, no specification is needed for use with dcsa. The IANA
+ (Internet Assigned Numbers Authority) registration procedures for the
+ "WebSocket Subprotocol Name Registry" (Section 9.1) do not strictly
+ require a specification of the offer/answer procedures for the
+ subprotocol when used with dcsa. If the subprotocol has defined
+ offer/answer procedures when used outside of dcsa, such a
+ specification is encouraged to ensure interoperability. If the
+ subprotocol has defined offer/answer procedures when used outside of
+ dcsa but no specification exists for the offer/answer procedures for
+ the subprotocol when used with dcsa, implementations SHOULD assume
+ the use of the default values for all otherwise-negotiable and
+ applicable subprotocol parameters.
+
+5.2.1. DCSA Attribute Syntax
+
+ "a=dcsa:" is a media-level attribute having the following definition
+ and ABNF (Augmented Backus-Naur Form) syntax [RFC5234].
+
+ +================================+
+ | "a=dcsa:" Attribute |
+ +===================+============+
+ | Name | dcsa |
+ +-------------------+------------+
+ | Value | dcsa-value |
+ +-------------------+------------+
+ | Usage Level | media |
+ +-------------------+------------+
+ | Charset Dependent | No |
+ +-------------------+------------+
+
+ Table 2: "a=dcsa:" Attribute
+ Definition
+
+ Formal syntax:
+
+ dcsa-value = stream-id SP attribute
+ stream-id = 1*5DIGIT
+ attribute = <from RFC 8866>
+
+ Example:
+
+ a=dcmap:2 subprotocol="msrp";ordered=true;label="msrp"
+
+ a=dcsa:2 accept-types:text/plain
+
+ The reference to [RFC8866] defines where the attribute definition can
+ be found; it does not provide any limitations on support of
+ attributes defined in other documents in accordance with this
+ attribute definition. However, not all SDP attributes are suitable
+ as an "a=dcsa:" parameter. The registry of IANA SDP parameters
+ contains the lists of IANA-registered session-level and media-level
+ or media-level-only SDP attributes.
+
+ 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 the MSRP subprotocol being transported on the SCTP
+ association using the data channel with stream id 2 accepts plaintext
+ files.
+
+ As opposed to the data channel "a=dcmap:" attribute parameters, these
+ parameters are subject to offer/answer negotiation, following the
+ procedures defined in the subprotocol-specific documents.
+
+ It is assumed that in general the usages of subprotocol-related
+ media-level attributes are independent from the subprotocol's
+ transport protocol. Such transport-protocol-independent subprotocol-
+ related attributes are 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 attribute is
+ correspondingly embedded in an "a=dcsa:" attribute.
+
+ There may be cases where the usage of a subprotocol-related media-
+ level attribute depends on the subprotocol's transport protocol. In
+ such cases, the subprotocol-related usage of the attribute is
+ expected to be described for the data channel transport. A data-
+ channel-specific usage of a subprotocol attribute is expected to be
+ specified in the same document that registers the subprotocol's
+ identifier for data channel usage as described in Section 9.1.
+
+5.2.2. DCSA Multiplexing Category
+
+ The multiplexing category of the "a=dcsa:" attribute is SPECIAL.
+
+ As the usage of multiple SCTP associations on top of a single DTLS
+ association is outside the scope of [RFC8841], no "a=dcsa:" attribute
+ multiplexing rules are specified for the UDP/DTLS/SCTP and
+ TCP/DTLS/SCTP proto values. If future extensions of [RFC8841] define
+ how to negotiate multiplexing of multiple SCTP associations on top of
+ a single DTLS association or how to add multiple SCTP associations to
+ one BUNDLE group, then multiplexing rules for the "a=dcsa:" attribute
+ need to be defined as well -- for instance, in an extension of this
+ specification.
+
+6. SDP Offer/Answer Procedures
+
+ This section defines how data channels can be negotiated using the
+ SDP offer/answer mechanism. A given media description can describe
+ multiple data channels (each represented by a separate SDP dcmap
+ attribute) that can be created, modified, and closed using different
+ offer/answer exchanges. The procedures in this section apply for a
+ given data channel.
+
+ The generic offer/answer procedures for negotiating the SCTP
+ association used to realize data channels are defined in [RFC8841].
+ This section only defines the data-channel-specific procedures.
+
+ "Initial offer" refers to the offer in which a data channel is
+ opened. It can be either the initial offer or a subsequent offer of
+ the associated SDP session.
+
+ The detailed offer/answer procedures for the dcsa attribute are
+ dependent on the associated subprotocol; see Section 5.2.
+
+6.1. Managing Stream Identifiers
+
+ In order to avoid SCTP Stream identifier collisions, in alignment
+ with [RFC8832], the endpoint acting as a DTLS client (for the SCTP
+ association used to realize data channels) MUST use even identifier
+ values, and the endpoint acting as a DTLS server MUST use odd
+ identifier values.
+
+ SCTP stream identifiers associated with data channels that have been
+ negotiated using DCEP MUST NOT be included in SDP offers and answers.
+
+6.2. Negotiating Data Channel Parameters
+
+ The data channel types defined in [RFC8832] are mapped to the dcmap
+ SDP attribute parameters in the following manner, where
+ "ordered=true" is the default and may be omitted:
+
+ DATA_CHANNEL_RELIABLE
+ ordered=true
+
+ DATA_CHANNEL_RELIABLE_UNORDERED
+ ordered=false
+
+ DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT
+ ordered=true;max-retr=<number of retransmissions>
+
+ DATA_CHANNEL_PARTIAL_RELIABLE_REXMIT_UNORDERED
+ ordered=false;max-retr=<number of retransmissions>
+
+ DATA_CHANNEL_PARTIAL_RELIABLE_TIMED
+ ordered=true;max-time=<lifetime in milliseconds>
+
+ DATA_CHANNEL_PARTIAL_RELIABLE_TIMED_UNORDERED
+ ordered=false;max-time=<lifetime in milliseconds>
+
+ 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.
+
+6.3. Generating the Initial Offer for a Data Channel
+
+ When an offerer sends an initial offer, in order to negotiate an SCTP
+ stream for a data channel, the offerer
+
+ * SHALL include an SDP dcmap attribute (Sections 5.1 and 6.2)
+ associated with the data channel in the "m=" section representing
+ the SCTP association used to realize the data channel, and
+
+ * MAY include one or more SDP dcsa attributes (Section 5.2)
+ associated with the data channel. The value of the 'stream-id'
+ part of each attribute SHALL match the 'dcmap-stream-id' value of
+ the dcmap attribute.
+
+6.4. Generating the SDP Answer
+
+ When an answerer receives an offer that includes an "m=" section for
+ an SCTP association, the offer describes an SCTP stream for a data
+ channel, if the answerer accepts the data channel, it
+
+ * SHALL include an SDP dcmap attribute (Sections 5.1 and 6.2)
+ associated 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-time' values of the
+ dcmap attribute SHALL be identical to the value used for the data
+ channel in the offer, and
+
+ * MAY include one or more SDP dcsa attributes (Section 5.2)
+ associated with the data channel.
+
+6.5. Offerer Processing of the SDP Answer
+
+ An offerer receiving an SDP answer performs the following:
+
+ * It SHALL close any created data channels as described in
+ Section 6.6.1 for which the expected "a=dcmap:" attributes are not
+ present in the SDP answer. If the SDP answer has no "a=dcmap:"
+ attributes, either the peer does not support "a=dcmap:" attributes
+ or it rejected all the data channels. In either case, the offerer
+ closes all the data channels offered by SDP that were open at the
+ time of the offer. The DTLS association and SCTP association will
+ still be set up. At this point, the offerer may use DCEP
+ negotiation [RFC8832] to open data channels.
+
+ Each agent application MUST wait to send data until it has
+ confirmation that the data channel at the peer is instantiated. For
+ WebRTC, this is when both data channel stacks have channel parameters
+ instantiated and occurs as follows:
+
+ * At both peers when a data channel is created without a previously
+ established SCTP association, as soon as the SCTP association is
+ successfully established.
+
+ * At the agent receiving an SDP offer for which there is an
+ established SCTP association, as soon as it creates the negotiated
+ data channel based on information signaled in the SDP offer.
+
+ * At the agent sending an SDP offer to create a new data channel for
+ which there is an established SCTP association, when it receives
+ the SDP answer confirming acceptance of the data channel or when
+ it begins to receive data on the data channel from the peer,
+ whichever occurs first.
+
+6.6. Modifying the Session
+
+ When an offerer sends a subsequent offer that includes information
+ for a previously negotiated data channel, unless the offerer intends
+ to close the data channel (Section 6.6.1), the offerer SHALL include
+ the previously negotiated SDP attributes and attribute values
+ associated with the data channel. The answerer may reject the offer.
+ The means for rejecting an offer are dependent on the higher-layer
+ protocol. The offer/answer exchange is atomic; if the answer is
+ rejected, the session reverts to the state prior to the offer
+ [RFC3264].
+
+6.6.1. Closing a Data Channel
+
+ In order to close a data channel, the endpoint that wants to close
+ the data channel SHALL send an SCTP SSN Reset message [RFC6525],
+ following the procedure in Section 6.7 of [RFC8831]. In addition, if
+ the closed data channel was negotiated using the offer/answer
+ mechanism (Section 6.3), the endpoint that closed the data channel
+ SHALL send a subsequent offer in which it does one of the following:
+
+ * Removes the SDP dcmap attribute and SDP dcsa attributes associated
+ with the closed data channel. Once the endpoint receives a
+ successful answer, the SCTP stream identifier value can later be
+ used for a new data channel (negotiated using either SCTP or the
+ offer/answer mechanism), or
+
+ * After a reset has been performed, reuses the SCTP stream used for
+ the closed data channel for a new data channel, following the
+ procedure in Section 6.3. The offerer SHALL use a different SDP
+ dcmap attribute value for the data channel using the same SCTP
+ stream.
+
+6.7. Various SDP Offer/Answer Considerations
+
+ An SDP offer or answer has no "a=dcmap:" attributes but has "a=dcsa:"
+ attributes:
+
+ * This is considered an error case. In this case, the receiver of
+ such an SDP offer or answer MUST discard the "a=dcsa:" attributes.
+
+ An SDP offer or answer has an "a=dcsa:" attribute whose subprotocol
+ attribute is unknown:
+
+ * The receiver of such an SDP offer or answer SHOULD ignore this
+ entire "a=dcsa:" attribute line.
+
+ An 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:
+
+ * The receiver of such an SDP offer or answer SHOULD ignore this
+ entire "a=dcsa:" attribute line.
+
+7. Examples
+
+ Figure 1 shows an example of an SDP offer and answer where the SDP
+ answerer rejects 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 set up over DTLS. At this point, the
+ offerer or the answerer may use DCEP negotiation to open data
+ channels.
+
+ m=application 10001 UDP/DTLS/SCTP webrtc-datachannel
+ c=IN IP6 2001:db8::3
+ a=max-message-size:100000
+ a=sctp-port:5000
+ a=setup:actpass
+ a=fingerprint:SHA-1 \
+ 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=dcmap:0 subprotocol="bfcp";label="bfcp"
+ m=application 10002 UDP/DTLS/SCTP webrtc-datachannel
+ c=IN IP6 2001:db8::1
+ a=max-message-size:100000
+ a=sctp-port:5002
+ a=setup:passive
+ a=fingerprint:SHA-1 \
+ 5B:AD:67:B1:3E:82:AC:3B:90:02:B1:DF:12:5D:CA:6B:3F:E5:54:FA
+ a=tls-id:dcb3ae65cddef0532d42
+
+ Figure 1: Example 1
+
+ Figure 2 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.
+
+ m=application 10001 UDP/DTLS/SCTP webrtc-datachannel
+ c=IN IP4 192.0.2.1
+ a=max-message-size:100000
+ a=sctp-port:5000
+ a=setup:actpass
+ a=fingerprint:SHA-1 \
+ 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=dcmap:0 subprotocol="bfcp";label="bfcp"
+ a=dcmap:2 subprotocol="msrp";label="msrp"
+ a=dcsa:2 accept-types:message/cpim text/plain
+ a=dcsa:2 path:msrp://alice.example.com:10001/2s93i93idj;dc
+ m=application 10002 UDP/DTLS/SCTP webrtc-datachannel
+ c=IN IP4 192.0.2.2
+ a=max-message-size:100000
+ a=sctp-port:5002
+ a=setup:passive
+ a=fingerprint:SHA-1 \
+ 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=dcmap:2 subprotocol="msrp";label="msrp"
+ a=dcsa:2 accept-types:message/cpim text/plain
+ a=dcsa:2 path:msrp://bob.example.com:10002/si438dsaodes;dc
+
+ Figure 2: Example 2
+
+ The example in Figure 3 is a continuation of the example in Figure 2.
+ The SDP offerer now removes the MSRP data channel with stream id 2
+ but opens a new MSRP data channel with stream id 4. The answerer
+ accepts the entire offer. As a result, the offerer closes the
+ previously negotiated MSRP-related data channel, and both the offerer
+ and the answerer may start using the new MSRP-related data channel.
+
+ m=application 10001 UDP/DTLS/SCTP webrtc-datachannel
+ c=IN IP4 192.0.2.1
+ a=max-message-size:100000
+ a=sctp-port:5000
+ a=setup:actpass
+ a=fingerprint:SHA-1 \
+ 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=dcmap:4 subprotocol="msrp";label="msrp"
+ a=dcsa:4 accept-types:message/cpim text/plain
+ a=dcsa:4 path:msrp://alice.example.com:10001/2s93i93idj;dc
+ m=application 10002 UDP/DTLS/SCTP webrtc-datachannel
+ c=IN IP4 192.0.2.2
+ a=max-message-size:100000
+ a=sctp-port:5002
+ a=setup:passive
+ a=fingerprint:SHA-1 \
+ 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=dcmap:4 subprotocol="msrp";label="msrp"
+ a=dcsa:4 accept-types:message/cpim text/plain
+ a=dcsa:4 path:msrp://bob.example.com:10002/si438dsaodes;dc
+
+ Figure 3: Example 3
+
+8. Security Considerations
+
+ This document specifies new SDP attributes used in the negotiation of
+ data channel parameters.
+
+ These parameters are negotiated as part of opening an SCTP channel
+ over DTLS as specified in [RFC8841]. Each subprotocol may come with
+ its own security considerations that need to be documented as part of
+ the subprotocol definition. Otherwise, this document does not add
+ any security considerations to those specified in [RFC8841].
+
+ Error cases such as the use of unknown parameter values or violations
+ of the odd/even rule (Section 6.1) MUST be handled by closing the
+ corresponding data channel.
+
+9. IANA Considerations
+
+9.1. Subprotocol Identifiers
+
+ Registration of new subprotocol identifiers is performed using the
+ existing IANA "WebSocket Subprotocol Name Registry" table.
+
+ The following text has been added below the title of the table.
+
+ "This table also includes subprotocol identifiers specified for usage
+ within a WebRTC data channel."
+
+ This document (RFC 8864) has been added to the "Reference" list for
+ the registry.
+
+ This document assigns no new values to this table.
+
+ A subprotocol may simultaneously be defined for data channel
+ transport 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 should
+ contain two entries. One entry in each of these cells should refer
+ to the WebSocket-related subprotocol specification, and the other
+ entry should refer to the data-channel-related subprotocol
+ specification.
+
+9.2. New SDP Attributes
+
+9.2.1. dcmap
+
+ This document defines a new SDP media-level attribute, "a=dcmap:", as
+ follows:
+
+ +==================================================================+
+ | "a=dcmap:" |
+ +=====================+============================================+
+ | Contact name | IESG |
+ +---------------------+--------------------------------------------+
+ | Contact email | iesg@ietf.org |
+ +---------------------+--------------------------------------------+
+ | Attribute name | dcmap |
+ +---------------------+--------------------------------------------+
+ | Attribute syntax | As per Section 5.1.1 |
+ +---------------------+--------------------------------------------+
+ | Attribute semantics | As per Section 5.1.1 |
+ +---------------------+--------------------------------------------+
+ | Usage level | media |
+ +---------------------+--------------------------------------------+
+ | Charset dependent | No |
+ +---------------------+--------------------------------------------+
+ | Purpose | To define data-channel-specific parameters |
+ +---------------------+--------------------------------------------+
+ | Appropriate values | As per Section 5.1.1 |
+ +---------------------+--------------------------------------------+
+ | O/A procedures | SDP offer/answer procedures as per |
+ | | Section 6 |
+ +---------------------+--------------------------------------------+
+ | Mux category | SPECIAL. See Section 5.1.9 |
+ +---------------------+--------------------------------------------+
+ | Reference | RFC 8864 |
+ +---------------------+--------------------------------------------+
+
+ Table 3: New "a=dcmap:" Attribute
+
+9.2.2. dcsa
+
+ This document defines a new SDP media-level attribute, "a=dcsa:", as
+ follows:
+
+ +=============================================================+
+ | "a=dcsa:" |
+ +=====================+=======================================+
+ | Contact name | IESG |
+ +---------------------+---------------------------------------+
+ | Contact email | iesg@ietf.org |
+ +---------------------+---------------------------------------+
+ | Attribute name | dcsa |
+ +---------------------+---------------------------------------+
+ | Attribute syntax | As per Section 5.2.1 |
+ +---------------------+---------------------------------------+
+ | Attribute semantics | As per Section 5.2.1 |
+ +---------------------+---------------------------------------+
+ | Usage level | media |
+ +---------------------+---------------------------------------+
+ | Charset dependent | No |
+ +---------------------+---------------------------------------+
+ | Purpose | To define attributes that are |
+ | | specific to data channel subprotocols |
+ +---------------------+---------------------------------------+
+ | Appropriate values | As per Section 5.2.1 |
+ +---------------------+---------------------------------------+
+ | O/A procedures | SDP offer/answer procedures as per |
+ | | Section 6 |
+ +---------------------+---------------------------------------+
+ | Mux category | SPECIAL. See Section 5.2.2 |
+ +---------------------+---------------------------------------+
+ | Reference | RFC 8864 |
+ +---------------------+---------------------------------------+
+
+ Table 4: New "a=dcsa:" Attribute
+
+9.3. Registering Attributes for Use with Data Channels
+
+ 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 [RFC8866],
+ 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.
+
+ IANA has updated the "attribute-name (formerly "att-field")" registry
+ to point to this document.
+
+10. References
+
+10.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model
+ with Session Description Protocol (SDP)", RFC 3264,
+ DOI 10.17487/RFC3264, June 2002,
+ <https://www.rfc-editor.org/info/rfc3264>.
+
+ [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
+ 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
+ 2003, <https://www.rfc-editor.org/info/rfc3629>.
+
+ [RFC4960] Stewart, R., Ed., "Stream Control Transmission Protocol",
+ RFC 4960, DOI 10.17487/RFC4960, September 2007,
+ <https://www.rfc-editor.org/info/rfc4960>.
+
+ [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+ Specifications: ABNF", STD 68, RFC 5234,
+ DOI 10.17487/RFC5234, January 2008,
+ <https://www.rfc-editor.org/info/rfc5234>.
+
+ [RFC6525] Stewart, R., Tuexen, M., and P. Lei, "Stream Control
+ Transmission Protocol (SCTP) Stream Reconfiguration",
+ RFC 6525, DOI 10.17487/RFC6525, February 2012,
+ <https://www.rfc-editor.org/info/rfc6525>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8831] Jesup, R., Loreto, S., and M. Tüxen, "WebRTC Data
+ Channels", RFC 8831, DOI 10.17487/RFC8831, January 2021,
+ <https://www.rfc-editor.org/info/rfc8831>.
+
+ [RFC8832] Jesup, R., Loreto, S., and M. Tüxen, "WebRTC Data Channel
+ Establishment Protocol", RFC 8832, DOI 10.17487/RFC8832,
+ January 2021, <https://www.rfc-editor.org/info/rfc8832>.
+
+ [RFC8841] Holmberg, C., Shpount, R., Loreto, S., and G. Camarillo,
+ "Session Description Protocol (SDP) Offer/Answer
+ Procedures for Stream Control Transmission Protocol (SCTP)
+ over Datagram Transport Layer Security (DTLS) Transport",
+ RFC 8841, DOI 10.17487/RFC8841, January 2021,
+ <https://www.rfc-editor.org/info/rfc8841>.
+
+ [RFC8859] Nandakumar, S., "A Framework for Session Description
+ Protocol (SDP) Attributes When Multiplexing", RFC 8859,
+ DOI 10.17487/RFC8859, January 2021,
+ <https://www.rfc-editor.org/info/rfc8859>.
+
+ [RFC8866] Begen, A., Kyzivat, P., Perkins, C., and M. Handley, "SDP:
+ Session Description Protocol", RFC 8866,
+ DOI 10.17487/RFC8866, January 2021,
+ <https://www.rfc-editor.org/info/rfc8866>.
+
+10.2. Informative References
+
+ [RFC4975] Campbell, B., Ed., Mahy, R., Ed., and C. Jennings, Ed.,
+ "The Message Session Relay Protocol (MSRP)", RFC 4975,
+ DOI 10.17487/RFC4975, September 2007,
+ <https://www.rfc-editor.org/info/rfc4975>.
+
+ [RFC6455] Fette, I. and A. Melnikov, "The WebSocket Protocol",
+ RFC 6455, DOI 10.17487/RFC6455, December 2011,
+ <https://www.rfc-editor.org/info/rfc6455>.
+
+ [RFC8850] Holmberg, C., "Controlling Multiple Streams for
+ Telepresence (CLUE) Protocol Data Channel", RFC 8850,
+ DOI 10.17487/RFC8850, January 2021,
+ <https://www.rfc-editor.org/info/rfc8850>.
+
+ [RFC8855] Camarillo, G., Drage, K., Kristensen, T., Ott, J., and C.
+ Eckel, "The Binary Floor Control Protocol (BFCP)",
+ RFC 8855, DOI 10.17487/RFC8855, January 2021,
+ <https://www.rfc-editor.org/info/rfc8855>.
+
+ [RFC8873] Recio, JM., Ed. and C. Holmberg, "Message Session Relay
+ Protocol (MSRP) over Data Channels", RFC 8873,
+ DOI 10.17487/RFC8873, January 2021,
+ <https://www.rfc-editor.org/info/rfc8873>.
+
+ [T38] International Telecommunication Union, "Procedures for
+ real-time Group 3 facsimile communication over IP
+ networks", ITU-T Recommendation T.38, November 2015,
+ <https://www.itu.int/rec/T-REC-T.38-201511-I/en>.
+
+ [WebRtcAPI]
+ Jennings, C., Boström, H., and J-I. Bruaroey, "WebRTC 1.0:
+ Real-time Communication Between Browsers", W3C Proposed
+ Recommendation, <https://www.w3.org/TR/webrtc/>.
+
+Appendix A. Generic Data Channel Negotiation Aspects when Not Using
+ DCEP
+
+ This appendix summarizes how data channels work in general and
+ discusses some key aspects that should be considered for the out-of-
+ band negotiation of data channels if DCEP is not used.
+
+ A WebRTC application creates a data channel by providing a number of
+ setup parameters (subprotocol, label, maximal number of
+ retransmissions, maximal retransmission time, order of delivery,
+ priority). The application also specifies whether it wants to make
+ use of the negotiation using DCEP [RFC8832] or intends to negotiate
+ data channels using the SDP offer/answer protocol.
+
+ In any case, the SDP offer generated by the application is per
+ [RFC8841]. In brief, it contains one "m=" line for the SCTP
+ association on top of which the data channels will run:
+
+ m=application 54111 UDP/DTLS/SCTP webrtc-datachannel
+ c=IN IP4 192.0.2.1
+ a=max-message-size:100000
+ a=sctp-port:5000
+ a=tls-id:abc3de65cddef001be82
+ a=setup:actpass
+ a=fingerprint:SHA-1 \
+ 4A:AD:B9:B1:3F:82:18:3B:54:02:12:DF:3E:5D:49:6B:19:E5:7C:AB
+
+ | Note: A WebRTC application will only use the "m=" line format
+ | "webrtc-datachannel" and will not use other formats in the "m="
+ | line for other protocols such as T.38 [T38]. [RFC8841]
+ | supports only one SCTP association to be established on top of
+ | a DTLS association.
+
+ | Note: The above SDP media description does not contain any
+ | channel-specific information.
+
+A.1. Stream Identifier Numbering
+
+ Independently from the requested type of negotiation, the application
+ creating a data channel can either (1) pass the stream identifier to
+ the data channel stack to assign to the data channel or (2) let the
+ data channel stack pick one identifier from the unused ones.
+
+ Moreover, to avoid glare situations [RFC3264], each endpoint can own
+ an exclusive set of stream identifiers, in which case an endpoint can
+ only create a data channel with a stream identifier it owns.
+
+ Which set of stream identifiers is owned by which endpoint is
+ determined by convention or other means.
+
+ | Note: For data channels negotiated with DCEP, one endpoint owns
+ | by convention the even stream identifiers, whereas the other
+ | owns the odd stream identifiers, as defined in [RFC8832].
+
+ | Note: For data channels negotiated via a protocol other than
+ | DCEP, no convention is defined by default.
+
+A.2. Generic Data Channel Negotiation Not Using DCEP
+
+A.2.1. Overview
+
+ DCEP negotiation only provides for negotiation of data channel
+ transport parameters and does not provide for negotiation of
+ subprotocol-specific parameters. Non-DCEP data channel negotiation
+ can be defined to allow negotiation of parameters beyond those
+ handled by DCEP, e.g., parameters specific to the subprotocol
+ instantiated on a particular data channel.
+
+ The following procedures are common to all methods of data channel
+ negotiation not using DCEP, whether in-band (communicated using
+ proprietary means on an already-established data channel) or out-of-
+ band (using the SDP offer/answer mechanism or some other protocol
+ associated with the signaling channel).
+
+A.2.2. Opening a Data Channel
+
+ In the case of non-DCEP negotiation, the endpoint application has the
+ option to fully control the stream identifier assignments. However,
+ these assignments have to coexist with the assignments controlled by
+ the data channel stack for data channels negotiated using DCEP (if
+ any). It is the responsibility of the application to ensure
+ consistent assignment of stream identifiers.
+
+ When the application requests that the creation of a new data channel
+ be set up via non-DCEP negotiation, the data channel stack creates
+ the data channel locally without sending any DATA_CHANNEL_OPEN
+ messages in-band. However, even if the ICE (Interactive Connectivity
+ Establishment), DTLS, and SCTP procedures were already successfully
+ completed, the application can't send data on this data channel until
+ the 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
+ peer, after accepting the data channel offer, can start sending data
+ immediately. This implies that the offerer may receive data channel
+ subprotocol messages before the negotiation is complete, and the
+ application should be ready to handle it.
+
+ If the peer rejects the data channel part of the offer, then it
+ 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 channel that was opened by invoking relevant data channel stack
+ API procedures.
+
+ It is also worth noting that a data channel stack implementation may
+ 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
+ via non-DCEP means or even by having some local configuration/
+ assumptions on both of the peers.
+
+ The application then negotiates the data channel properties and
+ subprotocol properties with the peer's application using a mechanism
+ different from DCEP.
+
+ The peer then symmetrically creates a data channel with these
+ negotiated data channel properties. This is the only way for the
+ peer's data channel stack to know which properties to apply when
+ transmitting data on this channel. The data channel stack must allow
+ data channel creation with any nonconflicting stream identifier so
+ that both peers can create the data channel with the same stream
+ identifier.
+
+A.2.3. Closing a Data Channel
+
+ When the application requests the closing of a data channel
+ negotiated without DCEP, the data channel stack always performs an
+ SCTP SSN Reset for this channel.
+
+ Depending upon the method used for non-DCEP negotiation and the
+ subprotocol associated with the data channel, the closing of the data
+ channel might also be signaled to the peer via SDP offer/answer
+ negotiation.
+
+Acknowledgements
+
+ The authors wish to acknowledge the borrowing of ideas from other
+ draft documents by Salvatore Loreto, Gonzalo Camarillo, Peter
+ Dunkley, and Gavin Llewellyn. The authors also wish to thank
+ Flemming Andreasen, Christian Groves, Gunnar Hellström, Paul Kyzivat,
+ Jonathan Lennox, Uwe Rauschenbach, and Roman Shpount for their
+ invaluable comments.
+
+ Special thanks to Christer Holmberg for helping finish the document
+ and cleaning up Section 6.
+
+Contributors
+
+ Juergen Stoetzer-Bradler made significant contributions to this
+ document and should be considered a coauthor.
+
+Authors' Addresses
+
+ Keith Drage
+ Unaffiliated
+
+ Email: drageke@ntlworld.com
+
+
+ Maridi R. Makaraju (Raju)
+ Unaffiliated
+
+ Email: mmraju@gmail.com
+
+
+ Richard Ejzak
+ Unaffiliated
+
+ Email: richard.ejzak@gmail.com
+
+
+ Jerome Marcon
+ Unaffiliated
+
+ Email: jeromee.marcon@free.fr
+
+
+ Roni Even (editor)
+
+ Email: ron.even.tlv@gmail.com