plucky (7) sctp.7.gz

Provided by: libsctp-dev_1.0.21+dfsg-1_amd64 bug

NAME

       sctp - SCTP protocol.

SYNOPSIS

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

       sctp_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);
       sctp_socket = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

DESCRIPTION

       This  is an implementation of the SCTP protocol as defined in RFC4960. It is a message oriented, reliable
       transport protocol with direct support for multihoming that runs on top of ip(7), and  supports  both  v4
       and v6 versions.

       Like  TCP, SCTP provides reliable, connection oriented data delivery with congestion control. Unlike TCP,
       SCTP also provides message boundary preservation, ordered and unordered message delivery, multi-streaming
       and multi-homing. Detection of data corruption, loss of data and duplication of data is achieved by using
       checksums and sequence numbers. A selective retransmission  mechanism  is  applied  to  correct  loss  or
       corruption of data.

       This  implementation  supports  a  mapping of SCTP into sockets API as defined in the RFC6458(Sockets API
       extensions for SCTP). Two styles of interfaces are supported.

       A one-to-many style interface with 1 to MANY relationship  between  socket  and  associations  where  the
       outbound association setup is implicit. The syntax of a one-to-many style socket() call is

       sd = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);

       A  typical  server  in  this style uses the following socket calls in sequence to prepare an endpoint for
       servicing requests.

            1. socket()
            2. bind()
            3. listen()
            4. recvmsg()
            5. sendmsg()
            6. close()

       A typical client uses the following calls in sequence to setup an association with a  server  to  request
       services.

            1. socket()
            2. sendmsg()
            3. recvmsg()
            4. close()

       A  one-to-one  style  interface  with  a 1 to 1 relationship between socket and association which enables
       existing TCP applications to be ported to SCTP with very little effort. The syntax of a one-to-one  style
       socket() call is

       sd = socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);

       A  typical server in one-to-one style uses the following system call sequence to prepare an SCTP endpoint
       for servicing requests:

            1. socket()
            2. bind()
            3. listen()
            4. accept()

       The accept() call blocks until a new association is set up. It returns with a new socket descriptor.  The
       server  then uses the new socket descriptor to communicate with the client, using recv() and send() calls
       to get requests and send back responses. Then it calls

            5. close()

       to terminate the association. A typical client uses the  following  system  call  sequence  to  setup  an
       association with a server to request services:

            1. socket()
            2. connect()

       After  returning from connect(), the client uses send() and recv() calls to send out requests and receive
       responses from the server. The client calls

            3. close()

       to terminate this association when done.

ADDRESS FORMATS

       SCTP is built on top of IP (see ip(7)).  The address formats defined by ip(7) apply to SCTP.   SCTP  only
       supports point-to-point communication; broadcasting and multicasting are not supported.

