docs: Prepare release of version 2.1

Change-Id: I3694a8791b9540fc1b926a83ff55421b47e0f1b1
Refs: #3151
diff --git a/.jenkins.d/00-prepare.sh b/.jenkins.d/00-prepare.sh
index 67e579f..57ddf70 100755
--- a/.jenkins.d/00-prepare.sh
+++ b/.jenkins.d/00-prepare.sh
@@ -4,7 +4,7 @@
 
 git rm -qrf .
 git clone --depth=1 https://github.com/named-data-ndnSIM/ns-3-dev ns-3
-git clone --depth=1 https://github.com/named-data-ndnSIM/pybindgen.git pybindgen
+git clone https://github.com/named-data-ndnSIM/pybindgen.git pybindgen
 mkdir -p ns-3/src/ndnSIM
 mv .git ns-3/src/ndnSIM/
 (cd ns-3/src/ndnSIM/ && git reset -q && git checkout . && git submodule update --init)
diff --git a/.jenkins.d/01-deps.sh b/.jenkins.d/01-deps.sh
index d05e767..9d49b08 100755
--- a/.jenkins.d/01-deps.sh
+++ b/.jenkins.d/01-deps.sh
@@ -29,7 +29,7 @@
         sudo apt-get install -qq -y libboost-all-dev
     fi
 
-    sudo apt-get install -qq -y python-dev python-pygraphviz python-kiwi
+    sudo apt-get install -qq -y python-setuptools python-dev python-pygraphviz python-kiwi
     sudo apt-get install -qq -y python-pygoocanvas python-gnome2
     sudo apt-get install -qq -y python-rsvg ipython
 fi
diff --git a/AUTHORS b/AUTHORS
index afa667d..3126cf4 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -15,3 +15,5 @@
   * Hovaidi Ardestani Mohammad  <mohammad.hovaidi.ardestani@aalto.fi>
   * Michael Sweatt              <https://www.linkedin.com/in/michaelsweatt>
   * Wentao Shang                <http://irl.cs.ucla.edu/~wentao/>
+  * Christian Kreuzberger       <christian.kreuzberger@itec.aau.at>
+  * Yuanzhi Gao                 <billmaxwell@ucla.edu>
diff --git a/docs/Doxyfile b/docs/Doxyfile
index b8d1823..0ffcccf 100644
--- a/docs/Doxyfile
+++ b/docs/Doxyfile
@@ -1966,6 +1966,7 @@
                          NS_LOG_COMPONENT_DEFINE \
                          NFD_LOG_INIT \
                          BOOST_CONCEPT_ASSERT \
+                         BOOST_CONCEPT_REQUIRES \
                          PUBLIC_WITH_TESTS_ELSE_PROTECTED=protected \
                          PUBLIC_WITH_TESTS_ELSE_PRIVATE=private \
                          PROTECTED_WITH_TESTS_ELSE_PRIVATE=private \
@@ -1973,7 +1974,11 @@
                          DECL_OVERRIDE \
                          ATTRIBUTE_HELPER_CPP \
                          NDN_CXX_KEYCHAIN_REGISTER_PIB \
