AODV路由协议提供了一个特定的头部,在aodv_packet.h里面

/** General AODV Header - shared by all formats*/
struct hdr_aodv {u_int8_t        ah_type;/*u_int8_t        ah_reserved[2];u_int8_t        ah_hopcount;*/// Header access methodsstatic int offset_; // required by PacketHeaderManagerinline static int& offset() { return offset_; }inline static hdr_aodv* access(const Packet* p) {return (hdr_aodv*) p->access(offset_);}
};

在结构体hdr_aodv中,它定义了分组的类型ah_type,静态变量offset_用于在任意一个ns分组中找到AODV分组头的位置。access()方法是用来访问分组头的方法,下面的语句就是用此方法获得AODV分组头:

#define HDR_AODV(p)       ((struct hdr_aodv*)hdr_aodv::access(p))
#define HDR_AODV_REQUEST(p)     ((struct hdr_aodv_request*)hdr_aodv::access(p))
#define HDR_AODV_REPLY(p)   ((struct hdr_aodv_reply*)hdr_aodv::access(p))
#define HDR_AODV_ERROR(p)   ((struct hdr_aodv_error*)hdr_aodv::access(p))
#define HDR_AODV_RREP_ACK(p)    ((struct hdr_aodv_rrep_ack*)hdr_aodv::access(p))

offset()方法一般是被分组头管理类调用,一般很少使用。

在aodv.cc里面,定义了AODV路由协议的分组头及相应操作函数:

int hdr_aodv::offset_;
static class AODVHeaderClass : public PacketHeaderClass {
public:AODVHeaderClass() : PacketHeaderClass("PacketHeader/AODV",sizeof(hdr_all_aodv)) {bind_offset(&hdr_aodv::offset_);}
} class_rtProtoAODV_hdr;

当模拟器运行的时候,静态对象class_rtProtoAODV_hdr以’PacketHeader/AODV’和’ sizeof(hdr_all_aodv)’为参数,调用PacketHeaderClass的构造函数:

PacketHeaderClass::PacketHeaderClass(const char* classname, int hdrlen) : TclClass(classname), hdrlen_(hdrlen), offset_(0)
{
}

这为AODV分组头的大小分配了空间,并在配置时刻由分组头管理器使用。bind_offset()函数在构造函数中被调用,分组头管理器知道在哪里为这个分组头存储偏移量。举个例子,当执行语句:

struct hdr_aodv_request *rq = HDR_AODV_REQUEST(p);

时,由前面介绍得知,它会调用aodv_packet.h里面的

return (hdr_aodv*) p->access(offset_);

返回分组头的位置。

转载于:https://www.cnblogs.com/yue-/archive/2012/06/01/6260062.html

aodv包头分析-上相关推荐

  1. 网络编程_5(超时检测+UNIX域套接字+抓包工具+包头分析)

    一二章请点击:网络编程_1(网络基础+跨主机传输) 三四章请点击:网络编程_2(网络属性+UDP(UDP模型+广播组播)) 第五章请点击:网络编程_3(TCP) 第六章请点击:网络编程_4(IO模型) ...

  2. Linux驱动修炼之道-SPI驱动框架源码分析(上)

    Linux驱动修炼之道-SPI驱动框架源码分析(上)   SPI协议是一种同步的串行数据连接标准,由摩托罗拉公司命名,可工作于全双工模式.相关通讯设备可工作于m/s模式.主设备发起数据帧,允许多个从设 ...

  3. 08.零售类公司分析•上

    08.零售类公司分析•上 1.零售公司赚钱的原理 用行业内公司相互对比是最有效的分析方式,通过相互对比,我们可以一目了然的看出哪家公司更好,更能赚钱.零售公司的分析,分为两部分. 首先是比对行业内,然 ...

  4. Windows日志分析(上)

    Windows日志分析(上) 在我们Blue Team,针对Windows日志分析的场景占绝大多数,Windows 事件日志记录提供了源.用户名.计算机.事件类型和级别等详细信息,并显示应用程序和系统 ...

  5. 简要讨论python对于1688的关键字搜索、商品详情在电商运营大数据分析、电商选品、竞品分析上的帮助

    目录 1688商品详情简要描述 1688商品详情请求URL 请求方式 参数 关键信息 淘宝天猫以及1688.京东.拼多多平台不断地在改变人们的消费习惯,人们从传统购物模式不断走向线上模式,作为电商行业 ...

  6. 光纤光谱仪在气体成分分析上应用

    光纤光谱仪(http://www.microimaging.com.cn/gqgpy/)通过观测红外.可见光等波段光强度的技术,来分析和测量产品.我们可以利用这款产品在多个不同的领域进行使用,像是一些 ...

  7. SCIM输入法架构分析(上)

    SCIM输入法架构分析(上) 转载时请注明出处:http://blog.csdn.net/absurd/ 文档格式与术语说明 1.      概述 SCIM是Smart Common Input Me ...

  8. SCIM输入法架构分析 上

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! SCIM ...

  9. SCIM输入法架构分析 上)

    SCIM输入法架构分析(上) 转载时请注明出处:http://blog.csdn.net/absurd/ 文档格式与术语说明 1.      概述 SCIM是Smart Common Input Me ...

  10. [网络安全学习篇13]:IP包头分析与路由原理及实验(千峰网络安全视频笔记 13 day)

    引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足:对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以 ...

最新文章

  1. python一个月能掌握吗_零基础python入门分析,如何做到一个月学会(深思极恐)...
  2. Linux常用命令笔记2---文件管理4
  3. HDU4143-A Simple Question数论题解
  4. CodeVS 1300 文字排版 线性DP
  5. linux把标准输出赋值给变量遇到的问题
  6. Linux core dumps 的生成
  7. 使用MyEclipse快速开发图形化界面
  8. 安全监控、告警及自动化!
  9. python最小生成树算法_最小生成树:Kruskal算法及python实现
  10. Wireshark coloring rules tips
  11. esxi6.7封装nvme驱动
  12. 微信朋友圈api接口调用源码
  13. 安川机器人如何注释化指令_安川机器人 命令介绍-内部版
  14. 2的20次方怎么用计算机计算,2的20次方(2的20次方简便方法)
  15. API Gateway介绍
  16. uni-app 报错getUserProfile:fail can only be invoked by user TAP gesture.
  17. locust实现压测
  18. java怎么语音转换成文字_Annyang将语音转换为文本
  19. 北京信息工程学院考研计算机,2017届信息工程学院考研光荣榜
  20. (转载)比较流行的手机开发平台综述

热门文章

  1. 这些小工具让你的Android开发更高效
  2. 部署Hadoop集群
  3. js数组中判断是否有重复项
  4. jQuery 选择器简介
  5. komodo-edit
  6. list转换为map
  7. 23 android多线程
  8. 21世纪经济网APP
  9. android eclipse下载
  10. 关于ASP调用.net WebService 的标准例子