Tech-invite3GPPspaceIETFspace
96959493929190898887868584838281807978777675747372717069686766656463626160595857565554535251504948474645444342414039383736353433323130292827262524232221201918171615141312111009080706050403020100
in Index   Prev   Next

RFC 8303

On the Usage of Transport Features Provided by IETF Transport Protocols

Pages: 56
Informational
Errata
Part 2 of 3 – Pages 20 to 49
First   Prev   Next

Top   ToC   RFC8303 - Page 20   prevText

4. Pass 2

This pass categorizes the primitives from pass 1 based on whether they relate to a connection or to data transmission. Primitives are presented following the nomenclature "CATEGORY.[SUBCATEGORY].PRIMITIVENAME.PROTOCOL". The CATEGORY can be CONNECTION or DATA. Within the CONNECTION category, ESTABLISHMENT, AVAILABILITY, MAINTENANCE, and TERMINATION subcategories can be considered. The DATA category does not have any SUBCATEGORY. The PROTOCOL name "UDP(-Lite)" is used when primitives are equivalent for UDP and UDP-Lite; the PROTOCOL name "TCP" refers to both TCP and MPTCP. We present "connection" as a general protocol-independent concept and use it to refer to, e.g., TCP connections (identifiable by a unique pair of IP addresses and TCP port numbers), SCTP associations (identifiable by multiple IP address and port number pairs), as well UDP and UDP-Lite connections (identifiable by a unique socket pair). Some minor details are omitted for the sake of generalization -- e.g., SCTP's 'Close' [RFC4960] returns success or failure and lets the application control whether further receive or send operations, or both, are disabled [RFC6458]. This is not described in the same way for TCP [RFC0793], but these details play no significant role for the primitives provided by either TCP or SCTP (for the sake of being generic, it could be assumed that both receive and send operations are disabled in both cases). The TCP 'Send' and 'Receive' primitives include usage of an 'urgent' parameter. This parameter controls a mechanism that is required to implement the "synch signal" used by telnet [RFC0854], but [RFC6093] states that "new applications SHOULD NOT employ the TCP urgent mechanism." Because pass 2 is meant as a basis for the creation of future systems, the "urgent" mechanism is excluded. This also concerns the notification 'Urgent Pointer Advance' in the 'Error_Report' (Section 4.2.4.1 of [RFC1122]). Since LEDBAT is a congestion control mechanism and not a protocol, it is not currently defined when to enable/disable or configure the mechanism. For instance, it could be a one-time choice upon connection establishment or when listening for incoming connections, in which case it should be categorized under CONNECTION.ESTABLISHMENT or CONNECTION.AVAILABILITY, respectively. To avoid unnecessarily
Top   ToC   RFC8303 - Page 21
   limiting future implementations, it was decided to place it under
   CONNECTION.MAINTENANCE, with all parameters that are described in the
   specification [RFC6817] made configurable.

4.1. CONNECTION-Related Primitives

ESTABLISHMENT: Active creation of a connection from one transport endpoint to one or more transport endpoints. Interfaces to UDP and UDP-Lite allow both connection-oriented and connection-less usage of the API [RFC8085]. o CONNECT.TCP: Pass 1 primitive/event: 'Open' (active) or 'Open' (passive) with socket, followed by 'Send' Parameters: 1 local IP address (optional); 1 destination transport address (for active open; else the socket and the local IP address of the succeeding incoming connection request will be maintained); timeout (optional); options (optional); MKT configuration (optional); and user message (optional) Comments: if the local IP address is not provided, a default choice will automatically be made. The timeout can also be a retransmission count. The options are IP options to be used on all segments of the connection. At least the Source Route option is mandatory for TCP to provide. 'MKT configuration' refers to the ability to configure MKTs for authentication. The user message may be transmitted to the peer application immediately upon reception of the TCP SYN packet. To benefit from the lower latency this provides as part of the experimental TFO mechanism, its length must be at most the TCP's maximum segment size (minus TCP options used in the SYN). The message may also be delivered more than once to the application on the remote host. o CONNECT.SCTP: Pass 1 primitive/event: 'Initialize', followed by 'Enable/Disable Interleaving' (optional), followed by 'Associate' Parameters: list of local SCTP port number / IP address pairs ('Initialize'); one or several sockets (identifying the peer); outbound stream count; maximum allowed inbound stream count; adaptation layer indication (optional); chunk types required to be authenticated (optional); request interleaving on/off; maximum
Top   ToC   RFC8303 - Page 22
      number of INIT attempts (optional); maximum init.  RTO for INIT
      (optional); user message (optional); and remote UDP port number
      (optional)

      Returns: socket list or failure

      Comments: 'Initialize' needs to be called only once per list of
      local SCTP port number / IP address pairs.  One socket will
      automatically be chosen; it can later be changed in MAINTENANCE.
      The user message may be transmitted to the peer application
      immediately upon reception of the packet containing the
      COOKIE-ECHO chunk.  To benefit from the lower latency this
      provides, its length must be limited such that it fits into the
      packet containing the COOKIE-ECHO chunk.  If a remote UDP port
      number is provided, SCTP packets will be encapsulated in UDP.

   o  CONNECT.MPTCP:

      This is similar to CONNECT.TCP except for one additional boolean
      parameter that allows the ability to enable or disable MPTCP for a
      particular connection or socket (default: enabled).

   o  CONNECT.UDP(-Lite):

      Pass 1 primitive/event: 'Connect' followed by 'Send'

      Parameters: 1 local IP address (default (ANY) or specified); 1
      destination transport address; 1 local port (default (OS chooses)
      or specified); and 1 destination port (default (OS chooses) or
      specified).

      Comments: associates a transport address creating a UDP(-Lite)
      socket connection.  This can be called again with a new transport
      address to create a new connection.  The CONNECT function allows
      an application to receive errors from messages sent to a transport
      address.

   AVAILABILITY:

   Preparing to receive incoming connection requests.

   o  LISTEN.TCP:

      Pass 1 primitive/event: 'Open' (passive)

      Parameters: 1 local IP address (optional); 1 socket (optional);
      timeout (optional); buffer to receive a user message (optional);
      and MKT configuration (optional)
