2017-06-22 37 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