网络仿真器NS2之使用手册Word文档下载推荐.docx
- 文档编号:16832312
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:32
- 大小:1,017.78KB
网络仿真器NS2之使用手册Word文档下载推荐.docx
《网络仿真器NS2之使用手册Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络仿真器NS2之使用手册Word文档下载推荐.docx(32页珍藏版)》请在冰豆网上搜索。
c:
\netsim\tcl
\netsim\tk
\netsim\otcl
\netsim\tclcl
\netsim\ns2
\progra~1\tcl
@echoon
2.新增一个NetSim的资料夹在C:
\里面。
或是新增在你想放置的磁盘中。
3.DOWNLOADNS2的个别组件:
a.TCL(ToolCommandLanguage),anopensourcescriptinglanguage。
b.TK:
(ToolKit),AGUIextensionforTCL。
c.OTCL:
对象导向的Tcl/Tk延伸。
d.TCLCL:
Tcl/C++interface。
e.ns-2.1b7orhigher(在此列举2.1b8的版本)。
4.解压缩以上所DOWNLOAD的档案到C:
\NetSim的数据夹中,解压缩之后在NetSim数据夹中应该是〈图一〉这种情况。
〈图一〉
5.安装tclandtk:
第一步就是complietcl:
在tcl目录按下dir/w指令就可以看到跟〈图二〉类似的目录:
〈图二〉
在tcl中最需要注意的莫过于他的子数据夹win,而最重要的就是他里面一个叫makefile.vc的资料夹,在makefile.vc中需要修改一些设定如〈图三〉反白处:
〈图三〉
最主要修改的地方是:
倒数二、三行的地方,在c:
\progra~1\micro~3\vc98这一行中,需注意的是micro~3,需依照使用者所安装目录顺序所决定。
在此,因为MicrosoftVisualStudio安装的顺序在MicrosoftFrontPageandMicrosoftOffice之后,所以这里才需改为micro~3。
6.接下来就是compile,在c:
\netsim\tcl\win下执行下列的指令:
nmake–i–fmakefile.vc
‧nmake:
执行VisualC++指令的compiler。
‧-i:
忽略错误现象且持续执行。
‧-f:
使用下列的档案去compile。
7.接下来在tk部分则是跟tcl是一样的步骤,记得要到跟〈图四〉一样的位置去更改有关路径的部分:
〈图四〉
8.安装otcl/tclcl:
如前面安装tclandtk一样,适当的修改makefile.vc的档案,就能判定之前tclandtk的路径是否正确。
〈图五〉就是tclandtk的一部份:
〈图五〉
修改完毕之后,在c:
\netsim\otcl\下执行nmake–i–fmakefile.vc。
compile完之后,在otcl的目录底下就可以看到像〈图六〉一样的档案内容:
〈图六〉
(在这里NetSim数据夹是建立在D磁盘中)
9.下一步是compiletclcl,有点不一样的步骤是在d:
\netsim\tclcl\conf\makefile.win要如〈图七〉般在反白处更改路径:
〈图七〉
另一个需要注意的是,在反白处的下三行,若放置netsim数据夹的路径与其不同,则需改为使用者自行设置的路径。
如〈图八〉:
〈图八〉
确认一下tclandtk的版本是否正确,版本的问题牵扯到所需Load的档案的名称,因此务必要确认。
如〈图九〉:
〈图九〉
紧接着需要再确认tcl、tk、otcl、tclcl的数据夹是否设定妥当,必须和在Netsim目录底下的各个tcl、tk、otcl、tclcl的目录完全相同才可以,否则会有找不到路径及档案的错误出现。
设定如〈图十〉:
〈图十〉
回到tclcl的目录,执行nmake–i–fmakefile.vc,执行完后,在tclcl目录下的数据应该跟〈图十一〉类似才是正确的:
〈图十一〉
在做下一个步骤之前,以下两项作业必须已经完成好了:
‧tclandtk已经安装在适当的programfile目录下。
‧otclandtclcl已经compiler完成。
pilingNS:
确认已经把tcl,tk,otcl,tclcl的数据夹在路径环境变量中(PATHenvironmentvariable)已经设定好了,comfigurationforNS跟tclcl的大部分都相同,需要修改的configuration的档案是在/conf中的makefile.win,如〈图十二〉:
〈图十二〉
以下做法皆跟tclcl的步骤一样:
‧确认VisualC++的路径是否正确:
MSVCDIR=c:
\progra~1\micros~3\VC98。
‧需要特别注意localdirectory是否正确:
LOCAL_SRC=d:
\NetSim。
‧确认一下tclandtk的版本是否正确。
‧再确认tcl,tk,otcl,andtclcl的数据夹是否设定妥当。
‧回到NS的目录并且compile,执行nmake–i–fmakefile.vc。
如果执行顺利,NS的compile就完成了。
三、补充:
在做任何一次nmake之前,假如在此次compiler之前已经有compiler的记录时,则需先执行过”nmake–I–fmakefile.vcclean”的动作,将先前compiler过的程序清除,才能够让此次的compiler能够顺利的进行,否则它会先去判断是否有make过所产生的档案或目录,如果存在,则当做已经make成功而不会重新的make过。
如果遇见无法nmakeclean的问题,则看它所出现的某些档案或目录太长或者无法清除,用手动的方式将其清除再重新执行”nmake–I–Fmakefile.vc”的指令,到目前为止,只发现在ns-2.1bX的目录中会有此问题存在,原因是因为ns在compiler时会产生很多*.o的Object档,而因为太多而无法使用nmake–I–fmakefile.vcclean的指令来清除,需要手动下“del*.o”并且将gen\目录给全部清除,因为在nmakeclean时,遇见了错误讯息后便无法继续removegen的动作,所以也需手动来清除。
四、参考网址:
若有其它的疑问,可以至以下网址查询。
‧http:
//www.isi.edu/nsnam/ns
//www.public.iastate.edu/~magico/nsFiles/InstallNS1.html
//www.isi.edu/nsnam/ns/ns-tests.html
‧
使用手册§
1.先Implement一个使用者想要模拟的protocolintoNS2。
这里将介绍李志平学长使用C++撰写的protocol。
2.用名为LeeAgent的class去implement学长的protocol,在这个class中一开始需要宣告node的主要routingtable、备份routingtable和处理packets的函式,这样在NS2的环境中,每个node都会有LeeAgent的所宣告的环境。
以下就是部分的headerfile:
classLeeAgent:
publicAgent{
friendclassMyHelloTimer;
public:
LeeAgent(nsaddr_tid);
voidrecv(Packet*p,Handler*);
voidrt_ll_failed(Packet*p);
voidlee_failed(Packet*p);
voidpurge();
voiddump();
protected:
intcommand(intargc,constchar*const*argv);
voidaddnb(nsaddr_tnid);
intfindnb(nsaddr_tnid);
voiddelnb(nsaddr_tnid);
voidchecknb();
voidCheckMainRoute(nsaddr_tnid);
voidrt_resolve(Packet*p);
voidrecovery(nsaddr_tsid,nsaddr_tdid);
voidretransmit(nsaddr_tdid,nsaddr_tnid);
voidforward(Packet*p,nsaddr_tnexthop,doubledelay);
voidrecvLEE(Packet*p);
voidrecvMQRY(Packet*p);
voidrecvMRPY(Packet*p);
voidrecvMFQ(Packet*p);
voidrecvBQRY(Packet*p);
voidrecvBRPY(Packet*p);
voidrecvHELLO(Packet*p);
voidrecvFQ(Packet*p);
voidrecvUPD(Packet*p);
voidrecvFW(Packet*p);
voidrecvCLR(Packet*p);
voidsendMQRY(nsaddr_tsid,nsaddr_tdid);
voidsendMRPY(nsaddr_tsid,nsaddr_tdid,nsaddr_txid,inthtd_);
voidsendMFQ(nsaddr_tsid,nsaddr_tdid);
voidsendBQRY(nsaddr_tsid,nsaddr_tdid,intmyhtd,intk);
voidsendBRPY(nsaddr_tsid,nsaddr_tdid,inthop,intshtd,intdesthtd,nsaddr_tnexthop__);
voidsendHELLO();
voidsendFQ(nsaddr_tnid);
voidsendFW(nsaddr_tsid,nsaddr_tdid,intshtd);
voidsendUPD(nsaddr_tsid,nsaddr_tdid,nsaddr_txid,inthtd_,intstatus);
voidsendCLR(nsaddr_tsid,nsaddr_tdid,nsaddr_txid,intshtd_,intdhtd_);
virtualvoidreset();
voidtrace(char*fmt,...);
inlineintinitialized(){
return1&
&
target_;
}
Trace*logtarget;
//tracelogtarget
rtqueuerqueue;
//waitforroutequeue
intNBN;
//neighbornumber
lnlist*nblist;
//neighborlist
MyHelloTimerhtimer;
//hellomessagetimer
PriQueue*ifqueue;
//?
?
MainTableMRTable;
//mainroutetable
BackupTableBRTable;
//backuproutetable
LeeRqTablerequest_table;
//requesttemptable
unsignedintseq;
//seq#
nsaddr_tmyaddr;
//nodeid
doublepretime;
//pre-transmitiontime
boolifhello;
};
其中有几个NS2会用到的函式。
第一个是”recv”函式,当NS2中node接收到一个routingpacket,node会呼叫routingagent的”recv”函式去接收packet。
第二个是”command”,这个函式是TCLcommandline呼叫使用的,我们可以在TCLscript中启动一个hellotimer或是给一个像interfacequeue的class。
3.另外,在学长的构思中还需要两个class,一个是NS2的headermanager,在这个class中可以去定义packetheader的名字,packet的大小,和结合packetheader的offset。
另一个就是结合TCL跟我们的agent,我们必须在NS2中定义名为”Agent/Lee”的agent和”create”的函式,当我们在TCL中产生一个对象”Agent/Lee”时,”create”函式就会被呼叫。
下列就是一个例子:
intLpacket:
:
offset_;
staticclassLEEHeaderClass:
publicPacketHeaderClass{
LEEHeaderClass():
PacketHeaderClass("
PacketHeader/LEE"
LPKTLEN){
bind_offset(&
Lpacket:
offset_);
}
}class_rtProtoLee_hdr;
staticclassLeeAgentclass:
publicTclClass{
LeeAgentclass():
TclClass("
Agent/LEE"
){}
TclObject*create(intargc,constchar*const*argv){
assert(argc==5);
return(newLeeAgent((nsaddr_t)atoi(argv[4])));
}class_rtProtoLee;
定义controlpacket的fields在Lpacket.h中,如下列所示:
structLpacket{
u_int8_ttype__;
nsaddr_tsid__;
nsaddr_tdid__;
unsignedintseq__;
intcount__;
intcount2__;
staticintoffset_;
//requiredbyPacketHeaderManager
inlinestaticint&
offset(){returnoffset_;
inlinestaticLpacket*access(constPacket*p){
return(Lpacket*)p->
access(offset_);
4.当完成了以上所描述的,就会有了以下几个档案,说明如下:
Lee.ccandLee.h代表了LeeAgent的行为;
Leerqtable.ccandLeerqtable.h是表示主要和备份routingtable的函式,Lpacket.h定义了controlpacketheader。
为了能在NS2中正确的执行学长的protocol,还需要在NS2中修改一些档案。
5.为了让NS能够承认我们的controlpacket,有一些参数需要加在NS的C++档案中,这些档案在NetSim/ns2。
‧Packet.h:
这个档案中已经有其它packetheaders定义在NS2中,我们需要在档案中增加自己的controlpacketheader的名字,一个地方是enumpacket_t{},另一个是classp_info{},如下:
enumpacket_t{
…
PT_LEE,←在这里增加使用者的protocolheadertype
PT_NTYPE//ThisMUSTbetheLASTone
classp_info{
p_info(){
…
name_[PT_LEE]="
LEE"
;
←增加使用者的packetheadername
name_[PT_NTYPE]="
undefined"
‧CMU-Trace.ccandCMU-Trace.h:
为了让学长的Protocol也可以在NS2使用trace对象,我们需要修改两个档案,以下是在CMU-Trace.h中修改的部分:
classCMUTrace:
publicTrace{
private:
voidformat_aodv(Packet*p,intoffset);
voidformat_lee(Packet*p,intoffset);
←增加这一行
以下是CMU-Trace.cc修改的地方:
#include<
Lpacket.h>
includeourprotocolcontrolpacketheaderfile
voidCMUTrace:
format(Packet*p,constchar*why)
{…
switch(ch->
ptype()){
…
default:
switch(ch->
casePT_LEE:
增加这三行
format_lee(p,offset);
break;
default:
fprintf(stderr,"
%s-invalidpackettype(%s).\n"
__PRETTY_FUNCTION__,packet_info.name(ch->
ptype()));
exit
(1);
}
}
format_lee(Packet*p,intoffset)增加这个函式
{structLpacket*lh=LPACKET(p);
if(newtrace_){
sprintf(wrk_+offset,"
-Plee-Pt0x%x-Ps%d-Pd%d-Pq%d-Pc%d-PcCLEAR"
lh->
type__,lh->
sid__,lh->
did__,lh->
seq__,lh->
count__);
}else{
sprintf(wrk_+offset,"
[0x%x%d%d%d%d](CLEAR)"
lh->
}
6.在执行NS2之前,可以先在TCL中设定一个方便的环境去产生一个简单TCLscriptfile去执行模拟。
这些档案放在NetSim\ns2\Tcl\Lib里。
7.我们需要先修改ns-lib.tcl的档案以方便可以在我们protocol中设定一简单的无线模拟环境。
首先我们可以在ns-lib.tcl中找到这一行:
Simulatorinstproccreate-wireless-nodeargs{}
接下来我们可以找到其它protocol的设定指令,如TORA、AODV、DSR、DSDV,在此可以如下列般增加使用者的protocol:
LEE{
setragent[$selfcreate-lee-agent$node]
第一行中的”Lee”是定义使用者的routingagent,接下来还要定义其它的函式”create-lee-agent”在这个档案里。
其它protocol也可以以此为例。
Simulatorinstproccreate-lee-agent{node}{
setragent[newAgent/LEE[$nodeid]];
#createanewroutingagent
$nodesetragent_$ragent;
#attachroutingagenttonode
$selfat0.0"
$ragentstart"
;
#startBEACON/HELLOMessages
return$ragent
第二行中的class”Agent/LEE”定义在Lee.cc里。
现在可以用”node-config”的command简单地在routingprotocol里去设定一个node。
8.增加protocol的名字在Ns-Packet.tcl中,将会使PacketHeaderManager结合使用者的packetheader,名字跟我们在PacketHeaderClass中定义的一样:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 仿真器 NS2 使用手册