[Nfd-dev] ndn-cxx devguide outline

Burke, Jeff jburke at remap.ucla.edu
Tue Sep 9 15:17:57 PDT 2014


Hi Junxiao,

Thanks for this.

I'd propose that the specification of how all libraries must/should operate be separated from the specifics of developing using ndn-cxx.  This would help immensely in NDN-CCL development, for example, where APIs, data types, and even application interaction may differ from ndn-cxx, but certain important functionality must be the same.

I'm not exactly sure where the line should be drawn between spec and ndn-cxx approach, but have highlighted a few things below that I'd suggest  could mostly described in a spec and then referenced / expanded upon in the developer guide.

As an aside, now that NFD has reached its first major milestone, I'd also like to encourage the many developers engaged for that effort to consider contributing functionality and documentation to NDN-CCL as well.

Jeff


From: Junxiao Shi <shijunxiao at email.arizona.edu<mailto:shijunxiao at email.arizona.edu>>
Date: Tue, 9 Sep 2014 13:45:19 -0700
To: "<nfd-dev at lists.cs.ucla.edu<mailto:nfd-dev at lists.cs.ucla.edu>>" <nfd-dev at lists.cs.ucla.edu<mailto:nfd-dev at lists.cs.ucla.edu>>
Subject: [Nfd-dev] ndn-cxx devguide outline

Dear folks

Here is a draft outline for ndn-cxx Application Developer Guide.
The target audience is developers who intend to develop NDN applications with ndn-cxx library.
The document should briefly explain ndn-cxx architecture, and provide some guidance of designing producer and consumer applications.

Please provide your comments on what should go into the document, and what should be emphasized.
You may reply-all to this message, or post a note on ndn-cxx Task 1581<http://redmine.named-data.net/issues/1581>.
Markdown source file can be found on ndn-cxx Task 1581<http://redmine.named-data.net/issues/1581> attachment.

Yours, Junxiao
ndn-cxx Application Developer Guide

This document describes ndn-cxx: NDN C++ library with eXperimental eXtensions, and how to develop an NDN application using the ndn-cxx library.

Introduction

  *   history of ndn-cxx, comparison with ndn-ccl-api
  *   what should be included in ndn-cxx
  *   what should not be included in ndn-cxx

Application Design

This section describes how to design an application that can work well with NDN architecture and ndn-cxx library.

None of these sections are specific to ndn-cxx, and should probably not be written in a library specific manner.

Data Naming

  *   fundamental difference between NDN content distribution model and IP communication model
  *   same content should have same Name
  *   Data is immutable: version component
  *   segmenting

Interests

  *   how Interest matches Data
  *   discover names with Interest Selectors, then retrieve with predictable names
  *   avoid abusing Selectors

Security

  *   Data carries signature
  *   signed Interest for command
  *   communication channel is not secured: secrets should be protected by encryption (not signed Interest)
  *   trust management: identity, public key, certificate (more details in Security section)

Application Implementation

This section describes how to implement an application with ndn-cxx library.

Basics

  *   start a project: obtain build flags with pkg-config, include ndn-cxx headers, C++ namespace consideration
  *   Name, Interest, Data classes
  *   Face class, asynchronous operation, event loop

Producer

  *   prefix registration and Interest filter
  *   in-app storage and its difference from ContentStore

The techniques here could be in a recommendations sections of a spec or some other type of design focused document?
Consumer

  *   Interest pipeling for segmented dataset
  *   retransmissions

The techniques here could be in a recommendations sections of a spec or some other type of design focused document?
Security

  *   signing with KeyChain
  *   verification with ValidatorConfig (more details in Security section)

Integration with Other Components

  *   Boost.Asio event loop
  *   scheduler

Interacting with NFD Management

  *   nfd::Controller class and control commands
  *   status dataset
  *   notification stream
  *   local control header

The APIs to NFD should be documented separately in a specification for any library to be written to.
Security

This section explains more about security features.

Concepts

  *   identity, public key, certificate
  *   TPM
  *   PIB and PIB service
  *   KeyChain
  *   Validator

I could go both ways on these – if these are considered "architectural" components, they need to be in a spec that is not ndn-cxx specific.
Credential Management

  *   select PIB and TPM with client.conf
  *   ndnsec commands
  *   publish certificates using PIB service

Trust Model

  *   hierarchical trust model, and how to validate with ValidatorConfig
  *   web-of-trust trust model, and how to validate with ValidatorConfig
  *   considerations on designing a custom trust model

Library Internals

This section describes internals of the ndn-cxx library, useful for those who want to extend the library.

TLV encoding

  *   constants in ndn::tlv namespace
  *   Block and Buffer
  *   EncodingBuffer and EncodingEstimator
  *   how to implement a TLV abstraction type

Transport

  *   interface between Face and Transport
  *   select transport with Face constructor
  *   select transport with client.conf
  *   how to implement a transport

_______________________________________________ Nfd-dev mailing list Nfd-dev at lists.cs.ucla.edu<mailto:Nfd-dev at lists.cs.ucla.edu> http://www.lists.cs.ucla.edu/mailman/listinfo/nfd-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/nfd-dev/attachments/20140909/430862df/attachment.html>


More information about the Nfd-dev mailing list