代码
-
区分constructor and object
#!/usr/bin/python from mininet.topo import Topo from mininet.net import Mininet from mininet.util import dumpNodeConnections from mininet.log import setLogLevelclass SingleSwitchTopo(Topo):"Single switch connected to n hosts."def build(self, n=2):switch = self.addSwitch('s1')# Python's range(N) generates 0..N-1for 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 informationsetLogLevel('info')simpleTest()
一个简单的想法就是,python里面没有 一个类属于另一个类的说法,所以addHost和addLink之类的,前面有self.的,说明这是个构造函数,而不是一个类名
不过,这里Mininet也是一个构造函数而不是类名 – 要搞清楚
总之,除了你自己定义的类之外,其他所有网络元素都是一个构造函数,而不是一个instance/object -
继承Topo类的时候,mininet2.0之后的版本都是覆盖build类,而不是__init__()
python不是不可以支持子类覆盖父类函数么?
-
mn命令行相关
- 使用custom的话,需要在自己的文件中定义对应的dict,详见官网介绍
- 官网:在–custom文件中添加新的 CLI 命令
-
使用mininet调用系统进程。reference见官网wiki
架构特性
- mininet的host与所在服务器共享文件系统
- 共享的是所在服务器的/etc目录,所以如果要对每个host有不一样的系统配置,可以指定配置放在不用位置(详见官网介绍),否则会冲突。
demo代码学习
code summary is in this github repo
- consoles.py
此示例创建一个控制台窗口网格(a grid of console windows),每个节点一个,并允许与每个控制台进行交互和监控,包括图形监控。
- control.py
这个例子展示了如何通过实际创建两个 Mininet 对象来对控制网络和数据网络进行建模。