10 CORE Emane

EMANE

原文链接:EMANE


1. EMANE 是什么

可扩展移动自组织网络仿真器 (EMANE) 允许使用可插拔 MAC 和物理层架构进行异构网络仿真。 EMANE 框架提供了一种实现架构,用于以网络仿真模块 (NEM) 的形式对不同的无线电接口类型进行建模,并将这些模块合并到在分布式环境中运行的实时仿真中。

EMANE 由美国海军研究实验室 (NRL) 代码 5522 和 Adjacent Link LLC 开发,他们维护以下网站:

  • https://github.com/adjacentlink/emane
  • http://www.adjacentlink.com/

可以使用绑定到虚拟设备的 EMANE 来模拟更高保真度的无线网络,而不是使用 CORE 构建 Linux 以太网桥接网络。CORE 使用其虚拟网络堆栈和协议和应用程序的进程空间模拟第 3 层及以上(网络、会话、应用程序),而 EMANE 使用其可插拔的 PHY 和 MAC 模型模拟第 1 层和第 2 层(物理和数据链路)。

CORE 和 EMANE 之间的接口是一个 TAP 设备。CORE 使用 Linux 网络命名空间构建虚拟节点,将 TAP 设备安装到命名空间中,并在命名空间中实例化一个 EMANE 进程。EMANE 进程将用户空间套接字绑定到 TAP 设备,用于从 CORE 发送和接收数据。

EMANE 实例通过控制端口(例如 ctrl0、ctrl1)向和从其他 EMANE 实例发送和接收 OTA(无线)流量。它还使用相同或不同的控制端口向事件服务发送事件和从事件服务接收事件。 EMANE 模型通过 CORE 的 WLAN 配置对话框进行配置。每个支持的 EMANE 模型都有一个对应的 EmaneModel Python 类,以提供配置项及其到 XML 文件的映射。这样可以轻松支持新模型。当 CORE 启动仿真时,它会生成指定 EMANE NEM 配置的适当 XML 文件,并启动 EMANE 守护程序。

一些 EMANE 模型支持位置信息以确定何时应丢弃数据包。EMANE 有一个事件系统,其中位置事件被广播到所有 NEM。当节点在画布上移动时,CORE 可以生成这些位置事件。画布大小和比例对话框具有用于将 X、Y 坐标系映射到 EMANE 使用的纬度、经度地理系统的控件。当在 core.conf 配置文件中指定时,CORE 还可以订阅 EMANE 位置事件并在画布上移动节点,因为它们在 EMANE 仿真中移动。例如,当仿真脚本生成器运行移动脚本时,就会发生这种情况。

2. CORE 中的 EMANE

本节将介绍在 CORE 中运行和使用 EMANE 的一些高级主题和示例。

可以在 EMANE 教程中找到更详细的教程和示例

下面的每个主题都假设已安装 CORE、EMANE 和 OSPF MDR。

警告:演示文件将在新的 core-pygui 中找到。

主题模型描述
XML FilesRF Pipe用于驱动 EMANE 的生成的 XML 文件概述
GPSDRF Pipe使用 EMANE 运行和集成 gpsd 的概述
PrecomputedRF Pipe使用预计算传播模型的概述
EELRF Pipe使用仿真事件日志 (EEL) 生成器的概述
Antenna ProfilesRF Pipe在 EMANE 中使用天线配置文件的概述

2.1. XML Files

原文链接:EMANE XML Files


2.1.1. 概述

介绍 CORE 生成的 XML 文件,用于为给定节点驱动 EMANE。

EMANE Demo 0 可能会提供更多有用的细节。

2.1.2. 运行演示
  1. 在 GUI 中选择 Open...
  2. 加载 emane-demo-files.xml
  3. 点击开始按钮
  4. 启动完成后双击 n1 调出 nodes 终端
2.1.3. 示例演示

我们将看看提供的示例演示中生成的文件。在本例中,我们运行的是 RF Pipe 模型。

