EMANE中olsrd的调试

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.mzph.cn/news/78818.shtml

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

相关文章

基于Python的UG二次开发入门

文章目录 基于Python的UG二次开发入门1 二次开发环境搭建1.1 安装UG1.2 安装Pycharm1.3 环境配置1.4 测试 2 NX Open介绍2.1 基础架构2.1.1 Sessions and Parts2.1.2 Objects and Tags2.1.3 Factory Objects(工厂对象)2.1.4 Builder Objects(…

9.14号作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 有些功能&#xff0c;不会 #include <iostream>using namespace std; //创建vector类 class Vector { private:int *data;int size;int capacity; public://无参构造Vector(){}//拷贝构造Vector(c…

【绝㊙️】三年开发内功心得

经典嵌套if-else问题 这个也是老生常谈问题了&#xff0c;不管哪里都能看到。 那如何解决 方法一&#xff08;重要&#xff09;&#xff1a; 如果逻辑分支过多&#xff0c; 即使你不解决嵌套if-slse&#xff0c;至少也要把每个 if的{}里的逻辑抽到一个独立的方法或者工具类…

微信小程序的疫苗接种预约设计与实现vue+uniapp

对于本小程序的疫苗预约的设计来说&#xff0c;系统开发主要是采用java语言&#xff0c;在整个系统的设计中应用MySql数据库来完成数据存储&#xff0c;具体根据疫苗预约信息的现状来进行开发的&#xff0c;具体根据现实的需求来实现疫苗预约网络化的管理&#xff0c;各类信息有…

uniapp中video播放视频上按钮没显示的问题

video标签层级很高&#xff0c;尝试了添加z-index&#xff0c;但无效果 通过查阅资料&#xff0c;得知cover-view层级比video层级高 效果图 需求是为了使直播时&#xff0c;可选是原画/流畅 解决方案 首先&#xff0c;在pages.json中配置右上角的图标 {"path" : …

YOLOv5:修改backbone为ConvNeXt

YOLOv5&#xff1a;修改backbone为ConvNeXt 前言前提条件相关介绍ConvNeXtYOLOv5修改backbone为ConvNeXt修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作&#xff0c;方便自己查阅。由于本人水平有限&#xff0c;难免出现错漏&#xff0c…

TCP/IP传输协议学习

了解完整的通信过程 1.发送方源终端设备的应用创建数据。 2.当数据在源终端设备中沿协议栈向下传递&#xff0c;对其分段和封装。 3.在协议栈网络接入层的介质上生成数据。 4.通过由介质和任意中间设备组成的网际层网络传输数据。 5.在目的终端设备中沿协议栈向上传递时对其…

微信小程序线上加载使用iconfont问题

1.在微信小程序根目录下创建style文件夹&#xff0c;里面再创建iconfont文件夹&#xff0c;用于放置iconfont图标文件和iconfont样式文件 2.给iconfont.wxss写样式&#xff08;也可以下载iconfont代码&#xff0c;拷贝iconfont.css里的代码复制进去&#xff09; font-face {fo…

Ecrett Music:AI音乐创作软件

【产品介绍】 Ecrett Music是一个由人工智能驱动的AI音乐创作软件&#xff0c;可以帮助内容创作者快速、简单、便宜地制作出适合自己的无版权音乐。无论你是做游戏、视频、播客还是其他类型的内容&#xff0c;都可以在Ecrett Music上选择场景、情绪或风格&#xff0c;然后点击一…

kali安装volatility及插件mimikatz

1.准备工作 kali安装pip2 wget https://bootstrap.pypa.io/pip/2.7/get-pip.py python2 get-pip.py 查看pip2版本 python2 -m pip -v pip2安装升级 pip2 install --upgrade setuptools 安装2个库 pip2 install construct2.10.54 pip2 install pycryptodome 下载文件d…

Kubernetes入门 十七、Helm 包管理器

目录 概述Helm 的三大概念Helm 的安装仓库管理Helm 的常用命令 chart详解目录结构Redis chart 实践升级回滚 概述 Kubernetes 上的应用对象&#xff0c;都是由特定的资源描述组成&#xff0c;包括 Deployment、Service 等&#xff0c;都保存在各自的文件中或者集中写在一个配置…

通过Git Bash将本地文件上传到本地github

1. 新建一个仓库&#xff08; Repository&#xff09; 1.1登录Github&#xff0c;点击个人头像&#xff0c;点击Your repositories&#xff0c;点击New。 1.2 填写信息 Repository name: 仓库名称 Description(可选): 仓库描述介绍,不是必填项目。~~建议填写上哦&#xff01;…

计算机专业毕业设计项目推荐02-个人医疗系统(Java+原生Js+Mysql)

个人医疗系统&#xff08;Java原生JsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以…

华三路由交换技术基础——计算机网络基础

计算机网络&#xff1a; 定义&#xff1a;一组具有自治权的计算机互联的集合 作用&#xff1a; 1.共享信息资源 2.分解式处理信息 4.负载均衡 5.综合信息服务 它是计算机技术与通信技术的两个领域的结合 一&#xff0c;计算机网络中的基本概念&#xff1a; 局域网&#xff…

web端动效 PAG

之前写过一篇lottie动效的文章&#xff1a;web端动效 lottie-web 使用&#xff0c;本篇写一下PAG-web的基础使用。 PAG是腾讯开发&#xff0c;支持移动端、桌面端以及Web端的动效工作流解决方案。目标是降低或消除动效相关的研发成本&#xff0c;能够一键将设计师在 AE&#x…

【深度学习】 Python 和 NumPy 系列教程(十四):Matplotlib详解:1、2d绘图(下):箱线图、热力图、面积图、等高线图、极坐标图

目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 0. 设置中文字体 1-5. 折线图、散点图、柱状图、直方图、饼图 6. 箱线图&#xff08;Box Plot&#xff09; 7. 热力图&#xff08;Heatmap&#xff09; 8. 面积图&#xff08;Area Plot&#xff09; 9. 等…

腾讯云2023年云服务器优惠活动价格表

腾讯云经常推出各种云产品优惠活动&#xff0c;为了帮助大家更好地了解腾讯云服务器的价格和优惠政策&#xff0c;下面给大家分享腾讯云最新云服务器优惠活动价格表&#xff0c;助力大家轻松上云&#xff01; 一、轻量应用服务器优惠活动价格表 1、轻量应用服务器&#xff1a;…

【JAVA - List】差集removeAll() 四种方法实现与优化

一、场景&#xff1a; 二、结论&#xff1a; 1. 四种方法耗时 三、代码&#xff1a; 一、场景&#xff1a; 求差集 List1 - Lsit2 二、结论&#xff1a; 1. 四种方法耗时 初始条件方法名方法思路耗时 List1.size319418 List2.size284900 List..removeAll(Lsit2)1036987ms…

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程

群晖Cloud Sync数据同步到百度云、另一台群晖、nextcloud教程 一、群晖套件中下载Cloud Sync 二、同步到百度云盘 打开Cloud Sync&#xff0c;点击左上角的号&#xff0c;云供应商选择百度云。 这里可以选择双向备份&#xff0c;也可以只上穿到百度云的仅上传本地更改。因为百…

第36章_瑞萨MCU零基础入门系列教程之步进电机控制实验

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…