【问题标题】:Executing commands in batch inside Mininet在 Mininet 内批量执行命令
【发布时间】:2017-11-26 03:55:17
【问题描述】:

给定一个 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 发送一批命令?

【问题讨论】:

  • 如果“mininet CLI”是您在运行上述命令之前启动的程序,您能说明您是如何调用它的吗?您实际输入命令的是 bash 本身还是 mininet,这很重要。
  • ...如果上面需要输入的是mininet,那你应该看看Here documents
  • 这些命令是在mininet CLI里面输入的,是的。 CLI 是从 python 脚本调用的,这在我在 Internet 上找到的示例中通常是这种情况。调用 CLI 的 python 函数是CLI({mininet object})。不过,到目前为止,我还没有找到一种方法将外部终端的任何内容通过管道传输到 CLI...
  • 考虑编辑您的 Q 以显示在您到达示例代码的第一行 h5 iperf3 -s -p 1337 & 之前所需的所有步骤。祝你好运。
  • http://mininet.org/ 看来您可以完全跳过python 部分并使用sudo mn 获取CLI。然后你应该可以使用上面提到的HERE 文档来传递命令。您必须在开始之前为变量赋值,因此 h5 iperf3 -s -p 1337 可能是该行的 1 个变量,或者它可以像 h${num1} iperf3 -s -p ${port1} 一样分开。祝你好运。

标签: bash mininet


【解决方案1】:

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

我使用的脚本与问题中发布的脚本相同,预先添加了 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 的方法。这是在输入以例如开头的命令时使用的方法。 h1s1 在 Mininet CLI 中。我相信使用对cmd 的一系列调用等效于批处理脚本方法。

额外提示:如果您想在 CLI 中使用 h1s1 等令牌而不用相关 IP 地址替换,您可以转义令牌:\h1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 2013-03-22
    • 1970-01-01
    • 2019-09-09
    • 2012-11-15
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多