2017-06-22 170 views
0

給定一個Mininet網絡,我想模擬流程,例如,使用iperf。要做到這一點,我可以運行以下命令:內Mininet CLI,h1h2Mininet內批量執行命令

h5 iperf3 -s -p 1337 & 
h6 iperf3 -s -p 1338 & 
h1 iperf3 -c h5 -n 10G -b 11M -p 1337 & 
h2 iperf3 -c h6 -n 10G -b 11M -p 1338 & 

...代表在Mininet拓撲主機。如果Mininet命令以主機ID開始,則命令將像在該主機上一樣運行。爲方便起見,以後出現的任何ID將被其IP地址替代。

這些命令的工作,但我還沒有找到一種方法來自動化他們。我可以運行一個可以調用bash命令的python腳本,但是上面的命令會中斷,因爲上下文無法理解mininet ID。手動輸入所有這些都很煩人,即使它是複製粘貼作業。

有沒有辦法將一批命令發送到mininet CLI?

+1

如果「mininet CLI」是在開始執行上述命令之前啓動的程序,您能否顯示如何調用它?重要的是你實際輸入的命令是bash本身,還是mininet。 –

+1

...如果是上面需要輸入的mininet,那麼你應該看看[Here文件](http://wiki.bash-hackers.org/syntax/redirection#here_documents)。 –

+0

這些命令是在mininet CLI中輸入的,是的。 CLI是從一個python腳本中調用的,就像我在互聯網上找到的例子通常那樣。調用CLI的python函數是CLI({mininet object})'。然而到目前爲止,我還沒有找到一種方法可以將任何東西從外部終端傳輸到CLI中...... –

回答

2

Mininet documentation中,可以通過腳本在CLI模式下執行__init__。腳本的每一行都將在CLI中執行,而不會停止用戶輸入。在本文檔中粗略瀏覽可以發現CLI用於解釋和執行命令的各種方法。

下面是一個例子:

myScript = "genTraffic.sh" 
CLI(net, script=myScript) # Batch mode script execution 
CLI(net) # Send user in the CLI for additional manual actions 

我使用的腳本是一樣的一個張貼在的問題,有預謀的Ping讓網絡控制器和Mininet一段時間才能「看到」對方。

h1 ping h5 -c 3 
h2 ping h6 -c 3 
h5 iperf3 -s -p 1337 & 
h6 iperf3 -s -p 1338 & 
h1 iperf3 -c h5 -n 10G -b 11M -p 1337 & 
h2 iperf3 -c h6 -n 10G -b 11M -p 1338 & 

它也發生在Host和Switch python對象有一個名爲cmd的方法。這是用於饋送以例如開頭的命令時使用的方法。 Mininet CLI中的h1s1。我相信使用cmd的一系列調用等價於批處理腳本方法。

特別提示:如果你想使用像CLI h1s1令牌,而不必是由相關的IP地址替換,你能逃脫令牌:\h1