EMANE中olsrd的调试

2023-09-15 00:37:48

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的全部调试,谨以记录。

更多推荐

统计报告期节能率

声明本文是学习GB-T29314-2023电动机系统节能改造规范.而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们7综合评估7.1一般规定7.1.1电动机系统节能改造后,应对设备运行效果进行评估,改造后系统的生产效率和系统分界点指标应达到改造设计要求。7.1.2电动机系统改造后,应对与改造设备相关的

苏宁易购商品详情数据接口

苏宁易购商品详情数据接口采集方法如下:下载安装载图助手软件并打开苏宁易购平台,找到需要采集的商品类目。点击一个商品进入详情页,启用软件的批量下载功能并打开“自动粘贴网址”。复制商品上方的链接,链接会自动传送到首页的地址栏里。全部复制完成后,在选项中把“下载主图”、“同时下载视频”、“下载详情图”三项打勾。单击“立即下载

中移链交易模块介绍

中移链交易模块是中移链区块链系统的核心模块之一。它的主要作用是处理用户发起的交易请求,并将其打包成区块添加到区块链上。交易模块接收来自不同合约执行的指令,比如创建账号、转账、部署和执行智能合约等指令,并确保所有交易都是有效且合法的。与其他模块相比,交易模块的工作量较大,每秒需要高效地处理上千个交易请求。01交易的组件构

vision transformer

一、网络构建importtorchfromtorchimportnnfromfunctoolsimportpartial#---------------------------------------##(1)patchembedding'''img_size=224:输入图像的宽高patch_size=16:每个pa

Matlab--高等应用数学问题的MATLAB求解

1.求解n阶导数%%%如何求解n阶导数,用到diff(f,n)symsx;f=sin(x)/(x^2+4*x+3);diff(f,4)%%%如何求解100阶导数tic,F=diff(f,100);toc2.Matlab语言的优越性%%%MATLAB的优点:%MATLAB语言的简洁高效性%MATLAB语言的科学运算功能%

揭秘多数据模型与数据联动如何重塑企业数据处理和决策过程

在数字化时代,数据已经成为企业竞争的核心资源。为了更好地利用数据,许多企业开始采用低代码的多数据模型和数据联动。这些技术和方法可以用于运用多种数据模型来对用户进行分类;可以利用数据联动来提高推荐的准确性和效率,帮助企业更快速、更高效地构建数据驱动的应用程序,从而提升业务效率和竞争力。业务需求说明:1、配置固定资产领用单

Nat. Rev. Bioeng. | 中山大学左涛组详述肠道微生态工程化改造

肠道微生态工程化改造EngineeringthegutmicrobiomeReviewArticle,2023-6-16,NatureReviewsBioengineeringDOI:10.1038/s44222-023-00072-2原文链接:https://www.nature.com/articles/s4422

vue国际化教程

需求背景项目需求要做国际化,结果网上找了好几篇文章,没有一个可以一次性搞定,现在这里总结一下。首先,我们分为两部分处理,一个是前端页面的静态文字,这个由前端vue.json自行处理。第二部分就是后端的错误消息和日志部分,我们由springboot的拦截器来处理。i18n介绍i18n(其来源是英文单词internatio

说说hashCode() 和 equals() 之间的关系?

每天一道面试题,陪你突击金九银十!上一篇关于介绍Object类下的几种方法时面试题时,提到equals()和hashCode()方法可能引出关于“hashCode()和equals()之间的关系?”的面试题,本篇来解析一下这道基础面试题。先祭一张图,可以思考一下为什么?介绍equals()的作用是用来判断两个对象是否相

第二证券:算力概念强势拉升,竞业达涨停,南凌科技等大涨

算力概念20日盘中强势拉升,到发稿,竞业达涨停,南凌科技涨近10%,拓维信息涨近9%,亚康股份、神州数码涨约5%,青云科技涨逾4%。音讯面上,9月19日,国际大学生程序设计竞赛(ICPC)官网披露了华为创始人兼CEO任正非与ICPC基金会及金牌获得者的谈话纪要。任正非表明,我们行将进入波澜壮阔的第四次工业革命,其规划之

Denoising diffusion implicit models 阅读笔记

Denoisingdiffusionprobabilisticmodels(DDPMs)从马尔科夫链中采样生成样本,需要迭代多次,速度较慢。Denoisingdiffusionimplicitmodels(DDIMs)的提出是为了加速采样过程,减少迭代的次数,并且要求DDIM可以复用DDPM训练的网络。加速采样的基本思

热文推荐