Ouroboros Prototype

From Ouroboros
Jump to navigation Jump to search

The Ouroboros prototype is a user-space packet network implementation based on the networking model of the same name. It is being developed in C for POSIX operating systems. This prototype is still a work in progress.

Prototype summary

Split in library

Library

IRMd

IPCPs

Requirements

Ouroboros builds on most POSIX compliant systems. Below you will find instructions for GNU/Linux, FreeBSD and OS X. On Windows 10, you can build Ouroboros using the Linux Subsystem for Windows .

Get Ouroboros

You can clone Ouroboros using the command line from its website or, if you prefer you can clone and/or fork from our Github or BitBucket mirrors.

$ git clone https://ouroboros.rocks/git/ouroboros
$ git clone git://ouroboros.rocks/ouroboros
$ git clone https://github.com/dstaesse/ouroboros

Optional repositories are pyOuroboros, a Python wrapper to write Ouroboros programs in Python, and ouroboros-metrics that contains an InfluxDB exporter.

Dependencies

To build Ouroboros, you need cmake, google protocol buffers installed in addition to a C compiler (gcc or clang) and make.

On GNU/Linux you will need either libgcrypt (≥ 1.7.0) or libssl if your glibc is older than version 2.25.

On OS X, you will need homebrew. Disable System Integrity Protection during the installation and/or removal of Ouroboros.

Optionally, you can also install libgcrypt, libssl (to enable encryption), fuse (to enable exporting internal metrics), and dnsutils (to enable use of a DynDNS server to be used as a naming directory for a UDP layer). Setting up a DNS server (e.g. bind) is out of scope of this installation guide.

Debian/Ubuntu Linux

$ apt-get install git protobuf-c-compiler cmake
$ apt-get install libgcrypt20-dev libssl-dev libfuse-dev dnsutils cmake-curses-gui

If during the build process cmake complains that the Protobuf C compiler is required but not found, and you installed the protobuf-c-compiler package, you will also need this:

$ apt-get install libprotobuf-c-dev

Arch Linux

$ pacman -S git protobuf-c cmake
$ pacman -S libgcrypt openssl fuse dnsutils

FreeBSD 11/12

$ pkg install git protobuf-c cmake
$ pkg install libgcrypt openssl fusefs-libs bind-tools

Mac OS X 10/11/12

$ brew install git protobuf-c cmake
$ brew install libgcrypt openssl

Installation instructions

When installing from source, go to the cloned git repository or extract the tarball and enter the main directory. We recommend creating a build directory inside this directory. Run cmake providing the path to where you cloned the Ouroboros repository. Assuming you created the build directory inside the repository directory, the following commands build and install O7s:

$ mkdir build && cd build
$ cmake ..
$ sudo make install

Remove Ouroboros

To uninstall Ouroboros, simply execute the following command from your build directory:

$ sudo make uninstall

Build configuration parameters

At compile time, there are a number of parameters that can be tweaked, for instance to increase performance or decrease memory consumption.

These parameters can be enabled by specifying them to cmake

$ cmake -D<option>=<value> ..

or interactively by running ccmake . in the build directory.

Ouroboros build configuration
Parameter Description Values Default
ACK_WHEEL_RESOLUTION Minimum acknowledgment delay (ns), as a power to 2 18
ACK_WHEEL_SLOTS Number of slots in the acknowledgment wheel, must be a power of 2 256
BOOTSTRAP_TIMEOUT Timeout for an IPCP to bootstrap (ms) 5000
CMAKE_BUILD_TYPE Build type
  • Release: A release build, less debug logs, compiled with performance flags
  • Debug: A debug build with extra logging and debug symbols (gdb)
  • DebugASan: Enables Address Sanitizer
  • DebugTSan: Enables Thread Sanitizer
  • DebugLSan: Enables Leak Sanitizer
  • DebugUSan: Enables Undefined behaviour Sanitizer
  • DebugAnalyzer: Enables static analysis during compilation
Release

/usr (Linux, *BSD) /usr/local (OS X)

CONNECT_TIMEOUT Timeout to connect an IPCP to another IPCP (ms) 60000
DELTA_T_ACK 10
DELTA_T_MPL 60
DELTA_T_RTX 120
DHT_ENROLL_SLACK                 50
DISABLE_CORE_LOCK                ON
DISABLE_DDNS                     OFF
DISABLE_FUSE                     OFF
DISABLE_LIBGCRYPT                OFF
DISABLE_OPENSSL                  OFF
DISABLE_RAW_SOCKETS              OFF
DISABLE_ROBUST_MUTEXES           OFF
DU_BUFF_HEADSPACE                256
DU_BUFF_TAILSPACE                32
ENROLL_TIMEOUT                   60000
FRCT_LINUX_RTT_ESTIMATOR         ON
FRCT_REORDER_QUEUE_SIZE          256
FRCT_RTO_INC_FACTOR              0
FRCT_RTO_MDEV_MULTIPLIER         2
FRCT_RTO_MIN                     250
FRCT_START_WINDOW                64
FRCT_TICK_TIME                   5000
FUSE_PREFIX                      /tmp/ouroboros
IPCP_ADD_THREADS                 4
IPCP_BROADCAST_MPL               60
IPCP_CONN_WAIT_DIR               ON
IPCP_ETH_LO_MTU                  1500
IPCP_ETH_MPL                     5
IPCP_ETH_QDISC_BYPASS            OFF
IPCP_ETH_RD_THR                  1
IPCP_ETH_WR_THR                  1
IPCP_FLOW_STATS                  ON
IPCP_LINUX_TIMERSLACK_NS         1000
IPCP_LOCAL_MPL                   2
IPCP_MIN_THREADS                 4
IPCP_QOS_CUBE_BE_PRIO            50
IPCP_QOS_CUBE_VIDEO_PRIO         90
IPCP_QOS_CUBE_VOICE_PRIO         99
IPCP_SCHED_THR_MUL               2
IPCP_UDP_MPL                     60
...