代码
-
区分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 setLogLevel class SingleSwitchTopo(Topo): "Single switch connected to n hosts." def build(self, n=2): 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()
一个简单的想法就是,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 对象来对控制网络和数据网络进行建模。