2.1.3.1. 生成文件
NameDescription
<node name>-platform.xml模拟器实例的配置文件
<interface name>-nem.xml用于创建 NEM 的配置
<interface name>-mac.xml用于定义 NEM MAC 层的配置
<interface name>-phy.xml用于定义 NEM PHY 层的配置
<interface name>-trans-virtual.xml使用虚拟传输时的配置
<interface name>-trans.xml使用原始传输时的配置
2.1.3.2. 列出文件

以下是启动演示会话后 n1 中的文件。

root@n1:/tmp/pycore.46777/n1.conf# ls
eth0-mac.xml  eth0-trans-virtual.xml  n1-platform.xml       var.log
eth0-nem.xml  ipforward.sh            quaggaboot.sh         var.run
eth0-phy.xml  n1-emane.log            usr.local.etc.quagga  var.run.quagga
2.1.3.3. Platform XML

用于为节点运行 EMANE 的根配置文件是平台 xml 文件。 在这个演示中,我们正在查看 n1-platform.xml

  • 列出为平台设置的所有配置值
  • 为 EMANE 将为该节点创建的每个接口提供的唯一 nem id
  • 用于定义给定 Nem 的文件的路径
root@n1:/tmp/pycore.46777/n1.conf# cat n1-platform.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE platform SYSTEM "file:///usr/share/emane/dtd/platform.dtd">
<platform>
  <param name="antennaprofilemanifesturi" value=""/>
  <param name="controlportendpoint" value="0.0.0.0:47000"/>
  <param name="eventservicedevice" value="ctrl0"/>
  <param name="eventservicegroup" value="224.1.2.8:45703"/>
  <param name="eventservicettl" value="1"/>
  <param name="otamanagerchannelenable" value="1"/>
  <param name="otamanagerdevice" value="ctrl0"/>
  <param name="otamanagergroup" value="224.1.2.8:45702"/>
  <param name="otamanagerloopback" value="0"/>
  <param name="otamanagermtu" value="0"/>
  <param name="otamanagerpartcheckthreshold" value="2"/>
  <param name="otamanagerparttimeoutthreshold" value="5"/>
  <param name="otamanagerttl" value="1"/>
  <param name="stats.event.maxeventcountrows" value="0"/>
  <param name="stats.ota.maxeventcountrows" value="0"/>
  <param name="stats.ota.maxpacketcountrows" value="0"/>
  <nem id="1" name="tap1.0.f" definition="eth0-nem.xml">
    <transport definition="eth0-trans-virtual.xml">
      <param name="device" value="eth0"/>
    </transport>
  </nem>
</platform>
2.1.3.4. NEM XML

nem 定义将包含对用于给定 nem 的传输、mac 和 phy xml 定义的引用。

root@n1:/tmp/pycore.46777/n1.conf# cat eth0-nem.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE nem SYSTEM "file:///usr/share/emane/dtd/nem.dtd">
<nem name="emane_rfpipe NEM">
  <transport definition="eth0-trans-virtual.xml"/>
  <mac definition="eth0-mac.xml"/>
  <phy definition="eth0-phy.xml"/>
</nem>
2.1.3.5. MAC XML

MAC 层配置设置可在此文件中找到。 CORE 将写出所有值,即使该值是默认值。

root@n1:/tmp/pycore.46777/n1.conf# cat eth0-mac.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE mac SYSTEM "file:///usr/share/emane/dtd/mac.dtd">
<mac name="emane_rfpipe MAC" library="rfpipemaclayer">
  <param name="datarate" value="1000000"/>
  <param name="delay" value="0.000000"/>
  <param name="enablepromiscuousmode" value="0"/>
  <param name="flowcontrolenable" value="0"/>
  <param name="flowcontroltokens" value="10"/>
  <param name="jitter" value="0.000000"/>
  <param name="neighbormetricdeletetime" value="60.000000"/>
  <param name="pcrcurveuri" value="/usr/share/emane/xml/models/mac/rfpipe/rfpipepcr.xml"/>
  <param name="radiometricenable" value="0"/>
  <param name="radiometricreportinterval" value="1.000000"/>
