aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: c2c650dc8a31793189d816f64d9ccf591f317eaf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Rumba: A framework to install, bootstrap a RINA network

Rumba is part of ARCFIRE 2020, Work Package 3. It is a framework in
Python which allows user to write a Python script to define a RINA
network. The physical graph needed for this RINA network is then
calculated and realised on one of the supported testbeds. Next, one of
the supported RINA prototypes is installed. After installation, the
network is bootstrapped. For an example of such a Python script, have
a look at the examples/ folder.

## Workflow, both external and internal:

  1. user defines the network graph, creating instances of model.Node
    and model.DIF classes

  2. user creates an instance of a Testbed class

  3. user creates an instance of prototype.Experiment class, passing
    the testbed instance and a list of Node instances

        * At the end of the base Experiment constructor, the
          generate function is called to generate information about
          per-node IPCPs, registrations and enrollment, ready to be
          used by the plugins

  4. user calls run() on the prototype.Experiment instance:

        * First, run() calls Testbed.swap_in(), passing the
          Experiment, and filling in the missing information

        * Second, run() calls a prototype-specific setup function,
          to create the required IPCPs, perform registrations,
          enrollments, etc.

        * Third, perform tests (TODO)

        * Fourth, run() calls Testbed.swap_out()

## Installation

   Rumba can be found on the
   [PyPi](https://pypi.python.org/pypi/Rumba) and can thus be
   installed through pip, by using `pip install rumba`. However, to
   install the latest version, after cloning the repository, a user
   can also issue `python setup.py install`.

## Supported prototypes

 * [IRATI](https://github.com/IRATI/stack) is an open source
   implementation of the RINA architecture targeted at the OS/Linux
   system, initially developed by the FP7-IRATI project.

 * [rlite](https://github.com/vmaffione/rlite) is a lightweight Free
   and Open Source implementation of the Recursive InterNetwork
   Architecture (RINA) for GNU/Linux operating systems.

 * Ouroboros is a user-space implementation of RINA with a focus on
   portability. It is written in C89 and works on any POSIX.1-2008
   enabled system.

## Supported testbeds

 * [QEMU](http://wiki.qemu-project.org/Main_Page) is a generic and
   open source machine emulator and virtualizer.

 * [Emulab](https://www.emulab.net/) is a network testbed, giving
   researchers a wide range of environments in which to develop,
   debug, and evaluate their systems.

 * [jFed](http://jfed.iminds.be/) is a Java-based framework for
   testbed federation.

   In order to use the jFed testbed, a user first needs to download
   his/her key from
   [https://authority.ilabt.iminds.be/](https://www.youtube.com/watch?v=dQw4w9WgXcQ/)
   After logging in, click on *Download your certificate*. Save the
   contents in a file (for example cert.pem). A jFed testbed instance
   is defined as follows:

       tb = jfed.Testbed(exp_name = "rochefort10",
                         username = "ricksanchez",
                         cert_file = "/home/morty/cert.pem")

   Here the experiment name is rochefort10, the user's name is
   ricksanchez, and the certificate can be found in
   /home/morty/cert.pem.

   Before running the experiment it is wise to use an SSH agent to
   avoid having to enter the passphrase for every login to a node by
   the framework. (Apart from asking for the passphrase to login to
   the nodes, the framework will always ask for the passphrase since
   it is needed by the jFed CLI as well.) In order to start an SSH
   agent and to add the certificate, simply perform the following
   commands:

       eval `ssh-agent`
       ssh-add /home/morty/cert.pem