Bash 在Mininet中批量执行命令

Bash 在Mininet中批量执行命令,bash,mininet,Bash,Mininet,给定一个Mininet网络,我想模拟流量,例如使用iperf。为此,我可以运行以下操作: 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 CLI中,h1,h2。。。表示Mininet拓扑上的主机。如果Mininet命令以主机ID开头,则该命令将

给定一个Mininet网络,我想模拟流量,例如使用iperf。为此,我可以运行以下操作:

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 CLI中,
h1
h2
。。。表示Mininet拓扑上的主机。如果Mininet命令以主机ID开头,则该命令将在该主机上运行。为方便起见,以后出现的任何ID都将替换为其IP地址

这些命令可以工作,但我还没有找到一种方法来自动化它们。我可以运行一个可以调用bash命令的python脚本,但是上面的命令会中断,因为上下文无法理解mininet id。手工输入所有这些内容很烦人,即使这是一项复制粘贴工作

是否有方法将一批命令发送到mininet CLI?

在中,可以使用脚本
\uuuu init\uuuu
CLI模式。脚本的每一行都将在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 &
主机和交换机python对象也有一个名为
cmd
的方法。这是在Mininet CLI中馈送以例如
h1
s1
开头的命令时使用的方法。我相信使用对
cmd
的一系列调用相当于批处理脚本方法


奖励提示:如果您想在CLI中使用像
h1
s1
这样的令牌而不被相关IP地址替换,您可以转义令牌:
\h1

如果“mininet CLI”是在运行上述命令之前启动的程序,您可以演示如何调用它吗?重要的是,您实际输入的命令是bash本身,还是mininet…如果上面需要输入的是mininet,那么您可能应该查看。这些命令是在mininet CLI中输入的,是的。CLI是从python脚本调用的,我在internet上找到的示例通常就是这样。调用CLI的python函数是
CLI({mininet object})
。到目前为止,我还没有找到一种从外部终端到CLI的任何方法……考虑编辑你的Q来显示在你的示例代码的第一行之前代码所需的所有步骤。祝你好运。
http://mininet.org/
看起来您可以完全跳过
python
部分,使用
sudomn
获取CLI。然后,您应该能够在此处使用上面提到的
文档来传递命令。您必须在开始之前为变量赋值,因此,
h5iperf3-s-p1337
可以是该行的一个变量,或者可以像
h${num1}iperf3-s-p${port1}
那样分开。祝你好运