Top   ToC   RFC8303 - Page 23
      Comments: if the socket and/or local IP address is provided, this
      waits for incoming connections from only and/or to only the
      provided address.  Else this waits for incoming connections
      without this/these constraint(s).  ESTABLISHMENT can later be
      performed with 'Send'.  If a buffer is provided to receive a user
      message, a user message can be received from a TFO-enabled sender
      before the TCP's connection handshake is completed.  This message
      may arrive multiple times.  'MKT configuration' refers to the
      ability to configure MKTs for authentication.

   o  LISTEN.SCTP:

      Pass 1 primitive/event: 'Initialize', followed by the
      'Communication Up' or 'Restart' notification and possibly the
      'Adaptation Layer' notification

      Parameters: list of local SCTP port number / IP address pairs
      (initialize)

      Returns: socket list; outbound stream count; inbound stream count;
      adaptation layer indication; chunks required to be authenticated;
      and interleaving supported on both sides yes/no

      Comments: 'Initialize' needs to be called only once per list of
      local SCTP port number / IP address pairs.  'Communication Up' can
      also follow a 'Communication Lost' notification, indicating that
      the lost communication is restored.  If the peer has provided an
      adaptation layer indication, an 'Adaptation Layer' notification is
      issued.

   o  LISTEN.MPTCP:

      This is similar to LISTEN.TCP except for one additional boolean
      parameter that allows the ability to enable or disable MPTCP for a
      particular connection or socket (default: enabled).

   o  LISTEN.UDP(-Lite):

      Pass 1 primitive/event: 'Receive'

      Parameters: 1 local IP address (default (ANY) or specified); 1
      destination transport address; local port (default (OS chooses) or
      specified); and destination port (default (OS chooses) or
      specified)

      Comments: the 'Receive' function registers the application to
      listen for incoming UDP(-Lite) datagrams at an endpoint.
Top   ToC   RFC8303 - Page 24
   MAINTENANCE:

   Adjustments made to an open connection, or notifications about it.
   These are out-of-band messages to the protocol that can be issued at
   any time, at least after a connection has been established and before
   it has been terminated (with one exception: CHANGE_TIMEOUT.TCP can
   only be issued for an open connection when DATA.SEND.TCP is called).
   In some cases, these primitives can also be immediately issued during
   ESTABLISHMENT or AVAILABILITY, without waiting for the connection to
   be opened (e.g., CHANGE_TIMEOUT.TCP can be done using TCP's 'Open'
   primitive).  For UDP and UDP-Lite, these functions may establish a
   setting per connection but may also be changed per datagram message.

   o  CHANGE_TIMEOUT.TCP:

      Pass 1 primitive/event: 'Open' or 'Send' combined with unspecified
      control of per-connection state variables

      Parameters: timeout value (optional); adv_uto (optional); boolean
      uto_enabled (optional, default false); and boolean changeable
      (optional, default true)

      Comments: when sending data, an application can adjust the
      connection's timeout value (the time after which the connection
      will be aborted if data could not be delivered).  If 'uto_enabled'
      is true, the 'timeout value' (or, if provided, the value
      'adv_uto') will be advertised for the TCP on the other side of the
      connection to adapt its own user timeout accordingly.
      'uto_enabled' controls whether the UTO option is enabled for a
      connection.  This applies to both sending and receiving.
      'changeable' controls whether the user timeout may be changed
      based on a UTO option received from the other end of the
      connection; it becomes false when the 'timeout value' is used.

   o  CHANGE_TIMEOUT.SCTP:

      Pass 1 primitive/event: 'Change Heartbeat' combined with
      'Configure Max. Retransmissions of an Association'

      Parameters: 'Change Heartbeat': heartbeat frequency and 'Configure
      Max. Retransmissions of an Association': Association.Max.Retrans

      Comments: 'Change Heartbeat' can enable/disable heartbeats in SCTP
      as well as change their frequency.  The parameter
      'Association.Max.Retrans' defines after how many unsuccessful
      transmissions of any packets (including heartbeats) the
Top   ToC   RFC8303 - Page 25
      association will be terminated; thus, these two primitives/
      parameters together can yield a similar behavior for SCTP
      associations as CHANGE_TIMEOUT.TCP does for TCP connections.

   o  DISABLE_NAGLE.TCP:

      Pass 1 primitive/event: not specified

      Parameters: one boolean value

      Comments: the Nagle algorithm delays data transmission to increase
      the chance of sending a full-sized segment.  An application must
      be able to disable this algorithm for a connection.

   o  DISABLE_NAGLE.SCTP:

      Pass 1 primitive/event: 'Enable/Disable NoDelay'

      Parameters: one boolean value

      Comments: Nagle-like algorithms delay data transmission to
      increase the chance of sending a full-sized packet.

   o  REQUEST_HEARTBEAT.SCTP:

      Pass 1 primitive/event: 'Request Heartbeat'

      Parameters: socket

      Returns: success or failure

      Comments: requests an immediate heartbeat on a path, returning
      success or failure.

   o  ADD_PATH.MPTCP:

      Pass 1 primitive/event: not specified

      Parameters: local IP address and optionally the local port number

      Comments: the application specifies the local IP address and port
      number that must be used for a new subflow.
