Mininet支持參數化拓撲,用幾行python代碼,你就可以創建一個基於你傳進去的參數配置的靈活拓撲結構,還可被多個實驗重復使用。
下面是一個小例子:(基於mininet/topo.py:SingleSwitchTopo,主機h1~hn都連接到單個交換機s1上)
#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel
class SingleSwitchTopo(Topo):
"Single switch connected to n hosts."
def __init__(self, n=2, **opts):
# Initialize topology and default options
Topo.__init__(self, **opts)
switch = self.addSwitch('s1')
# Python's range(N) generates 0..N-1
for h in range(n):
host = self.addHost('h%s' % (h + 1))
self.addLink(host, switch)
def simpleTest():
"Create and test a simple network"
topo = SingleSwitchTopo(n=4)
net = Mininet(topo)
net.start()
print "Dumping host connections"
dumpNodeConnections(net.hosts)
print "Testing network connectivity"
net.pingAll()
net.stop()
if __name__ == '__main__':
# Tell mininet to print useful information
setLogLevel('info')
simpleTest()
下面逐一介紹在上述代碼中主要的類、方法以及變量:
Topo:Mininet拓撲結構的基類
addSwitch():給拓撲結構中增加一個交換機,返回交換機名字
addHost():增加主機,返回主機名字
addLink():增加一個雙向鏈接,返回鏈接的key。
Mininet:創建和管理網絡的主要類
start():開啟網絡
pingAll():通過主機之間的互ping測試連通性
stop():關閉網絡
net.hosts 網絡中的所有主機
dumpNodeConnection():列出所有的連接
Mininet搭建網絡有3種方法:
底層API:節點和links
h1 = Host( 'h1' ) h2 = Host( 'h2' ) s1 = OVSSwitch( 's1', inNamespace=False ) c0 = Controller( 'c0', inNamespace=False ) Link( h1, s1 ) Link( h2, s1 ) h1.setIP( '10.1/8' ) h2.setIP( '10.2/8' ) c0.start() s1.start( [ c0 ] ) print h1.cmd( 'ping -c1', h2.IP() ) s1.stop() c0.stop()
中層API:網絡對象
net = Mininet() h1 = net.addHost( 'h1' ) h2 = net.addHost( 'h2' ) s1 = net.addSwitch( 's1' ) c0 = net.addController( 'c0' ) net.addLink( h1, s1 ) net.addLink( h2, s1 ) net.start() print h1.cmd( 'ping -c1', h2.IP() ) CLI( net ) net.stop()
高級API:拓撲模板
class SingleSwitchTopo( Topo ):
"Single Switch Topology"
def __init__( self, count=1, **params ):
Topo.__init__( self, **params )
hosts = [ self.addHost( 'h%d' % i )
for i in range( 1, count + 1 ) ]
s1 = self.addSwitch( 's1' )
for h in hosts:
self.addLink( h, s1 )
net = Mininet( topo=SingleSwitchTopo( 3 ) )
net.start()
CLI( net )
net.stop()
