Project

General

Profile

StatusDataset » History » Version 8

Davide Pesavento, 10/30/2021 08:11 PM

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 4 Davide Pesavento
* [[FibMgmt|FibManager]]: to publish all FIB entries and nexthop records
11
* [[StrategyChoice|StrategyChoiceManager]]: to publish strategy choices for namespaces
12
* [[RibMgmt|RibManager]]: to publish all RIB entries and routes
13 1 Junxiao Shi
14
## Specification
15
16
**Encoding**
17
18
Status information of each entity is represented by a TLV block.
19
Those TLV blocks are concatenated into a BLOB.
20
21
**Segmentation**
22
23
The BLOB is segmented into one or more Data packets, such that each Data packet does not exceed the size limit.
24
Segmentation does not consider the boundary between TLV blocks.
25
26
**Data Naming**
27
28
A status dataset is publish under a certain Name prefix.
29 7 Davide Pesavento
Every Data packet has Name `/<prefix>/<version>/<segment>`.
30 1 Junxiao Shi
31 6 Davide Pesavento
The *version* component is a `NameComponentWithMarkerAndNumber`, as in [NDN Naming Conventions (rev 1)](http://named-data.net/doc/tech-memos/naming-conventions.pdf).
32 5 Davide Pesavento
This component starts with a `0xFD` marker, followed by a `NonNegativeInteger`.
33 1 Junxiao Shi
The version number is monotonic increasing during the lifetime of the producer;
34
it could be but is not necessarily a timestamp.
35
36 6 Davide Pesavento
The *segment* component is a `NameComponentWithMarkerAndNumber`, as in [NDN Naming Conventions (rev 1)](http://named-data.net/doc/tech-memos/naming-conventions.pdf).
37 5 Davide Pesavento
This component starts with a `0x00` marker, followed by a `NonNegativeInteger`.
38 1 Junxiao Shi
The first segment has segment number zero.
39
40 7 Davide Pesavento
An example Name is: `/example/dataset/%FD%00%00%01G%BB%82%CB%A8/%00%01`.
41
This represents the second segment (segment number 1) in version 1407600217000 of a dataset at `/example/dataset`.
42 3 Junxiao Shi
43 1 Junxiao Shi
*FinalBlockId* field contains the *segment* component of the last segment.
44
This field MUST appear in the last segment, and MAY appear in other segments.
45
46
## Operations
47 2 Alex Afanasyev
48 7 Davide Pesavento
To request a status dataset, the consumer should:
49 1 Junxiao Shi
50 8 Davide Pesavento
1. send an Interest `/example/dataset` with CanBePrefix=yes, MustBeFresh=yes  
51 7 Davide Pesavento
2. wait for Data; if no Data arrives, fail
52 1 Junxiao Shi
3. take note of *version* in the arriving Data Name
53 7 Davide Pesavento
4. send Interest(s) `/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 7 Davide Pesavento
To publish a status dataset, the producer should:
59 1 Junxiao Shi
60 7 Davide Pesavento
1. listen on prefix `/example/dataset`
61
2. upon receiving an Interest, if the Interest Name is longer than `/example/dataset` (it contains version and/or segment), don't respond and abort these steps
62 1 Junxiao Shi
    * 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