-                         NDN_CXX_KEYCHAIN_REGISTER_TPM
+                         NDN_CXX_KEYCHAIN_REGISTER_TPM \
+                         NFD_LOG_INCLASS_TEMPLATE_SPECIALIZATION_DEFINE \
+                         NFD_LOG_INCLASS_2TEMPLATE_SPECIALIZATION_DEFINE \
+                         NDN_CXX_DECL_OVERRIDE=override \
+                         NDN_CXX_DECL_FINAL=final
 
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
diff --git a/docs/redmine_issue.py b/docs/redmine_issue.py
new file mode 100644
index 0000000..35c3b12
--- /dev/null
+++ b/docs/redmine_issue.py
@@ -0,0 +1,70 @@
+# -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+# Based on http://doughellmann.com/2010/05/09/defining-custom-roles-in-sphinx.html
+
+"""Integration of Sphinx with Redmine.
+"""
+
+from docutils import nodes, utils
+from docutils.parsers.rst.roles import set_classes
+
+def redmine_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
+    """Link to a Redmine issue.
+
+    Returns 2 part tuple containing list of nodes to insert into the
+    document and a list of system messages.  Both are allowed to be
+    empty.
+
+    :param name: The role name used in the document.
+    :param rawtext: The entire markup snippet, with role.
+    :param text: The text marked with the role.
+    :param lineno: The line number where rawtext appears in the input.
+    :param inliner: The inliner instance that called us.
+    :param options: Directive options for customization.
+    :param content: The directive content for customization.
+    """
+    try:
+        issue_num = int(text)
+        if issue_num <= 0:
+            raise ValueError
+    except ValueError:
+        msg = inliner.reporter.error(
+            'Redmine issue number must be a number greater than or equal to 1; '
+            '"%s" is invalid.' % text, line=lineno)
+        prb = inliner.problematic(rawtext, rawtext, msg)
+        return [prb], [msg]
+    app = inliner.document.settings.env.app
+    node = make_link_node(rawtext, app, 'issues', str(issue_num), options)
+    return [node], []
+
+def make_link_node(rawtext, app, type, slug, options):
+    """Create a link to a Redmine resource.
+
+    :param rawtext: Text being replaced with link node.
+    :param app: Sphinx application context
+    :param type: Link type (issue, changeset, etc.)
+    :param slug: ID of the thing to link to
+    :param options: Options dictionary passed to role func.
+    """
+    #
+    try:
+        base = app.config.redmine_project_url
+        if not base:
+            raise AttributeError
+    except AttributeError, err:
+        raise ValueError('redmine_project_url configuration value is not set (%s)' % str(err))
+    #
+    slash = '/' if base[-1] != '/' else ''
+    ref = base + slash + type + '/' + slug + '/'
+    set_classes(options)
+    node = nodes.reference(rawtext, 'Issue #' + utils.unescape(slug), refuri=ref,
+                           **options)
+    return node
+
+def setup(app):
+    """Install the plugin.
+
+    :param app: Sphinx application context.
+    """
+    app.add_role('issue', redmine_role)
+    app.add_config_value('redmine_project_url', None, 'env')
+    return
diff --git a/docs/source/RELEASE_NOTES.rst b/docs/source/RELEASE_NOTES.rst
index 3b33d33..babf221 100644
--- a/docs/source/RELEASE_NOTES.rst
+++ b/docs/source/RELEASE_NOTES.rst
@@ -5,8 +5,150 @@
 
 All of the ndnSIM documentation is accessible from the `ndnSIM website <http://ndnsim.net>`__.
 
