Mininet-wifi典型用法
- 执行 mn 命令未指定一个控制器的话,它会默认采用 ovsc 控制,ovs-controller
- Mininet-wifi如何和ryu配合?
ryu-manager ryu.app.simple_switch_13 先要启动ryu,然后启动mininet-wifi去连接ryu。
mn --topo=linear --switch=user --ap=user --controller=remote,ip=192.168.0.193,port=6653
ryu可以指定其它端口:
ryu-manager --ofp-listen-host '192.168.0.127' --ofp-ssl-listen-port 11884 --ofp-tcp-listen-port 11884 ryu.app.simple_switch_13
- 目前已经有的网络拓扑(下面都是使用的RYU控制器和ofsoftswitch交换机):
- minimal
创建两个host,一个switch,拓扑不能指定个数。
mn --topo=minimal --switch=user --ap=user --controller=remote,ip=192.168.0.193,port=6653
- single
创建两个host,一个switch,可以指定参数,如果参数输入3,表示创建3个host,一个switch。
mn --topo=single,3 --switch=user --ap=user --controller=remote,ip=192.168.0.193,port=6653
- reversed
reversed(反向拓扑) 和 single的效果是一样的。
mn --topo=reversed,5 --switch=user --ap=user --controller=remote,ip=192.168.0.193,port=6653
- linear
创建5个AP,创建5个station,组成一条线
mn --wifi --topo=linear,5 --switch=user --ap=user --controller=remote,ip=192.168.0.193,port=6653
- tree
--topo=tree,3,2 : 拓扑模型,交换机的深度或者层数,每个交换机下连接的主机或者交换机个数。
--topo=tree,3,2 : 三层,第一层1个交换机,第二层2个交换机,第三层4个交换机,主机:4 x 2 = 8
--topo=tree,3,3 : 三层,第一层1个交换机,第二层3个交换机,第三层9个交换机,主机:9 x 3 = 27
--topo=tree,3 : 和--topo=tree,3,2效果一样。
创建tree型拓扑不能带--wifi参数,带--wifi参数创建不起来。
tree 测试过10层网络拓扑,创建了1024个host,1023个switch,最终的结果是创建不起来,可能大概要耗时一天,cpu全都占用完了。
mn --topo=tree,3 --switch=user --ap=user --controller=remote,ip=192.168.0.193,port=6653
- torus
创建一个圆环面型拓扑,创建不起来。
mn --topo=torus --switch=user --ap=user --controller=remote,ip=192.168.0.193,port=6653
- 5个switch的线型组网:
- 3层树形拓扑组网:
- 自定义网络拓扑
- 我是在mininet-wifi的工程目录下面增加一个custom目录,这里存放新增的网络拓扑文件。
- 在custom目录下新增mytopo.py文件。新增一个子类继承 Topo_WiFi,新增的拓扑类的 __init__ 函数里面 创建各个站点和link,文件代码如下:
frommn_wifi.topoimportTopo_WiFi
classMyTopo(Topo_WiFi):
"Simpletopologyexample."
def__init__(self):
"Createcustomtopo."
#Initializetopology
Topo_WiFi.__init__(self)
#addstationsandaccesspoints
sta1=self.addStation('sta1')
sta2=self.addStation('sta2')
sta3=self.addStation('sta3')
sta4=self.addStation('sta4')
sta5=self.addStation('sta5')
ap1=self.addAccessPoint('ap1')
ap2=self.addAccessPoint('ap2')
ap3=self.addAccessPoint('ap3')
ap4=self.addAccessPoint('ap4')
ap5=self.addAccessPoint('ap5')
ap6=self.addAccessPoint('ap6')
#addlinks
self.addLink(ap1,ap2)
self.addLink(ap1,ap3)
self.addLink(ap2,ap4)
self.addLink(ap2,sta2)
self.addLink(ap3,ap5)
self.addLink(ap3,ap6)
self.addLink(ap4,sta1)
self.addLink(ap5,sta3)
self.addLink(ap5,sta4)
self.addLink(ap6,sta5)
#addtotopo
topos={'mytopo':(lambda:MyTopo())}
- 指定mn的参数如下:
--wifi --custom ./custom/mytopo.py --topo=mytopo --switch=user --ap=user --controller=remote,ip=192.168.0.193,port=6653
- 最后创建出来的拓扑图如下:
- 执行pingall,可以看到所以节点都可以ping通。