diff options
Diffstat (limited to 'template/l2o/index.html.j2')
-rw-r--r-- | template/l2o/index.html.j2 | 215 |
1 files changed, 215 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 | |||
184 | I 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 | |||
186 | I 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 %} | ||