Provided by: freebsd-manpages_12.2-1_all bug

NAME

       sctp — Internet Stream Control Transmission Protocol

SYNOPSIS

       options SCTP
       options SCTP_SUPPORT

       #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.

       The SCTP kernel implementation may either be compiled into the kernel, or loaded dynamically as a module.
       To support dynamic loading of the stack, the kernel must be compiled with options SCTP_SUPPORT.

   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.

   Socket Options
       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.

   MIB Variables
       The SCTP protocol implements a number of variables in the net.inet.sctp branch of the sysctl(3) MIB.

       Congestion Control

       default_cc_module
               Default  congestion control module.  Default value is 0.  The minimum is 0, and the maximum is 3.
               A value of 0 enables the default congestion control algorithm.  A value of  1  enables  the  High
               Speed  congestion control algorithm.  A value of 2 enables the HTCP congestion control algorithm.
               A value of 3 enables the data center congestion control (DCCC) algorithm.

       initial_cwnd
               Defines the initial congestion window size in MTUs.

       cwnd_maxburst
               Use congestion control instead of 'blind' logic to limit maximum  burst  when  sending.   Default
               value is 1. May be set to 0 or 1.

       ecn_enable
               Enable Explicit Congestion Notification (ECN).  Default value is 1. May be set to 0 or 1.

       rttvar_steady_step
               Number  of  identical  bandwidth  measurements DCCC takes to try step down the congestion window.
               Default value is 20.  The minimum is 0, and the maximum is 65535.

       rttvar_eqret
               Whether DCCC reduces the congestion  window  size  when  round-trip  time  and  bandwidth  remain
               unchanged.  Default value is 0.  May be set to 0 or 1.

       rttvar_bw
               Shift  amount DCCC uses for bandwidth smoothing on round-trip-time calculation.  Default value is
               4.  The minimum is 0, and the maximum is 32.

       rttvar_rtt
               Shift amount DCCC uses for round-trip-time smoothing  on  round-trip-time  calculation.   Default
               value is 5.  The minimum is 0, and the maximum is 32.

       use_dcccecn
               Enable ECN when using DCCC.  Default value is 1.  May be set to 0 or 1.

       Misc

       getcred
               Get the ucred of a SCTP connection.

       assoclist
               List of active SCTP associations.

       stats   SCTP statistics (struct sctp_stat).

       diag_info_code
               Diagnostic information error cause code.

       blackhole
               Enable SCTP blackholing.  See blackhole(4) for more details.

       sendall_limit
               Maximum message size (in bytes) that can be transmitted with SCTP_SENDALL flags set.

       buffer_splitting
               Enable send/receive buffer splitting.

       vtag_time_wait
               Vtag wait time in seconds, 0 to disable.

       nat_friendly_init
               Enable sending of the NAT-friendly SCTP option on INITs.

       enable_sack_immediately
               Enable sending of the SACK-IMMEDIATELY bit.

       udp_tunneling_port
               Set the SCTP/UDP tunneling port.

       mobility_fasthandoff
               Enable SCTP fast handoff.

       mobility_base
               Enable SCTP base mobility

       default_frag_interleave
               Default fragment interleave level.

       default_ss_module
               Default stream scheduling module.

       log_level
               Ltrace/KTR trace logging level.

       max_retran_chunk
               Number of retransmissions of a DATA chunk before an association is aborted.

       min_residual
               Minimum residual data chunk in second part of split.

       strict_data_order
               Enforce strict data ordering, abort if control inside data.

       abort_at_limit
               Abort when one-to-one hits qlimit.

       hb_max_burst
               Confirmation heartbeat max burst.

       do_sctp_drain
               Flush  chunks  in  receive queues with TSN higher than the cumulative TSN if the system is low on
               mbufs.

       max_chained_mbufs
               Default max number of small mbufs on a chain.

       abc_l_var
               SCTP ABC max increase per SACK (L).

       nat_friendly
               SCTP NAT friendly operation.

       cmt_use_dac
               CMT DAC on/off flag.

       cmt_on_off
               CMT settings.

       outgoing_streams
               Default number of outgoing streams.

       incoming_streams
               Default number of incoming streams.

       add_more_on_output
               When space-wise is it worthwhile to try to add more to a socket send buffer.

       path_pf_threshold
               Default potentially failed threshold.

       path_rtx_max
               Default maximum of retransmissions per path.

       assoc_rtx_max
               Default maximum number of retransmissions per association.

       init_rtx_max
               Default maximum number of retransmissions for INIT chunks.

       valid_cookie_life
               Default cookie lifetime in seconds.

       init_rto_max
               Default maximum retransmission timeout during association setup in ms.

       rto_initial
               Default initial retransmission timeout in ms.

       rto_min
               Default minimum retransmission timeout in ms.

       rto_max
               Default maximum retransmission timeout in ms.

       secret_lifetime
               Default secret lifetime in seconds.

       shutdown_guard_time
               Shutdown guard timer in seconds (0 means 5 times RTO.Max).

       pmtu_raise_time
               Default PMTU raise timer in seconds.

       heartbeat_interval
               Default heartbeat interval in ms.

       asoc_resource
               Max number of cached resources in an association.

       sys_resource
               Max number of cached resources in the system.

       sack_freq
               Default SACK frequency.

       delayed_sack_time
               Default delayed SACK timer in ms.

       chunkscale
               Tunable for scaling of number of chunks and messages.

       min_split_point
               Minimum size when splitting a chunk.

       pcbhashsize
               Tunable for PCB hash table sizes.

       tcbhashsize
               Tunable for TCB hash table sizes.

       maxchunks
               Default max chunks on queue per association.

       fr_maxburst
               Default max burst for SCTP endpoints when fast retransmitting.

       maxburst
               Default max burst for SCTP endpoints.

       peer_chkoh
               Amount to debit peers rwnd per chunk sent.

       strict_sacks
               Enable SCTP Strict SACK checking.

       pktdrop_enable
               Enable SCTP PKTDROP.

       nrsack_enable
               Enable SCTP NR-SACK.

       reconfig_enable
               Enable SCTP RE-CONFIG.

       asconf_enable
               Enable SCTP ASCONF.

       auth_enable
               Enable SCTP AUTH.

       pr_enable
               Enable PR-SCTP.

       auto_asconf
               Enable SCTP Auto-ASCONF.

       recvspace
               Maximum incoming SCTP buffer size.

       sendspace
               Maximum outgoing SCTP buffer size.

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), blackhole(4)

BUGS

       The sctp kernel module cannot be unloaded.

Debian                                            July 9, 2020                                           SCTP(4)