Top   ToC   RFC8303 - Page 26
   o  ADD_PATH.SCTP:

      Pass 1 primitive/event: 'Change Local Address / Set Peer Primary'

      Parameters: local IP address

   o  REM_PATH.MPTCP:

      Pass 1 primitive/event: not specified

      Parameters: local IP address; local port number; remote IP
      address; and remote port number

      Comments: the application removes the subflow specified by the IP/
      port-pair.  The MPTCP implementation must trigger a removal of the
      subflow that belongs to this IP/port-pair.

   o  REM_PATH.SCTP:

      Pass 1 primitive/event: 'Change Local Address / Set Peer Primary'

      Parameters: local IP address

   o  SET_PRIMARY.SCTP:

      Pass 1 primitive/event: 'Set Primary'

      Parameters: socket

      Returns: result of attempting this operation

      Comments: update the current primary address to be used, based on
      the set of available sockets of the association.

   o  SET_PEER_PRIMARY.SCTP:

      Pass 1 primitive/event: 'Change Local Address / Set Peer Primary'

      Parameters: local IP address

      Comments: this is only advisory for the peer.
Top   ToC   RFC8303 - Page 27
   o  CONFIG_SWITCHOVER.SCTP:

      Pass 1 primitive/event: 'Configure Path Switchover'

      Parameters: primary max retrans (number of retransmissions after
      which a path is considered inactive) and PF max retrans (number of
      retransmissions after which a path is considered to be
      "Potentially Failed", and others will be preferably used)
      (optional)

   o  STATUS.SCTP:

      Pass 1 primitive/event: 'Status', 'Enable/Disable Interleaving',
      and 'Network Status Change' notification

      Returns: data block with information about a specified
      association, containing: association connection state; destination
      transport address list; destination transport address reachability
      states; current local and peer receiver window sizes; current
      local congestion window sizes; number of unacknowledged DATA
      chunks; number of DATA chunks pending receipt; primary path; most
      recent SRTT on primary path; RTO on primary path; SRTT and RTO on
      other destination addresses; MTU per path; and interleaving
      supported yes/no

      Comments: the 'Network Status Change' notification informs the
      application about a socket becoming active/inactive; this only
      affects the programming style, as the same information is also
      available via 'Status'.

   o  STATUS.MPTCP:

      Pass 1 primitive/event: not specified

      Returns: list of pairs of tuples of IP address and TCP port number
      of each subflow.  The first of the pair is the local IP and port
      number, while the second is the remote IP and port number.

   o  SET_DSCP.TCP:

      Pass 1 primitive/event: not specified

      Parameters: DSCP value

      Comments: this allows an application to change the DSCP value for
      outgoing segments.
Top   ToC   RFC8303 - Page 28
   o  SET_DSCP.SCTP:

      Pass 1 primitive/event: 'Set DSCP value'

      Parameters: DSCP value

      Comments: this allows an application to change the DSCP value for
      outgoing packets on a path.

   o  SET_DSCP.UDP(-Lite):

      Pass 1 primitive/event: 'Set_DSCP'

      Parameter: DSCP value

      Comments: this allows an application to change the DSCP value for
      outgoing UDP(-Lite) datagrams.  [RFC7657] and [RFC8085] provide
      current guidance on using this value with UDP.

   o  ERROR.TCP:

      Pass 1 primitive/event: 'Error_Report'

      Returns: reason (encoding not specified) and subreason (encoding
      not specified)

      Comments: soft errors that can be ignored without harm by many
      applications; an application should be able to disable these
      notifications.  The reported conditions include at least: ICMP
      error message arrived and excessive retransmissions.

   o  ERROR.UDP(-Lite):

      Pass 1 primitive/event: 'Error_Report'

      Returns: Error report

      Comments: this returns soft errors that may be ignored without
      harm by many applications; an application must connect to be able
      receive these notifications.
Top   ToC   RFC8303 - Page 29
   o  SET_AUTH.TCP:

      Pass 1 primitive/event: not specified

      Parameters: current_key and rnext_key

      Comments: current_key and rnext_key are the preferred outgoing MKT
      and the preferred incoming MKT, respectively, for a segment that
      is sent on the connection.

   o  SET_AUTH.SCTP:

      Pass 1 primitive/event: 'Set/Get Authentication Parameters'

      Parameters: key_id; key; and hmac_id

   o  GET_AUTH.TCP:

      Pass 1 primitive/event: not specified

      Parameters: current_key and rnext_key

      Comments: current_key and rnext_key are the preferred outgoing MKT
      and the preferred incoming MKT, respectively, that were carried on
      a recently received segment.

   o  GET_AUTH.SCTP:

      Pass 1 primitive/event: 'Set/Get Authentication Parameters'

      Parameters: key_id and chunk_list

   o  RESET_STREAM.SCTP:

      Pass 1 primitive/event: 'Add/Reset Streams, Reset Association'

      Parameters: sid and direction

   o  RESET_STREAM-EVENT.SCTP:

      Pass 1 primitive/event: 'Stream Reset' notification

      Parameters: information about the result of RESET_STREAM.SCTP

      Comments: this is issued when the procedure for resetting streams
      has completed.
