Skip to content

ARCCN/runos

Repository files navigation

RUNOS

What is RUNOS?

RUNOS is an open-source distributed SDN/OpenFlow controller for enterprise software-defined networks, datacenter and career grade SDN networks. RUNOS is developed by Applied Research Center for Computer Networks (ARCCN) from Russia.

RUNOS Key Features

  • High performance and scalability is ensured by implementation in C++17 and and the using of multithreading.
  • High Availability (Active/Standby).
  • Modularity.
  • Extensibility of functionality.
  • REST API for external applications.
  • Monitoring tools (port statistics, control traffic statistics).
  • Support OpenFlow version 1.3.
  • Support CLI for debugging.
  • Support Web UI: visualization of the entire network topology and detailed information about individual elements(switches, ports, links, hosts).
  • Documentation and support.

Getting Started

Minimal Requirements

  • RAM: 2Gb
  • HDD: 8Gb
  • Operating System: Ubuntu 18.04 and higher
  • Browser: Google Chrome

Dependencies

  1. Install curl and Nix package manager:
sudo apt-get install curl
curl -L https://nixos.org/nix/install | sh 
  1. Install Redis in-memory data store:
sudo apt install redis-server
  1. Install nginx server:
sudo apt install nginx

Build RUNOS from Source

  1. Getting sources:
git clone https://github.com/ARCCN/runos.git 
  1. Run nix-shell inside runos directory to build dependencies:
cd runos
nix-shell
  1. Create build directory, run cmake and make:
mkdir build
cd build
cmake ..
make
cd ..

Install Application from Source

  1. Go to the apps folder:
cd /runos/src/apps
  1. Getting application sources:
git clone http://<application repository path>/app.git
  1. If it is necessary, edit application's configuration file (settings.json) inside application directory.

  2. Run nix-shell inside runos directory:

cd ../..
nix-shell
  1. Rebuild RUNOS with application inside build directory:
cd build
cmake ..
make
cd ..

Start RUNOS

  • Start RUNOS with default RUNOS settings file (runos-settings.json):
./build/runos
  • Start RUNOS with your settings file (your_runos_settings.json):
./build/runos -c /path_to_file/your_runos_settings.json

RUNOS Web UI Configuring

  1. Configure nginx server (edit nginx.conf):
sudo vim /etc/nginx/nginx.conf
  1. Add the following text about server into http section of nginx.conf file (you need add your absolute path to the runos build directory):
http {
    server {
        listen 8080;
        root <...absolute/path/to/runos/build/directory...>/web;
        location ~*\.(html|css|js)$ {}
        location /images {}
        location / {
            proxy_pass http://localhost:8000;
        }
    }
}
  1. Restart nginx server:
sudo service nginx restart
  1. Start RUNOS Web UI in your browser:
http://$CONTROLLER_IP:8080/topology.html

Quick RUNOS Test Using Mininet

  1. Install Mininet network emulator:
git clone git://github.com/mininet/mininet
cd mininet
sudo ./util/install.sh -nfv
cd ..
  1. Start RUNOS controller:
cd runos
nix-shell
./build/runos
  1. Start a simple network topology in Mininet (4 switches and 4 hosts):
sudo mn --topo linear,4 --switch ovsk,protocols=OpenFlow13 --controller remote,ip=127.0.0.1,port=6653
  1. Start RUNOS Web UI, open the following link in your browser: http://localhost:8080/topology.html

Documentation

Support

License

RUNOS SDN/OpenFlow controller is published under Apache License 2.0