Release date: August 31, 2015
Boolean Face property IsOnDemand has been replaced with multistate FacePersistency property (:issue:`2989`, :issue:`3018`): persistent (Face exists as long as there are no system or socket errors), on-demand (Face is removed after inactivity period), and permanent (Face exists unless explicitly destroyed by the management).
Currently, only UDP faces are allowed to be permanent. However, management interface to create UDP permanent faces or switch UDP to permanent state will be available in the next release (:issue:`2991`).
Least Recently Used policy for Content Store (:issue:`2219`)
Currently, changing the policy requires a minor change in NFD source code. Configuration interface is coming in the next release (:issue:`3148`)
- Update of NDN Essential Tools to version 0.2 https://github.com/named-data/ndn-tools
with code improvements and the following new tools:
- PIB service to manage the public information of keys and publish certificates (:issue:`3018`)
- A Wireshark dissector for NDN packets (:issue:`3092`)
- RibManager constructor now accepts KeyChain as a parameter, preparing it for simplifying
implementation with the new
ndn::Dispatcher
class (:issue:`2390`) - Fix HTML rendering of nfd-status-http-server output in some browsers (:issue:`3019`)
- Enable automatic re-creation of multicast faces when network connectivity changes (:issue:`2460`)
- Enhance exception throwing with Boost Exception library (:issue:`2541`)
- BroadcastStrategy (
/localhost/nfd/strategy/broadcast
) renamed as MulticastStrategy (/localhost/nfd/strategy/multicast
) (:issue:`3011`)
- NDNLPv2 (http://redmine.named-data.net/projects/nfd/wiki/NDNLPv2, :issue:`2520`, :issue:`2879`, :issue:`2763`, :issue:`2883`, :issue:`2841`, :issue:`2866`)
- Refactored implementation of NFD management (:issue:`2200`, :issue:`2107`)
Release date: July 1, 2015
- Content Store replacement policy interface (:issue:`1207`)
- Add unit file and instructions for systemd (:issue:`1586`)
- NDN Essential Tools version 0.1 https://github.com/named-data/ndn-tools featuring:
ndnpeek
,ndnpoke
: a pair of programs to request and make available for retrieval of a single Data packetndnping
,ndnpingserver
: reachability testing tools for Named Data Networkingndndump
: a traffic analysis tool that captures Interest and Data packets on the wirendn-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.
- Avoid loopback new Interest in AccessStrategy (:issue:`2831`)
- Simplified implementation of
nfd-status
using SegmentFetcher utility class (:issue:`2456`)
ndn-tlv-peek
andndn-tlv-poke
command-line tools: usendnpeek
andndnpoke
programs from NDN Essential Tools repository https://github.com/named-data/ndn-tools.
- NDNLPv2 (http://redmine.named-data.net/projects/nfd/wiki/NDNLPv2, :issue:`2520`, :issue:`2879`, :issue:`2763`, :issue:`2883`, :issue:`2841`, :issue:`2866`)
- Refactored implementation of NFD management (:issue:`2200`, :issue:`2107`)
Release date: May 12, 2015
- Tables
- Change lookup API to allow async implementations of ContentStore (:issue:`2411`)
- Management
- Perform FIB updates before modifying RIB (:issue:`1941`)
- 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
- Fix hanging of nfdc on wrong input (:issue:`2690`)
- Build
- Make build scripts compatible with Python 3 (:issue:`2625`)
- Get rid of the last use of ndn::dns in NFD (:issue:`2422`)
- Update waf build system to version 1.8.9 (:issue:`2209`, :issue:`2657`, :issue:`2792`)
- Tweak default pkg-config search paths (:issue:`2711`)
- Use C version of snprintf (:issue:`2299`)
- Emulate std::to_string when it is missing (:issue:`2299`)
- Fix several "defined but not used" warnings with gcc-5 (:issue:`2767`)
- Disable precompiled headers on OS X with clang < 6.1.0 (:issue:`2804`)
Release date: March 3, 2015
nfd
andnrd
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`)
- 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
- Change prefix for :ref:`the local hub prefix discovery <local-prefix-discovery>` to be
under
/localhop/nfd
(:issue:`2479`, :issue:`2512`)
- Change prefix for :ref:`the local hub prefix discovery <local-prefix-discovery>` to be
under
- 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`)
Release date: February 2, 2015
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:tables { ... strategy_choice { / /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
fromndn-autoconfig-server
(:issue:`1954`) - Display detailed NFD software verion in
nfd-status-http-server
andnfd-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`)
- Publish
Core
- New scheduler::ScopedEventId class to automatically handle scheduled event lifetime (:issue:`2295`)
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
- Use Signal from ndn-cxx (:issue:`2272`, :issue:`2300`)
- use ethernet::Address from ndn-cxx (:issue:`2142`)
- Use MAX_NDN_PACKET_SIZE constant from ndn-cxx (:issue:`2099`)
- Use DEFAULT_INTEREST_LIFETIME from ndn-cxx (:issue:`2202`)
- Use FaceUri from ndn-cxx (:issue:`2143`)
- Use DummyClientFace from ndn-cxx (:issue:`2186`)
- Use ndn::dns from ndn-cxx (:issue:`2207`)
Move Network class implementation from
tools/
tocore/
Ignore non-Ethernet
AF_LINK
addresses when enumerating NICs on OSX and other BSD systemsFix 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`)
- Updates related to NccStrategy
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
andnfd-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`)
- Display face attribute fields instead of FaceFlags in
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
Release date: August 25, 2014
Documentation
- "NFD Developer's Guide" by NFD authors that explains NFD's internals including the overall design, major modules, their implementation, and their interactions
- New detailed instructions on how to enable auto-start of NFD using OSX
launchd
and Ubuntu'supstart
(see contrib/ folder)
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`)
- Outgoing Interest pipeline now allows strategies to request a fresh
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`)
- Fix in ContentStore to properly adjust internal structure when
Management
- RibManager now fully support
CHILD_INHERIT
andCAPTURE
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`)
- RibManager now fully support
Tools
Extended functionality of
nfd-status
-x
to output in XML format, see :ref:`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
andon-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
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.
Note
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 experimentationclient-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.
- 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