Ouroboros Prototype
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