NS2_ADD_ZBR(V001)_2013_12_18

更新时间:2023-05-19 05:05:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

NS2中ZBR协议的添加

ZBR路由协议添加的过程:

一、我们新建的协议名字就叫做zbr,以ns2.35平台为例,把zbr文件放在ns2.35目录下。此目目录包含:

zbr.h,,zbr_packet.h,zbr_rtable.h,zbr_,zbr_,zbr_link.h,zbr_,zbr_rqueue.h九个文件。

二、我们需要对ns2中的一些文件进行修改,来使这个协议在tcl中被调用,需要修改的文件有以下几个:

你可以在ns-2.35目录下找到它们:

common/packet.h

trace/cmu-trace.h

trace/

tcl/lib/ns-packet.tcl

tcl/lib/ns-default.tcl

tcl/lib/ns-lib.tcl

queue/

Makefile

三、需要修改的具体内容

3.1、common/packet.h (两个需要修改的地方,添加代码) 第一个大约在202行:

static const packet_t PT_MDART = 72;

static const packet_t PT_ZBR = 73; //新添加

static packet_t PT_NTYPE = 74; // 这一行必须为最后一行

=======================================

第二个大约在421行:

name_[PT_DCCP_RESET]="DCCP_Reset";

name_[PT_ZBR]= "zbr"; //新添加

name_[PT_NTYPE]= "undefined";

NS2中ZBR协议的添加

3.2、trace/cmu-trace.h (一个需要修改的地方:添加代码)

大约在165行:

void format_mdart(Packet *p, int offset);

void format_zbr(Packet *p, int offset); //新添加

// This holds all the tracers added at run-time

static PacketTracer *pktTrc_;

3.3、trace/ (需要修改三个地方)

第一个:在大约55行添加头文件: #include <zbr/zbr_packet.h>

=========================================

第二个:找个合适的地方加上下面的函数:可以在大约864行添加

void

CMUTrace::format_zbr(Packet *p, int offset)

{

struct hdr_zbr* zh = HDR_ZBR(p);

struct hdr_zbr_request *rq = HDR_ZBR_REQUEST(p);

struct hdr_zbr_reply *rp = HDR_ZBR_REPLY(p);

switch(zh->ah_type) {

case ZBRTYPE_RREQ:

if (pt_->tagged()) {

sprintf(pt_->buffer() + offset,

"-zbr:t %x -zbr:h %d -zbr:b %d -zbr:d %d "

"-zbr:ds %d -zbr:s %d -zbr:ss %d "

"-zbr:c REQUEST ",

rq->rq_type,

rq->rq_hop_count,

rq->rq_bcast_id,

rq->rq_dst,

rq->rq_dst_seqno,

rq->rq_src,

rq->rq_src_seqno);

} else if (newtrace_) {

sprintf(pt_->buffer() + offset,

"-P zbr -Pt 0x%x -Ph %d -Pb %d -Pd %d -Pds %d -Ps %d -Pss %d -Pc REQUEST ",

NS2中ZBR协议的添加

rq->rq_type,

rq->rq_hop_count,

rq->rq_bcast_id,

rq->rq_dst,

rq->rq_dst_seqno,

rq->rq_src,

rq->rq_src_seqno);

} else {

sprintf(pt_->buffer() + offset,

"[0x%x %d %d [%d %d] [%d %d]] (REQUEST)",

rq->rq_type,

rq->rq_hop_count,

rq->rq_bcast_id,

rq->rq_dst,

rq->rq_dst_seqno,

rq->rq_src,

rq->rq_src_seqno);

}

break;

case ZBRTYPE_RREP:

case ZBRTYPE_HELLO:

case ZBRTYPE_RERR:

if (pt_->tagged()) {

sprintf(pt_->buffer() + offset,

"-zbr:t %x -zbr:h %d -zbr:d %d -zbr:ds %d "

"-zbr:l %f -zbr:c %s ",

rp->rp_type,

rp->rp_hop_count,

rp->rp_dst,

rp->rp_dst_seqno,

rp->rp_lifetime,

rp->rp_type == AODVTYPE_RREP ? "REPLY" :

(rp->rp_type == AODVTYPE_RERR ? "ERROR" :

"HELLO"));

} else if (newtrace_) {

sprintf(pt_->buffer() + offset,

"-P zbr -Pt 0x%x -Ph %d -Pd %d -Pds %d -Pl %f -Pc %s ",

rp->rp_type,

NS2中ZBR协议的添加

rp->rp_hop_count,

rp->rp_dst,

rp->rp_dst_seqno,

rp->rp_lifetime,

rp->rp_type == ZBRTYPE_RREP ? "REPLY" :

(rp->rp_type == ZBRTYPE_RERR ? "ERROR" :

"HELLO"));

} else {

sprintf(pt_->buffer() + offset,

"[0x%x %d [%d %d] %f] (%s)",

rp->rp_type,

rp->rp_hop_count,

rp->rp_dst,

rp->rp_dst_seqno,

rp->rp_lifetime,

rp->rp_type == ZBRTYPE_RREP ? "REPLY" :

(rp->rp_type == ZBRTYPE_RERR ? "ERROR" :

"HELLO"));

}

break;

default:

#ifdef WIN32

fprintf(stderr,

"CMUTrace::format_zbr: invalid ZBR packet type\n");

#else

fprintf(stderr,

"%s: invalid ZBR packet type\n", __FUNCTION__);

#endif

abort();

}

}

