**breaking** mini-ndn: re-design
refs: #5062
Everything is now done through examples like Mininet.
bin/minindn no longer provided as a binary installed in the system
bin/minindnedit GUI: will no longer be maintained
Remove cluster edition, will be re-introduced later
Change-Id: Id4ef137cb2a04d1b0dd24d01941757363bbf7d26
diff --git a/docs/CLUSTER.md b/docs/CLUSTER.md
deleted file mode 100644
index e1e52ad..0000000
--- a/docs/CLUSTER.md
+++ /dev/null
@@ -1,25 +0,0 @@
-Mini-NDN cluster edition
-========================
-
-Mini-NDN cluster edition uses the experimental Mininet cluster edition.
-**Make sure that you can run the Mininet cluster edition by following
-[these instructions](https://github.com/mininet/mininet/wiki/Cluster-Edition-Prototype)**.
-Mini-NDN will use the "mininet" username created in Mininet cluster edition setup.
-
-## Mini-NDN cluster options
-
-To run Mini-NDN cluster on `localhost` and another server `server1` with
-the guided node placement strategy (default), the following command can be used:
-
- sudo minindn --cluster=localhost,server1 --place-list=1,3
-
-Note that `place-list` specifies the number of nodes to be placed on the corresponding servers
-of the cluster.
-In the example, one node will be placed on `localhost` and three nodes on `server1`.
-Unless specified, the default 4 node topology is used.
-Another placement can be `roundRobin` placement algorithm from Mininet.
-This does not require a place-list.
-
- sudo minindn --cluster=localhost,server1 --placement roundRobin
-
-By default the tunnel type used is SSH, but GRE tunnel can be specified by `--tunnel-type=gre`
diff --git a/docs/CONFIG.md b/docs/CONFIG.md
deleted file mode 100644
index d2a5bf1..0000000
--- a/docs/CONFIG.md
+++ /dev/null
@@ -1,68 +0,0 @@
-Configuration
-=============
-
-Mini-NDN uses a configuration file describing the topology and its parameters to setup a network.
-It can be generated by the GUI or written by hand or scripts.
-
-## Configuration file format:
-
-### The [nodes] section:
-
-At the bare minimum, the node section describes the nodes present in the topology.
-
- [nodes]
- a: _
- b: _
-
-Additionally each node can take the following parameters:
-
-* app : Default application(s) to be started on a node (specify '_' if no app needs to be started - required).
-The app is the only parameter which needs double quotes (see example below).
-
-* cpu : Amount of cpu available to a node (0.00 - 1.00), optional
-
-* mem : Amount of memory available to a node in KB
-
-* cache : Amount of cache memory available to a node in KB
-
-* nfd-log-level: Set the log level of the NFD running on the node (ex: DEBUG). For finer control,
-nfd.conf or nfd.conf.sample needs to be modified in /usr/local/etc/ndn/
-
-* nlsr-log-level: Set the log level of the NLSR running on the node (ex: DEBUG).
-
- e.g.)
-
- [nodes]
- a: _ cpu=0.3 nfd-log-level=TRACE nlsr-log-level=NONE
- b: app="sample app 1; sampleapp2.sh" cpu=0.3
-
-### The [links] section:
-
-The links section describes the links in the topology.
-
- e.g.)
-
- [links]
- a:b delay=10ms
-
-This would create a link between a and b. 'b:a' would also result in the same.
-The following parameters can be configured for a node:
-
-* delay : Delay parameter is a required parameter which defines the delay of the link (1-1000ms)
-
-* bw : Bandwidth of a link (<1-1000> Mbps)
-
-* loss : Percentage of packet loss (<1-100>)
-
-### Example configuration file
-
- [nodes]
- a: _ cpu=0.3
- b: app="sampleApp1; ./sampleApp2.sh" cpu=0.3
- [links]
- a:b delay=10ms bw=100
-
-Note that `sampleApp1` and `sampleApp2` must be either installed in the system (ex: /usr/bin)
-or an absolute path needs to be given.
-
-See `topologies` for more sample files
diff --git a/docs/CONNECT-TO-OUTSIDE.md b/docs/CONNECT-TO-OUTSIDE.md
deleted file mode 100644
index eb3f5b6..0000000
--- a/docs/CONNECT-TO-OUTSIDE.md
+++ /dev/null
@@ -1,91 +0,0 @@
-Connect Mini-NDN nodes to an outside network
-============================================
-
-Mini-NDN nodes can be connected to an outside network indirectly by running NFD on the local machine:
-
- (Mini-NDN node) ------ (NFD running on the host machine where Mini-NDN is running) ------- (External Network)
-
-## Add a node in root namespace
-
-For this simple example, we use the default topology:
-
- c----a----b----d
-
-If we want node "a" to connect to the host machine, we need to add a "root" node which has a link with node "a."
-
-To do so, we need to add the following import statement at the top of `bin/minindn`:
-
-```python
-from mininet.node import Node
-```
-
-Then the following lines can be added to `bin/minindn` before net.start():
-
-```python
-root = Node( 'root', inNamespace=False )
-net.addLink(root, 'a')
-```
-
-Adding these before net.start() is important as node "root" would then be assigned an IP automatically.
-Re-install Mini-NDN by issuing the following command in the mini-ndn folder:
-
- sudo ./install.sh -i
-
-## Configuration
-
-Run Mini-NDN with the simple topology and issue ifconfig on the local machine to confirm the addition of
-the interface. You should be able to locate "root-eth0":
-
- root-eth0 Link encap:Ethernet HWaddr 3e:eb:77:d2:6f:1f
- inet addr:1.0.0.9 Bcast:1.0.0.11 Mask:255.255.255.252
- inet6 addr: fe80::3ceb:77ff:fed2:6f1f/64 Scope:Link
- UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
- RX packets:34 errors:0 dropped:0 overruns:0 frame:0
- TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
- collisions:0 txqueuelen:1000
- RX bytes:2667 (2.6 KB) TX bytes:2797 (2.7 KB)
-
-To make the IP address associated with this interface persistent, add the following line to
-/etc/network/interfaces and reboot your machine:
-
- iface root-eth0 inet manual
-
-## Check connection
-
-After rebooting, run Mini-NDN and issue the following command:
-
- mini-ndn>net
- a a-eth0:b-eth0 a-eth1:c-eth0 a-eth2:root-eth0
-
-Node "a" is connected to "root-eth0". Now issue "ifconfig a-eth2" on node "a":
-
- mini-ndn>a ifconfig a-eth2
- a-eth2 Link encap:Ethernet HWaddr fa:76:d4:86:d3:ba
- inet addr:1.0.0.10 Bcast:1.0.0.11 Mask:255.255.255.252
-
-As learned from the previous step, the IP address of root-eth0 is 1.0.0.9.
-
- mini-ndn>a ping 1.0.0.9
- PING 1.0.0.9 (1.0.0.9) 56(84) bytes of data.
- 64 bytes from 1.0.0.9: icmp_seq=1 ttl=64 time=0.137 ms
- 64 bytes from 1.0.0.9: icmp_seq=2 ttl=64 time=0.123 ms
-
-The host machine will also be able to ping node "a":
-
- VirtualBox:~$ ping 1.0.0.10
- PING 1.0.0.10 (1.0.0.10) 56(84) bytes of data.
- 64 bytes from 1.0.0.10: icmp_seq=1 ttl=64 time=0.086 ms
-
-## Run NFD on local machine and register route
-
-Start NFD on the local machine by using:
-
- sudo nfd
-
-The "nfd-start" script cannot be used, since the script allows only one instance of NFD at a time.
-The NFD processes running on the Mini-NDN nodes will prevent the "nfd-start" script from working.
-
-Now, using "nfdc register", we can register a route from node "a" in Mini-NDN to the NFD process on the
-host machine and from the host machine to an external machine.
-
-Also, if the local machine has a public IP, Mini-NDN nodes can be reached via external machines.
diff --git a/docs/EXPERIMENTS.md b/docs/EXPERIMENTS.md
deleted file mode 100644
index a2191ac..0000000
--- a/docs/EXPERIMENTS.md
+++ /dev/null
@@ -1,207 +0,0 @@
-Experiments
-===========
-
-Mini-NDN includes an experimentation framework which allows a user to create and automate
-networking experiments. Users can run existing experiments, included with Mini-NDN, or define
-their own custom experiment.
-
-## Running existing experiments
-
-Mini-NDN includes three example experiments that can be used to test the network or as reference
-for custom experiment implementations. `ndn-tools` must be installed to run the example
-experiments as each experiment uses both `ndnpingserver` and `ndnping`. Please see
-[INSTALL.md](../INSTALL.md) for instructions on installing `ndn-tools`.
-
-To see a list of the available experiments, run Mini-NDN using the `--list-experiments` parameter:
-
- minindn --list-experiments
-
-To run an experiment, provide the experiment name as an argument to the `--experiment` parameter:
-
- sudo minindn --experiment=pingall
-
-Each experiment will run until completion or exit if there is an error setting up the
-test environment.
-
-The three included experiments are set up using the same starting
-configuration. Each node runs NFD, NLSR, and an ndnpingserver which advertises the node's
-site name. After a waiting period to allow the network to converge (default is 60 seconds),
-the convergence status of the network is checked. If each node's FIB does not have an entry
-for every other node's router name and advertised prefix, the experiment is aborted and an error
-is reported.
-
-#### Common experiment parameters
-
-The time allowed for convergence (in seconds) can be configured using the `--ctime` parameter:
-
- sudo minindn --ctime=30 ...
-
-After the experiment has finished running, the command-line interface (CLI) will be launched and the
-user can then interact with the test environment. To disable the CLI and instead exit Mini-NDN
-as soon as the experiment has finished, use the `--no-cli` parameter:
-
- sudo minindn --no-cli ...
-
-To ping only a percentage of nodes `--pct-traffic` can be set.
-
- sudo minindn --pct-traffic=0.5 ...
-
-The above command will ping only 50% of other nodes from each node.
-The default value is 1 i.e. ping every other node.
-
-To move the experiment results to a results directory from the working directory
-after the experiment is complete (either --no-cli or quit) the following option
-can be used:
-
- sudo minindn --result-dir /home/mydir/result-dir ...
-
-The included experiments are described in detail below along with additional
-parameters that can be provided to modify the execution of the experiments.
-
-### Pingall experiment
-
-**Scenario**: Each node in the network simultaneously pings every other node in the network at a
-one second interval.
-
-**Experiment ID**: `--pingall`
-
-The number of pings sent in the experiment can be configured using the `--nPings` parameter:
-
- sudo minindn --experiment=pingall --nPings=120
-
-By default, `--nPings` is 300 for the Pingall experiment.
-
-### Failure experiment
-
-**Scenario**: Each node in the network simultaneously pings every other node in the network at a
-one second interval. After 60 seconds, the node with the name "csu" is brought down. The node is
-left in a failed state for 120 seconds while the other nodes continue pinging. After this period,
-the failed node is recovered and pings are collected for an additional 90 seconds.
-
-**Experiment ID**: `--failure`
-
-`--nPings` is 300 for the Failure experiment and cannot be modified.
-
-### Multiple failure experiment
-
-**Scenario**: Each node in the network simultaneously pings every other node in the network at a
-one second interval. After 60 seconds, the first node in the network will be brought down and remain
-in failed state for 60 seconds. After the failure period, the node is recovered and the network
-is allowed to recover for 60 seconds. After the recovery period, the next node will go through this
-failure and recovery process. Once every node in the network has gone through the failure and
-recovery process, the experiment will end.
-
-**Experiment ID**: `--multiple-failure`
-
-`--nPings` is dependent on the size of the topology being tested. 120 pings are scheduled for
-each node's failure/recovery period as well as an additional 60 pings for the initial collection
-period.
-
-### MCN failure experiment
-
-**Scenario**: This is exactly like the failure experiment but instead of failing the node named "csu" it fails the most connected node (MCN) i.e the node with the most links.
-
-Experiment ID: `--mcn-failure`
-
-### Experiment data
-
-The ping data is stored at `/tmp/minindn/node-name/ping-data`.
-
-The ping server log is stored at `/tmp/minindn/node-name/ping-server`
-
-## Creating custom experiments
-
-Mini-NDN provides a simple Python based framework which allows a user to define their own experiment
-and run it from the command line.
-
-To create an experiment, follow these steps:
-
-1. Create a Python source file for the experiment in the `ndn/experiments` directory.
-
- e.g.) `ndn/experiments/example.py`
-
-2. Derive the experiment from the `Experiment` base class defined in
- `ndn/experiments/experiment.py`.
-
- #!/usr/bin/python
-
- from ndn.experiments.experiment import Experiment
-
- class ExampleExperiment(Experiment):
- def __init__(self, args):
- Experiment.__init__(self, args)
-
-3. Override `start()` if the experiments want to override NLSR setup and skip `setup()` and `run()`
-as described below. `start()` is the entry point for an experiment.
-
-4. Override the `setup()` method to define how the experiment should be initialized
-
- e.g.) Run an ndnping server in the background on each node
-
- def setup(self):
- for host in self.net.hosts:
- host.cmd("ndnpingserver host.name &")
-
-
-5. Override the `run()` method to define how the experiment should behave
-
- e.g.) Obtain the NFD status of each node and save it to file
-
- def run(self):
- for host in self.net.hosts:
- host.cmd("nfdc status report > status.txt")
-
-6. Register the experiment with the `ExperimentManager` to make the experiment runnable from the
-command line.
-
- Experiment.register("example-name", ExampleExperiment)
-
-The experiment can then be run from the command-line using the name registered.
-"example-name" in the above example:
-
- sudo minindn --experiment=example-name
-
-### Full example experiment code
-
- #!/usr/bin/python
-
- from ndn.experiments.experiment import Experiment
-
- class ExampleExperiment(Experiment):
- def __init__(self, args):
- Experiment.__init__(self, args)
-
- def setup(self):
- for host in self.net.hosts:
- host.cmd("ndnpingserver host.name &")
-
- def run(self):
- for host in self.net.hosts:
- # By default status.txt would be stored
- # at /tmp/minindn/host/status.txt
- host.cmd("nfdc status report > status.txt")
-
- Experiment.register("example-name", ExampleExperiment)
-
-## Passing arguments to experiments
-
-Mini-NDN has the capacity to pass arguments to experiments, insofar
-as they do not clash with those of Mini-NDN. This feature
-allows users to pass arguments to Mini-NDN and process them in an
-experiment without having to rewrite Mini-NDN's core.
-
-An example of an experiment implementing this functionality is given in
-`ndn/experiments/arguments_experiment.py`, which demonstrates how to
-write code which handles arguments. Documentation for these arguments
-appears when called with `sudo minindn -h`, as does documentation for
-fixed arguments defined in core code, so it is strongly recommended to
-differentiate those you write yourself. Note that Bash and Zsh users
-can make use of autocomplete functionality when calling these arguments.
-
-To run the experiment:
-
- sudo minindn --experiment arg-exp --ds 226 --logging
-
-The experiment will print out the supplied value for --ds and a boolean
-value for the presence of --logging. --experiment is a fixed argument of
-Mini-NDN.
\ No newline at end of file
diff --git a/docs/GETTING-STARTED.md b/docs/GETTING-STARTED.md
deleted file mode 100644
index d15e95f..0000000
--- a/docs/GETTING-STARTED.md
+++ /dev/null
@@ -1,115 +0,0 @@
-Getting Started
-===============
-
-## Installation
-Please see [INSTALL.md](../INSTALL.md) for instructions on installing Mini-NDN and its dependencies.
-
-## Running Mini-NDN
-
-To run Mini-NDN with the default topology, `ndn_utils/topologies/default-topology.conf`, type:
-
- sudo minindn
-
-A full list of options can be printed by using:
-
- sudo minindn --help
-
-To run Mini-NDN with a topology file, provide the filename as the first argument:
-
- sudo minindn my-topology.conf
-
-During set up, the list of nodes in the network will be listed as they are initialized:
-
- *** Adding hosts:
- a b c d
-
-After set up, the command-line interface (CLI) will display a prompt.
-
- mini-ndn>
-
-To interact with a node, first type the node's name and then the command to be executed:
-
- mini-ndn> a echo "Hello, world!"
- Hello, world!
-
-To see the status of the forwarder on the node:
-
- mini-ndn> a nfdc status report
-
-To see the status of routing on the node:
-
- mini-ndn> a nlsrc status
-
-To exit Mini-NDN, type `quit` in the CLI:
-
- mini-ndn> quit
-
-Another option to quit Mini-NDN is sending a SIGQUIT (ctrl+\). SIGINT (ctrl+c)
-is reserved for the purpose of stopping applications initiated on the minindn command
-line.
-
-For a more in depth explanation of the CLI, please see the
-[Mininet Walkthrough](http://mininet.org/walkthrough/).
-
-## Command-line options
-
-To run Mini-NDN with a replica of the NDN testbed, use the `--testbed` parameter:
-
- sudo minindn --testbed
-
-To change the working directory from default `/tmp/minindn` following option can be used:
-
- sudo minindn --work-dir /home/mydir/test
-
-Autocomplete of command-line options is available for users of Bash and Zsh.
-
-#### Routing options
-
-To run minindn without NLSR, use the `--no-nlsr` parameter:
-
- sudo minindn --no-nlsr
-
-To run NLSR with hyperbolic routing enabled, use the `--routing` parameter:
-
- sudo minindn --routing hr
-
-Topology files given under ndn_utils/topologies/minindn* have hyperbolic coordinates configured
-and can be used with this option.
-
-To run NLSR in dry-run mode, use the `--routing` parameter:
-
- sudo minindn --routing dry
-
-To configure the max number of faces added by NLSR to reach each name prefix, use the `--faces`
-parameter:
-
- sudo minindn --faces 3
-
-`--faces` can be an integer from 0 to 60; 0 indicates NLSR can add all available faces.
-
-To run Mini-NDN with NLSR security configured
-
- sudo minindn --nlsr-security
-
-## Working Directory Structure
-
-Currently Mini-NDN uses /tmp/minindn as the working directory if not specified otherwise by using
-the option --work-dir.
-
-Each node is given a HOME directory under /tmp/minindn/node-name
-where node-name is the name of the node specified in the [nodes] section of the conf file.
-
-### NFD
-NFD conf file is stored at `/tmp/minindn/node-name/node-name.conf`
-
-NFD log file is stored at `/tmp/minindn/node-name/node-name.log`
-
-`.ndn` folder is stored at `/tmp/minindn/node-name/.ndn`
-
-### NLSR
-NLSR conf file is stored at `/tmp/minindn/node-name/nlsr.conf`
-
-NLSR log file is stored at `/tmp/minindn/node-name/log/nlsr.log`
-
-When security is enabled, NLSR security certificates are stored in: `/tmp/minindn/node-name/security`
-Note that no NLSR publishes the root certificate, Mini-NDN installs root.cert in security folder for each NLSR.
diff --git a/docs/GUI.md b/docs/GUI.md
deleted file mode 100644
index b190eeb..0000000
--- a/docs/GUI.md
+++ /dev/null
@@ -1,81 +0,0 @@
-Mini-NDN Edit
-=============
-
-Mini-NDN Edit is a GUI program designed to simplify the creation of Mini-NDN topology
-configuration files. Mini-NDN Edit allows the user to build a topology, configure the hosts and
-links, and generate a topology file that can be used by Mini-NDN.
-
-
-
-## Working with topology files
-
-#### File formats
-
-There are two file formats used by Mini-NDN edit.
-
-* `.mnndn` files store topology information used by the GUI. Mini-NDN Edit can open and
-save `.mnndn` files.
-
-* `.conf` files are used by Mini-NDN to create and run topologies. Mini-NDN Edit can generate a
-`.conf` file from a `.mnndn` file. Mini-NDN edit cannot open `.conf` files. Please see
-[CONFIG-FILE.md](CONFIG.md) for more information on the content and format of `.conf` files.
-
-#### File menu
-
-
-
-* **New** - Erase the current canvas and provide a new empty topology
-* **Open** - Open a `.mnndn` topology file
-* **Save** - Save the current topology as a `.mnndn` topology file
-* **Generate** - Convert the current topology to a `.conf` file runnable by Mini-NDN
-* **Run** - Run the current topology in Mini-NDN. The GUI will disappear and Mini-NDN will run on
- the command-line.
-* **Quit** - Exit Mini-NDN edit
-
-## Tools
-
-### Cursor tool
-
-
-The *cursor tool* is used to select and move nodes in the topology. A selected node or link can be
-removed from the topology using the `backspace` key or by selecting `edit/cut`.
-
-### Host tool
-
-
-The *host tool* is used to add a host node to the topology. Click on the canvas to create a new host
-node at the mouse cursor's position.
-
-### Switch tool
-
-
-The *switch tool* is used to add a switch to the topology. Click on the canvas to create a new
-switch at the mouse cursor's position.
-
-### Link tool
-
-
-The *link tool* is used to connect two nodes with a network link. Click on a node and drag the mouse
-cursor to another node to create a link between the two nodes.
-
-## Configuration
-
-#### Editing host information
-
-To edit a host's information and configuration, right-click on the desired node and select
-`Host Options`.
-
-The *Host Options* window will include tabs to modify the node's properties as well as the
-configuration files for NFD and NLSR on that node.
-
-*Note: Network, Site, and Router in the NLSR tab are unused in v0.1.0*
-
-
-
-#### Editing link configuration
-
-To edit a link's configuration, right-click on the desired link and select `Link Options`.
-
-The *Link Options* window will allow configuration of the link's bandwidth, delay, and loss rate.
-
-
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000..d4bb2cb
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = .
+BUILDDIR = _build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/RELEASE-NOTES.md b/docs/RELEASE-NOTES.md
deleted file mode 100644
index 9a825d7..0000000
--- a/docs/RELEASE-NOTES.md
+++ /dev/null
@@ -1,176 +0,0 @@
-Release Notes
-=============
-
-Mini-NDN version 0.4.0 (changes since version 0.3.0)
-----------------------------------------------------
-
-Release date: January 10, 2018
-
-**New features**:
-
-- Use SIGQUIT to quit Mini-NDN, SIGINT to kill programs
-
-- Use Infoedit to edit NFD and NLSR configuration files
-
-- Use nlsr.conf installed in the system
-
-- Provide a Vagrantfile to setup Mini-NDN and NDN
-
-- Provide option to disable NLSR
-
-- Provide an option to run NLSR in dry-run mode
-
-- Add option to specify whether to use TCP or UDP face in nlsr.conf
-
-- Add option to specify arbitrary arguments to use in experiments
-
-- Include a single option to install Mini-NDN and all the dependencies
-
-**Bug fixes**:
-
-- Fix "key does not exist error" after NLSR starts
-
-- Update install.sh to call ldconfig after installing ChronoSync
-
-- Add hyperbolic coordinates to default topology
-
-**Misc changes**:
-
-- Add an experiment to test nlsrc
-
-- Create faces in NFD for each neighbor in NLSR
-
-- Update to latest ndn-cxx
-
-- Use /tmp/minindn folder as default work dir instead of /tmp
-
-Mini-NDN version 0.3.0 (changes since version 0.2.0)
-----------------------------------------------------
-
-Release date: March 3, 2017
-
-**New features**:
-
-- Mini-NDN cluster edition
-
-- New experiments for making NLSR testing easier
-
-**Bug fixes**:
-
-- Set site name correctly
-
-- Install missing certificates in NLSR security config
-
-- Fix quitting of NLSR due to key not found error
-
-**Misc changes**:
-
-- Removed nlsr.conf file, generate it within the code
-
-- Use argparse instead of deprecated optparse
-
-- Update security config section for NLSR
-
-- Change mininet prompt to mini-ndn
-
-- Set network name at one place
-
-- Update install.sh script to install openssl
-
-- Update install.sh script to install cryptopp from package instead of compiling from source
-
-- Update install.sh to clean build folder every time to get rid of removed files such as old experiments
-
-- Fix old code - use net.hosts instead of storing hosts in a variable
-
-- Use nfdc instead of deprecated nfd-status
-
-Mini-NDN version 0.2.0 (changes since version 0.1.1)
-----------------------------------------
-
-Release date: August 18, 2016
-
-**New features**:
-
-- Automatic security configuration for NLSR
-
-- Use /usr/local/etc/ndn/nfd.conf as default config file for NFD
-
-- Class to monitor /proc/$PID/stat file for PID
-
-- Mini-NDN exits gracefully on SIGINT and non-convergence
-
-- Faster Mini-NDN install script - does not do apt-get update everytime
-
-- NLSR is launched with explicit config file for easier process identification
-
-- Add and update more documentation
-
-**Bug fixes**:
-
-- NFD is killed correctly on exit
-
-- Best route strategy is set correctly
-
-Mini-NDN version 0.1.1 (changes since version 0.1.0)
-----------------------------------------
-
-Release date: November 4, 2015
-
-**New features**:
-
-- Use nfd.conf.sample from currently installed NFD
-
-- Add working directory option to allow execution environment outside of /tmp
-
-- Add results directory option to store experiment results after completion
-
-- Add support for switches in GUI and configuration file
-
-- Add failNode and recoverNode methods to Experiment class
-
-- Add most connected node (MCN) failure experiment
-
-- Add option to specify percentage of nodes pinged
-
-**Code changes**:
-
-- Refactor program options into container class
-
-- Remove unused "FIB Entries" option from NDN host options
-
-**Bug fixes**:
-
-- Abort start up if experiment name is invalid
-
-- Restart pings after recovery in failure experiment
-
-Mini-NDN version 0.1.0 (initial release)
-----------------------------------------
-
-Release date: July 15, 2015
-
-Mini-NDN is a lightweight networking emulation tool that enables testing, experimentation, and
-research on the NDN platform. Based on Mininet, Mini-NDN uses the NDN libraries, NFD, NLSR, and
-tools released by the [NDN project](http://named-data.net/codebase/platform/) to emulate
-an NDN network on a single system.
-
-**Included features**:
-
-- Run a complete NDN network on a single system
-
-- Automatic configuration of NLSR to provide a routable NDN network
-
-- Supports user created NDN applications
-
-- Create a topology using the included Mini-NDN Edit GUI application
-
-- Allows individual configuration of NFD and NLSR parameters for each node
-
-- Provides an experiment management framework for easy creation of custom networking experiments
-
-- Uses a simple topology file format to define hosts, links, and configuration values
-
-- Configure network link parameters including bandwidth, delay, and loss rate
-
-- Includes a pre-configured topology file to replicate the NDN testbed
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000..54591c1
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,56 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# 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.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+from datetime import datetime
+from minindn import __version__
+
+# -- Project information -----------------------------------------------------
+
+project = 'Mini-NDN'
+copyright = '2015-{}, Mini-NDN. This research is partially supported by NSF.'.format(datetime.now().year)
+author = 'Mini-NDN'
+
+# The full version, including alpha/beta/rc tags
+release = __version__
+version = __version__
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'sphinx_rtd_theme'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
\ No newline at end of file
diff --git a/docs/experiment.rst b/docs/experiment.rst
new file mode 100644
index 0000000..58cc303
--- /dev/null
+++ b/docs/experiment.rst
@@ -0,0 +1,235 @@
+Experiment
+==========
+
+Configuration
+-------------
+
+Mini-NDN uses a configuration file describing the topology and its parameters to setup a network.
+
+The [nodes] section:
+
+At the bare minimum, the node section describes the nodes present in the
+topology.
+
+::
+
+ [nodes]
+ a: key1=value1 key2=value2
+ b: key1=value1
+
+Any key and value passed here is accessible in Mini-NDN as:
+
+::
+
+ ndn = Minindn(...)
+ value = ndn.net.hosts[0].params['params'].get('key1', "defaultValue")
+
+One can specify log levels for each node's NFD and NLSR using this key-value system:
+
+::
+
+ [nodes]
+ a: nfd-log-level=DEBUG nlsr-log-level=DEBUG
+ b: nfd-log-level=INFO
+
+To specify a log level for certain modules of NFD, the following line can be added to `nfd.py`:
+
+::
+
+ node.cmd('infoedit -f {} -s log.Forwarder -v {}'.format(self.confFile, 'INFO'))
+
+This will turn on FORWARDER logging to INFO for all nodes.
+
+.. Todo: Add switch section
+
+The [links] section:
+
+The links section describes the links in the topology.
+
+::
+
+ e.g.)
+
+ [links]
+ a:b delay=10ms
+
+This would create a link between a and b. 'b:a' would also result in the
+same. The following parameters can be configured for a node:
+
+- delay : Delay parameter is a required parameter which defines the
+ delay of the link (1-1000ms)
+
+- bw : Bandwidth of a link (<1-1000> Mbps)
+
+- loss : Percentage of packet loss (<1-100>)
+
+Example configuration file
+
+::
+
+ [nodes]
+ a:
+ b:
+ [links]
+ a:b delay=10ms bw=100
+
+See ``ndn_utils/topologies`` for more sample files
+
+Sample
+------
+
+Sample experiment may written as follows:
+
+.. code:: python
+
+ from mininet.log import setLogLevel, info
+
+ from minindn.minindn import Minindn
+ from minindn.util import MiniNDNCLI
+ from minindn.apps.appmanager import AppManager
+ from minindn.apps.nfd import Nfd
+ from minindn.apps.nlsr import Nlsr
+ from minindn.helpers.routing_helper import IPRoutingHelper
+
+ if __name__ == '__main__':
+ setLogLevel('info')
+
+ Minindn.cleanUp()
+ Minindn.verifyDependencies()
+
+ # Can pass a custom parser, custom topology, or any Mininet params here
+ ndn = Minindn()
+
+ ndn.start()
+
+ # IP reachability if needed
+ # IPRoutingHelper.calcAllRoutes(ndn.net)
+ # info("IP routes configured, start ping\n")
+ # ndn.net.pingAll()
+
+ # Start apps with AppManager which registers a clean up function with ndn
+ info('Starting NFD on nodes\n')
+ nfds = AppManager(ndn, ndn.net.hosts, Nfd)
+ info('Starting NLSR on nodes\n')
+ nlsrs = AppManager(ndn, ndn.net.hosts, Nlsr)
+
+ # or can not start NLSRs with some delay in between:
+ # nlsrs = AppManager(ndn, ndn.net.hosts, Nlsr)
+ # for host in ndn.net.hosts:
+ # nlsrs.startOnNode(host)
+ # time.sleep(30)
+
+ MiniNDNCLI(ndn.net)
+
+ # Calls the clean up functions registered via AppManager
+ ndn.stop()
+
+Users may look at how the NFD and NLSR applications are written as a sub class of Application
+in the ``minindn/apps`` folder. Or users may choose to directly run their application on nodes
+such as ndnpingserver is run in ``minindn/helpers/experiment.py``.
+
+Execution
+---------
+
+To run Mini-NDN with the default topology,
+``ndn_utils/topologies/default-topology.conf``, type:
+
+::
+
+ sudo python examples/minindn.py
+
+To run Mini-NDN with a topology file, provide the filename as the first
+argument:
+
+::
+
+ sudo python examples/minindn.py my-topology.conf
+
+After Mini-NDN is installed, users can run examples from anywhere with python directly as follows:
+
+::
+
+ sudo python /path/to/myexample.py
+
+The user no longer needs to create an experiment in the old Mini-NDN way, then install it to the system before executing it via the minindn binary. The new examples can be separate from the Mini-NDN folder if the core is not being modified.
+
+CLI Interface
+_____________
+
+During set up, the list of nodes in the network will be listed as they
+are initialized:
+
+::
+
+ *** Adding hosts:
+ a b c d
+
+After set up, the command-line interface (CLI) will display a prompt.
+
+::
+
+ mini-ndn>
+
+To interact with a node, first type the node's name and then the command
+to be executed:
+
+::
+
+ mini-ndn> a echo "Hello, world!"
+ Hello, world!
+
+To see the status of the forwarder on the node:
+
+::
+
+ mini-ndn> a nfdc status report
+
+To see the status of routing on the node:
+
+::
+
+ mini-ndn> a nlsrc status
+
+To exit Mini-NDN, type ``quit`` in the CLI or use ``ctrl + D``:
+
+::
+
+ mini-ndn> quit
+
+``Ctrl + C`` is used to quit an application run in the foreground of the command line.
+
+For a more in depth explanation of the CLI, please see the `Mininet
+Walkthrough <http://mininet.org/walkthrough/>`__.
+
+To run NDN commands from the outside the command line user can also open a new terminal
+and export the HOME folder of a node ``export HOME=/tmp/minindn/a && cd ~``
+
+Working Directory Structure
+---------------------------
+
+Currently Mini-NDN uses /tmp/minindn as the working directory if not
+specified otherwise by using the option --work-dir.
+
+Each node is given a HOME directory under /tmp/minindn/<node-name> where
+<node-name> is the name of the node specified in the [nodes] section of
+the conf file.
+
+NFD
+___
+
+- NFD conf file is stored at ``/tmp/minindn/<node-name>/nfd.conf``
+
+- NFD log file is stored at ``/tmp/minindn/<node-name>/log/nfd.log``
+
+- ``.ndn`` folder is stored at ``/tmp/minindn/<node-name>/.ndn``
+
+NLSR
+____
+
+- NLSR conf file is stored at ``/tmp/minindn/<node-name>/nlsr.conf``
+- NLSR log file is stored at ``/tmp/minindn/<node-name>/log/nlsr.log``
+
+When security is enabled, NLSR security certificates are stored in:
+``/tmp/minindn/<node-name>/security`` Note that no NLSR publishes the root
+certificate, Mini-NDN installs root.cert in security folder for each
+NLSR.
diff --git a/docs/faq.rst b/docs/faq.rst
new file mode 100644
index 0000000..991dd06
--- /dev/null
+++ b/docs/faq.rst
@@ -0,0 +1,48 @@
+FAQ
+=========
+
+* ``How does Mini-NDN work?``
+
+Mini-NDN's principles of operation most heavily rely on the underlying Mininet code it relies on.
+Mininet uses a combination of limited containerization via network namespaces (which give processes
+isolated interfaces and routing tables) and emulated ethernet connections via veth connections.
+In practical terms, Mini-NDN ensures that processes running on distinct nodes will run seperately
+and without interfering with each other.
+
+* ``How does Mini-NDN apply link loss/delay/etc.?``
+
+Mini-NDN relies on Mininet's code, which in turn uses the Linux tc utility on a stations' virtualized
+interfaces to apply configurations known as qdiscs to these links. Note that these will only be applied
+on egress packets from a station where it's applied.
+For more information on qdiscs and tc, view the information `here <http://wiki.linuxwall.info/doku.php/en%3aressources%3adossiers%3anetworking%3atraffic_control>`_.
+
+* ``Why use Mini-NDN rather than a simulator such as ndnSIM?``
+
+Mini-NDN is easier and faster to use because, rather than serving as a mathematical model of a network,
+it is instead running real NDN code on a real Linux kernel. This also means it's quite useful for testing code changes, as it can more accurately test the interaction of software componenents.
+
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Criteria | Mini-NDN | ndnSIM |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Based On | Mininet | ns-3 |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Language | Python | C++ |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Library/Forwarder/Applications | Use system binaries (free to use any compatible versions) | Integrated (fixed release version) |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Application language | C++ (ndn-cxx), CCL (ndn-cpp, PyNDN, ndn-js, jNDN) | C++ (ndn-cxx) |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Simulation size | Medium - Large (cluster edition in development) | Large (can be parallelized using MPI) |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Simulation time | Real time | Quick (depending on size/memory) |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Porting real applications | Drop in | Changes required |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Interactivity | Can interact directly with NFD, NLSR or Apps | Can show stats while running |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Logs | May need to manually setup to collect | Available with tracer |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Post processing scripts | Not available, users need to write their own | Available to use to process the logs |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
+| Other | Not yet supported (Wifi in development) | WiFi, LTE, etc available from ns-3 |
++--------------------------------+-----------------------------------------------------------+-----------------------------------------+
diff --git a/docs/hackathon.rst b/docs/hackathon.rst
new file mode 100644
index 0000000..e51ec74
--- /dev/null
+++ b/docs/hackathon.rst
@@ -0,0 +1,9 @@
+Past NDN Hackathon projects
+===========================
+
+- 1st NDN Hackathon: `NFD integration test <http://ndncomm.github.io/mini-ndn/>`_.
+- 2st NDN Hackathon: `Mini-NDN metrics <https://github.com/2nd-ndn-hackathon/mini-ndn-metrics>`_.
+- 3rd NDN Hackathon: `Mini-NDN cluster <https://github.com/3rd-ndn-hackathon/mini-NDN-cluster>`_.
+- 4th NDN Hackathon: `Mini-NDN wifi <https://github.com/4th-ndn-hackathon/Mini-NDN-Wi-Fi>`_.
+- 7th NDN Hackathon: `Mini-NDN documentation <https://github.com/7th-ndn-hackathon/mini-ndn-documentation>`_.
+
diff --git a/docs/howtos.rst b/docs/howtos.rst
new file mode 100644
index 0000000..b95bde3
--- /dev/null
+++ b/docs/howtos.rst
@@ -0,0 +1,115 @@
+Howtos
+======
+
+Connect Mini-NDN nodes to an outside network
+---------------------------------------------
+
+Mini-NDN nodes can be connected to an outside network indirectly by
+running NFD on the local machine:
+
+::
+
+ (Mini-NDN node) ------ (NFD running on the host machine where Mini-NDN is running) ------- (External Network)
+
+Add a node in root namespace
+____________________________
+
+For this simple example, we can use a single node topology with node 'a'
+
+If we want node 'a' to connect to the host machine, we need to add a
+"root" node which has a link with node "a."
+
+Then the following code can be used:
+
+.. code:: python
+
+ topo = Topo()
+ root = topo.addHost('root', inNamespace=False)
+ a = topo.addHost('a')
+ topo.addLink(root, a, delay='10ms')
+
+ ndn = Minindn(topo=topo)
+
+ ...
+
+Configuration
+_____________
+
+Run Mini-NDN with the above code and issue ifconfig on the local
+machine to confirm the addition of the interface. You should be able to
+locate "root-eth0":
+
+::
+
+ root-eth0 Link encap:Ethernet HWaddr 3e:eb:77:d2:6f:1f
+ inet addr:1.0.0.9 Bcast:1.0.0.11 Mask:255.255.255.252
+ inet6 addr: fe80::3ceb:77ff:fed2:6f1f/64 Scope:Link
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
+ RX packets:34 errors:0 dropped:0 overruns:0 frame:0
+ TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
+ collisions:0 txqueuelen:1000
+ RX bytes:2667 (2.6 KB) TX bytes:2797 (2.7 KB)
+
+To make the IP address associated with this interface persistent, add
+the following line to /etc/network/interfaces and reboot your machine:
+
+::
+
+ iface root-eth0 inet manual
+
+Check connection
+________________
+
+After rebooting, run Mini-NDN and issue the following command:
+
+::
+
+ mini-ndn>net
+ a a-eth0:b-eth0 a-eth1:c-eth0 a-eth2:root-eth0
+
+Node "a" is connected to "root-eth0". Now issue "ifconfig a-eth2" on
+node "a":
+
+::
+
+ mini-ndn>a ifconfig a-eth2
+ a-eth2 Link encap:Ethernet HWaddr fa:76:d4:86:d3:ba
+ inet addr:1.0.0.10 Bcast:1.0.0.11 Mask:255.255.255.252
+
+As learned from the previous step, the IP address of root-eth0 is
+1.0.0.9.
+
+::
+
+ mini-ndn>a ping 1.0.0.9
+ PING 1.0.0.9 (1.0.0.9) 56(84) bytes of data.
+ 64 bytes from 1.0.0.9: icmp_seq=1 ttl=64 time=0.137 ms
+ 64 bytes from 1.0.0.9: icmp_seq=2 ttl=64 time=0.123 ms
+
+The host machine will also be able to ping node "a":
+
+::
+
+ VirtualBox:~$ ping 1.0.0.10
+ PING 1.0.0.10 (1.0.0.10) 56(84) bytes of data.
+ 64 bytes from 1.0.0.10: icmp_seq=1 ttl=64 time=0.086 ms
+
+Run NFD on local machine and register route
+___________________________________________
+
+Start NFD on the local machine by using:
+
+::
+
+ sudo nfd
+
+The "nfd-start" script cannot be used, since the script allows only one
+instance of NFD at a time. The NFD processes running on the Mini-NDN
+nodes will prevent the "nfd-start" script from working.
+
+Now, using "nfdc register", we can register a route from node "a" in
+Mini-NDN to the NFD process on the host machine and from the host
+machine to an external machine.
+
+Also, if the local machine has a public IP, Mini-NDN nodes can be
+reached via external machines.
diff --git a/docs/img/gui/cursor-tool.png b/docs/img/gui/cursor-tool.png
deleted file mode 100644
index 6d53812..0000000
--- a/docs/img/gui/cursor-tool.png
+++ /dev/null
Binary files differ
diff --git a/docs/img/gui/file-dropdown.png b/docs/img/gui/file-dropdown.png
deleted file mode 100644
index 9e0354c..0000000
--- a/docs/img/gui/file-dropdown.png
+++ /dev/null
Binary files differ
diff --git a/docs/img/gui/host-config.png b/docs/img/gui/host-config.png
deleted file mode 100644
index 5cd79a8..0000000
--- a/docs/img/gui/host-config.png
+++ /dev/null
Binary files differ
diff --git a/docs/img/gui/host-tool.png b/docs/img/gui/host-tool.png
deleted file mode 100644
index 4f54d53..0000000
--- a/docs/img/gui/host-tool.png
+++ /dev/null
Binary files differ
diff --git a/docs/img/gui/link-details.png b/docs/img/gui/link-details.png
deleted file mode 100644
index 99e2449..0000000
--- a/docs/img/gui/link-details.png
+++ /dev/null
Binary files differ
diff --git a/docs/img/gui/link-tool.png b/docs/img/gui/link-tool.png
deleted file mode 100644
index 7772ecf..0000000
--- a/docs/img/gui/link-tool.png
+++ /dev/null
Binary files differ
diff --git a/docs/img/gui/minindnedit.png b/docs/img/gui/minindnedit.png
deleted file mode 100644
index 0fe6879..0000000
--- a/docs/img/gui/minindnedit.png
+++ /dev/null
Binary files differ
diff --git a/docs/img/gui/switch-tool.png b/docs/img/gui/switch-tool.png
deleted file mode 100644
index 919b11d..0000000
--- a/docs/img/gui/switch-tool.png
+++ /dev/null
Binary files differ
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 0000000..d7d8f01
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,29 @@
+.. Mini-NDN documentation master file, created by
+ sphinx-quickstart on Mon Sep 23 11:15:54 2019.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Mini-NDN: A Mininet-based NDN emulator
+======================================
+
+.. toctree::
+ :maxdepth: 2
+ :caption: Contents
+
+ introduction
+ install
+ experiment
+ howtos
+ release-notes
+ faq
+ hackathon
+ videos
+
+Helpful Links
+-------------
+
+* `NDN Website <http://named-data.net/>`_
+* `NDN Contributor's Guide <https://github.com/named-data/NFD/blob/master/CONTRIBUTING.md>`_
+* `Mininet Documentation <http://mininet.org/>`_
+* `Mini-NDN redmine <https://redmine.named-data.net/projects/mini-ndn>`_
+* `Mailing list <http://www.lists.cs.ucla.edu/mailman/listinfo/mini-ndn>`_
diff --git a/docs/install.rst b/docs/install.rst
new file mode 100644
index 0000000..391fdfa
--- /dev/null
+++ b/docs/install.rst
@@ -0,0 +1,174 @@
+Install
+=======
+
+Prerequisites
+-------------
+
+For this guide, you will need a laptop/desktop with a recent version of
+a Linux distro that is supported by Mininet. For this guide, the *Ubuntu 18.04 LTS* release was used.
+Some tweaks maybe required to Mini-NDN's install.sh file for other distros.
+Note that you'll need administrative privileges in order to download and install
+extra packages and also to execute **Mini-NDN**.
+
+Using Vagrantfile
+-----------------
+
+With Vagrant installed, simply do ``vagrant up`` which will bring up an Ubuntu 18.04 virtual machine
+and install Mini-NDN and all its dependencies on it. Please make sure to tweak the CPU core count
+(default 4 cores) and RAM (default 4GB) according to your needs before doing vagrant up. Mini-NDN
+can be found in /home/vagrant/mini-ndn which is a symlink to /vagrant if Vagrantfile was used from within mini-ndn cloned on the host. Otherwise it is an actual clone of mini-ndn.
+
+Using install.sh
+----------------
+
+Mini-NDN depends on Mininet and NDN software to be installed in the system.
+If you have all the dependencies (see sections below) **installed in the system** simply
+clone this repository and run:
+
+::
+
+ ./install.sh -i
+
+The ``-i`` option uses ``setup.py develop`` to point the system install
+to the current directory. So any changes made to the cloned ``mini-ndn``
+folder will be used without having to install it again to the system.
+If you do not need to modify the core of Mini-NDN, then setup.py install (or pip install .)
+can be used directly. See :doc:`experiment <experiment>` for more information on running.
+
+If you don't have the dependencies, the following command will
+install them from source along with Mini-NDN. The dependencies include
+Mininet, NDN core (ndn-cxx, NFD, Chronosync, PSync, NLSR), Infoedit,
+and NDN Common Client Libraries (CCL). If you do not wish to install
+the master versions of the NDN core or want to switch to specific versions,
+you can edit the install.sh with release tags/specific versions.
+
+.. _scaling-note:
+.. important::
+ If you wish to scale Mini-NDN experiments and do not have use for security extensions
+ in your emulations, you should apply the ndn-cxx patch given in the ``patches`` folder
+ using ``./install.sh -p`` before running the following commands. The ndn-cxx patch is
+ taken from ndnSIM which provides an in-memory dummy KeyChain to reduce CPU computations.
+ After these patches are applied sleep time after NFD, nfdc, NLSR, etc. is not required
+ making the startup **MUCH** faster and scaling of Mini-NDN **MUCH** better.
+
+::
+
+ ./install.sh -a
+
+This pulls the NDN software from Github to ``ndn-src`` folder under the project.
+
+.. note::
+ If any changes are made to ``ndn-src`` folder, please don't forgot to re-install
+ the sources to the system.
+
+To install without CCL, use:
+
+::
+
+ ./install.sh -mni
+
+See ``install.sh -h`` for detailed options.
+
+Installing Dependencies
+-----------------------
+
+Mininet
+_______
+
+Mini-NDN is based on Mininet. To install Mininet:
+
+::
+
+ git clone --depth 1 https://github.com/mininet/mininet.git
+
+After Mininet source is on your system, run the following command to
+install Mininet core dependencies and Open vSwitch:
+
+::
+
+ ./util/install.sh -nv
+
+To check if Mininet is working correctly, run this test:
+
+::
+
+ sudo mn --test pingall
+
+This will print out a series of statements that show the test setup and
+the results of the test. Look for ``Results:`` two-thirds of the way
+down where it will indicate the percentage of dropped packets. Your
+results should show "0% dropped (2/2 received)".
+
+NOTE: Mini-NDN, while providing a high level of emulation of hosts,
+requires programs to be installed onto your computer. It will not work
+if they are not installed. If you do not want NDN software installed
+onto your computer, you can use a virtual machine, which can be quite
+simply set up with the provided Vagrantfile.
+
+NDN dependencies
+________________
+
+Each node in Mini-NDN will run the official implementation of NDN
+installed on your system. The following dependencies are needed:
+
+Mini-NDN uses NFD, NLSR, and ndn-tools.
+
+- To install NFD: https://named-data.net/doc/NFD/current/INSTALL.html
+- To install NLSR: https://named-data.net/doc/NLSR/current/INSTALL.html
+- To install ndn-tools: https://github.com/named-data/ndn-tools
+
+.. warning::
+ Please do not try to install NDN software from both the source (GitHub) and PPA (apt).
+ It will not work in most cases! If you used ./install.sh -a in the past but now want
+ to use apt, please run ``sudo ./waf uninstall`` in all the NDN projects before proceeding
+ with apt. Similarly, remove from apt if switching to source.
+
+Please see the :ref:`scaling-note <scaling-note>` to learn about disabling
+security for better scalability.
+
+Note that all three of these can be installed from the Named Data PPA.
+Instructions for setting it up can be found in the NFD installation
+instructions. Note that PPA and installs from source **cannot** be
+mixed. You must completely remove PPA installs from the system if switching
+to source and vice-versa.
+
+For PPA installs, if you are using a custom nfd.conf file in an experiment, you should
+place it in /usr/local/etc/ndn/ rather than /etc/ndn/. This is to avoid
+a bug from the default configuration file for the PPA, which is
+incompatible with Mini-NDN.
+
+Infoedit
+________
+
+Infoedit is used to edit configuration files for NFD and NLSR.
+To install infoedit:
+
+::
+
+ git clone --depth 1 https://github.com/NDN-Routing/infoedit
+ cd infoedit
+ make
+ sudo make install
+
+Verification
+------------
+
+You can execute the following example to bring up the Mini-NDN command line
+with NFD and NLSR running on each node:
+
+::
+
+ sudo python examples/mnndn.py
+
+You can use these steps to run the sample pingall experiment:
+
+1. Issue the command: ``sudo python examples/nlsr/pingall.py``
+2. When the ``mini-ndn>`` CLI prompt appears, the experiment has
+ finished. On the Mini-NDN CLI, issue the command ``exit`` to exit the
+ experiment.
+3. Issue the command:
+ ``grep -c content /tmp/minindn/*/ping-data/*.txt``. Each file should
+ report a count of 50.
+4. Issue the command:
+ ``grep -c timeout /tmp/minindn/*/ping-data/*.txt``. Each file should
+ report a count of 0.
diff --git a/docs/introduction.rst b/docs/introduction.rst
new file mode 100644
index 0000000..fe19ad8
--- /dev/null
+++ b/docs/introduction.rst
@@ -0,0 +1,40 @@
+Introduction
+=================
+
+If you are new to the NDN community of software generally, read the
+`Contributor's Guide <https://github.com/named-data/NFD/blob/master/CONTRIBUTING.md>`_.
+
+What is Mini-NDN?
+-----------------
+
+Mini-NDN is a lightweight networking emulation tool that enables testing, experimentation, and
+research on the NDN platform. It was initially based on `Mini-CCNx <https://github.com/chesteve/mn-ccnx>`_ which was a fork of `Mininet <https://github.com/mininet/mininet>`_. Mini-NDN uses the NDN libraries, NFD, NLSR, and tools released by the `NDN project <http://named-data.net/codebase/platform/>`_ to emulate an NDN network on a single system.
+
+The first release of Mini-NDN is developed by members of the NSF-sponsored NDN project team.
+Mini-NDN is open to contribution from the public.
+
+.. image:: minindnnet.svg
+
+License
+_______
+
+Mini-NDN is open and free software licensed under the GPL 3.0 license. Mini-NDN is free to all
+users and developers. For more information about licensing details and limitations,
+please refer to COPYING.md.
+
+Feedback/Mailing List
+_____________________
+
+Bug reports and feedback are highly appreciated and can be made through our
+`Redmine site <http://redmine.named-data.net/projects/mini-ndn>`_ and the
+`mini-ndn mailing list <http://www.lists.cs.ucla.edu/mailman/listinfo/mini-ndn>`_.
+
+Video
+_____
+
+.. raw:: html
+
+ <div id="video-container" class="col-md-6 ">
+ <p>Mini-NDN (content maybe outdated)</p>
+ <iframe width="600" height="345" src="https://www.youtube.com/embed/UxHPqaUwefg" frameborder="0" allowfullscreen=""></iframe>
+ </div>
\ No newline at end of file
diff --git a/docs/minindnnet.svg b/docs/minindnnet.svg
new file mode 100644
index 0000000..0bc985a
--- /dev/null
+++ b/docs/minindnnet.svg
@@ -0,0 +1,126 @@
+<svg width="692" height="380" xmlns="http://www.w3.org/2000/svg">
+
+ <metadata id="metadata7">image/svg+xml</metadata>
+ <g>
+ <title>background</title>
+ <rect fill="none" id="canvas_background" height="382" width="694" y="-1" x="-1"/>
+ </g>
+ <g>
+ <title>Layer 1</title>
+ <g stroke="null" id="g3790">
+ <rect stroke="#000000" fill="#ffffff" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" id="rect2985" width="680.84682" height="350.443392" x="4.962804" y="5.773119" rx="0.324652"/>
+ <path stroke="#000000" fill="none" stroke-miterlimit="4" d="m4,175.828501l681.727736,1.357954" id="path3770"/>
+ </g>
+ <rect stroke="#000000" fill="#e3dedb" stroke-width="0.99538" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dashoffset="0" rx="2.988095" y="176.111777" x="5.140841" height="180.524655" width="680.312936" id="rect3813"/>
+ <rect stroke="#000000" fill="#ffffff" stroke-width="1.602133" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="4.80639973, 4.80639973" stroke-dashoffset="0" ry="8.582684" rx="7.476771" y="44.78072" x="55.492192" height="195.219243" width="148.366914" id="rect3764"/>
+ <rect stroke="#000000" fill="#ffffff" stroke-width="1.638042" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="4.9141253, 4.9141253" stroke-dashoffset="0" id="rect3772" width="155.115252" height="195.190135" x="270.220868" y="46.153231" rx="7.816845" ry="8.581405"/>
+ <rect stroke="#000000" fill="#ffffff" stroke-width="1.602133" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dasharray="4.80639973, 4.80639973" stroke-dashoffset="0" ry="8.582684" rx="7.476771" y="45.459696" x="489.86568" height="195.219243" width="148.366914" id="rect3774"/>
+ <text transform="matrix(1.0192718802397343,0,0,0.9115536073383187,-2.8313337784806336,-12.183034089773187) " font-size="16.005802px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3776" y="392.709737" x="551.171304" xml:space="preserve">
+ <tspan stroke="null" font-weight="normal" y="398.194877" x="552.152396" id="tspan3778">Kernel Space</tspan>
+ </text>
+ <text transform="matrix(1.0524848569125234,0,0,0.8827879284304422,-52.30106698198968,-77.5201889102731) " font-size="14.180006px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="601.466013" y="108.524983" id="text3782">
+ <tspan stroke="null" font-weight="normal" id="tspan3784" x="602.416145" y="114.188857">User Space</tspan>
+ </text>
+ <path stroke="#000000" fill="none" stroke-width="1px" id="path3796" d="m488.56554,176.773764c1.782236,0.480113 1.527628,0.360085 1.527628,0.360085"/>
+ <rect stroke="#000000" fill="#ffffff" stroke-width="0.649807" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dashoffset="0" rx="0.838801" y="202.851471" x="84.255138" height="26.434283" width="94.537572" id="rect3815"/>
+ <rect stroke="#000000" fill="#ffffff" stroke-width="0.792138" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dashoffset="0" id="rect3817" width="131.339764" height="28.275376" x="282.077514" y="201.912133" rx="1.165334"/>
+ <path stroke="#000000" fill="none" stroke-width="0.865499px" id="path3823" d="m347.74739,201.086282l0,28.351986"/>
+ <text transform="matrix(0.7776670647796514,0,0,1.19475416519067,-52.30106724263901,-77.52018902784596) " font-size="12.623897px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="434.634023" y="248.956571" id="text3835">
+ <tspan stroke="null" font-size="15.579311px" font-weight="bold" font-family="Monospace" x="435.91992" y="253.141532" id="tspan3837">n2-eth0</tspan>
+ </text>
+ <text transform="matrix(0.9031157255303414,0,0,1.0287949657006918,-2.8313337284492768,-13.069358400177762) " font-size="13.163442px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="110.835751" y="225.210496" id="text3863">
+ <tspan stroke="null" font-size="16.245171px" font-weight="bold" font-family="Monospace" x="111.943029" y="230.070551" id="tspan3865">n1-eth0</tspan>
+ </text>
+ <path stroke="#000000" fill="none" stroke-width="0.992521px" id="path3887" d="m131.263954,229.882774l0,67.221296l176.555867,-0.960307l1.337531,-65.300682"/>
+ <rect stroke="#000000" fill="#ffffff" stroke-width="0.676601" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="4" stroke-dashoffset="0" id="rect3891" width="95.679394" height="28.317195" x="515.346399" y="202.85306" rx="0.848932"/>
+ <path stroke="#000000" fill="none" stroke-width="0.992521px" d="m383.833251,230.842992l0,67.221296l176.555867,-0.960307l1.337531,-65.300682" id="path3897"/>
+ <text transform="matrix(0.9778213687833123,0,0,0.9501950205038839,-52.301066914088324,-76.5370021990862) " font-size="16.459864px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="164.136782" y="409.888383" id="text3907">
+ <tspan stroke="null" id="tspan3915" x="165.159464" y="415.15046">isolated point to point link</tspan>
+ </text>
+ <text transform="matrix(0.9778213687833123,0,0,0.9501950205038839,-52.301066914088324,-76.5370021990862) " font-size="16.459864px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3919" y="409.573373" x="429.378262" xml:space="preserve">
+ <tspan stroke="null" y="414.83545" x="430.400944" id="tspan3921">isolated point to point link</tspan>
+ </text>
+ <text transform="matrix(0.9778213687833123,0,0,0.9501950205038839,-52.301066914088324,-76.5370021990862) " font-size="16.459864px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3923" y="428.078233" x="194.615642" xml:space="preserve">
+ <tspan stroke="null" font-weight="bold" y="433.34031" x="195.638324" id="tspan3925">(eg: 1Mbps, 10ms)</tspan>
+ </text>
+ <text transform="matrix(0.9778213687833123,0,0,0.9501950205038839,-52.301066914088324,-76.5370021990862) " font-size="16.459864px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3927" y="409.888383" x="164.136782" xml:space="preserve">
+ <tspan stroke="null" y="415.15046" x="165.159464" id="tspan3929">Isolated point to point link</tspan>
+ </text>
+ <text transform="matrix(0.9778213687833123,0,0,0.9501950205038839,-52.301066914088324,-76.5370021990862) " font-size="16.459864px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="429.378262" y="409.573373" id="text3931">
+ <tspan stroke="null" id="tspan3933" x="430.400944" y="414.83545">Isolated point to point link</tspan>
+ </text>
+ <text transform="matrix(0.877827228897152,0,0,1.0584326041598764,-53.30106731891522,-78.4233265445007) " font-size="13.706223px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3935" y="282.545218" x="661.482605" xml:space="preserve">
+ <tspan stroke="null" font-size="16.915024px" font-weight="bold" font-family="Monospace" id="tspan3937" y="287.269185" x="662.621781">n3-eth0</tspan>
+ </text>
+ <text transform="matrix(0.7776670647796514,0,0,1.19475416519067,-52.30106724263901,-77.52018902784596) " font-size="12.623897px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3939" y="248.297391" x="520.751053" xml:space="preserve">
+ <tspan stroke="null" font-size="15.579311px" font-weight="bold" font-family="Monospace" id="tspan3941" y="252.482352" x="522.03695">n2-eth1</tspan>
+ </text>
+ <text transform="matrix(0.8745385143393076,0,0,1.0624128521471832,-2.8313338199928846,-14.069358364146652) " font-size="16.205975px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3943" y="80.648481" x="141.655977" xml:space="preserve">
+ <tspan stroke="null" font-size="20px" font-weight="bold" font-family="Monospace" id="tspan3945" y="85.354749" x="142.799437">n1</tspan>
+ </text>
+ <text transform="matrix(0.8745385143393076,0,0,1.0624128521471832,-2.8313338199928846,-14.069358364146652) " font-size="16.205975px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="385.430517" y="78.840861" id="text3955">
+ <tspan stroke="null" font-size="20px" font-weight="bold" font-family="Monospace" x="386.573977" y="83.547129" id="tspan3957">n2</tspan>
+ </text>
+ <text transform="matrix(0.8745385143393076,0,0,1.0624128521471832,-2.8313338199928846,-14.069358364146652) " font-size="16.205975px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3959" y="79.181231" x="632.310457" xml:space="preserve">
+ <tspan stroke="null" font-size="20px" font-weight="bold" font-family="Monospace" id="tspan3961" y="83.887499" x="633.453917">n3</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="125.371536" y="171.060971" id="text3967">
+ <tspan stroke="null" font-weight="normal" id="tspan3969" x="126.421253" y="176.187525">(NDN Container)</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3979" y="170.076461" x="352.011746" xml:space="preserve">
+ <tspan stroke="null" font-weight="normal" y="175.203015" x="353.061463" id="tspan3981">(NDN Container)</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="580.077396" y="169.091931" id="text3983">
+ <tspan stroke="null" font-weight="normal" id="tspan3985" x="581.127113" y="174.218485">(NDN Container)</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3987" y="193.704961" x="123.946116" xml:space="preserve">
+ <tspan stroke="null" font-weight="bold" y="198.831515" x="124.995833" id="tspan3989">NFD</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="140.791686" y="208.664491" id="text3991">
+ <tspan stroke="null" font-weight="normal" id="tspan3993" x="141.841403" y="213.791045">n1.sock</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="123.946116" y="225.286191" id="text3995">
+ <tspan stroke="null" font-weight="bold" id="tspan3997" x="124.995833" y="230.412745">NLSR</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text3999" y="240.245731" x="138.385176" xml:space="preserve">
+ <tspan stroke="null" font-weight="normal" y="245.372285" x="139.434893" id="tspan4001">%C1.Router/n1</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="352.011746" y="191.735901" id="text4003">
+ <tspan stroke="null" font-weight="bold" id="tspan4005" x="353.061463" y="196.862455">NFD</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text4007" y="206.695431" x="366.450896" xml:space="preserve">
+ <tspan stroke="null" font-weight="normal" y="211.821985" x="367.500613" id="tspan4009">n2.sock</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text4011" y="223.317141" x="352.011746" xml:space="preserve">
+ <tspan stroke="null" font-weight="bold" y="228.443695" x="353.061463" id="tspan4013">NLSR</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="366.450896" y="238.276671" id="text4015">
+ <tspan stroke="null" font-weight="normal" id="tspan4017" x="367.500613" y="243.403225">%C1.Router/n2</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text4019" y="190.751371" x="582.928226" xml:space="preserve">
+ <tspan stroke="null" font-weight="bold" y="195.877925" x="583.977943" id="tspan4021">NFD</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="599.773686" y="205.710911" id="text4023">
+ <tspan stroke="null" font-weight="normal" id="tspan4025" x="600.823403" y="210.837465">n3.sock</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="582.928226" y="222.332611" id="text4027">
+ <tspan stroke="null" font-weight="bold" id="tspan4029" x="583.977943" y="227.459165">NLSR</tspan>
+ </text>
+ <text transform="matrix(0.9526376792163275,0,0,0.9753141035001042,-53.30106707952308,-77.42332645354041) " font-size="14.959435px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text4031" y="237.292141" x="597.367186" xml:space="preserve">
+ <tspan stroke="null" font-weight="normal" y="242.418695" x="598.416903" id="tspan4033">%C1.Router/n3</tspan>
+ </text>
+ <text transform="matrix(0.9778213687833123,0,0,0.9501950205038839,-52.301066914088324,-76.5370021990862) " font-size="16.459864px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text4035" y="102.475413" x="322.701992" xml:space="preserve">
+ <tspan stroke="null" y="107.73749" x="323.724674" id="tspan4037">Isolated NDN nodes</tspan>
+ </text>
+ <text transform="matrix(0.935021961689298,0,0,0.9936889310882339,-2.9798247609055646,-12.086171479984756) " font-size="11.279781px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="75.549398" y="206.131281" id="text4039">
+ <tspan stroke="null" id="tspan4041" x="76.618892" y="211.163037">Private network space</tspan>
+ </text>
+ <text transform="matrix(0.935021961689298,0,0,0.9936889310882339,-2.9798247609055646,-12.086171479984756) " font-size="11.279781px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" id="text4043" y="206.946991" x="308.474828" xml:space="preserve">
+ <tspan stroke="null" y="211.978747" x="309.544322" id="tspan4045">Private network space</tspan>
+ </text>
+ <text transform="matrix(0.935021961689298,0,0,0.9936889310882339,-2.9798247609055646,-12.086171479984756) " font-size="11.279781px" font-style="normal" font-weight="normal" fill="#000000" font-family="Sans" xml:space="preserve" x="540.174348" y="206.131281" id="text4047">
+ <tspan stroke="null" id="tspan4049" x="541.243842" y="211.163037">Private network space</tspan>
+ </text>
+ <text xml:space="preserve" text-anchor="start" font-family="Helvetica,Arial,sans-serif" font-size="15px" id="svg_1" y="377" x="203.5" stroke-width="null" stroke="null" fill="#333">Figure: Relationship between Minindn and Mininet</text>
+ </g>
+</svg>
\ No newline at end of file
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
new file mode 100644
index 0000000..79cbb0f
--- /dev/null
+++ b/docs/release-notes.rst
@@ -0,0 +1,186 @@
+Release Notes
+=============
+
+Mini-NDN version 0.4.0 (changes since version 0.3.0)
+----------------------------------------------------
+
+Release date: January 10, 2018
+
+**New features**:
+
+- Use SIGQUIT to quit Mini-NDN, SIGINT to kill programs
+
+- Use Infoedit to edit NFD and NLSR configuration files
+
+- Use nlsr.conf installed in the system
+
+- Provide a Vagrantfile to setup Mini-NDN and NDN
+
+- Provide option to disable NLSR
+
+- Provide an option to run NLSR in dry-run mode
+
+- Add option to specify whether to use TCP or UDP face in nlsr.conf
+
+- Add option to specify arbitrary arguments to use in experiments
+
+- Include a single option to install Mini-NDN and all the dependencies
+
+**Bug fixes**:
+
+- Fix "key does not exist error" after NLSR starts
+
+- Update install.sh to call ldconfig after installing ChronoSync
+
+- Add hyperbolic coordinates to default topology
+
+**Misc changes**:
+
+- Add an experiment to test nlsrc
+
+- Create faces in NFD for each neighbor in NLSR
+
+- Update to latest ndn-cxx
+
+- Use /tmp/minindn folder as default work dir instead of /tmp
+
+Mini-NDN version 0.3.0 (changes since version 0.2.0)
+----------------------------------------------------
+
+Release date: March 3, 2017
+
+**New features**:
+
+- Mini-NDN cluster edition
+
+- New experiments for making NLSR testing easier
+
+**Bug fixes**:
+
+- Set site name correctly
+
+- Install missing certificates in NLSR security config
+
+- Fix quitting of NLSR due to key not found error
+
+**Misc changes**:
+
+- Removed nlsr.conf file, generate it within the code
+
+- Use argparse instead of deprecated optparse
+
+- Update security config section for NLSR
+
+- Change mininet prompt to mini-ndn
+
+- Set network name at one place
+
+- Update install.sh script to install openssl
+
+- Update install.sh script to install cryptopp from package instead of
+ compiling from source
+
+- Update install.sh to clean build folder every time to get rid of
+ removed files such as old experiments
+
+- Fix old code - use net.hosts instead of storing hosts in a variable
+
+- Use nfdc instead of deprecated nfd-status
+
+Mini-NDN version 0.2.0 (changes since version 0.1.1)
+----------------------------------------------------
+
+Release date: August 18, 2016
+
+**New features**:
+
+- Automatic security configuration for NLSR
+
+- Use /usr/local/etc/ndn/nfd.conf as default config file for NFD
+
+- Class to monitor /proc/$PID/stat file for PID
+
+- Mini-NDN exits gracefully on SIGINT and non-convergence
+
+- Faster Mini-NDN install script - does not do apt-get update everytime
+
+- NLSR is launched with explicit config file for easier process
+ identification
+
+- Add and update more documentation
+
+**Bug fixes**:
+
+- NFD is killed correctly on exit
+
+- Best route strategy is set correctly
+
+Mini-NDN version 0.1.1 (changes since version 0.1.0)
+----------------------------------------------------
+
+Release date: November 4, 2015
+
+**New features**:
+
+- Use nfd.conf.sample from currently installed NFD
+
+- Add working directory option to allow execution environment outside
+ of /tmp
+
+- Add results directory option to store experiment results after
+ completion
+
+- Add support for switches in GUI and configuration file
+
+- Add failNode and recoverNode methods to Experiment class
+
+- Add most connected node (MCN) failure experiment
+
+- Add option to specify percentage of nodes pinged
+
+**Code changes**:
+
+- Refactor program options into container class
+
+- Remove unused "FIB Entries" option from NDN host options
+
+**Bug fixes**:
+
+- Abort start up if experiment name is invalid
+
+- Restart pings after recovery in failure experiment
+
+Mini-NDN version 0.1.0 (initial release)
+----------------------------------------
+
+Release date: July 15, 2015
+
+Mini-NDN is a lightweight networking emulation tool that enables
+testing, experimentation, and research on the NDN platform. Based on
+Mininet, Mini-NDN uses the NDN libraries, NFD, NLSR, and tools released
+by the `NDN project <http://named-data.net/codebase/platform/>`__ to
+emulate an NDN network on a single system.
+
+**Included features**:
+
+- Run a complete NDN network on a single system
+
+- Automatic configuration of NLSR to provide a routable NDN network
+
+- Supports user created NDN applications
+
+- Create a topology using the included Mini-NDN Edit GUI application
+
+- Allows individual configuration of NFD and NLSR parameters for each
+ node
+
+- Provides an experiment management framework for easy creation of
+ custom networking experiments
+
+- Uses a simple topology file format to define hosts, links, and
+ configuration values
+
+- Configure network link parameters including bandwidth, delay, and
+ loss rate
+
+- Includes a pre-configured topology file to replicate the NDN testbed
diff --git a/docs/videos.rst b/docs/videos.rst
new file mode 100644
index 0000000..b6b3a51
--- /dev/null
+++ b/docs/videos.rst
@@ -0,0 +1,18 @@
+Video Tutorials
+===============
+
+Maybe outdated since version 0.5.0.
+
+.. raw:: html
+
+ <div id="video-container" class="col-md-6 ">
+ <p>Mini-NDN Demo at ACM, 2017</p>
+ <iframe width="400" height="230" src="https://www.youtube.com/embed/xYRPHZe18o0" frameborder="0" allowfullscreen=""></iframe>
+ </div>
+
+.. raw:: html
+
+ <div id="video-container" class="col-md-6 "">
+ <p>Mini-NDN Overview </p>
+ <iframe width="400" height="230" src="https://www.youtube.com/embed/Da7t8yBWzv0" frameborder="0" allowfullscreen="">
+ </div>