#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import irange,dumpNodeConnections
from mininet.log import setLogLevel
from mininet.node import RemoteController
from mininet.node import CPULimitedHost
from mininet.link import TCLink
import os
class FatTopo(Topo):
"Linear topology of k switches, with one host per switch."
def __init__(self, k=4, **opts):
"""Init.
k: number of pods of fat tree"""
super(FatTopo, self).__init__(**opts)
self.k = 4
for i in irange(0,3):
self.addSwitch('s%s'% i)
for i in irange(0,3):
for j in irange(0,3):
self.addHost('h%s%s'%(i,j))
self.addSwitch('s%s%s'% (i,j))
for i in irange(0,3):
self.addLink("h%s0"% i,"s%s0"% i)
self.addLink("h%s1"% i,"s%s0"% i)
self.addLink("h%s2"% i,"s%s1"% i)
self.addLink("h%s3"% i,"s%s1"% i)
self.addLink("s%s2"% i,"s%s0"% i)
self.addLink("s%s3"% i,"s%s0"% i)
self.addLink("s%s2"% i,"s%s1"% i)
self.addLink("s%s3"% i,"s%s1"% i)
self.addLink("s%s2"% i,"s0")
self.addLink("s%s2"% i,"s1")
self.addLink("s%s3"% i,"s2")
self.addLink("s%s3"% i,"s3")
def simpleTest():
"Create and test a simple network"
topo =FatTopo(k=4)
net = Mininet( topo, controller=RemoteController)
net.addController( 'c0', controller=RemoteController, ip='192.168.132.147', port=6633 )
#net=Mininet(topo)
net.start()
net.pingAll()
if name == '__main__':
# Tell mininet to print useful information
setLogLevel('info')
simpleTest()
我想用mininet实现一个fattree的网络结构,代码如上,问题在于由于fattree中存在loop,默认的控制器貌似有点问题会出现ping不通的情况,查过资料后发现pox控制器可以处理loop的情况,于是尝试去用pox的控制器,但仍然ping不通。
想问下如何用mininet实现fattree结构。我理解的是在sdn里面,所有路由器一开始就是空的,如何转发只取决于控制器下发的流表,所以mininet写的python脚本只需要把网络拓扑搭好,剩余部分都在控制器那边实现,不知道这么理解是否正确,望指教。
网上的fattree的代码都看了下,好像一般的也就把拓扑搭好了,也没有什么特殊的处理,希望各位大牛能详细解释下fattree里面下发流表的部分