sctp

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
SCTP(7)			  Linux Programmer’s Manual		      SCTP(7)



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 RFC2960
       and RFC3309. 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 bound-
       ary 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 draft-ietf-tsvwg-sctpsocket-07.txt(Sockets API exten-
       sions 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 sys-
       tem 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  communica-
       tion; 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).

       association_max_retrans
	      Maximum  number of consecutive retransmissions to a peer before
	      an endpoint considers that the peer is unreachable  and  closes
	      the association. The default value is 10.

       path_max_retrans
	      Maximum  number  of consecutive retransmissions over a destina-
	      tion transport address of a peer endpoint before it  is  marked
	      as inactive. The default value is 5.

       max_init_retransmits
	      Maximum number of times an INIT chunk or a COOKIE ECHO chunk is
	      retransmitted before an endpoint aborts the initialization pro-
	      cess and closes the association.	The default value is 8.

       hb_interval
	      This is the interval when a HEARTBEAT chunk is sent to a desti-
	      nation transport address to monitor the reachability of an idle
	      destination  transport  address.	The default is 30 seconds and
	      is maintained in msecs.

       valid_cookie_life
	      This is the maximum lifespan of the Cookie sent in an INIT  ACK
	      chunk. The default value is 60 secs and is maintained in msecs.

       cookie_preserve_enable
	      Handle COOKIE PRESERVATIVE parameter in the INIT chunk. This is
	      on by default.

       max_burst
	      Maximum number of new data packets that can be sent in a burst.
	      The default value is 4.

       rto_initial
	      This is the initial value of RTO(retransmission  timeout)	 that
	      is used in RTO calculations. The default value is 3 seconds and
	      is maintained in msecs.

       rto_min
	      This is the minimum value of RTO(retransmission  timeout)	 that
	      is  used in RTO calculations. The default value is 1 second and
	      is maintained in msecs.

       rto_max
	      This is the maximum value of RTO(retransmission  timeout)	 that
	      is  used	in  RTO calculations. The default value is 60 seconds
	      and is maintained in msecs.

       rto_alpha_exp_divisor
	      This is the RTO.Alpha value when expressed in right shifts  and
	      is used in RTO calculations. The default value is 3.

       rto_beta_exp_divisor
	      This  is	the RTO.Beta value when expressed in right shifts and
	      is used in RTO calculations. The default value is 2.

       addip_enable
	      Enable SCTP  ADDIP(Dynamic  Address  Reconfiguration)  Support.
	      This is off by default.

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

       assocs Displays	the  following	information about the active associa-
	      tions.  assoc ptr, sock ptr, socket style, sock state, associa-
	      tion  state,  hash  bucket,  local  port,	 remote	 port,	local
	      addresses and remote addresses.

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

       snmp   Displays the following statistics related to SCTP states, pack-
	      ets 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 associ-
	      ation.

       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 ter-
	      mination 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  cor-
	      rectly  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 dif-
	      ferent from DATA.

       SctpOutOrderChunks
	      The number of SCTP ordered data chunks sent (retransmis-
	      sions 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  conver-
	      sion 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.

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.

       SCTP_RTOINFO.
	      This  option  is used to get or set the protocol parame-
	      ters used to initialize and  bound  retransmission  tim-
	      out(RTO).	  The	structure   sctp_rtoinfo   defined  in
	      /usr/include/netinet/sctp.h is used to access and modify
	      these parameters.

       SCTP_ASSOCINFO
	      This  option  is	used  to  both examine and set various
	      association  and	endpoint  parameters.  The   sturcture
	      sctp_assocparams	defined in /usr/include/netinet/sctp.h
	      is used to access and modify these parameters.

       SCTP_INITMSG
	      This option is used to get or set the  protocol  parame-
	      ters  for	 the  default  association initialization. The
	      structure	       sctp_initmsg	    defined	    in
	      /usr/include/netinet/sctp.h is used to access and modify
	      these parameters.

	      Setting initialization parameters is effective  only  on
	      an  unconnected  socket  (for  one-to-many style sockets
	      only future associations are effected  by	 the  change).
	      With  one-to-one style sockets, this option is inherited
	      by sockets derived from a listener socket.

       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.   Expects  an integer boolean
	      flag.

       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 sec-
	      onds  to	automatically close. An association being idle
	      is defined an association that has NOT sent or  received
	      user  data.  The	special	 value	of 0 indicates that no
	      automatic close of any associations should be performed.
	      The  option  expects  an	integer defining the number of
	      seconds of idle time before an association is closed.

       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 structure
	      sctp_setpeerprim	defined in /usr/include/netinet/sctp.h
	      is used to make a set peer primary request.

       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
	      structure		 sctp_prim	    defined	    in
	      /usr/include/netinet/sctp.h is used to  make  a  get/set
	      primary request.

       SCTP_DISABLE_FRAGMENTS
	      This  option  is	a on/off flag and is passed an integer
	      where a non-zero is on and a zero is off. 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 indi-
	      cated to the user.

       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	heart-
	      beat  to	be  sent immediately, and adjust the address’s
	      maximum number of retransmissions sent before an address
	      is  considered  unreachable.  The	 structure sctp_paddr-
	      params defined in /usr/include/netinet/sctp.h is used to
	      access and modify an address’s parameters.

       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 socket option allows such an appli-
	      cation to set the default sctp_sndrcvinfo structure. The
	      application that wishes to use this socket option simply
	      passes  in  to  this  call the sctp_sndrcvinfo structure
	      defined in /usr/include/netinet/sctp.h. The input param-
	      eters   accepted	by  this  call	include	 sinfo_stream,
	      sinfo_flags,  sinfo_ppid,	 sinfo_context,	 sinfo_timeto-
	      live.  The  user	must  set  the sinfo_assoc_id field to
	      identify the
	       association to affect if the caller is using  the  one-
	      to-many style.

       SCTP_EVENTS
	      This  socket option is used to specify various notifica-
	      tions and ancillary data the user wishes to receive. The
	      structure	     sctp_event_subscribe      defined	    in
	      /usr/include/netinet/sctp.h is used to access or	modify
	      the events of interest to the user.

       SCTP_I_WANT_MAPPED_V4_ADDR
	      This  socket  option is a boolean flag which turns 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.

	      By default this option is turned on and expects an inte-
	      ger to be passed where non-zero turns on the option  and
	      zero turns off the option.

       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  implemen-
	      tation  may  fragment into smaller sized chunks when the
	      PMTU of the underlying association is smaller  than  the
	      value set by the user. The option expects an integer.

	      The  default  value for this option is 0 which indicates
	      the user is NOT limiting fragmentation and only the PMTU
	      will effect SCTP’s choice of DATA chunk size.

       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.  This information
	      is  read-only.   The  structure  sctp_status  defined in
	      /usr/include/netinet/sctp.h  is  used  to	 access	  this
	      information.

       SCTP_GET_PEER_ADDR_INFO
	      Applications  can	 retrieve information about a specific
	      peer address of an association, including its reachabil-
	      ity  state,  congestion window, and retransmission timer
	      values.  This information is  read-only.	The  structure
	      sctp_paddr_info  defined	in /usr/include/netinet/sctp.h
	      is used to access this information.

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_sendmsg(3),	      sctp_recvmsg(3),
       sctp_peeloff(3),	     sctp_getladdrs(3),	    sctp_getpaddrs(3),
       sctp_opt_info(3).

       RFC2960, RFC3309 for the SCTP specification.



Linux Man Page			  2002-01-30			      SCTP(7)