Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions libc-test/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4811,6 +4811,7 @@ fn test_linux(target: &str) {
"AT_HWCAP3" | "AT_HWCAP4" if old_musl => true,
"AT_HWCAP3" | "AT_HWCAP4" => kernel < (6, 9),
"PTRACE_SET_SYSCALL_INFO" => kernel < (6, 16),
"TLS_INFO_TX_MAX_PAYLOAD_LEN" | "TLS_INFO_MAX" => kernel < (6, 19),

// Changed value recently
"SW_MAX" | "SW_CNT" => kernel < (6, 16),
Expand Down
2 changes: 2 additions & 0 deletions libc-test/semver/linux.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3665,9 +3665,11 @@ TLS_CONF_HW_RECORD
TLS_CONF_SW
TLS_GET_RECORD_TYPE
TLS_INFO_CIPHER
TLS_INFO_MAX
TLS_INFO_RXCONF
TLS_INFO_RX_NO_PAD
TLS_INFO_TXCONF
TLS_INFO_TX_MAX_PAYLOAD_LEN
TLS_INFO_UNSPEC
TLS_INFO_VERSION
TLS_INFO_ZC_RO_TX
Expand Down
2 changes: 2 additions & 0 deletions src/new/linux_uapi/linux/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ pub(crate) mod membarrier;
pub(crate) mod mount;
pub(crate) mod netlink;
pub(crate) mod pidfd;
pub(crate) mod sctp;
pub(crate) mod tls;
177 changes: 177 additions & 0 deletions src/new/linux_uapi/linux/sctp.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
use crate::prelude::*;
use crate::{
__s32,
__u16,
__u32,
};

pub type sctp_assoc_t = __s32;

pub const SCTP_FUTURE_ASSOC: c_int = 0;
pub const SCTP_CURRENT_ASSOC: c_int = 1;
pub const SCTP_ALL_ASSOC: c_int = 2;

pub const SCTP_RTOINFO: c_int = 0;
pub const SCTP_ASSOCINFO: c_int = 1;
pub const SCTP_INITMSG: c_int = 2;
pub const SCTP_NODELAY: c_int = 3;
pub const SCTP_AUTOCLOSE: c_int = 4;
pub const SCTP_SET_PEER_PRIMARY_ADDR: c_int = 5;
pub const SCTP_PRIMARY_ADDR: c_int = 6;
pub const SCTP_ADAPTATION_LAYER: c_int = 7;
pub const SCTP_DISABLE_FRAGMENTS: c_int = 8;
pub const SCTP_PEER_ADDR_PARAMS: c_int = 9;
pub const SCTP_DEFAULT_SEND_PARAM: c_int = 10;
pub const SCTP_EVENTS: c_int = 11;
pub const SCTP_I_WANT_MAPPED_V4_ADDR: c_int = 12;
pub const SCTP_MAXSEG: c_int = 13;
pub const SCTP_STATUS: c_int = 14;
pub const SCTP_GET_PEER_ADDR_INFO: c_int = 15;
pub const SCTP_DELAYED_ACK_TIME: c_int = 16;
pub const SCTP_DELAYED_ACK: c_int = SCTP_DELAYED_ACK_TIME;
pub const SCTP_DELAYED_SACK: c_int = SCTP_DELAYED_ACK_TIME;
pub const SCTP_CONTEXT: c_int = 17;
pub const SCTP_FRAGMENT_INTERLEAVE: c_int = 18;
pub const SCTP_PARTIAL_DELIVERY_POINT: c_int = 19;
pub const SCTP_MAX_BURST: c_int = 20;
pub const SCTP_AUTH_CHUNK: c_int = 21;
pub const SCTP_HMAC_IDENT: c_int = 22;
pub const SCTP_AUTH_KEY: c_int = 23;
pub const SCTP_AUTH_ACTIVE_KEY: c_int = 24;
pub const SCTP_AUTH_DELETE_KEY: c_int = 25;
pub const SCTP_PEER_AUTH_CHUNKS: c_int = 26;
pub const SCTP_LOCAL_AUTH_CHUNKS: c_int = 27;
pub const SCTP_GET_ASSOC_NUMBER: c_int = 28;
pub const SCTP_GET_ASSOC_ID_LIST: c_int = 29;
pub const SCTP_AUTO_ASCONF: c_int = 30;
pub const SCTP_PEER_ADDR_THLDS: c_int = 31;
pub const SCTP_RECVRCVINFO: c_int = 32;
pub const SCTP_RECVNXTINFO: c_int = 33;
pub const SCTP_DEFAULT_SNDINFO: c_int = 34;
pub const SCTP_AUTH_DEACTIVATE_KEY: c_int = 35;
pub const SCTP_REUSE_PORT: c_int = 36;
pub const SCTP_PEER_ADDR_THLDS_V2: c_int = 37;

pub const SCTP_PR_SCTP_NONE: c_int = 0x0000;
pub const SCTP_PR_SCTP_TTL: c_int = 0x0010;
pub const SCTP_PR_SCTP_RTX: c_int = 0x0020;
pub const SCTP_PR_SCTP_PRIO: c_int = 0x0030;
/// This symbol is prone to change across releases upstream.
/// See the [usage guidelines](crate#usage-guidelines) for details.
pub const SCTP_PR_SCTP_MAX: c_int = SCTP_PR_SCTP_PRIO;
pub const SCTP_PR_SCTP_MASK: c_int = 0x0030;

f! {
pub fn SCTP_PR_INDEX(policy: c_int) -> c_int {
policy >> (4 - 1)
}

pub fn SCTP_PR_POLICY(policy: c_int) -> c_int {
policy & SCTP_PR_SCTP_MASK
}

pub fn SCTP_PR_SET_POLICY(flags: &mut c_int, policy: c_int) -> () {
*flags &= !SCTP_PR_SCTP_MASK;
*flags |= policy;
}
}

safe_f! {
pub const fn SCTP_PR_TTL_ENABLED(policy: c_int) -> bool {
policy == SCTP_PR_SCTP_TTL
}

pub const fn SCTP_PR_RTX_ENABLED(policy: c_int) -> bool {
policy == SCTP_PR_SCTP_RTX
}

pub const fn SCTP_PR_PRIO_ENABLED(policy: c_int) -> bool {
policy == SCTP_PR_SCTP_PRIO
}
}

pub const SCTP_ENABLE_RESET_STREAM_REQ: c_int = 0x01;
pub const SCTP_ENABLE_RESET_ASSOC_REQ: c_int = 0x02;
pub const SCTP_ENABLE_CHANGE_ASSOC_REQ: c_int = 0x04;
pub const SCTP_ENABLE_STRRESET_MASK: c_int = 0x07;

pub const SCTP_STREAM_RESET_INCOMING: c_int = 0x01;
pub const SCTP_STREAM_RESET_OUTGOING: c_int = 0x02;

pub const MSG_NOTIFICATION: c_int = 0x8000;

s! {
pub struct sctp_initmsg {
pub sinit_num_ostreams: __u16,
pub sinit_max_instreams: __u16,
pub sinit_max_attempts: __u16,
pub sinit_max_init_timeo: __u16,
}

pub struct sctp_sndrcvinfo {
pub sinfo_stream: __u16,
pub sinfo_ssn: __u16,
pub sinfo_flags: __u16,
pub sinfo_ppid: __u32,
pub sinfo_context: __u32,
pub sinfo_timetolive: __u32,
pub sinfo_tsn: __u32,
pub sinfo_cumtsn: __u32,
pub sinfo_assoc_id: crate::sctp_assoc_t,
}

pub struct sctp_sndinfo {
pub snd_sid: __u16,
pub snd_flags: __u16,
pub snd_ppid: __u32,
pub snd_context: __u32,
pub snd_assoc_id: crate::sctp_assoc_t,
}

pub struct sctp_rcvinfo {
pub rcv_sid: __u16,
pub rcv_ssn: __u16,
pub rcv_flags: __u16,
pub rcv_ppid: __u32,
pub rcv_tsn: __u32,
pub rcv_cumtsn: __u32,
pub rcv_context: __u32,
pub rcv_assoc_id: crate::sctp_assoc_t,
}

pub struct sctp_nxtinfo {
pub nxt_sid: __u16,
pub nxt_flags: __u16,
pub nxt_ppid: __u32,
pub nxt_length: __u32,
pub nxt_assoc_id: crate::sctp_assoc_t,
}

pub struct sctp_prinfo {
pub pr_policy: __u16,
pub pr_value: __u32,
}

pub struct sctp_authinfo {
pub auth_keynumber: __u16,
}
}

pub const SCTP_UNORDERED: c_int = 1 << 0;
pub const SCTP_ADDR_OVER: c_int = 1 << 1;
pub const SCTP_ABORT: c_int = 1 << 2;
pub const SCTP_SACK_IMMEDIATELY: c_int = 1 << 3;
pub const SCTP_SENDALL: c_int = 1 << 6;
pub const SCTP_PR_SCTP_ALL: c_int = 1 << 7;
pub const SCTP_NOTIFICATION: c_int = MSG_NOTIFICATION;
pub const SCTP_EOF: c_int = crate::MSG_FIN;

pub const SCTP_INIT: c_int = 0;
pub const SCTP_SNDRCV: c_int = 1;
pub const SCTP_SNDINFO: c_int = 2;
pub const SCTP_RCVINFO: c_int = 3;
pub const SCTP_NXTINFO: c_int = 4;
pub const SCTP_PRINFO: c_int = 5;
pub const SCTP_AUTHINFO: c_int = 6;
pub const SCTP_DSTADDRV4: c_int = 7;
pub const SCTP_DSTADDRV6: c_int = 8;
177 changes: 177 additions & 0 deletions src/new/linux_uapi/linux/tls.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
//! Header: `uapi/linux/tls.h`

use crate::prelude::*;
use crate::{
__u16,
__u8,
};

pub const TLS_TX: c_int = 1;
pub const TLS_RX: c_int = 2;
pub const TLS_TX_ZEROCOPY_RO: c_int = 3;
pub const TLS_RX_EXPECT_NO_PAD: c_int = 4;

pub const TLS_1_2_VERSION_MAJOR: __u8 = 0x3;
pub const TLS_1_2_VERSION_MINOR: __u8 = 0x3;
pub const TLS_1_2_VERSION: __u16 =
((TLS_1_2_VERSION_MAJOR as __u16) << 8) | (TLS_1_2_VERSION_MINOR as __u16);

pub const TLS_1_3_VERSION_MAJOR: __u8 = 0x3;
pub const TLS_1_3_VERSION_MINOR: __u8 = 0x4;
pub const TLS_1_3_VERSION: __u16 =
((TLS_1_3_VERSION_MAJOR as __u16) << 8) | (TLS_1_3_VERSION_MINOR as __u16);

pub const TLS_CIPHER_AES_GCM_128: __u16 = 51;
pub const TLS_CIPHER_AES_GCM_128_IV_SIZE: usize = 8;
pub const TLS_CIPHER_AES_GCM_128_KEY_SIZE: usize = 16;
pub const TLS_CIPHER_AES_GCM_128_SALT_SIZE: usize = 4;
pub const TLS_CIPHER_AES_GCM_128_TAG_SIZE: usize = 16;
pub const TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE: usize = 8;

pub const TLS_CIPHER_AES_GCM_256: __u16 = 52;
pub const TLS_CIPHER_AES_GCM_256_IV_SIZE: usize = 8;
pub const TLS_CIPHER_AES_GCM_256_KEY_SIZE: usize = 32;
pub const TLS_CIPHER_AES_GCM_256_SALT_SIZE: usize = 4;
pub const TLS_CIPHER_AES_GCM_256_TAG_SIZE: usize = 16;
pub const TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE: usize = 8;

pub const TLS_CIPHER_AES_CCM_128: __u16 = 53;
pub const TLS_CIPHER_AES_CCM_128_IV_SIZE: usize = 8;
pub const TLS_CIPHER_AES_CCM_128_KEY_SIZE: usize = 16;
pub const TLS_CIPHER_AES_CCM_128_SALT_SIZE: usize = 4;
pub const TLS_CIPHER_AES_CCM_128_TAG_SIZE: usize = 16;
pub const TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE: usize = 8;

pub const TLS_CIPHER_CHACHA20_POLY1305: __u16 = 54;
pub const TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE: usize = 12;
pub const TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE: usize = 32;
pub const TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE: usize = 0;
pub const TLS_CIPHER_CHACHA20_POLY1305_TAG_SIZE: usize = 16;
pub const TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE: usize = 8;

pub const TLS_CIPHER_SM4_GCM: __u16 = 55;
pub const TLS_CIPHER_SM4_GCM_IV_SIZE: usize = 8;
pub const TLS_CIPHER_SM4_GCM_KEY_SIZE: usize = 16;
pub const TLS_CIPHER_SM4_GCM_SALT_SIZE: usize = 4;
pub const TLS_CIPHER_SM4_GCM_TAG_SIZE: usize = 16;
pub const TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE: usize = 8;

pub const TLS_CIPHER_SM4_CCM: __u16 = 56;
pub const TLS_CIPHER_SM4_CCM_IV_SIZE: usize = 8;
pub const TLS_CIPHER_SM4_CCM_KEY_SIZE: usize = 16;
pub const TLS_CIPHER_SM4_CCM_SALT_SIZE: usize = 4;
pub const TLS_CIPHER_SM4_CCM_TAG_SIZE: usize = 16;
pub const TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE: usize = 8;

pub const TLS_CIPHER_ARIA_GCM_128: __u16 = 57;
pub const TLS_CIPHER_ARIA_GCM_128_IV_SIZE: usize = 8;
pub const TLS_CIPHER_ARIA_GCM_128_KEY_SIZE: usize = 16;
pub const TLS_CIPHER_ARIA_GCM_128_SALT_SIZE: usize = 4;
pub const TLS_CIPHER_ARIA_GCM_128_TAG_SIZE: usize = 16;
pub const TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE: usize = 8;

pub const TLS_CIPHER_ARIA_GCM_256: __u16 = 58;
pub const TLS_CIPHER_ARIA_GCM_256_IV_SIZE: usize = 8;
pub const TLS_CIPHER_ARIA_GCM_256_KEY_SIZE: usize = 32;
pub const TLS_CIPHER_ARIA_GCM_256_SALT_SIZE: usize = 4;
pub const TLS_CIPHER_ARIA_GCM_256_TAG_SIZE: usize = 16;
pub const TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE: usize = 8;

pub const TLS_SET_RECORD_TYPE: c_int = 1;
pub const TLS_GET_RECORD_TYPE: c_int = 2;

s! {
pub struct tls_crypto_info {
pub version: __u16,
pub cipher_type: __u16,
}

pub struct tls12_crypto_info_aes_gcm_128 {
pub info: tls_crypto_info,
pub iv: [c_uchar; TLS_CIPHER_AES_GCM_128_IV_SIZE],
pub key: [c_uchar; TLS_CIPHER_AES_GCM_128_KEY_SIZE],
pub salt: [c_uchar; TLS_CIPHER_AES_GCM_128_SALT_SIZE],
pub rec_seq: [c_uchar; TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE],
}

pub struct tls12_crypto_info_aes_gcm_256 {
pub info: tls_crypto_info,
pub iv: [c_uchar; TLS_CIPHER_AES_GCM_256_IV_SIZE],
pub key: [c_uchar; TLS_CIPHER_AES_GCM_256_KEY_SIZE],
pub salt: [c_uchar; TLS_CIPHER_AES_GCM_256_SALT_SIZE],
pub rec_seq: [c_uchar; TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE],
}

pub struct tls12_crypto_info_aes_ccm_128 {
pub info: tls_crypto_info,
pub iv: [c_uchar; TLS_CIPHER_AES_CCM_128_IV_SIZE],
pub key: [c_uchar; TLS_CIPHER_AES_CCM_128_KEY_SIZE],
pub salt: [c_uchar; TLS_CIPHER_AES_CCM_128_SALT_SIZE],
pub rec_seq: [c_uchar; TLS_CIPHER_AES_CCM_128_REC_SEQ_SIZE],
}

pub struct tls12_crypto_info_chacha20_poly1305 {
pub info: tls_crypto_info,
pub iv: [c_uchar; TLS_CIPHER_CHACHA20_POLY1305_IV_SIZE],
pub key: [c_uchar; TLS_CIPHER_CHACHA20_POLY1305_KEY_SIZE],
pub salt: [c_uchar; TLS_CIPHER_CHACHA20_POLY1305_SALT_SIZE],
pub rec_seq: [c_uchar; TLS_CIPHER_CHACHA20_POLY1305_REC_SEQ_SIZE],
}

pub struct tls12_crypto_info_sm4_gcm {
pub info: tls_crypto_info,
pub iv: [c_uchar; TLS_CIPHER_SM4_GCM_IV_SIZE],
pub key: [c_uchar; TLS_CIPHER_SM4_GCM_KEY_SIZE],
pub salt: [c_uchar; TLS_CIPHER_SM4_GCM_SALT_SIZE],
pub rec_seq: [c_uchar; TLS_CIPHER_SM4_GCM_REC_SEQ_SIZE],
}

pub struct tls12_crypto_info_sm4_ccm {
pub info: tls_crypto_info,
pub iv: [c_uchar; TLS_CIPHER_SM4_CCM_IV_SIZE],
pub key: [c_uchar; TLS_CIPHER_SM4_CCM_KEY_SIZE],
pub salt: [c_uchar; TLS_CIPHER_SM4_CCM_SALT_SIZE],
pub rec_seq: [c_uchar; TLS_CIPHER_SM4_CCM_REC_SEQ_SIZE],
}

pub struct tls12_crypto_info_aria_gcm_128 {
pub info: tls_crypto_info,
pub iv: [c_uchar; TLS_CIPHER_ARIA_GCM_128_IV_SIZE],
pub key: [c_uchar; TLS_CIPHER_ARIA_GCM_128_KEY_SIZE],
pub salt: [c_uchar; TLS_CIPHER_ARIA_GCM_128_SALT_SIZE],
pub rec_seq: [c_uchar; TLS_CIPHER_ARIA_GCM_128_REC_SEQ_SIZE],
}

pub struct tls12_crypto_info_aria_gcm_256 {
pub info: tls_crypto_info,
pub iv: [c_uchar; TLS_CIPHER_ARIA_GCM_256_IV_SIZE],
pub key: [c_uchar; TLS_CIPHER_ARIA_GCM_256_KEY_SIZE],
pub salt: [c_uchar; TLS_CIPHER_ARIA_GCM_256_SALT_SIZE],
pub rec_seq: [c_uchar; TLS_CIPHER_ARIA_GCM_256_REC_SEQ_SIZE],
}
}

c_enum! {
// FIXME(1.0): This is an i32 in `libc` but enum reprs are `u32`.
#[repr(c_int)]
pub enum #anon {
pub TLS_INFO_UNSPEC,
pub TLS_INFO_VERSION,
pub TLS_INFO_CIPHER,
pub TLS_INFO_TXCONF,
pub TLS_INFO_RXCONF,
pub TLS_INFO_ZC_RO_TX,
pub TLS_INFO_RX_NO_PAD,
pub TLS_INFO_TX_MAX_PAYLOAD_LEN,
__TLS_INFO_MAX,
}
}

/// This symbols is prone to change across releases upstream. See the
/// [usage guidelines](crate#usage-guidelines) for details.
pub const TLS_INFO_MAX: c_int = __TLS_INFO_MAX - 1;

pub const TLS_CONF_BASE: c_int = 1;
pub const TLS_CONF_SW: c_int = 2;
pub const TLS_CONF_HW: c_int = 3;
pub const TLS_CONF_HW_RECORD: c_int = 4;
2 changes: 2 additions & 0 deletions src/new/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,8 @@ cfg_if! {
pub use linux::mount::*;
pub use linux::netlink::*;
pub use linux::pidfd::*;
pub use linux::sctp::*;
pub use linux::tls::*;
#[cfg(target_env = "gnu")]
pub use net::route::*;
} else if #[cfg(target_vendor = "apple")] {
Expand Down
Loading