OGM学习包是batman-adv协议中十分重要的一部分,对OGM包的接收处理流程也是B.A.T.M.A.N. IV路由算法的基础,图3展示了batman-adv源代码中对OGM包的处理流程。


OGM包处理流程图

如图所示,Mesh节点在接收到OGM包时,函数batadv_iv_ogm_receive()作为OGM包处理流程的入口,之后会交由batadv_iv_ogm_process()函数处理,对于版本号不匹配或者目标地址为广播地址或者过期的OGM包都会丢弃,然后会根据各个不同的if_outgoing转发接口交由batadv_iv_ogm_process_per_outif()作具体处理。
这里的具体处理主要分四步:第一步调用batadv_iv_ogm_update_seqnos()函数,根据OGM报文序列号更新相应滑动窗口中的OGM报文范围值并做上标记;第二步调用batadv_iv_ogm_calc_tq()函数,查找传递该OGM报文的相应邻居节点,判断该链路是否符合双向链路的要求,然后根据下一节中提到的方法计算出通往该邻居节点的传输质量TQ值;第三步,在batadv_iv_ogm_orig_update()函数中根据前一步计算出的TQ值更新路由下一跳,若新计算出的TQ值大于原先的路由下一跳的TQ值,则更新路由下一跳为该邻居节点,否则不作更新;第四步,决定是否转发该OGM包,若转发则调用batadv_iv_ogm_queue_add()将OGM包加入到转发队列中。

batman-adv中OGM学习包代码处理流程相关推荐

  1. android中Mms学习笔记——信息发送流程(一)

    一.对于ComposeMessageActivity中确认接受者信息有效性的(confirmSendMessageIfNeeded())流程的分析,最后调用sendMessage(). 进入该法后做如 ...

  2. java excel 操作 jar包_[JAVA]使用POI向Excel中写入数据以及如何在Intellj IDEA中打jar包...

    freddon 发表于2018-05-30 阅读 1383 | 评论 0 给GF写的,现在记录下POI操作Excel读写过程;以及如何在Intellj IDEA中打jar包 代码如下: ``` imp ...

  3. 单元测试在深度学习中的应用 | 附代码「AI产品/工程落地」

    关注:决策智能与机器学习,深耕AI脱水干货 作者 |   Tilman Krokotsch 编译 |   ronghuaiyang   报道 |  AI公园 导读 本文非常详细的介绍并演示了如何将单元 ...

  4. R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function)

    R语言使用mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model,GAMs):从广义加性模型GAM中抽取学习到的样条函数(spline function) 目录

  5. web前端学习中CSS,JS代码压缩

    web前端要学习的知识有很多,前端基础要学习三个部分:HTML,CSS,JavaScript(简称JS),因此首先明确三个概念:HTML负责结构,网页想要表达的内容由html书写. CSS负责样式,网 ...

  6. 【源码】M代码的LaTeX支持包——在LaTeX文件中轻松展示M代码的语法结构

    M代码的LaTeX支持包--在LaTeX文件中轻松展示M代码的语法结构 有很多支持包实现了与此相同的功能. There are many packages out there that doprett ...

  7. Python深度学习一书中: 8.4代码VAE在tensorflow2.0错误‘lambda_1/random_normal/shape‘的解决方案

    Python深度学习一书中: 8.4代码VAE在tensorflow2.0下会有Duplicate node name in graph: 'lambda_1/random_normal/shape' ...

  8. apt包管理 Android,apt软件包管理学习(示例代码)

    软件通常以软件包的形式存储在仓库中,管理软件一般叫做软件包管理.本文主要记录apt包管理工具的基本使用:查找,安装,升级和删除. 包管理工具 软件包一般是一个压缩文件,里面包括编译好的二进制文件和需要 ...

  9. Linux中源码包的管理

    什么是开放源码,编译程序和可执行文件     开放源码:就是程序代码,写给人类看的程序语言,但机器不认识,所以无法执行:     编译程序:将程序代码转译成为机器看得懂的语言:     可执行文件:经 ...

最新文章

  1. JS(内置对象,全局函数,事件,事件对象)
  2. XFS:大数据环境下Linux文件系统的未来
  3. 边缘提取算子检测比较
  4. 求数组中的最长递增子序列
  5. 将java 打包成exe 可执行文件
  6. 高品味男人:分寸与克制
  7. java. 饼图的下面标签显示_饼图的数据标签太乱怎么办?
  8. SmartAdmin(SmartAdmin_v1.5.2)
  9. 基于命令行的网易云音乐下载器netease-dl
  10. Intel FPGA的JESD204B例程的搭建
  11. swustoj 1132 Coin-collecting by robot
  12. 北大计算机系录取通知书,北京大学98级计算机系本科同学毕业十周年聚会
  13. sas sata ssd硬盘类型,硬盘接口
  14. 智能网联汽车云控系统第1部分:系统组成及基础平台架构
  15. 消息队列及短信发送平台
  16. 微信红包又创新纪录 跨年夜发红包数达23.1亿次
  17. 华为测试岗面试经验(附面试流程)
  18. 2022建筑设计企业申报建筑设计资质流程
  19. linux启动禅道数据库失败,数据库无法正常启动
  20. [转]从 .NET 开发人员的角度理解 Excel 对象模型

热门文章

  1. 阿里云FinalShell连接
  2. ESB-企业服务总线
  3. ros-gazebo-仿真环境搭建
  4. Flutter 淘宝 App,支持 iOS、Android
  5. 苹果android怎么设置,iphone小圆点怎么设置调出来 自定义手势怎么用
  6. 数组名传参(pass by reference)
  7. RTFNet——用于城市场景语义分割的RGB和热红外融合网络
  8. 浅谈git rebase命令 -- git修改历史提交信息
  9. On release of batch it still contained JDBC statements
  10. 免外围电路CH32F/CH32V/STM32F系列单片机串口一键下载方案(CH340)