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
2 changes: 1 addition & 1 deletion crates/ax25-node-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
//! - [`ax25`] — AX.25 address + frame codec essentials (`Packet.Ax25.Ax25Frame`, `Packet.Core.Ax25Address`, `Packet.Core.Callsign`).
//! - [`console`] — the node command-prompt layer: line assembler, command parser, and the transport-agnostic prompt loop (`Packet.Node.Core.Console`).
//! - [`sdl`] — the connected-mode AX.25 link-layer runtime: the SDL state machine driven off the generated `m0lte/ax25sdl` typed tables (the Rust port of packet.net's `Ax25Session`).
//! - [`netrom`] — the read-only "NET/ROM aware" slice: parse NODES broadcasts, build a routing table, surface it (the Rust port of `Packet.NetRom` + `Packet.Node.Core.NetRom.NetRomService`). Hears NODES, originates nothing.
//! - [`netrom`] — the full NET/ROM L3+L4 slice: hear *and* originate NODES, age the routing table, L3 forwarding, and L4 circuits (connect-by-alias + interlink), plus INP3 (present, runtime-gated off by default). The Rust port of `Packet.NetRom` + `Packet.Node.Core.NetRom`.
//!
//! The I/O-bound parts (sockets, the WiFi radio, the UART) live in the firmware
//! crate `ax25-node-fw`; this crate is pure logic over bytes so it can be tested
Expand Down
19 changes: 13 additions & 6 deletions crates/ax25-node-core/src/netrom/mod.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
//! # NET/ROM — read-only "NET/ROM aware" slice
//! # NET/ROM — full L3 + L4 slice
//!
//! The Rust port of the C# `Packet.NetRom` library + `Packet.Node.Core.NetRom`
//! service (packet.net PR #303), brought to the embedded node: **hear NODES
//! broadcasts, build a routing table, surface it** — and **originate nothing on
//! the air** (no TX, no L4 circuits, no NODES origination).
//! service (packet.net PR #303), brought to the embedded node: **hear *and*
//! originate NODES broadcasts, maintain and age a routing table, forward L3, and
//! carry L4 circuits** (connect-by-alias + interlink transit). INP3 (RIF / L3RTT /
//! SNTT) is present and byte-identical to the reference, **runtime-gated off by
//! default** so the wire form degrades exactly to plain NET/ROM when disabled.
//! The firmware drives origination + the obsolescence sweep on each NODES
//! interval; [`NetRomService`] itself stays a pure observer (below).
//!
//! ## Layout (mirrors the C# split)
//!
Expand All @@ -20,9 +24,12 @@
//! table, plus the [`NetRomRoutingView`] read accessor (the
//! `INetRomRoutingView` equivalent).
//!
//! ## The read-only guarantee
//! ## The observation tap
//!
//! The service's only interaction with a port is observing inbound frames via
//! [`NetRomService`] itself is a pure observer — origination ([`NetRomOriginator`]),
//! L3 forwarding ([`decide_forward`]), and L4 circuits ([`CircuitManager`]) are
//! separate components the firmware drives on the NODES interval. The service's
//! only interaction with a port is observing inbound frames via
//! [`NetRomService::observe_frame`] — a pure observation tap, called by the
//! firmware *before* address filtering (so it hears NODES broadcasts, which are
//! addressed to the literal text callsign `NODES`, not to us). It never gates,
Expand Down
Loading
Loading