如何在 Mininet 自定义拓扑上设置带宽?

Posted

技术标签:

【中文标题】如何在 Mininet 自定义拓扑上设置带宽?【英文标题】:How to set bandwidth on Mininet custom topology? 【发布时间】:2015-08-10 08:20:29 【问题描述】:

我想在 Mininet 自定义拓扑上设置带宽。

python代码是:

#!/usr/bin/python
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel

class MyTopo( Topo ):
"Simple topology example."

    def __init__( self, **opts):
        "Create custom topo."

        # Initialize topology
        Topo.__init__( self, **opts )

        # Add hosts and switches
        h1 = self.addHost('h1')        
        h2 = self.addHost( 'h2' )

        s3 = self.addSwitch( 's3' )
        s1 = self.addSwitch( 's1' )
        s2 = self.addSwitch( 's2' )

        # Add links
        self.addLink(h1,s1,bw=10)
        self.addLink(h2,s3,bw=20)
        self.addLink(s3,s2,bw=10)
        self.addLink(s1,s3,bw=10)

topos =  'mytopo': ( lambda: MyTopo() ) 

但它有错误

------------------------------------------------------------------
Caught exception. Cleaning up...
TypeError: __init__() got an unexpected keyword argument 'bw'
------------------------------------------------------------------

我能做什么? Mininet自定义拓扑如何设置带宽?

【问题讨论】:

【参考方案1】:

您应该在self.addLink(h1,s1,bw=10) 上添加cls=TCLink

所以代码是self.addLink(h1,s1,cls=TCLink,bw=10)

添加到另一个 addLink 以使其工作

【讨论】:

这应该是公认的答案,因为它像@kown 的示例一样使用 Python【参考方案2】:

启动Mininet时,添加一个额外的参数--link=tc

【讨论】:

【参考方案3】:

您应该使用--link 参数。例如: sudo mn --topo tree,depth=2,fanout=5 --controller=remote,ip=10.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13, --link tc,bw=1,delay=10ms

我很快就会更新一个例子。

【讨论】:

但是,如果您的自定义拓扑有数百个链接,而且都有不同的带宽要求怎么办?在命令行输入会很傻,有没有办法在python文件中指定它? @JohnScolaro Mininet 无法模拟这么大的网络,您必须寻找其他解决方案,例如 MiniNeXT。 这里bw=1相当于1Mbps。如何将链接的 bw 设置为 1Gbps,因为它的 bw 取值在 1-1000 之间? 请提出一个新问题【参考方案4】:

在python文件中说明带宽和延迟,但是在运行文件时,添加

--link=tc

在命令行中,它会正常工作。

【讨论】:

【参考方案5】:

如果您使用 CLI 命令 mn 运行 Mininet,请添加 --link=tc。 如果您在 python 脚本中使用 run() 函数来启动 Mininet,请使用

net = Mininet(topo = MyTopo(), link = TCLink)
net.start()

从带有 TC 链接的 Mininet 开始,以实现带宽规范。

【讨论】:

以上是关于如何在 Mininet 自定义拓扑上设置带宽?的主要内容,如果未能解决你的问题,请参考以下文章

怎样在mininet的拓扑中修改控制器

mininet下建立拓扑时关于远程控制器的一个小问题

1 mininet 简介

4 Mininet测量路径的损耗率

mininet之miniedit可视化操作

创建多路由 mininet 拓扑