Project

General

Profile

StatusDataset » History » Revision 2

Revision 1 (Junxiao Shi, 03/17/2014 11:59 PM) → Revision 2/8 (Alex Afanasyev, 03/22/2014 09:54 PM)

# Status Dataset 


 **Status Dataset** is a mechanism of [[Management|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: 

 * [[FaceMgmt|FaceManager]]: to publish the description of all active faces and their counters 
 * [[FibMgmt|FibManager]]: to publish FIB entries and nexthop records 

 ## Specification 

 **Encoding** 

 Status information of each entity is represented by a TLV block. 
 Those TLV blocks are concatenated into a BLOB. 

 **Segmentation** 

 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. 

 **Data Naming** 

 A status dataset is publish under a certain Name prefix. 
 Every Data packet has Name ndn:/*prefix*/*version*/*segment* 

 The *version* component is a NameComponent containing 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 NameComponent containing a nonNegativeInteger. 
 The first segment has segment number zero. 

 *FinalBlockId* field contains the *segment* component of the last segment. 
 This field MUST appear in the last segment, and MAY appear in other segments. 

 

 ## Operations 

 To request a status dataset, the consumer: 

 1. send an Interest ``ndn:/prefix``, ndn:/*prefix*, 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* 
 2. wait for a Data; if no Data arrives, fail 
 3. take note of *version* in the arriving Data Name 
 4. send Interest(s) ndn:/*prefix*/*version*/*segment* to retrieve other segments 
 5. repeat step 4 until all segments are retrieved 
 6. sort segments in order, concatenate the Content of all segments to obtain the BLOB 
 7. parse the BLOB into a series of TLV blocks each represents the status information of an entity 

 To publish a status dataset, the producer: 

 1. listen on prefix `ndn:/example/dataset` 
 2. 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 
 3. generate a new version number 
 4. collect status TLV blocks, concatenate into the BLOB, and segment it into Data packets 
 5. 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