為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
轉載