</mac>
2.1.3.6. PHY XML

可以在此文件中找到 PHY 层配置设置。 CORE 将写出所有值,即使该值是默认值。

root@n1:/tmp/pycore.46777/n1.conf# cat eth0-phy.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE phy SYSTEM "file:///usr/share/emane/dtd/phy.dtd">
<phy name="emane_rfpipe PHY">
  <param name="bandwidth" value="1000000"/>
  <param name="fading.model" value="none"/>
  <param name="fading.nakagami.distance0" value="100.000000"/>
  <param name="fading.nakagami.distance1" value="250.000000"/>
  <param name="fading.nakagami.m0" value="0.750000"/>
  <param name="fading.nakagami.m1" value="1.000000"/>
  <param name="fading.nakagami.m2" value="200.000000"/>
  <param name="fixedantennagain" value="0.000000"/>
  <param name="fixedantennagainenable" value="1"/>
  <param name="frequency" value="2347000000"/>
  <param name="frequencyofinterest" value="2347000000"/>
  <param name="noisebinsize" value="20"/>
  <param name="noisemaxclampenable" value="0"/>
  <param name="noisemaxmessagepropagation" value="200000"/>
  <param name="noisemaxsegmentduration" value="1000000"/>
  <param name="noisemaxsegmentoffset" value="300000"/>
  <param name="noisemode" value="none"/>
  <param name="propagationmodel" value="2ray"/>
  <param name="subid" value="1"/>
  <param name="systemnoisefigure" value="4.000000"/>
  <param name="timesyncthreshold" value="10000"/>
  <param name="txpower" value="0.000000"/>
</phy>
2.1.3.7. Transport XML
root@n1:/tmp/pycore.46777/n1.conf# cat eth0-trans-virtual.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE transport SYSTEM "file:///usr/share/emane/dtd/transport.dtd">
<transport name="Virtual Transport" library="transvirtual">
  <param name="bitrate" value="0"/>
  <param name="devicepath" value="/dev/net/tun"/>
</transport>

2.2. GPSD

原文链接:EMANE GPSD Integration


2.2.1. 概述

在 CORE 中将 gpsd 与 EMANE 集成的介绍。

EMANE Demo 0 可能会提供更多有用的细节。

警告:需要安装 gpsd

2.2.2. 运行演示
  1. 在 GUI 中选择 Open...
  2. 加载 emane-demo-gpsd.xml
  3. 点击开始按钮
  4. 启动完成后双击 n1 调出 nodes 终端
2.2.3. 示例演示

本节将介绍如何在 EMANE 中运行 gpsd 位置代理,它将位置写入伪终端文件。该文件可以被 gpsd 服务器读入,并使 EMANE 位置事件可用于 gpsd 客户端。

2.2.3.1. EMANE GPSD 事件守护进程

首先在 n1 上创建一个 eventdaemon.xml 文件,内容如下。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eventdaemon SYSTEM "file:///usr/share/emane/dtd/eventdaemon.dtd">
<eventdaemon nemid="1">
 <param name="eventservicegroup" value="224.1.2.8:45703"/>
 <param name="eventservicedevice" value="ctrl0"/>
 <agent definition="gpsdlocationagent.xml"/>
</eventdaemon>

然后使用以下内容在 n1 上创建 gpsdlocationagent.xml 文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eventagent SYSTEM "file:///usr/share/emane/dtd/eventagent.dtd">
<eventagent library="gpsdlocationagent">
  <param name="pseudoterminalfile" value="gps.pty"/>
</eventagent>

启动 EMANE 事件代理。 这将有助于将位置事件馈送到上面定义的伪终端文件。

emaneeventd eventdaemon.xml -r -d -l 3 -f emaneeventd.log

启动 gpsd,读取伪终端文件。

gpsd -G -n -b $(cat gps.pty)
2.2.3.2. EMANE EEL 事件守护进程

EEL 事件将通过指定的控制网络接口从实际主机播放。 在主机上的同一目录中创建以下文件。

注意:确保以下 eventservicedevice 与主机上用于 EMANE 的控制网络设备匹配

使用以下内容在主机上创建 eventservice.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eventservice SYSTEM "file:///usr/share/emane/dtd/eventservice.dtd">
<eventservice>
  <param name="eventservicegroup" value="224.1.2.8:45703"/>
  <param name="eventservicedevice" value="b.9001.1"/>
  <generator definition="eelgenerator.xml"/>
</eventservice>

使用以下内容在主机上创建 eelgenerator.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eventgenerator SYSTEM "file:///usr/share/emane/dtd/eventgenerator.dtd">
<eventgenerator library="eelgenerator">
    <param name="inputfile" value="scenario.eel" />
    <paramlist name="loader">
      <item value="commeffect:eelloadercommeffect:delta"/>
      <item value="location,velocity,orientation:eelloaderlocation:delta"/>
      <item value="pathloss:eelloaderpathloss:delta"/>
      <item value="antennaprofile:eelloaderantennaprofile:delta"/>
    </paramlist>
</eventgenerator>

创建包含以下内容的 scenario.eel 文件。

0.0  nem:1 location gps 40.031075,-74.523518,3.000000
0.0  nem:2 location gps 40.031165,-74.523412,3.000000

启动 EEL 事件服务,它将通过控制网络将上述文件中定义的事件发送到所有 EMANE 节点。 这些位置事件将被接收并提供给 gpsd。 这允许 gpsd 客户端连接并获取 gps 位置。

emaneeventservice eventservice.xml -l 3

2.3. Precomputed

原文链接:EMANE Precomputed


2.3.1. 概述

使用预计算传播模型的介绍。

EMANE Demo 1 了解更多细节。

2.3.2. 运行演示
  1. 在 GUI 中选择 Open…
  2. 加载 emane-demo-precomputed.xml
  3. 点击开始按钮
  4. 启动完成后双击 n1 调出 nodes 终端
2.3.3. 示例演示

此演示使用 RF Pipe 模型,并将传播模型设置为预先计算。

2.3.3.1. Failed Pings

由于使用预计算并且没有发送任何路径丢失事件,节点还不能互相 ping 通。

在 n1 上打开一个终端。

root@n1:/tmp/pycore.46777/n1.conf# ping 10.0.0.2
connect: Network is unreachable
2.3.3.2. EMANE Shell

您可以利用 emanesh 来调查数据包被丢弃的原因。

root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy BroadcastPacketDropTable0 UnicastPacketDropTable0
nem 1   phy BroadcastPacketDropTable0
| NEM | Out-of-Band | Rx Sensitivity | Propagation Model | Gain Location | Gain Horizon | Gain Profile | Not FOI | Spectrum Clamp | Fade Location | Fade Algorithm | Fade Select |
| 2   | 0           | 0              | 169               | 0             | 0            | 0            | 0       | 0              | 0             | 0              | 0           |

nem 1   phy UnicastPacketDropTable0
| NEM | Out-of-Band | Rx Sensitivity | Propagation Model | Gain Location | Gain Horizon | Gain Profile | Not FOI | Spectrum Clamp | Fade Location | Fade Algorithm | Fade Select |

在上面的例子中,我们可以看到数据包被丢弃的原因是由于传播模型,这是因为我们没有发出任何路径丢失事件。 您可以运行另一个命令来验证您是否收到了任何路径损耗事件。

root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy  PathlossEventInfoTable
nem 1   phy PathlossEventInfoTable
| NEM | Forward Pathloss | Reverse Pathloss |
2.3.3.3. Pathloss Events

在主机上,我们会将路径损耗事件从所有 Nems 发送到所有其他 Nems。

注意:确保正确指定正确的控制网络设备

emaneevent-pathloss 1:2 90 -i <controlnet device>

现在,如果我们检查 n2 上的路径丢失事件,我们将看到上面刚刚发送的内容。

root@n1:/tmp/pycore.46777/n1.conf# emanesh localhost get table nems phy  PathlossEventInfoTable
nem 1   phy PathlossEventInfoTable
| NEM | Forward Pathloss | Reverse Pathloss |
| 2   | 90.0             | 90.0

现在也应该能够从 n2 ping n1。

root@n1:/tmp/pycore.46777/n1.conf# ping -c 3 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=3.06 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=2.12 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=1.99 ms

--- 10.0.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 1.991/2.393/3.062/0.479 ms

2.4. EEL

原文链接:EMANE Emulation Event Log (EEL) Generator


2.4.1. 概述

介绍使用 EMANE 事件服务和 eel 文件提供事件。

EMANE Demo 1 了解更多细节。

2.4.2. 运行演示
  1. 在 GUI 中选择 Open...
  2. 加载 emane-demo-eel.xml
  3. 点击开始按钮
  4. 启动完成后双击 n1 调出 nodes 终端
2.4.3. 示例演示

这个演示将重新定义一个 EMANE 事件服务和 eel 文件来驱动一个 EMANE 事件服务。

2.4.3.1. Viewing Events

在 n1 上,我们将使用 EMANE 事件转储实用程序来侦听事件。

root@n1:/tmp/pycore.46777/n1.conf# emaneevent-dump -i ctrl0
2.4.3.2. Sending Events

在主机上,我们将创建以下文件并启动针对控制网络的 EMANE 事件服务。

警告:确保将 eventservicedevice 设置为正确的控制网络值。

使用以下内容创建 eventservice.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eventservice SYSTEM "file:///usr/share/emane/dtd/eventservice.dtd">
<eventservice>
  <param name="eventservicegroup" value="224.1.2.8:45703"/>
  <param name="eventservicedevice" value="b.9001.f"/>
  <generator definition="eelgenerator.xml"/>
</eventservice>

接下来我们将创建 eelgenerator.xml 文件。 EEL Generator 实际上是一个加载句子解析的插件。 句子解析插件知道如何将某些句子(在本例中为 commeffect、location、velocity、orientation、pathloss 和天线轮廓句子)转换为相应的 EMANE 事件等价物。

commeffect: eelloadercommeffect: delta
位置、速度、方向:eelloaderlocation:delta
路径损失:eelloader 路径损失:增量
天线配置文件:预加载器天线配置文件:delta

这些配置项告诉 EEL Generator 哪些句子映射到哪个插件,以及是发布增量更新还是完整更新。

使用以下内容创建 eelgenerator.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE eventgenerator SYSTEM "file:///usr/share/emane/dtd/eventgenerator.dtd">
<eventgenerator library="eelgenerator">
    <param name="inputfile" value="scenario.eel" />
    <paramlist name="loader">
      <item value="commeffect:eelloadercommeffect:delta"/>
      <item value="location,velocity,orientation:eelloaderlocation:delta"/>
      <item value="pathloss:eelloaderpathloss:delta"/>
      <item value="antennaprofile:eelloaderantennaprofile:delta"/>
    </paramlist>
</eventgenerator>

最后使用以下内容创建 scenario.eel

0.0  nem:1 pathloss nem:2,90.0
0.0  nem:2 pathloss nem:1,90.0
0.0  nem:1 location gps 40.031075,-74.523518,3.000000
0.0  nem:2 location gps 40.031165,-74.523412,3.000000
0.0  nem:1 location gps 40.031075,-74.523518,3.000000
0.0  nem:2 location gps 40.031165,-74.523412,3.000000
1.0  nem:1 location gps 40.031227,-74.523247,3.000000
1.0  nem:2 location gps 40.031290,-74.523095,3.000000

使用上面创建的文件启动 EMANE 事件服务。

emaneeventservice eventservice.xml -l 3
2.4.3.3. Sent Events

如果我们返回查看原始终端,我们将看到事件记录到终端。

root@n1:/tmp/pycore.46777/n1.conf# emaneevent-dump -i ctrl0
[1601858142.917224] nem: 0 event: 100 len: 66 seq: 1 [Location]
 UUID: 0af267be-17d3-4103-9f76-6f697e13bcec
   (1, {'latitude': 40.031075, 'altitude': 3.0, 'longitude': -74.823518})
   (2, {'latitude': 40.031165, 'altitude': 3.0, 'longitude': -74.523412})
[1601858142.917466] nem: 1 event: 101 len: 14 seq: 2 [Pathloss]
 UUID: 0af267be-17d3-4103-9f76-6f697e13bcec
   (2, {'forward': 90.0, 'reverse': 90.0})
[1601858142.917889] nem: 2 event: 101 len: 14 seq: 3 [Pathloss]
 UUID: 0af267be-17d3-4103-9f76-6f697e13bcec
   (1, {'forward': 90.0, 'reverse': 90.0})

3. EMANE 配置

CORE 配置文件 /etc/core/core.conf 具有特定于 EMANE 的选项。 core.conf 文件中的示例 emane 部分如下所示:

# EMANE configuration
emane_platform_port = 8101
emane_transform_port = 8201
emane_event_monitor = False
#emane_models_dir = /home/username/.core/myemane
# EMANE log level range [0,4] default: 2
emane_log_level = 2
emane_realtime = True
# prefix used for emane installation
# emane_prefix = /usr

如果您有一个 EMANE 事件生成器(例如移动性或路径丢失脚本)并希望让 CORE 订阅 EMANE 位置事件,请在 core.conf 配置文件中设置以下行。

注意:如果您想在画布上手动拖动节点以更新它们在 EMANE 中的位置,请不要将此选项设置为 True。

emane_event_monitor = True

另一个常见问题是,如果从源代码安装 EMANE,默认配置前缀会将 DTD 文件放在 /usr/local/share/emane/dtd 中,而 CORE 期望它们在 /usr/share/emane/dtd 中。

更新 EMANE 前缀配置以解决此问题。

emane_prefix = /usr/local

4. 定制 EMANE 模型

CORE 通过动态加载用户创建的代表模型的 Python 文件来支持自定义开发的 EMANE 模型。自定义 EMANE 模型应放置在 CORE 配置文件中 emane_models_dir 定义的路径中。 此路径不能以 /emane 结尾。

这是一个示例模型,其中包含描述功能的文档:

"""
Example custom emane model.
"""
from typing import Dict, List, Optional, Set

from core.config import Configuration
from core.emane import emanemanifest, emanemodel


class ExampleModel(emanemodel.EmaneModel):
    """
    Custom emane model.

    :cvar name: defines the emane model name that will show up in the GUI

    Mac Definition:
    :cvar mac_library: defines that mac library that the model will reference
    :cvar mac_xml: defines the mac manifest file that will be parsed to obtain configuration options,
        that will be displayed within the GUI
    :cvar mac_defaults: allows you to override options that are maintained within the manifest file above
    :cvar mac_config: parses the manifest file and converts configurations into core supported formats

    Phy Definition:
    NOTE: phy configuration will default to the universal model as seen below and the below section does not
    have to be included
    :cvar phy_library: defines that phy library that the model will reference, used if you need to
        provide a custom phy
    :cvar phy_xml: defines the phy manifest file that will be parsed to obtain configuration options,
        that will be displayed within the GUI
    :cvar phy_defaults: allows you to override options that are maintained within the manifest file above
        or for the default universal model
    :cvar phy_config: parses the manifest file and converts configurations into core supported formats

    Custom Override Options:
    NOTE: these options default to what's seen below and do not have to be included
    :cvar config_ignore: allows you to ignore options within phy/mac, used typically if you needed to add
        a custom option for display within the gui
    """

    name: str = "emane_example"
    mac_library: str = "rfpipemaclayer"
    mac_xml: str = "/usr/share/emane/manifest/rfpipemaclayer.xml"
    mac_defaults: Dict[str, str] = {
        "pcrcurveuri": "/usr/share/emane/xml/models/mac/rfpipe/rfpipepcr.xml"
    }
    mac_config: List[Configuration] = emanemanifest.parse(mac_xml, mac_defaults)
    phy_library: Optional[str] = None
    phy_xml: str = "/usr/share/emane/manifest/emanephy.xml"
    phy_defaults: Dict[str, str] = {
        "subid": "1", "propagationmodel": "2ray", "noisemode": "none"
    }
    phy_config: List[Configuration] = emanemanifest.parse(phy_xml, phy_defaults)
    config_ignore: Set[str] = set()

5. 单结点 EMANE

本节介绍在单台机器上运行 CORE 和 EMANE。这是使用 CORE 构建 EMANE 网络时的默认操作模式。OTA 管理器和事件服务接口设置为使用 ctrl0,虚拟节点使用主要控制通道相互通信。当场景涉及 EMANE 时,主要控制通道会自动激活。使用主控制通道可以防止模拟会话在本地网络上发送多播流量并干扰其他 EMANE 用户。

EMANE 是通过 WLAN 节点配置的,因为它完全是关于模拟无线电网络。一旦节点链接到配置了 EMANE 模型的 WLAN 云,该节点上的无线电接口也可以单独配置(除了云)。

双击 WLAN 节点以调用 WLAN 配置对话框。单击 EMANE 选项卡;EMANE 已正确安装后,EMANE 无线模块应列在 EMANE 型号列表中。(如果 CORE 守护程序在安装 EMANE Python 绑定之前正在运行,可能需要重新启动它。)单击模型名称以启用它。

当在 EMANE 模型列表中选择 EMANE 模型时,单击模型选项按钮会导致 GUI 向 CORE 守护程序查询配置项。每个型号都有不同的参数,请参阅 EMANE 文档以了解每个项目的说明。默认值显示在对话框中。再次单击应用和应用将存储 EMANE 模型选择。

EMANE 选项按钮允许为 EMANE 指定一些全局参数,其中一些是分布式操作所必需的。

RF-PIPEIEEE 802.11abg 模型使用支持地理位置信息的通用 PHY,以确定节点之间的路径损耗。CORE 提供了默认的经纬度位置,默认启用了这种基于位置的路径损耗;这是通用 PHY 的路径损耗模式设置。在仿真运行时移动画布上的节点会为 EMANE 生成位置事件。要查看或更改画布的地理位置或比例,请使用画布菜单中的画布大小和比例对话框。

请注意,地理坐标系和笛卡尔坐标系之间的转换是使用 UTM(通用横轴墨卡托)投影完成的,其中定义了 6 度经度带的不同区域。对于跨越多个 UTM 区域的非常大的场景,由 CORE 生成的位置事件可能会在区域边界附近变得不准确。在这种情况下,建议使用 EMANE 定位脚本来实现地理定位的准确性。

单击绿色的“开始”按钮启动仿真并导致在链接到 EMANE WLAN 的虚拟节点中创建 TAP 设备。这些设备以接口名称出现,例如 eth0、eth1 等。EMANE 进程现在应该在每个命名空间中运行。对于四节点场景:

ps -aef | grep emane
root  1063 969 0 11:46 ? 00:00:00 emane -d --logl 3 -r -f /tmp/pycore.59992/emane4.log /tmp/pycore.59992/platform4.xml
root  1117 959 0 11:46 ? 00:00:00 emane -d --logl 3 -r -f /tmp/pycore.59992/emane2.log /tmp/pycore.59992/platform2.xml
root  1179 942 0 11:46 ? 00:00:00 emane -d --logl 3 -r -f /tmp/pycore.59992/emane1.log /tmp/pycore.59992/platform1.xml
root  1239 979 0 11:46 ? 00:00:00 emane -d --logl 3 -r -f /tmp/pycore.59992/emane5.log /tmp/pycore.59992/platform5.xml

上面的例子显示了由 CORE 启动的 EMANE 进程。 要查看 CORE 生成的配置,请在 /tmp/pycore.nnnnn/ session 目录中查找 platform.xml 文件和其他 XML 文件。 查看此信息的一种简单方法是双击虚拟节点之一,然后在 shell 中键入 cd .. 以转到会话目录。

在这里插入图片描述

6. 分布式 EMANE

在两个或多个仿真服务器之间运行分布的 CORE 和 EMANE 类似于在单个机器上运行。有几个关键的配置项需要设置才能成功,这里概述了这些。

为数据 (OTA) 和控制维护单独的网络是一个好主意。例如,控制网络可能是一个共享的实验室网络,不希望数据网络上的多播流量干扰其他 EMANE 用户。此外,控制流量可能会干扰 OTA 延迟和吞吐量,并可能影响仿真保真度。此处描述的示例将使用 eth0 作为控制接口,使用 eth1 作为数据接口,但并不严格要求使用单独的接口。请注意,这些接口名称指的是主机上存在的接口,而不是节点内的虚拟接口。

重要提示:如果使用辅助控制网络,则必须将主机上的接口分配给该网络。

每台用作仿真服务器的机器都需要安装 CORE 和 EMANE。

可用服务器的 IP 地址在 CORE 仿真服务器对话框中配置(选择会话,然后选择仿真服务器…)。此服务器列表存储在 ~/.core/servers.conf 文件中。该对话框显示可用的服务器,其中部分或全部可能已分配给画布上的节点。

节点需要分配给仿真服务器。选择多个节点,右键单击它们,然后选择分配到和所需服务器的名称。当节点未分配给任何仿真服务器时,它将在本地进行仿真。GUI 连接的本地机器被认为是“主”机器,它依次连接到另一个“从”仿真服务器。公钥 SSH 应该从 master 配置到 slaves。

在 EMANE WLAN 的 EMANE 选项卡下,单击 EMANE 选项按钮。这将打开 emane 配置对话框。启用 OTA 管理器通道应设置为开启。 OTA Manager 设备和事件服务设备应设置为控制网络设备。例如,如果您有一个主要和辅助控制网络(即 controlnet 和 controlnet1),并且您希望 OTA 流量拥有其专用网络,请将 OTA Manager 设备设置为 ctrl1,将 Event Service 设备设置为 ctrl0。可以配置 EMANE 模型。单击应用以保存这些设置。

在这里插入图片描述

注意:这是使用 EMANE 进行分布式仿真的快速清单。

  1. 按照针对普通 CORE 列出的步骤进行操作。
  2. 在 EMANE WLAN 的 EMANE 选项卡下,单击 EMANE 选项。
  3. 打开OTA Manager通道,设置 OTA Manager 设备。还要设置事件服务设备。
  4. 选择节点组,右键单击它们,然后使用“分配到”菜单将它们分配给服务器。
  5. 在开始仿真之前,使用 ntp 或 ptp 同步您机器的时钟。一些 EMANE 模型对时间很敏感。
  6. 按“开始”按钮启动分布式仿真。

现在,当使用 Start 按钮实例化仿真时,本地 CORE Python 守护程序将连接到已分配给节点的其他仿真服务器。每个服务器都有自己的会话目录,在其中生成 platform.xml 文件和其他 EMANE XML 文件。NEM ID 在服务器之间自动协调,因此没有重叠。每个服务器也有自己的平台 ID。

以太网设备用于传播多播 EMANE 事件,如配置 emane 对话框中所指定。EMANE 的事件服务可以使用移动性或路径损耗脚本运行,如 Single_PC_with_EMANE 中所述。 如果 CORE 未订阅位置事件,它将在节点在画布上移动时生成它们。

在运行时双击节点将导致 GUI 尝试通过 SSH 连接到该节点的仿真服务器并运行交互式 shell。在开始仿真之前,应使用所有仿真服务器测试公钥 SSH 配置。

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值