EMANE中olsrd的调试

news2024/11/20 20:20:41

1 调试目的

本着学习的态度,对emane tutorial中的示例程序进行重现,以加深对EMANE的理解和掌握。在示例程序0(见https://github.com/adjacentlink/emane-tutorial/wiki/Demonstration-0)中介绍了使用olsrlinkview.py脚本来通过可视化界面观察olsr节点的链路连接信息及GPS信息。初次运行此脚本,发现并不能显示节点及链路信息,遂决定进行深入调试,发现问题所在。

2 OLSRD的安装

按照操作步骤启动LXC container之后,发现其中并不存在olsrd命令,原来这个是需要另行安装。于是从git hub中克隆olsrd最新源码,发现在编译的时候出错:

src/gpsdclient.h:49:10: fatal error: gps.h: 没有那个文件或目录

原来问题的原因是系统未安装gpsd相关开发库。于是使用apt install安装gpsd之后,重新编译olsrd出现如下问题:

gpsdclient field ‘source’ has incomplete type

这个问题的原因则是因为使用apt install安装的gpsd版本过低,其中未有source类型的定义。于是手动下载gpsd-release-3.25编译安装。再尝试编译olsrd顺利通过。

在进行olsrd版本的选择时,也曾选择已发布的olsrd-0.9.8版本,但是在编译此版本时也遇到了奇怪的问题:

src/cfgparser/oparse.c:265:10: fatal error: oparse.h-tmp: No such file or directory

也这是说,这个稳定版本在当前系统编译时也出现错误,在网页上找到了解决的方法 ,也就是修改olsrd的编译系统,编译时已不再需要这个后缀带tmp的文件,具体解释及修改方法见https://github.com/OLSR/olsrd/commit/be461986c6b3180837ad776a852be9ce22da56c0.patch?full_index=1。

3 OLSRD BMF plugin的加载

在示例程序0中,安装完成olsrd后,使用demo_start启动节点,打开olsrlinkview.py工具始终无法观看到链路信息。偶然发现在LXC container节点中olsrd进程其实并未成功启动。于是修改rouring1.conf中的DebugLevel 为9,即开启更详细的日志信息打印。在node-1节点中手动执行olsrd -f routing1.conf后,发现olsrd因无法加载olsrd_bmf.so.1.7.0而终止。通过搜索网络发现,这个bmf作为一个插件存在,其代码在olsrd的源码中已经存在,但在编译的时候没有使用make build_all和make install_all,导致其未能编译和安装。重新编译和安装后,在日志中发现olsrd_bmf.so.1.7.0已经成功加载,但是还是存在另一个so加载错误:

olsrd: undefined symbol: olsrd_plugin_interface_version

通过分析日志信息和routing1.conf文件后发现 ,出错原因是routing1和routing2中的配置文件中都一个空项加载导致olsrd未成功启动,此空项如下所示:

LoadPlugin “”
{
PlParam “accept” “0.0.0.0”
}

在两个配置文件中都删除此空项加载,可以看到olsrd进程进行顺利启动。但在olsrlinkview.py的图形化界面中仍然没有相关链路和GPS信息出现。

4 NODE节点的的IP地址映射

现在,只能准备通过调试olsrlinkview.py的代码来分析和定位问题。突然在代码中看到有使用node-这样的名称来访问节点以获取GPS和链路信息。而node-1或node-2这样的名称使用Ping命令在本地并不能ping通。也就是说,olsrlinkview.py通过node-这样的名称并不能访问到节点,也就无法获取信息。于是根据https://github.com/adjacentlink/emane-tutorial/wiki描述的node节点的IP地址信息和Raido接口的IP地址信息,将主机名称与IP地址的映射添加在/etc/hosts中,如下所示:

10.99.0.1 node-1
10.99.0.2 node-2
10.100.0.1 radio-1
10.100.0.2 radio-2

再次重新启动节点,GPS信息终于可以显示出来,但是链路信息还是空的。

5 OLSRD TxtInfo plugin的加载

没有其他办法,只能继续分析olsrlinkview.py代码。在网页上搜索olsr how to show links之类的语句时,偶然一个txtinfo plugin相关的内容映入眼帘,大意是说正是借助于此插件,我们可以得到链路信息。于是在olsrd中的代码查看,果然在bmf同样的目录下存在着txtinfo目录,而且其已经编译安装在/usr/local/lib目录下,那问题应该是配置文件中没有加载此插件。想到这里,问题的答案已经呼之欲出了。于是在routing1.conf和routing2.conf中都要加载olsrd_txtinfo.so.1.1。还有一点需要注意,在配置文件中要正确设置其监听端口,在olsrlinkview.py中是访问2006端口来获取信息的, 所以在routing1.conf和routing2.conf中正确的配置方式如下:

LoadPlugin “olsrd_txtinfo.so.1.1”
{
PlParam “port” “2006”
PlParam “accept” “0.0.0.0”
}
重启所有节点后,终于在olsrlinkview.py中完整呈现示例程序中展示的信息:
在这里插入图片描述

至此,完成此示例程序0的全部调试,谨以记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1010885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Marin说PCB之封装设计系列---(01)--非金属化孔的设计总结

提到封装设计小编我刚刚开始学习的时候也是一头雾水,在网上各种找视频学习怎么建封装。在这里小编我也推荐一波凡亿PCB商城上是有封装课程的,我当时就是买的凡亿的封装设计课程自己跟着老师学习的,效果还是挺好的。小编我免费给他们做一波推广…

集合减法【新思路】

#include<stdio.h> int main() {int n,m,flag0;int x;int a[100001]{0},b[100001]{0};scanf("%d %d",&n,&m);以集合A所有元素作为数组下标映射值成1 for (int i 0; i < n; i) {scanf("%d", &x);a[x] 1; }以集合B所有元素作为数组下…

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具

Fuxploider:一款针对文件上传漏洞的安全检测与研究工具 1.概述2. 工具使用1.概述 Fuxploider是一款功能强大的开源渗透测试工具,该工具专门针对文件上传漏洞而设计,可以帮助广大研究人员以自动化的方式检测和利用目标站点文件上传表单中的安全问题 由于该工具基于Python 3…

用ChatGPT自动生成流程图

我们看别人代码时&#xff0c;总希望有流程图&#xff0c;这样可以一目了然&#xff0c;不过自己写的代码&#xff0c;又不想花几个小时去画流程图。有没有更好的方法呢&#xff1f; 方法就是用ChatGPT等大模型自动生成流程图&#xff0c;并用python等语言实现自动输出流程图。…

第13篇:ESP32 idf wifi联网使用SNTP同步网络时间LCD ST7920液晶屏显示

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…

什么是Jmeter?Jmeter使用的原理步骤是什么?

1.1 什么是 JMeter Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于 Web 应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚…

贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析免疫球蛋白、前列腺癌数据...

原文链接&#xff1a;http://tecdat.cn/?p22702 贝叶斯回归分位数在最近的文献中受到广泛关注&#xff0c;本文实现了贝叶斯系数估计和回归分位数&#xff08;RQ&#xff09;中的变量选择&#xff0c;带有lasso和自适应lasso惩罚的贝叶斯&#xff08;点击文末“阅读原文”获取…

K8S集群中部署服务之应用环境配置

微服务项目sangomall应用环境配置说明 一、应用环境配置文件创建 可以创建多个application.properties或application.yml文件,通过关键配置进行激活使用&#xff0c;例如测试环境和生产环境等。 1.1 创建开发环境&#xff08;dev&#xff09; 名称&#xff1a;application-…

举例说明用 easylanguage 语言,编写抄底公式

EasyLanguage 语言在金融领域被广泛使用&#xff0c;尤其是用于编写交易策略和算法。以下是一个简单的抄底公式示例&#xff1a; swift 复制 // 定义变量和参数 Dim StopLossPrice As Double Dim TakeProfitPrice As Double Dim InitialPosition As Double Dim SafetyZon…

Docker 一键安装Confluence(已支持最新版本)

Docker 一键安装Confluence&#xff08;已支持最新版本&#xff09; 本文用于Confluence在Docker的安装&#xff0c;仅用于记录安装方式Jira 也可以参考这种方式安装&#xff0c;只有细微差别转载请注明来源Linux安装可参考链接Windows安装可查考链接条件允许时&#xff0c;请…

HTTP反爬困境

尊敬的程序员朋友们&#xff0c;大家好&#xff01;今天我要和您分享一篇关于解决反爬困境的文章。在网络爬虫的时代&#xff0c;许多网站采取了反爬措施来保护自己的数据资源。然而&#xff0c;作为程序员&#xff0c;我们有着聪明才智和技术能力&#xff0c;可以应对这些困境…

《存储IO路径》专题:四种IO栈大比武

1.Linux IO栈处理 我们就从一个常见Linux IO处理流程示意图开始今天的主题。 这个示意图主要描述了Linux系统中I/O请求的处理流程,涉及了I/O接口、文件系统、块层、NVMe驱动等多个部分,整个IO流程处理主要概括以下步骤: 1. 应用程序(Applications)将I/O请求提交给I/O接口…

腾讯mini项目-【指标监控服务重构】2023-07-19

今日已办 OpenTelemetry Logs 通过日志记录 API 支持日志收集 集成现有的日志记录库和日志收集工具 Overview 日志记录 API - Logging API&#xff0c;允许您检测应用程序并生成结构化日志旨在与其他 telemerty data&#xff08;例如metric和trace&#xff09;配合使用&am…

计算机专业毕业设计项目推荐06-工作室管理系统(Java+Vue+Mysql)

工作室管理系统&#xff08;JavaSpringVueMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现****最后想说的****联系方式** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较…

Postman —— post请求数据类型

1、Postman中post的数据类型 post中有以下数据类型 1、form-data 2、x-www-form-urlencoded 3、raw 4、binary 2、Postman请求不同的post数据类型 from-data multipart/form-data&#xff0c;它将表单的数据组织成Key-Value形式&#xff0c;也可以上传文件&#xff0c;当…

核心实验23_GRE over IPsec vpn_ENSP

项目场景&#xff1a; 核心实验23_GRE over IPsec vpn_ENSP 实搭拓扑图&#xff1a; 总部R3具体操作&#xff1a; 1.确保公网地址可达 [R3]ip route-static 0.0.0.0 0 23.1.1.2 [R4]ip route-static 0.0.0.0 0 24.1.1.22.创建安全提议以及安全策略 对数据加密和 认证的一个方…

【win10】怎么删除休眠文件

电脑c盘天天爆红&#xff0c;每天可用空间都变少&#xff0c;或者电脑晚上不关机&#xff0c;只锁屏后息屏&#xff0c;第二天发现电脑关机了&#xff0c;可能就是休眠功能惹得鬼。 以下是关闭休眠功能步骤&#xff1a;   1、这个隐藏的系统文件hiberfil.sys&#xff0c;体积…

iOS App上传到苹果应用市场构建版本的图文教程

使用hbuilderx的h5或uniapp框架写的前端&#xff0c;进行云打包ios应用&#xff0c;会生成一个ipa后缀的应用文件。这个文件是没有办法像安卓应用那样直接安装在手机上面的。需要上架到苹果应用商店&#xff0c;用户才能下载安装使用。 因此&#xff0c;我们这篇文章讲详细介绍…

MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0)VSCode配置c/c++环境 彻底删除vscode(包括插件及配置!)

目录 一、简介 二、下载 1 旧版安装&#xff08;8.1.0&#xff09; 从 sourceforge.net 下载 2 新版安装(本次采用较新版本~~~) 从 github 下载 从 镜像站点 下载 自己编译 三、安装与配置 1. 在线安装&#xff08;这里仅作参考了解&#xff09; 2. 离线安装&…

基于Qt4开发曲线绘制交互软件Plotter

目前市面上有很多曲线绘制软件,但其交互功能较差。比如,想要实现数据的交互,同步联动等,都需要大量繁琐的人工操作。所以讲想开发一款轻量级的曲线绘制交互软件。下面就以此为案例,记录一下基于Qt4的开发过程。 目录 1 需求 2 技术路线 3 开发流程 1 框架搭建 2 菜单…