被問道如何在mininet中建立一個有不一樣帶寬的鏈路的時候,因而我就總結了一下我知道的方法:node
在總結的時候,分別參考了以下的網址:python
https://github.com/mininet/mininet/wiki/Introduction-to-Mininetgit
http://stackoverflow.com/questions/30496161/how-to-set-bandwidth-on-mininet-custom-topologygithub
我總結的方法有如下的三種:網絡
第一種,在建立的網絡拓撲的時候,使用 --link 這個選項:app
sudo mn --topo linear,10 --link tc,bw=10
這一條命令,就能夠建立出一個拓撲是線性的,而且每一條鏈接都是10m的帶寬。ui
這種建立的方法就是很簡單,可是不可以模擬一種狀況,不一樣的鏈路的帶寬不一樣。對與作網絡均衡負載的同窗,就不可以適用spa
第二種,適用 python 腳原本進行建立一個 mininet網絡。 使用這種腳本的方法是 python <your_mininet_creation_script.py> 就會建立出一個mininet的拓撲出來了。這種方法,若是要鏈接外部的控制器的時候,或許也要在裏面寫,或許也能夠在mn的命令行中設置。我那時候在裏面進行鏈接外部控制器的時候,老是出錯,就沒有繼續用這種方式。我沒有試過在腳本里面建立拓撲,而後在命令行中鏈接外部控制器這種狀況。.net
下面附上這種腳本的一個範例,取自於 https://github.com/mininet/mininet/wiki/Introduction-to-Mininet命令行
#!/usr/bin/python from mininet.topo import Topo from mininet.net import Mininet from mininet.node import CPULimitedHost from mininet.link import TCLink from mininet.util import dumpNodeConnections from mininet.log import setLogLevel class SingleSwitchTopo( Topo ): "Single switch connected to n hosts." def build( self, n=2 ): switch = self.addSwitch( 's1' ) for h in range(n): # Each host gets 50%/n of system CPU host = self.addHost( 'h%s' % (h + 1), cpu=.5/n ) # 10 Mbps, 5ms delay, 2% loss, 1000 packet queue self.addLink( host, switch, bw=10, delay='5ms', loss=2, max_queue_size=1000, use_htb=True ) def perfTest(): "Create network and run simple performance test" topo = SingleSwitchTopo( n=4 ) net = Mininet( topo=topo, host=CPULimitedHost, link=TCLink ) net.start() print "Dumping host connections" dumpNodeConnections( net.hosts ) print "Testing network connectivity" net.pingAll() print "Testing bandwidth between h1 and h4" h1, h4 = net.get( 'h1', 'h4' ) net.iperf( (h1, h4) ) net.stop() if __name__ == '__main__': setLogLevel( 'info' ) perfTest()
第三種,是我本身也在用的方法,是適用 mininet walkthrough 中的建立拓撲的方法:腳本的適用方法是
sudo mn --custom <your_mininet_topo_creation_script.py> --topo <topo_class_in_your_script>
可是直接在你的腳本中添加語句
self.addLink( host, switch, bw=10, delay='5ms', loss=2, max_queue_size=1000, use_htb=True )
會致使出現沒有 bw 這個參數的錯誤。這是由於沒有適用 TCLink class。解決的方法,是在
http://stackoverflow.com/questions/30496161/how-to-set-bandwidth-on-mininet-custom-topology
中獲得的啓示。只要運行的時候,加上 --link 選項就能夠,完整的運行的命令是
sudo mn --custom <your_mininet_topo_creation_script.py> --topo <topo_class_in_your_script> --link tc
OK, That is the end. Happy hacking.