Top   ToC   RFC8303 - Page 30
   o  RESET_ASSOC.SCTP:

      Pass 1 primitive/event: 'Add/Reset Streams, Reset Association'

      Parameters: information related to the extension, as defined in
      [RFC3260]

   o  RESET_ASSOC-EVENT.SCTP:

      Pass 1 primitive/event: 'Association Reset' notification

      Parameters: information about the result of RESET_ASSOC.SCTP

      Comments: this is issued when the procedure for resetting an
      association has completed.

   o  ADD_STREAM.SCTP:

      Pass 1 primitive/event: 'Add/Reset Streams, Reset Association'

      Parameters: number of outgoing and incoming streams to be added

   o  ADD_STREAM-EVENT.SCTP:

      Pass 1 primitive/event: 'Stream Change' notification

      Parameters: information about the result of ADD_STREAM.SCTP

      Comments: this is issued when the procedure for adding a stream
      has completed.

   o  SET_STREAM_SCHEDULER.SCTP:

      Pass 1 primitive/event: 'Set Stream Scheduler'

      Parameters: scheduler identifier

      Comments: choice of First-Come, First-Served; Round-Robin; Round-
      Robin per Packet; Priority-Based; Fair Bandwidth; and Weighted
      Fair Queuing.
Top   ToC   RFC8303 - Page 31
   o  CONFIGURE_STREAM_SCHEDULER.SCTP:

      Pass 1 primitive/event: 'Configure Stream Scheduler'

      Parameters: priority

      Comments: the priority value only applies when Priority-Based or
      Weighted Fair Queuing scheduling is chosen with
      SET_STREAM_SCHEDULER.SCTP.  The meaning of the parameter differs
      between these two schedulers, but in both cases, it realizes some
      form of prioritization regarding how bandwidth is divided among
      streams.

   o  SET_FLOWLABEL.SCTP:

      Pass 1 primitive/event: 'Set IPv6 Flow Label'

      Parameters: flow label

      Comments: this allows an application to change the IPv6 header's
      flow label field for outgoing packets on a path.

   o  AUTHENTICATION_NOTIFICATION-EVENT.SCTP:

      Pass 1 primitive/event: 'Authentication' notification

      Returns: information regarding key management

   o  CONFIG_SEND_BUFFER.SCTP:

      Pass 1 primitive/event: 'Configure Send Buffer Size'

      Parameters: size value in octets

   o  CONFIG_RECEIVE_BUFFER.SCTP:

      Pass 1 primitive/event: 'Configure Receive Buffer Size'

      Parameters: size value in octets

      Comments: this controls the receiver window.
Top   ToC   RFC8303 - Page 32
   o  CONFIG_FRAGMENTATION.SCTP:

      Pass 1 primitive/event: 'Configure Message Fragmentation'

      Parameters: one boolean value (enable/disable) and maximum
      fragmentation size (optional; default: PMTU)

      Comments: if fragmentation is enabled, messages exceeding the
      maximum fragmentation size will be fragmented.  If fragmentation
      is disabled, trying to send a message that exceeds the maximum
      fragmentation size will produce an error.

   o  CONFIG_PMTUD.SCTP:

      Pass 1 primitive/event: 'Configure Path MTU Discovery'

      Parameters: one boolean value (PMTUD on/off) and PMTU value
      (optional)

      Returns: PMTU value

      Comments: this returns a meaningful PMTU value when PMTUD is
      enabled (the boolean is true), and the PMTU value can be set if
      PMTUD is disabled (the boolean is false).

   o  CONFIG_DELAYED_SACK.SCTP:

      Pass 1 primitive/event: 'Configure Delayed SACK Timer'

      Parameters: one boolean value (delayed SACK on/off); timer value
      (optional); and number of packets to wait for (default 2)

      Comments: if delayed SACK is enabled, SCTP will send a SACK either
      upon receiving the provided number of packets or when the timer
      expires, whatever occurs first.

   o  CONFIG_RTO.SCTP:

      Pass 1 primitive/event: 'Configure RTO Calculation'

      Parameters: init (optional); min (optional); and max (optional)

      Comments: this adjusts the initial, minimum, and maximum RTO
      values.
Top   ToC   RFC8303 - Page 33
   o  SET_COOKIE_LIFE.SCTP:

      Pass 1 primitive/event: 'Set Cookie Life Value'

      Parameters: cookie life value

   o  SET_MAX_BURST.SCTP:

      Pass 1 primitive/event: 'Set Maximum Burst'

      Parameters: max burst value

      Comments: not all implementations allow values above the default
      of 4.

   o  SET_PARTIAL_DELIVERY_POINT.SCTP:

      Pass 1 primitive/event: 'Set Partial Delivery Point'

      Parameters: partial delivery point (integer)

      Comments: this parameter must be smaller or equal to the socket
      receive buffer size.

   o  SET_CHECKSUM_ENABLED.UDP:

      Pass 1 primitive/event: 'Checksum_Enabled'

      Parameters: 0 when zero checksum is used at sender, 1 for checksum
      at sender (default)

   o  SET_CHECKSUM_REQUIRED.UDP:

      Pass 1 primitive/event: 'Require_Checksum'

      Parameter: 0 to allow zero checksum, 1 when a non-zero checksum is
      required (default) at the receiver

   o  SET_CHECKSUM_COVERAGE.UDP-Lite:

      Pass 1 primitive/event: 'Set_Checksum_Coverage'

      Parameters: coverage length at sender (default maximum coverage)