-Release 2.0
------------
+Release 2.1 (Changes since release 2.0)
+---------------------------------------
+
+Release date: September 4, 2015
+
+Overview
+~~~~~~~~
+
+- Integration with ndn-cxx and NFD codebases has been refactored to include ndn-cxx and
+  NFD repositories as git submodules within ndnSIM repository (:issue:`3138`).
+
+  This refactoring simplifies upgrading ndn-cxx and NFD to new versions and prevents old
+  simulation code to break because of API changes in newer versions of ndn-cxx library.
+
+  .. note::
+     In order to retrieve the marked versions of ndn-cxx and NFD, use ``--recursive``
+     option to the git clone command or run ``git submodule update --init`` after clone,
+     pull, or merge.
+
+- The official home for ndnSIM codebase has been moved to `GitHub named-data-ndnSIM
+  organization <https://github.com/named-data-ndnSIM>`__ (:issue:`3123`):
+
+  * `ndnSIM codebase <https://github.com/named-data-ndnSIM/ndnSIM>`__
+  * `Modified version of ndn-cxx <https://github.com/named-data-ndnSIM/ndn-cxx>`__
+  * `Modified version of NFD <https://github.com/named-data-ndnSIM/NFD>`__
+  * `Modified version of NS-3 <https://github.com/named-data-ndnSIM/ns-3-dev>`__
+  * `Modified version of python bindings generator <https://github.com/named-data-ndnSIM/pybindgen>`__
+
+- Modified version of NS-3 was updated to (rebased on top of) version 2.23-dev, with
+  ndnSIM codebase adjusted to reflect API changes (:issue:`3122`)
+
+- NFD and ndn-cxx has been upgraded to version 0.3.4 (:issue:`3125`)
+  
+New features
+~~~~~~~~~~~~
+
+- ndnSIM-specific version of :ndnsim:`ndn::Face` (:issue:`2370`)
+
+  The updated version of :ndnsim:`ndn::Face` specially designed to allow writing
+  simulation applications in the same way as real applications.  It is also possible to
+  directly use codebase of the existing applications to drive simulations, provided that
+  the codebase meets or can be adjusted to meet the requirements listed in
+  :doc:`guide-to-simulate-real-apps`.
+
+- Full support for NFD'S RIB manager (:issue:`2370`)
+
+  .. note::
+     RIB manager support is currently available only for applications based on ndn-cxx.
+     :ndnsim:`FibHelper::AddRoute` and :ndnsim:`FibHelper::RemoveRoute` used by
+     :ndnsim:`ndn::Producer` and :ndnsim:`ndn::GlobalRoutingHelper` are currently
+     interacting directly with NFD's FIB manager.  This issue will be resolved in the next
+     release of ndnSIM (:issue:`3121`)
+
+- Tutorial and example on how to speed up simulations with MPI module of NS-3:
+  `<http://ndnsim.net/2.0/parallel-simulations.html>`__
+
+- Two new helpers to simplify writing basic simulation scenarios:
+
+  - :ndnsim:`ScenarioHelper` leverages C++11 constructs to write scenarios. Example:
+
+    .. code-block:: c++
+
+         ScenarioHelper helper;
+         helper.createTopology({
+             {"1", "2"},
+             {"2", "3"}
+           });
+
+         helper.addRoutes({
+             {"1", "2", "/prefix", 1},
+             {"2", "3", "/prefix", 1}
+           });
+
+         helper.addApps({
+             {"1", "ns3::ndn::ConsumerCbr",
+                 {{"Prefix", "/prefix"}, {"Frequency", "1"}},
+                 "0s", "100s"},
+             {"3", "ns3::ndn::Producer",
+                 {{"Prefix", "/prefix"}, {"PayloadSize", "1024"}},
+                 "0s", "100s"}
+           });
+
+
+  - :ndnsim:`FactoryCallbackApp` simplifies creation of basic apps without creating a
+    separate class that is derived from ``ns3::Applications``. Example:
+
+    .. code-block:: c++
+
+        class SomeApp
+        {
+        public:
+          SomeApp(size_t initParameter);
+          ...
+        };
+
+        FactoryCallbackApp::Install(node, [] () -> shared_ptr<void> {
+            return make_shared<SomeApp>(42);
+          })
+          .Start(Seconds(1.01));
+
+Improvements and bug fixes
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Updates of ndnSIM documentation
+
+  * Updated the structure for the `ndnSIM website index page <http://ndnsim.net>`__
+  * Updated installation instructions to reflect refactoring and relocation of ndnSIM codebase
+  * API documentation (doxygen) improvements
+  * Updated list of ndnSIM research papers
+
+- The NDN stack can now be updated to handle any simulation topology changes after
+  its initial installation on a node (:issue:`2717`)
+
+- Application ID that appears in :ndnsim:`ndn::AppDelayTracer` output is now ID of the
+  application on the node, not ID of the application face that was used previously.
+
+- FibHelper has been extended to support route removals (:issue:`2358`)
+
+- ndnSIM codebase now partially covered with unit-tests (:issue:`2369`, :issue:`3059`,
+  :issue:`2783`)
+
+- Bugfixes:
+
+  * In :ndnsim:`ndn::GlobalRoutingHelper::CalculateAllPossibleRoutes` that caused crash in
+    some cases (:issue:`2535`)
+
+  * In FailLink and Uplink methods of :ndnsim:`ndn::LinkControlHelper` class that affected
+    more links than requested (:issue:`2783`)
+
+  * With hop count of data packets retrieved from the Contest Store of NFD (:issue:`2764`)
+
+  * In :ndnsim:`ndn::Producer` application that caused a wrong dummy signature to be added
+    to the constructed data packets (:issue:`2927`)
+
+
+
+********************************************************************************
+
+
+
+Release 2.0 (Changes since release 1.0)
+---------------------------------------
+
+Release date: January 13, 2015
 
 Overview
 ~~~~~~~~
@@ -36,7 +178,7 @@
 New Features
 ~~~~~~~~~~~~
 
--  Integration with NFD codebase:
+-  Integration with NFD codebase.
 -  A realistic behavior is added to the simulations.
 -  Forwarding plane extensions can be used in both ndnSIM simulations and real NFD deployment.
 -  Per namespace forwarding strategies for different namespaces (one strategy per namespace).
diff --git a/docs/source/_templates/indexcontent.html b/docs/source/_templates/indexcontent.html
index 55a4b08..0a9cfbb 100644
--- a/docs/source/_templates/indexcontent.html
+++ b/docs/source/_templates/indexcontent.html
@@ -93,6 +93,7 @@
           <p class="biglink"><a class="biglink" href="http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim" target="_blank">ndnSIM mailing list</a><br/>
             <span class="linkdescr"><a href="http://www.lists.cs.ucla.edu/pipermail/ndnsim/" target="_blank">mailing list archives</a></span></p>
 
+          <p class="biglink"><a class="biglink" href="{{ pathto("meta/authors") }}">ndnSIM Team</a></p>
           <p class="biglink"><a class="biglink" href="{{ pathto("meta/copying") }}">Copyright and License</a></p>
         </div>
       </td>
diff --git a/docs/source/conf.py b/docs/source/conf.py
index c648be3..8a5d508 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -11,12 +11,12 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-import sys, os
+import sys, os, re
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
+sys.path.insert(0, os.path.abspath('..'))
 
 # -- General configuration -----------------------------------------------------
 
@@ -25,8 +25,32 @@
 
 # Add any Sphinx extension module names here, as strings. They can be extensions
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = [ "sphinx.ext.autodoc", "sphinx.ext.mathjax", "sphinxcontrib.doxylink", "sphinxcontrib.aafig", "sphinxcontrib.googleanalytics", "sphinxcontrib.bibtex" ]
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.mathjax',
+    'sphinxcontrib.doxylink',
+    'sphinxcontrib.aafig',
+    'sphinxcontrib.googleanalytics',
+    'sphinxcontrib.bibtex',
+    'redmine_issue'
+]
 
+# def addExtensionIfExists(extension):
+#     try:
+#         __import__(extension)
+#         extensions.append(extension)
+#     except ImportError:
+#         sys.stderr.write("Extension '%s' in not available. "
+#                          "Some documentation may not build correctly.\n" % extension)
+#         sys.stderr.write("To install, use \n"
+#                          "  sudo pip install %s\n" % extension.replace('.', '-'))
+
+# addExtensionIfExists('sphinxcontrib.doxylink')
+
+# if os.getenv('GOOGLE_ANALYTICS', None):
+#     addExtensionIfExists('sphinxcontrib.googleanalytics')
+
+    
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
 
@@ -255,3 +279,5 @@
 aafig_format = {'latex': 'pdf', 'html': 'svg', 'text': None}
 
 # aafig_default_options = dict(Fixed=True)
+
+redmine_project_url = "http://redmine.named-data.net/"
diff --git a/docs/source/intro.rst b/docs/source/intro.rst
index 4c4c981..f976b8d 100644
--- a/docs/source/intro.rst
+++ b/docs/source/intro.rst
@@ -49,7 +49,7 @@
 
 Specifically, the simulator directly uses NFD implementations of :nfd:`pending Interest
 table (PIT) <nfd::Pit>`, :nfd:`forwarding information base (FIB) <nfd::Fib>`, and
-:nfd:`content store <nfd::Cs>` data structures.  In addition to that, ndnSIM allows
+:nfd:`content store <nfd::cs::Cs>` data structures.  In addition to that, ndnSIM allows
 experimentation with :ndnSIM:`ndnSIM-specific content store <ndn::ContentStore>` along
 with its cache replacement policies ported from the previous version of ndnSIM.
 
diff --git a/docs/source/meta/authors.rst b/docs/source/meta/authors.rst
new file mode 100644
index 0000000..875d98f
--- /dev/null
+++ b/docs/source/meta/authors.rst
@@ -0,0 +1,4 @@
+ndnSIM Team
+===========
+
+.. include:: ../../../AUTHORS