aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authort3sserakt <t3ss@posteo.de>2021-11-07 17:15:52 +0100
committert3sserakt <t3ss@posteo.de>2021-11-07 17:15:52 +0100
commite19e3abc4d62d2eaaea78421a4f1475bc75a5f85 (patch)
tree58f9009f4d07c3927da35fc05b82ed03dceac45b
parentcfb0958e04cb7824e36cd7bdb36208e2e593132c (diff)
downloadwww-e19e3abc4d62d2eaaea78421a4f1475bc75a5f85.tar.gz
www-e19e3abc4d62d2eaaea78421a4f1475bc75a5f85.zip
- added L2O NGI project page.
-rw-r--r--template/l2o/index.html.j2215
-rw-r--r--template/l2o/mile1.html.j2135
-rw-r--r--template/l2o/mile2.html.j285
-rw-r--r--template/l2o/mile3.html.j288
-rw-r--r--template/l2o/testng.html.j2158
5 files changed, 681 insertions, 0 deletions
diff --git a/template/l2o/index.html.j2 b/template/l2o/index.html.j2
new file mode 100644
index 00000000..f80d7ea9
--- /dev/null
+++ b/template/l2o/index.html.j2
@@ -0,0 +1,215 @@
1{% extends "common/base.j2" %}
2{% block body_content %}
3<article class="container">
4
5 <header>
6 <h1>{{ _("NGI Assure project: Layer-2-Overlay") }}</h1>
7 </header>
8
9 <div class="row">
10 <div class="col-2 d-none d-lg-block"><!-- for large viewports show menu for better orientation -->
11 <nav class="nav subnav position-fixed flex-column border-right" style="position:fixed">
12 <a class="nav-link" href="#idea">{{ _("Project motivation") }}</a>
13 <a class="nav-link" href="#testframework">{{ _("New Test Framework") }}</a>
14 <a class="nav-link" href="#milestones">{{ _("Milestones") }}</a>
15 <a class="nav-link" href="#milestone1">{{ _("Milestone 1") }}</a>
16 <a class="nav-link" href="#milestone2">{{ _("Milestone 2") }}</a>
17 <a class="nav-link" href="#milestone3">{{ _("Milestone 3") }}</a>
18 <a class="nav-link" href="#milestone4">{{ _("Milestone 4") }}</a>
19 <a class="nav-link" href="#milestone5">{{ _("Milestone 5") }}</a>
20 <a class="nav-link" href="#milestone6">{{ _("Milestone 6") }}</a>
21 </nav>
22 </div>
23 <div class="col">
24
25 <section>
26 <p>
27 {% trans %}
28 This project was funded through the NGI Assure Fund, a fund established by <a href="https://nlnet.nl/project/GNUnet-L2/">NLnet</a>.
29 {% endtrans %}
30 </p>
31 </section>
32
33
34 <h2><a name="idea" class="subnav-anchor"></a>{{ _("Project motivation") }}</h2>
35
36 <section>
37 <h4>The GNUnet transport subsystem</h4>
38 <p>
39 {% trans %}
40 The <a href="https://docs.gnunet.org/handbook/gnunet.html#TRANSPORT-Subsystem">current</a> GNUnet TRANSPORT architecture with its pluggable transport mechanism (TCP, UDP, HTTP(S) and other protocols) together with the ATS subsystem for bandwidth allocation and choosing plugins has several <a href="https://docs.gnunet.org/handbook/gnunet.html#TRANSPORT_002dNG-Subsystem">issues</a> with its design.
41
42 With the Layer-2-Overlay project we like to implement the <a href="https://docs.gnunet.org/handbook/gnunet.html#Design-goals-of-TNG">design goals</a> of the future GNUnet TRANSPORT Next Generation (TNG) subsystem.
43
44 One major change in the design is to separate the protocol plugins into processes (now called communicators) detached from the main transport service. Three communicators were already implemented (TCP, UDP and UNIX sockets).
45 The old transport code is hard to maintain, because it is cluttered with "manipulation" support code for TESTBED (the actual testing framework). Testing TRANSPORT is a hard task, especially with TESTBED which has its own design flaws, and test code which is very hard to read to get an idea what the test code is doing. Therefore the first task (milestone 1) is to implement a new testing framework which uses network namespaces to make testing of TNG much easier. Have a look into what is planed for Layer-2-Overlay in the <a href="#milestones">milestones</a>.
46 {% endtrans %}
47 </p>
48 </section>
49
50 <h2><a name="testframework" class="subnav-anchor"></a>{{ _("New Test Framwork") }}</h2>
51
52 <p>The new testing framework consists of two major parts. First the command style pattern borrowed from the GNU Taler project, second a network namespace setup, to have a suitable test setup for testing several network topologies with lossy connections, firewalls, etc..</p>
53
54 <h3><a name="cmd" class="subnav-anchor"></a>{{ _("Command Style Pattern") }}</h3>
55
56 <section>
57 <p>
58 {% trans %}
59 The new style of writing tests in GNUnet is borrowed from the <a href="https://docs.taler.net/developers-manual.html#testing-library">GNU Taler testing library</a>. In <a href="#milestone1">milestone 1</a> we implemented commands to setup the <a href="#netjails">netjails</a>, the test environment for each peer, to start a single peers and sending a simple test message. Because some commands depend on other commands to be finished, and those commands are asynchronous, we needed additional functionality in the command interpreter library to block execution until some commands are finished (e.g. all peers needs to be running, before peers starting to send messages). For a detailed description have a look into the <a href="testng.html">testing ng documentation</a>.
60 {% endtrans %}
61 </p>
62 </section>
63
64 <h3><a name="netjails" class="subnav-anchor"></a>{{ _("Netjails") }}</h3>
65
66 <section>
67 <p>
68 {% trans %}
69 To do extensive testing of the new transport implementation one needs to simulate various network topologies to enable faking network characteristics like lossy connections or firewalls. To achieve this we are working with <a href="https://www.man7.org/linux/man-pages/man8/ip-netns.8.html">network namespace</a>. We have commands for starting and stopping network namespaces. Those commands are scripts, which are using several shell commands to setup the network namespace. A third script then is responsible for start a GNUnet helper. This helper can load plugins. Each plugin represents some test case. Per node in the network namespaces one helper is started, which means on each node is a local interpreter loop running. For a detailed description have a look into the <a href="testng.html">testing ng documentation</a>.
70 {% endtrans %}
71 </p>
72 </section>
73
74 <h2><a name="milestones" class="subnav-anchor"></a>{{ _("Milestones") }}</h2>
75
76 <p>The next milestone to be reached is milestone 3. One half of it, the udp backchannel test is already implemented, and some bugs in the tng service were fixed.</p>
77
78 <h3><a name="milestone1" class="subnav-anchor"></a>{{ _("Milestone 1 Test Infrastructure and minimal Test Case") }}</h3>
79 <section>
80 <p>
81 {% trans %}
82 The first subtask consists of implementing a framework for setting up VLANs between network namespaces and a framework to test communication between peers which are running in those VLANs. Finally a minimal Test Case will be implemented. Despite the fact that the transport service is already able to use several communicators (transport protocol implementations), it will only use the tcp communicator, not the unix socket nor the udp communicator, which already are in place and working.
83
84 <ul>
85 <li>SUID helpers to setup network namespace and starting peers with network namespace.</li>
86 <li>Basic transport-level operations (get address, send, receive, connect).</li>
87 <li>Peers connected through test and transfer data.</li>
88 </ul>
89 {% endtrans %}
90 </p>
91 <h4>Deliverable</h4>
92 <p>
93 {% trans %}
94 First MVP which uses the TCP communicator to send messages between peers. The deliverable can be verified through out the specific test cases running in the GNUnet CI.
95
96 <a href="mile1.html">Details</a>
97 {% endtrans %}
98 </p>
99 </section>
100
101 <h3><a name="milestone2" class="subnav-anchor"></a>{{ _("Milestone 2 Enhancing Test Framework") }}</h3>
102 <section>
103 <p>
104 {% trans %}
105 To test more complex functionality we need to enhance the capabilities of the testing framework. Hooks for performance measurement will be implemented.
106 <ul>
107 <li>Enhancing transport-level operations.</li>
108 <li>Block execution of commands at a peer. (Barriers).</li>
109 </ul>
110 {% endtrans %}
111 </p>
112 <h4>Deliverable</h4>
113 <p>
114 {% trans %}
115 Outcome of this deliverable are advanced test case (again verifiable in the GNUnet continuous integration (CI)) with performance measurements.
116
117<a href="mile2.html">Details</a>
118 {% endtrans %}
119 </p>
120 </section>
121
122 <h3><a name="milestone3" class="subnav-anchor"></a>{{ _("Milestone 3 UDP integration") }}</h3>
123 <section>
124 <p>
125 {% trans %}
126 With this subtask I will implement enhanced L2O features like using unidirectional transport protocols with backchannels. Addresses by which a peer can be reached can be delivered on handshake or by UDP broadcast. With this milestone the transport service will be able to use more than one communicator (pluggable transport).
127 <ul>
128 <li>unidirectional communication and backchannels.</li>
129 <li>UDP broadcast.</li>
130 </ul>
131 {% endtrans %}
132 </p>
133 <h4>Deliverable</h4>
134 <p>
135 {% trans %}
136 The CI contains test case which uses the UDP protocol to message between peers and to learn about “foreign” peers.
137
138 <a href="mile3.html">Details</a>
139 {% endtrans %}
140 </p>
141 </section>
142
143 <h3><a name="milestone4" class="subnav-anchor"></a>{{ _("Milestone 4 Distance Vector") }}</h3>
144 <section>
145 <p>
146 {% trans %}
147 In this subtask I will enhance connectivity to peers not directly connected. Therefore peers have to act as relay. To achieve this I will implement the distance vector protocol.
148 {% endtrans %}
149 </p>
150 <h4>Deliverable</h4>
151 <p>
152 {% trans %}
153 The CI contains test cases with a setup of peers not connected directly. The test cases proof that each peer can reach any other peer.
154 {% endtrans %}
155 </p>
156 </section>
157
158 <h3><a name="milestone5" class="subnav-anchor"></a>{{ _("Milestone 5 NAT Traversal") }}</h3>
159 <section>
160 <p>
161 {% trans %}
162 This subtask will make peers behind NAT reachable. Two simple traversal methods will be implemented.
163 <ul>
164 <li>NAT traversal via UpnPC.</li>
165 <li>Autonomous NAT Traversal using fake ICMP messages.</li>
166 </ul>
167 {% endtrans %}
168 </p>
169 <h4>Deliverable</h4>
170 <p>
171 {% trans %}
172 The CI contains test case with a peer setup containing peer behind a NAT. The test cases
173 proof that each peer can be reached, even if that peer is behind a NAT. The test case are measuring the performance. This measurement is used to compare with the outcome of the next milestone. This result of this milestone will be a first stable release.
174 {% endtrans %}
175 </p>
176 </section>
177
178 <h3><a name="milestone6" class="subnav-anchor"></a>{{ _("Milestone 6 Optimization") }}</h3>
179 <section>
180 <p>
181 {% trans %}
182 In this subtask I will implement algorithms (flow and congestion control, quality of service optimizations) which will select the optimal transport protocol for a given situation.
183
184I will analyze potential performance gains by integrating libraries of the interpeer project. If the effort of integrating interpeer presumably would lead to better performance than other optimizations of the same amount of work, this integration is done.
185
186I will finish the project with a performance analysis to optimize the selection logic.
187 <ul>
188 <li>Queue management.
189 <li>Interpeer project synergy
190 <ol>
191 <li>Analysis of the interpeer project in regard to integrate it into GNUnet.</li>
192 <li>Optional integration into GNUnet, if it can be done at all and in a reasonable amount of work.</li>
193 </ol>
194 <li>Commands for performance measurement(s).</li>
195 <li>Performance analysis.</li>
196 </ul>
197 {% endtrans %}
198 </p>
199 <h4>Deliverable</h4>
200 <p>
201 {% trans %}
202 The test cases in the CI are measuring the performance gains. This measurement can be compared with the measurement of milestone 5. Again one outcome of this milestone will be a stable release.
203
204 Documentation of the interpeer project analysis.
205 {% endtrans %}
206 </p>
207 </section>
208
209
210
211 </div>
212 </div>
213
214</article>
215{% endblock body_content %}
diff --git a/template/l2o/mile1.html.j2 b/template/l2o/mile1.html.j2
new file mode 100644
index 00000000..db0122d3
--- /dev/null
+++ b/template/l2o/mile1.html.j2
@@ -0,0 +1,135 @@
1{% extends "common/base.j2" %}
2{% block body_content %}
3<article class="container">
4
5 <header>
6 <h1>{{ _("NGI Assure project: Layer-2-Overlay") }}</h1>
7 </header>
8
9 <div class="row">
10 <div class="col-2 d-none d-lg-block"><!-- for large viewports show menu for better orientation -->
11 <nav class="nav subnav position-fixed flex-column border-right" style="position:fixed">
12 <a class="nav-link" href="index.html#idea">{{ _("Project main page") }}</a>
13 </nav>
14 </div>
15 <div class="col">
16
17 <h2>Implementation details milestone 1</h2>
18
19 <section>
20 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Master Loop") }}</h4>
21 <p>
22 {% trans %}
23 <table width="100%">
24 <tr>
25 <td width="40%" style="vertical-align: top;">src/transport/test_transport_api_cmd_simple_send.c</td><td width="60%" style="vertical-align: top;">Binary for starting the simple send test. Obsolete in current code base!</td>
26 <tr>
27 <td></td><td> </td>
28 </tr>
29 <tr>
30 <td width="40%" style="vertical-align: top;">src/testing/netjail_start.sh</td><td width="60%" style="vertical-align: top;">Script to setup the netjail topology. Will be execute by the following command. </td>
31 </tr>
32 <tr>
33 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_netjail_start.c</td><td width="60%" style="vertical-align: top;">Command to create the netjail setup.</td>
34 <tr>
35 <td></td><td> </td>
36 </tr>
37 <tr>
38 <td width="40%" style="vertical-align: top;">src/testing/netjail_exec.sh</td><td width="60%" style="vertical-align: top;">Script to execute a local test interpreter per node. Will be execute by the following command.</td>
39 <tr>
40 <td></td><td> </td>
41 </tr>
42 <tr>
43 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_netjail_start_testsystem.c</td><td width="60%" style="vertical-align: top;">Command to start the helper processes.</td>
44 <tr>
45 <td></td><td> </td>
46 </tr>
47 <tr>
48 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_netjail_stop_testsystem.c</td><td width="60%" style="vertical-align: top;">Command to stop the helper processes.</td>
49 <tr>
50 <td></td><td> </td>
51 </tr>
52 <tr>
53 <td width="40%" style="vertical-align: top;">src/testing/netjail_stop.sh</td><td width="60%" style="vertical-align: top;">Script to stop the netjail topology.</td>
54 <tr>
55 <td></td><td> </td>
56 </tr>
57 <tr>
58 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_netjail_stop.c</td><td width="60%" style="vertical-align: top;">Command to stop the test setup.</td>
59 <tr>
60 <td></td><td> </td>
61 </tr>
62 </table>
63 {% endtrans %}
64 </p>
65 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Local Loop") }}</h4>
66 <p>
67 {% trans %}
68 <table width="100%">
69 <tr>
70 <td width="40%" style="vertical-align: top;">src/testing/gnunet-cmds-helper.c</td><td width="60%" style="vertical-align: top;">Helper to start the local interpreter loop.</td>
71 <tr>
72 <td></td><td> </td>
73 </tr>
74 <tr>
75 <td width="40%" style="vertical-align: top;">src/transport/test_transport_plugin_cmd_simple_send.c</td><td width="60%" style="vertical-align: top;">Plugin which creates the cmds for the simple send test case.</td>
76 </tr>
77 <tr>
78 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_system_create.c</td><td width="60%" style="vertical-align: top;">Command to create a local test system.</td>
79 <tr>
80 <td></td><td> </td>
81 </tr>
82 <tr>
83 <td width="40%" style="vertical-align: top;">src/transport/transport_api_cmd_start_peer.c</td><td width="60%" style="vertical-align: top;">Command to start a peer.</td>
84 <tr>
85 <td></td><td> </td>
86 </tr>
87 <tr>
88 <td width="40%" style="vertical-align: top;">src/transport/transport_api_cmd_connecting_peers.c</td><td width="60%" style="vertical-align: top;"> Command to connect two peers.</td>
89 <tr>
90 <td></td><td> </td>
91 </tr>
92 <tr>
93 <td>src/transport/transport_api_cmd_send_simple.c</td><td width="60%" style="vertical-align: top;">Command to send a simple message from one peer to another.</td>
94 <tr>
95 <td></td><td> </td>
96 </tr>
97 <tr>
98 <td width="40%" style="vertical-align: top;">src/transport/transport_api_cmd_stop_peer.c</td><td width="60%" style="vertical-align: top;">Command to stop a peer.</td>
99 <tr>
100 <td></td><td> </td>
101 </tr>
102 <tr>
103 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_system_destroy.c</td><td width="60%" style="vertical-align: top;">Command to destroy the local test system.</td>
104 <tr>
105 <td></td><td> </td>
106 </tr>
107 <tr>
108 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_local_test_finished.c</td><td>Command to send a message to the master loop, if the local loop has finished.</td>
109 <tr>
110 </table>
111 {% endtrans %}
112 </p>
113 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Configuration") }}</h4>
114 <p>
115 {% trans %}
116 <table width="100%">
117 <tr>
118 <td width="40%" style="vertical-align: top;">src/transport/test_transport_api2_tcp_node1.conf</td><td width="60%" style="vertical-align: top;">Configuration for the first node running during the simple send test case.</td>
119 <tr>
120 <td></td><td> </td>
121 </tr>
122 <tr>
123 <td width="40%" style="vertical-align: top;">src/transport/test_transport_api2_tcp_node2.conf</td><td width="60%" style="vertical-align: top;">Configuration for the second node running during the simple send test case.</td>
124 </tr>
125 </table>
126 {% endtrans %}
127 </p>
128 </section>
129
130
131 </div>
132 </div>
133
134</article>
135{% endblock body_content %} \ No newline at end of file
diff --git a/template/l2o/mile2.html.j2 b/template/l2o/mile2.html.j2
new file mode 100644
index 00000000..764260c4
--- /dev/null
+++ b/template/l2o/mile2.html.j2
@@ -0,0 +1,85 @@
1{% extends "common/base.j2" %}
2{% block body_content %}
3<article class="container">
4
5 <header>
6 <h1>{{ _("NGI Assure project: Layer-2-Overlay") }}</h1>
7 </header>
8
9 <div class="row">
10 <div class="col-2 d-none d-lg-block"><!-- for large viewports show menu for better orientation -->
11 <nav class="nav subnav position-fixed flex-column border-right" style="position:fixed">
12 <a class="nav-link" href="index.html#idea">{{ _("Project main page") }}</a>
13 </nav>
14 </div>
15 <div class="col">
16
17 <h2>Implementation details milestone 2</h2>
18
19 <section>
20 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Master Loop") }}</h4>
21 <p>
22 {% trans %}
23 <table width="100%">
24 <tr>
25 <td width="40%" style="vertical-align: top;">src/transport/test_transport_simple_send.sh</td><td width="60%" style="vertical-align: top;">Introduced scripts to start the tests. The script checks, if a kernel parameter is set to allow unprivileged users to create network namespaces. The script than starts the following gerneric binary in a network namespace.</td>
26 <tr>
27 <td></td><td> </td>
28 </tr>
29 <tr>
30 <td width="40%" style="vertical-align: top;">src/transport/test_transport_start_with_config.c</td><td width="60%" style="vertical-align: top;">A generic binary to start a test case which will be configured by a configuration file.</td>
31 </tr>
32 <tr>
33 <td width="40%" style="vertical-align: top;">src/testing/testing.c</td><td width="60%" style="vertical-align: top;">Added code to read netjail topology from a file.</td>
34 <tr>
35 <td></td><td> </td>
36 </tr>
37 <tr>
38 <td width="40%" style="vertical-align: top;">src/testing/topo.sh</td><td width="60%" style="vertical-align: top;">Script which reads the topology from a file for the use in the other netjail scripts.</td>
39 <tr>
40 <td></td><td> </td>
41 </tr>
42 <tr>
43 <td width="40%" style="vertical-align: top;">All already existing commands.</td><td width="60%" style="vertical-align: top;">All commands changed to work with the topology data.</td>
44 </tr>
45 </table>
46 {% endtrans %}
47 </p>
48 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Local Loop") }}</h4>
49 <p>
50 {% trans %}
51 <table width="100%">
52 <tr>
53 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_send_peer_ready.c</td><td width="60%" style="vertical-align: top;">Command to send a message to the master loop if a peer has started in local loop.</td>
54 <tr>
55 <td></td><td> </td>
56 </tr>
57 <tr>
58 <td width="40%" style="vertical-align: top;">src/testing/testing_api_cmd_local_test_prepared.c</td><td width="60%" style="vertical-align: top;">Command to send a message to the master loop if a peer is ready to shutdown.</td>
59 </tr>
60 </table>
61 {% endtrans %}
62 </p>
63 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Configuration") }}</h4>
64 <p>
65 {% trans %}
66 <table width="100%">
67 <tr>
68 <td width="40%" style="vertical-align: top;">src/transport/transport_api_cmd_start_peer.c</td><td width="60%" style="vertical-align: top;">Command now uses a configuration template for the peer configuration.</td>
69 <tr>
70 <td></td><td> </td>
71 </tr>
72 <tr>
73 <td width="40%" style="vertical-align: top;">test_transport_simple_send_topo.conf</td><td width="60%" style="vertical-align: top;">Topology configuration file for the simple send test case.</td>
74 <tr>
75 </table>
76 {% endtrans %}
77 </p>
78 </section>
79
80
81 </div>
82 </div>
83
84</article>
85{% endblock body_content %} \ No newline at end of file
diff --git a/template/l2o/mile3.html.j2 b/template/l2o/mile3.html.j2
new file mode 100644
index 00000000..265dd731
--- /dev/null
+++ b/template/l2o/mile3.html.j2
@@ -0,0 +1,88 @@
1{% extends "common/base.j2" %}
2{% block body_content %}
3<article class="container">
4
5 <header>
6 <h1>{{ _("NGI Assure project: Layer-2-Overlay") }}</h1>
7 </header>
8
9 <div class="row">
10 <div class="col-2 d-none d-lg-block"><!-- for large viewports show menu for better orientation -->
11 <nav class="nav subnav position-fixed flex-column border-right" style="position:fixed">
12 <a class="nav-link" href="index.html#idea">{{ _("Project main page") }}</a>
13 </nav>
14 </div>
15 <div class="col">
16
17 <h2>Implementation details milestone 3</h2>
18
19 <section>
20 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Bug fixing") }}</h4>
21 <p>
22 {% trans %}
23 Some bugs in the tng service and communicator code which were found with new tests were fixed.
24 {% endtrans %}
25 </p>
26 </section>
27
28 <section>
29 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Master Loop") }}</h4>
30 <p>
31 {% trans %}
32 <table width="100%">
33 <tr>
34 <td width="45%" style="vertical-align: top;">src/transport/test_transport_udp_backchannel.sh</td><td width="55%" style="vertical-align: top;">Added script to start the udp backchannel test case.</td>
35 <tr>
36 <td></td><td> </td>
37 </tr>
38 <tr>
39 <td width="45%" style="vertical-align: top;">All commands</td><td width="55%" style="vertical-align: top;">Changed code to handle strings with topology information.</td>
40 </tr>
41 <tr>
42 <td></td><td> </td>
43 </tr>
44 <tr>
45 <td width="45%" style="vertical-align: top;">src/testing/netjail_start.sh</td><td width="55%" style="vertical-align: top;">Changed the netjail start script to configure port forwarding for specific protocols (tcp, udp).</td>
46 </tr>
47 </table>
48 {% endtrans %}
49 </p>
50 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Local Loop") }}</h4>
51 <p>
52 {% trans %}
53 <table width="100%">
54 <tr>
55 <td width="45%" style="vertical-align: top;">src/transport/test_transport_plugin_cmd_udp_backchannel.c</td><td width="55%" style="vertical-align: top;">New plugin for the udp backchannel test case.</td>
56 <tr>
57 <td></td><td> </td>
58 </tr>
59 <tr>
60 <td width="45%" style="vertical-align: top;">src/transport/transport_api_cmd_backchannel_check.c</td><td width="55%" style="vertical-align: top;">Command to check for a udp backchannel specific log entry.</td>
61 </tr>
62 <tr>
63 <td></td><td> </td>
64 </tr>
65 <tr>
66 <td width="45%" style="vertical-align: top;">src/testing/testing_api_cmd_block_until_external_trigger.cc</td><td width="55%" style="vertical-align: top;">Command to block the local loop until triggered by a external signal.</td>
67 </tr>
68 </table>
69 {% endtrans %}
70 </p>
71 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Configuration") }}</h4>
72 <p>
73 {% trans %}
74 <table width="100%">
75 <tr>
76 <td width="45%" style="vertical-align: top;">test_transport_udp_backchannel_topo.conf</td><td width="55%" style="vertical-align: top;">Topology configuration file for the udp backchannel test case.</td>
77 <tr>
78 </table>
79 {% endtrans %}
80 </p>
81 </section>
82
83
84 </div>
85 </div>
86
87</article>
88{% endblock body_content %} \ No newline at end of file
diff --git a/template/l2o/testng.html.j2 b/template/l2o/testng.html.j2
new file mode 100644
index 00000000..08f0119a
--- /dev/null
+++ b/template/l2o/testng.html.j2
@@ -0,0 +1,158 @@
1{% extends "common/base.j2" %}
2{% block body_content %}
3<article class="container">
4
5 <header>
6 <h1>{{ _("NGI Assure project: Layer-2-Overlay") }}</h1>
7 </header>
8
9 <div class="row">
10 <div class="col-2 d-none d-lg-block"><!-- for large viewports show menu for better orientation -->
11 <nav class="nav subnav position-fixed flex-column border-right" style="position:fixed">
12 <a class="nav-link" href="index.html#idea">{{ _("Project main page") }}</a>
13 </nav>
14 </div>
15 <div class="col">
16
17 <h2>The next generation testing framework</h2>
18
19 <section>
20 <h4><a name="netjail" class="subnav-anchor"></a>{{ _("Netjail setup and execution") }}</h4>
21 <p>
22 {% trans %}
23 Netjail is the GNUnet naming for having several <a href="https://www.man7.org/linux/man-pages/man8/ip-netns.8.html">network namespaces</a>, being isolated from each other to test how GNUnet nodes with limited connectivity behave, and how the new transport next generation implementation can help to circumvent the connectivity obstacles. The network namespaces are span a network with globally known nodes and several subnets separated from each other via a single router.
24
25 We have three scripts for the test setup:
26
27 <ul>
28 <li>netjail_start.sh: A script to setup the network namespaces. This script takes three arguments. The first is either the name of a configuration for the test setup topology or a string containing the topology information. The second is the process id of the test. The third is a flag if the first parameter contains the name of the configuration file or the topology string.</li>
29 <li>netjail_exec.sh: A script to run some command in a specific namespace. This script takes eight arguments. The first is the index of a node in a namespace for which we like to execute a command. The second is the index of the namespace of the node. The third is the command to execute, the fourth is the number of subnets, the fifth the number of nodes in each subnet, the sixth is the identifier used by the <a href="https://www.man7.org/linux/man-pages/man8/ip-netns.8.html">ip-netns</a> command, the sixth is a flag is the topology information is given via a topology file of a string containing the topology information..</li>
30 <li>netjail_stop.sh: A script which remove all the network namespace setup by netjail_start.sh. The arguments are the same as those for netjail_start.sh.</li>
31 </ul>
32
33 The is a generic test binary (test_transport_start_with_config) which will start the above mentioned scripts. Because creating network namespaces is only permitted for privileged users the generic test binary is not start directly, but via scripts. This script starts the generic binary using the command unshare. Using unshare one can create a namespace with its own user namespace, where creating network namespaces is allowed. Precondition to do this with unshare, is to set the kernel.unprivileged_userns_clone kernel parameter.
34 {% endtrans %}
35 </p>
36 </section>
37
38 <h4><a name="cmdhelper" class="subnav-anchor"></a>{{ _("CMD helper and testcase plugins") }}</h4>
39
40 <section>
41 <p>
42 {% trans %}
43 Although netjail_exec.sh can execute an arbitrary command in the ng testing framework a special command is used: gnunet-cmds-helper
44 This commands itself is of a special kind named helper processes which communicates via GNUNET_MessageHeaders on stdin/stdout with the process that started the helper. The gnunet-cmds-helper is used to load testcase plugins. Those plugins are implementations of an api which is used to start different test cases. Those plugins are dynamically loaded by gnunet-cmds-helper. Each plugin defines the commands which are running in a local interpreter loop started by the helper on that specific network namespace node. The plugins are also responsible for the communication via the helper with the master interpreter loop.
45 {% endtrans %}
46 </p>
47 </section>
48 <h4><a name="cmdpattern" class="subnav-anchor"></a>{{ _("Command Pattern") }}</h4>
49
50 <section>
51 <p>
52 {% trans %}
53 The testing framework borrowed from the <a href="https://docs.taler.net/developers-manual.html#testing-library">GNU Taler testing library</a> was extended to handle asychronous commands. Therefore a struct GNUNET_TESTING_AsyncContext was added to struct GNUNET_TESTING_Command. By default the continuation function of GNUNET_TESTING_AsyncContext is the interpreter_next function of the interpreter loop (blocking asynchronous command) which will be executed calling GNUNET_TESTING_async_finish, when the asynchronous task finished, but also can be any other function to be executed when the asynchronous task is non blocking.
54 {% endtrans %}
55 </p>
56 </section>
57 <h4><a name="cmdpattern" class="subnav-anchor"></a>{{ _("Topology Configuration") }}</h4>
58
59 <section>
60 <p>
61 {% trans %}
62 The topology of the netjail setup can be configured via a configuration file, or with a configuration string handed over to the generic binary for starting netjail based tests.</br></br>
63
64Both method can be examined in two example test scripts</br></br>
65
66test_transport_send_simple.sh</br></br>
67
68and</br></br>
69
70test_transport_send_simple_string.sh</br></br>
71
72The Syntax of the configuration is as follows.</br></br>
73
74The configuration string is structured by lines and the delimiter ':' used for seperating key/value(s) pairs and the chars '{' and '}' for grouping several key/value pairs as value and '|' to separate a group of values from the key/value(s) pair identifying a line.</br></br>
75
76Keys are</br></br>
77
78<table width="100%">
79 <tr>
80 <td width="10%" style="vertical-align: top;">M</td><td width="90%" style="vertical-align: top;">The number of natted subnets in the topology.</td>
81 </tr>
82 <tr>
83 <td></td><td> </td>
84 </tr>
85 <tr>
86 <td width="10%" style="vertical-align: top;">N</td><td width="90%" style="vertical-align: top;">The number of nodes in each subnet.</td>
87 </tr>
88 <tr>
89 <td></td><td> </td>
90 </tr>
91 <tr>
92 <td width="10%" style="vertical-align: top;">X</td><td width="90%" style="vertical-align: top;">The Number of globally known (not natted) nodes.</td>
93 </tr>
94 <tr>
95 <td></td><td> </td>
96 </tr>
97 <tr>
98 <td width="10%" style="vertical-align: top;">K</td><td width="90%" style="vertical-align: top;"> A globally known (not natted) node. The number value identifies the node.</td>
99 </tr>
100 <tr>
101 <td></td><td> </td>
102 </tr>
103 <tr>
104 <td width="10%" style="vertical-align: top;">T</td><td width="90%" style="vertical-align: top;">The default test plugin to execute.</td>
105 </tr>
106 <tr>
107 <td></td><td> </td>
108 </tr>
109 <tr>
110 <td width="10%" style="vertical-align: top;">R</td><td width="90%" style="vertical-align: top;">A router of a subnet.</td>
111 </tr>
112 <tr>
113 <td></td><td> </td>
114 </tr>
115 <tr>
116 <td width="10%" style="vertical-align: top;">P</td><td width="90%" style="vertical-align: top;">A subnet node with two key values, the first one for identifying the subnet and the second for identifying the node in the subnet.</td>
117 </tr>
118 <tr>
119 <td></td><td> </td>
120 </tr>
121 <tr>
122 <td width="10%" style="vertical-align: top;">connect</td><td width="90%" style="vertical-align: top;">Can be one of several grouped values of the P, K or R key. Configuring a connection to another node. </br></br>
123
124 The value of the connect key is a node key (P or K) with two resp. one number value identifying the node, and an additional value
125 configuring a protocol. </br></br>
126
127 If the connect key is used in a line configuring a node it is used to configure a connection, which will result in the node identified by the
128 line P or K key will try to connect nodes also identified with the P or K key via the configured protocol.</td>
129 </tr>
130 <tr>
131 <td></td><td> </td>
132 </tr>
133 <tr>
134 <td width="10%" style="vertical-align: top;">tcp_port</td><td width="90%" style="vertical-align: top;">Can be a grouped value of the R key. The value of the tcp_port can be 0 or 1, if a port forwarding to the first (index 1) node of a subnet is not or is configured for the
135 tcp protocol.</td>
136 </tr>
137 <tr>
138 <td></td><td> </td>
139 </tr>
140 <tr>
141 <td width="10%" style="vertical-align: top;">udp_port</td><td width="90%" style="vertical-align: top;">Can be a grouped value of the R key. The value of the tcp_port can be 0 or 1, if a port forwarding to the first (index 1) node of a subnet is not or is configured for the
142 udp protocol.</td>
143 </tr>
144 <tr>
145 <td></td><td> </td>
146 </tr>
147 <tr>
148 <td width="10%" style="vertical-align: top;">plugin</td><td width="90%" style="vertical-align: top;">Can be a grouped value of the P or K key. The value is the name of a plugin which will run on that peer instead of the default plugin defined by key K.</td>
149 </tr>
150 </table>
151 {% endtrans %}
152 </p>
153 </section>
154 </div>
155 </div>
156
157</article>
158{% endblock body_content %} \ No newline at end of file