Top   ToC   RFC8303 - Page 34
   o  SET_MIN_CHECKSUM_COVERAGE.UDP-Lite:

      Pass 1 primitive/event: 'Set_Min_Coverage'

      Parameter: coverage length at receiver (default minimum coverage)

   o  SET_DF.UDP(-Lite):

      Pass 1 primitive event: 'Set_DF'

      Parameter: 0 when DF is not set (default) in the IPv4 header, 1
      when DF is set

   o  GET_MMS_S.UDP(-Lite):

      Pass 1 primitive event: 'Get_MM_S'

      Comments: this retrieves the maximum transport-message size that
      may be sent using a non-fragmented IP packet from the configured
      interface.

   o  GET_MMS_R.UDP(-Lite):

      Pass 1 primitive event: 'Get_MMS_R'

      Comments: this retrieves the maximum transport-message size that
      may be received from the configured interface.

   o  SET_TTL.UDP(-Lite) (IPV6_UNICAST_HOPS):

      Pass 1 primitive/event: 'Set_TTL' and 'Set_IPV6_Unicast_Hops'

      Parameters: IPv4 TTL value or IPv6 Hop Count value

      Comments: this allows an application to change the IPv4 TTL of
      IPv6 Hop Count value for outgoing UDP(-Lite) datagrams.

   o  GET_TTL.UDP(-Lite) (IPV6_UNICAST_HOPS):

      Pass 1 primitive/event: 'Get_TTL' and 'Get_IPV6_Unicast_Hops'

      Returns: IPv4 TTL value or IPv6 Hop Count value

      Comments: this allows an application to read the IPv4 TTL of the
      IPv6 Hop Count value from a received UDP(-Lite) datagram.
Top   ToC   RFC8303 - Page 35
   o  SET_ECN.UDP(-Lite):

      Pass 1 primitive/event: 'Set_ECN'

      Parameters: ECN value

      Comments: this allows a UDP(-Lite) application to set the Explicit
      Congestion Notification (ECN) code point field for outgoing
      UDP(-Lite) datagrams.  It defaults to sending '00'.

   o  GET_ECN.UDP(-Lite):

      Pass 1 primitive/event: 'Get_ECN'

      Parameters: ECN value

      Comments: this allows a UDP(-Lite) application to read the ECN
      code point field from a received UDP(-Lite) datagram.

   o  SET_IP_OPTIONS.UDP(-Lite):

      Pass 1 primitive/event: 'Set_IP_Options'

      Parameters: options

      Comments: this allows a UDP(-Lite) application to set IP options
      for outgoing UDP(-Lite) datagrams.  These options can at least be
      the Source Route, Record Route, and Timestamp option.

   o  GET_IP_OPTIONS.UDP(-Lite):

      Pass 1 primitive/event: 'Get_IP_Options'

      Returns: options

      Comments: this allows a UDP(-Lite) application to receive any IP
      options that are contained in a received UDP(-Lite) datagram.

   o  CONFIGURE.LEDBAT:

      Pass 1 primitive/event: N/A

      Parameters: enable (boolean); target; allowed_increase; gain_inc;
      gain_dec; base_history; current_filter; init_cwnd; and min_cwnd

      Comments: 'enable' is a newly invented parameter that enables or
      disables the whole LEDBAT service.
Top   ToC   RFC8303 - Page 36
   TERMINATION:

   Gracefully or forcefully closing a connection or being informed about
   this event happening.

   o  CLOSE.TCP:

      Pass 1 primitive/event: 'Close'

      Comments: this terminates the sending side of a connection after
      reliably delivering all remaining data.

   o  CLOSE.SCTP:

      Pass 1 primitive/event: 'Shutdown'

      Comments: this terminates a connection after reliably delivering
      all remaining data.

   o  ABORT.TCP:

      Pass 1 primitive/event: 'Abort'

      Comments: this terminates a connection without delivering
      remaining data and sends an error message to the other side.

   o  ABORT.SCTP:

      Pass 1 primitive/event: 'Abort'

      Parameters: abort reason to be given to the peer (optional)

      Comments: this terminates a connection without delivering
      remaining data and sends an error message to the other side.

   o  ABORT.UDP(-Lite):

      Pass 1 primitive event: 'Close'

      Comments: this terminates a connection without delivering
      remaining data.  No further UDP(-Lite) datagrams are sent/received
      for this transport service instance.
Top   ToC   RFC8303 - Page 37
   o  TIMEOUT.TCP:

      Pass 1 primitive/event: 'User Timeout' event

      Comments: the application is informed that the connection is
      aborted.  This event is executed on expiration of the timeout set
      in CONNECTION.ESTABLISHMENT.CONNECT.TCP (possibly adjusted in
      CONNECTION.MAINTENANCE.CHANGE_TIMEOUT.TCP).

   o  TIMEOUT.SCTP:

      Pass 1 primitive/event: 'Communication Lost' event

      Comments: the application is informed that the connection is
      aborted.  This event is executed on expiration of the timeout that
      should be enabled by default (see the beginning of Section 8.3 in
      [RFC4960]) and was possibly adjusted in
      CONNECTION.MAINTENANCE.CHANGE_TIMEOOUT.SCTP.

   o  ABORT-EVENT.TCP:

      Pass 1 primitive/event: not specified

   o  ABORT-EVENT.SCTP:

      Pass 1 primitive/event: 'Communication Lost' event

      Returns: abort reason from the peer (if available)

      Comments: the application is informed that the other side has
      aborted the connection using CONNECTION.TERMINATION.ABORT.SCTP.

   o  CLOSE-EVENT.TCP:

      Pass 1 primitive/event: not specified

   o  CLOSE-EVENT.SCTP:

      Pass 1 primitive/event: 'Shutdown Complete' event

      Comments: the application is informed that
      CONNECTION.TERMINATION.CLOSE.SCTP was successfully completed.
