Dear all, We are pleased to announce the initial public release (version 0.2.0) of NDN Forwarding Daemon (NFD). NDN Forwarding Daemon (NFD) is a network forwarder that implements and evolves together with the Named Data Networking (NDN) protocol (http://named-data.net/doc/ndn-tlv/). More details about NFD, release notes, howtos, FAQ, and other useful resources about NFD are available online on official NFD's homepage (http://named-data.net/doc/NFD/0.2.0/). In addition to that, NFD's developer guide (http://named-data.net/wp-content/uploads/2014/07/NFD-developer-guide.pdf) provides extensive and detailed description of implementation internals and is aimed to help extend current functionality of the forwarder. The main design goal of NFD is to support diverse experimentation with NDN architecture. The design emphasizes **modularity** and **extensibility** to allow easy experiments with new protocol features, algorithms, and applications. We have not fully optimized the code for performance. The intention is that performance optimizations are one type of experiments that developers can conduct by trying out different data structures and different algorithms; over time, better implementations may emerge within the same design framework. NFD will keep evolving in three aspects: improvement of the modularity framework, keeping up with the NDN protocol spec, and addition of new features. We hope to keep the modular framework stable and lean, allowing researchers to implement and experiment with various features of NDN architecture, some of which may eventually work into the protocol specification. Binary release -------------- On the supported platforms, NFD and related tools can be installed from the binaries prepared by NFD team: - Ubuntu 12.04, and 14.04: http://named-data.net/doc/NFD/0.1.0/FAQ.html#how-to-start-using-ndn-ppa-repository-on-ubuntu-linux - OSX 10.8, 10.9 with MacPorts: http://named-data.net/doc/NFD/0.1.0/FAQ.html#how-to-start-using-ndn-macports-repository-on-osx Next releases would include support for other platforms. Please send us feedback on the platforms you're using, so we can prioritize our goals. We would also appreciate if someone can provide help with packaging the current NFD release for other platforms. Besides simplicity of installation, the binary release includes automatic initial configuration and platform-specific tools to automatically start NFD and related daemons. In particular, on OSX NFD is controlled using launchd and on Ubuntu using upstart mechanisms. In both cases, `nfd-start` and `nfd-stop` scripts are convenience wrappers for launchd and upstart. For more information refer to https://github.com/named-data/NFD/tree/master/contrib/osx-launchd and https://github.com/named-data/NFD/tree/master/contrib/upstart. Source releases --------------- The source code and source-code installation instructions are always available on NFD's homepage: - Getting Started with NFD: http://named-data.net/doc/NFD/0.2.0/getting-started.html - Source code: http://named-data.net/doc/NFD/0.2.0/download.html Additional information ---------------------- - NFD Wiki: http://redmine.named-data.net/projects/nfd/wiki/ - Feature requests and bug reports are highly welcome on NDN Redmine: http://redmine.named-data.net/projects/nfd Besides the officially supported platforms, NFD is known to work on: Fedora 20, CentOS 6, Raspberry Pi, OpenWRT, FreeBSD 10.0, and several other platforms. We are soliciting help with documenting common problems / pitfalls in installing/using NFD on different platforms on NFD WiKi (http://redmine.named-data.net/projects/nfd/wiki/Wiki#Installation-experiences-for-selected-platforms). Brief introduction of NFD features ---------------------------------- The main functionality of NFD is to forward Interest and Data packets. To do this, it abstracts lower-level network transport mechanisms into NDN Faces, maintains basic data structures like CS, PIT, and FIB, and implements the packet processing logic. In addition to basic packet forwarding, it also supports multiple forwarding strategies, and a management interface to configure, control, and monitor NFD. The following is a long but most likely incomplete list of per-module features that are implemented in the initial release of NFD. For more detailed information refer to the official NFD website http://named-data.net/doc/NFD/0.2.0/ and NFD's developer guide (http://named-data.net/wp-content/uploads/2014/07/NFD-developer-guide.pdf). - Faces - Unix stream socket - UDP unicast - UDP multicast - TCP - Ethernet, currently without fragmentation - WebSocket (RFC 6455, http://tools.ietf.org/html/rfc6455) to support in-browser NDN applications based on NDN-JS (https://github.com/named-data/ndn-js) - Tables - Content Store (CS) - Pending Interest Table (PIT) - Forwarding Information Base (FIB) - Routing Information Base (RIB) - Strategy Choice Table to remember the selected strategy for individual namespace - Measurements Table to store strategy-specific measurements information regarding name prefixes - other data structures to support forwarding of NDN Data and Interest packets. - Forwarding - 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) - 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. - RIB Management - RIB may be updated by different parties in different ways, including various routing protocols, application prefix registrations, and command-line manipulation by sysadmins. The RIB management module processes all these requests to generate a consistent forwarding table, and synchronizes it up with NFD's FIB, which contains only the minimal information needed for forwarding decisions. Although part of the management, RIB management (calculation FIB based on RIB, processing routing flags) is performed in a separate process that communicates with NFD process via NFD management protocols (see NFD's developer manual, Section 7). - Core - LocalControlHeader, to expose some internal NFD state to the application and to give the applications some control over packet processing. - Configuration file in Boost INFO format - Face monitoring - 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 ------------------------------------------------ - Forwarding - New strategies: additional strategies, including self-learning that populates the FIB by observing Interest and Data exchange. - NACK: signaling of the unavailability of a requested Data packet. The protocol specification for NACK is in progress. - Hop-by-hop Interest limit mechanism for congestion control - Extensible name-based scoping: configurable organization-based scoping - Face enhancements - Add fragmentation support for Ethernet face - New types of Faces, such as WiFi direct. - Tables - Experiment and evaluate different data structures and algorithms. - Tunnel management - For hub nodes to authenticate incoming tunnel requests and maintain the tunnels. --- NFD Team