Steps to reproduce
The following steps have to be used to recreate the output.
- Install ns-3 and enable OpenFlow integration
- Clone the repository
- Copy contents
- Run an example
Check out this link!
git clone https://github.com/joe019/Extending-SDN-functionalities-of-ns-3.git
Go to your ns3 workspace and replace the folder "src/openflow"
with "Extending-SDN-functionalities-of-ns-3/openflow/"
from the cloned repository.
./waf --run \"openflow-switch --verbose\"
Any other example can be run by replacing "openflow-switch" with the example name.
Proactive learning
A packet learns the path to its destination using broadcast messages sent during ARP requests. This gives the controller very less capability to decide the path to be used for packet traversal. To avoid this issue, we decided to make the controller aware of the network topology ahead of packet transfer.
What we did:
- Whenever a switch is registered with the controller, details of its neighbours are also learnt by the controller and minimum spanning tree is generated.
- To distinguish flows, switches can be marked as "high traffic" switches and these can be accessed only by a particular traffic.

When call to controller is made from a switch for the first time, the details of all the neighbouring nodes and switches are already in the table at the controller.
When a switch contacts a controller for the first time for a packet's transfer, the topology is already known to the controller. So the controller adds flow table entry in all the switches in the path of the packet. This reduces the overall time for the packet to reach the destination, as no frequent requests to the controller are required.

Flow table entries are made in all the switches in the path of the packet in the first controller call.