在Mininet中批量执行命令

时间:2017-06-22 18:14:23

标签: 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中,h1h2 ...代表Mininet拓扑上的主机。如果Mininet命令以主机ID开头,则该命令将像在该主机上一样运行。为方便起见,以后出现的任何ID都将被其IP地址替换。

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

有没有办法将一批命令发送到mininet CLI?

1 个答案:

答案 0 :(得分:3)

Mininet documentation中,可以使用脚本__init__ 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

我使用的脚本与问题中发布的脚本相同,前置Pings让网络控制器和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