TOMATOFAN 发表于 2011-12-22 08:53

在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 &lt;agent.h&gt;//代理基本类</li><li>
#include &lt;packet.h&gt; //数据包类</li><li>
#include &lt;trace.h&gt; //跟踪类,用于在跟踪文件里记录输出的仿真结果</li><li>
#include &lt;timer-handler.h&gt; //计时器基本类,创建我们自定义的计时器</li><li>
#include &lt;random.h&gt; //随机类,用于产生伪随机数</li><li>
#include &lt;classifier-port.h&gt; //端口分类器类,用于淘汰向上层传输的数据包</li><li>
#include &lt;mobilenode.h&gt;</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&amp; ra_addr() { return ra_addr_; }</li><li>
//inline protoname_state&amp; state() { return state_; }</li><li>
inline int&amp; 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 &lt;random.h&gt;</li><li>
#include &lt;cmu-trace.h&gt;</li><li>
#include &lt;iostream&gt;</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(&amp;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_-&gt;send_protoname_pkt();</li><li>
      agent_-&gt;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_", &amp;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_-&gt;pt_-&gt;buffer(), "P %f _%d_ Routing Table", CURRENT_TIME, ra_addr());</li><li>
                           logtarget_-&gt;pt_-&gt;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-&gt;saddr() == ra_addr()) {</li><li>
             // If there exists a loop, must drop the packet</li><li>
             if (ch-&gt;num_forwards() &gt; 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-&gt;num_forwards() == 0)</li><li>
                  ch-&gt;size() += IP_HDR_LEN;</li><li>
      }</li><li>
       // If it is a protoname packet, must process it</li><li>
      if (ch-&gt;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-&gt;ttl_--;</li><li>
             if (ih-&gt;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-&gt;sport() == RT_PORT);</li><li>
      assert(ih-&gt;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-&gt;pkt_src() = ra_addr();</li><li>
      ph-&gt;pkt_len() = 7;</li><li>
      ph-&gt;pkt_seq_num() = seq_num_++;</li><li>
      ch-&gt;ptype() = PT_PROTONAME;</li><li>
      ch-&gt;direction() = hdr_cmn::DOWN;</li><li>
      ch-&gt;size() = IP_HDR_LEN + ph-&gt;pkt_len();</li><li>
      ch-&gt;error() = 0;</li><li>
      ch-&gt;next_hop() = IP_BROADCAST;</li><li>
      ch-&gt;addr_type() = NS_AF_INET;</li><li>
      ih-&gt;saddr() = ra_addr();</li><li>
      ih-&gt;daddr() = IP_BROADCAST;</li><li>
      ih-&gt;sport() = RT_PORT;</li><li>
      ih-&gt;dport() = RT_PORT;</li><li>
      ih-&gt;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-&gt;direction() == hdr_cmn::UP &amp;&amp;</li><li>
          ((u_int32_t)ih-&gt;daddr() == IP_BROADCAST || ih-&gt;daddr() == ra_addr())) {</li><li>
          dmux_-&gt;recv(p, 0);</li><li>
          return;</li><li>
   }</li><li>
   else {</li><li>
         ch-&gt;direction() = hdr_cmn::DOWN;</li><li>
         ch-&gt;addr_type() = NS_AF_INET;</li><li>
         if ((u_int32_t)ih-&gt;daddr() == IP_BROADCAST)</li><li>
             ch-&gt;next_hop() = IP_BROADCAST;</li><li>
         else {</li><li>
             nsaddr_t next_hop = rtable_.lookup(ih-&gt;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-&gt;daddr());</li><li>
               drop(p, DROP_RTR_NO_ROUTE);</li><li>
               return;</li><li>
             }</li><li>
             else</li><li>
               ch-&gt;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 &lt;packet.h&gt;</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&amp; pkt_src() { return pkt_src_; }</li><li>
    inline u_int16_t&amp; pkt_len() { return pkt_len_; }</li><li>
    inline u_int8_t&amp; pkt_seq_num() { return pkt_seq_num_; }</li><li>
    static int offset_;</li><li>
    inline static int&amp; offset() { return offset_; }</li><li>
    inline static hdr_protoname_pkt* access(const Packet* p) {</li><li>
         return (hdr_protoname_pkt*)p-&gt;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 &lt;trace.h&gt;</li><li>
#include &lt;map&gt;</li><li>
typedef std::map&lt;nsaddr_t, nsaddr_t&gt; 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-&gt;pt_-&gt;buffer(), "P\tdest\tnext");</li><li>
       out-&gt;pt_-&gt;dump();</li><li>
      for (rtable_t::iterator it = rt_.begin(); it != rt_.end(); it++) {</li><li>
             sprintf(out-&gt;pt_-&gt;buffer(), "P\t%d\t%d", (*it).first, (*it).second);</li><li>
             out-&gt;pt_-&gt;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&nbsp;</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>&nbsp;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:&nbsp;<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&nbsp;</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; ">&nbsp;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:&nbsp;<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>&nbsp;(三个,先在最上面加头文件,在找一个合适的地方加函数)</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:&nbsp;<font color="#ff0000" style="font-family: Ubuntu, UbuntuBeta !important; line-height: 22px; ">#include &lt;protoname/protoname_pkt.h&gt;</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_-&gt;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_-&gt;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-&gt;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-&gt;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-&gt;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_-&gt;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-&gt;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-&gt;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-&gt;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_-&gt;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-&gt;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-&gt;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-&gt;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; ">&nbsp;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; ">&nbsp;</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-&gt;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&nbsp;&nbsp;</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 &nbsp;&nbsp;&nbsp;&nbsp;</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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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; ">&nbsp; 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; ">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;global ns nf&nbsp; 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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close $nf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close $nd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec nam out.nam &amp;</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; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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; ">&nbsp;&nbsp; }</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; ">&nbsp;</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 &lt; 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 &lt; 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 &nbsp;&nbsp;</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&nbsp;&nbsp;&nbsp;&nbsp;</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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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)&nbsp;&nbsp;</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&nbsp; 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]
查看完整版本: 在NS2中添加路由协议(整理版)1