python - 用于具有自定义带宽链接的通用树形拓扑的 Mininet 脚本

标签 python topology mininet sdn

之前我使用以下命令创建了 mininet 拓扑:

sudo mn --topo 树,深度=2,扇出=5 --controller=remote,ip=10.0.0.1,端口=6633 --switch ovsk,协议(protocol)=OpenFlow13,--link tc,bw =1,延迟=10ms

我需要为不同的链接指定自定义bw值。

如何以通用方式制作一棵树,指定深度扇出值,如TreeNet提到的here ?我需要一个 setLink(int value, src, dest) 来修改创建的树的链接。

到目前为止我有这个:

#!/usr/bin/python

from functools import partial
from mininet.cli import CLI
from mininet.link import TCLink
from mininet.log import setLogLevel
from mininet.net import Mininet
from mininet.node import OVSKernelSwitch
from mininet.node import RemoteController
from mininet.topo import Topo
from mininet.util import dumpNodeConnections


class MyNet( Topo ):    
    def __init__( self ):
        "Create custom topo."

        # Initialize topology
        Topo.__init__( self )

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

    # Add switches
        s1 = self.addSwitch( 's1' )
        ...
        s6 = self.addSwitch( 's6' )

        # Add links
        self.addLink( s2, s1 ,bw=10)
        self.addLink( s3, s1 ,bw=10)
        self.addLink( s4, s1 ,bw=10)
        self.addLink( s5, s1 ,bw=10)
        self.addLink( s6, s1 ,bw=10)

        self.addLink( h1, s2 ,bw=10)
        self.addLink( h2, s2 ,bw=10)
        self.addLink( h3, s2 ,bw=10)
        self.addLink( h4, s2 ,bw=10)
        self.addLink( h5, s2 ,bw=10)

        self.addLink( h6, s3 ,bw=10)
        self.addLink( h7, s3 ,bw=10)
        self.addLink( h8, s3 ,bw=10)
        self.addLink( h9, s3 ,bw=10)
        self.addLink( h10, s3 ,bw=10)

        self.addLink( h11, s4 ,bw=10)
        ...
        self.addLink( h25, s6 ,bw=10)

topos = { 'MyNet': ( lambda: MyNet() ) }

我正在使用以下方式调用电话:

#sudo mn --custom MyNet.py --topo MyNet --controller=remote,ip=10.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13 --link tc

最佳答案

这是快速制作的。似乎正在发挥作用。我从 topolib.py 得到了一点

代码使用了递归。函数 addTree() 在其内部调用。

__author__ = 'Ehsan'
from mininet.node import CPULimitedHost
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.log import setLogLevel, info
from mininet.node import RemoteController
from mininet.cli import CLI
from mininet.link import TCLink
"""
Instructions to run the topo:
    1. Go to directory where this fil is.
    2. run: sudo -E python <file name>
       In this case it is: sudo -E python Tree_Generic_Topo.py     
"""


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

    def build( self, depth=1, fanout=2 ):
        # Numbering:  h1..N, s1..M
        self.hostNum = 1
        self.switchNum = 1

    def build( self, depth=1, fanout=2 ):
        # Numbering:  h1..N, s1..M
        self.hostNum = 1
        self.switchNum = 1
        # Build topology
        self.addTree(depth, fanout)

    def addTree( self, depth, fanout ):
        """Add a subtree starting with node n.
           returns: last node added"""
        isSwitch = depth > 0
        if isSwitch:
            node = self.addSwitch( 's%s' % self.switchNum )
            self.switchNum += 1
            for _ in range( fanout ):
                child = self.addTree( depth - 1, fanout )
                self.addLink( node, child )
        else:
            node = self.addHost( 'h%s' % self.hostNum )
            self.hostNum += 1
        return node


def run():
    c = RemoteController('c', '0.0.0.0', 6633)
    # Change the args of GenericTree() to your desired values. You could even get them from command line.
    net = Mininet(topo=GenericTree(depth=2, fanout=3), host=CPULimitedHost, controller=None)
    net.addController(c)
    net.start()

    # installStaticFlows( net )
    CLI(net)
    net.stop()

# if the script is run directly (sudo custom/optical.py):
if __name__ == '__main__':
    setLogLevel('info')
    run()

关于python - 用于具有自定义带宽链接的通用树形拓扑的 Mininet 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31404953/

相关文章:

python - 在热图中将反向对角线设为白色

python - 如何在python中的循环中连接结构

python - 解析反斜杠分隔的层次结构路径(不同的级别数)

postgresql - 如何检查多线串是否真的是多线串?

neo4j - 优化 Cypher 查询以分析网络中的拓扑

Python 单元测试 : testcase class with own constructor fails in standard library

topology - 如何使用 xbee zb 强制实现多跳拓扑?

Mininet OVS 上的 iptables

python - 执行Python脚本时没有结果

python - 从 ryu Controller 获取统计信息