draft-ietf-taps-interface-15.txt | draft-ietf-taps-interface-16.txt | |||
---|---|---|---|---|
TAPS Working Group B. Trammell, Ed. | TAPS Working Group B. Trammell, Ed. | |||
Internet-Draft Google Switzerland GmbH | Internet-Draft Google Switzerland GmbH | |||
Intended status: Standards Track M. Welzl, Ed. | Intended status: Standards Track M. Welzl, Ed. | |||
Expires: 8 September 2022 University of Oslo | Expires: 5 March 2023 University of Oslo | |||
T. Enghardt | T. Enghardt | |||
Netflix | Netflix | |||
G. Fairhurst | G. Fairhurst | |||
University of Aberdeen | University of Aberdeen | |||
M. Kuehlewind | M. Kuehlewind | |||
Ericsson | Ericsson | |||
C. Perkins | C. Perkins | |||
University of Glasgow | University of Glasgow | |||
P. Tiesel | P. Tiesel | |||
SAP SE | SAP SE | |||
T. Pauly | T. Pauly | |||
Apple Inc. | Apple Inc. | |||
7 March 2022 | 1 September 2022 | |||
An Abstract Application Layer Interface to Transport Services | An Abstract Application Layer Interface to Transport Services | |||
draft-ietf-taps-interface-15 | draft-ietf-taps-interface-16 | |||
Abstract | Abstract | |||
This document describes an abstract application programming | This document describes an abstract application programming | |||
interface, API, to the transport layer that enables the selection of | interface, API, to the transport layer that enables the selection of | |||
transport protocols and network paths dynamically at runtime. This | transport protocols and network paths dynamically at runtime. This | |||
API enables faster deployment of new protocols and protocol features | API enables faster deployment of new protocols and protocol features | |||
without requiring changes to the applications. The specified API | without requiring changes to the applications. The specified API | |||
follows the Transport Services architecture by providing | follows the Transport Services architecture by providing | |||
asynchronous, atomic transmission of messages. It is intended to | asynchronous, atomic transmission of messages. It is intended to | |||
skipping to change at page 2, line 10 ¶ | skipping to change at page 2, line 10 ¶ | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on 8 September 2022. | This Internet-Draft will expire on 5 March 2023. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents (https://trustee.ietf.org/ | |||
license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 38 ¶ | |||
8. Managing Connections . . . . . . . . . . . . . . . . . . . . 44 | 8. Managing Connections . . . . . . . . . . . . . . . . . . . . 44 | |||
8.1. Generic Connection Properties . . . . . . . . . . . . . . 46 | 8.1. Generic Connection Properties . . . . . . . . . . . . . . 46 | |||
8.1.1. Required Minimum Corruption Protection Coverage for | 8.1.1. Required Minimum Corruption Protection Coverage for | |||
Receiving . . . . . . . . . . . . . . . . . . . . . . 46 | Receiving . . . . . . . . . . . . . . . . . . . . . . 46 | |||
8.1.2. Connection Priority . . . . . . . . . . . . . . . . . 47 | 8.1.2. Connection Priority . . . . . . . . . . . . . . . . . 47 | |||
8.1.3. Timeout for Aborting Connection . . . . . . . . . . . 47 | 8.1.3. Timeout for Aborting Connection . . . . . . . . . . . 47 | |||
8.1.4. Timeout for keep alive packets . . . . . . . . . . . 47 | 8.1.4. Timeout for keep alive packets . . . . . . . . . . . 47 | |||
8.1.5. Connection Group Transmission Scheduler . . . . . . . 48 | 8.1.5. Connection Group Transmission Scheduler . . . . . . . 48 | |||
8.1.6. Capacity Profile . . . . . . . . . . . . . . . . . . 48 | 8.1.6. Capacity Profile . . . . . . . . . . . . . . . . . . 48 | |||
8.1.7. Policy for using Multipath Transports . . . . . . . . 50 | 8.1.7. Policy for using Multipath Transports . . . . . . . . 50 | |||
8.1.8. Bounds on Send or Receive Rate . . . . . . . . . . . 51 | 8.1.8. Bounds on Send or Receive Rate . . . . . . . . . . . 50 | |||
8.1.9. Group Connection Limit . . . . . . . . . . . . . . . 51 | 8.1.9. Group Connection Limit . . . . . . . . . . . . . . . 51 | |||
8.1.10. Isolate Session . . . . . . . . . . . . . . . . . . . 51 | 8.1.10. Isolate Session . . . . . . . . . . . . . . . . . . . 51 | |||
8.1.11. Read-only Connection Properties . . . . . . . . . . . 52 | 8.1.11. Read-only Connection Properties . . . . . . . . . . . 52 | |||
8.2. TCP-specific Properties: User Timeout Option (UTO) . . . 53 | 8.2. TCP-specific Properties: User Timeout Option (UTO) . . . 53 | |||
8.2.1. Advertised User Timeout . . . . . . . . . . . . . . . 53 | 8.2.1. Advertised User Timeout . . . . . . . . . . . . . . . 53 | |||
8.2.2. User Timeout Enabled . . . . . . . . . . . . . . . . 53 | 8.2.2. User Timeout Enabled . . . . . . . . . . . . . . . . 53 | |||
8.2.3. Timeout Changeable . . . . . . . . . . . . . . . . . 54 | 8.2.3. Timeout Changeable . . . . . . . . . . . . . . . . . 54 | |||
8.3. Connection Lifecycle Events . . . . . . . . . . . . . . . 54 | 8.3. Connection Lifecycle Events . . . . . . . . . . . . . . . 54 | |||
8.3.1. Soft Errors . . . . . . . . . . . . . . . . . . . . . 54 | 8.3.1. Soft Errors . . . . . . . . . . . . . . . . . . . . . 54 | |||
8.3.2. Path change . . . . . . . . . . . . . . . . . . . . . 54 | 8.3.2. Path change . . . . . . . . . . . . . . . . . . . . . 54 | |||
9. Data Transfer . . . . . . . . . . . . . . . . . . . . . . . . 54 | 9. Data Transfer . . . . . . . . . . . . . . . . . . . . . . . . 54 | |||
9.1. Messages and Framers . . . . . . . . . . . . . . . . . . 55 | 9.1. Messages and Framers . . . . . . . . . . . . . . . . . . 55 | |||
9.1.1. Message Contexts . . . . . . . . . . . . . . . . . . 55 | 9.1.1. Message Contexts . . . . . . . . . . . . . . . . . . 55 | |||
9.1.2. Message Framers . . . . . . . . . . . . . . . . . . . 55 | 9.1.2. Message Framers . . . . . . . . . . . . . . . . . . . 55 | |||
9.1.3. Message Properties . . . . . . . . . . . . . . . . . 58 | 9.1.3. Message Properties . . . . . . . . . . . . . . . . . 58 | |||
9.2. Sending Data . . . . . . . . . . . . . . . . . . . . . . 64 | 9.2. Sending Data . . . . . . . . . . . . . . . . . . . . . . 64 | |||
9.2.1. Basic Sending . . . . . . . . . . . . . . . . . . . . 64 | 9.2.1. Basic Sending . . . . . . . . . . . . . . . . . . . . 64 | |||
9.2.2. Send Events . . . . . . . . . . . . . . . . . . . . . 65 | 9.2.2. Send Events . . . . . . . . . . . . . . . . . . . . . 65 | |||
9.2.3. Partial Sends . . . . . . . . . . . . . . . . . . . . 66 | 9.2.3. Partial Sends . . . . . . . . . . . . . . . . . . . . 66 | |||
9.2.4. Batching Sends . . . . . . . . . . . . . . . . . . . 66 | 9.2.4. Batching Sends . . . . . . . . . . . . . . . . . . . 67 | |||
9.2.5. Send on Active Open: InitiateWithSend . . . . . . . . 67 | 9.2.5. Send on Active Open: InitiateWithSend . . . . . . . . 67 | |||
9.2.6. Priority and the Transport Services API . . . . . . . 67 | 9.2.6. Priority and the Transport Services API . . . . . . . 68 | |||
9.3. Receiving Data . . . . . . . . . . . . . . . . . . . . . 68 | 9.3. Receiving Data . . . . . . . . . . . . . . . . . . . . . 68 | |||
9.3.1. Enqueuing Receives . . . . . . . . . . . . . . . . . 68 | 9.3.1. Enqueuing Receives . . . . . . . . . . . . . . . . . 69 | |||
9.3.2. Receive Events . . . . . . . . . . . . . . . . . . . 69 | 9.3.2. Receive Events . . . . . . . . . . . . . . . . . . . 69 | |||
9.3.3. Receive Message Properties . . . . . . . . . . . . . 71 | 9.3.3. Receive Message Properties . . . . . . . . . . . . . 72 | |||
10. Connection Termination . . . . . . . . . . . . . . . . . . . 73 | 10. Connection Termination . . . . . . . . . . . . . . . . . . . 73 | |||
11. Connection State and Ordering of Operations and Events . . . 74 | 11. Connection State and Ordering of Operations and Events . . . 75 | |||
12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 76 | 12. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 76 | |||
13. Privacy and Security Considerations . . . . . . . . . . . . . 76 | 13. Privacy and Security Considerations . . . . . . . . . . . . . 76 | |||
14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 78 | 14. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 78 | |||
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 78 | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 78 | |||
15.1. Normative References . . . . . . . . . . . . . . . . . . 78 | 15.1. Normative References . . . . . . . . . . . . . . . . . . 78 | |||
15.2. Informative References . . . . . . . . . . . . . . . . . 79 | 15.2. Informative References . . . . . . . . . . . . . . . . . 79 | |||
Appendix A. Implementation Mapping . . . . . . . . . . . . . . . 83 | Appendix A. Implementation Mapping . . . . . . . . . . . . . . . 83 | |||
A.1. Types . . . . . . . . . . . . . . . . . . . . . . . . . . 83 | A.1. Types . . . . . . . . . . . . . . . . . . . . . . . . . . 83 | |||
A.2. Events and Errors . . . . . . . . . . . . . . . . . . . . 84 | A.2. Events and Errors . . . . . . . . . . . . . . . . . . . . 84 | |||
A.3. Time Duration . . . . . . . . . . . . . . . . . . . . . . 84 | A.3. Time Duration . . . . . . . . . . . . . . . . . . . . . . 84 | |||
Appendix B. Convenience Functions . . . . . . . . . . . . . . . 84 | Appendix B. Convenience Functions . . . . . . . . . . . . . . . 84 | |||
B.1. Adding Preference Properties . . . . . . . . . . . . . . 84 | B.1. Adding Preference Properties . . . . . . . . . . . . . . 84 | |||
B.2. Transport Property Profiles . . . . . . . . . . . . . . . 84 | B.2. Transport Property Profiles . . . . . . . . . . . . . . . 84 | |||
B.2.1. reliable-inorder-stream . . . . . . . . . . . . . . . 84 | B.2.1. reliable-inorder-stream . . . . . . . . . . . . . . . 85 | |||
B.2.2. reliable-message . . . . . . . . . . . . . . . . . . 85 | B.2.2. reliable-message . . . . . . . . . . . . . . . . . . 85 | |||
B.2.3. unreliable-datagram . . . . . . . . . . . . . . . . . 85 | B.2.3. unreliable-datagram . . . . . . . . . . . . . . . . . 85 | |||
Appendix C. Relationship to the Minimal Set of Transport Services | Appendix C. Relationship to the Minimal Set of Transport Services | |||
for End Systems . . . . . . . . . . . . . . . . . . . . . 86 | for End Systems . . . . . . . . . . . . . . . . . . . . . 86 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 89 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 89 | |||
1. Introduction | 1. Introduction | |||
This document specifies an abstract application programming interface | This document specifies an abstract application programming interface | |||
(API) that specifies the interface component of the high-level | (API) that specifies the interface component of the high-level | |||
skipping to change at page 6, line 19 ¶ | skipping to change at page 6, line 19 ¶ | |||
with a question mark are optional. | with a question mark are optional. | |||
Action(param0, param1?, ...) / Event<param0, param1, ...> | Action(param0, param1?, ...) / Event<param0, param1, ...> | |||
Objects that are passed as parameters to Actions use call-by-value | Objects that are passed as parameters to Actions use call-by-value | |||
behavior. Actions associated with no Object are Actions on the API; | behavior. Actions associated with no Object are Actions on the API; | |||
they are equivalent to Actions on a per-application global context. | they are equivalent to Actions on a per-application global context. | |||
Events are sent to the application or application-supplied code (e.g. | Events are sent to the application or application-supplied code (e.g. | |||
framers, see Section 9.1.2) for processing; the details of event | framers, see Section 9.1.2) for processing; the details of event | |||
processing are platform- and implementation-specific. | interfaces are platform- and implementation-specific, and may be | |||
implemented using other forms of asynchronous processing, as | ||||
idiomatic for the implementing platform. | ||||
We also make use of the following basic types: | We also make use of the following basic types: | |||
* Boolean: Instances take the value true or false. | * Boolean: Instances take the value true or false. | |||
* Integer: Instances take positive or negative integer values. | * Integer: Instances take positive or negative integer values. | |||
* Numeric: Instances take positive or negative real number values. | * Numeric: Instances take positive or negative real number values. | |||
* Enumeration: A family of types in which each instance takes one of | * Enumeration: A family of types in which each instance takes one of | |||
skipping to change at page 16, line 22 ¶ | skipping to change at page 16, line 22 ¶ | |||
* Transport Services systems SHOULD implement each Selection | * Transport Services systems SHOULD implement each Selection | |||
Property, Connection Property, and Message Context Property | Property, Connection Property, and Message Context Property | |||
specified in this document. The Transport Services API SHOULD be | specified in this document. The Transport Services API SHOULD be | |||
implemented even when in a specific implementation/platform it | implemented even when in a specific implementation/platform it | |||
will always result in no operation, e.g. there is no action when | will always result in no operation, e.g. there is no action when | |||
the API specifies a Property that is not available in a transport | the API specifies a Property that is not available in a transport | |||
protocol implemented on a specific platform. For example, if TCP | protocol implemented on a specific platform. For example, if TCP | |||
is the only underlying transport protocol, the Message Property | is the only underlying transport protocol, the Message Property | |||
msgOrdered can be implemented (trivially, as a no-op) as disabling | msgOrdered can be implemented (trivially, as a no-op) as disabling | |||
the requirement for ordering will not have any effect on delivery | the requirement for ordering will not have any effect on delivery | |||
order for Connections over TCP. Similarly, the msg-lifetime | order for Connections over TCP. Similarly, the msgLifetime | |||
Message Property can be implemented but ignored, as the | Message Property can be implemented but ignored, as the | |||
description of this Property states that "it is not guaranteed | description of this Property states that "it is not guaranteed | |||
that a Message will not be sent when its Lifetime has expired". | that a Message will not be sent when its Lifetime has expired". | |||
* Implementations may use other representations for Transport | * Implementations may use other representations for Transport | |||
Property Names, e.g., by providing constants, but should provide a | Property Names, e.g., by providing constants, but should provide a | |||
straight-forward mapping between their representation and the | straight-forward mapping between their representation and the | |||
property names specified here. | property names specified here. | |||
6. Pre-Establishment Phase | 6. Pre-Establishment Phase | |||
skipping to change at page 24, line 15 ¶ | skipping to change at page 24, line 15 ¶ | |||
The protocol(s) and path(s) selected as candidates during | The protocol(s) and path(s) selected as candidates during | |||
establishment are determined and configured using these properties. | establishment are determined and configured using these properties. | |||
Since there could be paths over which some transport protocols are | Since there could be paths over which some transport protocols are | |||
unable to operate, or remote endpoints that support only specific | unable to operate, or remote endpoints that support only specific | |||
network addresses or transports, transport protocol selection is | network addresses or transports, transport protocol selection is | |||
necessarily tied to path selection. This may involve choosing | necessarily tied to path selection. This may involve choosing | |||
between multiple local interfaces that are connected to different | between multiple local interfaces that are connected to different | |||
access networks. | access networks. | |||
When additional information (such as Provisioning Domain (PvD) | When additional information (such as Provisioning Domain (PvD) | |||
information Path information can include network segment PMTU, set of | information [RFC7556]) is available about the networks over which an | |||
supported DSCPs, expected usage, cost, etc. The usage of this | endpoint can operate, this can inform the selection between alternate | |||
network paths. Path information can include network segment PMTU, | ||||
set of supported DSCPs, expected usage, cost, etc. The usage of this | ||||
information by the Transport Services System is generally independent | information by the Transport Services System is generally independent | |||
of the specific mechanism/protocol used to receive the information | of the specific mechanism/protocol used to receive the information | |||
(e.g. zero-conf, DHCP, or IPv6 RA).[RFC7556]) is available about the | (e.g. zero-conf, DHCP, or IPv6 RA). | |||
networks over which an endpoint can operate, this can inform the | ||||
selection between alternate network paths. | ||||
Most Selection Properties are represented as Preferences, which can | Most Selection Properties are represented as Preferences, which can | |||
take one of five values: | take one of five values: | |||
+============+========================================+ | +============+========================================+ | |||
| Preference | Effect | | | Preference | Effect | | |||
+============+========================================+ | +============+========================================+ | |||
| Require | Select only protocols/paths providing | | | Require | Select only protocols/paths providing | | |||
| | the property, fail otherwise | | | | the property, fail otherwise | | |||
+------------+----------------------------------------+ | +------------+----------------------------------------+ | |||
skipping to change at page 25, line 46 ¶ | skipping to change at page 25, line 46 ¶ | |||
Individual properties are then set on the TransportProperties Object. | Individual properties are then set on the TransportProperties Object. | |||
Setting a Transport Property to a value overrides the previous value | Setting a Transport Property to a value overrides the previous value | |||
of this Transport Property. | of this Transport Property. | |||
TransportProperties.Set(property, value) | TransportProperties.Set(property, value) | |||
To aid readability, implementations MAY provide additional | To aid readability, implementations MAY provide additional | |||
convenience functions to simplify use of Selection Properties: see | convenience functions to simplify use of Selection Properties: see | |||
Appendix B.1 for examples. In addition, implementations MAY provide | Appendix B.1 for examples. In addition, implementations MAY provide | |||
a mechanism to create TransportProperties objects that are | a mechanism to create TransportProperties objects that are | |||
preconfigured for common use cases as outlined in Appendix B.2. | preconfigured for common use cases, as outlined in Appendix B.2. | |||
Transport Properties for an established connection can be queried via | Transport Properties for an established connection can be queried via | |||
the Connection object, as outlined in Section 8. | the Connection object, as outlined in Section 8. | |||
A Connection gets its Transport Properties either by being explicitly | A Connection gets its Transport Properties either by being explicitly | |||
configured via a Preconnection, by configuration after establishment, | configured via a Preconnection, by configuration after establishment, | |||
or by inheriting them from an antecedent via cloning; see Section 7.4 | or by inheriting them from an antecedent via cloning; see Section 7.4 | |||
for more. | for more. | |||
Section 8.1 provides a list of Connection Properties, while Selection | Section 8.1 provides a list of Connection Properties, while Selection | |||
Properties are listed in the subsections below. Many properties are | Properties are listed in the subsections below. Selection Properties | |||
only considered during establishment, and can not be changed after a | are only considered during establishment, and can not be changed | |||
Connection is established; however, they can still be queried. The | after a Connection is established. After a Connection is | |||
return type of a queried Selection Property is Boolean, where true | established, Selection Properties can only be read to check the | |||
means that the Selection Property has been applied and false means | properties used by the Connection. Upon reading, the Preference type | |||
that the Selection Property has not been applied. Note that true | of a Selection Property changes into Boolean, where true means that | |||
does not mean that a request has been honored. For example, if | the selected Protocol Stack supports the feature or uses the path | |||
Congestion control was requested with preference level Prefer, but | associated with the Selection Property, and false means that the | |||
congestion control could not be supported, querying the | Protocol Stack does not support the feature or use the path. | |||
congestionControl property yields the value false. If the preference | Implementations of Transport Services systems may alternatively use | |||
level Avoid was used for Congestion control, and, as requested, the | the two Preference values Require and Prohibit to represent true and | |||
Connection is not congestion controlled, querying the | false, respectively. | |||
congestionControl property also yields the value false. | ||||
An implementation of the Transport Services API must provide sensible | An implementation of the Transport Services API must provide sensible | |||
defaults for Selection Properties. The default values for each | defaults for Selection Properties. The default values for each | |||
property below represent a configuration that can be implemented over | property below represent a configuration that can be implemented over | |||
TCP. If these default values are used and TCP is not supported by a | TCP. If these default values are used and TCP is not supported by a | |||
Transport Services system, then an application using the default set | Transport Services system, then an application using the default set | |||
of Properties might not succeed in establishing a connection. Using | of Properties might not succeed in establishing a connection. Using | |||
the same default values for independent Transport Services | the same default values for independent Transport Services | |||
implementations can be beneficial when applications are ported | implementations can be beneficial when applications are ported | |||
between different implementations/platforms, even if this default | between different implementations/platforms, even if this default | |||
skipping to change at page 31, line 4 ¶ | skipping to change at page 31, line 4 ¶ | |||
a particular endpoint. Section 6.1.2 provides details about how to | a particular endpoint. Section 6.1.2 provides details about how to | |||
qualify endpoint candidates on a per-interface basis. | qualify endpoint candidates on a per-interface basis. | |||
6.2.12. Provisioning Domain Instance or Type | 6.2.12. Provisioning Domain Instance or Type | |||
Name: pvd | Name: pvd | |||
Type: Collection of (Preference, Enumeration) | Type: Collection of (Preference, Enumeration) | |||
Default: Empty (not setting a preference for any PvD) | Default: Empty (not setting a preference for any PvD) | |||
Similar to interface instances and types (see Section 6.2.11), this | Similar to interface (see Section 6.2.11), this property allows the | |||
property allows the application to control path selection by | application to control path selection by selecting which specific | |||
selecting which specific Provisioning Domain (PvD) or categories of | Provisioning Domain (PvD) or categories of PVDs it wants to Require, | |||
PVDs it wants to Require, Prohibit, Prefer, or Avoid. Provisioning | Prohibit, Prefer, or Avoid. Provisioning Domains define consistent | |||
Domains define consistent sets of network properties that may be more | sets of network properties that may be more specific than network | |||
specific than network interfaces [RFC7556]. | interfaces [RFC7556]. | |||
As with interface instances and types, this property is a tuple of an | As with interface instances and types, this property is a tuple of an | |||
(Enumerated) PvD identifier and a preference, and can either be | (Enumerated) PvD identifier and a preference, and can either be | |||
implemented directly as such, or for making one preference available | implemented directly as such, or for making one preference available | |||
for each interface and interface type available on the system. | for each interface and interface type available on the system. | |||
The identification of a specific PvD is implementation- and system- | The identification of a specific PvD is implementation- and system- | |||
specific, because there is currently no portable standard format for | specific, because there is currently no portable standard format for | |||
a PvD identifier. For example, this identifier might be a string | a PvD identifier. For example, this identifier might be a string | |||
name or an integer. As with requiring specific interfaces, requiring | name or an integer. As with requiring specific interfaces, requiring | |||
skipping to change at page 32, line 44 ¶ | skipping to change at page 32, line 44 ¶ | |||
established, even if the chosen transport supports using multiple | established, even if the chosen transport supports using multiple | |||
paths. | paths. | |||
Active: The connection will negotiate the use of multiple paths if | Active: The connection will negotiate the use of multiple paths if | |||
the chosen transport supports this. | the chosen transport supports this. | |||
Passive: The connection will support the use of multiple paths if | Passive: The connection will support the use of multiple paths if | |||
the Remote Endpoint requests it. | the Remote Endpoint requests it. | |||
The policy for using multiple paths is specified using the separate | The policy for using multiple paths is specified using the separate | |||
multipath-policy property, see Section 8.1.7 below. To enable the | multipathPolicy property, see Section 8.1.7 below. To enable the | |||
peer endpoint to initiate additional paths towards a local address | peer endpoint to initiate additional paths towards a local address | |||
other than the one initially used, it is necessary to set the | other than the one initially used, it is necessary to set the | |||
Alternative Addresses property (see Section 6.2.15 below). | advertisesAltaddr property (see Section 6.2.15 below). | |||
Setting this property to "Active", can have privacy implications: It | Setting this property to "Active", can have privacy implications: It | |||
enables the transport to establish connectivity using alternate paths | enables the transport to establish connectivity using alternate paths | |||
that might result in users being linkable across the multiple paths, | that might result in users being linkable across the multiple paths, | |||
even if the Advertisement of Alternative Addresses property (see | even if the advertisesAltaddr property (see Section 6.2.15 below) is | |||
Section 6.2.15 below) is set to false. | set to false. | |||
Note that Multipath Transport has no corresponding Selection Property | Note that Multipath Transport has no corresponding Selection Property | |||
of type Preference. Enumeration values other than "Disabled" are | of type Preference. Enumeration values other than "Disabled" are | |||
interpreted as a preference for choosing protocols that can make use | interpreted as a preference for choosing protocols that can make use | |||
of multiple paths. The "Disabled" value implies a requirement not to | of multiple paths. The "Disabled" value implies a requirement not to | |||
use multiple paths in parallel but does not prevent choosing a | use multiple paths in parallel but does not prevent choosing a | |||
protocol that is capable of using multiple paths, e.g., it does not | protocol that is capable of using multiple paths, e.g., it does not | |||
prevent choosing TCP, but prevents sending the MP_CAPABLE option in | prevent choosing TCP, but prevents sending the MP_CAPABLE option in | |||
the TCP handshake. | the TCP handshake. | |||
6.2.15. Advertisement of Alternative Addresses | 6.2.15. Advertisement of Alternative Addresses | |||
Name: advertises-altaddr | Name: advertisesAltaddr | |||
Type: Boolean | Type: Boolean | |||
Default: False | Default: False | |||
This property specifies whether alternative addresses, e.g., of other | This property specifies whether alternative addresses, e.g., of other | |||
interfaces, should be advertised to the peer endpoint by the protocol | interfaces, should be advertised to the peer endpoint by the protocol | |||
stack. Advertising these addresses enables the peer-endpoint to | stack. Advertising these addresses enables the peer-endpoint to | |||
establish additional connectivity, e.g., for connection migration or | establish additional connectivity, e.g., for connection migration or | |||
using multiple paths. | using multiple paths. | |||
skipping to change at page 35, line 8 ¶ | skipping to change at page 35, line 8 ¶ | |||
Name: activeReadBeforeSend | Name: activeReadBeforeSend | |||
Type: Preference | Type: Preference | |||
Default: Ignore | Default: Ignore | |||
The most common client-server communication pattern involves the | The most common client-server communication pattern involves the | |||
client actively opening a connection, then sending data to the | client actively opening a connection, then sending data to the | |||
server. The server listens (passive open), reads, and then answers. | server. The server listens (passive open), reads, and then answers. | |||
This property specifies whether an application wants to diverge from | This property specifies whether an application wants to diverge from | |||
this pattern - either by actively opening with Initiate(), | this pattern -- either by actively opening with Initiate(), | |||
immediately followed by reading, or passively opening with Listen(), | immediately followed by reading, or passively opening with Listen(), | |||
immediately followed by writing. This property is ignored when | immediately followed by writing. This property is ignored when | |||
establishing connections using Rendezvous(). Requiring this property | establishing connections using Rendezvous(). Requiring this property | |||
limits the choice of mappings to underlying protocols, which can | limits the choice of mappings to underlying protocols, which can | |||
reduce efficiency. For example, it prevents the Transport Services | reduce efficiency. For example, it prevents the Transport Services | |||
system from mapping Connections to SCTP streams, where the first | system from mapping Connections to SCTP streams, where the first | |||
transmitted data takes the role of an active open signal | transmitted data takes the role of an active open signal | |||
[I-D.ietf-taps-impl]. | [I-D.ietf-taps-impl]. | |||
6.3. Specifying Security Parameters and Callbacks | 6.3. Specifying Security Parameters and Callbacks | |||
skipping to change at page 36, line 43 ¶ | skipping to change at page 36, line 43 ¶ | |||
opportunistic. If security is disabled, the Transport Services | opportunistic. If security is disabled, the Transport Services | |||
system will not attempt to add transport security automatically. If | system will not attempt to add transport security automatically. If | |||
security is opportunistic, it will allow Connections without | security is opportunistic, it will allow Connections without | |||
transport security, but will still attempt to use security if | transport security, but will still attempt to use security if | |||
available. | available. | |||
SecurityParameters := NewDisabledSecurityParameters() | SecurityParameters := NewDisabledSecurityParameters() | |||
SecurityParameters := NewOpportunisticSecurityParameters() | SecurityParameters := NewOpportunisticSecurityParameters() | |||
Representation of Security Parameters in implementations should | Representation of security parameters in implementations should | |||
parallel that chosen for Transport Property names as sugggested in | parallel that chosen for Transport Property names as sugggested in | |||
Section 5. | Section 5. | |||
6.3.2. Connection Establishment Callbacks | 6.3.2. Connection Establishment Callbacks | |||
Security decisions, especially pertaining to trust, are not static. | Security decisions, especially pertaining to trust, are not static. | |||
Once configured, parameters may also be supplied during connection | Once configured, parameters may also be supplied during connection | |||
establishment. These are best handled as client-provided callbacks. | establishment. These are best handled as client-provided callbacks. | |||
Callbacks block the progress of the connection establishment, which | Callbacks block the progress of the connection establishment, which | |||
distinguishes them from other Events in the transport system. How | distinguishes them from other Events in the transport system. How | |||
skipping to change at page 38, line 31 ¶ | skipping to change at page 38, line 31 ¶ | |||
The Initiate() Action returns a Connection object. Once Initiate() | The Initiate() Action returns a Connection object. Once Initiate() | |||
has been called, any changes to the Preconnection MUST NOT have any | has been called, any changes to the Preconnection MUST NOT have any | |||
effect on the Connection. However, the Preconnection can be reused, | effect on the Connection. However, the Preconnection can be reused, | |||
e.g., to Initiate another Connection. | e.g., to Initiate another Connection. | |||
Once Initiate is called, the candidate Protocol Stack(s) may cause | Once Initiate is called, the candidate Protocol Stack(s) may cause | |||
one or more candidate transport-layer connections to be created to | one or more candidate transport-layer connections to be created to | |||
the specified Remote Endpoint. The caller may immediately begin | the specified Remote Endpoint. The caller may immediately begin | |||
sending Messages on the Connection (see Section 9.2) after calling | sending Messages on the Connection (see Section 9.2) after calling | |||
Initiate(); note that any data marked Safely Replayable that is sent | Initiate(); note that any data marked as "safely replayable" that is | |||
while the Connection is being established may be sent multiple times | sent while the Connection is being established may be sent multiple | |||
or on multiple candidates. | times or on multiple candidates. | |||
The following Events may be sent by the Connection after Initiate() | The following Events may be sent by the Connection after Initiate() | |||
is called: | is called: | |||
Connection -> Ready<> | Connection -> Ready<> | |||
The Ready Event occurs after Initiate has established a transport- | The Ready Event occurs after Initiate has established a transport- | |||
layer connection on at least one usable candidate Protocol Stack over | layer connection on at least one usable candidate Protocol Stack over | |||
at least one candidate Path. No Receive Events (see Section 9.3) | at least one candidate Path. No Receive Events (see Section 9.3) | |||
will occur before the Ready Event for Connections established using | will occur before the Ready Event for Connections established using | |||
skipping to change at page 40, line 16 ¶ | skipping to change at page 40, line 16 ¶ | |||
SetNewConnectionLimit(). This mechanism allows a server to protect | SetNewConnectionLimit(). This mechanism allows a server to protect | |||
itself from being drained of resources. Each time a new Connection | itself from being drained of resources. Each time a new Connection | |||
is delivered by the ConnectionReceived Event, the value is | is delivered by the ConnectionReceived Event, the value is | |||
automatically decremented. Once the value reaches zero, no further | automatically decremented. Once the value reaches zero, no further | |||
Connections will be delivered until the caller sets the limit to a | Connections will be delivered until the caller sets the limit to a | |||
higher value. By default, this value is Infinite. The caller is | higher value. By default, this value is Infinite. The caller is | |||
also able to reset the value to Infinite at any point. | also able to reset the value to Infinite at any point. | |||
Listener -> EstablishmentError<reason?> | Listener -> EstablishmentError<reason?> | |||
An EstablishmentError occurs either when the Properties and Security | An EstablishmentError occurs either when the Properties and security | |||
Parameters of the Preconnection cannot be fulfilled for listening or | parameters of the Preconnection cannot be fulfilled for listening or | |||
cannot be reconciled with the Local Endpoint (and/or Remote Endpoint, | cannot be reconciled with the Local Endpoint (and/or Remote Endpoint, | |||
if specified), when the Local Endpoint (or Remote Endpoint, if | if specified), when the Local Endpoint (or Remote Endpoint, if | |||
specified) cannot be resolved, or when the application is prohibited | specified) cannot be resolved, or when the application is prohibited | |||
from listening by policy. | from listening by policy. | |||
Listener -> Stopped<> | Listener -> Stopped<> | |||
A Stopped Event occurs after the Listener has stopped listening. | A Stopped Event occurs after the Listener has stopped listening. | |||
7.3. Peer-to-Peer Establishment: Rendezvous | 7.3. Peer-to-Peer Establishment: Rendezvous | |||
Simultaneous peer-to-peer Connection establishment is supported by | Simultaneous peer-to-peer Connection establishment is supported by | |||
the Rendezvous() Action: | the Rendezvous() Action: | |||
Preconnection.Rendezvous() | Preconnection.Rendezvous() | |||
A Preconnection Object used in a Rendezvous() MUST have both the | A Preconnection Object used in a Rendezvous() MUST have both the | |||
Local Endpoint candidates and the Remote Endpoint candidates | Local Endpoint candidates and the Remote Endpoint candidates | |||
specified, along with the transport properties and security | specified, along with the Transport Properties and security | |||
parameters needed for Protocol Stack selection, before the | parameters needed for Protocol Stack selection, before the | |||
Rendezvous() Action is initiated. | Rendezvous() Action is initiated. | |||
The Rendezvous() Action listens on the Local Endpoint candidates for | The Rendezvous() Action listens on the Local Endpoint candidates for | |||
an incoming Connection from the Remote Endpoint candidates, while | an incoming Connection from the Remote Endpoint candidates, while | |||
also simultaneously trying to establish a Connection from the Local | also simultaneously trying to establish a Connection from the Local | |||
Endpoint candidates to the Remote Endpoint candidates. | Endpoint candidates to the Remote Endpoint candidates. | |||
If there are multiple Local Endpoints or Remote Endpoints configured, | If there are multiple Local Endpoints or Remote Endpoints configured, | |||
then initiating a Rendezvous() action will systematically probe the | then initiating a Rendezvous() action will systematically probe the | |||
skipping to change at page 42, line 23 ¶ | skipping to change at page 42, line 23 ¶ | |||
Local Endpoint or Remote Endpoint cannot be resolved, when no | Local Endpoint or Remote Endpoint cannot be resolved, when no | |||
transport-layer connection can be established to the Remote Endpoint, | transport-layer connection can be established to the Remote Endpoint, | |||
or when the application is prohibited from rendezvous by policy: | or when the application is prohibited from rendezvous by policy: | |||
Preconnection -> EstablishmentError<reason?> | Preconnection -> EstablishmentError<reason?> | |||
7.4. Connection Groups | 7.4. Connection Groups | |||
Connection Groups can be created using the Clone Action: | Connection Groups can be created using the Clone Action: | |||
Connection := Connection.Clone(framer?) | Connection := Connection.Clone(framer?, connectionProperties?) | |||
Calling Clone on a Connection yields a Connection Group containing | Calling Clone on a Connection yields a Connection Group containing | |||
two Connections: the parent Connection on which Clone was called, and | two Connections: the parent Connection on which Clone was called, and | |||
a resulting cloned Connection. The new Connection is actively | a resulting cloned Connection. The new Connection is actively | |||
openend, and it will send a Ready Event or an EstablishmentError | openend, and it will send a Ready Event or an EstablishmentError | |||
Event. Calling Clone on any of these Connections adds another | Event. Calling Clone on any of these Connections adds another | |||
Connection to the Connection Group. Connections in a Connection | Connection to the Connection Group. Connections in a Connection | |||
Group share all Connection Properties except Connection Priority (see | Group share all Connection Properties except connPriority (see | |||
Section 8.1.2), and these Connection Properties are entangled: | Section 8.1.2), and these Connection Properties are entangled: | |||
Changing one of the Connection Properties on one Connection in the | Changing one of the Connection Properties on one Connection in the | |||
Connection Group automatically changes the Connection Property for | Connection Group automatically changes the Connection Property for | |||
all others. For example, changing Timeout for aborting Connection | all others. For example, changing connTimeout (see Section 8.1.3) on | |||
(see Section 8.1.3) on one Connection in a Connection Group will | one Connection in a Connection Group will automatically make the same | |||
automatically make the same change to this Connection Property for | change to this Connection Property for all other Connections in the | |||
all other Connections in the Connection Group. Like all other | Connection Group. Like all other Properties, connPriority is copied | |||
Properties, Connection Priority is copied to the new Connection when | to the new Connection when calling Clone(), but in this case, a later | |||
calling Clone(), but in this case, a later change to the Connection | change to the connPriority on one Connection does not change it on | |||
Priority on one Connection does not change it on the other | the other Connections in the same Connection Group. | |||
Connections in the same Connection Group. | ||||
The optional connectionProperties parameter allows passing Transport | ||||
Properties that control the behavior of the underlying stream or | ||||
connection to be created, e.g., protocol-specific properties to | ||||
request specific stream IDs for SCTP or QUIC. | ||||
Message Properties set on a Connection also apply only to that | Message Properties set on a Connection also apply only to that | |||
Connection. | Connection. | |||
A new Connection created by Clone can have a Message Framer assigned | A new Connection created by Clone can have a Message Framer assigned | |||
via the optional framer parameter of the Clone Action. If this | via the optional framer parameter of the Clone Action. If this | |||
parameter is not supplied, the stack of Message Framers associated | parameter is not supplied, the stack of Message Framers associated | |||
with a Connection is copied to the cloned Connection when calling | with a Connection is copied to the cloned Connection when calling | |||
Clone. Then, a cloned Connection has the same stack of Message | Clone. Then, a cloned Connection has the same stack of Message | |||
Framers as the Connection from which they are Cloned, but these | Framers as the Connection from which they are Cloned, but these | |||
Framers may internally maintain per-Connection state. | Framers may internally maintain per-Connection state. | |||
It is also possible to check which Connections belong to the same | It is also possible to check which Connections belong to the same | |||
Connection Group. Calling GroupedConnections() on a specific | Connection Group. Calling GroupedConnections() on a specific | |||
Connection returns a set of all Connections in the same group. | Connection returns a set of all Connections in the same group. | |||
[]Connection := Connection.GroupedConnections() | []Connection := Connection.GroupedConnections() | |||
Connections will belong to the same group if the application | Connections will belong to the same group if the application | |||
previously called Clone. Passive Connections can also be added to | previously called Clone. Passive Connections can also be added to | |||
the same group - e.g., when a Listener receives a new Connection that | the same group -- e.g., when a Listener receives a new Connection | |||
is just a new stream of an already active multi-streaming protocol | that is just a new stream of an already active multi-streaming | |||
instance. | protocol instance. | |||
If the underlying protocol supports multi-streaming, it is natural to | If the underlying protocol supports multi-streaming, it is natural to | |||
use this functionality to implement Clone. In that case, Connections | use this functionality to implement Clone. In that case, Connections | |||
in a Connection Group are multiplexed together, giving them similar | in a Connection Group are multiplexed together, giving them similar | |||
treatment not only inside endpoints, but also across the end-to-end | treatment not only inside endpoints, but also across the end-to-end | |||
Internet path. | Internet path. | |||
Note that calling Clone() can result in on-the-wire signaling, e.g., | Note that calling Clone() can result in on-the-wire signaling, e.g., | |||
to open a new transport connection, depending on the underlying | to open a new transport connection, depending on the underlying | |||
Protocol Stack. When Clone() leads to the opening of multiple such | Protocol Stack. When Clone() leads to the opening of multiple such | |||
connections, the Transport Services system will ensure consistency of | connections, the Transport Services system will ensure consistency of | |||
Connection Properties by uniformly applying them to all underlying | Connection Properties by uniformly applying them to all underlying | |||
connections in a group. Even in such a case, there are possibilities | connections in a group. Even in such a case, there are possibilities | |||
for a Transport Services system to implement prioritization within a | for a Transport Services system to implement prioritization within a | |||
Connection Group [TCP-COUPLING] [RFC8699]. | Connection Group [TCP-COUPLING] [RFC8699]. | |||
Attempts to clone a Connection can result in a CloneError: | Attempts to clone a Connection can result in a CloneError: | |||
Connection -> CloneError<reason?> | Connection -> CloneError<reason?> | |||
The Connection Priority Connection Property operates on Connections | The connPriority Connection Property operates on Connections in a | |||
in a Connection Group using the same approach as in Section 9.1.3.2: | Connection Group using the same approach as in Section 9.1.3.2: when | |||
when allocating available network capacity among Connections in a | allocating available network capacity among Connections in a | |||
Connection Group, sends on Connections with higher Priority values | Connection Group, sends on Connections with higher Priority values | |||
will be prioritized over sends on Connections that have lower | will be prioritized over sends on Connections that have lower | |||
Priority values. Capacity will be shared among these Connections | Priority values. Capacity will be shared among these Connections | |||
according to the Connection Group Transmission Scheduler property | according to the connScheduler property (Section 8.1.5). See | |||
(Section 8.1.5). See Section 9.2.6 for more. | Section 9.2.6 for more. | |||
7.5. Adding and Removing Endpoints on a Connection | 7.5. Adding and Removing Endpoints on a Connection | |||
Transport protocols that are explicitly multipath aware are expected | Transport protocols that are explicitly multipath aware are expected | |||
to automatically manage the set of Remote Endpoints that they are | to automatically manage the set of Remote Endpoints that they are | |||
communicating with, and the paths to those endpoints. A PathChange<> | communicating with, and the paths to those endpoints. A PathChange<> | |||
event, described in Section 8.3.2, will be generated when the path | event, described in Section 8.3.2, will be generated when the path | |||
changes. | changes. | |||
In some cases, however, it is necessary to explicitly indicate to a | In some cases, however, it is necessary to explicitly indicate to a | |||
skipping to change at page 45, line 43 ¶ | skipping to change at page 45, line 43 ¶ | |||
if ConnectionProperties.Has(boolean_or_preference_property) then ... | if ConnectionProperties.Has(boolean_or_preference_property) then ... | |||
Depending on the status of the connection, the queried Connection | Depending on the status of the connection, the queried Connection | |||
Properties will include different information: | Properties will include different information: | |||
* The connection state, which can be one of the following: | * The connection state, which can be one of the following: | |||
Establishing, Established, Closing, or Closed. | Establishing, Established, Closing, or Closed. | |||
* Whether the connection can be used to send data. A connection can | * Whether the connection can be used to send data. A connection can | |||
not be used for sending if the connection was created with the | not be used for sending if the connection was created with the | |||
Selection Property Direction of Communication set to | Selection Property direction set to unidirectional receive or if a | |||
unidirectional receive or if a Message marked as Final was sent | Message marked as Final was sent over this connection. See also | |||
over this connection. See also Section 9.1.3.5. | Section 9.1.3.5. | |||
* Whether the connection can be used to receive data. A connection | * Whether the connection can be used to receive data. A connection | |||
cannot be used for reading if the connection was created with the | cannot be used for reading if the connection was created with the | |||
Selection Property Direction of Communication set to | Selection Property direction set to unidirectional send or if a | |||
unidirectional send or if a Message marked as Final was received. | Message marked as Final was received. See Section 9.3.3.3. The | |||
See Section 9.3.3.3. The latter is only supported by certain | latter is only supported by certain transport protocols, e.g., by | |||
transport protocols, e.g., by TCP as half-closed connection. | TCP as half-closed connection. | |||
* For Connections that are Established, Closing, or Closed: | * For Connections that are Established, Closing, or Closed: | |||
Connection Properties (Section 8.1) of the actual protocols that | Connection Properties (Section 8.1) of the actual protocols that | |||
were selected and instantiated, and Selection Properties that the | were selected and instantiated, and Selection Properties that the | |||
application specified on the Preconnection. Selection Properties | application specified on the Preconnection. Selection Properties | |||
of type Preference will be exposed as boolean values indicating | of type Preference will be exposed as boolean values indicating | |||
whether or not the property applies to the selected transport. | whether or not the property applies to the selected transport. | |||
Note that the instantiated protocol stack might not match all | Note that the instantiated protocol stack might not match all | |||
Protocol Selection Properties that the application specified on | Protocol Selection Properties that the application specified on | |||
the Preconnection. | the Preconnection. | |||
skipping to change at page 46, line 42 ¶ | skipping to change at page 46, line 42 ¶ | |||
protocol stack and therefore available on all Connections. | protocol stack and therefore available on all Connections. | |||
Many Connection Properties have a corresponding Selection Property | Many Connection Properties have a corresponding Selection Property | |||
that enables applications to express their preference for protocols | that enables applications to express their preference for protocols | |||
providing a supporting transport feature. | providing a supporting transport feature. | |||
8.1.1. Required Minimum Corruption Protection Coverage for Receiving | 8.1.1. Required Minimum Corruption Protection Coverage for Receiving | |||
Name: recvChecksumLen | Name: recvChecksumLen | |||
Type: Integer or Full Coverage | Type: Integer (non-negative) or Full Coverage | |||
Default: Full Coverage | Default: Full Coverage | |||
If this property is an Integer, it specifies the minimum number of | If this property is an Integer, it specifies the minimum number of | |||
bytes in a received message that need to be covered by a checksum. A | bytes in a received message that need to be covered by a checksum. A | |||
receiving endpoint will not forward messages that have less coverage | receiving endpoint will not forward messages that have less coverage | |||
to the application. The application is responsible for handling any | to the application. The application is responsible for handling any | |||
corruption within the non-protected part of the message [RFC8085]. A | corruption within the non-protected part of the message [RFC8085]. A | |||
special value of 0 means that a received packet may also have a zero | special value of 0 means that a received packet may also have a zero | |||
checksum field. | checksum field. | |||
8.1.2. Connection Priority | 8.1.2. Connection Priority | |||
Name: connPriority | Name: connPriority | |||
Type: Integer (non-negative) | Type: Integer (non-negative) | |||
Default: 100 | Default: 100 | |||
This Property is a non-negative integer representing the priority of | This property is a non-negative integer representing the priority of | |||
this Connection relative to other Connections in the same Connection | this Connection relative to other Connections in the same Connection | |||
Group. A higher value reflects a higher priority. It has no effect | Group. A higher value reflects a higher priority. It has no effect | |||
on Connections not part of a Connection Group. As noted in | on Connections not part of a Connection Group. As noted in | |||
Section 7.4, this property is not entangled when Connections are | Section 7.4, this property is not entangled when Connections are | |||
cloned, i.e., changing the Priority on one Connection in a Connection | cloned, i.e., changing the Priority on one Connection in a Connection | |||
Group does not change it on the other Connections in the same | Group does not change it on the other Connections in the same | |||
Connection Group. No guarantees of a specific behavior regarding | Connection Group. No guarantees of a specific behavior regarding | |||
Connection Priority are given; a Transport Services system may ignore | Connection Priority are given; a Transport Services system may ignore | |||
this property. See Section 9.2.6 for more details. | this property. See Section 9.2.6 for more details. | |||
8.1.3. Timeout for Aborting Connection | 8.1.3. Timeout for Aborting Connection | |||
Name: connTimeout | Name: connTimeout | |||
Type: Numeric or Disabled | Type: Numeric (non-negative) or Disabled | |||
Default: Disabled | Default: Disabled | |||
If this property is Numeric, it specifies how long to wait before | If this property is Numeric, it specifies how long to wait before | |||
deciding that an active Connection has failed when trying to reliably | deciding that an active Connection has failed when trying to reliably | |||
deliver data to the Remote Endpoint. Adjusting this Property will | deliver data to the Remote Endpoint. Adjusting this property will | |||
only take effect when the underlying stack supports reliability. If | only take effect when the underlying stack supports reliability. If | |||
this property has the enumerated value Disabled, it means that no | this property has the enumerated value Disabled, it means that no | |||
timeout is scheduled. | timeout is scheduled. | |||
8.1.4. Timeout for keep alive packets | 8.1.4. Timeout for keep alive packets | |||
Name: keepAliveTimeout | Name: keepAliveTimeout | |||
Type: Numeric or Disabled | Type: Numeric (non-negative) or Disabled | |||
Default: Implementation-defined | Default: Implementation-defined | |||
A Transport Services API can request a protocol that supports sending | A Transport Services API can request a protocol that supports sending | |||
keep alive packets Section 6.2.10. If this property is an Integer, | keep alive packets Section 6.2.10. If this property is Numeric, it | |||
it specifies the maximum length of time an idle connection (one for | specifies the maximum length of time an idle connection (one for | |||
which no transport packets have been sent) should wait before the | which no transport packets have been sent) should wait before the | |||
Local Endpoint sends a keep-alive packet to the Remote Endpoint. | Local Endpoint sends a keep-alive packet to the Remote Endpoint. | |||
Adjusting this Property will only take effect when the underlying | Adjusting this property will only take effect when the underlying | |||
stack supports sending keep-alive packets. Guidance on setting this | stack supports sending keep-alive packets. Guidance on setting this | |||
value for datagram transports is provided in [RFC8085]. A value | value for connection-less transports is provided in [RFC8085]. A | |||
greater than the connection timeout (Section 8.1.3) or the enumerated | value greater than the connection timeout (Section 8.1.3) or the | |||
value Disabled will disable the sending of keep-alive packets. | enumerated value Disabled will disable the sending of keep-alive | |||
packets. | ||||
8.1.5. Connection Group Transmission Scheduler | 8.1.5. Connection Group Transmission Scheduler | |||
Name: connScheduler | Name: connScheduler | |||
Type: Enumeration | Type: Enumeration | |||
Default: Weighted Fair Queueing (see Section 3.6 in [RFC8260]) | Default: Weighted Fair Queueing (see Section 3.6 in [RFC8260]) | |||
This property specifies which scheduler should be used among | This property specifies which scheduler should be used among | |||
skipping to change at page 50, line 17 ¶ | skipping to change at page 50, line 14 ¶ | |||
connection DSCP signaling without multiplexing SHOULD assign a | connection DSCP signaling without multiplexing SHOULD assign a | |||
DSCP Assured Forwarding (AF11,AF12,AF13,AF14) [RFC2597] PHB per | DSCP Assured Forwarding (AF11,AF12,AF13,AF14) [RFC2597] PHB per | |||
Section 4.8 of [RFC4594]. | Section 4.8 of [RFC4594]. | |||
The Capacity Profile for a selected protocol stack may be modified on | The Capacity Profile for a selected protocol stack may be modified on | |||
a per-Message basis using the Transmission Profile Message Property; | a per-Message basis using the Transmission Profile Message Property; | |||
see Section 9.1.3.8. | see Section 9.1.3.8. | |||
8.1.7. Policy for using Multipath Transports | 8.1.7. Policy for using Multipath Transports | |||
Name: multipath-policy | Name: multipathPolicy | |||
Type: Enumeration | Type: Enumeration | |||
Default: Handover | Default: Handover | |||
This property specifies the local policy for transferring data across | This property specifies the local policy for transferring data across | |||
multiple paths between the same end hosts if Multipath Transport is | multiple paths between the same end hosts if Multipath Transport is | |||
not set to Disabled (see Section 6.2.14). Possible values are: | not set to Disabled (see Section 6.2.14). Possible values are: | |||
Handover: The connection ought only to attempt to migrate between | Handover: The connection ought only to attempt to migrate between | |||
skipping to change at page 51, line 9 ¶ | skipping to change at page 50, line 51 ¶ | |||
capacity limitations of the individual paths. The actual strategy | capacity limitations of the individual paths. The actual strategy | |||
is implementation specific. | is implementation specific. | |||
Note that this is a local choice - the Remote Endpoint can choose a | Note that this is a local choice - the Remote Endpoint can choose a | |||
different policy. | different policy. | |||
8.1.8. Bounds on Send or Receive Rate | 8.1.8. Bounds on Send or Receive Rate | |||
Name: minSendRate / minRecvRate / maxSendRate / maxRecvRate | Name: minSendRate / minRecvRate / maxSendRate / maxRecvRate | |||
Type: Numeric or Unlimited / Numeric or Unlimited / Numeric or | Type: Numeric (non-negative) or Unlimited / Numeric (non-negative) | |||
Unlimited / Numeric or Unlimited | or Unlimited / Numeric (non-negative) or Unlimited / Numeric (non- | |||
negative) or Unlimited | ||||
Default: Unlimited / Unlimited / Unlimited / Unlimited | Default: Unlimited / Unlimited / Unlimited / Unlimited | |||
Integer values of this property specify an upper-bound rate that a | Numeric values of this property specify an upper-bound rate that a | |||
transfer is not expected to exceed (even if flow control and | transfer is not expected to exceed (even if flow control and | |||
congestion control allow higher rates), and/or a lower-bound rate | congestion control allow higher rates), and/or a lower-bound rate | |||
below which the application does not deem it will be useful. These | below which the application does not deem it will be useful. These | |||
are specified in bits per second. The enumerated value Unlimited | are specified in bits per second. The enumerated value Unlimited | |||
indicates that no bound is specified. | indicates that no bound is specified. | |||
8.1.9. Group Connection Limit | 8.1.9. Group Connection Limit | |||
Name: groupConnLimit | Name: groupConnLimit | |||
Type: Numeric or Unlimited | Type: Numeric (non-negative) or Unlimited | |||
Default: Unlimited | Default: Unlimited | |||
If this property is an Integer, it controls the number of Connections | If this property is Numeric, it controls the number of Connections | |||
that can be accepted from a peer as new members of the Connection's | that can be accepted from a peer as new members of the Connection's | |||
group. Similar to SetNewConnectionLimit(), this limits the number of | group. Similar to SetNewConnectionLimit(), this limits the number of | |||
ConnectionReceived Events that will occur, but constrained to the | ConnectionReceived Events that will occur, but constrained to the | |||
group of the Connection associated with this property. For a multi- | group of the Connection associated with this property. For a multi- | |||
streaming transport, this limits the number of allowed streams. | streaming transport, this limits the number of allowed streams. | |||
8.1.10. Isolate Session | 8.1.10. Isolate Session | |||
Name: isolateSession | Name: isolateSession | |||
skipping to change at page 52, line 19 ¶ | skipping to change at page 52, line 14 ¶ | |||
8.1.11. Read-only Connection Properties | 8.1.11. Read-only Connection Properties | |||
The following generic Connection Properties are read-only, i.e. they | The following generic Connection Properties are read-only, i.e. they | |||
cannot be changed by an application. | cannot be changed by an application. | |||
8.1.11.1. Maximum Message Size Concurrent with Connection Establishment | 8.1.11.1. Maximum Message Size Concurrent with Connection Establishment | |||
Name: zeroRttMsgMaxLen | Name: zeroRttMsgMaxLen | |||
Type: Integer | Type: Integer (non-negative) | |||
This property represents the maximum Message size that can be sent | This property represents the maximum Message size that can be sent | |||
before or during Connection establishment, see also Section 9.1.3.4. | before or during Connection establishment, see also Section 9.1.3.4. | |||
It is specified as the number of bytes. | It is specified as the number of bytes. | |||
8.1.11.2. Maximum Message Size Before Fragmentation or Segmentation | 8.1.11.2. Maximum Message Size Before Fragmentation or Segmentation | |||
Name: singularTransmissionMsgMaxLen | Name: singularTransmissionMsgMaxLen | |||
Type: Integer | Type: Integer (non-negative) or Not applicable | |||
This property, if applicable, represents the maximum Message size | This property, if applicable, represents the maximum Message size | |||
that can be sent without incurring network-layer fragmentation at the | that can be sent without incurring network-layer fragmentation at the | |||
sender. It is specified as the number of bytes. It exposes a value | sender. It is specified as the number of bytes. It exposes a value | |||
to the application based on the Maximum Packet Size (MPS) as | to the application based on the Maximum Packet Size (MPS) as | |||
described in Datagram PLPMTUD [RFC8899]. This can allow a sending | described in Datagram PLPMTUD [RFC8899]. This can allow a sending | |||
stack to avoid unwanted fragmentation at the network-layer or | stack to avoid unwanted fragmentation at the network-layer or | |||
segmentation by the transport layer. | segmentation by the transport layer. | |||
8.1.11.3. Maximum Message Size on Send | 8.1.11.3. Maximum Message Size on Send | |||
Name: sendMsgMaxLen | Name: sendMsgMaxLen | |||
Type: Integer | Type: Integer (non-negative) | |||
This property represents the maximum Message size that an application | This property represents the maximum Message size that an application | |||
can send. It is specified as the nummber of bytes. | can send. It is specified as the number of bytes. | |||
8.1.11.4. Maximum Message Size on Receive | 8.1.11.4. Maximum Message Size on Receive | |||
Name: recvMsgMaxLen | Name: recvMsgMaxLen | |||
Type: Integer | Type: Integer (non-negative) | |||
This numeric property represents the maximum Message size that an | ||||
application can receive. It specified as the number of bytes. | This property represents the maximum Message size that an application | |||
can receive. It specified as the number of bytes. | ||||
8.2. TCP-specific Properties: User Timeout Option (UTO) | 8.2. TCP-specific Properties: User Timeout Option (UTO) | |||
These properties specify configurations for the User Timeout Option | These properties specify configurations for the User Timeout Option | |||
(UTO), in the case that TCP becomes the chosen transport protocol. | (UTO), in the case that TCP becomes the chosen transport protocol. | |||
Implementation is optional and useful only if TCP is implemented in | Implementation is optional and useful only if TCP is implemented in | |||
the Transport Services system. | the Transport Services system. | |||
These TCP-specific properties are included here because the feature | These TCP-specific properties are included here because the feature | |||
Suggest timeout to the peer is part of the minimal set of transport | Suggest timeout to the peer is part of the minimal set of transport | |||
skipping to change at page 53, line 33 ¶ | skipping to change at page 53, line 31 ¶ | |||
All of the below properties are optional (e.g., it is possible to | All of the below properties are optional (e.g., it is possible to | |||
specify User Timeout Enabled as true, but not specify an Advertised | specify User Timeout Enabled as true, but not specify an Advertised | |||
User Timeout value; in this case, the TCP default will be used). | User Timeout value; in this case, the TCP default will be used). | |||
These properties reflect the API extension specified in Section 3 of | These properties reflect the API extension specified in Section 3 of | |||
[RFC5482]. | [RFC5482]. | |||
8.2.1. Advertised User Timeout | 8.2.1. Advertised User Timeout | |||
Name: tcp.userTimeoutValue | Name: tcp.userTimeoutValue | |||
Type: Integer | Type: Integer (non-negative) | |||
Default: the TCP default | Default: the TCP default | |||
This time value is advertised via the TCP User Timeout Option (UTO) | This time value is advertised via the TCP User Timeout Option (UTO) | |||
[RFC5482] at the Remote Endpoint to adapt its own Timeout for | [RFC5482] at the Remote Endpoint to adapt its own Timeout for | |||
aborting Connection (see Section 8.1.3) value. | aborting Connection (see Section 8.1.3) value. | |||
8.2.2. User Timeout Enabled | 8.2.2. User Timeout Enabled | |||
Name: tcp.userTimeoutEnabled | Name: tcp.userTimeoutEnabled | |||
skipping to change at page 54, line 13 ¶ | skipping to change at page 54, line 13 ¶ | |||
connection. This applies to both sending and receiving. | connection. This applies to both sending and receiving. | |||
8.2.3. Timeout Changeable | 8.2.3. Timeout Changeable | |||
Name: tcp.userTimeoutChangeable | Name: tcp.userTimeoutChangeable | |||
Type: Boolean | Type: Boolean | |||
Default: true | Default: true | |||
This property controls whether the Timeout for aborting Connection | This property controls whether the connTimeout (see Section 8.1.3) | |||
(see Section 8.1.3) may be changed based on a UTO option received | may be changed based on a UTO option received from the remote peer. | |||
from the remote peer. This boolean becomes false when Timeout for | This boolean becomes false when connTimeout (see Section 8.1.3) is | |||
aborting Connection (see Section 8.1.3) is used. | used. | |||
8.3. Connection Lifecycle Events | 8.3. Connection Lifecycle Events | |||
During the lifetime of a connection there are events that can occur | During the lifetime of a connection there are events that can occur | |||
when configured. | when configured. | |||
8.3.1. Soft Errors | 8.3.1. Soft Errors | |||
Asynchronous introspection is also possible, via the SoftError Event. | Asynchronous introspection is also possible, via the SoftError Event. | |||
This event informs the application about the receipt and contents of | This event informs the application about the receipt and contents of | |||
skipping to change at page 59, line 7 ¶ | skipping to change at page 59, line 7 ¶ | |||
The Message Properties could be inconsistent with the properties of | The Message Properties could be inconsistent with the properties of | |||
the Protocol Stacks underlying the Connection on which a given | the Protocol Stacks underlying the Connection on which a given | |||
Message is sent. For example, a Protocol Stack must be able to | Message is sent. For example, a Protocol Stack must be able to | |||
provide ordering if the msgOrdered property of a Message is enabled. | provide ordering if the msgOrdered property of a Message is enabled. | |||
Sending a Message with Message Properties inconsistent with the | Sending a Message with Message Properties inconsistent with the | |||
Selection Properties of the Connection yields an error. | Selection Properties of the Connection yields an error. | |||
If a Message Property contradicts a Connection Property, and if this | If a Message Property contradicts a Connection Property, and if this | |||
per-Message behavior can be supported, it overrides the Connection | per-Message behavior can be supported, it overrides the Connection | |||
Property for the specific Message. For example, if Reliable Data | Property for the specific Message. For example, if reliability is | |||
Transfer (Connection) is set to Require and a protocol with | set to Require and a protocol with configurable per-Message | |||
configurable per-Message reliability is used, setting Reliable Data | reliability is used, setting msgReliable to false for a particular | |||
Transfer (Message) to false for a particular Message will allow this | Message will allow this Message to be sent without any reliability | |||
Message to be sent without any reliability guarantees. Changing the | guarantees. Changing the msgReliable Message Property is only | |||
Reliable Data Transfer property on Messages is only possible for | possible for Connections that were established enabling the Selection | |||
Connections that were established enabling the Selection Property | Property perMsgReliability. | |||
Configure Per-Message Reliability. | ||||
The following Message Properties are supported: | The following Message Properties are supported: | |||
9.1.3.1. Lifetime | 9.1.3.1. Lifetime | |||
Name: msgLifetime | Name: msgLifetime | |||
Type: Numeric | Type: Numeric (non-negative) | |||
Default: infinite | Default: infinite | |||
The Lifetime specifies how long a particular Message can wait to be | The Lifetime specifies how long a particular Message can wait to be | |||
sent to the Remote Endpoint before it is irrelevant and no longer | sent to the Remote Endpoint before it is irrelevant and no longer | |||
needs to be (re-)transmitted. This is a hint to the Transport | needs to be (re-)transmitted. This is a hint to the Transport | |||
Services implementation - it is not guaranteed that a Message will | Services implementation -- it is not guaranteed that a Message will | |||
not be sent when its Lifetime has expired. | not be sent when its Lifetime has expired. | |||
Setting a Message's Lifetime to infinite indicates that the | Setting a Message's Lifetime to infinite indicates that the | |||
application does not wish to apply a time constraint on the | application does not wish to apply a time constraint on the | |||
transmission of the Message, but it does not express a need for | transmission of the Message, but it does not express a need for | |||
reliable delivery; reliability is adjustable per Message via the | reliable delivery; reliability is adjustable per Message via the | |||
Reliable Data Transfer (Message) property (see Section 9.1.3.7). The | perMsgReliability property (see Section 9.1.3.7). The type and units | |||
type and units of Lifetime are implementation-specific. | of Lifetime are implementation-specific. | |||
9.1.3.2. Priority | 9.1.3.2. Priority | |||
Name: msgPriority | Name: msgPriority | |||
Type: Integer (non-negative) | Type: Integer (non-negative) | |||
Default: 100 | Default: 100 | |||
This property specifies the priority of a Message, relative to other | This property specifies the priority of a Message, relative to other | |||
Messages sent over the same Connection. | Messages sent over the same Connection. | |||
A Message with Priority 0 will yield to a Message with Priority 1, | A Message with Priority 0 will yield to a Message with Priority 1, | |||
which will yield to a Message with Priority 2, and so on. Priorities | which will yield to a Message with Priority 2, and so on. Priorities | |||
may be used as a sender-side scheduling construct only, or be used to | may be used as a sender-side scheduling construct only, or be used to | |||
specify priorities on the wire for Protocol Stacks supporting | specify priorities on the wire for Protocol Stacks supporting | |||
prioritization. | prioritization. | |||
Note that this property is not a per-message override of the | Note that this property is not a per-message override of connPriority | |||
Connection Priority - see Section 8.1.2. The Priority properties may | - see Section 8.1.2. The priority properties may interact, but can | |||
interact, but can be used independently and be realized by different | be used independently and be realized by different mechanisms; see | |||
mechanisms; see Section 9.2.6. | Section 9.2.6. | |||
9.1.3.3. Ordered | 9.1.3.3. Ordered | |||
Name: msgOrdered | Name: msgOrdered | |||
Type: Boolean | Type: Boolean | |||
Default: the queried Boolean value of the Selection Property | Default: the queried Boolean value of the Selection Property | |||
preserveOrder (Section 6.2.4) | preserveOrder (Section 6.2.4) | |||
skipping to change at page 60, line 48 ¶ | skipping to change at page 60, line 48 ¶ | |||
preserveOrder of the Connection associated with the Send Action. | preserveOrder of the Connection associated with the Send Action. | |||
9.1.3.4. Safely Replayable | 9.1.3.4. Safely Replayable | |||
Name: safelyReplayable | Name: safelyReplayable | |||
Type: Boolean | Type: Boolean | |||
Default: false | Default: false | |||
If true, Safely Replayable specifies that a Message is safe to send | If true, safelyReplayable specifies that a Message is safe to send to | |||
to the Remote Endpoint more than once for a single Send Action. It | the Remote Endpoint more than once for a single Send Action. It | |||
marks the data as safe for certain 0-RTT establishment techniques, | marks the data as safe for certain 0-RTT establishment techniques, | |||
where retransmission of the 0-RTT data may cause the remote | where retransmission of the 0-RTT data may cause the remote | |||
application to receive the Message multiple times. | application to receive the Message multiple times. | |||
For protocols that do not protect against duplicated messages, e.g., | For protocols that do not protect against duplicated messages, e.g., | |||
UDP, all messages need to be marked as Safely Replayable. To enable | UDP, all messages need to be marked as "safely replayable" by | |||
protocol selection to choose such a protocol, Safely Replayable needs | enabling this property. To enable protocol selection to choose such | |||
to be added to the TransportProperties passed to the Preconnection. | a protocol, safelyReplayable needs to be added to the | |||
If such a protocol was chosen, disabling Safely Replayable on | TransportProperties passed to the Preconnection. If such a protocol | |||
individual messages MUST result in a SendError. | was chosen, disabling safelyReplayable on individual messages MUST | |||
result in a SendError. | ||||
9.1.3.5. Final | 9.1.3.5. Final | |||
Name: final | Name: final | |||
Type: Boolean | Type: Boolean | |||
Default: false | Default: false | |||
If true, this indicates a Message is the last that the application | If true, this indicates a Message is the last that the application | |||
skipping to change at page 61, line 40 ¶ | skipping to change at page 61, line 41 ¶ | |||
Messages. The Final property overrides Priority and any other | Messages. The Final property overrides Priority and any other | |||
property that would re-order Messages. If another Message is sent | property that would re-order Messages. If another Message is sent | |||
after a Message marked as Final has already been sent on a | after a Message marked as Final has already been sent on a | |||
Connection, the Send Action for the new Message will cause a | Connection, the Send Action for the new Message will cause a | |||
SendError Event. | SendError Event. | |||
9.1.3.6. Sending Corruption Protection Length | 9.1.3.6. Sending Corruption Protection Length | |||
Name: msgChecksumLen | Name: msgChecksumLen | |||
Type: Integer or Full Coverage | Type: Integer (non-negative) or Full Coverage | |||
Default: Full Coverage | Default: Full Coverage | |||
If this property is an Integer, it specifies the minimum length of | If this property is an Integer, it specifies the minimum length of | |||
the section of a sent Message, starting from byte 0, that the | the section of a sent Message, starting from byte 0, that the | |||
application requires to be delivered without corruption due to lower | application requires to be delivered without corruption due to lower | |||
layer errors. It is used to specify options for simple integrity | layer errors. It is used to specify options for simple integrity | |||
protection via checksums. A value of 0 means that no checksum needs | protection via checksums. A value of 0 means that no checksum needs | |||
to be calculated, and the enumerated value Full Coverage means that | to be calculated, and the enumerated value Full Coverage means that | |||
the entire Message needs to be protected by a checksum. Only Full | the entire Message needs to be protected by a checksum. Only Full | |||
Coverage is guaranteed, any other requests are advisory, which may | Coverage is guaranteed, any other requests are advisory, which may | |||
result in Full Coverage being applied. | result in Full Coverage being applied. | |||
skipping to change at page 62, line 16 ¶ | skipping to change at page 62, line 25 ¶ | |||
Name: msgReliable | Name: msgReliable | |||
Type: Boolean | Type: Boolean | |||
Default: the queried Boolean value of the Selection Property | Default: the queried Boolean value of the Selection Property | |||
reliability (Section 6.2.1) | reliability (Section 6.2.1) | |||
When true, this property specifies that a Message should be sent in | When true, this property specifies that a Message should be sent in | |||
such a way that the transport protocol ensures all data is received | such a way that the transport protocol ensures all data is received | |||
on the other side without corruption. Changing the Reliable Data | on the other side without corruption. Changing the msgReliable | |||
Transfer property on Messages is only possible for Connections that | property on Messages is only possible for Connections that were | |||
were established enabling the Selection Property Configure Per- | established enabling the Selection Property perMsgReliability. When | |||
Message Reliability. When this is not the case, changing msgReliable | this is not the case, changing msgReliable will generate an error. | |||
will generate an error. | ||||
Disabling this property indicates that the Transport Services system | Disabling this property indicates that the Transport Services system | |||
may disable retransmissions or other reliability mechanisms for this | may disable retransmissions or other reliability mechanisms for this | |||
particular Message, but such disabling is not guaranteed. | particular Message, but such disabling is not guaranteed. | |||
If it is not configured by the application before sending, this | If it is not configured by the application before sending, this | |||
property's default value will be based on the Selection Property | property's default value will be based on the Selection Property | |||
reliability of the Connection associated with the Send Action. | reliability of the Connection associated with the Send Action. | |||
9.1.3.8. Message Capacity Profile Override | 9.1.3.8. Message Capacity Profile Override | |||
Name: msgCapacityProfile | Name: msgCapacityProfile | |||
Type: Enumeration | Type: Enumeration | |||
Default: inherited from the Connection Property connCapacityProfile | Default: inherited from the Connection Property connCapacityProfile | |||
(Section 8.1.6) | (Section 8.1.6) | |||
This enumerated property specifies the application's preferred | This enumerated property specifies the application's preferred | |||
tradeoffs for sending this Message; it is a per-Message override of | tradeoffs for sending this Message; it is a per-Message override of | |||
the Capacity Profile connection property (see Section 8.1.6). If it | the connCapacityProfile Connection Property (see Section 8.1.6). If | |||
is not configured by the application before sending, this property's | it is not configured by the application before sending, this | |||
default value will be based on the Connection Property | property's default value will be based on the Connection Property | |||
connCapacityProfile of the Connection associated with the Send | connCapacityProfile of the Connection associated with the Send | |||
Action. | Action. | |||
9.1.3.9. No Network-Layer Fragmentation | 9.1.3.9. No Network-Layer Fragmentation | |||
Name: noFragmentation | Name: noFragmentation | |||
Type: Boolean | Type: Boolean | |||
Default: false | Default: false | |||
This property specifies that a message should be sent and received | This property specifies that a message should be sent and received | |||
without network-layer fragmentation, if possible. It can be used to | without network-layer fragmentation, if possible. It can be used to | |||
avoid network layer fragmentation when transport segmentation is | avoid network layer fragmentation when transport segmentation is | |||
prefered. | prefered. | |||
This only takes effect when the transport uses a network layer that | This only takes effect when the transport uses a network layer that | |||
supports this functionality. When it does take effect, setting this | supports this functionality. When it does take effect, setting this | |||
property to true will cause the sender to avoid network-layer source | property to true will cause the sender to avoid network-layer source | |||
skipping to change at page 63, line 14 ¶ | skipping to change at page 63, line 29 ¶ | |||
Default: false | Default: false | |||
This property specifies that a message should be sent and received | This property specifies that a message should be sent and received | |||
without network-layer fragmentation, if possible. It can be used to | without network-layer fragmentation, if possible. It can be used to | |||
avoid network layer fragmentation when transport segmentation is | avoid network layer fragmentation when transport segmentation is | |||
prefered. | prefered. | |||
This only takes effect when the transport uses a network layer that | This only takes effect when the transport uses a network layer that | |||
supports this functionality. When it does take effect, setting this | supports this functionality. When it does take effect, setting this | |||
property to true will cause the sender to avoid network-layer source | property to true will cause the sender to avoid network-layer source | |||
frgementation. When using IPv4, this will result in the Don't | fragmentation. When using IPv4, this will result in the Don't | |||
Fragment bit being set in the IP header. | Fragment bit being set in the IP header. | |||
Attempts to send a message with this property that result in a size | Attempts to send a message with this property that result in a size | |||
greater than the transport's current estimate of its maximum packet | greater than the transport's current estimate of its maximum packet | |||
size (singularTransmissionMsgMaxLen) can result in transport | size (singularTransmissionMsgMaxLen) can result in transport | |||
segmentation when permitted, or in a SendError. | segmentation when permitted, or in a SendError. | |||
Note: noSegmentation should be used when it is desired to only send a | Note: noSegmentation should be used when it is desired to only send a | |||
message within a single network packet. | message within a single network packet. | |||
skipping to change at page 63, line 32 ¶ | skipping to change at page 64, line 4 ¶ | |||
Note: noSegmentation should be used when it is desired to only send a | Note: noSegmentation should be used when it is desired to only send a | |||
message within a single network packet. | message within a single network packet. | |||
9.1.3.10. No Segmentation | 9.1.3.10. No Segmentation | |||
Name: noSegmentation | Name: noSegmentation | |||
Type: Boolean | Type: Boolean | |||
Default: false | Default: false | |||
When set to true, this property requests the transport layer to not | When set to true, this property requests the transport layer to not | |||
provide segmentation of messages larger than the maximum size | provide segmentation of messages larger than the maximum size | |||
permitted by the network layer, and also to avoid network-layer | permitted by the network layer, and also to avoid network-layer | |||
source fragmentation of messages. When running over IPv4, setting | source fragmentation of messages. When running over IPv4, setting | |||
this property to true can result in a sending endpount setting the | this property to true will result in a sending endpount setting the | |||
Don't Fragment bit in the IPv4 header of packets generated by the | Don't Fragment bit in the IPv4 header of packets generated by the | |||
transport layer. An attempt to send a message that results in a size | transport layer. | |||
greater than the transport's current estimate of its maximum packet | ||||
size (singularTransmissionMsgMaxLen) will result in a SendError. | An attempt to send a message that results in a size greater than the | |||
This only takes effect when the transport and network layer support | transport's current estimate of its maximum packet size | |||
this functionality. | (singularTransmissionMsgMaxLen) will result in a SendError. This | |||
only takes effect when the transport and network layer support this | ||||
functionality. | ||||
9.2. Sending Data | 9.2. Sending Data | |||
Once a Connection has been established, it can be used for sending | Once a Connection has been established, it can be used for sending | |||
Messages. By default, Send enqueues a complete Message, and takes | Messages. By default, Send enqueues a complete Message, and takes | |||
optional per-Message properties (see Section 9.2.1). All Send | optional per-Message properties (see Section 9.2.1). All Send | |||
actions are asynchronous, and deliver Events (see Section 9.2.2). | actions are asynchronous, and deliver Events (see Section 9.2.2). | |||
Sending partial Messages for streaming large data is also supported | Sending partial Messages for streaming large data is also supported | |||
(see Section 9.2.3). | (see Section 9.2.3). | |||
skipping to change at page 64, line 34 ¶ | skipping to change at page 65, line 4 ¶ | |||
described in Section 9.2.3. | described in Section 9.2.3. | |||
9.2.1. Basic Sending | 9.2.1. Basic Sending | |||
The most basic form of sending on a connection involves enqueuing a | The most basic form of sending on a connection involves enqueuing a | |||
single Data block as a complete Message with default Message | single Data block as a complete Message with default Message | |||
Properties. | Properties. | |||
messageData := "hello" | messageData := "hello" | |||
Connection.Send(messageData) | Connection.Send(messageData) | |||
The interpretation of a Message to be sent is dependent on the | The interpretation of a Message to be sent is dependent on the | |||
implementation, and on the constraints on the Protocol Stacks implied | implementation, and on the constraints on the Protocol Stacks implied | |||
by the Connection's transport properties. For example, a Message may | by the Connection's transport properties. For example, a Message may | |||
be a single datagram for UDP Connections; or an HTTP Request for HTTP | be a single datagram for UDP Connections; or an HTTP Request for HTTP | |||
Connections. | Connections. | |||
Some transport protocols can deliver arbitrarily sized Messages, but | Some transport protocols can deliver arbitrarily sized Messages, but | |||
other protocols constrain the maximum Message size. Applications can | other protocols constrain the maximum Message size. Applications can | |||
query the Connection Property "Maximum Message size on send" | query the Connection Property sendMsgMaxLen (Section 8.1.11.3) to | |||
(Section 8.1.11.3) to determine the maximum size allowed for a single | determine the maximum size allowed for a single Message. If a | |||
Message. If a Message is too large to fit in the Maximum Message | Message is too large to fit in the Maximum Message Size for the | |||
Size for the Connection, the Send will fail with a SendError event | Connection, the Send will fail with a SendError event | |||
(Section 9.2.2.3). For example, it is invalid to send a Message over | (Section 9.2.2.3). For example, it is invalid to send a Message over | |||
a UDP connection that is larger than the available datagram sending | a UDP connection that is larger than the available datagram sending | |||
size. | size. | |||
9.2.2. Send Events | 9.2.2. Send Events | |||
Like all Actions in Transport Services API, the Send Action is | Like all Actions in Transport Services API, the Send Action is | |||
asynchronous. There are several Events that can be delivered in | asynchronous. There are several Events that can be delivered in | |||
response to Sending a Message. Exactly one Event (Sent, Expired, or | response to Sending a Message. Exactly one Event (Sent, Expired, or | |||
SendError) will be delivered in response to each call to Send. | SendError) will be delivered in response to each call to Send. | |||
skipping to change at page 67, line 22 ¶ | skipping to change at page 67, line 46 ¶ | |||
9.2.5. Send on Active Open: InitiateWithSend | 9.2.5. Send on Active Open: InitiateWithSend | |||
For application-layer protocols where the Connection initiator also | For application-layer protocols where the Connection initiator also | |||
sends the first message, the InitiateWithSend() action combines | sends the first message, the InitiateWithSend() action combines | |||
Connection initiation with a first Message sent: | Connection initiation with a first Message sent: | |||
Connection := Preconnection.InitiateWithSend(messageData, messageContext?, timeout?) | Connection := Preconnection.InitiateWithSend(messageData, messageContext?, timeout?) | |||
Whenever possible, a messageContext should be provided to declare the | Whenever possible, a messageContext should be provided to declare the | |||
Message passed to InitiateWithSend as Safely Replayable. This allows | Message passed to InitiateWithSend as "safely replayable" using the | |||
the Transport Services system to make use of 0-RTT establishment in | safelyReplayable property. This allows the Transport Services system | |||
case this is supported by the available protocol stacks. When the | to make use of 0-RTT establishment in case this is supported by the | |||
selected stack(s) do not support transmitting data upon connection | available protocol stacks. When the selected stack(s) do not support | |||
establishment, InitiateWithSend is identical to Initiate() followed | transmitting data upon connection establishment, InitiateWithSend is | |||
by Send(). | identical to Initiate() followed by Send(). | |||
Neither partial sends nor send batching are supported by | Neither partial sends nor send batching are supported by | |||
InitiateWithSend(). | InitiateWithSend(). | |||
The Events that may be sent after InitiateWithSend() are equivalent | The Events that may be sent after InitiateWithSend() are equivalent | |||
to those that would be sent by an invocation of Initiate() followed | to those that would be sent by an invocation of Initiate() followed | |||
immediately by an invocation of Send(), with the caveat that a send | immediately by an invocation of Send(), with the caveat that a send | |||
failure that occurs because the Connection could not be established | failure that occurs because the Connection could not be established | |||
will not result in a SendError separate from the EstablishmentError | will not result in a SendError separate from the EstablishmentError | |||
signaling the failure of Connection establishment. | signaling the failure of Connection establishment. | |||
9.2.6. Priority and the Transport Services API | 9.2.6. Priority and the Transport Services API | |||
The Transport Services API provides two properties to allow a sender | The Transport Services API provides two properties to allow a sender | |||
to signal the relative priority of data transmission: the Priority | to signal the relative priority of data transmission: msgPriority | |||
Message Property Section 9.1.3.2, and the Connection Priority | Section 9.1.3.2 and connPriority Section 8.1.2. These properties are | |||
Connection Property Section 8.1.2. These properties are designed to | designed to allow the expression and implementation of a wide variety | |||
allow the expression and implementation of a wide variety of | of approaches to transmission priority in the transport and | |||
approaches to transmission priority in the transport and application | application layer, including those which do not appear on the wire | |||
layer, including those which do not appear on the wire (affecting | (affecting only sender-side transmission scheduling) as well as those | |||
only sender-side transmission scheduling) as well as those that do | that do (e.g. [I-D.ietf-httpbis-priority]. | |||
(e.g. [I-D.ietf-httpbis-priority]. | ||||
A Transport Services system gives no guarantees about how its | A Transport Services system gives no guarantees about how its | |||
expression of relative priorities will be realized. However, the | expression of relative priorities will be realized. However, the | |||
Transport Services system will seek to ensure that performance of | Transport Services system will seek to ensure that performance of | |||
relatively-prioritized connections and messages is not worse with | relatively-prioritized connections and messages is not worse with | |||
respect to those connections and messages than an equivalent | respect to those connections and messages than an equivalent | |||
configuration in which all prioritization properties are left at | configuration in which all prioritization properties are left at | |||
their defaults. | their defaults. | |||
The Transport Services API does order Connection Priority over the | The Transport Services API does order connPriority over msgPriority. | |||
Priority Message Property. In the absense of other externalities | In the absense of other externalities (e.g., transport-layer flow | |||
(e.g., transport-layer flow control), a priority 1 Message on a | control), a priority 1 Message on a priority 0 Connection will be | |||
priority 0 Connection will be sent before a priority 0 Message on a | sent before a priority 0 Message on a priority 1 Connection in the | |||
priority 1 Connection in the same group. | same group. | |||
9.3. Receiving Data | 9.3. Receiving Data | |||
Once a Connection is established, it can be used for receiving data | Once a Connection is established, it can be used for receiving data | |||
(unless the Direction of Communication property is set to | (unless the direction property is set to unidirectional send). As | |||
unidirectional send). As with sending, the data is received in | with sending, the data is received in Messages. Receiving is an | |||
Messages. Receiving is an asynchronous operation, in which each call | asynchronous operation, in which each call to Receive enqueues a | |||
to Receive enqueues a request to receive new data from the | request to receive new data from the connection. Once data has been | |||
connection. Once data has been received, or an error is encountered, | received, or an error is encountered, an event will be delivered to | |||
an event will be delivered to complete any pending Receive requests | complete any pending Receive requests (see Section 9.3.2). If | |||
(see Section 9.3.2). If Messages arrive at the Transport Services | Messages arrive at the Transport Services system before Receive | |||
system before Receive requests are issued, ensuing Receive requests | requests are issued, ensuing Receive requests will first operate on | |||
will first operate on these Messages before awaiting any further | these Messages before awaiting any further Messages. | |||
Messages. | ||||
9.3.1. Enqueuing Receives | 9.3.1. Enqueuing Receives | |||
Receive takes two parameters to specify the length of data that an | Receive takes two parameters to specify the length of data that an | |||
application is willing to receive, both of which are optional and | application is willing to receive, both of which are optional and | |||
have default values if not specified. | have default values if not specified. | |||
Connection.Receive(minIncompleteLength?, maxLength?) | Connection.Receive(minIncompleteLength?, maxLength?) | |||
By default, Receive will try to deliver complete Messages in a single | By default, Receive will try to deliver complete Messages in a single | |||
skipping to change at page 71, line 28 ¶ | skipping to change at page 71, line 50 ¶ | |||
A ReceiveError occurs when data is received by the underlying | A ReceiveError occurs when data is received by the underlying | |||
Protocol Stack that cannot be fully retrieved or parsed, and when it | Protocol Stack that cannot be fully retrieved or parsed, and when it | |||
is useful for the application to be notified of such errors. For | is useful for the application to be notified of such errors. For | |||
example, a ReceiveError can indicate that a Message (identified via | example, a ReceiveError can indicate that a Message (identified via | |||
the MessageContext) that was being partially received previously, but | the MessageContext) that was being partially received previously, but | |||
had not completed, encountered an error and will not be completed. | had not completed, encountered an error and will not be completed. | |||
This can be useful for an application, which may want to use this | This can be useful for an application, which may want to use this | |||
error as a hint to remove previously received Message parts from | error as a hint to remove previously received Message parts from | |||
memory. As another example, if an incoming Message does not fulfill | memory. As another example, if an incoming Message does not fulfill | |||
the Required Minimum Corruption Protection Coverage for Receiving | the recvChecksumLen property (see Section 8.1.1), an application can | |||
property (see Section 8.1.1), an application can use this error as a | use this error as a hint to inform the peer application to adjust the | |||
hint to inform the peer application to adjust the Sending Corruption | msgChecksumLen property (see Section 9.1.3.6). | |||
Protection Length property (see Section 9.1.3.6). | ||||
In contrast, internal protocol reception errors (e.g., loss causing | In contrast, internal protocol reception errors (e.g., loss causing | |||
retransmissions in TCP) are not signalled by this Event. Conditions | retransmissions in TCP) are not signalled by this Event. Conditions | |||
that irrevocably lead to the termination of the Connection are | that irrevocably lead to the termination of the Connection are | |||
signaled using ConnectionError (see Section 10). | signaled using ConnectionError (see Section 10). | |||
9.3.3. Receive Message Properties | 9.3.3. Receive Message Properties | |||
Each Message Context may contain metadata from protocols in the | Each Message Context may contain metadata from protocols in the | |||
Protocol Stack; which metadata is available is Protocol Stack | Protocol Stack; which metadata is available is Protocol Stack | |||
skipping to change at page 72, line 38 ¶ | skipping to change at page 73, line 11 ¶ | |||
data is enabled, applications should check this metadata field for | data is enabled, applications should check this metadata field for | |||
Messages received during connection establishment and respond | Messages received during connection establishment and respond | |||
accordingly. | accordingly. | |||
9.3.3.3. Receiving Final Messages | 9.3.3.3. Receiving Final Messages | |||
The Message Context can indicate whether or not this Message is the | The Message Context can indicate whether or not this Message is the | |||
Final Message on a Connection. For any Message that is marked as | Final Message on a Connection. For any Message that is marked as | |||
Final, the application can assume that there will be no more Messages | Final, the application can assume that there will be no more Messages | |||
received on the Connection once the Message has been completely | received on the Connection once the Message has been completely | |||
delivered. This corresponds to the Final property that may be marked | delivered. This corresponds to the final property that may be marked | |||
on a sent Message, see Section 9.1.3.5. | on a sent Message, see Section 9.1.3.5. | |||
Some transport protocols and peers do not support signaling of the | Some transport protocols and peers do not support signaling of the | |||
Final property. Applications therefore should not rely on receiving | final property. Applications therefore should not rely on receiving | |||
a Message marked Final to know that the sending endpoint is done | a Message marked Final to know that the sending endpoint is done | |||
sending on a connection. | sending on a connection. | |||
Any calls to Receive once the Final Message has been delivered will | Any calls to Receive once the Final Message has been delivered will | |||
result in errors. | result in errors. | |||
10. Connection Termination | 10. Connection Termination | |||
A Connection can be terminated i) by the Local Endpoint (i.e., the | A Connection can be terminated i) by the Local Endpoint (i.e., the | |||
application calls the Close, CloseGroup, Abort or AbortGroup Action), | application calls the Close, CloseGroup, Abort or AbortGroup Action), | |||
skipping to change at page 77, line 6 ¶ | skipping to change at page 77, line 12 ¶ | |||
However, as the Transport Services system is responsible for network | However, as the Transport Services system is responsible for network | |||
communication, it is in the position to potentially share any | communication, it is in the position to potentially share any | |||
information provided by the application with the network or another | information provided by the application with the network or another | |||
communication peer. Most of the information provided over the | communication peer. Most of the information provided over the | |||
Transport Services API are useful to configure and select protocols | Transport Services API are useful to configure and select protocols | |||
and paths and are not necessarily privacy sensitive. Still, some | and paths and are not necessarily privacy sensitive. Still, some | |||
information could be privacy sensitive because it might reveal usage | information could be privacy sensitive because it might reveal usage | |||
characteristics and habits of the user of an application. | characteristics and habits of the user of an application. | |||
Of course any communication over a network reveals usage | Of course any communication over a network reveals usage | |||
characteristics, as all packets, as well as their timing and size, | characteristics, because all packets, as well as their timing and | |||
are part of the network-visible wire image [RFC8546]. However, the | size, are part of the network-visible wire image [RFC8546]. However, | |||
selection of a protocol and its configuration also impacts which | the selection of a protocol and its configuration also impacts which | |||
information is visible, potentially in clear text, and which other | information is visible, potentially in clear text, and which other | |||
entities can access it. In most cases, information provided for | entities can access it. In most cases, information provided for | |||
protocol and path selection should not directly translate to | protocol and path selection should not directly translate to | |||
information that can be observed by network devices on the path. | information that can be observed by network devices on the path. | |||
However, there might be specific configuration information that is | However, there might be specific configuration information that is | |||
intended for path exposure, e.g., a DiffServ codepoint setting, that | intended for path exposure, e.g., a DiffServ codepoint setting, that | |||
is either provided directly by the application or indirectly | is either provided directly by the application or indirectly | |||
configured for a traffic profile. | configured for a traffic profile. | |||
Applications should be aware that communication attempts can lead to | Applications should be aware that communication attempts can lead to | |||
skipping to change at page 77, line 52 ¶ | skipping to change at page 78, line 10 ¶ | |||
These communication activities are not different from what is used | These communication activities are not different from what is used | |||
today. However, the goal of a Transport Services system is to | today. However, the goal of a Transport Services system is to | |||
support such mechanisms as a generic service within the transport | support such mechanisms as a generic service within the transport | |||
layer. This enables applications to more dynamically benefit from | layer. This enables applications to more dynamically benefit from | |||
innovations and new protocols in the transport, although it reduces | innovations and new protocols in the transport, although it reduces | |||
transparency of the underlying communication actions to the | transparency of the underlying communication actions to the | |||
application itself. The Transport Services API is designed such that | application itself. The Transport Services API is designed such that | |||
protocol and path selection can be limited to a small and controlled | protocol and path selection can be limited to a small and controlled | |||
set if required by the application for functional or security | set if required by the application for functional or security | |||
purposes. Further, A Transport Services system should provide an | purposes. Further, a Transport Services system should provide an | |||
interface to poll information about which protocol and path is | interface to poll information about which protocol and path is | |||
currently in use as well as provide logging about the communication | currently in use as well as provide logging about the communication | |||
events of each connection. | events of each connection. | |||
14. Acknowledgements | 14. Acknowledgements | |||
This work has received funding from the European Union's Horizon 2020 | This work has received funding from the European Union's Horizon 2020 | |||
research and innovation programme under grant agreements No. 644334 | research and innovation programme under grant agreements No. 644334 | |||
(NEAT) and No. 688421 (MAMI). | (NEAT) and No. 688421 (MAMI). | |||
skipping to change at page 78, line 39 ¶ | skipping to change at page 78, line 46 ¶ | |||
good questions based on implementation experience and for | good questions based on implementation experience and for | |||
contributing text, e.g., on multicast. | contributing text, e.g., on multicast. | |||
15. References | 15. References | |||
15.1. Normative References | 15.1. Normative References | |||
[I-D.ietf-taps-arch] | [I-D.ietf-taps-arch] | |||
Pauly, T., Trammell, B., Brunstrom, A., Fairhurst, G., and | Pauly, T., Trammell, B., Brunstrom, A., Fairhurst, G., and | |||
C. Perkins, "An Architecture for Transport Services", Work | C. Perkins, "An Architecture for Transport Services", Work | |||
in Progress, Internet-Draft, draft-ietf-taps-arch-12, 3 | in Progress, Internet-Draft, draft-ietf-taps-arch-13, 27 | |||
January 2022, <https://www.ietf.org/archive/id/draft-ietf- | June 2022, <https://datatracker.ietf.org/doc/html/draft- | |||
taps-arch-12.txt>. | ietf-taps-arch-13>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/rfc/rfc2119>. | |||
[RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, | [RFC2914] Floyd, S., "Congestion Control Principles", BCP 41, | |||
RFC 2914, DOI 10.17487/RFC2914, September 2000, | RFC 2914, DOI 10.17487/RFC2914, September 2000, | |||
<https://www.rfc-editor.org/info/rfc2914>. | <https://www.rfc-editor.org/rfc/rfc2914>. | |||
[RFC8084] Fairhurst, G., "Network Transport Circuit Breakers", | [RFC8084] Fairhurst, G., "Network Transport Circuit Breakers", | |||
BCP 208, RFC 8084, DOI 10.17487/RFC8084, March 2017, | BCP 208, RFC 8084, DOI 10.17487/RFC8084, March 2017, | |||
<https://www.rfc-editor.org/info/rfc8084>. | <https://www.rfc-editor.org/rfc/rfc8084>. | |||
[RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | [RFC8085] Eggert, L., Fairhurst, G., and G. Shepherd, "UDP Usage | |||
Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | Guidelines", BCP 145, RFC 8085, DOI 10.17487/RFC8085, | |||
March 2017, <https://www.rfc-editor.org/info/rfc8085>. | March 2017, <https://www.rfc-editor.org/rfc/rfc8085>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | |||
[RFC8303] Welzl, M., Tuexen, M., and N. Khademi, "On the Usage of | [RFC8303] Welzl, M., Tuexen, M., and N. Khademi, "On the Usage of | |||
Transport Features Provided by IETF Transport Protocols", | Transport Features Provided by IETF Transport Protocols", | |||
RFC 8303, DOI 10.17487/RFC8303, February 2018, | RFC 8303, DOI 10.17487/RFC8303, February 2018, | |||
<https://www.rfc-editor.org/info/rfc8303>. | <https://www.rfc-editor.org/rfc/rfc8303>. | |||
[RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8446>. | <https://www.rfc-editor.org/rfc/rfc8446>. | |||
[RFC8981] Gont, F., Krishnan, S., Narten, T., and R. Draves, | [RFC8981] Gont, F., Krishnan, S., Narten, T., and R. Draves, | |||
"Temporary Address Extensions for Stateless Address | "Temporary Address Extensions for Stateless Address | |||
Autoconfiguration in IPv6", RFC 8981, | Autoconfiguration in IPv6", RFC 8981, | |||
DOI 10.17487/RFC8981, February 2021, | DOI 10.17487/RFC8981, February 2021, | |||
<https://www.rfc-editor.org/info/rfc8981>. | <https://www.rfc-editor.org/rfc/rfc8981>. | |||
15.2. Informative References | 15.2. Informative References | |||
[I-D.ietf-httpbis-priority] | [I-D.ietf-httpbis-priority] | |||
Oku, K. and L. Pardue, "Extensible Prioritization Scheme | Oku, K. and L. Pardue, "Extensible Prioritization Scheme | |||
for HTTP", Work in Progress, Internet-Draft, draft-ietf- | for HTTP", Work in Progress, Internet-Draft, draft-ietf- | |||
httpbis-priority-12, 17 January 2022, | httpbis-priority-12, 17 January 2022, | |||
<https://www.ietf.org/archive/id/draft-ietf-httpbis- | <https://datatracker.ietf.org/doc/html/draft-ietf-httpbis- | |||
priority-12.txt>. | priority-12>. | |||
[I-D.ietf-taps-impl] | [I-D.ietf-taps-impl] | |||
Brunstrom, A., Pauly, T., Enghardt, T., Tiesel, P. S., and | Brunstrom, A., Pauly, T., Enghardt, T., Tiesel, P. S., and | |||
M. Welzl, "Implementing Interfaces to Transport Services", | M. Welzl, "Implementing Interfaces to Transport Services", | |||
Work in Progress, Internet-Draft, draft-ietf-taps-impl-11, | Work in Progress, Internet-Draft, draft-ietf-taps-impl-12, | |||
9 January 2022, <https://www.ietf.org/archive/id/draft- | 7 March 2022, <https://datatracker.ietf.org/doc/html/ | |||
ietf-taps-impl-11.txt>. | draft-ietf-taps-impl-12>. | |||
[RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | [RFC2474] Nichols, K., Blake, S., Baker, F., and D. Black, | |||
"Definition of the Differentiated Services Field (DS | "Definition of the Differentiated Services Field (DS | |||
Field) in the IPv4 and IPv6 Headers", RFC 2474, | Field) in the IPv4 and IPv6 Headers", RFC 2474, | |||
DOI 10.17487/RFC2474, December 1998, | DOI 10.17487/RFC2474, December 1998, | |||
<https://www.rfc-editor.org/info/rfc2474>. | <https://www.rfc-editor.org/rfc/rfc2474>. | |||
[RFC2597] Heinanen, J., Baker, F., Weiss, W., and J. Wroclawski, | [RFC2597] Heinanen, J., Baker, F., Weiss, W., and J. Wroclawski, | |||
"Assured Forwarding PHB Group", RFC 2597, | "Assured Forwarding PHB Group", RFC 2597, | |||
DOI 10.17487/RFC2597, June 1999, | DOI 10.17487/RFC2597, June 1999, | |||
<https://www.rfc-editor.org/info/rfc2597>. | <https://www.rfc-editor.org/rfc/rfc2597>. | |||
[RFC3246] Davie, B., Charny, A., Bennet, J.C.R., Benson, K., Le | [RFC3246] Davie, B., Charny, A., Bennet, J.C.R., Benson, K., Le | |||
Boudec, J.Y., Courtney, W., Davari, S., Firoiu, V., and D. | Boudec, J.Y., Courtney, W., Davari, S., Firoiu, V., and D. | |||
Stiliadis, "An Expedited Forwarding PHB (Per-Hop | Stiliadis, "An Expedited Forwarding PHB (Per-Hop | |||
Behavior)", RFC 3246, DOI 10.17487/RFC3246, March 2002, | Behavior)", RFC 3246, DOI 10.17487/RFC3246, March 2002, | |||
<https://www.rfc-editor.org/info/rfc3246>. | <https://www.rfc-editor.org/rfc/rfc3246>. | |||
[RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | [RFC3261] Rosenberg, J., Schulzrinne, H., Camarillo, G., Johnston, | |||
A., Peterson, J., Sparks, R., Handley, M., and E. | A., Peterson, J., Sparks, R., Handley, M., and E. | |||
Schooler, "SIP: Session Initiation Protocol", RFC 3261, | Schooler, "SIP: Session Initiation Protocol", RFC 3261, | |||
DOI 10.17487/RFC3261, June 2002, | DOI 10.17487/RFC3261, June 2002, | |||
<https://www.rfc-editor.org/info/rfc3261>. | <https://www.rfc-editor.org/rfc/rfc3261>. | |||
[RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | |||
Thyagarajan, "Internet Group Management Protocol, Version | Thyagarajan, "Internet Group Management Protocol, Version | |||
3", RFC 3376, DOI 10.17487/RFC3376, October 2002, | 3", RFC 3376, DOI 10.17487/RFC3376, October 2002, | |||
<https://www.rfc-editor.org/info/rfc3376>. | <https://www.rfc-editor.org/rfc/rfc3376>. | |||
[RFC4594] Babiarz, J., Chan, K., and F. Baker, "Configuration | [RFC4594] Babiarz, J., Chan, K., and F. Baker, "Configuration | |||
Guidelines for DiffServ Service Classes", RFC 4594, | Guidelines for DiffServ Service Classes", RFC 4594, | |||
DOI 10.17487/RFC4594, August 2006, | DOI 10.17487/RFC4594, August 2006, | |||
<https://www.rfc-editor.org/info/rfc4594>. | <https://www.rfc-editor.org/rfc/rfc4594>. | |||
[RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using Internet | [RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using Internet | |||
Group Management Protocol Version 3 (IGMPv3) and Multicast | Group Management Protocol Version 3 (IGMPv3) and Multicast | |||
Listener Discovery Protocol Version 2 (MLDv2) for Source- | Listener Discovery Protocol Version 2 (MLDv2) for Source- | |||
Specific Multicast", RFC 4604, DOI 10.17487/RFC4604, | Specific Multicast", RFC 4604, DOI 10.17487/RFC4604, | |||
August 2006, <https://www.rfc-editor.org/info/rfc4604>. | August 2006, <https://www.rfc-editor.org/rfc/rfc4604>. | |||
[RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | [RFC5245] Rosenberg, J., "Interactive Connectivity Establishment | |||
(ICE): A Protocol for Network Address Translator (NAT) | (ICE): A Protocol for Network Address Translator (NAT) | |||
Traversal for Offer/Answer Protocols", RFC 5245, | Traversal for Offer/Answer Protocols", RFC 5245, | |||
DOI 10.17487/RFC5245, April 2010, | DOI 10.17487/RFC5245, April 2010, | |||
<https://www.rfc-editor.org/info/rfc5245>. | <https://www.rfc-editor.org/rfc/rfc5245>. | |||
[RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., | |||
Housley, R., and W. Polk, "Internet X.509 Public Key | Housley, R., and W. Polk, "Internet X.509 Public Key | |||
Infrastructure Certificate and Certificate Revocation List | Infrastructure Certificate and Certificate Revocation List | |||
(CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008, | |||
<https://www.rfc-editor.org/info/rfc5280>. | <https://www.rfc-editor.org/rfc/rfc5280>. | |||
[RFC5482] Eggert, L. and F. Gont, "TCP User Timeout Option", | [RFC5482] Eggert, L. and F. Gont, "TCP User Timeout Option", | |||
RFC 5482, DOI 10.17487/RFC5482, March 2009, | RFC 5482, DOI 10.17487/RFC5482, March 2009, | |||
<https://www.rfc-editor.org/info/rfc5482>. | <https://www.rfc-editor.org/rfc/rfc5482>. | |||
[RFC5865] Baker, F., Polk, J., and M. Dolly, "A Differentiated | [RFC5865] Baker, F., Polk, J., and M. Dolly, "A Differentiated | |||
Services Code Point (DSCP) for Capacity-Admitted Traffic", | Services Code Point (DSCP) for Capacity-Admitted Traffic", | |||
RFC 5865, DOI 10.17487/RFC5865, May 2010, | RFC 5865, DOI 10.17487/RFC5865, May 2010, | |||
<https://www.rfc-editor.org/info/rfc5865>. | <https://www.rfc-editor.org/rfc/rfc5865>. | |||
[RFC7478] Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real- | [RFC7478] Holmberg, C., Hakansson, S., and G. Eriksson, "Web Real- | |||
Time Communication Use Cases and Requirements", RFC 7478, | Time Communication Use Cases and Requirements", RFC 7478, | |||
DOI 10.17487/RFC7478, March 2015, | DOI 10.17487/RFC7478, March 2015, | |||
<https://www.rfc-editor.org/info/rfc7478>. | <https://www.rfc-editor.org/rfc/rfc7478>. | |||
[RFC7556] Anipko, D., Ed., "Multiple Provisioning Domain | [RFC7556] Anipko, D., Ed., "Multiple Provisioning Domain | |||
Architecture", RFC 7556, DOI 10.17487/RFC7556, June 2015, | Architecture", RFC 7556, DOI 10.17487/RFC7556, June 2015, | |||
<https://www.rfc-editor.org/info/rfc7556>. | <https://www.rfc-editor.org/rfc/rfc7556>. | |||
[RFC7657] Black, D., Ed. and P. Jones, "Differentiated Services | [RFC7657] Black, D., Ed. and P. Jones, "Differentiated Services | |||
(Diffserv) and Real-Time Communication", RFC 7657, | (Diffserv) and Real-Time Communication", RFC 7657, | |||
DOI 10.17487/RFC7657, November 2015, | DOI 10.17487/RFC7657, November 2015, | |||
<https://www.rfc-editor.org/info/rfc7657>. | <https://www.rfc-editor.org/rfc/rfc7657>. | |||
[RFC8095] Fairhurst, G., Ed., Trammell, B., Ed., and M. Kuehlewind, | [RFC8095] Fairhurst, G., Ed., Trammell, B., Ed., and M. Kuehlewind, | |||
Ed., "Services Provided by IETF Transport Protocols and | Ed., "Services Provided by IETF Transport Protocols and | |||
Congestion Control Mechanisms", RFC 8095, | Congestion Control Mechanisms", RFC 8095, | |||
DOI 10.17487/RFC8095, March 2017, | DOI 10.17487/RFC8095, March 2017, | |||
<https://www.rfc-editor.org/info/rfc8095>. | <https://www.rfc-editor.org/rfc/rfc8095>. | |||
[RFC8229] Pauly, T., Touati, S., and R. Mantha, "TCP Encapsulation | [RFC8229] Pauly, T., Touati, S., and R. Mantha, "TCP Encapsulation | |||
of IKE and IPsec Packets", RFC 8229, DOI 10.17487/RFC8229, | of IKE and IPsec Packets", RFC 8229, DOI 10.17487/RFC8229, | |||
August 2017, <https://www.rfc-editor.org/info/rfc8229>. | August 2017, <https://www.rfc-editor.org/rfc/rfc8229>. | |||
[RFC8260] Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, | [RFC8260] Stewart, R., Tuexen, M., Loreto, S., and R. Seggelmann, | |||
"Stream Schedulers and User Message Interleaving for the | "Stream Schedulers and User Message Interleaving for the | |||
Stream Control Transmission Protocol", RFC 8260, | Stream Control Transmission Protocol", RFC 8260, | |||
DOI 10.17487/RFC8260, November 2017, | DOI 10.17487/RFC8260, November 2017, | |||
<https://www.rfc-editor.org/info/rfc8260>. | <https://www.rfc-editor.org/rfc/rfc8260>. | |||
[RFC8293] Ghanwani, A., Dunbar, L., McBride, M., Bannai, V., and R. | [RFC8293] Ghanwani, A., Dunbar, L., McBride, M., Bannai, V., and R. | |||
Krishnan, "A Framework for Multicast in Network | Krishnan, "A Framework for Multicast in Network | |||
Virtualization over Layer 3", RFC 8293, | Virtualization over Layer 3", RFC 8293, | |||
DOI 10.17487/RFC8293, January 2018, | DOI 10.17487/RFC8293, January 2018, | |||
<https://www.rfc-editor.org/info/rfc8293>. | <https://www.rfc-editor.org/rfc/rfc8293>. | |||
[RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | [RFC8445] Keranen, A., Holmberg, C., and J. Rosenberg, "Interactive | |||
Connectivity Establishment (ICE): A Protocol for Network | Connectivity Establishment (ICE): A Protocol for Network | |||
Address Translator (NAT) Traversal", RFC 8445, | Address Translator (NAT) Traversal", RFC 8445, | |||
DOI 10.17487/RFC8445, July 2018, | DOI 10.17487/RFC8445, July 2018, | |||
<https://www.rfc-editor.org/info/rfc8445>. | <https://www.rfc-editor.org/rfc/rfc8445>. | |||
[RFC8489] Petit-Huguenin, M., Salgueiro, G., Rosenberg, J., Wing, | [RFC8489] Petit-Huguenin, M., Salgueiro, G., Rosenberg, J., Wing, | |||
D., Mahy, R., and P. Matthews, "Session Traversal | D., Mahy, R., and P. Matthews, "Session Traversal | |||
Utilities for NAT (STUN)", RFC 8489, DOI 10.17487/RFC8489, | Utilities for NAT (STUN)", RFC 8489, DOI 10.17487/RFC8489, | |||
February 2020, <https://www.rfc-editor.org/info/rfc8489>. | February 2020, <https://www.rfc-editor.org/rfc/rfc8489>. | |||
[RFC8546] Trammell, B. and M. Kuehlewind, "The Wire Image of a | [RFC8546] Trammell, B. and M. Kuehlewind, "The Wire Image of a | |||
Network Protocol", RFC 8546, DOI 10.17487/RFC8546, April | Network Protocol", RFC 8546, DOI 10.17487/RFC8546, April | |||
2019, <https://www.rfc-editor.org/info/rfc8546>. | 2019, <https://www.rfc-editor.org/rfc/rfc8546>. | |||
[RFC8622] Bless, R., "A Lower-Effort Per-Hop Behavior (LE PHB) for | [RFC8622] Bless, R., "A Lower-Effort Per-Hop Behavior (LE PHB) for | |||
Differentiated Services", RFC 8622, DOI 10.17487/RFC8622, | Differentiated Services", RFC 8622, DOI 10.17487/RFC8622, | |||
June 2019, <https://www.rfc-editor.org/info/rfc8622>. | June 2019, <https://www.rfc-editor.org/rfc/rfc8622>. | |||
[RFC8656] Reddy, T., Ed., Johnston, A., Ed., Matthews, P., and J. | [RFC8656] Reddy, T., Ed., Johnston, A., Ed., Matthews, P., and J. | |||
Rosenberg, "Traversal Using Relays around NAT (TURN): | Rosenberg, "Traversal Using Relays around NAT (TURN): | |||
Relay Extensions to Session Traversal Utilities for NAT | Relay Extensions to Session Traversal Utilities for NAT | |||
(STUN)", RFC 8656, DOI 10.17487/RFC8656, February 2020, | (STUN)", RFC 8656, DOI 10.17487/RFC8656, February 2020, | |||
<https://www.rfc-editor.org/info/rfc8656>. | <https://www.rfc-editor.org/rfc/rfc8656>. | |||
[RFC8699] Islam, S., Welzl, M., and S. Gjessing, "Coupled Congestion | [RFC8699] Islam, S., Welzl, M., and S. Gjessing, "Coupled Congestion | |||
Control for RTP Media", RFC 8699, DOI 10.17487/RFC8699, | Control for RTP Media", RFC 8699, DOI 10.17487/RFC8699, | |||
January 2020, <https://www.rfc-editor.org/info/rfc8699>. | January 2020, <https://www.rfc-editor.org/rfc/rfc8699>. | |||
[RFC8838] Ivov, E., Uberti, J., and P. Saint-Andre, "Trickle ICE: | [RFC8838] Ivov, E., Uberti, J., and P. Saint-Andre, "Trickle ICE: | |||
Incremental Provisioning of Candidates for the Interactive | Incremental Provisioning of Candidates for the Interactive | |||
Connectivity Establishment (ICE) Protocol", RFC 8838, | Connectivity Establishment (ICE) Protocol", RFC 8838, | |||
DOI 10.17487/RFC8838, January 2021, | DOI 10.17487/RFC8838, January 2021, | |||
<https://www.rfc-editor.org/info/rfc8838>. | <https://www.rfc-editor.org/rfc/rfc8838>. | |||
[RFC8899] Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T. | [RFC8899] Fairhurst, G., Jones, T., Tüxen, M., Rüngeler, I., and T. | |||
Völker, "Packetization Layer Path MTU Discovery for | Völker, "Packetization Layer Path MTU Discovery for | |||
Datagram Transports", RFC 8899, DOI 10.17487/RFC8899, | Datagram Transports", RFC 8899, DOI 10.17487/RFC8899, | |||
September 2020, <https://www.rfc-editor.org/info/rfc8899>. | September 2020, <https://www.rfc-editor.org/rfc/rfc8899>. | |||
[RFC8922] Enghardt, T., Pauly, T., Perkins, C., Rose, K., and C. | [RFC8922] Enghardt, T., Pauly, T., Perkins, C., Rose, K., and C. | |||
Wood, "A Survey of the Interaction between Security | Wood, "A Survey of the Interaction between Security | |||
Protocols and Transport Services", RFC 8922, | Protocols and Transport Services", RFC 8922, | |||
DOI 10.17487/RFC8922, October 2020, | DOI 10.17487/RFC8922, October 2020, | |||
<https://www.rfc-editor.org/info/rfc8922>. | <https://www.rfc-editor.org/rfc/rfc8922>. | |||
[RFC8923] Welzl, M. and S. Gjessing, "A Minimal Set of Transport | [RFC8923] Welzl, M. and S. Gjessing, "A Minimal Set of Transport | |||
Services for End Systems", RFC 8923, DOI 10.17487/RFC8923, | Services for End Systems", RFC 8923, DOI 10.17487/RFC8923, | |||
October 2020, <https://www.rfc-editor.org/info/rfc8923>. | October 2020, <https://www.rfc-editor.org/rfc/rfc8923>. | |||
[TCP-COUPLING] | [TCP-COUPLING] | |||
Islam, S., Welzl, M., Hiorth, K., Hayes, D., Armitage, G., | Islam, S., Welzl, M., Hiorth, K., Hayes, D., Armitage, G., | |||
and S. Gjessing, "ctrlTCP: Reducing Latency through | and S. Gjessing, "ctrlTCP: Reducing Latency through | |||
Coupled, Heterogeneous Multi-Flow TCP Congestion Control", | Coupled, Heterogeneous Multi-Flow TCP Congestion Control", | |||
IEEE INFOCOM Global Internet Symposium (GI) workshop (GI | IEEE INFOCOM Global Internet Symposium (GI) workshop (GI | |||
2018) , 2018. | 2018) , 2018. | |||
Appendix A. Implementation Mapping | Appendix A. Implementation Mapping | |||
skipping to change at page 84, line 27 ¶ | skipping to change at page 84, line 33 ¶ | |||
A.3. Time Duration | A.3. Time Duration | |||
Time duration types are implementation-specific. For instance, it | Time duration types are implementation-specific. For instance, it | |||
could be a number of seconds, number of milliseconds, or a struct | could be a number of seconds, number of milliseconds, or a struct | |||
timeval in C or a user-defined Duration class in C++. | timeval in C or a user-defined Duration class in C++. | |||
Appendix B. Convenience Functions | Appendix B. Convenience Functions | |||
B.1. Adding Preference Properties | B.1. Adding Preference Properties | |||
As Selection Properties of type Preference will be set on a | TransportProperties will frequently need to set Selection Properties | |||
TransportProperties object quite frequently, implementations can | of type Preference, therefore implementations can provide special | |||
provide special actions for adding each preference level i.e, | actions for adding each preference level i.e, | |||
TransportProperties.Set(some_property, avoid) is equivalent to | TransportProperties.Set(some_property, avoid) is equivalent | |||
TransportProperties.Avoid(some_property): | toTransportProperties.Avoid(some_property)`: | |||
TransportProperties.Require(property) | TransportProperties.Require(property) | |||
TransportProperties.Prefer(property) | TransportProperties.Prefer(property) | |||
TransportProperties.Ignore(property) | TransportProperties.Ignore(property) | |||
TransportProperties.Avoid(property) | TransportProperties.Avoid(property) | |||
TransportProperties.Prohibit(property) | TransportProperties.Prohibit(property) | |||
B.2. Transport Property Profiles | B.2. Transport Property Profiles | |||
To ease the use of the Transport Services API specified by this | To ease the use of the Transport Services API, implementations can | |||
document, implementations can provide a mechanism to create Transport | provide a mechanism to create Transport Property objects (see | |||
Property objects (see Section 6.2) that are pre-configured with | Section 6.2) that are pre-configured with frequently used sets of | |||
frequently used sets of properties; the following are in common use | properties; the following are in common use in current applications: | |||
in current applications: | ||||
B.2.1. reliable-inorder-stream | B.2.1. reliable-inorder-stream | |||
This profile provides reliable, in-order transport service with | This profile provides reliable, in-order transport service with | |||
congestion control. TCP is an example of a protocol that provides | congestion control. TCP is an example of a protocol that provides | |||
this service. It should consist of the following properties: | this service. It should consist of the following properties: | |||
+=======================+=========+ | +=======================+=========+ | |||
| Property | Value | | | Property | Value | | |||
+=======================+=========+ | +=======================+=========+ | |||
skipping to change at page 86, line 16 ¶ | skipping to change at page 86, line 16 ¶ | |||
| Property | Value | | | Property | Value | | |||
+=======================+=========+ | +=======================+=========+ | |||
| reliability | avoid | | | reliability | avoid | | |||
+-----------------------+---------+ | +-----------------------+---------+ | |||
| preserveOrder | avoid | | | preserveOrder | avoid | | |||
+-----------------------+---------+ | +-----------------------+---------+ | |||
| congestionControl | ignore | | | congestionControl | ignore | | |||
+-----------------------+---------+ | +-----------------------+---------+ | |||
| preserveMsgBoundaries | require | | | preserveMsgBoundaries | require | | |||
+-----------------------+---------+ | +-----------------------+---------+ | |||
| safely replayable | true | | | safelyReplayable | true | | |||
+-----------------------+---------+ | +-----------------------+---------+ | |||
Table 4: unreliable-datagram | Table 4: unreliable-datagram | |||
preferences | preferences | |||
Applications that choose this Transport Property Profile would avoid | Applications that choose this Transport Property Profile would avoid | |||
the additional latency that could be introduced by retransmission or | the additional latency that could be introduced by retransmission or | |||
reordering in a transport protocol. | reordering in a transport protocol. | |||
Applications that choose this Transport Property Profile to reduce | Applications that choose this Transport Property Profile to reduce | |||
skipping to change at page 87, line 9 ¶ | skipping to change at page 87, line 9 ¶ | |||
with TCP, MPTCP, UDP, UDP-Lite, SCTP and LEDBAT. | with TCP, MPTCP, UDP, UDP-Lite, SCTP and LEDBAT. | |||
* Connect: Initiate Action (Section 7.1). | * Connect: Initiate Action (Section 7.1). | |||
* Listen: Listen Action (Section 7.2). | * Listen: Listen Action (Section 7.2). | |||
* Specify number of attempts and/or timeout for the first | * Specify number of attempts and/or timeout for the first | |||
establishment message: timeout parameter of Initiate (Section 7.1) | establishment message: timeout parameter of Initiate (Section 7.1) | |||
or InitiateWithSend Action (Section 9.2.5). | or InitiateWithSend Action (Section 9.2.5). | |||
* Disable MPTCP: multipath Property (Section 6.2.14). | * Disable MPTCP: multipath property (Section 6.2.14). | |||
* Hand over a message to reliably transfer (possibly multiple times) | * Hand over a message to reliably transfer (possibly multiple times) | |||
before connection establishment: InitiateWithSend Action | before connection establishment: InitiateWithSend Action | |||
(Section 9.2.5). | (Section 9.2.5). | |||
* Change timeout for aborting connection (using retransmit limit or | * Change timeout for aborting connection (using retransmit limit or | |||
time value): connTimeout property, using a time value | time value): connTimeout property, using a time value | |||
(Section 8.1.3). | (Section 8.1.3). | |||
* Timeout event when data could not be delivered for too long: | * Timeout event when data could not be delivered for too long: | |||
End of changes. 125 change blocks. | ||||
246 lines changed or deleted | 249 lines changed or added | |||
This html diff was produced by rfcdiff 1.46. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |