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