Top   ToC   RFC8303 - Page 38

4.2. DATA-Transfer-Related Primitives

All primitives in this section refer to an existing connection, i.e., a connection that was either established or made available for receiving data (although this is optional for the primitives of UDP(-Lite)). In addition to the listed parameters, all sending primitives contain a reference to a data block, and all receiving primitives contain a reference to available buffer space for the data. Note that CONNECT.TCP and LISTEN.TCP in the ESTABLISHMENT and AVAILABILITY categories also allow to transfer data (an optional user message) before the connection is fully established. o SEND.TCP: Pass 1 primitive/event: 'Send' Parameters: timeout (optional); current_key (optional); and rnext_key (optional) Comments: this gives TCP a data block for reliable transmission to the TCP on the other side of the connection. The timeout can be configured with this call (see also CONNECTION.MAINTENANCE.CHANGE_TIMEOUT.TCP). 'current_key' and 'rnext_key' are authentication parameters that can be configured with this call (see also CONNECTION.MAINTENANCE.SET_AUTH.TCP). o SEND.SCTP: Pass 1 primitive/event: 'Send' Parameters: stream number; context (optional); socket (optional); unordered flag (optional); no-bundle flag (optional); payload protocol-id (optional); pr-policy (optional) pr-value (optional); sack-immediately flag (optional); and key-id (optional) Comments: this gives SCTP a data block for transmission to the SCTP on the other side of the connection (SCTP association). The 'stream number' denotes the stream to be used. The 'context' number can later be used to refer to the correct message when an error is reported. The 'socket' can be used to state which path should be preferred, if there are multiple paths available (see also CONNECTION.MAINTENANCE.SETPRIMARY.SCTP). The data block can be delivered out of order if the 'unordered' flag is set. The 'no-bundle flag' can be set to indicate a preference to avoid bundling. The 'payload protocol-id' is a number that will, if provided, be handed over to the receiving application. Using pr-policy and pr-value, the level of reliability can be controlled. The 'sack-immediately' flag can be used to indicate
Top   ToC   RFC8303 - Page 39
      that the peer should not delay the sending of a SACK corresponding
      to the provided user message.  If specified, the provided key-id
      is used for authenticating the user message.

   o  SEND.UDP(-Lite):

      Pass 1 primitive/event: 'Send'

      Parameters: IP address and port number of the destination endpoint
      (optional if connected)

      Comments: this provides a message for unreliable transmission
      using UDP(-Lite) to the specified transport address.  The IP
      address and port number may be omitted for connected UDP(-Lite)
      sockets.  All CONNECTION.MAINTENANCE.SET_*.UDP(-Lite) primitives
      apply per message sent.

   o  RECEIVE.TCP:

      Pass 1 primitive/event: 'Receive'

      Parameters: current_key (optional) and rnext_key (optional)

      Comments: 'current_key' and 'rnext_key' are authentication
      parameters that can be read with this call (see also
      CONNECTION.MAINTENANCE.GET_AUTH.TCP).

   o  RECEIVE.SCTP:

      Pass 1 primitive/event: 'Data Arrive' notification, followed by
      'Receive'

      Parameters: stream number (optional)

      Returns: stream sequence number (optional) and partial flag
      (optional)

      Comments: if the 'stream number' is provided, the call to receive
      only receives data on one particular stream.  If a partial message
      arrives, this is indicated by the 'partial flag', and then the
      'stream sequence number' must be provided such that an application
      can restore the correct order of data blocks that comprise an
      entire message.
Top   ToC   RFC8303 - Page 40
   o  RECEIVE.UDP(-Lite):

      Pass 1 primitive/event: 'Receive'

      Parameters: buffer for received datagram

      Comments: all CONNECTION.MAINTENANCE.GET_*.UDP(-Lite) primitives
      apply per message received.

   o  SENDFAILURE-EVENT.SCTP:

      Pass 1 primitive/event: 'Send Failure' notification, optionally
      followed by 'Receive Unsent Message' or 'Receive Unacknowledged
      Message'

      Returns: cause code; context; and unsent or unacknowledged message
      (optional)

      Comments: 'cause code' indicates the reason of the failure, and
      'context' is the context number if such a number has been provided
      in DATA.SEND.SCTP, for later use with 'Receive Unsent Message' or
      'Receive Unacknowledged Message', respectively.  These primitives
      can be used to retrieve the unsent or unacknowledged message (or
      part of the message, in case a part was delivered) if desired.

   o  SEND_FAILURE.UDP(-Lite):

      Pass 1 primitive/event: 'Send'

      Comments: this may be used to probe for the effective PMTU when
      using in combination with the 'MAINTENANCE.SET_DF' primitive.

   o  SENDER_DRY-EVENT.SCTP:

      Pass 1 primitive/event: 'Sender Dry' notification

      Comments: this informs the application that the stack has no more
      user data to send.

   o  PARTIAL_DELIVERY_ABORTED-EVENT.SCTP:

      Pass 1 primitive/event: 'Partial Delivery Aborted' notification

      Comments: this informs the receiver of a partial message that the
      further delivery of the message has been aborted.
Top   ToC   RFC8303 - Page 41

