FreeBSD manual
download PDF document: sctp.4.pdf
SCTP(4) FreeBSD Kernel Interfaces Manual SCTP(4)
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
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.
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_DELAYED_SACK
This option lets the user both set and get the delayed ack time
(in milliseconds) and the ack frequency that SCTP is using. The
default delayed ack time is 200 milliseconds and the default ack
frequency is 2.
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
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
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 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.
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.
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.
FreeBSD 14.0-RELEASE-p11 June 21, 2023 FreeBSD 14.0-RELEASE-p11