This project focuses on enhancing network performance by optimizing traffic forwarding based on network performance metrics such as link utilization. The application utilizes the network performance metrics to load balance the traffic to an optimal route when there's network congestion on the current path.
sFlow and Prometheus are used to collect and store the network performance metrics
The SDN controller application is designed within the ONOS framework. As of now, the application is at version 2.7.0 and is in Long-Term Support (LTS) status.
Experiments were conducted using Containernet, a fork of the well-known Mininet network emulator that enables the utilization of Docker containers as hosts within emulated network topologies. These experiments utilized Open vSwitch with OpenFlow version 1.3 for Southbound communication.
The primary topology examined in this project is the campus LAN architecture, which includes the core layer, distribution layer, and access layer. But, this application supports other topologies as well.
Configure the polling & sampling rate to 10 & 10 in sflow.py script
Refer to this guide here, to define a metrics "scraping" job in the Prometheus configuration file, prometheus.yml
You may define your own topology according to your own needs. Connect the switches to your ONOS controller.
Refer to my other GitHub repository here, to create a CLOS topology using Containernet.
Refer to the general guide here, clone this repository, compile it with mvn clean install -DskipTests
then install the .oar
to ONOS. Activate the app on ONOS with the command app activate org.foo.app
in ONOS CLI
Activate the default OpenFlow app to enable Southbound communication from ONOS to OvS. Use the command app activate org.onosproject.openflow
in ONOS CLI
Default is TRUE
If you intend to disable this feature, use the command onos:cfg set org.foo.app.Foo campus false
in ONOS CLI
By default, all switches are marked as access switches
Required Arguments:
1 - core
2 - distribution
3 - access
To mark, use the command mark [switch-device-id] [1/2/3]
in ONOS CLI
Example
mark of:0000000000000001/2 2
By default, all links are set to 10Mbits
Link bandwidth MUST follow the value set during Mininet network emulation.
Use the command, bandwidth [core/distribution/access] value
in ONOS CLI
Example:
bandwidth core 30
Required Arguments:
There are 4 forwarding methods:
0 - Shortest Path forwarding and no rerouting
1 - Shortest Path forwarding and least utilized path rerouting
2 - Least utilized path forwarding and rerouting
3 - Round Robin path forwarding and Least utilized path rerouting
Use the command, onos:cfg set org.foo.app.Foo forwarding [0/1/2/3]
in ONOS CLI
Example:
onos:cfg set org.foo.app.Foo forwarding 3
Pump high-load traffic using traffic generation tools such as iperf & scapy.
Refer to my other GitHub repository here, to implement a real-life traffic generation scenario using a real-life traffic flow dataset.
This project is licensed under the Apache-2 License.