diff options
author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-10-06 21:10:46 +0200 |
---|---|---|
committer | Dimitri Staessens <dimitri@ouroboros.rocks> | 2019-10-06 21:10:46 +0200 |
commit | 568553394d0a8b34668a75c9839a0f1f426469b2 (patch) | |
tree | 175c08844f05611b059ba6900fb6519dbbc735d2 /content | |
parent | d5d6f70371958eec0679831abd283498ff2731e5 (diff) | |
download | website-568553394d0a8b34668a75c9839a0f1f426469b2.tar.gz website-568553394d0a8b34668a75c9839a0f1f426469b2.zip |
theme: Switch to docsy theme
Diffstat (limited to 'content')
64 files changed, 472 insertions, 568 deletions
diff --git a/content/_index.md b/content/_index.md deleted file mode 100644 index 6a9d306..0000000 --- a/content/_index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "A completely decentralized packet network" -date: 2019-06-22 -draft: false ---- - -Ouroboros is a __peer-to-peer transport network__ built on a new -__recursive network paradigm__ according to a __UNIX design -philosphy__. The aim is to provide a __secure__ and __private__ -networking experience and to __simplify writing distributed software__ -and networked application libraries. Ouroboros provides a __very -compact API__ for both __unicast__ and __multicast__ -communication. All protocols carry minimal information in their -headers (to minimize potential attack vectors), with easy-to-enable -__encryption__. - -Ouroboros was originally started at [imec](https://www.imec-int.com) -under its Future Internet research, and is [free -software](https://www.fsf.org/about/what-is-free-software). We -introduced the project at [FOSDEM 2018] -(https://www.fosdem.org/2018/schedule/event/ipc/). - -This new website is still __under construction__. diff --git a/content/about/_index.md b/content/about/_index.md deleted file mode 100644 index 1489631..0000000 --- a/content/about/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: About -date: 2019-06-22 -type: page -draft: false ---- diff --git a/content/about/about.md b/content/about/about.md deleted file mode 100644 index 5a97f85..0000000 --- a/content/about/about.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: "About" -draft: false -date: 2019-08-02 ---- - -The Ouroboros project is a decentralized packet network implementation -started by Sander Vrijders and Dimitri Staessens. It stems from our -deep interest in computer networks, trying to solve some long standing -problems in IP networks such as achieving clean fragmentation, routing -scalability, efficient congestion control and simple -multicast. Instead of trying to tackle these issues in isolation, we -subscribe to the view that the entire TCP/IP design is *fundamentally* -broken, and a holistic approach is needed to build efficient packet -networks. - -In addition, a lot of the design is inspired by Edward Snowdens -revelations and his call to [drastically improve end-user security and -privacy](https://www.theatlantic.com/politics/archive/2014/05/edward-snowdens-other-motive-for-leaking/370068/) -on the internet. - -### Licenses - -Ouroboros is [free -software](https://www.gnu.org/philosophy/free-sw.html). The libraries -are available under the [GNU Lesser Public License (LGPL) version -2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html). The -daemons are available under the [GNU Public License (GPL) version -2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html). The tools -are availabe under the [3-Clause BSD -License](https://opensource.org/licenses/BSD-3-Clause). - -Ouroboros logos © Dimitri Staessens. All Rights Reserved. - -### Disclaimer - -Ouroboros is distributed in the hope that it will be useful, but without -any warranty; without even the implied warranty of merchantability or -fitness for a particular purpose. - -At present, Ouroboros should be considered an advanced research -prototype. diff --git a/content/about/contribute.md b/content/about/contribute.md deleted file mode 100644 index 5dbe7ad..0000000 --- a/content/about/contribute.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Contact -date: 2019-06-22 -draft: false ---- - -General discussion and support ------------------------------- - -For general discussion of Ouroboros, -[subscribe](https://www.freelists.org/list/ouroboros) to our mailing -list: [ouroboros@freelists.org](mailto:ouroboros@freelists.org). - -For day-to-day discussions, join our IRC chat: -[\#ouroboros](irc://irc.freenode.net/ouroboros). - -Contact us on twitter: @ODecentralize - -Contributing code ------------------ - -Contributions should be sent as patches to the mailing list, using your -real name and real e-mail address. - -The git repository contains three branches: - -- master: Contains the most stable version of Ouroboros. -- testing: Contains tested code but may still contain bugs. -- be: Contains untested but compiling code. - -New development is done against the 'be' branch of the git repository. -The testing and master branches take only bugfixes. - -Bug reporting -------------- - -Please report all bugs [here](/bugzilla). When reporting a bug, please -do the following: - -1. Provide a description of the bug. How did you get it and which - version of Ouroboros were you using? Which Operating System are you - on? -2. Provide as much technical information as possible (system logs, - debug traces, \...). -3. If possible, provide a minimal code example to reproduce the bug. -4. If you can provide a bugfix, provide it against the HEAD of the most - stable branch where the bug is present and send the patch to the - mailing list. - -Todo list ---------- - -We are currently looking for - -- Testing and bugfixing. -- Integration testing for the build system beyond the "make check" - unit tests. -- People that are interested in setting up some nodes to establish a - global testing layer. -- Non-blocking flow allocation: Allow specifying a {0, 0} timespec to - return immediately and use fevent() to know when the flow is ready - (or allocation failed). -- Asynchronous IPC over the UNIX sockets. For each command to the - IRMd, we create a UNIX socket, send the request and wait for the - response. This could be changed so that there is only a single UNIX - socket that is used for all messaging. This would simplify parallel - querying of the IPCPs and speed up flow allocation. The far-future - option is to ditch UNIX sockets and bootstrap Ouroboros local IPC - over itself. -- ECDH-AES encryption using libssl and/or libgcrypt. The goal is to - support both libraries so that we have a fallback should major bugs - be discovered in one of them. -- Customized packet serialization to remove the dependency on Google - Protocol Buffers. We like GPB, but it's not perfect. Importing - .proto files may give rise to multiple definitions and we found no - way to solve that. -- Caching for the DHT. -- Cross-compilation to OpenWRT (musl). -- Ported applications! If you want to add native Ouroboros support for - your applications, just let us know and we will help you out! diff --git a/content/contact/contribute.md b/content/contact/contribute.md deleted file mode 100644 index 0c2a2e6..0000000 --- a/content/contact/contribute.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Contribute" -date: 2019-06-22 -draft: false ---- - -General discussion and support ------------------------------- - -For general discussion of Ouroboros, -[subscribe](https://www.freelists.org/list/ouroboros) to our mailing -list: [ouroboros@freelists.org](mailto:ouroboros@freelists.org). - -For day-to-day discussions, join our IRC chat: -[\#ouroboros](irc://irc.freenode.net/ouroboros). - -Contact us on twitter: @ODecentralize - -Contributing code ------------------ - -Contributions should be sent as patches to the mailing list, using your -real name and real e-mail address. - -The git repository contains three branches: - -- master: Contains the most stable version of Ouroboros. -- testing: Contains tested code but may still contain bugs. -- be: Contains untested but compiling code. - -New development is done against the 'be' branch of the git repository. -The testing and master branches take only bugfixes. - -Bug reporting -------------- - -Please report all bugs [here](/bugzilla). When reporting a bug, please -do the following: - -1. Provide a description of the bug. How did you get it and which - version of Ouroboros were you using? Which Operating System are you - on? -2. Provide as much technical information as possible (system logs, - debug traces, \...). -3. If possible, provide a minimal code example to reproduce the bug. -4. If you can provide a bugfix, provide it against the HEAD of the most - stable branch where the bug is present and send the patch to the - mailing list. - -Todo list ---------- - -We are currently looking for - -- Testing and bugfixing. -- Integration testing for the build system beyond the "make check" - unit tests. -- People that are interested in setting up some nodes to establish a - global testing layer. -- Non-blocking flow allocation: Allow specifying a {0, 0} timespec to - return immediately and use fevent() to know when the flow is ready - (or allocation failed). -- Asynchronous IPC over the UNIX sockets. For each command to the - IRMd, we create a UNIX socket, send the request and wait for the - response. This could be changed so that there is only a single UNIX - socket that is used for all messaging. This would simplify parallel - querying of the IPCPs and speed up flow allocation. The far-future - option is to ditch UNIX sockets and bootstrap Ouroboros local IPC - over itself. -- ECDH-AES encryption using libssl and/or libgcrypt. The goal is to - support both libraries so that we have a fallback should major bugs - be discovered in one of them. -- Customized packet serialization to remove the dependency on Google - Protocol Buffers. We like GPB, but it's not perfect. Importing - .proto files may give rise to multiple definitions and we found no - way to solve that. -- Caching for the DHT. -- Cross-compilation to OpenWRT (musl). -- Ported applications! If you want to add native Ouroboros support for - your applications, just let us know and we will help you out! diff --git a/content/docs/_index.md b/content/docs/_index.md deleted file mode 100644 index f2a842a..0000000 --- a/content/docs/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Documentation -date: 2019-06-22 -type: page -draft: false ---- diff --git a/content/docs/development/_index.md b/content/docs/development/_index.md deleted file mode 100644 index 0a5257f..0000000 --- a/content/docs/development/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Development -date: 2019-06-22 -#description: Ouroboros development blog -draft: false ---- diff --git a/content/docs/documentation.md b/content/docs/documentation.md deleted file mode 100644 index f48e03c..0000000 --- a/content/docs/documentation.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "Documentation" -date: 2019-06-22 -type: page -draft: false ---- - -# Getting started - -* [Requirements](/requirements/) -* [Download Ouroboros](/download/) -* [Installing Ouroboros](/install/) -* [Compilation options](/compopt/) - -# User tutorials - -These tutorials will be kept up-to-date for the latest version of -Ouroboros. Check the version that is installed on your system using: - -``` -$ irmd --version -``` - -The output shown in the tutorials uses a [*debug*](/compopt) build -of Ouroboros, with FUSE installed and IPCP\_FLOW\_STATS enabled to show -some additional details of what is happening. - -* [Tutorial 1: Local test](/tutorial-1/) -* [Tutorial 2: Adding a layer](/tutorial-2/) -* [Tutorial 3: IPCP statistics](/tutorial-3/) -* [Tutorial 4: Connecting two machines over Ethernet](/tutorial-4/) - -# Developer tutorials - -* [Developer tutorial 1: Writing your first Ouroboros C program](/dev-tut-1/) - -# Extra info - -* [Manual pages](/manuals/) -* [Frequently Asked Questions (FAQ)](/faq/) -* [Performance tests](/performance/) diff --git a/content/docs/manuals.md b/content/docs/manuals.md deleted file mode 100644 index 4ce3bce..0000000 --- a/content/docs/manuals.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Manuals" -date: 2019-06-22 -draft: false ---- - -These are the man pages for ouroboros. If ouroboros is installed on your -system, you can also access them using "man". - -For general use of Ouroboros, refer to the [Ouroboros User -Manual](/man/man8/ouroboros.8.html). - -For use of the API, refer to the [Ouroboros Programmer's -Manual](/man/man3/flow_alloc.3.html). - -The man section also contains a -[tutorial](man/man7/ouroboros-tutorial.7.html) and a -[glossary](man/man7/ouroboros-glossary.7.html). diff --git a/content/docs/performance.md b/content/docs/performance.md deleted file mode 100644 index 5cd2dc0..0000000 --- a/content/docs/performance.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: "Performance tests" -date: 2019-06-22 -draft: false ---- - -Below you will find some measurements on the performance of Ouroboros. - -### Local IPC performance test - -This test uses the *oping* tool to measure round trip time. This tools -generates traffic from a single thread. The server has a single thread -that handles ping requests and sends responses. - -``` -$ oping -n oping -i 0 -s <sdu size> -``` - -The figure below shows the round-trip-time (rtt) in milliseconds (ms) -for IPC over a local layer for different packet sizes, measured on an -Intel Core i7 4500U (2 cores @ 2.4GHz). For small payloads (up to 1500 -bytes), the rtt is quite stable at around 30 µs. This will mostly depend -on CPU frequency and to a lesser extent the OS scheduler. - -![Ouroboros local rtt](/images/avgrttlocal.png) - -This test uses the *ocbr* tool to measure goodput between a sender and -receiver. The sender generates traffic from a single thread. The -receiver handles traffic from a single thread. The performance will -heavily depend on your system's memory layout (cache sizes etc). This -test was run on a Dell XPS13 9333 (2013 model). - -``` -$ ocbr -n ocbr -f -s <sdu size> -``` - -![Ouroboros local pps](/images/throughputlocalpps.png) - -The goodput (Mb/s) is shown below: - -![ouroboros local mbits](/images/goodputlocalmbits.png) - -### Ethernet + Normal test - -This connects 2 machines over a Gb LAN using the eth-dix and a normal -layer. The oping server is registered in the dix as oping.dix and in the -normal as oping.normal. The machines (dual-socket Intel Xeon E5520) are -connected over a non-blocking switch. - -Latency test: - -ICMP ping: - -``` ---- 192.168.1.2 ping statistics --- -1000 packets transmitted, 1000 received, 0% packet loss, time 65ms -rtt min/avg/max/mdev = 0.046/0.049/0.083/0.002 ms, ipg/ewma 0.065/0.049 ms -``` - -oping over eth-dix: - -``` ---- oping.dix ping statistics --- -1000 SDUs transmitted, 1000 received, 0% packet loss, time: 66.142 ms -rtt min/avg/max/mdev = 0.098/0.112/0.290/0.010 ms -``` - -oping over eth-normal: - -``` ---- oping.normal ping statistics --- -1000 SDUs transmitted, 1000 received, 0% packet loss, time: 71.532 ms -rtt min/avg/max/mdev = 0.143/0.180/0.373/0.020 ms -```
\ No newline at end of file diff --git a/content/docs/quickstart.md b/content/docs/quickstart.md deleted file mode 100644 index a1bb44b..0000000 --- a/content/docs/quickstart.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: "Quick Start" -linktitle: "Quick Start" -date: 2019-06-22 -type: page -draft: false -description: "Quick Start Guide" ---- - - -This quickstart guide is under construction.
\ No newline at end of file diff --git a/content/docs/tutorials/_index.md b/content/docs/tutorials/_index.md deleted file mode 100644 index b35d0b8..0000000 --- a/content/docs/tutorials/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Ouroboros Tutorials" -date: 2019-06-22 -draft: false ----
\ No newline at end of file diff --git a/content/download/_index.md b/content/download/_index.md deleted file mode 100644 index f7cd806..0000000 --- a/content/download/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Download Ouroboros -date: 2019-06-22 -type: page -draft: false ---- diff --git a/content/en/_index.html b/content/en/_index.html new file mode 100644 index 0000000..223a56c --- /dev/null +++ b/content/en/_index.html @@ -0,0 +1,35 @@ ++++ +title = "Ouroboros" +linkTitle = "Ouroboros" + ++++ + +{{< blocks/cover title="Ouroboros" image_anchor="top" color="primary" >}} +<div class="mx-auto"> + <a class="btn btn-lg btn-primary mr-3 mb-4" href="{{< relref "/docs" >}}"> + Learn More <i class="fas fa-arrow-alt-circle-right ml-2"></i> + </a> + <a class="btn btn-lg btn-secondary mr-3 mb-4" href="https://ouroboros.rocks/cgit/ouroboros"> + Download <i class="fab fa-git ml-2 "></i> + </a> + <p class="lead mt-5">Decentralized packet networking rebuilt + from the ground up</p> + <div class="mx-auto mt-5"> + {{< blocks/link-down color="info" >}} + </div> +</div> +{{< /blocks/cover >}} + + + {{% blocks/lead color="secondary" %}} + + Ouroboros is a <b>peer-to-peer transport network</b> built on a new + <b>recursive network paradigm</b> according to a <b>UNIX design + philosphy</b>. The aim is to provide a <b>secure and private + networking</b> experience and to provide a simple API for writing + distributed software and networked application libraries. Ouroboros + provides a very compact API for both <b>unicast and multicast</b> + communications. All protocols carry <b>minimal header + information</b>, with easy-to-enable <b>encryption</b>. + + {{% /blocks/lead %}} diff --git a/content/en/about/_index.html b/content/en/about/_index.html new file mode 100644 index 0000000..33894bd --- /dev/null +++ b/content/en/about/_index.html @@ -0,0 +1,48 @@ +--- +title: About Ouroboros +linkTitle: About +menu: + main: + weight: 70 + +--- + + +{{< blocks/cover title="About Ouroboros" image_anchor="bottom" height="min" >}} + +<p class="lead mt-5">A decentralized packet network</p> + +{{< /blocks/cover >}} + +{{% blocks/lead %}} + +Ouroboros stems from our deep interest in computer networks, tackling +some long standing problems in IP networks such as achieving clean +fragmentation, routing scalability, efficient congestion control and +simple multicast. Instead of trying to tackle these issues in +isolation, we subscribe to the view that the entire TCP/IP design is +*fundamentally* broken, and a holistic approach is needed to build +efficient packet networks. + +{{% /blocks/lead %}} + + +{{< blocks/section >}} + +Ouroboros is <a href="https://www.gnu.org/philosophy/free-sw.html">**free +software**.</a>. The libraries are available under +the <a href="https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">**GNU +Lesser Public License (LGPL) version 2.1**.</a> The daemons are +available under +the <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.html">**GNU +Public License (GPL) version 2**.</a> The tools are availabe under +the <a href="https://opensource.org/licenses/BSD-3-Clause">**3-Clause +BSD License**</a> + +Background image sourced from + +Ouroboros is distributed in the hope that it will be useful, but +without any warranty; without even the implied warranty of +merchantability or fitness for a particular purpose. + +{{< /blocks/section >}} diff --git a/content/en/about/featured-background.jpg b/content/en/about/featured-background.jpg Binary files differnew file mode 100644 index 0000000..0736db2 --- /dev/null +++ b/content/en/about/featured-background.jpg diff --git a/content/en/blog/_index.md b/content/en/blog/_index.md new file mode 100644 index 0000000..43820eb --- /dev/null +++ b/content/en/blog/_index.md @@ -0,0 +1,13 @@ +--- +title: "Docsy Blog" +linkTitle: "Blog" +menu: + main: + weight: 30 +--- + + +This is the **blog** section. It has two categories: News and Releases. + +Files in these directories will be listed in reverse chronological order. + diff --git a/content/en/blog/developer/_index.md b/content/en/blog/developer/_index.md new file mode 100644 index 0000000..0e01249 --- /dev/null +++ b/content/en/blog/developer/_index.md @@ -0,0 +1,5 @@ +--- +title: "Developer blogs" +linkTitle: "Developer" +weight: 30 +--- diff --git a/content/en/blog/developer/dimitri-2019-10-06.md b/content/en/blog/developer/dimitri-2019-10-06.md new file mode 100644 index 0000000..f69210e --- /dev/null +++ b/content/en/blog/developer/dimitri-2019-10-06.md @@ -0,0 +1,9 @@ +--- +date: 2019-10-06 +title: "Creating the developer blogs" +linkTitle: "Test post" +description: "Testing the dev blog" +author: Dimitri Staessens +--- + +Test post
\ No newline at end of file diff --git a/content/en/blog/news/20191006-new-site.md b/content/en/blog/news/20191006-new-site.md new file mode 100644 index 0000000..c04ff2d --- /dev/null +++ b/content/en/blog/news/20191006-new-site.md @@ -0,0 +1,7 @@ +--- +date: 2019-10-06 +title: "New Website" +linkTitle: "New Ouroboros website" +description: "Announcing the new website" +author: Dimitri Staessens +--- diff --git a/content/en/blog/news/_index.md b/content/en/blog/news/_index.md new file mode 100644 index 0000000..c10cfa2 --- /dev/null +++ b/content/en/blog/news/_index.md @@ -0,0 +1,5 @@ +--- +title: "News About Docsy" +linkTitle: "News" +weight: 20 +--- diff --git a/content/en/blog/releases/_index.md b/content/en/blog/releases/_index.md new file mode 100644 index 0000000..b1d9eb4 --- /dev/null +++ b/content/en/blog/releases/_index.md @@ -0,0 +1,8 @@ + +--- +title: "New Releases" +linkTitle: "Releases" +weight: 20 +--- + + diff --git a/content/en/blog/releases/upcoming.md b/content/en/blog/releases/upcoming.md new file mode 100644 index 0000000..f984380 --- /dev/null +++ b/content/en/blog/releases/upcoming.md @@ -0,0 +1,7 @@ +--- +date: 2019-10-06 +title: "Plans for 0.16" +linkTitle: "Ouroboros 0.16" +description: "Ouroboros 0.16" +author: Dimitri Staessens +--- diff --git a/content/en/community/_index.md b/content/en/community/_index.md new file mode 100644 index 0000000..cdade16 --- /dev/null +++ b/content/en/community/_index.md @@ -0,0 +1,8 @@ +--- +title: Community +menu: + main: + weight: 40 +--- + +<!--add blocks of content here to add more sections to the community page --> diff --git a/content/en/docs/Concepts/_index.md b/content/en/docs/Concepts/_index.md new file mode 100644 index 0000000..ea9b33c --- /dev/null +++ b/content/en/docs/Concepts/_index.md @@ -0,0 +1,12 @@ +--- +title: "Concepts" +linkTitle: "Concepts" +weight: 40 +description: > + The concepts underpinning recursive networks in general + and Ouroboros in particular. +--- + +{{% pageinfo %}} +Under construction, subpages are accessible. +{{% /pageinfo %}} diff --git a/content/en/docs/Concepts/aschenbrenner.png b/content/en/docs/Concepts/aschenbrenner.png Binary files differnew file mode 100644 index 0000000..b9b11f6 --- /dev/null +++ b/content/en/docs/Concepts/aschenbrenner.png diff --git a/content/en/docs/Concepts/creating_layers.jpg b/content/en/docs/Concepts/creating_layers.jpg Binary files differnew file mode 100644 index 0000000..fe60019 --- /dev/null +++ b/content/en/docs/Concepts/creating_layers.jpg diff --git a/content/en/docs/Concepts/dependencies.jpg b/content/en/docs/Concepts/dependencies.jpg Binary files differnew file mode 100644 index 0000000..eaa9e79 --- /dev/null +++ b/content/en/docs/Concepts/dependencies.jpg diff --git a/content/docs/elements.md b/content/en/docs/Concepts/elements.md index e84bcfc..bfc7fab 100644 --- a/content/docs/elements.md +++ b/content/en/docs/Concepts/elements.md @@ -1,10 +1,10 @@ --- title: "Elements of a recursive network" author: "Dimitri Staessens" -description: "what" date: 2019-07-11 -#type: page -draft: false +weight: 2 +description: > + The building blocks for recursive networks. --- This section describes the high-level concepts and building blocks are @@ -32,7 +32,7 @@ Laboratories and was taken over in the RINA architecture. These IPCPs implement the core functionalities (such as routing, a dictionary) and can be seen as small virtual routers for the recursive network. -<center> {{<figure class="w-200" src="/images/rec_netw.jpg">}} </center> +{{<figure width="60%" src="/docs/concepts/rec_netw.jpg">}} In the illustration, a small 5-node recursive network is shown. It consists of two hosts that connect via edge routers to a small core. @@ -79,7 +79,7 @@ IPCPs: __F3__ --> __C2__ --> __C1__ --> __F1__ --> __D2__ --> __A1__ --> __A2__ --> __D1__ --> __B1__ --> __B2__ --> __D3__ --> __F2__ --> __E1__ --> __E2__ --> __F4__. -<center> {{<figure class="w-200" src="/images/dependencies.jpg">}} </center> +{{<figure width="40%" src="/docs/concepts/dependencies.jpg">}} A recursive network has __dependencies__ between layers in the network, and between IPCPs in a __system__. These dependencies can be @@ -89,8 +89,6 @@ not directly or indirectly depend on itself). The rank of a layer is defined (either locally or globally) as the maximum depth of this layer in the DAG. -[Next: Creating layers](/docs/irmd/) - --- Changelog: diff --git a/content/en/docs/Concepts/layers.jpg b/content/en/docs/Concepts/layers.jpg Binary files differnew file mode 100644 index 0000000..5d3020c --- /dev/null +++ b/content/en/docs/Concepts/layers.jpg diff --git a/content/docs/irmd.md b/content/en/docs/Concepts/layers.md index f6b60bd..e7c1441 100644 --- a/content/docs/irmd.md +++ b/content/en/docs/Concepts/layers.md @@ -1,10 +1,13 @@ --- -title: "Creating layers" +title: "Recursive layers" author: "Dimitri Staessens" -description: "IRMd" +#description: "IRMd" date: 2019-07-23 +weight: 20 #type: page draft: false +description: > + How to build a recursive network. --- The most important structure in recursive networks are the layers, @@ -13,10 +16,7 @@ Inter-Process Communication Processes (IPCPs). (Note again that the layers in recursive networks are not the same as layers in the OSI model). -<center> -{{<figure class="fl w-90" - src="/images/creating_layers.jpg">}} -</center> +{{<figure width="50%" src="/docs/concepts/creating_layers.jpg">}} Now, the question is, how do we build these up these layers? IPCPs are small programs (think of small virtual routers) that need to be diff --git a/content/docs/protocols.md b/content/en/docs/Concepts/protocols.md index 571ba98..16c72cb 100644 --- a/content/docs/protocols.md +++ b/content/en/docs/Concepts/protocols.md @@ -1,10 +1,12 @@ --- -title: "Ouroboros packet network protocols" +title: "The protocols" author: "Dimitri Staessens" -description: "protocols" +#description: protocols date: 2019-09-06 #type: page draft: false +description: > + A brief introduction to the main protocols. --- # Network protocol @@ -28,18 +30,19 @@ As Ouroboros tries to preserve privacy as much as possible, it has an The 5 fields in the Ouroboros network protocol are: -* Destination address: This specifies the address to forward the +* **Destination address**: This specifies the address to forward the packet to. The width of this field is configurable based on various preferences and the size of the envisioned network. The Ouroboros default is 64 bits. Note that there is _no source address_, this is agreed upon during _flow allocation_. -* Time-to-Live: Similar to IPv4 and IPv6 (where this field is called - Hop Limit), this ensures that packets don't get forwarded forever in - the network, for instance due to (transient) loops in the forwarding - path. The Ouroboros default for the width is one octet (byte). +* **Time-to-Live**: Similar to IPv4 and IPv6 (where this field is called + Hop Limit), this is decremented at each hop to ensures that packets + don't get forwarded forever in the network, for instance due to + (transient) loops in the forwarding path. The Ouroboros default for + the width is one octet (byte). -* QoS: Ouroboros supports Quality of Service via a number of methods +* **QoS**: Ouroboros supports Quality of Service via a number of methods (out of scope for this page), and this field is used to prioritize scheduling of the packets when forwarding. For instance, if the network gets congested and queues start filling up, higher priority @@ -47,14 +50,14 @@ The 5 fields in the Ouroboros network protocol are: priority packets (e.g. a file download). By default this field takes one octet. -* ECN: This field specifies Explicit Congestion Notification (ECN), +* **ECN**: This field specifies Explicit Congestion Notification (ECN), with similar intent as the ECN bits in the Type-of-Service field in IPv4 / Traffic Class field in IPv6. The Ouroboros ECN field is by default one octet wide, and its value is set to an increasing value as packets are queued deeper and deeper in a congested routers' forwarding queues. Ouroboros enforces Forward ECN (FECN). -* EID: The Endpoint Identifier (EID) field specified the endpoint for +* **EID**: The Endpoint Identifier (EID) field specified the endpoint for which to deliver the packet. The width of this field is configurable (the figure shows 16 bits). The values of this field is chosen by the endpoints, usually at _flow allocation_. It can be thought of as @@ -82,35 +85,46 @@ Control Protocol_, FRCP) has only 4 fields: ``` -* Flags: There are 7 flags defined for FRCP. +* **Flags**: There are 7 flags defined for FRCP. - - DATA: Indicates that the packet is carrying data (allows for 0 - length data). + - **DATA**: Indicates that the packet is carrying data (this allows + for 0 length data). - - DRF : Data Run Flag, indicates that there are no unacknowledged + - **DRF** : Data Run Flag, indicates that there are no unacknowledged packets in flight for this connection. - - ACK : Indicates that this packet carries an acknowledgment. - - FC : Indicates that this packet updates the flow control window. - - RDVZ: Rendez-vous, this is used to break a zero-window deadlock + - **ACK** : Indicates that this packet carries an acknowledgment. + - **FC** : Indicates that this packet updates the flow control window. + - **RDVZ**: Rendez-vous, this is used to break a zero-window deadlock that can arise when an update to the flow control window gets lost. RDVZ packets must be ACK'd. - - FFGM: First Fragment, this packet contains the first fragment of + - **FFGM**: First Fragment, this packet contains the first fragment of a fragmented payload. - - MFGM: More Fragments, this packet is not the last fragment of a + - **MFGM**: More Fragments, this packet is not the last fragment of a fragmented payload. -* Window: This updates the flow control window. +* **Window**: This updates the flow control window. -* Sequence Number: This is a monotonically increasing sequence number +* **Sequence Number**: This is a monotonically increasing sequence number used to (re)order the packets at the receiver. -* Acknowledgment Number: This is set by the receiver to indicate the +* **Acknowledgment Number**: This is set by the receiver to indicate the highest sequence number that was received in order. ---- -Changelog: +# Operation + +The operation of the transport protocol is based on the [Delta-t +protocol]((https://www.osti.gov/biblio/5542785-delta-protocol-specification-working-draft)), +which is a timer-based protocol that is a bit simpler in operation +than the equivalent functionalities in TCP. In contrast with TCP/IP, +Ouroboros does congestion control purely in the network protocol, and +fragmentation and flow control purely in the transport protocol. + + + + +--- Changelog: 2019 09 05: Initial version.<br> 2019 09 06: Added section on transport protocol.
\ No newline at end of file diff --git a/content/en/docs/Concepts/rec_netw.jpg b/content/en/docs/Concepts/rec_netw.jpg Binary files differnew file mode 100644 index 0000000..bddaca5 --- /dev/null +++ b/content/en/docs/Concepts/rec_netw.jpg diff --git a/content/docs/what.md b/content/en/docs/Concepts/what.md index b30b17c..bacd4d6 100644 --- a/content/docs/what.md +++ b/content/en/docs/Concepts/what.md @@ -1,18 +1,15 @@ --- title: "What is a recursive network?" author: "Dimitri Staessens" -description: "what" + date: 2019-07-06 -#type: page -draft: false +weight: 1 +description: > + Introduction to recursive networks. --- # The current networking paradigm - -<center> {{<figure -class="w-80" -src="/images/aschenbrenner.png">}} -</center> +{{<figure width="40%" src="/docs/concepts/aschenbrenner.png">}} Every computer science class that deals with networks explains the [7-layer OSI model](https://www.bmc.com/blogs/osi-model-7-layers/). @@ -128,10 +125,7 @@ such as *open root* or *namecoin*). For Ethernet, the Address Resolution Protocol maps a higher layer name to a MAC (hardware) address. -<center> -{{<figure class="fl w-90" - src="/images/layers.jpg">}} -</center> +{{<figure width="50%" src="/docs/concepts/layers.jpg">}} Recursive networks take all these functions to be part of a network layer, and layers are mostly defined by their __scope__. The lowest diff --git a/content/en/docs/Contributions/_index.md b/content/en/docs/Contributions/_index.md new file mode 100644 index 0000000..2ab0e0a --- /dev/null +++ b/content/en/docs/Contributions/_index.md @@ -0,0 +1,11 @@ +--- +title: "Contribution Guidelines" +linkTitle: "Contribution Guidelines" +weight: 110 +description: > + How to contribute to Ouroboros +--- + +{{% pageinfo %}} +Under construction. +{{% /pageinfo %}} diff --git a/content/en/docs/Examples/_index.md b/content/en/docs/Examples/_index.md new file mode 100755 index 0000000..fb296e3 --- /dev/null +++ b/content/en/docs/Examples/_index.md @@ -0,0 +1,13 @@ + +--- +title: "Examples" +linkTitle: "Examples" +weight: 50 +date: 2017-01-05 +description: > + This is a collections of examples what can be done with ouroboros. +--- + +{{% pageinfo %}} +Under construction, subpages are available. +{{% /pageinfo %}} diff --git a/content/docs/tutorials/dev-tut-1.md b/content/en/docs/Examples/dev-1.md index ceac8b6..6a1af57 100644 --- a/content/docs/tutorials/dev-tut-1.md +++ b/content/en/docs/Examples/dev-1.md @@ -1,22 +1,25 @@ --- -title: "Developer tutorial 1: Writing your first Ouroboros C program" +title: "Writing your first Ouroboros C program" +author: "Dimitri Staessens" +date: 2019-08-31 draft: false +description: > + A simple Hello World! example. --- -This tutorial will guide you to write your first ouroboros program. It -will use the basic Ouroboros IPC Application Programming Interface. It -will has a client and a server that send a small message from the client -to the server. +Here we guide you to write your first ouroboros program. It will use +the basic Ouroboros IPC Application Programming Interface. It will has +a client and a server that send a small "Hello World!" message from +the client to the server. We will explain how to connect two applications. The server application uses the flow_accept() call to accept incoming connections and the client uses the flow_alloc() call to connect to the server. The flow_accept and flow_alloc call have the following definitions: -``` +```C int flow_accept(qosspec_t * qs, const struct timespec * timeo); -int flow_alloc(const char * dst, qosspec_t * qs, const struct -timespec * timeo); +int flow_alloc(const char * dst, qosspec_t * qs, const struct timespec * timeo); ``` On the server side, the flow_accept() call is a blocking call that will @@ -37,7 +40,7 @@ read() and write() POSIX calls. The default behaviour is that these calls will block. To release the resource, the flow can be deallocated using flow_dealloc. -``` +```C ssize_t flow_write(int fd, const void * buf, size_t count); ssize_t flow_read(int fd, void * buf, size_t count); int flow_dealloc(int fd); @@ -46,7 +49,7 @@ flow_dealloc(int fd); So a very simple application would just need a couple of lines of code for both the server and the client: -``` +```C /* server side */ char msg[BUF_LEN]; int fd = flow_accept(NULL, NULL); @@ -54,7 +57,7 @@ flow_read(fd, msg, BUF_LEN); flow_dealloc(fd); /* client side */ -char * msg = "message"; +char * msg = "Hello World!"; int fd = flow_alloc("server", NULL, NULL); flow_write(fd, msg, strlen(msg)); flow_dealloc(fd); @@ -67,7 +70,7 @@ application in the tools directory. To compile your C program from the command line, you have to link -lourobos-dev. For instance, in the Ouroboros repository, you can do -``` +```bash cd src/tools/oecho gcc -louroboros-dev oecho.c -o oecho ```
\ No newline at end of file diff --git a/content/en/docs/Extra/_index.md b/content/en/docs/Extra/_index.md new file mode 100644 index 0000000..8a405b0 --- /dev/null +++ b/content/en/docs/Extra/_index.md @@ -0,0 +1,7 @@ +--- +title: "Extra" +linkTitle: "Extra" +weight: 90 +description: > + Some extra tools and software. +--- diff --git a/content/extra/ioq3.md b/content/en/docs/Extra/ioq3.md index 718acaf..a024c7d 100644 --- a/content/extra/ioq3.md +++ b/content/en/docs/Extra/ioq3.md @@ -1,8 +1,13 @@ --- title: "ioq3" +author: "Dimitri Staessens" +date: 2019-10-06 draft: false +description: > + Added support for Ouroboros to the ioq3 game engine. --- + As a demo, we have added Ouroboros support to the [ioq3](https://github.com/ioquake/ioq3) game engine. ioq3 is a fork of ID software's [Quake III Arena GPL Source @@ -13,26 +18,26 @@ server from the client). To get the demo, first get the latest ioq3 sources: -``` +```bash $ git clone https://github.com/ioquake/ioq3.git $ cd ioq3 ``` Copy the patch via the link above, or get it via wget: -``` +```bash $ wget https://ouroboros.rocks/patches/ouroboros-ioq3.patch ``` Apply the patch to the ioq3 code: -``` +```bash $ git apply ouroboros-ioq3.patch ``` With Ouroboros installed, build the ioq3 project in standalone mode: -``` +```bash $ STANDALONE=1 make ``` @@ -46,7 +51,7 @@ OpenArena in your ioq3 build directory. Go to your build directory: -``` +```bash $ cd build/<release_dir>/ ``` @@ -55,7 +60,7 @@ zip archive (openarena-0.8.8.zip) from the [OpenArena website](http://www.openarena.ws) (or via wget) and then extract the baseoa folder: -``` +```bash $ wget http://www.openarena.ws/request.php?4 -O openarena-0.8.8.zip $ unzip -j openarena-0.8.8.zip 'openarena-0.8.8/baseoa/*' -d ./baseoa @@ -67,27 +72,27 @@ Make sure you have a local Ouroboros layer running in your system (see To test the game, start a server (replace <arch> with the correct architecture extension for your machine, eg x86_64): -``` +```bash $ ./ioq3ded.<arch> +set com_basegame baseoa +map aggressor ``` Bind the pid of the server to a name and register it in the local layer: -``` +```bash $ irm bind proc <pid> name my.ioq3.server $ irm reg name my.ioq3.server layer <your_local_layer> ``` To connect, start a client (in a different terminal): -``` +```bash $ ./ioquake3.<arch> +set com_basegame baseoa ``` When the client starts, go to the console by typing ~ (tilde) and enter the following command -``` +```bash connect -O my.ioq3.server ``` diff --git a/content/extra/raptor.md b/content/en/docs/Extra/raptor.md index 122a570..cf0f83b 100644 --- a/content/extra/raptor.md +++ b/content/en/docs/Extra/raptor.md @@ -1,6 +1,10 @@ --- title: "Raptor" +author: "Dimitri Staessens" +date: 2019-10-06 draft: false +description: > + Proof-of-concept FPGA demonstrator for Ouroboros. --- Raptor is a proof-of-concept FPGA demonstrator for running Ouroboros @@ -13,7 +17,7 @@ please contact us via the ouroboros mailing list or the IRC channel. You can clone the [raptor repository](/cgit/raptor/): -``` +```bash $ git clone http://ouroboros.rocks/git/raptor $ git clone https://ouroboros.rocks/git/raptor $ git clone git://ouroboros.rocks/raptor @@ -25,21 +29,21 @@ the FPGA design. To build and install the kernel module: -``` +```bash $ make $ sudo make install ``` You can now load/unload the raptor kernel module: -``` +```bash $ sudo modprobe raptor $ sudo rmmod raptor ``` To uninstall the module: -``` +```bash $ sudo make uninstall ``` diff --git a/content/extra/rumba.md b/content/en/docs/Extra/rumba.md index 8502f9b..5023f8e 100644 --- a/content/extra/rumba.md +++ b/content/en/docs/Extra/rumba.md @@ -1,11 +1,13 @@ --- title: "Rumba" -date: 2019-06-22 +author: "Dimitri Staessens" +date: 2019-10-06 draft: false -type: page +description: > + Small orchestration framework for deploying recursive networks. --- Rumba is an __experimentation framework__ for deploying recursive -network experiments in various network testbeds. It is developed as +network experiments in various network testbeds. It was developed as part of the [ARCFIRE](http://ict-arcfire.eu) project, and available on [gitlab](https://gitlab.com/arcfire/rumba) . diff --git a/content/docs/faq.md b/content/en/docs/Faq/_index.md index b3ac687..f5599e3 100644 --- a/content/docs/faq.md +++ b/content/en/docs/Faq/_index.md @@ -1,7 +1,10 @@ --- -title: "Frequently Asked Questions (FAQ)" +title: "FAQ" date: 2019-06-22 draft: false +description: > + Frequently Asked Questions. +weight: 85 --- Got a question that is not listed here? Just pop it on our IRC channel @@ -60,8 +63,7 @@ details and more. At this point, Ouroboros is a useable prototype. You can use it to build small deployments for personal use. There is no global Ouroboros network -yet, but if you're interested in helping us set that up, contact us on -our channel or mailing list. +yet. [[back to top](#top)] diff --git a/content/en/docs/Overview/_index.md b/content/en/docs/Overview/_index.md new file mode 100644 index 0000000..b7493af --- /dev/null +++ b/content/en/docs/Overview/_index.md @@ -0,0 +1,11 @@ +--- +title: "Overview" +linkTitle: "Overview" +weight: 10 +description: > + A bird's eye view of Ouroboros. +--- + +{{% pageinfo %}} +Under construction. +{{% /pageinfo %}} diff --git a/content/en/docs/Reference/_index.md b/content/en/docs/Reference/_index.md new file mode 100644 index 0000000..ca25348 --- /dev/null +++ b/content/en/docs/Reference/_index.md @@ -0,0 +1,11 @@ +--- +title: "Reference" +linkTitle: "Reference" +weight: 80 +description: > + Glossary and detailed information. +--- + +{{% pageinfo %}} +Under construction. <a href="/man/">Man pages</a> are available. +{{% /pageinfo %}} diff --git a/content/docs/compopt.html b/content/en/docs/Reference/compopt.html index 4c4459c..4c4459c 100644 --- a/content/docs/compopt.html +++ b/content/en/docs/Reference/compopt.html diff --git a/content/en/docs/Start/_index.md b/content/en/docs/Start/_index.md new file mode 100644 index 0000000..963b9f1 --- /dev/null +++ b/content/en/docs/Start/_index.md @@ -0,0 +1,7 @@ +--- +title: "Getting Started" +linkTitle: "Getting Started" +weight: 20 +description: > + How to get up and running with the Ouroboros prototype. +--- diff --git a/content/download/download.md b/content/en/docs/Start/download.md index 226a921..a7f7072 100644 --- a/content/download/download.md +++ b/content/en/docs/Start/download.md @@ -1,6 +1,9 @@ --- -title: "Download Ouroboros" +title: "Download" date: 2019-06-22 +weight: 10 +description: > + How to get ouroboros. draft: false --- @@ -17,10 +20,10 @@ which will also install all dependencies. You can clone the [repository](/cgit/ouroboros) over http or https or git: -``` +```bash $ git clone http://ouroboros.rocks/git/ouroboros $ git clone https://ouroboros.rocks/git/ouroboros $ git clone git://ouroboros.rocks/ouroboros ``` -Or download a [snapshot](/cgit/ouroboros/). +Or download a [snapshot](/cgit/ouroboros/) tarball and extract it.
\ No newline at end of file diff --git a/content/download/install.md b/content/en/docs/Start/install.md index ef8220c..736d1a2 100644 --- a/content/download/install.md +++ b/content/en/docs/Start/install.md @@ -1,11 +1,16 @@ --- -title: "Install Ouroboros" +title: "Install from source" +author: "Dimitri Staessens" +date: 2019-07-23 +weight: 30 draft: false +description: > + Installation instructions. --- We recommend creating a build directory: -``` +```bash $ mkdir build && cd build ``` @@ -13,13 +18,13 @@ Run cmake providing the path to where you cloned the Ouroboros repository. Assuming you created the build directory inside the repository directory, do: -``` +```bash $ cmake .. ``` Build and install Ouroboros: -``` +```bash $ sudo make install ``` @@ -28,7 +33,7 @@ $ sudo make install Ouroboros can be configured by providing parameters to the cmake command: -``` +```bash $ cmake -D<option>=<value> .. ``` @@ -36,7 +41,7 @@ Alternatively, after running cmake and before installation, run [ccmake](https://cmake.org/cmake/help/v3.0/manual/ccmake.1.html) to configure Ouroboros: -``` +```bash $ ccmake . ``` @@ -47,6 +52,6 @@ A list of all options can be found [here](/compopt). To uninstall Ouroboros, simply execute the following command from your build directory: -``` +```bash $ sudo make uninstall ```
\ No newline at end of file diff --git a/content/download/requirements.md b/content/en/docs/Start/requirements.md index a8444d7..ad539bf 100644 --- a/content/download/requirements.md +++ b/content/en/docs/Start/requirements.md @@ -1,6 +1,11 @@ --- title: "Requirements" +author: "Dimitri Staessens" +date: 2019-07-23 +weight: 10 draft: false +description: > + System requirements and software dependencies. --- ### System requirements @@ -30,14 +35,14 @@ On GNU/Linux you will need either libgcrypt (≥ 1.7.0) or libssl if your On OS X, you will need [homebrew](https://brew.sh/). [Disable System Integrity Protection](https://developer.apple.com/library/content/documentation/Security/Conceptual/System_Integrity_Protection_Guide/ConfiguringSystemIntegrityProtection/ConfiguringSystemIntegrityProtection.html) -during the [installation](#install) and [removal](#remove) of +during the [installation](#install) and/or [removal](#remove) of Ouroboros. ### Install the dependencies **Debian/Ubuntu Linux:** -``` +```bash $ apt-get install git protobuf-c-compiler cmake $ apt-get install libgcrypt20-dev libssl-dev libfuse-dev dnsutils swig cmake-curses-gui ``` @@ -45,27 +50,27 @@ $ apt-get install libgcrypt20-dev libssl-dev libfuse-dev dnsutils swig cmake-cur On some distributions you need to install the protobuf C library explicitly: -``` +```bash $ apt-get install libprotobuf-c-dev ``` **Arch Linux:** -``` +```bash $ pacman -S git protobuf-c cmake $ pacman -S libgcrypt openssl fuse dnsutils swig ``` **FreeBSD 11:** -``` +```bash $ pkg install git protobuf-c cmake $ pkg install libgcrypt openssl fusefs-libs bind-tools swig ``` **Mac OS X Sierra / High Sierra:** -``` +```bash $ brew install git protobuf-c cmake $ brew install libgcrypt openssl swig ```
\ No newline at end of file diff --git a/content/en/docs/Tutorials/_index.md b/content/en/docs/Tutorials/_index.md new file mode 100755 index 0000000..96019dd --- /dev/null +++ b/content/en/docs/Tutorials/_index.md @@ -0,0 +1,13 @@ + +--- +title: "Tutorials" +linkTitle: "Tutorials" +weight: 70 +date: 2017-01-04 +description: > + A collection of tutorials. +--- + +{{% pageinfo %}} +Under construction, some pages are available. +{{% /pageinfo %}} diff --git a/content/en/docs/Tutorials/ouroboros_tut1_overview.png b/content/en/docs/Tutorials/ouroboros_tut1_overview.png Binary files differnew file mode 100644 index 0000000..a16a289 --- /dev/null +++ b/content/en/docs/Tutorials/ouroboros_tut1_overview.png diff --git a/content/en/docs/Tutorials/ouroboros_tut2_enrolled.png b/content/en/docs/Tutorials/ouroboros_tut2_enrolled.png Binary files differnew file mode 100644 index 0000000..0788856 --- /dev/null +++ b/content/en/docs/Tutorials/ouroboros_tut2_enrolled.png diff --git a/content/en/docs/Tutorials/ouroboros_tut2_overview.png b/content/en/docs/Tutorials/ouroboros_tut2_overview.png Binary files differnew file mode 100644 index 0000000..4efef99 --- /dev/null +++ b/content/en/docs/Tutorials/ouroboros_tut2_overview.png diff --git a/content/docs/tutorials/ovpn-tut.md b/content/en/docs/Tutorials/ovpn-tut.md index 6db6812..7404a76 100644 --- a/content/docs/tutorials/ovpn-tut.md +++ b/content/en/docs/Tutorials/ovpn-tut.md @@ -1,10 +1,12 @@ --- -title: "Tutorial: How to create an encrypted IP tunnel" -draft: false -description: "ovpn" +title: "Creating an encrypted IP tunnel" +author: "Dimitri Staessens" date: 2019-08-31 #type: page draft: false +weight: 100 +description: > + This tutorial explains how to create an encrypted tunnel for IP traffic. --- We recently added 256-bit ECDHE-AES encryption to Ouroboros (in the @@ -16,19 +18,16 @@ We'll first illustrate what's going on over an ethernet loopback adapter and then show how to create an encrypted tunnel between two machines connected over an IP network. -<center> {{<figure -class="w-80" -src="/images/ovpn_tut.png">}} -</center> +{{<figure width="50%" src="/docs/tutorials/ovpn_tut.png">}} -We'll create an encrypted tunnel between IP addresses 127.0.0.3 /24 and -127.0.0.8 /24, as shown in the diagram above. +We'll create an encrypted tunnel between IP addresses 127.0.0.3 /24 +and 127.0.0.8 /24, as shown in the diagram above. To run this tutorial, make sure that [openssl](https://www.openssl.org) is installed on your machine(s) and get the latest version of Ouroboros from the _be_ branch. -``` +```bash $ git clone --branch be https://ouroboros.rocks/git/ouroboros $ cd ouroboros $ mkdir build && cd build @@ -41,7 +40,7 @@ $ make && sudo make install Open a terminal window and start ouroboros (add --stdout to log to stdout): -``` +```bash $ sudo irmd --stdout ``` @@ -50,7 +49,7 @@ so we'll create a layer _my\_layer_ consisting of a single ipcp-eth-dix named _dix_, register the name _my\_vpn_ for the ovpn server in _my\_layer_, and bind the ovpn binary to that name. -``` +```bash $ irm ipcp bootstrap type eth-dix name dix layer my_layer dev lo $ irm reg name my_vpn layer my_layer $ irm bind program ovpn name my_vpn @@ -59,7 +58,7 @@ $ irm bind program ovpn name my_vpn We can now start an ovpn server on 127.0.0.3. This tool requires superuser privileges as it creates a tun device. -``` +```bash $ sudo ovpn --ip 127.0.0.3 --mask 255.255.255.0 ``` @@ -67,7 +66,7 @@ From another terminal, we can start an ovpn client to connect to the server (which listens to the name _my\_vpn_) and pass the --crypt option to encrypt the tunnel: -``` +```bash $ sudo ovpn -n my_vpn -i 127.0.0.8 -m 255.255.255.0 --crypt ``` @@ -75,7 +74,7 @@ The ovpn tool now created two _tun_ interfaces attached to the endpoints of the flow, and will act as an encrypted pipe for any packets sent to that interface: -``` +```bash $ ip a ... 6: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500 @@ -97,23 +96,23 @@ send some ping traffic into the other _tun_ interface. The encrypted traffic can be shown by tcpdump on the loopback interface. Open two more terminals: -``` +```bash $ sudo tcpdump -i tun1 ``` -``` +```bash $ sudo tcpdump -i lo ``` and from another terminal, send some pings into the other endpoint: -``` +```bash $ ping 10.10.10.1 -i tun0 ``` The tcpdump on the _tun1_ interface shows the ping messages arriving: -``` +```bash $ sudo tcpdump -i tun1 [sudo] password for dstaesse: tcpdump: verbose output suppressed, use -v or -vv for full protocol decode @@ -126,7 +125,7 @@ listening on tun1, link-type RAW (Raw IP), capture size 262144 bytes while the tcpdump on the loopback shows the AES encrypted traffic that is actually sent on the flow: -``` +```bash $ sudo tcpdump -i lo tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on lo, link-type EN10MB (Ethernet), capture size 262144 bytes @@ -171,13 +170,13 @@ sport option. On both machines (fill in the correct IP address): -``` +```bash irm i b t udp n udp l my_layer ip <address> ``` On the server machine, bind and register the ovpn tool as above: -``` +```bash $ irm reg name my_vpn layer my_layer $ irm bind program ovpn name my_vpn ``` @@ -185,7 +184,7 @@ $ irm bind program ovpn name my_vpn On the _client_ machine, add a DNS entry for the MD5 hash for "my_vpn" with the server IP address to /etc/hosts: -``` +```bash $ cat /etc/hosts # Static table lookup for hostnames. # See hosts(5) for details. @@ -200,13 +199,13 @@ and you should be able to create the ovpn tunnel as above. On the server: -``` +```bash $ sudo ovpn --ip 127.0.0.3 --mask 255.255.255.0 ``` And on the client: -``` +```bash $ sudo ovpn -n my_vpn -i 127.0.0.8 -m 255.255.255.0 --crypt ``` diff --git a/content/en/docs/Tutorials/ovpn_tut.png b/content/en/docs/Tutorials/ovpn_tut.png Binary files differnew file mode 100644 index 0000000..bbf4d31 --- /dev/null +++ b/content/en/docs/Tutorials/ovpn_tut.png diff --git a/content/en/docs/Tutorials/tut-2-1.jpg b/content/en/docs/Tutorials/tut-2-1.jpg Binary files differnew file mode 100644 index 0000000..9152670 --- /dev/null +++ b/content/en/docs/Tutorials/tut-2-1.jpg diff --git a/content/docs/tutorials/tutorial-1.md b/content/en/docs/Tutorials/tutorial-1.md index d1ac3c6..1da58eb 100644 --- a/content/docs/tutorials/tutorial-1.md +++ b/content/en/docs/Tutorials/tutorial-1.md @@ -1,13 +1,20 @@ --- -title: "Tutorial 1: local test" +title: "Local test" +author: "Dimitri Staessens" +date: 2019-08-31 +#type: page draft: false +weight: 10 +description: > + This tutorial contains a simple local test. --- This tutorial runs through the basics of Ouroboros. Here, we will see the general use of two core components of Ouroboros, the IPC Resource Manager daemon (IRMd) and an IPC Process (IPCP). -![Tutorial 1 setup](/images/ouroboros_tut1_overview.png) +{{<figure width="50%" src="/docs/tutorials/ouroboros_tut1_overview.png">}} + We will start the IRMd, create a local IPCP, start a ping server and connect a client. This will involve **binding (1)** that server to a @@ -20,7 +27,7 @@ window, start the IRMd (as a superuser) in stdout mode. The output shows the process id (pid) of the IRMd, which will be different on your machine. -``` +```bash $ sudo irmd --stdout ==02301== irmd(II): Ouroboros IPC Resource Manager daemon started\... ``` @@ -37,14 +44,14 @@ automatically create an IPCP if no IPCP by than name exists, so in this case, the IPCP create command is optional. In the second terminal, enter the commands: -``` +```bash $ irm ipcp create type local name local_ipcp $ irm ipcp bootstrap type local name local_ipcp layer local_layer ``` The IRMd and ipcpd output in the first terminal reads: -``` +```bash ==02301== irmd(II): Created IPCP 2324. ==02324== ipcpd-local(II): Bootstrapped local IPCP with pid 2324. ==02301== irmd(II): Bootstrapped IPCP 2324 in layer local_layer. @@ -53,14 +60,14 @@ The IRMd and ipcpd output in the first terminal reads: From the third terminal window, let's start our oping application in server mode ("oping --help" shows oping command line parameters): -``` +```bash $ oping --listen Ouroboros ping server started. ``` The IRMd will notice that an oping server with pid 10539 has started: -``` +```bash ==02301== irmd(DB): New instance (10539) of oping added. ==02301== irmd(DB): This process accepts flows for: ``` @@ -70,7 +77,7 @@ bind the server to a name and register that name in the "local_layer". The name for the server can be chosen at will, let's take "oping_server". In the second terminal window, execute: -``` +```bash $ irm bind proc 2337 name oping_server $ irm register name oping_server layer local_layer ``` @@ -78,7 +85,7 @@ $ irm register name oping_server layer local_layer The IRMd and IPCPd in terminal one will now acknowledge that the name is bound and registered: -``` +```bash ==02301== irmd(II): Bound process 2337 to name oping_server. ==02324== ipcpd-local(II): Registered 4721372d. ==02301== irmd(II): Registered oping_server in local_layer as @@ -93,7 +100,7 @@ Now that we have bound and registered our server, we can connect from the client. In the second terminal window, start an oping client with destination oping_server and it will begin pinging: -``` +```bash $ oping -n oping_server -c 5 Pinging oping_server with 64 bytes of data: @@ -112,7 +119,7 @@ The server will acknowledge that it has a new flow connected on flow descriptor 64, which will time out a few seconds after the oping client stops sending: -``` +```bash New flow 64. Flow 64 timed out. ``` @@ -120,7 +127,7 @@ Flow 64 timed out. The IRMd and IPCP logs provide some additional output detailing the flow allocation process: -``` +```bash ==02324== ipcpd-local(DB): Allocating flow to 4721372d on fd 64. ==02301== irmd(DB): Flow req arrived from IPCP 2324 for 4721372d. ==02301== irmd(II): Flow request arrived for oping_server. diff --git a/content/docs/tutorials/tutorial-2.md b/content/en/docs/Tutorials/tutorial-2.md index c3925dc..b59247a 100644 --- a/content/docs/tutorials/tutorial-2.md +++ b/content/en/docs/Tutorials/tutorial-2.md @@ -1,6 +1,12 @@ --- -title: "Tutorial 2: Adding a layer" +title: "Adding a layer" +author: "Dimitri Staessens" +date: 2019-08-31 +#type: page draft: false +weight: 20 +description: > + Create a 2-layer network. --- In this tutorial we will add a __unicast layer__ on top of the local @@ -8,19 +14,19 @@ layer. Make sure you have a [local layer](/docs/tutorials/tutorial-1/) running. The network will look like this: -![Tutorial 2 setup](/images/tut-2-1.jpg) +{{<figure width="40%" src="/docs/tutorials/tut-2-1.jpg">}} Let's start adding the unicast layer. We will first bootstrap a unicast IPCP, with name "U1" into the layer "U" (using default options). In terminal 2, type: -``` +```bash $ irm ipcp bootstrap type unicast name U1 layer U ``` The IRMd and IPCP will report the bootstrap: -``` +```bash ==02301== irmd(II): Created IPCP 4363. ==04363== normal-ipcp(DB): IPCP got address 465922905. ==04363== directory(DB): Bootstrapping directory. @@ -44,7 +50,7 @@ Ouroboros-capable process, the IRMd will notice a new instance of the normal IPCP. We will now bind this IPCP to some names and register them in the local_layer: -``` +```bash $ irm bind ipcp normal_1 name normal_1 $ irm bind ipcp normal_1 name normal_layer $ irm register name normal_1 layer local_layer @@ -58,7 +64,7 @@ allow enrollment using a layer name (anycast) instead of a specific ipcp_name. The IRMd and local IPCP should log the following, just as in tutorial 1: -``` +```bash ==02301== irmd(II): Bound process 4363 to name normal_1. ==02301== irmd(II): Bound process 4363 to name normal_layer. ==02324== ipcpd-local(II): Registered e9504761. @@ -91,7 +97,7 @@ Next, that IPCP will *enroll* with an existing member of the layer "normal_layer". To do that it first allocates a flow over the local layer: -``` +```bash ==02324== ipcpd-local(DB): Allocating flow to f40ee0f0 on fd 64. ==02301== irmd(DB): Flow req arrived from IPCP 2324 for f40ee0f0. ==02301== irmd(II): Flow request arrived for normal_layer. @@ -133,7 +139,7 @@ Now that the member is enrolled, normal_1 and normal_2 will deallocate the flow over which it enrolled and signal the IRMd that the enrollment was successful: -``` +```bash ==02301== irmd(DB): Partial deallocation of port_id 0 by process 13569. ==02301== irmd(DB): Partial deallocation of port_id 1 by process 4363. @@ -151,7 +157,7 @@ Now that normal_2 is a full member of the layer, the irm tool will complete the autobind option and bind normal_2 to the name "normal_layer" so it can also enroll new members. -``` +```bash ==02301== irmd(II): Bound process 13569 to name normal_layer. ``` @@ -167,14 +173,14 @@ can be established in any order, but it is recommended to create the management network first to achieve the minimal setup times for the network layer: -``` +```bash $ irm ipcp connect name normal_2 dst normal_1 comp mgmt $ irm ipcp connect name normal_2 dst normal_1 comp dt ``` The IPCP and IRMd log the flow and connection establishment: -``` +```bash ==02301== irmd(DB): Connecting Management to normal_1. ==02324== ipcpd-local(DB): Allocating flow to e9504761 on fd 64. ==02301== irmd(DB): Flow req arrived from IPCP 2324 for e9504761. @@ -200,7 +206,7 @@ components (currently that is the only component that needs a management flow). The output is similar for the data transfer flow, however, creating a data transfer flow triggers some additional activity: -``` +```bash ==02301== irmd(DB): Connecting Data Transfer to normal_1. ==02324== ipcpd-local(DB): Allocating flow to e9504761 on fd 66. ==02301== irmd(DB): Flow req arrived from IPCP 2324 for e9504761. @@ -239,14 +245,14 @@ in the debug log). Our oping server is not registered yet in the normal layer. Let's register it in the normal layer as well, and connect the client: -``` +```bash $ irm r n oping_server layer normal_layer $ oping -n oping_server -c 5 ``` The IRMd and IPCP will log: -``` +```bash ==02301== irmd(II): Registered oping_server in normal_layer as 465bac77. ==02301== irmd(II): Registered oping_server in normal_layer as @@ -277,14 +283,14 @@ This is because the IRMd prefers the local layer. If we unregister the name from the local layer, the client will connect over the normal layer: -``` +```bash $ irm unregister name oping_server layer local_layer $ oping -n oping_server -c 5 ``` As shown by the logs (the normal IPCP doesn't log the flow allocation): -``` +```bash ==02301== irmd(DB): Flow req arrived from IPCP 13569 for 465bac77. ==02301== irmd(II): Flow request arrived for oping_server. ==02301== irmd(II): Flow on port_id 5 allocated. diff --git a/content/docs/tutorials/tutorial-3.md b/content/en/docs/Tutorials/tutorial-3.md index 2dd0645..90d4cb4 100644 --- a/content/docs/tutorials/tutorial-3.md +++ b/content/en/docs/Tutorials/tutorial-3.md @@ -1,6 +1,12 @@ --- -title: "Tutorial 3: IPCP statistics" +title: "Flow statistics" +author: "Dimitri Staessens" +date: 2019-08-31 +#type: page draft: false +weight: 30 +description: > + Monitoring your flows. --- For this tutorial, you should have a local layer, a normal layer and a @@ -10,7 +16,7 @@ will show you how to get some statistics from the network layer which is exported by the IPCPs at /tmp/ouroboros (this mountpoint can be set at compile time): -``` +```bash $ tree /tmp/ouroboros /tmp/ouroboros/ |-- ipcpd-normal.13569 @@ -48,7 +54,7 @@ unidirectional links. It has a management flow and data transfer flow to its neighbor. Let's have a look at the data transfer flow in the network: -``` +```bash $ cat /tmp/ouroboros/ipcpd-normal.13569/dt/65 Flow established at: 2018-03-07 18:47:43 Endpoint address: 465922905 @@ -82,7 +88,7 @@ QoS cube. It sent 4 packets, and received 3 packets. All the packets came from local sources (internal components of the IPCP) and were delivered to local destinations. Let's have a look where they went. -``` +```bash $ cat /tmp/ouroboros/ipcpd-normal.13569/dt/1 Flow established at: 2018-03-07 18:47:43 Endpoint address: flow-allocator @@ -130,7 +136,7 @@ packets from the DHT. It only sent 4 on fd 65. 2 packets failed because of nhop. This is because the forwarding table was being updated from the routing table. Let's send some traffic to the oping server. -``` +```cmd $ oping -n oping_server -i 0 Pinging oping_server with 64 bytes of data: @@ -146,7 +152,7 @@ rtt min/avg/max/mdev = 0.151/0.299/2.269/0.230 ms This sent 1000 packets to the server. Let's have a look at the flow allocator: -``` +```bash $ cat /tmp/ouroboros/ipcpd-normal.13569/dt/0 Flow established at: 2018-03-07 18:47:43 Endpoint address: flow-allocator @@ -176,7 +182,7 @@ The flow allocator has sent and received a message: a request and a response for the flow allocation between the oping client and server. The data transfer flow will also have additional traffic: -``` +```bash $ cat /tmp/ouroboros/ipcpd-normal.13569/dt/65 Flow established at: 2018-03-07 18:47:43 Endpoint address: 465922905 diff --git a/content/docs/tutorials/tutorial-4.md b/content/en/docs/Tutorials/tutorial-4.md index fd7db3a..1e2dde5 100644 --- a/content/docs/tutorials/tutorial-4.md +++ b/content/en/docs/Tutorials/tutorial-4.md @@ -1,6 +1,12 @@ --- -title: "Tutorial 4: Connecting two machines over Ethernet" +title: "Connecting two machines over Ethernet" +author: "Dimitri Staessens" +date: 2019-08-31 +#type: page draft: false +weight: 40 +description: > + Basic network consisting of two hosts on an Ethernet LAN. --- In this tutorial we will connect two machines over an Ethernet network @@ -12,7 +18,7 @@ provide a connectionless packet service with unacknowledged delivery. Make sure that you have an Ouroboros IRM daemon running on both machines: -``` +```bash $ sudo irmd --stdout ``` @@ -20,7 +26,7 @@ The eth-llc and eth-dix IPCPs attach to an ethernet interface, which is specified by its device name. The device name can be found in a number of ways, we'll use the "ip" command here: -``` +```bash $ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 @@ -61,14 +67,14 @@ interface name on each machine. The irm tool allows abbreviated commands (it is modelled after the "ip" command), which we show here (both commands do the same): -``` +```bash node0: $ irm ipcp bootstrap type eth-llc name llc layer eth dev ens3 node1: $ irm i b t eth-llc n llc l eth if ens3 ``` Both IRM daemons should acknowledge the creation of the IPCP: -``` +```bash ==26504== irmd(II): Ouroboros IPC Resource Manager daemon started... ==26504== irmd(II): Created IPCP 27317. ==27317== ipcpd/eth-llc(II): Using raw socket device. @@ -93,7 +99,7 @@ on top of it, just like we did over the local layer in the second tutorial. We are showing some different ways of entering these commands on the two machines: -``` +```bash node0: $ irm ipcp bootstrap type normal name normal_0 layer normal_layer $ irm bind ipcp normal_0 name normal_0 @@ -108,7 +114,7 @@ $ irm r n normal_1 l eth The IPCPs should acknowledge the enrollment in their logs: -``` +```bash node0: ==27452== enrollment(DB): Enrolling a new neighbor. ==27452== enrollment(DB): Sending enrollment info (47 bytes). diff --git a/content/en/docs/_index.md b/content/en/docs/_index.md new file mode 100755 index 0000000..587d2af --- /dev/null +++ b/content/en/docs/_index.md @@ -0,0 +1,13 @@ + +--- +title: "Documentation" +linkTitle: "Documentation" +weight: 20 +menu: + main: + weight: 20 +--- + +{{% pageinfo %}} +Table of Contents. +{{% /pageinfo %}} diff --git a/content/en/featured-background.jpg b/content/en/featured-background.jpg Binary files differnew file mode 100644 index 0000000..0736db2 --- /dev/null +++ b/content/en/featured-background.jpg diff --git a/content/en/search.md b/content/en/search.md new file mode 100644 index 0000000..e3690fd --- /dev/null +++ b/content/en/search.md @@ -0,0 +1,6 @@ +--- +title: Search Results +layout: search + +--- + diff --git a/content/extra/_index.md b/content/extra/_index.md deleted file mode 100644 index c1baddf..0000000 --- a/content/extra/_index.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Additional software" -date: 2019-06-22 -type: page -draft: false ---- |