以前用Mininet建立拓扑都是在别人的代码上进行需求上的修改,这次从头开始将topology zoo(http://www.topology-zoo.org/)中的拓扑用Mininet建立,不失一般性,每个交换机只给分配了一个host,所有链路的端口都由Mininet自动分配,代码链接如下:https://github.com/cotyb/LISA/tree/master/topology%20mininet
其中遇到的问题有:
- File "build/bdist.linux-x86_64/egg/mininet/topo.py", line 143, in addSwitch AttributeError: 'Mininet_topology_zoo' object has no attribute 'sopts'
最后发现是因为python基础的问题,在类定义__init__(self)函数中加入:super(Mininet_topology_zoo, self).__init__()即可,当存在继承关系的时候,需要在子类中调用父类的方法,super可以实现直接用父类的方法名在子类中用父类的方法,而不需要在方法名前加上父类的名称。 - 在建立拓扑的时候总是提醒TypeError: 'list' object is not callable
最后发现是因为我的拓扑子类有switches属性,是一个list,而net.py中将switches用作方法,所以报错,遇到这种问题,mininet的CLI只提示问题,为了定位问题,可以在建立拓扑的时候使用--verbosity=debug来查看错误。