Project

General

Profile

Status Dataset

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:

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 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: ndn:/example/dataset/%FD%00%00%01G%BB%82%CB%A8/%00%01.
This represents the second segment (segment number 1) in version 1407600217000 of a dataset at ndn:/example/dataset.

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:/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
  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:/example/dataset/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