=========================================

第三个:在大约1529行添加

case PT_PING:

break;

case PT_ZBR: //新添加

format_zbr(p, offset); //新添加

break; //新添加

case PT_ARP:

format_arp(p, offset);

break;

NS2中ZBR协议的添加

3.4、tcl/lib/ns-packet.tcl(需要修改一个:添加)

大约172行:添加:

# Wireless:

ARP # Address Resolution Protocol, network wireless stack

GAF # Geographic Adaptive Delity, for ad-hoc networks

LL # network wireless stack

LRWPAN # zheng, wpan/p802_15_

Mac # network wireless stack

ZBR # ZigBee 新添加

3.5、tcl/lib/ns-default.tcl(需要修改一个)

最后一行添加:

# Defaults defined for zbr

Agent/ZBR set accessible_var_ true

3.6、tcl/lib/ns-lib.tcl(需要修改两个)

第一个:大约672行添加

ZBR {

set ragent [$self create-zbr-agent $node]

}

=======================================

第二个:大约891行添加

Simulator instproc create-zbr-agent { node } {

# Create zbr routing agent

set ragent [new Agent/ZBR [$node node-addr]]

$self at 0.0 "$ragent start"

$node set ragent_ $ragent

return $ragent

}

3.7、queue/(需要修改一个)

大约93行:

case PT_AODV:

case PT_ZBR: //新添加

case PT_AOMDV:

NS2中ZBR协议的添加

3.8、wpan/p802_15_4sscs.h(需要修改一个)

在大约57行,打开ZigBeeIF :

#define ZigBeeIF

3.9、wpan/p802_15_(需要修改一个)

大约在179行添加

#ifdef ZigBeeIF

bool noCapacity;

int child_num;

int logAddr;

#endif

//we assign the cluster tree address as the MAC short address

3.10、Makefile(需要修改一个)

修改 OBJ_CC = \

大约在335行:zbr/zbr.o zbr/zbr_link.o zbr/zbr_rtable.o zbr/zbr_rqueue.o \

四、 编译

进入ns-2.35目录下输入下名命令进行编译:

$ make clean

$ make

$ sudo make install

以后若修改了程序,需要先make再执行sudo make install(这一步必须执行)

五、测试脚本

参考tcl/ex/wpan下面的脚本。

本文来源:https://www.bwwdw.com/article/s6n4.html

Top