diff --git a/.jenkins.d/00-prepare.sh b/.jenkins.d/00-prepare.sh index 67e579f9d..57ddf7021 100755 --- a/.jenkins.d/00-prepare.sh +++ b/.jenkins.d/00-prepare.sh @@ -4,7 +4,7 @@ set -x 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 d05e767d6..9d49b08cf 100755 --- a/.jenkins.d/01-deps.sh +++ b/.jenkins.d/01-deps.sh @@ -29,7 +29,7 @@ if has Ubuntu $NODE_LABELS; then 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 afa667d46..3126cf470 100644 --- a/AUTHORS +++ b/AUTHORS @@ -15,3 +15,5 @@ people who have reported bugs, submitted patches,and implemented new features o * Hovaidi Ardestani Mohammad * Michael Sweatt * Wentao Shang + * Christian Kreuzberger + * Yuanzhi Gao diff --git a/docs/Doxyfile b/docs/Doxyfile index b8d1823bc..0ffcccf4a 100644 --- a/docs/Doxyfile +++ b/docs/Doxyfile @@ -1966,6 +1966,7 @@ PREDEFINED = NS3_ASSERT_ENABLE \ 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 @@ PREDEFINED = NS3_ASSERT_ENABLE \ 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 000000000..35c3b123a --- /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 3b33d3372..babf22158 100644 --- a/docs/source/RELEASE_NOTES.rst +++ b/docs/source/RELEASE_NOTES.rst @@ -5,8 +5,150 @@ This file contains ndnSIM release notes. All of the ndnSIM documentation is accessible from the `ndnSIM website `__. -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 `__ (:issue:`3123`): + + * `ndnSIM codebase `__ + * `Modified version of ndn-cxx `__ + * `Modified version of NFD `__ + * `Modified version of NS-3 `__ + * `Modified version of python bindings generator `__ + +- 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: + ``__ + +- 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 { + return make_shared(42); + }) + .Start(Seconds(1.01)); + +Improvements and bug fixes +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Updates of ndnSIM documentation + + * Updated the structure for the `ndnSIM website index page `__ + * 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 @@ Note RIB Manager is not yet available in ndnSIM. 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 55a4b0832..0a9cfbb91 100644 --- a/docs/source/_templates/indexcontent.html +++ b/docs/source/_templates/indexcontent.html @@ -93,6 +93,7 @@

Miscellaneous

+ diff --git a/docs/source/conf.py b/docs/source/conf.py index c648be32e..8a5d5081e 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 4c4c9810f..f976b8d88 100644 --- a/docs/source/intro.rst +++ b/docs/source/intro.rst @@ -49,7 +49,7 @@ strategies) inside ndnSIM can be directly used within the real NFD implementatio Specifically, the simulator directly uses NFD implementations of :nfd:`pending Interest table (PIT) `, :nfd:`forwarding information base (FIB) `, and -:nfd:`content store ` data structures. In addition to that, ndnSIM allows +:nfd:`content store ` data structures. In addition to that, ndnSIM allows experimentation with :ndnSIM:`ndnSIM-specific content store ` 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 000000000..875d98fb4 --- /dev/null +++ b/docs/source/meta/authors.rst @@ -0,0 +1,4 @@ +ndnSIM Team +=========== + +.. include:: ../../../AUTHORS