首頁>Club>
5
回覆列表
  • 1 # 使用者2106110353953

    為Mininet新增自定義拓撲:

    Mininet原生提供了多種拓撲型別:

    SingleSwitchTopo:簡單拓撲(Host——Switch——Host)

    LinearTopo(k,n):鏈狀拓撲,k臺交換機以單鏈形態連線,分別下接n臺主機

    TreeTopo(depth,fanout):樹形拓撲,建立一個深度為depth、扇出為fanout的樹狀拓撲

    Mininet預設情況下並沒有實現胖樹的網路拓撲,但Mininet支援新增自定義拓撲的功能。本文根據Mininet自帶的拓撲定義,在原拓撲庫中添加了胖樹拓撲類,實現從命令列直接啟動k叉胖樹拓撲環境。

    (注:加粗的程式碼行為自定義拓撲關鍵部分)

    mininet/topo.py:

    所有的拓撲類都繼承自topo模組下的Topo基類,Topo基類實現了addNode、addSwitch、addHost、addPort、addLink等新增節點、鏈路的重要方法。Topo模組中還實現了單交換機拓撲SingleSwitchTopo類和鏈狀拓撲LinearTopo類。

    mininet/topolib.py:

    topolib模組中定義了樹狀拓撲TreeTopo類,自定義的拓撲類可以定義在topolib模組下也可定義在topo模組下,拓撲類的__init__方法中可新增構建拓撲所需要的引數,Mininet在呼叫拓撲類時會將從命令列接收的topo選項之後的引數*args和關鍵字引數**kwargs傳遞到該拓撲類的__init__方法中初始化該拓撲類的物件。如本文中定義的FatTree拓撲類需要接收引數k以確定胖樹的叉數:

    class FatTreeTopo( Topo ):

    def __init__( self, k = 4 ):

    "Create fat-tree topo."

    # initialization code

    bin/mn:

    mn是Mininet執行的直譯器,負責解析引數,定義了MininetRunner類用來構建、配置並執行整個Mininet平臺。自定義的拓撲類需要匯入mn中,然後在存放拓撲引數的字典TOPOS中加入對應的鍵值,就可以在mn命令中使用自定義的拓撲了:

    from mininet.topolib import FatTreeTopo

    TOPOS = { "linear": LinearTopo,

    "single": SingleSwitchTopo,

    "tree": TreeTopo,

    "fattree": FatTreeTopo }

    啟動8叉胖樹自定義拓撲的Mininet拓撲環境:

    $ sudo mn --topo=fattree, k=8

    PS: 如還有問題可再問我,當初自己弄這東西時也很糾結搞了半天,希望這個回答對你來說還不是太晚=。=

  • 中秋節和大豐收的關聯?
  • 乞巧節最出名的十首詩?