Expand description
RADIUS client (a NAS): NetGet authenticates users and reports accounting to a RADIUS server, and the model decides who and what.
Three tasks per client, all registered with the client:
- transport owns the UDP socket, the shared secret, the identifiers of requests in
flight and their retransmission timers. Every reply is verified (
wire::verify_reply) before anything in it reaches the model; one that does not verify is discarded and reported asradius_error, and the request goes on waiting for a genuine answer. - turns asks the model about each reply or error, in order, and hands its actions back to the transport. The chain passes through that queue, so it needs no recursion.
- commands runs injected actions (
[ send ], MCPsend_to_client) down the same path.
The shared secret lives in the transport’s Settings and is used for nothing but
authenticators. Settings deliberately does not implement Debug.
Re-exports§
pub use actions::RadiusClientProtocol;pub use crate::server::radius::packet::read_frames;
Modules§
- actions
- RADIUS client actions, events and metadata.
- wire
- RADIUS client packets: what the server’s
packet.rsleaves out because a server never needs it — building requests, and checking a reply’s two authenticators against the request.
Structs§
- Radius
Client - Settings
- What the transport needs, secret included. Not
Debug, so it cannot be logged by accident.
Enums§
- Link
- Where packets go: a UDP socket (RADIUS) or a framed stream (RadSec, RFC 6614, which carries the same packets over TLS). On a stream a request is never retransmitted — the transport is reliable — but it waits the same total time before it is reported unanswered.
Constants§
- MAX_
IN_ FLIGHT - Requests awaiting a reply. The next is refused; the identifier space is 256.