Files
tsunagi/crates/tsunagi-core/src/proto/mod.rs
T
Aleksandr BogomiakovandClaude 9966b50407 Rename the CLI package to tsunagi and its executable to tsng
The command line package is now `tsunagi` and builds the `tsng` executable,
which the packages, the unit, the installers and the workflows install and
run. The core library package becomes `tsunagi-core`, keeping the library name
`tsunagi`, so no code changes `use tsunagi::...`. Directories follow
(crates/tsunagi-core, crates/tsunagi). Every command shown to a person is now
`tsng ...`.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-03 02:14:43 +01:00

36 lines
1.3 KiB
Rust

//! The control protocol: framing, messages and the network membership
//! handshake.
//!
//! Only control messages travel over iroh. User IP traffic is never tunnelled
//! through this protocol.
//!
//! Layering, outermost first:
//!
//! 1. iroh/QUIC connection with ALPN [`message::ALPN`] — endpoint
//! authentication, confidentiality and integrity.
//! 2. One bidirectional stream per session, carrying length-prefixed frames
//! ([`frame`]).
//! 3. The [`handshake`], which must complete before anything else is accepted.
//! 4. [`message::Envelope`]s carrying [`message::ControlMessage`]s, each
//! re-checked against the session's network id.
//!
//! Nothing here adds its own encryption on top of iroh.
//!
//! # The data plane speaks a different protocol
//!
//! IP plugin packets never travel on a control connection. They use their own
//! ALPN, [`message::DATA_ALPN`], with the same membership handshake followed by
//! [`message::DataOpen`]. Keeping them apart is what lets the data plane's
//! transport be replaced without touching anything above.
pub mod frame;
pub mod handshake;
pub mod message;
pub use frame::{read_frame, write_frame};
pub use handshake::{HandshakeOutcome, Role};
pub use message::{
ALPN, Announcement, AuthProof, ControlMessage, DATA_ALPN, DataOpen, DataOpenAck, Envelope,
Hello, HelloAck, PROTOCOL_VERSION,
};