Ouroboros Prototype

From Ouroboros
Revision as of 06:10, 1 June 2022 by Dstaesse (talk | contribs)
Jump to navigation Jump to search

The Ouroboros prototype is a packet network implementation based on the networking model of the same name. It is developed in C for POSIX operating systems.

Software Architecture

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 from Github or BitBucket.

$ 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:

$ mkdir build && cd build

Run cmake providing the path to where you cloned the Ouroboros repository. Assuming you created the build directory inside the repository directory, do:

$ cmake ..

Build and install Ouroboros:

$ sudo make install

Remove Ouroboros

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

$ sudo make uninstall


Configuration parameters

ACK_WHEEL_RESOLUTION             18
ACK_WHEEL_SLOTS                  256
BOOTSTRAP_TIMEOUT                5000
CMAKE_BUILD_TYPE                 Release
CMAKE_INSTALL_PREFIX             /usr
CONNECT_TIMEOUT                  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