亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? aodv.cc

?? 用于無線傳感器網絡按需距離向量路由協議仿真的aodv代碼
?? CC
?? 第 1 頁 / 共 3 頁
字號:
/*Copyright (c) 1997, 1998 Carnegie Mellon University.  All RightsReserved. Redistribution and use in source and binary forms, with or withoutmodification, are permitted provided that the following conditions are met:1. Redistributions of source code must retain the above copyright notice,this list of conditions and the following disclaimer.2. Redistributions in binary form must reproduce the above copyright notice,this list of conditions and the following disclaimer in the documentationand/or other materials provided with the distribution.3. The name of the author may not be used to endorse or promote productsderived from this software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS ORIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIESOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OROTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IFADVISED OF THE POSSIBILITY OF SUCH DAMAGE.The AODV code developed by the CMU/MONARCH group was optimized and tuned by Samir Das and Mahesh Marina, University of Cincinnati. The work was partially done in Sun Microsystems. Modified for gratuitous replies by Anant Utgikar, 09/16/02.*///#include <ip.h>#include <aodv/aodv.h>#include <aodv/aodv_packet.h>#include <random.h>#include <cmu-trace.h>//#include <energy-model.h>#define max(a,b)        ( (a) > (b) ? (a) : (b) )#define CURRENT_TIME    Scheduler::instance().clock()//#define DEBUG//#define ERROR#ifdef DEBUGstatic int extra_route_reply = 0;static int limit_route_request = 0;static int route_request = 0;#endif/*  TCL Hooks*/int hdr_aodv::offset_;static class AODVHeaderClass : public PacketHeaderClass {public:        AODVHeaderClass() : PacketHeaderClass("PacketHeader/AODV",                                              sizeof(hdr_all_aodv)) {	  bind_offset(&hdr_aodv::offset_);	} } class_rtProtoAODV_hdr;static class AODVclass : public TclClass {public:        AODVclass() : TclClass("Agent/AODV") {}        TclObject* create(int argc, const char*const* argv) {          assert(argc == 5);          //return (new AODV((nsaddr_t) atoi(argv[4])));	  return (new AODV((nsaddr_t) Address::instance().str2addr(argv[4])));        }} class_rtProtoAODV;intAODV::command(int argc, const char*const* argv) {  if(argc == 2) {  Tcl& tcl = Tcl::instance();        if(strncasecmp(argv[1], "id", 2) == 0) {      tcl.resultf("%d", index);      return TCL_OK;    }        if(strncasecmp(argv[1], "start", 2) == 0) {      btimer.handle((Event*) 0);#ifndef AODV_LINK_LAYER_DETECTION      htimer.handle((Event*) 0);      ntimer.handle((Event*) 0);#endif // LINK LAYER DETECTION      rtimer.handle((Event*) 0);      return TCL_OK;     }                 }  else if(argc == 3) {    if(strcmp(argv[1], "index") == 0) {      index = atoi(argv[2]);      return TCL_OK;    }    else if(strcmp(argv[1], "log-target") == 0 || strcmp(argv[1], "tracetarget") == 0) {      logtarget = (Trace*) TclObject::lookup(argv[2]);      if(logtarget == 0)	return TCL_ERROR;      return TCL_OK;    }    else if(strcmp(argv[1], "drop-target") == 0) {    int stat = rqueue.command(argc,argv);      if (stat != TCL_OK) return stat;      return Agent::command(argc, argv);    }    else if(strcmp(argv[1], "if-queue") == 0) {    ifqueue = (PriQueue*) TclObject::lookup(argv[2]);            if(ifqueue == 0)	return TCL_ERROR;      return TCL_OK;    }    else if (strcmp(argv[1], "port-dmux") == 0) {    	dmux_ = (PortClassifier *)TclObject::lookup(argv[2]);	if (dmux_ == 0) {		fprintf (stderr, "%s: %s lookup of %s failed\n", __FILE__,		argv[1], argv[2]);		return TCL_ERROR;	}	return TCL_OK;    }  }  return Agent::command(argc, argv);}/*    Constructor*/AODV::AODV(nsaddr_t id) : Agent(PT_AODV),			  btimer(this), htimer(this), ntimer(this), 			  rtimer(this), lrtimer(this), rqueue() {                   index = id;  seqno = 2;  bid = 1;  LIST_INIT(&nbhead);  LIST_INIT(&bihead);  logtarget = 0;  ifqueue = 0;}/*  Timers*/voidBroadcastTimer::handle(Event*) {  agent->id_purge();  Scheduler::instance().schedule(this, &intr, BCAST_ID_SAVE);}voidHelloTimer::handle(Event*) {   agent->sendHello();   double interval = MinHelloInterval +                  ((MaxHelloInterval - MinHelloInterval) * Random::uniform());   assert(interval >= 0);   Scheduler::instance().schedule(this, &intr, interval);}voidNeighborTimer::handle(Event*) {  agent->nb_purge();  Scheduler::instance().schedule(this, &intr, HELLO_INTERVAL);}voidRouteCacheTimer::handle(Event*) {  agent->rt_purge();#define FREQUENCY 0.5 // sec  Scheduler::instance().schedule(this, &intr, FREQUENCY);}voidLocalRepairTimer::handle(Event* p)  {  // SRD: 5/4/99aodv_rt_entry *rt;struct hdr_ip *ih = HDR_IP( (Packet *)p);   /* you get here after the timeout in a local repair attempt */   /*	fprintf(stderr, "%s\n", __FUNCTION__); */    rt = agent->rtable.rt_lookup(ih->daddr());	    if (rt && rt->rt_flags != RTF_UP) {    // route is yet to be repaired    // I will be conservative and bring down the route    // and send route errors upstream.    /* The following assert fails, not sure why */    /* assert (rt->rt_flags == RTF_IN_REPAIR); */		      //rt->rt_seqno++;      agent->rt_down(rt);      // send RERR#ifdef DEBUG      fprintf(stderr,"Node %d: Dst - %d, failed local repair\n",index, rt->rt_dst);#endif          }    Packet::free((Packet *)p);}/*   Broadcast ID Management  Functions*/voidAODV::id_insert(nsaddr_t id, u_int32_t bid) {BroadcastID *b = new BroadcastID(id, bid); assert(b); b->expire = CURRENT_TIME + BCAST_ID_SAVE; LIST_INSERT_HEAD(&bihead, b, link);}/* SRD */boolAODV::id_lookup(nsaddr_t id, u_int32_t bid) {BroadcastID *b = bihead.lh_first;  // Search the list for a match of source and bid for( ; b; b = b->link.le_next) {   if ((b->src == id) && (b->id == bid))     return true;      } return false;}voidAODV::id_purge() {BroadcastID *b = bihead.lh_first;BroadcastID *bn;double now = CURRENT_TIME; for(; b; b = bn) {   bn = b->link.le_next;   if(b->expire <= now) {     LIST_REMOVE(b,link);     delete b;   } }}/*  Helper Functions*/doubleAODV::PerHopTime(aodv_rt_entry *rt) {int num_non_zero = 0, i;double total_latency = 0.0; if (!rt)   return ((double) NODE_TRAVERSAL_TIME );	 for (i=0; i < MAX_HISTORY; i++) {   if (rt->rt_disc_latency[i] > 0.0) {      num_non_zero++;      total_latency += rt->rt_disc_latency[i];   } } if (num_non_zero > 0)   return(total_latency / (double) num_non_zero); else   return((double) NODE_TRAVERSAL_TIME);}/*  Link Failure Management Functions*/static voidaodv_rt_failed_callback(Packet *p, void *arg) {  ((AODV*) arg)->rt_ll_failed(p);}/* * This routine is invoked when the link-layer reports a route failed. */voidAODV::rt_ll_failed(Packet *p) {struct hdr_cmn *ch = HDR_CMN(p);struct hdr_ip *ih = HDR_IP(p);aodv_rt_entry *rt;nsaddr_t broken_nbr = ch->next_hop_;#ifndef AODV_LINK_LAYER_DETECTION drop(p, DROP_RTR_MAC_CALLBACK);#else  /*  * Non-data packets and Broadcast Packets can be dropped.  */  if(! DATA_PACKET(ch->ptype()) ||     (u_int32_t) ih->daddr() == IP_BROADCAST) {    drop(p, DROP_RTR_MAC_CALLBACK);    return;  }  log_link_broke(p);	if((rt = rtable.rt_lookup(ih->daddr())) == 0) {    drop(p, DROP_RTR_MAC_CALLBACK);    return;  }  log_link_del(ch->next_hop_);#ifdef AODV_LOCAL_REPAIR  /* if the broken link is closer to the dest than source,      attempt a local repair. Otherwise, bring down the route. */  if (ch->num_forwards() > rt->rt_hops) {    local_rt_repair(rt, p); // local repair    // retrieve all the packets in the ifq using this link,    // queue the packets for which local repair is done,     return;  }  else	#endif // LOCAL REPAIR	  {    drop(p, DROP_RTR_MAC_CALLBACK);    // Do the same thing for other packets in the interface queue using the    // broken link -Maheshwhile((p = ifqueue->filter(broken_nbr))) {     drop(p, DROP_RTR_MAC_CALLBACK);    }	    nb_delete(broken_nbr);  }#endif // LINK LAYER DETECTION}voidAODV::handle_link_failure(nsaddr_t id) {aodv_rt_entry *rt, *rtn;Packet *rerr = Packet::alloc();struct hdr_aodv_error *re = HDR_AODV_ERROR(rerr); re->DestCount = 0; for(rt = rtable.head(); rt; rt = rtn) {  // for each rt entry   rtn = rt->rt_link.le_next;    if ((rt->rt_hops != INFINITY2) && (rt->rt_nexthop == id) ) {     assert (rt->rt_flags == RTF_UP);     assert((rt->rt_seqno%2) == 0);     rt->rt_seqno++;     re->unreachable_dst[re->DestCount] = rt->rt_dst;     re->unreachable_dst_seqno[re->DestCount] = rt->rt_seqno;#ifdef DEBUG     fprintf(stderr, "%s(%f): %d\t(%d\t%u\t%d)\n", __FUNCTION__, CURRENT_TIME,		     index, re->unreachable_dst[re->DestCount],		     re->unreachable_dst_seqno[re->DestCount], rt->rt_nexthop);#endif // DEBUG     re->DestCount += 1;     rt_down(rt);   }   // remove the lost neighbor from all the precursor lists   rt->pc_delete(id); }    if (re->DestCount > 0) {#ifdef DEBUG   fprintf(stderr, "%s(%f): %d\tsending RERR...\n", __FUNCTION__, CURRENT_TIME, index);#endif // DEBUG   sendError(rerr, false); } else {   Packet::free(rerr); }}voidAODV::local_rt_repair(aodv_rt_entry *rt, Packet *p) {#ifdef DEBUG  fprintf(stderr,"%s: Dst - %d\n", __FUNCTION__, rt->rt_dst); #endif    // Buffer the packet   rqueue.enque(p);  // mark the route as under repair   rt->rt_flags = RTF_IN_REPAIR;  sendRequest(rt->rt_dst);  // set up a timer interrupt  Scheduler::instance().schedule(&lrtimer, p->copy(), rt->rt_req_timeout);}voidAODV::rt_update(aodv_rt_entry *rt, u_int32_t seqnum, u_int16_t metric,	       	nsaddr_t nexthop, double expire_time) {     rt->rt_seqno = seqnum;     rt->rt_hops = metric;     rt->rt_flags = RTF_UP;     rt->rt_nexthop = nexthop;     rt->rt_expire = expire_time;}voidAODV::rt_down(aodv_rt_entry *rt) {  /*   *  Make sure that you don't "down" a route more than once.   */  if(rt->rt_flags == RTF_DOWN) {    return;  }  // assert (rt->rt_seqno%2); // is the seqno odd?  rt->rt_last_hop_count = rt->rt_hops;  rt->rt_hops = INFINITY2;  rt->rt_flags = RTF_DOWN;  rt->rt_nexthop = 0;  rt->rt_expire = 0;} /* rt_down function *//*  Route Handling Functions*/voidAODV::rt_resolve(Packet *p) {struct hdr_cmn *ch = HDR_CMN(p);struct hdr_ip *ih = HDR_IP(p);aodv_rt_entry *rt; /*  *  Set the transmit failure callback.  That  *  won't change.  */ ch->xmit_failure_ = aodv_rt_failed_callback; ch->xmit_failure_data_ = (void*) this;	rt = rtable.rt_lookup(ih->daddr()); if(rt == 0) {	  rt = rtable.rt_add(ih->daddr()); } /*  * If the route is up, forward the packet   */	 if(rt->rt_flags == RTF_UP) {   assert(rt->rt_hops != INFINITY2);   forward(rt, p, NO_DELAY); } /*  *  if I am the source of the packet, then do a Route Request.  */	else if(ih->saddr() == index) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区视频在线看| 色婷婷香蕉在线一区二区| 99天天综合性| 3751色影院一区二区三区| 亚洲国产精品精华液ab| 日韩影院精彩在线| 91一区二区在线| 久久精品免费在线观看| 美女视频黄频大全不卡视频在线播放| 99久精品国产| 国产精品美女一区二区在线观看| 婷婷成人综合网| 一本大道久久精品懂色aⅴ| 久久久精品国产免大香伊| 奇米影视在线99精品| 欧美日韩夫妻久久| 国产精品天美传媒| 国产在线精品视频| 欧美成人精品高清在线播放| 五月激情六月综合| 欧美性色黄大片| 亚洲欧美另类图片小说| 国产99精品在线观看| 久久久精品蜜桃| 国产精品香蕉一区二区三区| 日韩一区二区三区四区五区六区| 亚洲一二三四在线观看| 日本高清视频一区二区| 亚洲精品视频在线观看免费| 不卡影院免费观看| 国产精品欧美久久久久无广告 | 日韩精品一区二区三区视频| 亚洲国产一区二区在线播放| 在线观看国产一区二区| 一区二区三区四区不卡视频| 一本色道a无线码一区v| 一区二区三区欧美| 一本大道久久a久久精品综合| 亚洲婷婷国产精品电影人久久| 国产福利一区二区三区视频在线| 久久久91精品国产一区二区精品| 国产毛片精品一区| 国产欧美日韩在线观看| 成人国产亚洲欧美成人综合网| 国产精品久久精品日日| 色综合亚洲欧洲| 亚洲一区二区在线播放相泽| 制服丝袜亚洲色图| 精品一区精品二区高清| 精品成人在线观看| 丁香另类激情小说| 亚洲天堂中文字幕| 欧美日韩精品专区| 另类中文字幕网| 国产精品色婷婷| 欧美在线观看18| 毛片基地黄久久久久久天堂| 久久久久久久久岛国免费| 91网站最新网址| 亚洲国产综合91精品麻豆| 制服视频三区第一页精品| 国内外精品视频| 亚洲欧洲综合另类| 欧美狂野另类xxxxoooo| 国产精品一区二区在线观看网站| 亚洲欧洲一区二区在线播放| 欧美日韩在线免费视频| 韩国一区二区在线观看| 亚洲综合男人的天堂| 欧美tk—视频vk| 日本福利一区二区| 国产伦精品一区二区三区视频青涩| 中文字幕视频一区| 日韩精品一区二区三区视频| 色一情一伦一子一伦一区| 美日韩黄色大片| 亚洲码国产岛国毛片在线| 欧美电影免费提供在线观看| 91丨九色porny丨蝌蚪| 狠狠色狠狠色合久久伊人| 夜夜嗨av一区二区三区中文字幕| 久久影院视频免费| 欧美精品在线观看播放| 成人av网站在线观看免费| 免费日韩伦理电影| 一区二区三区国产精品| 欧美国产1区2区| 精品欧美久久久| 欧美浪妇xxxx高跟鞋交| 日本大香伊一区二区三区| 国产麻豆成人精品| 麻豆一区二区在线| 亚洲成人综合网站| 一区二区三区四区乱视频| 久久婷婷国产综合精品青草 | 午夜精品aaa| 亚洲欧美激情插| 国产精品高潮久久久久无| 欧美精品一区二区三区很污很色的| 欧美日韩国产首页| 色综合 综合色| 99久久久免费精品国产一区二区| 国产一区二区网址| 久久精品国产99| 久久精品国产亚洲一区二区三区| 亚洲午夜av在线| 亚洲成av人片在线| 亚洲国产精品综合小说图片区| 亚洲色图在线播放| 亚洲免费三区一区二区| 中文字幕中文在线不卡住| 国产日产欧美一区二区视频| 久久久久久黄色| 国产亚洲欧美日韩日本| 国产日韩欧美激情| 欧美激情综合五月色丁香 | 亚洲综合色区另类av| 亚洲欧美色一区| 一区二区三区在线观看网站| 亚洲精品视频自拍| 亚洲国产日韩在线一区模特| 亚洲高清免费一级二级三级| 亚洲成人激情综合网| 三级亚洲高清视频| 日韩精品欧美成人高清一区二区| 午夜av一区二区三区| 日日摸夜夜添夜夜添精品视频| 偷拍一区二区三区| 奇米色一区二区| 国产一区二区三区免费播放 | 中文字幕综合网| 亚洲精品乱码久久久久久 | 亚洲色图在线看| 亚洲福利电影网| 久久99精品国产麻豆婷婷| 国产成人在线视频免费播放| av成人老司机| 欧美性猛片aaaaaaa做受| 91精品国产免费| 久久久一区二区三区捆绑**| 国产精品久久二区二区| 亚洲一区二区精品视频| 蜜臀av国产精品久久久久 | 亚洲视频狠狠干| 日韩vs国产vs欧美| 国产精品一品二品| 一本久久a久久免费精品不卡| 91精品在线一区二区| 国产婷婷色一区二区三区 | 18成人在线观看| 青青草伊人久久| 91最新地址在线播放| 91精品国产91久久综合桃花| 国产欧美日韩麻豆91| 亚洲一区二区美女| 豆国产96在线|亚洲| 91免费观看视频| 精品国产成人系列| 亚洲特黄一级片| 麻豆极品一区二区三区| 日本大香伊一区二区三区| 精品国产三级电影在线观看| 亚洲精品第1页| 国产在线一区观看| 欧美日韩一区久久| 中文字幕高清不卡| 蜜臀精品久久久久久蜜臀| 色美美综合视频| 久久久国产一区二区三区四区小说 | 2024国产精品| 亚洲五月六月丁香激情| 成人毛片视频在线观看| 日韩精品一区国产麻豆| 亚洲精品大片www| 波多野洁衣一区| 欧美精品一区二区久久久| 亚洲成av人片在线观看| 99久久er热在这里只有精品15 | 精品入口麻豆88视频| 亚洲精品乱码久久久久久| 粉嫩一区二区三区性色av| 欧美一卡在线观看| 亚洲一二三四久久| av中文字幕在线不卡| 国产喷白浆一区二区三区| 激情综合色播激情啊| 91精品一区二区三区久久久久久| 亚洲精品国产a久久久久久| 成人一二三区视频| 久久久99精品免费观看| 国内精品自线一区二区三区视频| 日韩一区二区三| 午夜不卡av在线| 欧美福利电影网| 天堂va蜜桃一区二区三区漫画版| 色视频成人在线观看免| 亚洲免费观看在线观看| 91在线无精精品入口| 最新高清无码专区| av在线不卡电影|