NS2简单地添加路由协议方法_第1页
NS2简单地添加路由协议方法_第2页
NS2简单地添加路由协议方法_第3页
NS2简单地添加路由协议方法_第4页
NS2简单地添加路由协议方法_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ns2上实现一个简单的路由协议ns2 版木:2.34要实现简单的路由协议:就是按照你的要求从节点1发到节点2在从节点2发到节点3, 我修改的是node节点的addr-classifier功能,因为addr-classifier是负责包的转发 功能。所有的数据都是通过addr-classifier转发出去或者转发给上层协议。用 port-classifier也可以实现类似功能,但是在仿真的时候不能加入数据比如ftp数据。 最后还是要在addr-classifier中对数据进行处理。以下是执行步骤:1) 首先在route-proto.tcl添加一个路山simple什么事情都不做。加入办法为:1 c

2、lass agent/rtproto/simple -superclass agent/rtproto2 agent/rtproto/simple proc init-all args 加入的位置大家可以观察一下其他类似的语句,那些是其他协议的句了使用时要记得在仿真脚本加n$ns rtproto simple 这个在后面仿真的tel文件会看 到,现在不用管它2) 之厉就是修改classifier的功能了。耍把收到的包按照你的耍求转发。我定义新的文件为 classifier-ants.h fll.cc 放在文件 ns-2.34/classifier 里 classifier-ants.h 文件为

3、:#include "classifier.h”class antsclassifier :public classifier public:antsclassifier();void recv(packet* p, handler*h);/处理接收的报文int nid;/节点对应的编号,在ns2里节点是从0开始逐一编号的,在对应的tel 脚木有定义;classifier-ants.cc 文件为:#include "classifier.hh#include "classifier-ants.h” static class antsclassifierclass

4、: public tciciass public:antsclassifierclass() : tclclass(mclassifier/antsh) tclobject* create(int, const char*const*) return (new antsclassifier(); class_ants_classifier;antsclassifier:antsclassifier() bind("tid &nid);void antsclassifier: :recv(packet* p, handler*h)nsobject* node = null;tc

5、l& tel = tcl:instance();if(nid=o)tcl.evalf(nsimulator instance get-link-head %d %dm,0,1 );/simulat or instance获取当前实例node= (nsobject*)tclobject:lookup(tcl.result();/获取链路 0-1 对象 的指针node->recv(p,h);if(nid=1)tcl.evalf("simulator instance get-link-head%d %d”,1,3);node= (nsobject*)tclobject:lo

6、okup(tcl.result(); node->recv(p,h); if(nid=3)free(p);仿真时我设置了 4个节点0,1,2,3功能是0发给1,1发给3.在这里tid_是相对应的节点的节点号,要从tel获得,但是对应的classifier没有这个 变量要从node的id_获得的,所以用bind进行绑定,要注意的是节点获得id号之后id_ 才赋值了,3)在这里我添在ns-node.tcl文件的$self nodeid $id_ ;# propagate id_ into c+ space 语句之后,加入classifier/ants set tid_ $id_就能把id_的

7、值传给tid_t, z后bind就能把tid_就能传给nid4)在写了新的class币er功能后要记得在ns-rtmodule.tcl注册,因为修改classifier 是修改module模块加上:rtmodule/ants instproc register node $self next $node$self instvar classifiesset classifies new classifier/ants$node install-entry $self $classifier_ -5) 当然还要在rtmodule.h和rtmodule.cc修改。在rtmodule.h上加上:cl

8、ass antsroutingmodule : public routingmodule public:antsroutingmodule() : routingmodule() virtual const char* module_name() const return ”ants”; virtual int command(int argc, const char*const* argv); protected:antsclassifier *classifier_;;这一段代码的位置参照类似代码的位置添加即可注:这里还要加上头文件#include "classifier-ant

9、s.hn不然会出现编译错误。6) rtmodule.cc 加上static class antsroutingmoduleclass : public tciciass public:antsroutingmoduleclass() : tclclass(nrtmodule/antsn) tclobject* create(int, const char*const*) return (new antsroutingmodule); class_ants_routing_module;接着加上:int antsroutingmodule:command(int argc, const char

10、*const* argv) tcl& tel = tcl:instance();if (argc = 3) if (strcmp(argv1 , mroute-notifyn) = 0) node *node = (node *)(tclobject:lookup(argv2); if (node = null) tcl.add_errorf(*'invalid node object %s”,argv2);return tcl_error;if (node != n_) tcl.add_errorf(mnode object %s different from n_'

11、 argv2); return tcl_error;n_->route_ no tify(this);return tcl_ok;if (strcmp(argv1 , nunreg-route-notifyh) = 0) node *node = (node *)(tclobject:lookup(argv2);if (node = null) tcl.add_errorfc,invalid node object %s”,argv2); return tcl_error;if (node != n_) tcl.add_errorf(hnode object %s different f

12、rom n_h, argv2); return tcl_error;n_->unreg_route_notify(this);return tcl_ok;return (routingmodule:command(argc, argv);以上两段代码的位置同样参照其他协议类似代码的位置7)之后在 ns-node.tclnode set module_list_ base 修改为node set module_list_ ants 注:这个修改完以后,除了我们现在这个使用这个协议的tel例子可用外,其他我们原 来的仿真例子均不可用了。因此做完这个实验要把这个改回來。(很重要,我是新手,自己

13、调试的时候郁闷 死我了)8)最后在makefile里而的obj_cc加上classifier/classifier-a nts.o附tel脚木:set ns new simulator$ns rtproto simpleset nf open out.nam w$ns namtraceall $nf#define a 'finish* procedure proc finish global ns nf$ns flush-trace#close the nam trace fileclose $nf#execute nam on the trace file exec nam out.

14、nam & exit 0#create four nodes set no $ns node set n1 $ns node set n2 $ns node set n3 $ns node#create links between the nodes$ns duplex-link $n0 $n1 2mb 10ms droptail $ns duplex-link $n0 $n2 2mb 10ms droptail $ns duplex-link $n1 $n3 2mb 10ms droptail $ns duplex-link $n2 $n3 2mb 10ms droptailset udp new agent/udp $ns attach-agent $n0 $udp set null new agent/null $ns attach-agent $n3 $null $ns connect $udp $null #setup a cbr over udp connection set cbr new application/traffic/cbr $cbr attachagent $udp $cbr set type_ cbr $cbr set packet_size_ 1000 $cbr set rate_ 1 mb $cbr set random_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论