Phase 4 : tripoli-netctl, labo network namespaces + veth (rtnetlink)
- CLI (clap) : create/destroy/list. Network namespace créé via rtnetlink::NetworkNamespace (fork + unshare(CLONE_NEWNET) + bind-mount, équivalent de `ip netns add`), paire veth créée dans la racine, un bout déplacé dans le namespace (setns_by_fd) et adressé depuis un thread OS dédié qui fait setns() - jamais un thread du pool spawn_blocking de tokio, qui serait réutilisé pour d'autres tâches et resterait coincé dans le namespace. - Journal d'audit JSON (stderr + /var/log/tripoli-netctl/audit.log) à chaque opération. - Documenté explicitement comme labo pédagogique un-seul-poste : tripoli-edge et tripoli-api restent nativement sur l'hôte, ce projet ne pilote aucun trafic de production. - Testé en conditions réelles sur le serveur : création, adressage des deux côtés (dont lo, down par défaut dans un netns neuf), ping traversant effectivement la veth, puis destruction propre (veth + namespace) vérifiée par absence des interfaces et du namespace. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
546734ad77
commit
991f4dd04f
9 changed files with 688 additions and 2 deletions
22
tripoli-netctl/src/naming.rs
Normal file
22
tripoli-netctl/src/naming.rs
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
/// Linux limite les noms d'interface à 15 caractères (IFNAMSIZ - 1). On
|
||||
/// dérive un nom court et déterministe à partir du nom de service, pour
|
||||
/// que `create`/`destroy` retrouvent toujours la même paire veth sans
|
||||
/// avoir à la stocker séparément.
|
||||
pub struct VethNames {
|
||||
pub host: String,
|
||||
pub peer: String,
|
||||
}
|
||||
|
||||
pub fn veth_names(service_name: &str) -> VethNames {
|
||||
let short: String = service_name
|
||||
.chars()
|
||||
.filter(|c| c.is_ascii_alphanumeric())
|
||||
.map(|c| c.to_ascii_lowercase())
|
||||
.take(6)
|
||||
.collect();
|
||||
|
||||
VethNames {
|
||||
host: format!("tv-{short}h"),
|
||||
peer: format!("tv-{short}p"),
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue