在 emane 上模拟 Predictive OLSR 协议

emulate Predictive OLSR protocol on emane

最近几周,我正在学习使用 EMANE to do the emulation about Ad hoc networks which uses the Predictive OLSR 路由协议。

在P-OLSR中计算ETX指标时考虑了无人机的位置,这使得它与普通的OLSR不同。我在将无人机的位置数据传输到 P-OLSR 核心时遇到了麻烦。我从上面提到的link下载的补丁文件在协议中添加了一个gpsreceiver插件,用于从P-OLSR接收位置数据并传输。进入 P-OLSR。而在olsrd.conf.example文件中,我应该为插件设置一个接口,一个多播IP地址和一个端口,我在使用EMANE仿真平台时不知道如何设置这些东西。我尝试将多播 IP 地址和端口设置为与 eventservicegroup 属性的值相同。但是不一定对,因为数据格式不一致

EMANE 使用名为 eelgenerator 的应用程序,它可以生成 location event 来传递无人机的位置数据,但数据位于eel 日志文件格式不是 NMEA 格式,而 gpsreceiver 需要这种格式。 EMANE 还有一个名为 gpsd location agent 的应用程序,它可以处理 location 事件,并将位置数据转换为 NMEA 格式,但输出gpsd 位置代理只能直接连接到 GPSd 或通过 GPSd 连接到伪终端。 GPSd可以从NMEA格式的位置数据中获取经纬度和高度信息,并通过localhost的2947端口服务于其他应用。

那么,如何将位置数据传输到 P-OLSR 核心?如果通过gpsreceiver,我应该如何设置olsrd.conf,是否需要自己编写程序?如果不使用gpsreceiver插件,是否可以让P-OLSR核心通过GPSd获取位置数据?如果可以,具体如何实现?

PS:我的EMANE版本是emane-0.9.3。我机器的内核版本是4.2.3-300.fc23.x86_64.

我解决了这个问题。我写了一个 python 脚本来从 pts 读取数据并将其发送到 gpsreceiver。这是脚本:

import socket
fd = open("path of pts", "w+")
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.sendto(fd.readline(), (host, port))