电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

NS2中数据包Packet的分析VIP免费

NS2中数据包Packet的分析_第1页
1/6
NS2中数据包Packet的分析_第2页
2/6
NS2中数据包Packet的分析_第3页
3/6
NS2 中数据包packet 类结构图: packet 类中的access 函数如下: inline unsigned char* access(int off) const { if (off < 0) abort(); return (&bits_[off]); } struct hdr_cmn(即共用common 头)中的access 函数如下: inline static hdr_cmn* access(const Packet* p) { return (hdr_cmn*) p->access(offset_); } 从以上的函数可以看出只要给出特定的报头在packet 中的偏移量offset_,立刻就能够取得指向该报头的指针(通过强类型转换,原理有点类似把一个子类强类型转换为其父类),从而访问或设置该报头内容。 常见 TCL 脚本中有如下语句: remove-all-packet-headers add-packet-header AODV ARP ... set ns [new Simulator] 其中涉及到的函数如下: proc add-packet-header args { foreach cl $args { PacketHeaderManager set tab_(PacketHeader/$cl) 1 } }#add-packet-header 函数把要激活的报头对应的tab_数组元素置1 脚本中new Simulator 的工作之一就是创建包结构: Simulator instproc create_packetformat { } { PacketHeaderManager instvar tab_ set pm [new PacketHeaderManager] foreach cl [PacketHeader info subclass] { if [info exists tab_($cl)] { set off [$pm allochdr $cl] #取得当前子报头在整个packet 中的偏移 $cl offset $off #把这个赋给当前的子报头中的offset 变量 } } $self set packetManager_ $pm } #下面的函数取得当前子报头在整个packet 中的偏移 PacketHeaderManager instproc allochdr cl { set size [$cl set hdrlen_] #取得子报头$cl 的长度hdrlen_ $self instvar hdrlen_ #注意此处hdrlen_变量是PacketHeaderManager 的 set NS_ALIGN 8 set incr [expr ($size + ($NS_ALIGN-1)) & ~($NS_ALIGN-1)] #计算偏移,使用了向上进位保证了,incr 的长度是一个字节(8 bit)的倍数。 set base $hdrlen_ incr hdrlen_ $incr # hdrlen_加上偏移 return $base #返回当前偏移 } 对 于计算偏移NS 手册上有如下表述:The procedure keeps a running variable hdrlen_ with the current length of BOB as new packet headers are enabled. It also arranges for 8-byte alignment for any newly-enabled packet he...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

NS2中数据包Packet的分析

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部