Mininet + NS3 for SDN and WIFI simulations

 

Example 1:

h1(10.0.0.1)<---wifi-network-a--->[AP1--- s3 (open vswitch)---AP2 ] <---wifi-network-b--->h2(10.0.0.2)

wifi-network-a and wifi-network-b: 802.11a or 802.11b

 

 

Usage:

1.      Open the vm.

2.      Login with name: mininet and password: mininet

3.      Change to graphical mode

 

4.      Open a terminal. (Accessories àLXTerminal)

 

5.      Go to the directory containing ns3: cd ns-allinone-3.17/ns-3.17

6.      Run sudo ./waf shell in order to let the ns3 set appropriate environment variables.

7.      Run the test-wifi1.py

#!/usr/bin/python

 

"""

This example shows how to create an empty Mininet object

(without a topology object) and add nodes to it manually.

"""

 

from mininet.net import Mininet

from mininet.node import OVSController

from mininet.cli import CLI

from mininet.log import setLogLevel, info

 

import mininet.ns3                          # line added

from mininet.ns3 import WIFIApStaLink       # line added

import ns.wifi

 

def emptyNet():

 

    net = Mininet( controller=OVSController )

 

    info( '*** Adding controller\n' )

    net.addController( 'c0' )

 

    info( '*** Adding hosts\n' )

    h1 = net.addHost( 'h1', ip='10.0.0.1' )

    h2 = net.addHost( 'h2', ip='10.0.0.2' )

 

    info( '*** Adding switch\n' )

    s3 = net.addSwitch( 's3' )

    s3.listenPort = 6634

 

    WIFIApStaLink( s3, h1, ssid="wifi-network-a", standard = ns.wifi.WIFI_PHY_STANDARD_80211a ) 

    #WIFIApStaLink( s3, h1, ssid="wifi-network-a", standard = ns.wifi.WIFI_PHY_STANDARD_80211b )  

    WIFIApStaLink( s3, h2, ssid="wifi-network-b", standard = ns.wifi.WIFI_PHY_STANDARD_80211a ) 

    #WIFIApStaLink( s3, h2, ssid="wifi-network-b", standard = ns.wifi.WIFI_PHY_STANDARD_80211b )

 

    info( '*** Starting network\n')

    net.start()

    mininet.ns3.start()                     # line added

 

    info( '*** Testing network connectivity\n' )

    net.pingAll()

 

    h2.cmdPrint( "iperf -s -p 6666 &" )

    h1.cmdPrint( "iperf -c 10.0.0.2 -p 6666" )

 

    info( '*** Running CLI\n' )

    CLI( net )

 

    info( '*** Stopping network' )

    mininet.ns3.stop()

    mininet.ns3.clear()                     # line added

    h2.cmdPrint("sudo killall iperf")

    net.stop()

 

if __name__ == '__main__':

    setLogLevel( 'info' )

    emptyNet()

 

 

 

 

8.      Change to 802.11b settings.

#WIFIApStaLink( s3, h1, ssid="wifi-network-a", standard = ns.wifi.WIFI_PHY_STANDARD_80211a ) 

WIFIApStaLink( s3, h1, ssid="wifi-network-a", standard = ns.wifi.WIFI_PHY_STANDARD_80211b )  

#WIFIApStaLink( s3, h2, ssid="wifi-network-b", standard = ns.wifi.WIFI_PHY_STANDARD_80211a ) 

WIFIApStaLink( s3, h2, ssid="wifi-network-b", standard = ns.wifi.WIFI_PHY_STANDARD_80211b )

 

 

Dr. Chih-Heng Ke

Department of Computer Science and Information Engineering, National Quemoy University, Kinmen, Taiwan

Email: smallko@gmail.com