Project

General

Profile

StatusDataset » History » Version 3

Junxiao Shi, 08/09/2014 09:10 AM

1 1 Junxiao Shi
# Status Dataset
2
3
4
**Status Dataset** is a mechanism of [[Management|NFD Management protocol]].
5
This document defines how status information about a collection of entities is encoded, segmented, and published as Data packets.
6
7
**Status Dataset** is used by:
8
9
* [[FaceMgmt|FaceManager]]: to publish the description of all active faces and their counters
10
* [[FibMgmt|FibManager]]: to publish FIB entries and nexthop records
11
12
## Specification
13
14
**Encoding**
15
16
Status information of each entity is represented by a TLV block.
17
Those TLV blocks are concatenated into a BLOB.
18
19
**Segmentation**
20
21
The BLOB is segmented into one or more Data packets, such that each Data packet does not exceed the size limit.
22
Segmentation does not consider the boundary between TLV blocks.
23
24
**Data Naming**
25
26
A status dataset is publish under a certain Name prefix.
27
Every Data packet has Name ndn:/*prefix*/*version*/*segment*
28
29 3 Junxiao Shi
The *version* component is a NameComponentWithMarkerAndNumber, as in [NDN Naming Conventions](http://named-data.net/doc/tech-memos/naming-conventions.pdf).
30
This component starts with a 0xFD marker, followed by a nonNegativeInteger.
31 1 Junxiao Shi
The version number is monotonic increasing during the lifetime of the producer;
32
it could be but is not necessarily a timestamp.
33
34 3 Junxiao Shi
The *segment* component is a NameComponentWithMarkerAndNumber, as in [NDN Naming Conventions](http://named-data.net/doc/tech-memos/naming-conventions.pdf).
35
This component starts with a 0x00 marker, followed by a nonNegativeInteger.
36 1 Junxiao Shi
The first segment has segment number zero.
37
38 3 Junxiao Shi
An example Name is: `ndn:/example/dataset/%FD%00%00%01G%BB%82%CB%A8/%00%01`.
39
This represents the second segment (segment number 1) in version 1407600217000 of a dataset at `ndn:/example/dataset`.
40
41 1 Junxiao Shi
*FinalBlockId* field contains the *segment* component of the last segment.
42
This field MUST appear in the last segment, and MAY appear in other segments.
43
44
## Operations
45
46
To request a status dataset, the consumer:
47 2 Alex Afanasyev
48 3 Junxiao Shi
1. send an Interest `ndn:/example/dataset`, ChildSelector=rightmost, MustBeFresh=yes  
49 1 Junxiao Shi
    * if the consumer has a previous version of this dataset and wish to request a new version,
50
      set Exclude=Any..*last-known-version*
51
2. wait for a Data; if no Data arrives, fail
52
3. take note of *version* in the arriving Data Name
53 3 Junxiao Shi
4. send Interest(s) ndn:/example/dataset/*version*/*segment* to retrieve other segments
54 1 Junxiao Shi
5. repeat step 4 until all segments are retrieved
55
6. sort segments in order, concatenate the Content of all segments to obtain the BLOB
56
7. parse the BLOB into a series of TLV blocks each represents the status information of an entity
57
58
To publish a status dataset, the producer:
59
60
1. listen on prefix `ndn:/example/dataset`
61
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
62
    * these Interests should be satisfied by the ContentStore
63
3. generate a new version number
64
4. collect status TLV blocks, concatenate into the BLOB, and segment it into Data packets
65
5. put all Data packets
66
    * the first Data packet (preferably the first segment) satisfies the Interest
67
    * other Data packets are admitted to the ContentStore as unsolicited Data