sctp-rs

Idiomatic Rust APIs for Linux SCTP Stack

12 releases

0.3.1 Nov 8, 2023
0.3.0 Jun 19, 2023
0.2.5 Jan 20, 2023
0.1.3 Jan 2, 2023
0.0.1 Oct 18, 2022

#417 in Network programming

Download history 49/week @ 2024-06-14 10/week @ 2024-06-21 6/week @ 2024-06-28 5/week @ 2024-07-05 8/week @ 2024-07-12 17/week @ 2024-07-19 13/week @ 2024-07-26 23/week @ 2024-08-02 1/week @ 2024-08-09 24/week @ 2024-08-30 46/week @ 2024-09-06 29/week @ 2024-09-13 68/week @ 2024-09-20 72/week @ 2024-09-27

225 downloads per month

Apache-2.0 OR MIT

84KB
1.5K SLoC

Introduction

Initial focus is on implementation of the Sockets Extension API as defined in RFC 6458 that is ergonomic and that should work with any async toolkit in Rust. Current implementation is targeted for Linux based systems. These APIs are not a wrapper over lksctp, but instead provide all the APIs that make use of Rust's types like enum, Vec etc. Eventually it should be possible to have SCTP as a first class citizen in the Rust's async ecosystem.

In particular this implementation utilizes the SCTP stack in the Linux kernel, unlike other approaches like webrtc-sctp which is trying to build entire SCTP stack in the user-space and is primarily targeted for running SCTP over DTLS sockets.

Please see compatibility for current feature support.

Compatibility

async Runtime Supported.

SCTP Feature Support

This section captures the current support for SCTP features with RFC 6458 as a reference. In particular, features marked as DEPRECATED in the said RFC are not implemented. Since the Sockets Extension API defined in the RFC describes an API based on C programming language, there is not one to one mapping in the implementation, see notes for further details.

Section Compatibility Notes
3.1.1 yes
3.1.2 yes
3.1.3 yes
3.1.4 yes See Note 1.
3.1.5 yes See Note 2.
3.1.6 yes
4.1.1 yes
4.1.2 yes
4.1.3 yes
4.1.4 yes
4.1.5 yes
4.1.6 yes See Note 2.
4.1.7 yes
4.1.8 yes See Note 1.
4.1.9 yes
5.3.1 yes
5.3.2 N/A
5.3.3 N/A
5.3.4 yes
5.3.5 yes
5.3.6 yes See Note 2.
5.3.7 no
5.3.8 no See Note 1.
5.3.9 no
5.3.10 no
6.1.1 yes
6.1.2 no
6.1.3 no
6.1.4 N/A
6.1.5 yes
6.1.6 no See Note 2.
6.1.7 no
6.1.8 no See Note 1.
6.1.9 no
6.1.10 no
6.1.11 no
6.2.1 N/A
6.2.2 yes
8.1.1 no
8.1.2 no
8.1.3 no
8.1.4 no
8.1.5 no
8.1.6 no
8.1.7 no
8.1.8 no
8.1.9 no
8.1.10 no
8.1.11 no
8.1.12 no
8.1.13 N/A
8.1.14 N/A
8.1.15 no
8.1.16 no
8.1.17 no
8.1.18 no
8.1.19 no
8.1.20 no
8.1.21 no
8.1.22 N/A
8.1.23 no
8.1.24 no
8.1.25 no
8.1.26 no
8.1.27 no
8.1.28 no
8.1.29 no
8.1.30 no
8.1.31 yes
8.1.32 no
8.2.1 yes
8.2.2 no
8.2.3 no
8.2.4 no
8.2.5 no
8.2.6 no
8.3.1 no
8.3.2 no
8.3.3 no
8.3.4 no
8.3.5 no
9.1 no
9.2 no
9.3 no
9.4 no
9.5 no
9.6 no
9.7 N/A
9.8 N/A
9.9 no See Note 3.
9.10 N/A
9.11 N/A
9.12 no
9.13 no

Notes:

  1. The drop implementation on the socket 'close'es the socket, hence no explicit close call supported.
  2. All the Send and Receive functions are available as two APIs sctp_send and sctp_recv, hence no separate implementation for the C like system calls.
  3. This API is not required to be implemented in Rust.

License

Licensed under either of

Dependencies

~3–11MB
~110K SLoC