Moving to NDNx

Relationship between NDNx and CCNx

NDNx is a fork of the (L)GPL’d CCNx codebase (http://ccnx.org) developed by the NDN project (http://named-data.net) that the NDN team plans to use as the basis for architecture research, as a part of a larger platform of tools.

For now the two are functionally equivalent and wire-format compatible, but the NDN project plans to add new features, fixes, language support, etc. that may differ from the CCNx roadmap / release timeline. The code will also have an open source license, typically GPL or LGPL, so innovations in the two codebases can cross-pollinate.

A preliminary collection of the “larger platform of tools” is here – but it is very early, and we expect a more significant release around November ’13.

This document explains the technical differences and how you can move from CCNx to NDNx.

Technical differences between NDNx and CCNx

NDNx version 0.1 (released in August 2013) is a fork of CCNx version 0.7.2 where “ccn” is renamed to “ndn”. For example, the application ccndstart is renamed to ndndstart and the function ccn_charbuf_create to ndn_charbuf_create.

Important exception: In the name URI, “ccnx:” is renamed to “ndn:” (not “ndnx:”).  For example, ccnx:/test/name is renamed to ndn:/test/name.

NDNx uses port 6363 (not 9695).

How to get NDNx

You can either download the stable release or the latest development code as follows:

How to get the NDNx stable release

The NDNx stable release should be used for production servers such as the NDN testbed. The best place to get the NDNx stable release is from the NDN Platform page which has a link to the latest release. Currently, this links to the GitHub release page for NDNx v0.1.

* Create a working folder on your local computer.
* As shown on the release page, save https://github.com/named-data/ndnx/archive/v0.1.tar.gz to your working folder.
* In a terminal, change to your working folder and extract:

tar xvfz ndnx-0.1.tar.gz
cd ndnx-v0.1

How to get the latest NDNx development code

The NDNx development code in the git repository has the latest features and bug fixes. NDN project team members should use the latest development code as follows:

* Create a working folder on your local computer.
* In a terminal, change to your working folder and clone the repository:

git clone https://github.com/named-data/ndnx.git
cd ndnx

If you have already cloned, you can pull the latest code. In the ndnx folder:

git pull

How to build and install NDNx

As explained in the README file, to make and install:

./configure
make
sudo make install

NDN Common Client Libraries and NDNx

The NDN Common Client Libraries (NDN-CCL) are written in C++, JavaScript and Python and provide a common API for client applications to use NDN. NDN-CCL does not depend on code from NDNx. Instead, NDN-CCL allows an application to send interests to and receive data from an NDN forwarding daemon such as NDNx. Most communication will work the same with a CCNx or NDNx forwarding daemon, but as explained below there are some things to watch out for which will require you to use NDNx instead of CCNx.

Things to watch out for using NDNx

Here are some unexpected things to watch out for when using NDNx and switching from CCNx:

* Keystore: NDNx puts keys in the file ~/.ndnx/.ndnx_keystore.  If you have keys from CCNx, you need to copy:
cp ~/.ccnx/.ccnx_keystore ~/.ndnx/.ndnx_keystore

* ccnd.conf: If you have a ccnd.conf file from CCNx, you need to copy:
cp ~/.ccnx/ccnd.conf ~/.ndnx/ndnd.conf
and in ndnd.conf you need to replace “ccnx:” with “ndn:” (not “ndnx:”).

* ccndrc: If you have a ccndrc file from CCNx, you need to copy:
cp ~/.ccnx/ccndrc ~/.ndnx/ndndrc
and in ndndrc you need to replace “CCN” with “NDN”.

* default port: The default NDNx port is 6363.  If you need to create a route with CCNx (with ndndc or in ~/.ndnx/ndnd.conf) then you must specify port 9695.  For example,
ndndc add / tcp A.hub.ndn.ucla.edu 9695

* Registering to receive interests: The message to register a prefix for receiving interests from the NDNx forwarding daemon has a name which contains “/ndnx/selfreg”.  Therefore, this won’t work with CCNx which expects “/ccnx/selfreg”.  The NDN Common Client Libraries use “/ndnx/selfreg” which is why you should run NDNx.  (If you don’t need to register to receive interests but just want to send an interest to get data, then this does work with CCNx.)

Getting support

As explained on the NDN Platform page, you can send questions to the NDN-Lib mailing list or submit bugs and feature requests on our NDNx Redmine issues page.