To implement the Software-Defined Wide Area Network (SD-WAN) in OMNeT++ has needs to setup emulation wherever the network devices are controlled by a centralized controller to handle and enhance the network’s performance. The INET Framework in OMNeT++ delivers the tools to design like networks. The given below are the detailed procedures on how to implement the implementing SD-WAN in OMNeT++:
Step-by-Step Implementation:
Make sure we have OMNeT++ and the INET Framework installed.
Generate a new NED file to describe the network topology has includes edge devices, routers, and the SDN controller.
Example: SD-WAN Network Topology (SDWANNetwork.ned)
package sdwan;
import inet.node.inet.StandardHost;
import inet.node.inet.Router;
import inet.node.inet.SDNController;
network SDWANNetwork
{
parameters:
@display(“bgb=800,400”);
submodules:
edgeDevice1: StandardHost {
@display(“p=100,300”);
}
edgeDevice2: StandardHost {
@display(“p=300,300”);
}
edgeDevice3: StandardHost {
@display(“p=500,300”);
}
router1: Router {
@display(“p=200,200”);
}
router2: Router {
@display(“p=400,200”);
}
router3: Router {
@display(“p=600,200”);
}
sdnController: SDNController {
@display(“p=300,100”);
}
connections:
edgeDevice1.ethg++ <–> Eth10M <–> router1.ethg++;
edgeDevice2.ethg++ <–> Eth10M <–> router2.ethg++;
edgeDevice3.ethg++ <–> Eth10M <–> router3.ethg++;
router1.ethg++ <–> Eth10M <–> router2.ethg++;
router2.ethg++ <–> Eth10M <–> router3.ethg++;
router1.ethg++ <–> Eth10M <–> sdnController.ethg++;
router2.ethg++ <–> Eth10M <–> sdnController.ethg++;
router3.ethg++ <–> Eth10M <–> sdnController.ethg++;
}
In this instance:
Generate an OMNeT++ initialization file to configure the parameters of the simulation.
Example: Configuration File (omnetpp.ini)
network = sdwan.SDWANNetwork
sim-time-limit = 100s
# Visualization
*.visualizer.canvasVisualizer.displayBackground = true
*.visualizer.canvasVisualizer.displayGrid = true
# Host Configuration
*.edgeDevice*.numApps = 1
*.edgeDevice*.app[0].typename = “UdpBasicApp”
*.edgeDevice*.app[0].destAddresses = “router1 router2 router3”
*.edgeDevice*.app[0].destPort = 5000
*.edgeDevice*.app[0].messageLength = 1024B
*.edgeDevice*.app[0].sendInterval = 1s
*.router*.numApps = 1
*.router*.app[0].typename = “UdpSink”
*.router*.app[0].localPort = 5000
# UDP Configuration
*.edgeDevice*.hasUdp = true
*.router*.hasUdp = true
# SDN Controller Configuration
*.sdnController.numApps = 1
*.sdnController.app[0].typename = “SDNControllerApp”
# IP Address Configuration
*.edgeDevice1.ipv4.config = xmldoc(“edgeDevice1.xml”)
*.edgeDevice2.ipv4.config = xmldoc(“edgeDevice2.xml”)
*.edgeDevice3.ipv4.config = xmldoc(“edgeDevice3.xml”)
*.router1.ipv4.config = xmldoc(“router1.xml”)
*.router2.ipv4.config = xmldoc(“router2.xml”)
*.router3.ipv4.config = xmldoc(“router3.xml”)
*.sdnController.ipv4.config = xmldoc(“sdnController.xml”)
Generate XML files to outline the IP address configuration for each host, router, and the SDN controller.
Example: IP Configuration File for edgeDevice1 (edgeDevice1.xml)
<config>
<interface>
<name>eth0</name>
<address>192.168.1.1</address>
<netmask>255.255.255.0</netmask>
</interface>
<routing>
<route>
<destination>0.0.0.0</destination>
<netmask>0.0.0.0</netmask>
<gateway>192.168.1.254</gateway>
</route>
</routing>
</config>
Example: IP Configuration File for edgeDevice2 (edgeDevice2.xml)
<config>
<interface>
<name>eth0</name>
<address>192.168.2.1</address>
<netmask>255.255.255.0</netmask>
</interface>
<routing>
<route>
<destination>0.0.0.0</destination>
<netmask>0.0.0.0</netmask>
<gateway>192.168.2.254</gateway>
</route>
</routing>
</config>
Example: IP Configuration File for edgeDevice3 (edgeDevice3.xml)
<config>
<interface>
<name>eth0</name>
<address>192.168.3.1</address>
<netmask>255.255.255.0</netmask>
</interface>
<routing>
<route>
<destination>0.0.0.0</destination>
<netmask>0.0.0.0</netmask>
<gateway>192.168.3.254</gateway>
</route>
</routing>
</config>
Example: IP Configuration File for router1 (router1.xml)
<config>
<interface>
<name>eth0</name>
<address>192.168.1.254</address>
<netmask>255.255.255.0</netmask>
</interface>
</config>
Example: IP Configuration File for router2 (router2.xml)
<config>
<interface>
<name>eth0</name>
<address>192.168.2.254</address>
<netmask>255.255.255.0</netmask>
</interface>
</config>
Example: IP Configuration File for router3 (router3.xml)
<config>
<interface>
<name>eth0</name>
<address>192.168.3.254</address>
<netmask>255.255.255.0</netmask>
</interface>
</config>
Example: IP Configuration File for sdnController (sdnController.xml)
<config>
<interface>
<name>eth0</name>
<address>192.168.4.1</address>
<netmask>255.255.255.0</netmask>
</interface>
</config>
To mimic the SD-WAN, so we need to execute the controller logic for handling the network. This can be completed by extending existing applications or making the custom applications in the INET framework.
Example: Simple SDN Controller Logic (Pseudo-Code)
class SDNControllerApp : public cSimpleModule
{
protected:
virtual void initialize() override;
virtual void handleMessage(cMessage *msg) override;
private:
void setupRouting();
};
void SDNControllerApp::initialize() {
// Initialization code
setupRouting();
}
void SDNControllerApp::handleMessage(cMessage *msg) {
// Handle messages from network elements
}
void SDNControllerApp::setupRouting() {
// Logic to set up initial routing rules
// Example: setting up flow rules for routers
}
Here, we understood how to implement, deploy the software defined wide area network in OMNeT++ simulator that will handle and manage the network performance. More information will be provided regarding the SD-WAN.
Our developers are here to assist with the implementation of Software Defined Wide Area Networks using the OMNeT++ tool. If you’re looking for more simulation and project ideas, feel free to reach out to us!