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.
- 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.
- RAM: 2Gb
- HDD: 8Gb
- Operating System: Ubuntu 18.04 and higher
- Browser: Google Chrome
- Install curl and Nix package manager:
sudo apt-get install curl
curl -L https://nixos.org/nix/install | sh
- Install Redis in-memory data store:
sudo apt install redis-server
- Install nginx server:
sudo apt install nginx
- Getting sources:
git clone https://github.com/ARCCN/runos.git
- Run
nix-shell
inside runos directory to build dependencies:
cd runos
nix-shell
- Create build directory, run cmake and make:
mkdir build
cd build
cmake ..
make
cd ..
- Go to the apps folder:
cd /runos/src/apps
- Getting application sources:
git clone https://<application repository path>/app.git
-
If it is necessary, edit application's configuration file (settings.json) inside application directory.
-
Run
nix-shell
inside runos directory:
cd ../..
nix-shell
- Rebuild RUNOS with application inside build directory:
cd build
cmake ..
make
cd ..
- 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
- Configure nginx server (edit nginx.conf):
sudo vim /etc/nginx/nginx.conf
- 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 https://localhost:8000;
}
}
}
- Restart nginx server:
sudo service nginx restart
- Start RUNOS Web UI in your browser:
https://$CONTROLLER_IP:8080/topology.html
- Install Mininet network emulator:
git clone git:https://github.com/mininet/mininet
cd mininet
sudo ./util/install.sh -nfv
cd ..
- Start RUNOS controller:
cd runos
nix-shell
./build/runos
- 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
- Start RUNOS Web UI, open the following link in your browser: https://localhost:8080/topology.html
-
Install RUNOS using virtual machine: Installation guide
-
Install RUNOS using docker: Installation guide
-
User's and developer's guide: RUNOS Documentation 2.0
-
REST API description: RUNOS REST API
-
Telegram:
-
email: [email protected]
-
Wiki:
-
Official mailing list:
RUNOS SDN/OpenFlow controller is published under Apache License 2.0