Linux Kernel Stream Control Transmission Protocol Tools

Summary

Stream Control Transmission Protocol (SCTP) is a message oriented, reliable transport protocol with direct support for multihoming that runs on top of Internet Protocol (IPv4/IPv6).

Like TCP, SCTP provides reliable, connection-oriented data delivery with congestion control, path MTU discovery and message fragmentation. Unlike TCP, SCTP also provides:

  1. Message framing
  2. Multi-streaming (to eliminate the head-of-line blocking problem)
  3. Multi-homing (allows a single SCTP association to run across multiple links or paths)
  4. Security and authentication (security cookie mechanism to prevent the SYN-flood attacks)
  5. Ordered and unordered message delivery
The Internet Engineering Task Force (IETF) Signaling Transport (SIGTRAN) Working Group recognized that telephony signaling for commercial-grade systems had special transport requirements not met by the available transport protocols. SIGTRAN developed SCTP into an IETF Proposed Standard, RFC2960.

The IETF Transport Area Directors (TSV ADs) recognized SCTP as more than just a signaling transport and moved it from SIGTRAN to the Transport Area Working Group (TSVWG). TSVWG continues the standards process for SCTP, moving it toward full standard, and expanding the scope and application of SCTP.

If you are new to SCTP, the following documents are excellent references:

The Linux kernel has built-in support for the SCTP protocol since the 2.6 kernel series.

The lksctp-tools project provides a Linux user space library for SCTP (libsctp) including C language header files (netinet/sctp.h) for accessing SCTP specific application programming interfaces not provided by the standard sockets, and also some helper utilities around SCTP.

Get it via Git:   git clone git://github.com/borkmann/lksctp-tools.git

Download and Release Notes

lksctp-tools-1.0.16 has been released.

It can be downloaded via Sourceforge here, or via Git:

  git clone git://github.com/borkmann/lksctp-tools.git [...]
  git checkout lksctp-tools-1.0.16

Older releases can be found here, library ABI information here. Linux kernel support for SCTP is distributed together with the Linux kernel source code.

lksctp-tools are open source and released under the dual license GPL version 2.0, and LGPL version 2.1.

Changelog for 1.0.15 -> 1.0.16

Daniel Borkmann (2):
      sctp_status: fix usage of max_stream parameter
      Release lksctp-tools-1.0.16

Hangbin Liu (5):
      Remove duplicate sys/errno.h
      Move bzero to memset
      test_1_to_1_sockopt: we have changed the minimum value to 2048
      sctp_status: add missed parameter description and remove unused option
      sctp_status: server side should also receive msg_cnt times

Markos Chandras (1):
      lib/connectx: Fix build for prefixed architectures

Matija Glavinic Pecotic (1):
      Remove dependency to implementation-specific a_rwnd behavior

Simon Xu (1):
      lksctp: Avoid using file descriptor 0 to get ENOTSOCK

Wang Weidong (1):
      tests: fix test_1_to_1_sockopt sock buff test case

Changelog for 1.0.14 -> 1.0.15

Daniel Borkmann (3):
      withsctp: fix quoted command line arguments
      sctp_status: fix printstatus output
      Release lksctp-tools-1.0.15

Nicolas Dichtel (1):
      do not returns an error if AM_SILENT_RULES does not exist

Changelog for 1.0.13 -> 1.0.14

Daniel Borkmann (3):
      build: only use AM_CPPFLAGS instead of a mixture of AM_CFLAGS and AM_CPPFLAGS
      test_sctp_sendrecvmsg: fix bug in msg_flag passing
      Release lksctp-tools-1.0.14

Diego Elio Pettenò (1):
      build: fix out-of-tree build of withsctp.

Hangbin Liu (2):
      test_1_to_1_threads: fixup pthread hung by giving an array instead of a pointer
      test_1_to_1_threads: remove unused variable for t_recv and t_send

Neil Horman (1):
      sctp: Add new spinfo state values to enumeration

Sébastien Luttringer (1):
      build: Modernize autotools

What specifications are supported by lksctp/lksctp-tools?

It supports both one-to-one and one-to-many style SCTP socket APIs as defined in Sockets API Extensions for SCTP.

How do I port or write applications to run on top of lksctp/lksctp-tools?

lksctp provides the SCTP socket-based API based on the IETF Internet-draft Sockets API Extensions for SCTP. The primary goal of this API design is to provide the consistencies and the flexibilities for developers to either port or develop sockets based applications to take advantage of the SCTP features. By using this API, applications can be written in two networking programming styles: either in the connection-oriented style (TCP-style) or in the connectionless style (UDP-style).

For more information on the features and functions currently supported by lksctp, please refer to the documentation in the Linux kernel resp. in the lksctp-tools package. The lksctp-tools source contains a set of test programs which would also serve as example applications.

Documentation

The two key architectural metaphores for lksctp are the state machine and the smart pipe. All contributions need to fit sensibly into one or the other metaphore. The core state machine is side-effect-free (pure functional) with a separate and explicit side-effect processing component. The smart pipes accept raw stuff in one end, and ``automagically'' emit cooked pieces out the other end. See the lksctp paper for more details.

Further documents about SCTP can be found in the mentioned RFCs, about lksctp i) within the Linux kernel documentation and ii) within the shipped lksctp-tools tarball.

Mailing List

For the Linux kernel implementation of SCTP and for lksctp-tools, please post technical questions, discussions, bugs or patches to the Linux SCTP mailing list linux-sctp@vger.kernel.org (subscribe, archive). For Linux kernel SCTP patches, also put netdev@vger.kernel.org (subscribe, archive) into CC.

Important: lksctp-developers mailing list is closed and only its archive is kept for historical reasons. Use linux-sctp@vger.kernel.org instead!

Git Tree (lksctp-tools)

The lksctp-tools project is always looking for community members interested in contributing. For versioning control, we use Git. The patch submission process is similar to the one of the Linux kernel. So please respect the kernel's coding guidelines and patch submission procedure.

Send your lksctp-tools patches to the linux-sctp@vger.kernel.org mailing list with ``[PATCH lksctp-tools]'' as a subject prefix for further review and inclusion.

git://
git://github.com/borkmann/lksctp-tools.git
http://
https://github.com/borkmann/lksctp-tools
mirror
http://git.cryptoism.org/cgit.cgi/lksctp-tools.git/



Copyright 2002 La Monte H.P. Yarroll; Copyright 2002, 2004 IBM Corp.; Copyright 2010, 2013 Red Hat