SYSCTLS

       These  variables  can  be accessed by the /proc/sys/net/sctp/* files or with the sysctl(2) interface.  In
       addition, most IP sysctls also apply to SCTP. See ip(7).

       Please check kernel documentation for this, at Documentation/networking/ip-sysctl.rst.

STATISTICS

       These variables can be accessed by the /proc/net/sctp/* files.

       assocs Displays the following information about the active associations.  assoc  ptr,  sock  ptr,  socket
              style,  sock state, association state, hash bucket, association id, bytes in transmit queue, bytes
              in receive queue, user id, inode, local port, remote  port,  local  addresses,  remote  addresses,
              heartbeat  interval, in streams, out streams, max retransmissions, init retries, shutdown retries,
              retransmitted chunks, sock transmit queue committed bytes, sock transmit  queue  bytes,  and  sock
              send and receive buffer bytes.

       eps    Displays  the  following  information  about the active endpoints.  endpoint ptr, sock ptr, socket
              style, sock state, hash bucket, local port, user id, inode and local addresses.

       snmp   Displays the following statistics related to SCTP states, packets and chunks.

       SctpCurrEstab
              The number of associations for which the current state is either ESTABLISHED, SHUTDOWN-RECEIVED or
              SHUTDOWN-PENDING.

       SctpActiveEstabs
              The  number of times that associations have made a direct transition to the ESTABLISHED state from
              the COOKIE-ECHOED state. The upper layer initiated the association attempt.

       SctpPassiveEstabs
              The number of times that associations have made a direct transition to the ESTABLISHED state  from
              the CLOSED state. The remote endpoint initiated the association attempt.

       SctpAborteds
              The  number  of times that associations have made a direct transition to the CLOSED state from any
              state using the primitive 'ABORT'. Ungraceful termination of the association.

       SctpShutdowns
              The number of times that associations have made a direct  transition  to  the  CLOSED  state  from
              either  the  SHUTDOWN-SENT  state  or  the  SHUTDOWN-ACK-SENT  state.  Graceful termination of the
              association.

       SctpOutOfBlues
              The number of out of the blue packets received by the host. An out of the blue packet is  an  SCTP
              packet  correctly  formed, including the proper checksum, but for which the receiver was unable to
              identify an appropriate association.

       SctpChecksumErrors
              The number of SCTP packets received with an invalid checksum.

       SctpOutCtrlChunks
              The number of SCTP control chunks sent (retransmissions are not  included).   Control  chunks  are
              those chunks different from DATA.

       SctpOutOrderChunks
              The number of SCTP ordered data chunks sent (retransmissions are not included).

       SctpOutUnorderChunks
              The  number  of  SCTP  unordered  chunks(data  chunks  in  which  the  U  bit  is  set  to 1) sent
              (retransmissions are not included).

       SctpInCtrlChunks
              The number of SCTP control chunks received (no duplicate chunks included).

       SctpInOrderChunks
              The number of SCTP ordered data chunks received (no duplicate chunks included).

       SctpInUnorderChunks
              The number of SCTP unordered chunks(data chunks in which the U bit  is  set  to  1)  received  (no
              duplicate chunks included).

       SctpFragUsrMsgs
              The number of user messages that have to be fragmented because of the MTU.

       SctpReasmUsrMsgs
              The number of user messages reassembled, after conversion into DATA chunks.

       SctpOutSCTPPacks
              The number of SCTP packets sent. Retransmitted DATA chunks are included.

       SctpInSCTPPacks
              The number of SCTP packets received. Duplicates are included.

       SctpT1InitExpireds
              The number of timer T1 INIT expired.

       SctpT1CookieExpireds
              The number of timer T1 COOKIE-ECHO expired.

       SctpT2ShutdownExpireds
              The number of timer T2 SHUTDOWN expired.

       SctpT3RtxExpireds
              The number of timer T3 RTX expired.

       SctpT4RtoExpireds
              The number of timer T4 RTO expired.

       SctpT5ShutdownGuardExpireds
              The number of timer T5 SHUTDOWN GUARD expired.

       SctpDelaySackExpireds
              The number of timer DELAY_SACK expired.

       SctpAutocloseExpireds
              The number of timer AUTOCLOSE expired.

       SctpT3Retransmits
              The number of T3 timer retransmission.

       SctpPmtudRetransmits
              The number of PMTUD retransmission.

       SctpFastRetransmits
              The number of FAST retransmission.

       SctpInPktSoftirq
              The number of SCTP packets received in Softirq.

       SctpInPktBacklog
              The number of SCTP packets received in Backlog.

       SctpInPktDiscards
              The number of SCTP packets discarded in receiving.

       SctpInDataChunkDiscards
              The number of SCTP data chunks discarded in receiving.

CONTROL MSGS

       The  ancillary  data  is  carried  in msg_control field of struct msghdr, which is used in sendmsg(2) and
       recvmsg(2) call. The SCTP  stack  uses  the  ancillary  data  to  communicate  the  attributes,  such  as
       SCTP_RCVINFO,  of  the  message  stored  in  msg_iov to the socket endpoint.  Each ancillary data item is
       preceded by a struct cmsghdr, see cmsg(3).  The different cmsg types for SCTP are listed below,  and  all
       these related macros and structures are defined in /usr/include/netinet/sctp.h.

       SCTP_INIT
              This  cmsg  provides  information for initializing new SCTP associations for sendmsg() with struct
              sctp_initmsg, which is the same as SCTP_INITMSG socket option's data structure.

       SCTP_SNDRCV
              This cmsg specifies SCTP options for sendmsg() and  describes  SCTP  header  information  about  a
              received  message  through  recvmsg()  with  struct sctp_sndrcvinfo. It mixes the send and receive
              path, and SCTP_SNDINFO and SCTP_RCVINFO split this information,  so  these  structures  should  be
              used,  when possible, since SCTP_SNDRCV is deprecated.  sctp_sendmsg(3) and sctp_send(3) provide a
              simple way to use this cmsg.

              Note that an application must use the SCTP_RECVRCVINFO socket option to  enable  the  delivery  of
              this information.

       SCTP_EXTRCV
              This  cmsg  specifies  SCTP  options  for  SCTP  header  information  about a received message via
              recvmsg() with struct sctp_extrcvinfo, and this structure is an extended version  of  SCTP_SNDRCV.
              Note  that  data  in  the next message is not valid unless the current message is completely read,
              i.e., unless the MSG_EOR is set. SCTP_NXTINFO should be used when possible, since  SCTP_EXTRCV  is
              considered deprecated.  sctp_recvmsg(3) provides a simple way to use this cmsg.

              Note  that  an  application  must use the SCTP_RECVNXTINFO socket option to enable the delivery of
              this information.

       SCTP_RCVINFO, SCTP_NXTINFO
              These cmsgs describe SCTP receive information about a  received  message  through  recvmsg()  with
              struct  sctp_rcvinfo,  and  SCTP  receive  information  of the next message that will be delivered
              through recvmsg() if this information is already available when  delivering  the  current  message
              with struct sctp_nxtinfo.  sctp_recvv(3) provides a simple way to use these cmsgs.

              Note  that  an  application  must  use  the  SCTP_RECVRCVINFO  and SCTP_RECVNXTINFO socket options
              accordingly to enable the delivery of this information.

       SCTP_SNDINFO, SCTP_PRINFO, SCTP_AUTHINFO, SCTP_DSTADDRV4, SCTP_DSTADDRV6
              These cmsgs specifie a couple of SCTP options for sendmsg() for SEND,  PRSCTP,  AUTH  and  DSTADDR
              information  with  struct  sctp_sndinfo,  sctp_prinfo,  sctp_authinfo  and in(6)_addr accordingly.
              sctp_sendv(3) provides a simple way to use these cmsgs.

EVENTS and NOTIFICATIONS

       An SCTP application may need to understand and process events and errors that happen on the  SCTP  stack.
       These  events  include  network  status  changes,  association  startups,  remote operational errors, and
       undeliverable messages.   When  a  notification  arrives,  recvmsg()  returns  the  notification  in  the
       application-supplied  data  buffer via msg_iov, and sets MSG_NOTIFICATION in msg_flags. See socket option
       SCTP_EVENT for the event enabling. The different events are listed below, and all  these  related  macros
       and structures are defined in /usr/include/netinet/sctp.h.

       SCTP_ASSOC_CHANGE
              Communication  notifications  inform  the application that an SCTP association has either begun or
              ended. The notification format is struct sctp_assoc_change.

       SCTP_PEER_ADDR_CHANGE
              When a destination address of a multi-homed peer encounters a state change, a peer address  change
              event is sent. The notification format is struct sctp_paddr_change.

       SCTP_REMOTE_ERROR
              A  remote  peer may send an Operation Error message to its peer.  This message indicates a variety
              of error conditions on an association.  The notification format is struct sctp_remote_error.

       SCTP_SEND_FAILED
              If SCTP cannot deliver a message, it can  return  back  the  message  as  a  notification  if  the
              SCTP_SEND_FAILED event is enabled. The notification format is struct sctp_send_failed. Please note
              that this notification is deprecated. Use SCTP_SEND_FAILED_EVENT instead.

       SCTP_SHUTDOWN_EVENT
              When a peer sends a SHUTDOWN, SCTP delivers this notification to inform the  application  that  it
              should cease sending data. The notification format is struct sctp_shutdown_event.

       SCTP_ADAPTATION_INDICATION
              When  a  peer  sends  an Adaptation Layer Indication parameter, SCTP delivers this notification to
              inform the application about the peer's adaptation layer indication. The  notification  format  is
              struct sctp_adaptation_event.

       SCTP_PARTIAL_DELIVERY_EVENT
              When  a  receiver is engaged in a partial delivery of a message, this notification will be used to
              indicate various events. The notification format is struct sctp_pdapi_event.

       SCTP_AUTHENTICATION_EVENT
              This is used to report different events relating to the use of the extension to authenticate  SCTP
              messages. The notification format is struct sctp_authkey_event.

       SCTP_SENDER_DRY_EVENT
              When the SCTP stack has no more user data to send or retransmit, this notification is given to the
              user.  Also, at the time when a user app subscribes to this event, if there is no data to be  sent
              or  retransmit,  the  stack will immediately send up this notification. The notification format is
              struct sctp_sender_dry_event.

       SCTP_SEND_FAILED_EVENT
              If SCTP cannot deliver a message, it can  return  back  the  message  as  a  notification  if  the
              SCTP_SEND_FAILED_EVENT event is enabled. The notification format is struct sctp_send_failed_event.

SOCKET OPTIONS

       To  set or get a SCTP socket option, call getsockopt(2) to read or setsockopt(2) to write the option with
       the option level argument set to SOL_SCTP.  Note that all  these  macros  and  structures  described  for
       parameters  are  defined  in  /usr/include/netinet/sctp.h,  and  for one-to-one style sockets a specified
       assoc_id works the same as SCTP_FUTURE_ASSOC.

       SCTP_RTOINFO.
              This option is used  to  get  or  set  the  protocol  parameters  used  to  initialize  and  bound
              retransmission timeout(RTO).

              The  parameter type is struct sctp_rtoinfo, for reading and writing.  srto_assoc_id is a specified
              assoc_id or SCTP_FUTURE_ASSOC.

              Default:            srto_max=sysctl_net.sctp.rto_max,            srto_min=sysctl_net.sctp.rto_min,
              srto_initial=sysctl_net.sctp.rto_initial.

       SCTP_ASSOCINFO
              This option is used to both examine and set various association and endpoint parameters.

              The  parameter  type  is  struct  sctp_assocparams,  for reading and writing.  sasoc_assoc_id is a
              specified assoc_id or SCTP_FUTURE_ASSOC. Note that some fields of this structure are  for  reading
              only:

                struct sctp_assocparams {
                        sctp_assoc_t    sasoc_assoc_id;
                        __u16           sasoc_asocmaxrxt; (RW)
                        __u16           sasoc_number_peer_destinations; (R)
                        __u32           sasoc_peer_rwnd; (R)
                        __u32           sasoc_local_rwnd; (R)
                        __u32           sasoc_cookie_life; (RW)
                };

              Default:                                 sasoc_asocmaxrxt=sysctl_net.sctp.association_max_retrans,
              sasoc_cookie_life=sysctl_net.sctp.valid_cookie_life.

       SCTP_INITMSG
              This option  is  used  to  get  or  set  the  protocol  parameters  for  the  default  association
              initialization.

              The parameter type is struct sctp_initmsg, for reading and writing.

              Default:                       sinit_num_ostreams=10,                      sinit_max_instreams=10,
              sinit_max_attempts=sysctl_net.sctp.max_init_retransmits,
              sinit_max_init_timeo=sysctl_net.sctp.rto_max.

       SCTP_NODELAY
              Turn  on/off  any  Nagle-like  algorithm.  This  means  that packets are generally sent as soon as
              possible and no unnecessary delays are introduced, at the cost of more packets in the network.

              The parameter type is int boolean, for reading and writing.

              Default: 0.

       SCTP_AUTOCLOSE
              This socket option is applicable to the one-to-many style socket only.  When  set  it  will  cause
              associations  that  are idle for more than the specified number of seconds to automatically close.
              An association being idle is defined an association that has NOT sent or received user data within
              a period.

              The  parameter  type is int(seconds), for reading and writing. 0 indicates that no automatic close
              of any associations should be performed.

              Default: sysctl_net.sctp.max_autoclose.

       SCTP_SET_PEER_PRIMARY_ADDR
              Requests that the peer mark the enclosed address as the association primary. The enclosed  address
              must be one of the association's locally bound addresses.

              The  parameter  type  is  struct sctp_setpeerprim, for writing only.  sspp_assoc_id is a specified
              assoc_id.

              Default: the 1st local address added.  Require: SCTP_ASCONF_SUPPORTED.

       SCTP_PRIMARY_ADDR
              Requests that the local SCTP stack use the enclosed peer address as the association  primary.  The
              enclosed address must be one of the association peer's addresses.

              The parameter type is struct sctp_prim, for writing only. ssp_assoc_id is a specified assoc_id.

              Default: the 1st peer address added.  Require: SCTP_ASCONF_SUPPORTED.

       SCTP_DISABLE_FRAGMENTS
              If  enabled  no  SCTP  message  fragmentation  will  be performed. Instead if a message being sent
              exceeds the current PMTU size, the message will NOT be sent and an error will be indicated to  the
              user.

              The parameter type is int boolean, for reading and writing.

              Default: 0.

       SCTP_PEER_ADDR_PARAMS
              Using  this  option,  applications  can  enable  or  disable heartbeats for any peer address of an
              association, modify an address's heartbeat interval, force a heartbeat to be sent immediately, and
              adjust  the  address's  maximum  number  of  retransmissions  sent before an address is considered
              unreachable.

              The parameter type is  struct  sctp_paddrparams,  for  reading  and  writing.   spp_address  is  a
              specified transport address or 0, spp_assoc_id is a specified assoc_id or SCTP_FUTURE_ASSOC.

              Default:    hbinterval=sysctl_net.sctp.hb_interval,   pathmaxrxt=sysctl_net.sctp.path_max_retrans,
              pathmtu=dev/route's,                                       sackdelay=sysctl_net.sctp.sack_timeout,
              param_flags=HB_ENABLE|PMTUD_ENABLE|SACKDELAY_ENABLE, flowlabel=0, dscp=0.

       SCTP_DEFAULT_SEND_PARAM
              Applications  that  wish  to  use  the  sendto()  system call may wish to specify a default set of
              parameters that would normally be supplied through the inclusion of ancillary  data.  This  option
              has been obsoleted by SCTP_DEFAULT_SNDINFO.

              The  parameter type is struct sctp_sndrcvinfo. For reading, sinfo_assoc_id is a specified assoc_id
              or   SCTP_FUTURE_ASSOC.   For   writing,   sinfo_assoc_id   is    a    specified    assoc_id    or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Default:      default_stream=0,      default_flags=0,      default_ppid=0,      default_context=0,
              default_timetolive=0.

       SCTP_EVENTS
              This socket option is used to specify various notifications and ancillary data the user wishes  to
              receive. This option has been obsoleted by SCTP_EVENT.

              The parameter type is struct sctp_event_subscribe, for reading and writing.

              Default: 0.

       SCTP_I_WANT_MAPPED_V4_ADDR
              This  socket option is used to turn on or off mapped V4 addresses. If this option is turned on and
              the socket is type PF_INET6, then IPv4 addresses will be mapped  to  V6  representation.  If  this
              option  is  turned  off, then no mapping will be done of V4 addresses and a user will receive both
              PF_INET6 and PF_INET type addresses on the socket.

              The parameter type is int boolean, for reading and writing.

              Default: 1.

       SCTP_MAXSEG
              This socket option specifies the maximum size to put in any outgoing SCTP DATA chunk. If a message
              is  larger  than  this  size  it will be fragmented by SCTP into the specified size. Note that the
              underlying SCTP implementation may fragment into  smaller  sized  chunks  when  the  PMTU  of  the
              underlying  association  is  smaller  than  the value set by the user. 0 indicates the user is NOT
              limiting fragmentation and only the PMTU will effect SCTP's choice of DATA chunk size.

              The parameter type is struct sctp_assoc_value, for reading and writing.  assoc_id is  a  specified
              assoc_id or SCTP_FUTURE_ASSOC.

              Default: 0(no limit).

       SCTP_STATUS
              Applications  can  retrieve current status information about an association, including association
              state, peer receiver window size, number of unacked data chunks, and number of data chunks pending
              receipt.

              The  parameter  type  is  struct  sctp_status,  for  reading  only.  sstat_assoc_id is a specified
              assoc_id.

       SCTP_GET_PEER_ADDR_INFO
              Applications can retrieve information about a specific peer address of an  association,  including
              its reachability state, congestion window, and retransmission timer values.

              The  parameter  type  is  struct  sctp_paddrinfo,  for reading only. spinfo_address is a specified
              transport address, sas_assoc_id is a specified assoc_id or SCTP_FUTURE_ASSOC.

       SCTP_GET_ASSOC_STATS
              Applications can retrieve current statistics  about  an  association,  including  SACKs  sent  and
              received, SCTP packets sent and received.

              The  parameter  type  is  struct  sctp_assoc_stats, for reading only.  sas_assoc_id is a specified
              assoc_id.

       SCTP_DELAYED_ACK, SCTP_DELAYED_ACK_TIME, SCTP_DELAYED_SACK
              These options will affect the way delayed SACKs are performed. They allow the application  to  get
              or set the delayed SACK time, in milliseconds, and also allow changing the delayed SACK frequency.
              Changing the frequency to 1 disables the delayed  SACK  algorithm.  Note  that  if  sack_delay  or
              sack_freq is 0 when setting this option, the current values will remain unchanged.

              The parameter type is struct sctp_sack_info. For reading, sack_assoc_id is a specified assoc_id or
              SCTP_FUTURE_ASSOC.    For    writing,    sack_assoc_id    is    a    specified     assoc_id     or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Default: sackdelay=sysctl_net.sctp.sack_timeout,sackfreq=2.

       SCTP_CONTEXT
              This  option  allows  the  setting,  on  an  association  basis, of a default context that will be
              received on reading messages from the peer.  This is especially helpful for  an  application  when
              using  one-to-many  style  sockets  to  keep  some  reference to an internal state machine that is
              processing messages on the association.  Note that the setting of this value only affects received
              messages from the peer and does not affect the value that is saved with outbound messages.

              The  parameter  type  is struct sctp_assoc_value. For reading, assoc_id is a specified assoc_id or
              SCTP_FUTURE_ASSOC.    For     writing,     assoc_id     is     a     specified     assoc_id     or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Default: 0.

       SCTP_FRAGMENT_INTERLEAVE
              Fragmented  interleave  controls how the presentation of messages occurs for the message receiver.
              There are three levels of fragment interleave defined:  level  0:  SCTP_FRAGMENT_INTERLEAVE  =  0;
              level   1:   SCTP_FRAGMENT_INTERLEAVE   =   1;   level   2:   SCTP_FRAGMENT_INTERLEAVE   =   1   &
              SCTP_INTERLEAVING_SUPPORTED = 1.

              The parameter type is int boolean, for reading and writing.

              Default: 0.

       SCTP_PARTIAL_DELIVERY_POINT
              This option will set or get the SCTP partial delivery point.  This point is the size of a  message
              where  the  partial delivery API will be invoked to help free up rwnd space for the peer.  Setting
              this to a lower value will cause partial deliveries to happen more often.  This option expects  an
              integer  that sets or gets the partial delivery point in bytes.  Note also that the call will fail
              if the user attempts to set this value larger than the socket receive buffer size. Note  that  any
              single  message  having  a length smaller than or equal to the SCTP partial delivery point will be
              delivered in a single read call as long as the user-provided buffer is large enough  to  hold  the
              message.

              The parameter type is uint32_t, for reading and writing.

              Default: 0.

       SCTP_MAX_BURST
              This  option  will allow a user to change the maximum burst of packets that can be emitted by this
              association.

              The parameter type is struct sctp_assoc_value. For reading, assoc_id is a  specified  assoc_id  or
              SCTP_FUTURE_ASSOC.     For     writing,     assoc_id     is     a     specified     assoc_id    or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Default: sysctl_net.sctp.max_burst.

       SCTP_AUTH_CHUNK
              This option adds a chunk type that the user is requesting to be received only in an  authenticated
              way, and it only affects the future associations.

              The parameter type is struct sauth_chunk, for writing only.

              Default: no chunks.  Require: SCTP_AUTH_SUPPORTED.  RFC: RFC4895.

       SCTP_HMAC_IDENT
              This option gets or sets the list of Hashed Message Authentication Code (HMAC) algorithms that the
              local endpoint requires the peer to use.

              The parameter type is struct sctp_hmacalgo, for reading and  writing.   shmac_idents  can  include
              SCTP_AUTH_HMAC_ID_{SHA1|SHA256}.

              Default: SCTP_AUTH_HMAC_ID_SHA1.  Require: SCTP_AUTH_SUPPORTED.

       SCTP_AUTH_KEY
              This option will set a shared secret key that is used to build an association shared key.

              The  parameter type is struct sctp_authkey, for writing only. sca_assoc_id is a specified assoc_id
              or SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Default: null_key.  Require: SCTP_AUTH_SUPPORTED.

       SCTP_AUTH_ACTIVE_KEY
              This option will get or set the active shared key to be used to build the association shared key.

              The parameter type is struct sctp_authkeyid, for writing  only.   scact_assoc_id  is  a  specified
              assoc_id or SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Default: 0.  Require: SCTP_AUTH_SUPPORTED.

       SCTP_AUTH_DEACTIVATE_KEY
              This  set  option  indicates  that  the  application  will  no longer send user messages using the
              indicated key identifier.

              The parameter type is struct sctp_authkeyid, for writing  only.   scact_assoc_id  is  a  specified
              assoc_id or SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Require: SCTP_AUTH_SUPPORTED.

       SCTP_AUTH_DELETE_KEY
              This set option will delete an SCTP association's shared secret key that has been deactivated.

              The  parameter  type  is  struct  sctp_authkeyid, for writing only.  scact_assoc_id is a specified
              assoc_id or SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Require: SCTP_AUTH_SUPPORTED.

       SCTP_PEER_AUTH_CHUNKS
              This option gets a list of chunk types for a specified association that the peer  requires  to  be
              received authenticated only.

              The  parameter  type  is  struct sctp_authchunks, for reading only.  gauth_assoc_id is a specified
              assoc_id.

              Require: SCTP_AUTH_SUPPORTED.

       SCTP_LOCAL_AUTH_CHUNKS
              This option gets a list of chunk types  for  a  specified  association  that  the  local  endpoint
              requires to be received authenticated only.

              The  parameter  type  is  struct sctp_authchunks, for reading only.  gauth_assoc_id is a specified
              assoc_id or SCTP_FUTURE_ASSOC.

              Require: SCTP_AUTH_SUPPORTED.

       SCTP_GET_ASSOC_NUMBER
              This option gets the current number of associations that  are  attached  to  a  one-to-many  style
              socket.  Note that this number is only a snapshot.  This means that the number of associations may
              have changed when the caller gets back the option result.

              The parameter type is uint32_t, for reading only.

       SCTP_GET_ASSOC_ID_LIST
              This option gets the current list of SCTP association identifiers of the SCTP associations handled
              by  a  one-to-many  style  socket.  It  uses struct sctp_assoc_ids and must provide a large enough
              buffer to hold all association identifiers. If the buffer is too small, an error must be returned.
              The  user  can  use the SCTP_GET_ASSOC_NUMBER socket option to get an idea of how large the buffer
              has to be.

              The parameter type is struct sctp_assoc_ids, for reading only.

       SCTP_EXPOSE_POTENTIALLY_FAILED_STATE, SCTP_EXPOSE_PF_STATE
              Applications can control the exposure of the PF path state in the SCTP_PEER_ADDR_CHANGE event, and
              if  pf_expose  is  not  'enabled',  no  notification  will be sent for a transport state change to
              SCTP_PF.  It  also  affects  the  SCTP_GET_PEER_ADDR_INFO  socket  option,  and  if  pf_expose  is
              'disabled', users can not access the transport info via SCTP_GET_PEER_ADDR_INFO option.

              The  parameter  type is struct sctp_assoc_value, for reading and writing.  assoc_id is a specified
              assoc_id or SCTP_FUTURE_ASSOC.

              Default: sysctl_net.sctp.pf_expose.

       SCTP_PEER_ADDR_THLDS
              Applications can control the SCTP-PF behavior by getting or  setting  the  number  of  consecutive
              timeouts before a peer address is considered PF or unreachable..

              The parameter type is struct sctp_paddrthlds, for reading and writing.  spt_address is a specified
              transport address or 0, spt_assoc_id is a specified assoc_id or SCTP_FUTURE_ASSOC.

              Default: pathmaxrxt=sysctl_net.sctp.path_max_retrans, ps_retrans=sysctl_net.sctp.ps_retrans.

       SCTP_PEER_ADDR_THLDS_V2
              Similar to SCTP_PEER_ADDR_THLDS, but it can also be used by applications to set and get the number
              of  timeouts  before  the  primary  path  is  changed automatically by the Primary Path Switchover
              function.

              The parameter type is struct sctp_paddrthlds_v2,  for  reading  and  writing.   spt_address  is  a
              specified transport address or 0, spt_assoc_id is a specified assoc_id or SCTP_FUTURE_ASSOC.

              Default:    pathmaxrxt=sysctl_net.sctp.path_max_retrans,    ps_retrans=sysctl_net.sctp.ps_retrans,
              pf_retrans=sysctl_net.sctp.pf_retrans.

       SCTP_RECVRCVINFO
              Setting this option specifies  that  SCTP_RCVINFO  (SCTP  receive  information  about  a  received
              message) is returned as ancillary data by recvmsg(). See CONTROL MSGS for more details.

              The parameter type is int, for reading and writing.

              Default: 0.

       SCTP_RECVNXTINFO
              Setting  this option specifies that SCTP_NXTINFO (SCTP receive information of the next message) is
              returned as ancillary data by recvmsg(). See CONTROL MSGS for details.

              The parameter type is int, for reading and writing.

              Default: 0.

       SCTP_DEFAULT_SNDINFO
              This option obsoletes SCTP_DEFAULT_SEND_PARAM.

              The parameter type is struct sctp_sndinfo. For reading, snd_assoc_id is a  specified  assoc_id  or
              SCTP_FUTURE_ASSOC.     For     writing,     snd_assoc_id    is    a    specified    assoc_id    or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC.

              Default: default_stream=0, default_flags=0, default_ppid=0, default_context=0.

       SCTP_REUSE_PORT
              This option is similar to the socket level option SO_REUSEADDR, besides only  supports  one-to-one
              style SCTP sockets and must not be used after calling bind() or sctp_bindx().

              The parameter type is int, for reading and writing.

              Default: 0.

       SCTP_SOCKOPT_BINDX_ADD
              This  option  allows  the  user  to  bind a specific subset of addresses or, if the SCTP extension
              ASCONF is supported (see SCTP_ASCONF_SUPPORTED), add specific addresses. The API  sctp_bindx()  is
              based on this.

              The parameter type is struct sockaddr[], for writing only.

       SCTP_SOCKOPT_BINDX_REM
              Similar to SCTP_SOCKOPT_BINDX_ADD, but delete specific addresses. The API sctp_bindx() is based on
              this.

              The parameter type is struct sockaddr[], for writing only.

       SCTP_SOCKOPT_PEELOFF
              This option branches off an UDP type association into a separate socket returned  back  to  users.
              The API sctp_peeloff() is based on this option.

              The parameter type is sctp_peeloff_arg_t, for reading only. associd is a specified assoc_id.

       SCTP_SOCKOPT_PEELOFF_FLAGS
              Peel  off  an  UDP  type  association from a socket similar to SCTP_SOCKOPT_PEELOFF option, but it
              allows the flags like O_CLOEXEC and O_NONBLOCK to be used when creating the new  socket.  The  API
              sctp_peeloff_flags() is based on this option.

              The parameter type is sctp_peeloff_flags_arg_t, for reading only. associd is a specified assoc_id.

       SCTP_SOCKOPT_CONNECTX_OLD
              This  option  allows  a user to specify multiple addresses at which a peer can be reached, and the
              kernel stack will use the list of addresses to set up the association. The API sctp_connectx()  is
              based on this option.

              The parameter type is struct sockaddr[], for writing only.

       SCTP_SOCKOPT_CONNECTX
              Similar to SCTP_SOCKOPT_CONNECTX_OLD, but it returns the new assoc's id.  The API sctp_connectx2()
              is based on this option.

              The parameter type is struct sockaddr[], for writing only. The new assoc's id is passed  to  users
              by the return value.

       SCTP_SOCKOPT_CONNECTX3
              Similar  to  SCTP_SOCKOPT_CONNECTX, but it uses different type parameter. The API sctp_connectx3()
              is based on this option.

              The parameter type is struct sctp_getaddrs_old, for reading only.  assoc_id  is  set  to  the  new
              assoc's id by kernel and passed to users.

       SCTP_GET_PEER_ADDRS
              This  option  is  used  to  gets all peer addresses in an association. The API sctp_getpaddrs() is
              based on this option.

              The parameter type is struct sctp_getaddrs, for reading only. assoc_id is a specified assoc_id.

       SCTP_GET_LOCAL_ADDRS
              This option is used to get all local addresses in an  association.  The  API  sctp_getladdrs()  is
              based on this option.

              The  parameter type is struct sctp_getaddrs, for reading only. assoc_id is a specified assoc_id or
              SCTP_FUTURE_ASSOC.

       SCTP_ADAPTATION_LAYER
              This option requests that the  local  endpoint  set  the  specified  Adaptation  Layer  Indication
              parameter for all future INIT and INIT-ACK exchanges.

              The parameter type is struct sctp_setadaptation, for reading and writing.

              Default: 0.

       SCTP_EVENT
              This  option obsoletes SCTP_EVENTS socket option, and it can set or get one specific type of event
              for a specified association.

              The parameter type is struct sctp_event. For reading,  se_assoc_id  is  a  specified  assoc_id  or
              SCTP_FUTURE_ASSOC.     For     writing,     se_assoc_id     is    a    specified    assoc_id    or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC. se_type can be one of enum sctp_sn_type.

              Default: 0.

       SCTP_PR_SUPPORTED
              This socket option allows the enabling or disabling of the  negotiation  of  PR-SCTP  support  for
              future associations.

              The  parameter  type  is struct sctp_assoc_value. For reading, assoc_id is a specified assoc_id or
              SCTP_FUTURE_ASSOC. For writing, assoc_id is SCTP_FUTURE_ASSOC.

              Default: sysctl_net.sctp.prsctp_enable.  RFC: RFC7496.

       SCTP_DEFAULT_PRINFO
              This option sets and gets the default parameters for PR-SCTP.

              The parameter type is struct sctp_default_prinfo. For reading, pr_assoc_id is a specified assoc_id
              or    SCTP_FUTURE_ASSOC.    For    writing,    pr_assoc_id    is    a    specified   assoc_id   or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC. pr_policy can be SCTP_PR_SCTP_{NONE|TTL|RTX|PRIO}.

              Default: SCTP_PR_SCTP_NONE.  Require: SCTP_DEFAULT_PRINFO.

       SCTP_PR_ASSOC_STATUS
              This option is used to get Association-Specific PR-SCTP Status.

              The parameter type is struct sctp_prstatus, for reading only.   sprstat_assoc_id  is  a  specified
              assoc_id, sprstat_policy can be SCTP_PR_SCTP_{TTL|RTX|PRIO|ALL}.

       SCTP_PR_STREAM_STATUS
              This option is used to get Stream-Specific PR-SCTP Status.

              The  parameter  type  is  struct sctp_prstatus, for reading only.  sprstat_assoc_id is a specified
              assoc_id, sprstat_policy can be SCTP_PR_SCTP_{TTL|RTX|PRIO|ALL}.

       SCTP_RECONFIG_SUPPORTED
              Enable the Stream Reconfiguration(RECONF) for the future  associations.   For  different  type  of
              requests enabling, see SCTP_ENABLE_STREAM_RESET option.

              The  parameter  type  is struct sctp_assoc_value. For reading, assoc_id is a specified assoc_id or
              SCTP_FUTURE_ASSOC. For writing, assoc_id is SCTP_FUTURE_ASSOC.

              Default: sysctl_net.sctp.reconf_enable.  RFC: RFC6525.

       SCTP_ENABLE_STREAM_RESET
              This option allows a user to control whether the kernel processes or denies incoming  requests  in
              RECONF chunks.

              The  parameter  type  is struct sctp_assoc_value. For reading, assoc_id is a specified assoc_id or
              SCTP_FUTURE_ASSOC.    For     writing,     assoc_id     is     a     specified     assoc_id     or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC.                 assoc_value                 can                be
              SCTP_ENABLE_{RESET_STREAM_REQ|RESET_ASSOC_REQ|CHANGE_ASSOC_REQ}.

              Default: 0.  Require: SCTP_RECONFIG_SUPPORTED.

       SCTP_RESET_STREAMS
              This option allows the user to request the reset of incoming and/or outgoing streams.

              The parameter type is struct sctp_reset_streams, for writing only.  srs_assoc_id  is  a  specified
              assoc_id.

              Require: SCTP_ENABLE_STREAM_RESET.

       SCTP_RESET_ASSOC
              This option allows a user to request the reset of the SSN/TSN.

              The parameter type is sctp_assoc_t, for writing only. It is a specified assoc_id.

              Require: SCTP_ENABLE_STREAM_RESET.

       SCTP_ADD_STREAMS
              This option allows a user to request the addition of a number of incoming and/or outgoing streams.

              The  parameter  type  is  struct  sctp_add_streams, for writing only.  sas_assoc_id is a specified
              assoc_id.

              Require: SCTP_ENABLE_STREAM_RESET.

       SCTP_STREAM_SCHEDULER
              This option is used to select a stream scheduler for data sending.

              The parameter type is struct sctp_assoc_value. For reading, assoc_id is a  specified  assoc_id  or
              SCTP_FUTURE_ASSOC.     For     writing,     assoc_id     is     a     specified     assoc_id    or
              SCTP_{FUTURE|CURRENT|ALL}_ASSOC. assoc_value can be SCTP_SS_{FCFS|PRIO|RR|FC|WFQ}.

              Default: SCTP_SS_FCFS.  RFC: RFC8260.

       SCTP_STREAM_SCHEDULER_VALUE
              Some stream schedulers require additional information to be set for individual streams.

              The parameter type is struct sctp_assoc_value. For reading, assoc_id is a specified assoc_id.  For
              writing, assoc_id is a specified assoc_id or SCTP_CURRENT_ASSOC.

              Require: SCTP_STREAM_SCHEDULER.

       SCTP_INTERLEAVING_SUPPORTED
              This  socket  option  allows  the  enabling  or  disabling  of  the  negotiation  of  user message
              interleaving support for future associations.

              The parameter type is struct sctp_assoc_value. For reading, assoc_id is a  specified  assoc_id  or
              SCTP_FUTURE_ASSOC. For writing, assoc_id is SCTP_FUTURE_ASSOC.

              Default: sysctl_net.sctp.intl_enable.  Require: SCTP_FRAGMENT_INTERLEAVE.  RFC: RFC8260.

       SCTP_ASCONF_SUPPORTED
              Enable the Dynamic Address Reconfiguration(ASCONF) for the future associations.

              The  parameter  type  is struct sctp_assoc_value. For reading, assoc_id is a specified assoc_id or
              SCTP_FUTURE_ASSOC. For writing, assoc_id is SCTP_FUTURE_ASSOC.

              Default: sysctl_net.sctp.addip_enable.  RFC: RFC5061.

       SCTP_AUTO_ASCONF
              This option will enable or disable the use of the automatic generation of ASCONF chunks to add and
              delete  addresses to an existing association.  Note that this option has two caveats, namely a) it
              only affects sockets that are bound to all addresses available to  the  SCTP  stack,  and  b)  the
              system  administrator  may  have an overriding control that turns the ASCONF feature off no matter
              what setting the socket option may have.

              The parameter type is int boolean, for reading and writing.

              Default: sysctl_net.sctp.default_auto_asconf.

       SCTP_AUTH_SUPPORTED
              Enable AUTH for the future associations.

              The parameter type is struct sctp_assoc_value. For reading, assoc_id is a  specified  assoc_id  or
              SCTP_FUTURE_ASSOC. For writing, ssoc_id is SCTP_FUTURE_ASSOC.

              Default: sysctl_net.sctp.auth_enable.  RFC: RFC4895.

       SCTP_ECN_SUPPORTED
              Enable ECN for the future associations.

              The  parameter  type  is struct sctp_assoc_value. For reading, assoc_id is a specified assoc_id or
              SCTP_FUTURE_ASSOC. For writing, assoc_id is SCTP_FUTURE_ASSOC.

              Default: sysctl_net.sctp.ecn_enable.

       SCTP_REMOTE_UDP_ENCAPS_PORT
              This option is used to set the encapsulation port(a remote listening or dest port) for  SCTP  over
              UDP,  which  allows  SCTP  traffic  to  pass  through  legacy NATs that do not provide native SCTP
              support.

              The parameter type is struct sctp_udpencaps, for reading and writing.  sue_address is a  specified
              transport address or 0, sue_assoc_id is a specified assoc_id or SCTP_FUTURE_ASSOC.

              Default: sysctl_net.sctp.encap_port.  RFC: RFC6951.

       SCTP_PLPMTUD_PROBE_INTERVAL
              This  option  is  used  to  configure  the  PROBE_INTERVAL  for  the  Packetization Layer Path MTU
              Discovery(PLPMTUD). It can be set to a value >= 5000 or 0(disabled).

              The parameter type is struct sctp_probeinterval,  for  reading  and  writing.   spi_address  is  a
              specified transport address or 0, spi_assoc_id is a specified assoc_id or SCTP_FUTURE_ASSOC.

              Default: 0(disabled).  RFC: RFC8899.

AUTHORS

       Sridhar Samudrala <sri@us.ibm.com>

SEE ALSO

       socket(7),   socket(2),   ip(7),  bind(2),  listen(2),  accept(2),  connect(2),  sendmsg(2),  recvmsg(2),
       sysctl(2), getsockopt(2), sctp_bindx(3), sctp_connectx(3), sctp_sendmsg(3), sctp_sendv(3),  sctp_send(3),
       sctp_recvmsg(3), sctp_recvv(3), sctp_peeloff(3), sctp_getladdrs(3), sctp_getpaddrs(3), sctp_opt_info(3).

       RFC2960, RFC3309 for the SCTP specification.