在NS2中添加路由协议(整理版)1
<span class="Apple-style-span" style="border-collapse: collapse; line-height: 25px; ">最近正在研究怎样把自己新写的协议添加到NS2中去,正好借鉴了一些朋友的文章,现在整理下来,以便以后参考,也希望能给广大博友一些方便。<br style="font-family: Ubuntu, UbuntuBeta !important; "><b style="font-family: Ubuntu, UbuntuBeta !important; ">step 1:</b>比如我们新建的协议名字就叫做<font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 21px; ">protoname</font>,以ns2.27平台为例,我们在ns2.27目录下建立一个protoname目录。此目录包含<font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 21px; ">protoname.h,protoname.cc,protoname_pkt.h,protoname_rtable.h,</font><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 21px; ">protoname_rtable.cc</font>五个文件。<br style="font-family: Ubuntu, UbuntuBeta !important; ">其中五个文件的具体功能和作用如下:<br style="font-family: Ubuntu, UbuntuBeta !important; ">(1)protoname.h 定义必要的计时器和路由代理<br style="font-family: Ubuntu, UbuntuBeta !important; ">(2)protoname.cc 执行计时器、路由代理和Tcl文件<br style="font-family: Ubuntu, UbuntuBeta !important; ">(3)protoname_pkt.h 声明protoname路由协议需要在无线自组网节点交换的数据包<br style="font-family: Ubuntu, UbuntuBeta !important; ">(4)protoname_rtable.h 声明我们自己的路由选择表<br style="font-family: Ubuntu, UbuntuBeta !important; ">(5)protoname_rtable.cc 执行路由选择表<br style="font-family: Ubuntu, UbuntuBeta !important; "><b style="font-family: Ubuntu, UbuntuBeta !important; ">step 2:</b>相应文件的代码<br style="font-family: Ubuntu, UbuntuBeta !important; ">(1)protoname.h</span><div><span class="Apple-style-span" style="border-collapse: collapse; line-height: 25px; "><div id="codeText" class="codeText"><ol style="margin:0 1px 0 0;padding:5px 0;" start="1" class="dp-css"><li>#ifndef __protoname_h__</li><li>#define __protoname_h__</li><li>
// 下面包含一些需要的头文件</li><li>
#include "protoname_pkt.h" //数据包报头</li><li>
#include "protoname_rtable.h" </li><li>
#include <agent.h>//代理基本类</li><li>
#include <packet.h> //数据包类</li><li>
#include <trace.h> //跟踪类,用于在跟踪文件里记录输出的仿真结果</li><li>
#include <timer-handler.h> //计时器基本类,创建我们自定义的计时器</li><li>
#include <random.h> //随机类,用于产生伪随机数</li><li>
#include <classifier-port.h> //端口分类器类,用于淘汰向上层传输的数据包</li><li>
#include <mobilenode.h></li><li>
#include "arp.h"</li><li>
#include "ll.h"</li><li>
#include "mac.h"</li><li>
#include "ip.h"</li><li>
#include "delay.h"</li><li>
#define CURRENT_TIME Scheduler::instance().clock() //定义了一个用于得到当前仿真时间的宏</li><li>
//通过一个调度类的实例完成</li><li>
#define JITTER (Random::uniform()*0.5) //在0-0.5之间去随机数作为发送数据的延迟时间</li><li>
class Protoname; // forward declaration</li><li>
/* Timers */ //自定义计时器发送定时的控制包</li><li>
class Protoname_PktTimer : public TimerHandler {</li><li>
public:</li><li>
Protoname_PktTimer(Protoname* agent) : TimerHandler() {</li><li>
agent_ = agent;</li><li>
}</li><li>
protected:</li><li>
Protoname* agent_;</li><li>
virtual void expire(Event* e);</li><li>
};</li><li>
/* Agent */ //定义Protoname 类</li><li>
class Protoname : public Agent {</li><li>
/* Friends */</li><li>
friend class Protoname_PktTimer;</li><li>
/* Private members */ //封装了自身的地址、内状态、路由表、可变的Tcl</li><li>
//以及一个负责指定输出数量的计数器</li><li>
nsaddr_t ra_addr_;</li><li>
//protoname_state state_;</li><li>
protoname_rtable rtable_;</li><li>
int accesible_var_; //用来读取Tcl代码或脚本语言</li><li>
u_int8_t seq_num_;</li><li>
protected:</li><li>
MobileNode* node_;</li><li>
PortClassifier* dmux_; // For passing packets up to agents.端口分类器</li><li>
Trace* logtarget_; // For logging.跟踪器</li><li>
Protoname_PktTimer pkt_timer_; // Timer for sending packets.自定义计时器</li><li>
//内部属性</li><li>
inline nsaddr_t& ra_addr() { return ra_addr_; }</li><li>
//inline protoname_state& state() { return state_; }</li><li>
inline int& accessible_var() { return accesible_var_; }</li><li>
void forward_data(Packet*); //数据包被正确传输的目的地</li><li>
void recv_protoname_pkt(Packet*);</li><li>
void send_protoname_pkt();</li><li>
void reset_protoname_pkt_timer();</li><li>
public:</li><li>
Protoname(nsaddr_t);</li><li>
int command(int, const char*const*);</li><li>
void recv(Packet*, Handler*);</li><li>
//void mac_failed(Packet*);</li><li>
};</li><li>
#endif</li></ol></div></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; line-height: 25px; ">(2)protoname.cc</span></div><div><span class="Apple-style-span" style="border-collapse: collapse; line-height: 25px; "><div id="codeText" class="codeText"><ol style="margin:0 1px 0 0;padding:5px 0;" start="1" class="dp-css"><li>#include "protoname.h"</li><li>
#include "protoname_pkt.h"</li><li>
#include <random.h></li><li>
#include <cmu-trace.h></li><li>
#include <iostream></li><li>
int hdr_protoname_pkt::offset_;</li><li>
static class ProtonameHeaderClass : public PacketHeaderClass {</li><li>
public:</li><li>
ProtonameHeaderClass() : PacketHeaderClass("PacketHeader/Protoname", sizeof(hdr_protoname_pkt)) {</li><li>
bind_offset(&hdr_protoname_pkt::offset_);</li><li>
}</li><li>
} class_rtProtoProtoname_hdr;</li><li>
static class ProtonameClass : public TclClass {</li><li>
public:</li><li>
ProtonameClass() : TclClass("Agent/Protoname") {}</li><li>
TclObject* create(int argc, const char*const* argv) {</li><li>
assert(argc == 5);</li><li>
return (new Protoname((nsaddr_t) Address::instance().str2addr(argv)));</li><li>
}</li><li>
} class_rtProtoProtoname;</li><li>
void</li><li>
Protoname_PktTimer::expire(Event* e) {</li><li>
agent_->send_protoname_pkt();</li><li>
agent_->reset_protoname_pkt_timer();</li><li>
}</li><li>
Protoname::Protoname(nsaddr_t id) : Agent(PT_PROTONAME), pkt_timer_(this) {</li><li>
bind_bool("accesible_var_", &accesible_var_);</li><li>
ra_addr_ = id;</li><li>
node_ = (MobileNode*)Node::get_node_by_address(id);</li><li>
}</li><li>
int</li><li>
Protoname::command(int argc, const char*const* argv) {</li><li>
if (argc == 2) {</li><li>
if (strcasecmp(argv, "start") == 0) {</li><li>
pkt_timer_.resched(0.0);</li><li>
return TCL_OK;</li><li>
}</li><li>
else if (strcasecmp(argv, "print_rtable") == 0) {</li><li>
if (logtarget_ != 0) {</li><li>
sprintf(logtarget_->pt_->buffer(), "P %f _%d_ Routing Table", CURRENT_TIME, ra_addr());</li><li>
logtarget_->pt_->dump();</li><li>
rtable_.print(logtarget_);</li><li>
}</li><li>
else {</li><li>
fprintf(stdout, "%f _%d_ If you want to print this routing table "</li><li>
"you must create a trace file in your tcl script", CURRENT_TIME, ra_addr());</li><li>
}</li><li>
return TCL_OK;</li><li>
}</li><li>
}</li><li>
else if (argc == 3) {</li><li>
// Obtains corresponding dmux to carry packets to upper layers</li><li>
if (strcmp(argv, "port-dmux") == 0) {</li><li>
dmux_ = (PortClassifier*)TclObject::lookup(argv);</li><li>
if (dmux_ == 0) {</li><li>
fprintf(stderr, "%s: %s lookup of %s failed\n", __FILE__, argv, argv);</li><li>
return TCL_ERROR;</li><li>
}</li><li>
return TCL_OK;</li><li>
}</li><li>
// Obtains corresponding tracer</li><li>
else if (strcmp(argv, "log-target") == 0 || strcmp(argv, "tracetarget") == 0) {</li><li>
logtarget_ = (Trace*)TclObject::lookup(argv);</li><li>
if (logtarget_ == 0)</li><li>
return TCL_ERROR;</li><li>
return TCL_OK;</li><li>
}</li><li>
}</li><li>
// Pass the command to the base class</li><li>
return Agent::command(argc, argv);</li><li>
}</li><li>
void</li><li>
Protoname::recv(Packet* p, Handler* h) {</li><li>
struct hdr_cmn* ch = HDR_CMN(p);</li><li>
struct hdr_ip* ih = HDR_IP(p);</li><li>
if (ih->saddr() == ra_addr()) {</li><li>
// If there exists a loop, must drop the packet</li><li>
if (ch->num_forwards() > 0) {</li><li>
drop(p, DROP_RTR_ROUTE_LOOP);</li><li>
return;</li><li>
}</li><li>
// else if this is a packet I am originating, must add IP header</li><li>
else if (ch->num_forwards() == 0)</li><li>
ch->size() += IP_HDR_LEN;</li><li>
}</li><li>
// If it is a protoname packet, must process it</li><li>
if (ch->ptype() == PT_PROTONAME)</li><li>
recv_protoname_pkt(p);</li><li>
// Otherwise, must forward the packet (unless TTL has reached zero)</li><li>
else {</li><li>
ih->ttl_--;</li><li>
if (ih->ttl_ == 0) {</li><li>
drop(p, DROP_RTR_TTL);</li><li>
return;</li><li>
}</li><li>
forward_data(p);</li><li>
}</li><li>
}</li><li>
void</li><li>
Protoname::recv_protoname_pkt(Packet* p) {</li><li>
struct hdr_ip* ih = HDR_IP(p);</li><li>
struct hdr_protoname_pkt* ph = HDR_PROTONAME_PKT(p);</li><li>
// All routing messages are sent from and to port RT_PORT,</li><li>
// so we check it.</li><li>
assert(ih->sport() == RT_PORT);</li><li>
assert(ih->dport() == RT_PORT);</li><li>
/* ... processing of protoname packet ... */</li><li>
// Release resources</li><li>
Packet::free(p);</li><li>
}</li><li>
void</li><li>
Protoname::send_protoname_pkt() {</li><li>
Packet* p = allocpkt();</li><li>
struct hdr_cmn* ch = HDR_CMN(p);</li><li>
struct hdr_ip* ih = HDR_IP(p);</li><li>
struct hdr_protoname_pkt* ph = HDR_PROTONAME_PKT(p);</li><li>
ph->pkt_src() = ra_addr();</li><li>
ph->pkt_len() = 7;</li><li>
ph->pkt_seq_num() = seq_num_++;</li><li>
ch->ptype() = PT_PROTONAME;</li><li>
ch->direction() = hdr_cmn::DOWN;</li><li>
ch->size() = IP_HDR_LEN + ph->pkt_len();</li><li>
ch->error() = 0;</li><li>
ch->next_hop() = IP_BROADCAST;</li><li>
ch->addr_type() = NS_AF_INET;</li><li>
ih->saddr() = ra_addr();</li><li>
ih->daddr() = IP_BROADCAST;</li><li>
ih->sport() = RT_PORT;</li><li>
ih->dport() = RT_PORT;</li><li>
ih->ttl() = IP_DEF_TTL;</li><li>
Scheduler::instance().schedule(target_, p, JITTER);</li><li>
}</li><li>
void</li><li>
Protoname::reset_protoname_pkt_timer() {</li><li>
pkt_timer_.resched((double)5.0);</li><li>
}</li><li>
void</li><li>
Protoname::forward_data(Packet* p) {</li><li>
struct hdr_cmn* ch = HDR_CMN(p);</li><li>
struct hdr_ip* ih = HDR_IP(p);</li><li>
if (ch->direction() == hdr_cmn::UP &&</li><li>
((u_int32_t)ih->daddr() == IP_BROADCAST || ih->daddr() == ra_addr())) {</li><li>
dmux_->recv(p, 0);</li><li>
return;</li><li>
}</li><li>
else {</li><li>
ch->direction() = hdr_cmn::DOWN;</li><li>
ch->addr_type() = NS_AF_INET;</li><li>
if ((u_int32_t)ih->daddr() == IP_BROADCAST)</li><li>
ch->next_hop() = IP_BROADCAST;</li><li>
else {</li><li>
nsaddr_t next_hop = rtable_.lookup(ih->daddr());</li><li>
if (next_hop == IP_BROADCAST) {</li><li>
debug("%f: Agent %d can not forward a packet destined to %d\n",</li><li>
CURRENT_TIME,</li><li>
ra_addr(),</li><li>
ih->daddr());</li><li>
drop(p, DROP_RTR_NO_ROUTE);</li><li>
return;</li><li>
}</li><li>
else</li><li>
ch->next_hop() = next_hop;</li><li>
}</li><li>
Scheduler::instance().schedule(target_, p, 0.0);</li><li>
}</li><li>
}</li><li>
(3)protoname_pkt.h</li><li>
#ifndef __protoname_pkt_h__</li><li>
#define __protoname_pkt_h__</li><li>
#include <packet.h></li><li>
#define HDR_PROTONAME_PKT(p) hdr_protoname_pkt::access(p)</li><li>
struct hdr_protoname_pkt {</li><li>
nsaddr_t pkt_src_; // Node which originated this packet</li><li>
u_int16_t pkt_len_; // Packet length (in bytes)</li><li>
u_int8_t pkt_seq_num_; // Packet sequence number</li><li>
inline nsaddr_t& pkt_src() { return pkt_src_; }</li><li>
inline u_int16_t& pkt_len() { return pkt_len_; }</li><li>
inline u_int8_t& pkt_seq_num() { return pkt_seq_num_; }</li><li>
static int offset_;</li><li>
inline static int& offset() { return offset_; }</li><li>
inline static hdr_protoname_pkt* access(const Packet* p) {</li><li>
return (hdr_protoname_pkt*)p->access(offset_);</li><li>
}</li><li>
};</li><li>
#endif</li><li>
(4)protoname_rtable.h</li><li>
#ifndef __protoname_rtable_h__</li><li>
#define __protoname_rtable_h__</li><li>
#include <trace.h></li><li>
#include <map></li><li>
typedef std::map<nsaddr_t, nsaddr_t> rtable_t;</li><li>
class protoname_rtable {</li><li>
rtable_t rt_;</li><li>
public:</li><li>
protoname_rtable();</li><li>
void print(Trace*);</li><li>
void clear();</li><li>
void rm_entry(nsaddr_t);</li><li>
void add_entry(nsaddr_t, nsaddr_t);</li><li>
nsaddr_t lookup(nsaddr_t);</li><li>
u_int32_t size();</li><li>
};</li><li>
#endif</li><li>
(5)protoname_rtable.cc</li><li>
#include "protoname_rtable.h"</li><li>
#include "ip.h"</li><li>
protoname_rtable::protoname_rtable() { }</li><li>
void</li><li>
protoname_rtable::print(Trace* out) {</li><li>
sprintf(out->pt_->buffer(), "P\tdest\tnext");</li><li>
out->pt_->dump();</li><li>
for (rtable_t::iterator it = rt_.begin(); it != rt_.end(); it++) {</li><li>
sprintf(out->pt_->buffer(), "P\t%d\t%d", (*it).first, (*it).second);</li><li>
out->pt_->dump();</li><li>
}</li><li>
}</li><li>
void</li><li>
protoname_rtable::clear() {</li><li>
rt_.clear();</li><li>
}</li><li>
void</li><li>
protoname_rtable::rm_entry(nsaddr_t dest) {</li><li>
rt_.erase(dest);</li><li>
}</li><li>
void</li><li>
protoname_rtable::add_entry(nsaddr_t dest, nsaddr_t next) {</li><li>
rt_ = next;</li><li>
}</li><li>
nsaddr_t</li><li>
protoname_rtable::lookup(nsaddr_t dest) {</li><li>
rtable_t::iterator it = rt_.find(dest);</li><li>
if (it == rt_.end())</li><li>
return IP_BROADCAST;</li><li>
else</li><li>
return (*it).second;</li><li>
}</li><li>
u_int32_t</li><li>
protoname_rtable::size() {</li><li>
return rt_.size();</li><li>
}</li></ol></div></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; line-height: 25px; "><span class="Apple-style-span" style="color: rgb(74, 0, 0); line-height: 22px; border-collapse: separate; "><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">step 3:</strong>我们需要对ns2中的一些文件进行修改,来使这个协议在tcl中被调用,</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">需要修改的文件有以下几个,你可以在ns目录下找到它们:</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">Common/packet.h</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">Trace/cmu-trace.h</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">Trace/cmu-trace.cc</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">Tcl/lib/ns-packet.tcl</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">Tcl/lib/ns-default.tcl</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">Tcl/lib/ns-lib.tcl</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">Queue/priqueue.cc</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">Makefile</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">step4:</strong>需要修改的具体内容(在需要修改的地方添加红色的字)</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><b style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">1.Common/packet.h </b>(两个需要修改的地方)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: enum packet_t {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2: PT_TCP,</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3: PT_UDP,</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">4: PT_CBR,</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">5: /* ... much more packet types ... */</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; "><font color="#000000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">6:</font> PT_PROTONAME,</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">7: PT_NTYPE // This MUST be the LAST one</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">8: };</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">=======================================</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: p_info() {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2: name_= "tcp";</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3: name_= "udp";</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">4: name_= "cbr";</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">5: /* ... much more names ... */</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">6: <font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">name_= "protoname";</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">7: }</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><b style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">2.Trace/cmu-trace.h </b>(一个)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: class CMUTrace : public Trace {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2: /* ... definitions ... */</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3: private:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">4: /* ... */</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">5:<font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; "> void format_aodv(Packet *p, int offset);</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">6: <font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">void format_protoname(Packet *p, int offset);</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">7: };</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><b style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">3.Trace/cmu-trace.cc</b> (三个,先在最上面加头文件,在找一个合适的地方加函数)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: <font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">#include <protoname/protoname_pkt.h></font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3: /* ... */</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">4:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">5: void</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">6: CMUTrace::format_protoname(Packet *p, int offset)</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">7: {</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">8: struct hdr_protoname_pkt* ph = HDR_PROTONAME_PKT(p);</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">9:</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">10: if (pt_->tagged()) {</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">11: sprintf(pt_->buffer() + offset,</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">12: "-protoname:o %d -protoname:s %d -protoname:l %d ",</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">13: ph->pkt_src(),</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">14: ph->pkt_seq_num(),</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">15: ph->pkt_len());</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">16: }</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">17: else if (newtrace_) {</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">18: sprintf(pt_->buffer() + offset,</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">19: "-P protoname -Po %d -Ps %d -Pl %d ",</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">20: ph->pkt_src(),</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">21: ph->pkt_seq_num(),</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">22: ph->pkt_len());</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">23: }</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">24: else {</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">25: sprintf(pt_->buffer() + offset,</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">26: " ",</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">27: ph->pkt_src(),</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">28: ph->pkt_seq_num(),</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">29: ph->pkt_len());</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">30: }</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">31: }</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">=========================================</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">1: void</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">2: CMUTrace::format(Packet* p, const char *why)</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">3: {</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">4: /* ... */</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">5: case PT_PING:</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">6: break;</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">7:</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">8: case PT_PROTONAME:</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">9: format_protoname(p, offset);</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">10: break;</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">11:</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">12: default:</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">13: /* ... */</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">14: }</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><b style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">4.Tcl/lib/ns-packet.tcl</b>(一个)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: foreach prot {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2:<font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; "> Protoname</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3: AODV</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">4: ARP</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">5: # ...</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">6: NV</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">7: } {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">8: add-packet-header $prot</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">9: }</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> </p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><b style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">5.Tcl/lib/ns-default.tcl</b>(一个)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: # ...</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">2: # Defaults defined for Protoname</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">3: Agent/Protoname set accessible_var_ true</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><b style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">6.Tcl/lib/ns-lib.tcl</b>(两个)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: Simulator instproc create-wireless-node args {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2: # ...</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#000000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">3: switch -exact $routingAgent_ {</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">4: Protoname {</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">5: set ragent [$self create-protoname-agent $node]</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">6: }</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">7: # ...</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">8: }</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">9: # ...</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">10: }</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">=======================================</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">1: Simulator instproc create-protoname-agent { node } {</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">2: # Create Protoname routing agent</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">3: set ragent ]</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">4: $self at 0.0 "$ragent start"</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">5: $node set ragent_ $ragent</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">6: return $ragent</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">7: }</font></p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><b style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">7.Queue/priqueue.cc</b>(一个)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: void</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2: PriQueue::recv(Packet *p, Handler *h)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3: {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">4: struct hdr_cmn *ch = HDR_CMN(p);</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">5:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">6: if (Prefer_Routing_Protocols) {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">7:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">8: switch(ch->ptype()) {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">9: case PT_DSR:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">10: case PT_MESSAGE:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">11: case PT_TORA:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">12: case PT_AODV:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">13: case PT_PROTONAME:</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">14: recvHighPriority(p, h);</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">15: break;</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">16:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">17: default:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">18: Queue::recv(p, h);</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">19: }</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">20: }</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">21: else {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">22: Queue::recv(p, h);</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">23: }</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">24: }</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><b style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">8.Makefile</b>(一个)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">1: OBJ_CC = \</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">2: tools/random.o tools/rng.o tools/ranvar.o common/misc.o common/timer-handler.o \</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">3: # ...</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">4: protoname/protoname.o protoname/protoname_rtable.o \</font></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">5: # ...</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">6: $(OBJ_STL)</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">step 5:</strong>编译</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">在ns目录下输入下名命令进行编译:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ make clean</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ touch common/packet.cc</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ make</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">到这里,我们添加新协议的过程就结束了。<br style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; "></p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><strong style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">step 6:</strong>测试</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">协议写完了,要用一个tcl对它进行测试,下面这是个很简单的而且可用的例子</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">set ns </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns node-config -Routing protoname </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">set nf </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns namtrace-all $nf </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">set nd </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns trace-all $nd </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> proc finish {} {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> global ns nf nd</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> $ns flush-trace</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> close $nf </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> close $nd </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> exec nam out.nam &</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> exit 0</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> }</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "> </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">for {set i 0} {$i < 7} {incr i} {set n($i) [$ns node] }</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">for {set i 0} {$i < 7} {incr i} {</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns duplex-link $n($i) $n() 1Mb 10ms DropTail</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">}</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">set udp0 </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns attach-agent $n(0) $udp0</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">set cbr0 </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$cbr0 set packetSize_ 500 </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$cbr0 set interval_ 0.005 </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$cbr0 attach-agent $udp0</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">set null0 </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns attach-agent $n(3) $null0</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns connect $udp0 $null0</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns at 0.5 "$cbr0 start"</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns rtmodel-at 1.0 down $n(1) $n(2)</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns rtmodel-at 2.0 up $n(1) $n(2) </p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns at 4.5 "$cbr0 stop"</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns at 5.0 "finish"</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">$ns run</p><p style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">参考文献:</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">Implementing a New Manet Unicast Routing Protocol in NS2,Francisco J. Ros Pedro M. Ruiz</p><p align="left" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">http://ourlab.blog.sohu.com/64266258.html</p></span></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; line-height: 25px; "><br></span></div><div><span class="Apple-style-span" style="border-collapse: collapse; line-height: 25px; "><br></span></div>
页:
[1]