Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Management verbs

ndn-rs’s management plane is a set of MgmtModule impls, each owning the verbs under one module name. Commands and datasets ride TLV Interests under /localhost/<forwarder>/<module>/<verb>.

For the module-author surface see Extend tier → MgmtModule. For runtime use see ndn-ctl in ndn-fwd.

Module catalogue

One module per row; one file per module under crates/ndn-mgmt/src/modules/.

ModuleFileWhat it owns
forwarder-statusmodules/status.rsForwarder-wide info dataset (uptime, version, counters).
facesmodules/faces.rsFace create/destroy/list and per-face counters.
fibmodules/fib.rsFIB list, add-nexthop, remove-nexthop.
ribmodules/rib.rsRIB register, unregister, list.
strategy-choicemodules/strategy.rsStrategy set, unset, list.
csmodules/cs.rsContent store info, config, erase.
routingmodules/routing.rsRouting-protocol typed status (per RoutingProtocolStatus).
discoverymodules/discovery.rsDiscovery-protocol neighbours.
measurementsmodules/measurements.rsStrategy measurement state (Instrument-leaning).
codingmodules/coding.rsPer-prefix coding adapters.
rate-limitmodules/rate_limit.rsToken-bucket rate-limit state.
securitymodules/security.rsKeyChain operations.
logmodules/log.rsRuntime log-filter set/get.
neighborsmodules/neighbors.rsNeighbour table (joins discovery info with face state).
servicemodules/service.rsService lifecycle (drain, shutdown).

The catalogue tracks crates/ndn-mgmt/src/modules/mod.rs — add a module there, it appears here.

Verb shape

Every command verb takes the same shape:

/localhost/<forwarder>/<module>/<verb>/<params-tlv>/<signed-Interest-fields>

Reply: signed Data carrying a ControlResponse (status code + text + optional dataset).

Datasets (read-only) use:

/localhost/<forwarder>/<module>/list

reassembled segmented Data.

Selected verbs

faces:

VerbEffect
createCreate a face with given URI. Returns face-id.
destroyDestroy a face by face-id.
updateAdjust persistency / congestion-policy on an existing face.
listStream FaceStatus dataset.
eventsNotification stream of FaceEvent (open / close / counters).

fib:

VerbEffect
add-nexthopAdd a face as a nexthop for a prefix; with cost.
remove-nexthopDrop a nexthop.
listStream FibEntry dataset.

rib:

VerbEffect
registerRegister a prefix (with origin, cost, expiry).
unregisterDrop a registration.
listStream RibEntry dataset.
eventsNotification stream of RouteEvent.

strategy-choice:

VerbEffect
setPin a strategy under a prefix.
unsetRevert to inherited strategy.
listStream StrategyChoice dataset.
eventsNotification stream of StrategyEvent.

cs:

VerbEffect
infoReturn capacity / hit / miss / size.
configAdjust admission policy at runtime.
eraseErase entries matching a prefix.

reflexive (ndn-rs extension; reflexive-forwarding control):

VerbEffect
enable / disableToggle installing new reverse routes (disable drains gracefully).
configSet the per-face cap and route-lifetime ceiling.
flushDrop all reverse routes immediately.
infoSettings, live route count, and counters.

The full per-module verb list is in each module file’s docstring.

Authentication

The forwarder’s [mgmt.auth] section decides whether commands need a signed Interest. Local Unix-socket commands are unauthenticated by default (filesystem permissions are the security boundary). Network-face mgmt commands are signed; the signer identity is configured via [mgmt.auth] signer = "/your/operator".

Notifications

Notification verbs (events) return an SVS-style stream of typed events. The Develop-tier consumer is Subscriber:

use ndn::Subscriber;
async fn run() -> anyhow::Result<()> {
let mut sub = Subscriber::connect(
    "/tmp/ndn-fwd.sock",
    "/localhost/ndn-fwd/faces/events",
).await?;
while let Some(sample) = sub.recv().await {
    println!("face event: {:?}", sample.payload);
}
Ok(()) }

See also