5. Pass 3

This section presents the superset of all transport features in all protocols that were discussed in the preceding sections, based on the list of primitives in pass 2 but also on text in pass 1 to include transport features that can be configured in one protocol and are static properties in another (congestion control, for example). Again, some minor details are omitted for the sake of generalization -- e.g., TCP may provide various different IP options, but only source route is mandatory to implement, and this detail is not visible in the pass 3 transport feature "Specify IP options". As before, "UDP(-Lite)" represents both UDP and UDP-Lite, and "TCP" refers to both TCP and MPTCP.

5.1. CONNECTION-Related Transport Features

ESTABLISHMENT: Active creation of a connection from one transport endpoint to one or more transport endpoints. o Connect Protocols: TCP, SCTP, and UDP(-Lite) o Specify which IP options must always be used Protocols: TCP and UDP(-Lite) o Request multiple streams Protocols: SCTP o Limit the number of inbound streams Protocols: SCTP o Specify number of attempts and/or timeout for the first establishment message Protocols: TCP and SCTP o Obtain multiple sockets Protocols: SCTP o Disable MPTCP Protocols: MPTCP
Top   ToC   RFC8303 - Page 42
   o  Configure authentication
      Protocols: TCP and SCTP
      Comments: with TCP, this allows the configuration of MKTs.  In
      SCTP, this allows the specification of which chunk types must
      always be authenticated.  DATA, ACK, etc., are different 'chunks'
      in SCTP; one or more chunks may be included in a single packet.

   o  Indicate an Adaptation Layer (via an adaptation code point)
      Protocols: SCTP

   o  Request to negotiate interleaving of user messages
      Protocols: SCTP

   o  Hand over a message to reliably transfer (possibly multiple times)
      before connection establishment
      Protocols: TCP

   o  Hand over a message to reliably transfer during connection
      establishment
      Protocols: SCTP

   o  Enable UDP encapsulation with a specified remote UDP port number
      Protocols: SCTP

   AVAILABILITY:

   Preparing to receive incoming connection requests.

   o  Listen, 1 specified local interface
      Protocols: TCP, SCTP, and UDP(-Lite)

   o  Listen, N specified local interfaces
      Protocols: SCTP

   o  Listen, all local interfaces
      Protocols: TCP, SCTP, and UDP(-Lite)

   o  Obtain requested number of streams
      Protocols: SCTP

   o  Limit the number of inbound streams
      Protocols: SCTP

   o  Specify which IP options must always be used
      Protocols: TCP and UDP(-Lite)
Top   ToC   RFC8303 - Page 43
   o  Disable MPTCP
      Protocols: MPTCP

   o  Configure authentication
      Protocols: TCP and SCTP
      Comments: with TCP, this allows the configuration of MKTs.  In
      SCTP, this allows the specification of which chunk types must
      always be authenticated.  DATA, ACK, etc., are different 'chunks'
      in SCTP; one or more chunks may be included in a single packet.

   o  Indicate an Adaptation Layer (via an adaptation code point)
      Protocols: SCTP

   MAINTENANCE:

   Adjustments made to an open connection, or notifications about it.

   o  Change timeout for aborting connection (using retransmit limit or
      time value)
      Protocols: TCP and SCTP

   o  Suggest timeout to the peer
      Protocols: TCP

   o  Disable Nagle algorithm
      Protocols: TCP and SCTP

   o  Request an immediate heartbeat, returning success/failure
      Protocols: SCTP

   o  Notification of excessive retransmissions (early warning below
      abortion threshold)
      Protocols: TCP

   o  Add path
      Protocols: MPTCP and SCTP
      MPTCP Parameters: source-IP; source-Port; destination-IP; and
      destination-Port
      SCTP Parameters: local IP address

   o  Remove path
      Protocols: MPTCP and SCTP
      MPTCP Parameters: source-IP; source-Port; destination-IP; and
      destination-Port
      SCTP Parameters: local IP address
Top   ToC   RFC8303 - Page 44
   o  Set primary path
      Protocols: SCTP

   o  Suggest primary path to the peer
      Protocols: SCTP

   o  Configure Path Switchover
      Protocols: SCTP

   o  Obtain status (query or notification)
      Protocols: SCTP and MPTCP
      SCTP parameters: association connection state; destination
      transport address list; destination transport address reachability
      states; current local and peer receiver window sizes; current
      local congestion window sizes; number of unacknowledged DATA
      chunks; number of DATA chunks pending receipt; primary path; most
      recent SRTT on primary path; RTO on primary path; SRTT and RTO on
      other destination addresses; MTU per path; and interleaving
      supported yes/no
      MPTCP parameters: subflow-list (identified by source-IP;
      source-Port; destination-IP; and destination-Port)

   o  Specify DSCP field
      Protocols: TCP, SCTP, and UDP(-Lite)

   o  Notification of ICMP error message arrival
      Protocols: TCP and UDP(-Lite)

   o  Change authentication parameters
      Protocols: TCP and SCTP

   o  Obtain authentication information
      Protocols: TCP and SCTP

   o  Reset Stream
      Protocols: SCTP

   o  Notification of Stream Reset
      Protocols: STCP

   o  Reset Association
      Protocols: SCTP

   o  Notification of Association Reset
      Protocols: STCP

   o  Add Streams
      Protocols: SCTP
