Status Dataset is a mechanism of NFD Management protocol.
This document defines how status information about a collection of entities is encoded, segmented, and published as Data packets.
Status Dataset is used by:
- FaceManager: to publish the description of all active faces and their counters
- FibManager: to publish all FIB entries and nexthop records
- StrategyChoiceManager: to publish strategy choices for namespaces
- RibManager: to publish all RIB entries and routes
Status information of each entity is represented by a TLV block.
Those TLV blocks are concatenated into a BLOB.
The BLOB is segmented into one or more Data packets, such that each Data packet does not exceed the size limit.
Segmentation does not consider the boundary between TLV blocks.
A status dataset is publish under a certain Name prefix.
Every Data packet has Name ndn:/prefix/version/segment
The version component is a NameComponentWithMarkerAndNumber, as in NDN Naming Conventions.
This component starts with a 0xFD marker, followed by a nonNegativeInteger.
The version number is monotonic increasing during the lifetime of the producer;
it could be but is not necessarily a timestamp.
The segment component is a NameComponentWithMarkerAndNumber, as in NDN Naming Conventions.
This component starts with a 0x00 marker, followed by a nonNegativeInteger.
The first segment has segment number zero.
An example Name is:
This represents the second segment (segment number 1) in version 1407600217000 of a dataset at
FinalBlockId field contains the segment component of the last segment.
This field MUST appear in the last segment, and MAY appear in other segments.
To request a status dataset, the consumer:
- send an Interest
ndn:/example/dataset, ChildSelector=rightmost, MustBeFresh=yes
- if the consumer has a previous version of this dataset and wish to request a new version, set Exclude=Any..last-known-version
- wait for a Data; if no Data arrives, fail
- take note of version in the arriving Data Name
- send Interest(s) ndn:/example/dataset/version/segment to retrieve other segments
- repeat step 4 until all segments are retrieved
- sort segments in order, concatenate the Content of all segments to obtain the BLOB
- parse the BLOB into a series of TLV blocks each represents the status information of an entity
To publish a status dataset, the producer:
- listen on prefix
- upon receiving an Interest, if the Interest Name is longer than
ndn:/example/dataset(it contains version and/or segment), don't respond and abort these steps
- these Interests should be satisfied by the ContentStore
- generate a new version number
- collect status TLV blocks, concatenate into the BLOB, and segment it into Data packets
- put all Data packets
- the first Data packet (preferably the first segment) satisfies the Interest
- other Data packets are admitted to the ContentStore as unsolicited Data