bionic (4) sctp.4freebsd.gz

Provided by: freebsd-manpages_11.1-3_all bug

NAME

     sctp — Internet Stream Control Transmission Protocol

SYNOPSIS

     #include <sys/types.h>
     #include <sys/socket.h>
     #include <netinet/sctp.h>

     int
     socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);

     int
     socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

DESCRIPTION

     The SCTP protocol provides reliable, flow-controlled, two-way transmission of data.  It is a message
     oriented protocol and can support the SOCK_STREAM and SOCK_SEQPACKET abstractions.  SCTP uses the standard
     Internet address format and, in addition, provides a per-host collection of “port addresses”.  Thus, each
     address is composed of an Internet address specifying the host and network, with a specific SCTP port on
     the host identifying the peer entity.

     There are two models of programming in SCTP.  The first uses the SOCK_STREAM abstraction.  In this
     abstraction sockets utilizing the SCTP protocol are either “active” or “passive”.  Active sockets initiate
     connections to passive sockets.  By default, SCTP sockets are created active; to create a passive socket,
     the listen(2) system call must be used after binding the socket with the bind(2) or sctp_bindx(3) system
     calls.  Only passive sockets may use the accept(2) call to accept incoming connections.  Only active
     sockets may use the connect(2) call to initiate connections.

     The other abstraction SOCK_SEQPACKET provides a “connectionless” mode of operation in that the user may
     send to an address (using any of the valid send calls that carry a socket address) and an association will
     be setup implicitly by the underlying SCTP transport stack.  This abstraction is the only one capable of
     sending data on the third leg of the four-way handshake.  A user must still call listen(2) to allow the
     socket to accept connections.  Calling listen(2) however does not restrict the user from still initiating
     implicit connections to other peers.

     The SCTP protocol directly supports multi-homing.  So when binding a socket with the “wildcard” address
     INADDR_ANY, the SCTP stack will inform the peer about all of the local addresses that are deemed in scope
     of the peer.  The peer will then possibly have multiple paths to reach the local host.

     The SCTP transport protocol is also multi-streamed.  Multi-streaming refers to the ability to send sub-
     ordered flows of messages.  A user performs this by specifying a specific stream in one of the extended
     send calls such as the sctp_send(3) function call.  Sending messages on different streams will allow
     parallel delivery of data i.e., a message loss in stream 1 will not block the delivery of messages sent in
     stream 2.

     The SCTP transport protocol also provides a unordered service as well.  The unordered service allows a
     message to be sent and delivered with no regard to the ordering of any other message.

   Extensions
     The FreeBSD implementation of SCTP also supports the following extensions:

     sctp partial reliability This extension allows one to have message be skipped and not delivered based on
             some user specified parameters.

     sctp dynamic addressing This extension allows addresses to be added and deleted dynamically from an
             existing association.

     sctp authentication This extension allows the user to authenticate specific peer chunks (including data) to
             validate that the peer who sent the message is in fact the peer who setup the association.  A
             shared key option is also provided for so that two stacks can pre-share keys.

     packet drop Some routers support a special satellite protocol that will report losses due to corruption.
             This allows retransmissions without subsequent loss in bandwidth utilization.

     stream reset This extension allows a user on either side to reset the stream sequence numbers used by any
             or all streams.

     SCTP supports a number of socket options which can be set with setsockopt(2) and tested with getsockopt(2)
     or sctp_opt_info(3):

     SCTP_NODELAY                Under most circumstances, SCTP sends data when it is presented; when
                                 outstanding data has not yet been acknowledged, it gathers small amounts of
                                 output to be sent in a single packet once an acknowledgement is received.  For
                                 some clients, such as window systems that send a stream of mouse events which
                                 receive no replies, this packetization may cause significant delays.  The
                                 boolean option SCTP_NODELAY defeats this algorithm.

     SCTP_RTOINFO                This option returns specific information about an associations “Retransmission
                                 Time Out”.  It can also be used to change the default values.

     SCTP_ASSOCINFO              This option returns specific information about the requested association.

     SCTP_INITMSG                This option allows you to get or set the default sending parameters when an
                                 association is implicitly setup.  It allows you to change such things as the
                                 maximum number of streams allowed inbound and the number of streams requested
                                 of the peer.

     SCTP_AUTOCLOSE              For the one-to-many model (SOCK_SEQPACKET) associations are setup implicitly.
                                 This option allows the user to specify a default number of idle seconds to
                                 allow the association be maintained.  After the idle timer (where no user
                                 message have been sent or have been received from the peer) the association
                                 will be gracefully closed.  The default for this value is 0, or unlimited
                                 (i.e., no automatic close).

     SCTP_SET_PEER_PRIMARY_ADDR  The dynamic address extension allows a peer to also request a particular
                                 address of its be made into the primary address.  This option allows the caller
                                 to make such a request to a peer.  Note that if the peer does not also support
                                 the dynamic address extension, this call will fail.  Note the caller must
                                 provide a valid local address that the peer has been told about during
                                 association setup or dynamically.

     SCTP_PRIMARY_ADDR           This option allows the setting of the primary address that the caller wishes to
                                 send to.  The caller provides the address of a peer that is to be made primary.

     SCTP_ADAPTATION_LAYER       The dynamic address extension also allows a user to pass a 32 bit opaque value
                                 upon association setup.  This option allows a user to set or get this value.

     SCTP_DISABLE_FRAGMENTS      By default SCTP will fragment user messages into multiple pieces that will fit
                                 on the network and then later, upon reception, reassemble the pieces into a
                                 single user message.  If this option is enabled instead, any send that exceeds
                                 the path maximum transfer unit (P-MTU) will fail and the message will NOT be
                                 sent.

     SCTP_PEER_ADDR_PARAMS       This option will allow a user to set or get specific peer address parameters.

     SCTP_DEFAULT_SEND_PARAM     When a user does not use one of the extended send calls (e.g., sctp_sendmsg(3))
                                 a set of default values apply to each send.  These values include things like
                                 the stream number to send to as well as the per-protocol id.  This option lets
                                 a caller both get and set these values.  If the user changes these default
                                 values, then these new values will be used as the default whenever no
                                 information is provided by the sender (i.e., the non-extended API is used).

     SCTP_EVENTS                 SCTP has non-data events that it can communicate to its application.  By
                                 default these are all disabled since they arrive in the data path with a
                                 special flag MSG_NOTIFICATION set upon the received message.  This option lets
                                 a caller both get what events are current being received as well as set
                                 different events that they may be interested in receiving.

     SCTP_I_WANT_MAPPED_V4_ADDR  SCTP supports both IPV4 and IPV6.  An association may span both IPV4 and IPV6
                                 addresses since SCTP is multi-homed.  By default, when opening an IPV6 socket,
                                 when data arrives on the socket from a peer's V4 address the V4 address  will
                                 be presented with an address family of AF_INET.  If this is undesirable, then
                                 this option can be enabled which will then convert all V4 addresses into mapped
                                 V6 representations.

     SCTP_MAXSEG                 By default SCTP chooses its message fragmentation point based upon the smallest
                                 P-MTU of the peer.  This option lets the caller set it to a smaller value.
                                 Note that while the user can change this value, if the P-MTU is smaller than
                                 the value set by the user, then the P-MTU value will override any user setting.

     SCTP_DELAYED_ACK_TIME       This option lets the user both set and get the delayed ack time (in
                                 milliseconds) that SCTP is using.  The default is 200 milliseconds.

     SCTP_PARTIAL_DELIVERY_POINT
                                 SCTP at times may need to start delivery of a very large message before the
                                 entire message has arrived.  By default SCTP waits until the incoming message
                                 is larger than one fourth of the receive buffer.  This option allows the stacks
                                 value to be overridden with a smaller value.

     SCTP_FRAGMENT_INTERLEAVE    SCTP at times will start partial delivery (as mentioned above).  In the normal
                                 case successive reads will continue to return the rest of the message, blocking
                                 if needed, until all of that message is read.  However this means other
                                 messages may have arrived and be ready for delivery and be blocked behind the
                                 message being partially delivered.  If this option is enabled, when a partial
                                 delivery message has no more data to be received, then a subsequent read may
                                 return a different message that is ready for delivery.  By default this option
                                 is off since the user must be using the extended API's to be able to tell the
                                 difference between messages (via the stream and stream sequence number).

     SCTP_AUTH_CHUNK             By default only the dynamic addressing chunks are authenticated.  This option
                                 lets a user request an additional chunk be authenticated as well.  Note that
                                 successive calls to this option will work and continue to add more chunks that
                                 require authentication.  Note that this option only effects future associations
                                 and not existing ones.

     SCTP_AUTH_KEY               This option allows a user to specify a shared key that can be later used to
                                 authenticate a peer.

     SCTP_HMAC_IDENT             This option will let you get or set the list of HMAC algorithms used to
                                 authenticate peers.  Note that the HMAC values are in priority order where the
                                 first HMAC identifier is the most preferred and the last is the least
                                 preferred.

     SCTP_AUTH_ACTIVE_KEY        This option allows you to make a key active for the generation of
                                 authentication information.  Note that the peer must have the same key or else
                                 the data will be discarded.

     SCTP_AUTH_DELETE_KEY        This option allows you to delete an old key.

     SCTP_USE_EXT_RECVINFO       The sockets api document allows an extended send/receive information structure
                                 to be used.  The extended structure includes additional fields related to the
                                 next message to be received (after the current receive completes) if such
                                 information is known.  By default the system will not pass this information.
                                 This option allows the user to request this information.

     SCTP_AUTO_ASCONF            By default when bound to all address and the system administrator has enables
                                 automatic dynamic addresses, the SCTP stack will automatically generate address
                                 changes into add and delete requests to any peers by setting this option to
                                 true.  This option allows an endpoint to disable that behavior.

     SCTP_MAXBURST               By default SCTP implements micro-burst control so that as the congestion window
                                 opens up no large burst of packets can be generated.  The default burst limit
                                 is four.  This option lets the user change this value.

     SCTP_CONTEXT                Many sctp extended calls have a context field.  The context field is a 32 bit
                                 opaque value that will be returned in send failures.  This option lets the
                                 caller set the default context value to use when none is provided by the user.

     SCTP_EXPLICIT_EOR           By default, a single send is a complete message.  SCTP generates an implied
                                 record boundary.  If this option is enabled, then all sends are part of the
                                 same message until the user indicates an end of record with the special flag
                                 SCTP_EOR passed in the sctp_sndrcvinfo flags field.  This effectively makes all
                                 sends part of the same message until the user specifies differently.  This
                                 means that a caller must NOT change the stream number until after the SCTP_EOR
                                 is passed to SCTP else an error will be returned.

     SCTP_STATUS                 This option is a read-only option that returns various status information about
                                 the specified association.

     SCTP_GET_PEER_ADDR_INFO     This read-only option returns information about a peer address.

     SCTP_PEER_AUTH_CHUNKS       This read-only option returns a list of the chunks the peer requires to be
                                 authenticated.

     SCTP_LOCAL_AUTH_CHUNKS      This read-only option returns a list of the locally required chunks that must
                                 be authenticated.

     SCTP_RESET_STREAMS          This socket option is used to cause a stream sequence number or all stream
                                 sequence numbers to be reset.  Note that the peer SCTP endpoint must also
                                 support the stream reset extension as well.

SEE ALSO

     accept(2), bind(2), connect(2), listen(2), sctp_bindx(3), sctp_connectx(3), sctp_opt_info(3),
     sctp_recvmsg(3), sctp_sendmsg(3)