Top   ToC   RFC8303 - Page 45
   o  Notification of Added Stream
      Protocols: STCP

   o  Choose a scheduler to operate between streams of an association
      Protocols: SCTP

   o  Configure priority or weight for a scheduler
      Protocols: SCTP

   o  Specify IPv6 flow label field
      Protocols: SCTP

   o  Configure send buffer size
      Protocols: SCTP

   o  Configure receive buffer (and rwnd) size
      Protocols: SCTP

   o  Configure message fragmentation
      Protocols: SCTP

   o  Configure PMTUD
      Protocols: SCTP

   o  Configure delayed SACK timer
      Protocols: SCTP

   o  Set Cookie life value
      Protocols: SCTP

   o  Set maximum burst
      Protocols: SCTP

   o  Configure size where messages are broken up for partial delivery
      Protocols: SCTP

   o  Disable checksum when sending
      Protocols: UDP

   o  Disable checksum requirement when receiving
      Protocols: UDP

   o  Specify checksum coverage used by the sender
      Protocols: UDP-Lite

   o  Specify minimum checksum coverage required by receiver
      Protocols: UDP-Lite
Top   ToC   RFC8303 - Page 46
   o  Specify DF field
      Protocols: UDP(-Lite)

   o  Get max. transport-message size that may be sent using a non-
      fragmented IP packet from the configured interface
      Protocols: UDP(-Lite)

   o  Get max. transport-message size that may be received from the
      configured interface
      Protocols: UDP(-Lite)

   o  Specify TTL/Hop Count field
      Protocols: UDP(-Lite)

   o  Obtain TTL/Hop Count field
      Protocols: UDP(-Lite)

   o  Specify ECN field
      Protocols: UDP(-Lite)

   o  Obtain ECN field
      Protocols: UDP(-Lite)

   o  Specify IP options
      Protocols: UDP(-Lite)

   o  Obtain IP options
      Protocols: UDP(-Lite)

   o  Enable and configure "Low Extra Delay Background Transfer"
      Protocols: A protocol implementing the LEDBAT congestion control
      mechanism

   TERMINATION:

   Gracefully or forcefully closing a connection, or being informed
   about this event happening.

   o  Close after reliably delivering all remaining data, causing an
      event informing the application on the other side
      Protocols: TCP and SCTP
      Comments: a TCP endpoint locally only closes the connection for
      sending; it may still receive data afterwards.

   o  Abort without delivering remaining data, causing an event that
      informs the application on the other side
      Protocols: TCP and SCTP
Top   ToC   RFC8303 - Page 47
      Comments: in SCTP, a reason can optionally be given by the
      application on the aborting side, which can then be received by
      the application on the other side.

   o  Abort without delivering remaining data, not causing an event that
      informs the application on the other side
      Protocols: UDP(-Lite)

   o  Timeout event when data could not be delivered for too long
      Protocols: TCP and SCTP
      Comments: the timeout is configured with CONNECTION.MAINTENANCE
      "Change timeout for aborting connection (using retransmit limit or
      time value)".

5.2. DATA-Transfer-Related Transport Features

All transport features in this section refer to an existing connection, i.e., a connection that was either established or made available for receiving data. Note that TCP allows the transfer of data (a single optional user message, possibly arriving multiple times) before the connection is fully established. Reliable data transfer entails delay -- e.g., for the sender to wait until it can transmit data or due to retransmission in case of packet loss.

5.2.1. Sending Data

All transport features in this section are provided by DATA.SEND from pass 2. DATA.SEND is given a data block from the application, which here we call a "message" if the beginning and end of the data block can be identified at the receiver, and "data" otherwise. o Reliably transfer data, with congestion control Protocols: TCP o Reliably transfer a message, with congestion control Protocols: SCTP o Unreliably transfer a message, with congestion control Protocols: SCTP o Unreliably transfer a message, without congestion control Protocols: UDP(-Lite) o Configurable Message Reliability Protocols: SCTP
Top   ToC   RFC8303 - Page 48
   o  Choice of stream
      Protocols: SCTP

   o  Choice of path (destination address)
      Protocols: SCTP

   o  Ordered message delivery (potentially slower than unordered)
      Protocols: SCTP

   o  Unordered message delivery (potentially faster than ordered)
      Protocols: SCTP and UDP(-Lite)

   o  Request not to bundle messages
      Protocols: SCTP

   o  Specifying a 'payload protocol-id' (handed over as such by the
      receiver)
      Protocols: SCTP

   o  Specifying a key identifier to be used to authenticate a message
      Protocols: SCTP

   o  Request not to delay the acknowledgement (SACK) of a message
      Protocols: SCTP

5.2.2. Receiving Data

All transport features in this section are provided by DATA.RECEIVE from pass 2. DATA.RECEIVE fills a buffer provided by the application, with what here we call a "message" if the beginning and end of the data block can be identified at the receiver, and "data" otherwise. o Receive data (with no message delimiting) Protocols: TCP o Receive a message Protocols: SCTP and UDP(-Lite) o Choice of stream to receive from Protocols: SCTP o Information about partial message arrival Protocols: SCTP Comments: in SCTP, partial messages are combined with a stream sequence number so that the application can restore the correct order of data blocks an entire message consists of.
Top   ToC   RFC8303 - Page 49

5.2.3. Errors

This section describes sending failures that are associated with a specific call to DATA.SEND from pass 2. o Notification of an unsent (part of a) message Protocols: SCTP and UDP(-Lite) o Notification of an unacknowledged (part of a) message Protocols: SCTP o Notification that the stack has no more user data to send Protocols: SCTP o Notification to a receiver that a partial message delivery has been aborted Protocols: SCTP


(page 49 continued on part 3)

Next Section