Core 控制网络

CORE 控制网络(CTRL NET)

概述

CORE 控制网络允许虚拟节点与其宿主环境进行通信。有两种类型:主控制网络和辅助控制网络。主控制网络主要用于与主机的虚拟节点通信以及多服务器分布式环境中的主从通信。辅助控制网络的功能为将由命名空间托管的仿真软件流量路由至测试网络场景。

激活主控制网络

Session Menu有一个选项来设置 control network prefix.

这可以设置为网络前缀(网段),例如 172.16.0.0/24。将在网段范围内的最后一个地址(例如 172.16.0.254)的主机上创建一个网桥,并且每个节点将有一个额外的 ctrl0 控制接口,并配置一个与其节点号相对应的ip地址(例如172.16.0.3 表示 n3)

还可以通过在 /etc/core/core.conf 配置文件中设置 controlnet 行来指定主控制网络的默认值,新会话将默认使用该行。要同时使用控制网络运行多个会话,应使用 session 选项而不是 core.conf 默认值

注意: 如果您有超过 253 个节点的大型场景,请使用 /23 或更大的网段。

注意: 如果前一个会话已设置控制网络并且其网桥仍在运行,则继续使用控制网络运行会话可能会失败。首先关闭上一个会话或等待它完成。如果不能,则可能需要重新启动核心守护程序并手动删除延迟的桥接器

# 重启 CORE Daemon
sudo /etc/init.d core-daemon restart

# 移除残留的控制网桥
ctrlbridges=`brctl show | grep b.ctrl | awk '{print $1}'`
for cb in $ctrlbridges; do
    sudo ifconfig $cb down
    sudo brctl delbr $cb
done

**注意:**如果在 /etc/core/core.conf 中对主控制网络配置所做的调整似乎没有生效,请检查Session Menu, the *Options…*对话框中是否有任何设置,它们可能需要清除。这些会话的设置会覆盖 /etc/core/core.conf 中的默认值。

分布式会话中的控制网络

当主控制网络做为分布式会话激活时,将在每个从服务器上创建一个控制网桥,并通过GRE隧道返回到主服务器的网桥。从控制网桥没有分配地址,可以从主机访问任何节点(本地或远程),就像单个服务器的情况一样。

在某些情况下,远程模拟节点需要与运行它们的主机而不是主服务器进行通信。可以在会话选项或 /etc/core/core.conf 中指定多个控制网络前缀,以空格分隔并以主服务器开头。每个条目的格式为 server:prefix 。如下所示,更改 /etc/core/core.conf 默认配置,为服务器 core1、core2 和 core3 分配了控制网络网段。也可在会话session选项中设定。

controlnet=core1:172.16.1.0/24 core2:172.16.2.0/24 core3:172.16.1.0/24

然后,控制网桥将被分配如下

* core1 = 172.16.1.254 (假设它是主服务器)
* core2 = 172.16.2.254
* core3 = 172.16.3.254

仍将构建从服务器导向主服务器的隧道,但如果需要在控制网络前缀之间建立网络,则需要用户添加适当的路由。控制网络脚本可能对此有所帮助。

控制网络脚本

可以使用 /etc/core/core.conf 文件中的 controlnet_updown_script 选项指定控制网络脚本。该脚本将在网桥建成(并分配地址)后运行,命令的第一个参数是网桥的名称,第二个参数是关键字 “startup”。该脚本将在移除桥时会再次被调用,命令的第一个参数是网桥的名称,命令的第二个参数是关键字 “shutdown”。该脚本默认位置在~/core/daemon/examples/controlnet_updown中。

辅助控制网络

从 EMANE 0.9.2 开始,CORE 将在命名空间内运行 EMANE 实例。由于建议将 OTA 流量与其他流量分开,因此我们将需要多个从命名空间导出的通道。最多可以定义三个辅助控制网络。 /etc/core/core.conf 文件中设置了多个控制网络。线路 controlnet1controlnet2controlnet3 定义辅助网络。

例如 /etc/core/core.conf 中配置如下

controlnet = core1:172.17.1.0/24 core2:172.17.2.0/24 core3:172.17.3.0/24
controlnet1 = core1:172.18.1.0/24 core2:172.18.2.0/24 core3:172.18.3.0/24
controlnet2 = core1:172.19.1.0/24 core2:172.19.2.0/24 core3:172.19.3.0/24

# 经过测试发现,源码已经改变读取配置方式,辅助控制网只会接入第一个网段。如下配置即可
controlnet0 = 172.17.1.0/24 
controlnet1 = 172.18.1.0/24 
controlnet2 = 172.19.1.0/24 
# controlnet配置且controlnet0未配置时,controlnet就是主控网,否则主控网网段为controlnet0
# 辅助控制网接口只在配置了emane的节点容器上生成,主控网间通信都是gre通向主服务器转发。
# 而辅助控制网接口attach节点外物理主机的网桥,并且各分布式辅助网在同一局域网配置路由后无视仿真拓扑可直接通信。

这将激活主控制网络controlnet和两个辅助控制网络,并向每个节点添加接口 ctrl0、ctrl1、ctrl2。例如在 EMANE 选项对话框中将 ctrl1 分配给 OTA 管理器设备,将 ctrl2 分配给事件服务设备,并将 ctrl0 留给 CORE 控制流量(主控网络)

NOTE: controlnet0 可以用来代替 controlnet 来配置主控制网络

与主控制网络不同,辅助控制网络不会使用隧道,因为它们的主要目的是有效地传输多播 EMANE OTA 和事件流量。

请注意,辅助控制网络没有针对每个会话的配置

为了在分布式测试环境中扩展辅助控制网络,需要向其中添加主机网络接口。 /etc/core/core.conf 中的以下几行将主机设备的 eth1eth2 添加到 controlnet1controlnet2

controlnetif1 = eth1
controlnetif2 = eth2

NOTE: 无需为主控制网络分配接口,因为使用servers.conf 中提供的IP 地址在主设备和从设备之间形成隧道

下图是上述配置的示意图: