NFD Release Notes

NFD version 0.3.3 (changes since version 0.3.2)

Release date: July 1, 2015

New features:

  • Content Store replacement policy interface (Issue #1207)
  • Add unit file and instructions for systemd (Issue #1586)
  • NDN Essential Tools version 0.1 featuring:
    • ndnpeek, ndnpoke: a pair of programs to request and make available for retrieval of a single Data packet
    • ndnping, ndnpingserver: reachability testing tools for Named Data Networking
    • ndndump: a traffic analysis tool that captures Interest and Data packets on the wire
    • ndn-dissect: an NDN packet format inspector. It reads zero or more NDN packets from either an input file or the standard input, and displays the Type-Length-Value (TLV) structure of those packets on the standard output.

Updates and bug fixes:

  • Avoid loopback new Interest in AccessStrategy (Issue #2831)
  • Simplified implementation of nfd-status using SegmentFetcher utility class (Issue #2456)


NFD version 0.3.2 (changes since version 0.3.1)

Release date: May 12, 2015

New features:

  • Tables
    • Change lookup API to allow async implementations of ContentStore (Issue #2411)
  • Management
    • Perform FIB updates before modifying RIB (Issue #1941)

Updates and bug fixes:

  • Documentation
    • Update planned Features: face enhancements (Issue #2617)
    • Updated NFD’s developer guide to reflect new changes and adding a new section on NFD/ndn-cxx unit testing
  • Face
    • Refactor channel acceptors to avoid use of shared pointers (Issue #2613)
    • Refactor code to avoid deprecated Block::fromBuffer overloads (Issue #2553)
    • Refactor code to use move semantics for sockets where possible (Issue #2613)
    • Switch to non-throwing version of websocketpp APIs (Issue #2630)
  • Forwarding
    • Extend measurements lifetime in AccessStrategy (Issue #2452)
  • Management
    • Stop removed namespace from inheriting ancestor route (Issue #2757)
    • Fix TestFibUpdates/EraseFace on Ubuntu 14.04 32-bit (Issue #2697)
  • Tools
  • Build

NFD version 0.3.1 (changes since version 0.3.0)

Release date: March 3, 2015

New features:

  • nfd and nrd daemons are now merged into a single process using separate threads (Issue #2489)
  • Core
    • Extend ConfigFile to support passing a parsed ConfigSection (Issue #2495)
    • Allow customization of Logger and LoggerFactory (Issue #2433)
    • Make global io_service, scheduler, and global random generator thread-local, and logger thread-safe (Issue #2489)
  • Forwarding
    • Introduce exponential back-off interest retransmission suppression mechanism and enable its use in the best-route strategy (Issue #1913)
    • Strategies are now registered with a macro, making it simpler to introduce new strategies to NFD codebase (Issue #2410)
  • Tables
    • ContentStore now recognizes CachingPolicy-NoCache from LocalControlHeader (Issue #2185)

Updates and bug fixes:

  • Faces
    • Remove Tcp|UdpChannel::connect overloads that perform DNS resolution (Issue #2422)
    • Properly handle error conditions in UdpChannel::newPeer (Issue #2516)
    • Fix inconsistency of UDP face timeouts in sample nfd.conf and actual defaults (Issue #2473)
    • Introduce Face-specific logging macros (Issue #2450)
    • Refactor handling of LinkType face trait and fix FaceStatus reporting: the link type was not properly propagated (Issue #2563)
    • Avoid exceptions in NDNLP PartialMessageStore (Issue #2261)
    • Update websocketpp to version 0.5.1
  • Tables
    • Reduce priority of DeadNonceList log messages from DEBUG to TRACE
  • Management
    • Change register/unregister logging in RibManager to INFO level (Issue #2547)
  • Tools
  • Tests
    • Change naming conventions for unit test files and test suite names (Issue #2497)
    • Fix segfault in TableNameTree test suite when all test logs are enabled (Issue #2564)

NFD version 0.3.0 (changes since version 0.2.0)

Release date: February 2, 2015

New features:

  • Build

    • The code now requires C++11. The minimum supported gcc version is 4.6, as earlier versions do not have proper support for C++11 features.
  • Faces

    • Enable detection of WebSocket connection failures using ping/pong messages (Issue #1903)
    • In EthernetFace:
      • Avoid putting the NIC in promiscuous mode if possible (Issue #1278)
      • Report packets dropped by the kernel if debug is enabled (Issue #2441)
      • Integrate NDNLP fragmentation (Issue #1209)
  • Forwarding

    • Strategy versioning (Issue #1893)
    • New Dead Nonce List table to supplement PIT for loop detection (Issue #1953)
    • Abstract retransmission suppression logic (Issue #2377)
    • New forwarding strategy for access router (Issue #1999)
  • Management

    • Add config file-based strategy selection (Issue #2053)

      The sample config file now includes strategy selection for /, /localhost, /localhost/nfd, and /ndn/broadcast namespaces as follows:

          /               /localhost/nfd/strategy/best-route
          /localhost      /localhost/nfd/strategy/broadcast
          /localhost/nfd  /localhost/nfd/strategy/best-route
          /ndn/broadcast  /localhost/nfd/strategy/broadcast
    • Implement Query Operation in FaceManager (Issue #1993)

    • FaceManager now responds with producer-generated NACK when query is invalid (Issue #1993)

    • Add functionality for automatic remote prefix registration (Issue #2056)

    • Only canonical FaceUri are allowed in faces/create commands (Issue #1910)

  • Tables

    • StrategyInfoHost can now store multiple StrategyInfo of distinct types (Issue #2240)
    • Enable iteration over PIT and CS entries (Issue #2339)
    • Allow predicate to be specified in Measurements::findLongestPrefixMatch (Issue #2314)
    • Calculate the implicit digest of Data packets in CS only when necessary (Issue #1706)
  • Tools

    • Publish /localhop/ndn-autoconf/routable-prefixes from ndn-autoconfig-server (Issue #1954)
    • Display detailed NFD software verion in nfd-status-http-server and nfd-status (Issue #1916)
    • nfdc now accepts FaceUri in all commands (Issue #1995)
    • Add daemon mode for ndn-autoconfig to re-run detection when connectivity changes (Issue #2417)
  • Core

    • New scheduler::ScopedEventId class to automatically handle scheduled event lifetime (Issue #2295)

Updates and bug fixes:

  • Documentation

    • NFD Developer’s guide has been updated to reflect changes in the codebase
    • Installation instruction updates
    • Update of config file instructions for disabling unix sockets (Issue #2190)
  • Core

    • Use implementations moved to ndn-cxx library

    • Move Network class implementation from tools/ to core/

    • Ignore non-Ethernet AF_LINK addresses when enumerating NICs on OSX and other BSD systems

    • Fix bug on not properly setting FreshnessPeriod inside SegmentPublisher (Issue #2438)

  • Faces

    • Fix spurious assertion failure in StreamFace (Issue #1856)
    • Update websocketpp submodule (Issue #1903)
    • Replace FaceFlags with individual fields (Issue #1992)
    • Drop WebSocket message if the size is larger than maximum NDN packet size (Issue #2081)
    • Make EthernetFace more robust against errors (Issue #1984)
    • Prevent potential infinite loop in TcpFactory and UdpFactory (Issue #2292)
    • Prevent crashes when attempting to create a UdpFace over a half-working connection (Issue #2311)
    • Support MTU larger than 1500 in EthernetFace (for jumbo frames) (Issue #2305)
    • Re-enable EthernetFace on OS X platform with boost >=1.57.0 (Issue #1922)
    • Fix ioctl() calls on platforms where libpcap uses /dev/bpf* (Issue #2327)
    • Fix overhead estimation in NDNLP slicer (Issue #2317)
    • Replace usage of deprecated EventEmitter with Signal in Face abstractions (Issue #2300)
    • Fix NDNLP PartialMessage cleanup scheduling (Issue #2414)
    • Remove unnecessary use of DNS resolver in (Udp|Tcp|WebSocket)Factory (Issue #2422)
  • Forwarding

    • Updates related to NccStrategy
      • Fix to prevent remembering of suboptimal upstreams (Issue #1961)
      • Optimizing FwNccStrategy/FavorRespondingUpstream test case (Issue #2037)
      • Proper detection for new PIT entry (Issue #1971)
      • Use UnitTestTimeFixture in NCC test case (Issue #2163)
      • Fix loop back to sole downstream (Issue #1998)
    • Updates related to BestRoute strategy
      • Redesign best-route v2 strategy test case (Issue #2126)
      • Fix clang compilation error in best-route v2 test case (Issue #2179)
      • Use UnitTestClock in BestRouteStrategy2 test (Issue #2160)
    • Allow strategies limited access to FaceTable (Issue #2272)
  • Tables

    • Ensure that eviction of unsolicited Data is done in FIFO order (Issue #2043)
    • Simplify table implementations with C++11 features (Issue #2100)
    • Fix issue with Fib::removeNextHopFromAllEntries invalidating NameTree iterator (Issue #2177)
    • Replace deprecated EventEmitter with Signal in FaceTable (Issue #2272)
    • Refactored implementation of ContentStore based on std::set (Issue #2254)
  • Management

    • Allow omitted FaceId in faces/create command (Issue #2031)
    • Avoid deprecated ndn::nfd::Controller(Face&) constructor (Issue #2039)
    • Enable check of command length before accessing verb (Issue #2151)
    • Rename FaceEntry to Route (Issue #2159)
    • Insert RIB command prefixes into RIB (Issue #2312)
  • Tools

    • Display face attribute fields instead of FaceFlags in nfd-status and nfd-status-http-server output (Issue #1991)
    • Fix nfd-status-http-server hanging when nfd-status output is >64k (Issue #2121)
    • Ensure that ndn-autoconfig canonizes FaceUri before sending commands to NFD (Issue #2387)
    • Refactored ndn-autoconfig implementation (Issue #2421)
    • ndn-autoconfig will now register also /localhop/nfd prefix towards the hub (Issue #2416)
  • Tests

    • Use UnitTestClock in Forwarder persistent loop test case (Issue #2162)
    • Use LimitedIo in FwForwarder/SimpleExchange test case (Issue #2161)
  • Build

    • Fix build error with python3 (Issue #1302)
    • Embed CI build and test running script
    • Properly disable assertions in release builds (Issue #2139)
    • Embed setting of PKG_CONFIG_PATH variable to commonly used values (Issue #2178)
    • Add conditional compilation for NetworkInterface and PrivilegeHelper
    • Support tools with multiple translation units (Issue #2344)


  • Remove listen option from unix channel configuration (Issue #2188)
  • Remove usage of deprecated MetaInfo::TYPE_* constants (Issue #2128)
  • Eliminate MapValueIterator in favor of boost::adaptors::map_values

NFD version 0.2.0 (changes since version 0.1.0)

Release date: August 25, 2014

  • Documentation

  • Core

    • Add support for temporary privilege drop and elevation (Issue #1370)
    • Add support to reinitialize multicast Faces and (partially) reload config file (Issue #1584)
    • Randomization routines are now uniform across all NFD modules (Issue #1369)
    • Enable use of new NDN naming conventions (Issue #1837 and Issue #1838)
  • Faces

    • WebSocket Face support (Issue #1468)
    • Fix Ethernet Face support on Linux with libpcap version >=1.5.0 (Issue #1511)
    • Fix to recognize IPv4-mapped IPv6 addresses in FaceUri (Issue #1635)
    • Fix to avoid multiple onFail events (Issue #1497)
    • Fix broken support of multicast UDP Faces on OSX (Issue #1668)
    • On Linux, path MTU discovery on unicast UDPv4 faces is now disabled (Issue #1651)
    • Added link layer byte counts in FaceCounters (Issue #1729)
    • Face IDs 0-255 are now reserved for internal NFD use (Issue #1620)
    • Serialized StreamFace::send(Interest|Data) operations using queue (Issue #1777)
  • Forwarding

    • Outgoing Interest pipeline now allows strategies to request a fresh Nonce (e.g., when the strategy needs to re-express the Interest) (Issue #1596)
    • Fix in the incoming Data pipeline to avoid sending packets to the incoming Face (Issue #1556)
    • New RttEstimator class that implements the Mean-Deviation RTT estimator to be used in forwarding strategies
    • Fix memory leak caused by not removing PIT entry when Interest matches CS (Issue #1882)
    • Fix spurious assertion in NCC strategy (Issue #1853)
  • Tables

    • Fix in ContentStore to properly adjust internal structure when Cs::setLimit is called (Issue #1646)
    • New option in configuration file to set an upper bound on ContentStore size (Issue #1623)
    • Fix to prevent infinite lifetime of Measurement entries (Issue #1665)
    • Introducing capacity limit in PIT NonceList (Issue #1770)
    • Fix memory leak in NameTree (Issue #1803)
    • Fix segfault during Fib::removeNextHopFromAllEntries (Issue #1816)
  • Management

    • RibManager now fully support CHILD_INHERIT and CAPTURE flags (Issue #1325)
    • Fix in FaceManager to respond with canonical form of Face URI for Face creation command (Issue #1619)
    • Fix to prevent creation of duplicate TCP/UDP Faces due to async calls (Issue #1680)
    • Fix to properly handle optional ExpirationPeriod in RibRegister command (Issue #1772)
    • Added functionality of publishing RIB status (RIB dataset) by RibManager (Issue #1662)
    • Fix issue of not properly canceling route expiration during processing of unregister command (Issue #1902)
    • Enable periodic clean up of route entries that refer to non-existing faces (Issue #1875)
  • Tools

    • Extended functionality of nfd-status

      • -x to output in XML format, see NFD Status XML Schema
      • -c to retrieve channel status information (enabled by default)
      • -s to retrieve configured strategy choice for NDN namespaces (enabled by default)
      • Face status now includes reporting of Face flags (local and on-demand)
      • On-demand UDP Faces now report remaining lifetime (expirationPeriod)
      • -r to retrieve RIB information
    • Improved nfd-status-http-server

      • HTTP server now presents status as XSL-formatted XML page
      • XML dataset and formatted page now include certificate name of the corresponding NFD (Issue #1807)
    • Several fixes in ndn-autoconfig tool (Issue #1595)

    • Extended options in nfdc:

      • -e to set expiration time for registered routes
      • -o to specify origin for registration and unregistration commands
    • Enable all-faces-prefix'' option in ``nfd-autoreg to register prefix for all face (on-demand and non-on-demand) (Issue #1861)

    • Enable processing auto-registration in nfd-autoreg for faces that existed prior to start of the tool (Issue #1863)

  • Build

    • Enable support of precompiled headers for clang and gcc to speed up compilation
  • Other small fixes and extensions

NFD version 0.1.0

Release date: May 7, 2014

This is an incomplete list of features that are implemented in NFD version 0.1.0.

  • Packet Format

    • NDN-TLV
    • LocalControlHeader, to allow apps to set outgoing face and learn incoming face.
  • Faces

    • Unix stream socket

    • UDP unicast

    • UDP multicast

    • TCP

    • Ethernet, currently without fragmentation.


      Ethernet support will not work properly on Linux kernels with TPACKET_V3 flexible buffer implementation (>= 3.2.0) and libpcap >= 1.5.0 (e.g., Ubuntu Linux 14.04). Refer to Issue 1551 for more detail and implementation progress.

  • Management

    • Use of signed Interests as commands, with authentication and authorization.
    • Face management
    • FIB management
    • Per-namespace strategy selection
    • NFD status publishing
    • Notification to authorized apps of internal events, including Face creation and destruction.
  • Tables and forwarding pipelines support most Interest/Data processing, including selectors.

  • RIB Management that runs as a separate process, nrd. It supports basic prefix registration by applications, but no flags yet.

  • Strategies

    • broadcast
    • best-route
    • ncc: based on ccnx 0.7 for experimentation
    • client-control: authorized application can directly control Interest forwarding
  • Name-based scoping

    • /localhost: communication only within localhost using “local” Faces (UnixStreamFace, LocalTcpFace). NFD will strictly enforce this scope for Interests and Data packets
    • /localhop: one-hop communication (e.g., if at least one incoming or outgoing Face in PIT entry is non-local, the Interest cannot be forwarded to any non-local Face)
  • Support configuration file, which is in the Boost INFO format.

  • Applications

    • Tools to discover hubs on NDN testbed.
    • peek/poke and traffic generators for testing and debugging.
    • nfdc, a command-line tool to configure NFD.
    • nfd-status, a command-line tool to query NFD status.
    • nfd-status-http-server, which reads the NFD status and publishes over HTTP.

Planned Functions and Features for Next Releases

  • NACK

    A packet sent back by a producer or a router to signal the unavailability of a requested Data packet. The protocol specification for NACK is in progress.

  • New strategies

    Additional strategies, including self-learning that populates the FIB by observing Interest and Data exchange.

  • Hop-by-hop Interest limit mechanism

    For congestion control

  • Face enhancements

    Add faces for new underlying protocols such as WiFi direct. Introduce the concept of “permanent faces” that can survive socket errors. Design a new hop-by-hop header that supports fragmentation, reliability improvement, etc.

  • Tables

    Experiment and evaluate different data structures and algorithms.

  • RIB management

    Move to more scalable data structures and support all flags in prefix registrations.

  • Tunnel management

    For hub nodes to authenticate incoming tunnel requests and maintain the tunnels.

  • Extensible name-based scoping

    Configurable organization-based scoping