网络上有很多工具可以模拟SDN网络,但是,很少有工具考虑了软件定义无线网络(SDWN)。Mininet-WIFI就是一个可以模拟SDWN的软件。
安装:
step 1: $ sudo apt-get install git
step 2: $ git clone https://github.com/intrig-unicamp/mininet-wifi
step 3: $ cd mininet-wifi
step 4: $ sudo util/install.sh -Wnfv
(目前只支持Ubuntu, Debian 和 Fedora)
如果熟悉Docker,也可以直接使用 Image: (ramonfontes/mininet-wifi)
开始使用:
sudo mn –wifi –ssid=new_ssid
上面的命令会创建由1个AP和2个STA组成的网络。
在Examples目录下,还有很多其他的用例。
/examples/2AccessPoints.py
/examples/adhoc.py
/examples/handover.py
/examples/multipleWlan.py
/examples/simplewifitopology.py
/examples/wifiAccessControl.py
/examples/wifimesh.py
/examples/wifiMobility.py
/examples/wifiMobilityModel.py
/examples/wifiPropagationModel.py
/examples/wifiPosition.py
/examples/wifiStationsAndHosts.py
代码简析
最基础的代码是wifi.py,位于mininet目录下。WIFI相关的结构,操作都在这里定义了。
了解WIFI的,可以从代码上看出mininet-wifi调用的是Linux的wireless命令。
除了mininet-wifi已经提供的,在上面列出来的case,如果想自己定义case,可以参考2AccessPoints.py和handover.py,基本的命令在这两个文件里都有。下面的代码,是一个简单的例子。
def topology():
"Create a network."
net = Mininet( controller=Controller, link=TCLink, switch=OVSKernelSwitch )
print "*** Creating nodes, host, sta, ap, controller"
sta1 = net.addStation( 'sta1', ip="192.168.0.1" )
sta2 = net.addStation( 'sta2', ip="192.168.0.2" )
sta3 = net.addStation( 'sta3', ip="192.168.0.3" )
sta4 = net.addStation( 'sta4', ip="192.168.0.4" )
h1 = net.addHost( 'h1', mac='00:00:00:00:00:05', ip='192.168.0.5' )
ap1 = net.addBaseStation( 'ap1', ssid="ssid_1", mode="g", channel="1" )
ap2 = net.addBaseStation( 'ap2', ssid="ssid_2", mode="b", channel="6" )
c0 = net.addController('c0', controller=Controller, ip='127.0.0.1', port=6633 )
print "*** Adding Link"
net.addLink(ap1, ap2) #wired connection
net.addLink(sta1, ap1)
net.addLink(sta2, ap1)
net.addLink(sta3, ap2)
net.addLink(sta4, ap2)
net.addLink(h1, ap1) #wired connection
print "*** Starting network"
net.build()
c0.start()
ap1.start( [c0] )
ap2.start( [c0] )
print "***roaming"
net.startMobility(startTime=0)
net.mobility('sta1', 'start', time=1, position='10,45,0')
net.mobility('sta2', 'start', time=2, position='10,40,0')
net.mobility('sta1', 'stop', time=12, position='15,10,0')
net.mobility('sta2', 'stop', time=22, position='25,25,0')
net.stopMobility(stopTime=23)