Skip to main content

air_sys_syscall/
lib.rs

1// This Source Code Form is subject to the terms of the Mozilla Public
2// License, v. 2.0. If a copy of the MPL was not distributed with this
3// file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
5//! Wrappers Rust des syscalls Linux pour Air (couche 0).
6//!
7//! Cette crate appelle les syscalls Linux directement via
8//! `core::arch::asm!`, sans passer par la libc. Les arguments et retours
9//! sont typés via les newtypes exposés par [`air_sys_types`].
10//!
11//! L'organisation suit les familles spécifiées dans
12//! `docs/specs/layer-0/family-*.md` : un module Rust par famille.
13//!
14//! Familles implémentées (passe 2 — corps complets) :
15//! - [`process`] : `getpid`/`gettid`/`clone3`/`waitid`/`pidfd_*`/`prctl`/`rlimits`/`capget`/`capset`.
16//! - [`signal`] : signalfd, masques, `kill`/`tgkill`/`rt_sigqueueinfo`, sigaction.
17//! - [`time`] : `clock_gettime`/`clock_getres`/`clock_nanosleep`, timerfd.
18//! - [`ipc`] : eventfd2, pipe2, splice/tee/vmsplice.
19//! - [`mem`] : mmap/munmap/mremap/mprotect/madvise/mlock, memfd, msync, process_vm_*.
20//! - [`fs`] : openat2/openat, read/write, statx, getdents64, fcntl, copy_file_range, etc.
21//! - [`net`] : socket/bind/listen/connect/accept4/send/recv/sendmsg/recvmsg, sockopt.
22//! - [`poll`] : `ppoll` — attente synchrone bornée/interruptible (ADR-044).
23//! - [`futex`] : `futex_wait`/`futex_wake` — blocage/réveil noyau (ADR-048).
24//! - [`security`] : seccomp_set_mode_filter/strict, Landlock (create_ruleset/restrict_self).
25//! - [`system`] : uname, sysinfo, gethostname/sethostname, getrandom.
26//! - [`terminal`] : termios — `tcgetattr`/`tcsetattr` (ioctls typés, ADR-060).
27//!
28//! Module asynchrone (en cours) :
29//! - [`io_uring`] : façade typée d'io_uring (cible 6.12). **Temps 1 (cœur) au
30//!   stade squelette doc-first** : surface complète (cycle de vie du ring, slab
31//!   S1, soumission/complétion, téardown S2, probe/capabilities) avec corps
32//!   `todo!()` ; implémentation en Pass B. Cf. `docs/specs/layer-0/io-uring-1-core.md`.
33
34// Les lints couche 0 (cast_possible_truncation/sign_loss/lossless/
35// arithmetic_side_effects en deny + unsafe_op_in_unsafe_fn en forbid) sont
36// hérités automatiquement depuis `[workspace.lints]` de la racine via
37// `[lints] workspace = true` dans le Cargo.toml. Aucun `#![…]` redondant ici.
38// Couche 0 `std`-free (Principe 4, ADR-048) : `#![no_std]` pour le code lib
39// **livré** (`cargo build` ⇒ preuve par le compilateur qu'aucun `std` ne subsiste).
40// Sous `cfg(test)` (y compris la preuve `loom`, lancée via `cargo test`), la crate
41// redevient `std` pour garder le prélude dans les modules `#[cfg(test)]`.
42#![cfg_attr(not(test), no_std)]
43#![deny(missing_docs)]
44
45// `alloc` fournit les types possédés (`Vec`, `String`, `CString`, `Arc`…) et,
46// hors test, les macros `vec!`/`format!` (`macro_use`) ; aucun `std` en code lib.
47// Sous test, le prélude `std` fournit déjà ces macros (pas de `macro_use`, pour
48// éviter une collision). L'exclusion mutuelle de l'état io_uring partagé repose
49// sur [`sync::FutexMutex`] (futex-maison), pas sur `std::sync::Mutex`.
50#[cfg_attr(not(test), macro_use)]
51extern crate alloc;
52
53pub mod arch;
54pub mod device;
55pub mod ebpf;
56pub mod fs;
57pub mod futex;
58pub mod io_uring;
59pub mod ipc;
60pub mod mem;
61pub mod net;
62pub mod poll;
63pub mod process;
64// Escape hatch syscall générique — EXCEPTION assumée temporaire (ADR-021 conv.3),
65// unique socle de la libc `syscall` que le pal `std` exige (cf. ADR-087 / EXCEPTIONS).
66pub mod raw_syscall;
67pub mod security;
68pub mod signal;
69pub mod system;
70pub mod terminal;
71pub mod time;
72
73// Primitives de synchronisation `std`-free (mutex futex-maison). Interne ;
74// la doc vit dans le module (`//!`).
75mod sync;
76
77#[cfg(test)]
78mod test_support;