测试环境脚本
此目录包含一个设置脚本,你可以使用它来创建测试环境以测试你的 XDP 程序。 它通过创建虚拟以太网(veth)接口对并将每对的一端移动到另一个网络命名空间 来工作。你可以在另一个命名空间中加载 XDP 程序,并通过在根命名空间中 可见的接口向其发送流量。
不带参数运行 ./testenv.sh 可获取可用命令列表,或运行 ./testenv.sh --help 获取包含所有选项的完整帮助列表。该脚本可以同时保持多个环境处于活动状态, 你可以使用 --name 选项在它们之间切换。
如果你不指定名称,将使用最近使用的环境。如果你在设置新环境时不指定名称, 将为你生成一个随机名称。
示例:
设置名为 "test" 的新环境: ./testenv.sh setup --nametest=
创建 shell 别名以便从任何地方轻松使用脚本: eval $(./testenv.sh alias)
查看当前活动的环境,以及所有活动环境名称的列表(使用上面定义的别名): t status
进入当前活动的环境: t enter
在环境内执行命令: t exec -- ip a
拆除环境: t teardown
理解网络拓扑
设置测试环境时,新命名空间内的环境和从主机系统根命名空间可见的接口之间 将有一个虚拟链接。新命名空间将以传递给脚本的环境名称命名,外部命名空间 中可见的接口也是如此。命名空间 内部 的接口将始终命名为 'veth0'。
为了说明这一点,创建名为 'test01' 的测试环境(使用 t setup --name test01 将导致设置以下环境:
+-----------------------------+ +-----------------------------+
| 根命名空间 | | 测试环境命名空间 'test01' |
| | 来自 'test01' | |
| +--------+ TX-> RX-> +--------+ |
| | test01 +--------------------------+ veth0 | |
| +--------+ <-RX <-TX +--------+ |
| | 来自 'veth0' | |
+-----------------------------+ +-----------------------------+在根命名空间中可见的 'test01' 接口是我们在教程课程中安装 XDP 程序的接口。 XDP 程序将看到在此接口上 接收 的数据包;从图中可以看出,这意味着 从新命名空间内部传输的所有数据包。
设置是以这种方式创建的,以模拟主机有物理接口的情况;但流量不是从 物理接口上的外部主机到达,而是从虚拟接口上的命名空间内部到达。 这也意味着当你生成流量来测试 XDP 程序时,你需要从测试环境 内部 生成它。t ping 命令默认会在测试环境内部启动 ping,你可以使用 t exec -- <command> 在环境内运行任意程序,或者简单地使用 t enter 生成一个 shell。