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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? aodv.cc

?? 此代碼是基于moav協(xié)議的qos改進代碼
?? CC
?? 第 1 頁 / 共 4 頁
字號:
/*Copyright (c) 1997, 1998 Carnegie Mellon University.  All RightsReserved. Permission to use, copy, modify, and distribute thissoftware and its documentation is hereby granted (including forcommercial or for-profit use), provided that both the copyright notice and this permission notice appear in all copies of the software, derivative works, or modified versions, and any portions thereof, and that both notices appear in supporting documentation, and that credit is given to Carnegie Mellon University in all publications reporting on direct or indirect use of this code or its derivatives.ALL CODE, SOFTWARE, PROTOCOLS, AND ARCHITECTURES DEVELOPED BY THE CMUMONARCH PROJECT ARE EXPERIMENTAL AND ARE KNOWN TO HAVE BUGS, SOME OFWHICH MAY HAVE SERIOUS CONSEQUENCES. CARNEGIE MELLON PROVIDES THISSOFTWARE OR OTHER INTELLECTUAL PROPERTY IN ITS ``AS IS'' CONDITION,AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULARPURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITYBE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ORCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OFSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ORBUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCEOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE ORINTELLECTUAL PROPERTY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCHDAMAGE.Carnegie Mellon encourages (but does not require) users of thissoftware or intellectual property to return any improvements orextensions that they make, and to grant Carnegie Mellon the rights to redistribute these changes without encumbrance.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);#ifdef MULTICAST      ntimer.handle((Event*) 0);      //grphtimer.handle((Event*) 0);#else#ifndef AODV_LINK_LAYER_DETECTION      htimer.handle((Event*) 0);      ntimer.handle((Event*) 0); #endif // LINK LAYER DETECTION#endif      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;    }    //add  by feelree     else if (strcasecmp (argv[1], "port-dmux") == 0) {        TclObject *obj;        port_dmux_ = (NsObject *) obj;        return TCL_OK;     }    //add end#ifdef MULTICAST    else if (strcmp(argv[1], "aodv-join-group") == 0){        nsaddr_t mcast_addr = atoi(argv[2]);        if (mcast_addr < IP_MULTICAST) return TCL_ERROR;        aodv_mt_entry *mt = mtable.mt_lookup(mcast_addr);        if (mt == 0) mt = mtable.mt_add(mcast_addr);        if (mt->mt_node_status == ON_GROUP){            return TCL_OK;        }        if (mt->mt_node_status == ON_TREE){            mt->mt_node_status = ON_GROUP;            return TCL_OK;        }        // node is not on the tree        mt->mt_flags = MTF_IN_REPAIR;        mt->mt_grp_leader_addr = INFINITY8;        mt->mt_node_status = ON_GROUP;         sendMRQ(mt, RREQ_J);        return TCL_OK;    }    else if (strcmp(argv[1], "aodv-leave-group") == 0){        nsaddr_t mcast_addr = atoi(argv[2]);        if (mcast_addr < IP_MULTICAST) return TCL_ERROR;        aodv_mt_entry *mt = mtable.mt_lookup(mcast_addr);        if (mt == 0 || mt->mt_node_status != ON_GROUP) return TCL_OK;        if (mt->mt_grp_leader_addr != index) mt_prune(mt->mt_dst);        else {            mt->mt_node_status = ON_TREE;            mt->mt_grp_leader_addr = INFINITY8;            selectLeader(mt, INFINITY8);        }        return TCL_OK;    }    #endif  }  return Agent::command(argc, argv);}/*    Constructor*/AODV::AODV(nsaddr_t id) : Agent(PT_AODV),			  btimer(this), htimer(this), grphtimer(this),ntimer(this), 			  rtimer(this), lrtimer(this), 			                            /*** added for multicast ***/			   rtetimer(this),			  prune_timer(this), p_timer(this),rqueue(), port_dmux_(0)                           /***************************/{                   index = id;  seqno = 2;  bid = 1;  LIST_INIT(&nbhead);  LIST_INIT(&bihead);#ifdef MULTICAST  hello_timeout = 0;  LIST_INIT(&pihead);  sendHello();#endif  logtarget = 0;  ifqueue = 0;}/*  Timers*/voidBroadcastTimer::handle(Event*) {  agent->id_purge();  Scheduler::instance().schedule(this, &intr, BCAST_ID_SAVE);}voidHelloTimer::handle(Event* p) {#ifdef MULTICAST   Packet::free((Packet *)p);   agent->sendHello();#else   agent->sendHello();   double interval = MinHelloInterval +                 ((MaxHelloInterval - MinHelloInterval) * Random::uniform());   assert(interval >= 0);   Scheduler::instance().schedule(this, &intr, interval);#endif}voidNeighborTimer::handle(Event*) {  agent->nb_purge();#ifdef MULTICAST#ifdef PREDICTION  agent->mt_link_purge();#endif  Scheduler::instance().schedule(this, &intr, 0.5);#else  Scheduler::instance().schedule(this, &intr, HELLO_INTERVAL);#endif}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 IMPROVEMENT  if (rt->rt_flags != RTF_DOWN && rt->rt_nexthop != ch->next_hop_){    ch->next_hop_ = rt->rt_nexthop;    Scheduler::instance().schedule(target_, p, 0.);    return;   }#endif#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	  {#ifdef IMPROVEMENT     if (rt->rt_flags != RTF_DOWN &&         (rt->rt_retry_pid < ch->uid() || rt->rt_retry_times == 0)){            if (rt->rt_retry_times == 0) rt->rt_retry_times = 1;       if (rt->rt_retry_pid < ch->uid()) rt->rt_retry_pid = ch->uid();       ch->next_hop_ = rt->rt_nexthop;       Scheduler::instance().schedule(target_, p, 0.);       return;     }#endif    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);#ifdef MULTICAST    handle_link_failure(broken_nbr);#endif  }#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); #ifndef MULTICAST     rt->rt_seqno++;#endif     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 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕精品一区二区精品绿巨人 | 一区二区三区成人在线视频| 日韩码欧中文字| 亚洲成人资源在线| 99久久免费精品高清特色大片| 91精品国产黑色紧身裤美女| 中文字幕一区二区三区色视频| 精品一区二区三区视频在线观看| 91啪亚洲精品| 国产精品久久免费看| 极品瑜伽女神91| 91精品国产综合久久久久久久久久| 日韩一区在线免费观看| 国产乱子伦一区二区三区国色天香 | 国产欧美视频一区二区| 一片黄亚洲嫩模| 99久久久国产精品| 国产精品久久久久一区| 美国精品在线观看| 666欧美在线视频| 亚洲国产精品久久一线不卡| 高清国产一区二区| 日韩亚洲欧美中文三级| 亚洲国产欧美另类丝袜| 色婷婷激情一区二区三区| 亚洲视频免费在线观看| 91美女福利视频| 亚洲自拍另类综合| 欧美综合在线视频| 亚洲免费观看高清完整版在线观看 | 亚洲在线免费播放| 一本久道久久综合中文字幕| 久久日韩精品一区二区五区| 婷婷开心久久网| 欧美精品久久99| 午夜欧美视频在线观看| 欧美色大人视频| 午夜精品一区二区三区电影天堂 | av在线综合网| 中文字幕亚洲在| 国产不卡视频在线观看| 国产精品家庭影院| 日本高清无吗v一区| 亚洲一区二区三区精品在线| 欧美日韩国产综合一区二区| 水蜜桃久久夜色精品一区的特点| 欧美精品aⅴ在线视频| 日韩精品欧美精品| 久久久久国色av免费看影院| 国产福利91精品一区| 国产精品二三区| 一本一本大道香蕉久在线精品| 亚洲一区免费在线观看| 成人动漫在线一区| 亚洲人快播电影网| 欧美视频一区二| 奇米精品一区二区三区在线观看 | 91麻豆精品国产自产在线观看一区| 蜜桃久久久久久久| 久久精品一区二区三区av| 成年人国产精品| 亚洲丰满少妇videoshd| 精品国精品自拍自在线| 成人一级片网址| 午夜国产精品影院在线观看| 日韩精品一区二区三区老鸭窝| 成人av电影在线观看| 亚洲狠狠爱一区二区三区| 日韩一级精品视频在线观看| 国产99精品国产| 亚洲国产aⅴ成人精品无吗| 久久综合av免费| 色综合久久久网| 国模无码大尺度一区二区三区| 久久久久久久久97黄色工厂| 在线看国产一区| 国产精品自拍网站| 亚洲电影一区二区三区| 久久久久国产精品麻豆| 欧美日韩电影在线| 成人免费黄色在线| 久久精品久久99精品久久| 中文字幕一区二区三区精华液 | 亚洲在线视频一区| 久久久精品2019中文字幕之3| 91在线国内视频| 国产乱码精品一区二区三区av| 亚洲在线视频网站| 国产精品人成在线观看免费 | 国内精品嫩模私拍在线| 亚洲图片有声小说| 亚洲丝袜自拍清纯另类| 日韩精品在线看片z| 欧美日韩一区国产| 99视频超级精品| 国产成a人亚洲精品| 日韩国产在线观看一区| 亚洲欧美日韩国产综合在线| 国产亲近乱来精品视频| 日韩欧美一级二级三级| 欧美三级韩国三级日本三斤| 国产69精品久久久久毛片| 美女脱光内衣内裤视频久久网站 | 日本人妖一区二区| 亚洲一区二区综合| 亚洲日本va午夜在线影院| 久久亚洲综合色| 欧美一级二级三级乱码| 日韩欧美美女一区二区三区| 91.xcao| 5858s免费视频成人| 在线观看日韩国产| 欧洲一区二区三区在线| 在线看一区二区| 欧美日韩久久久久久| 色综合久久久久综合| 91久久精品日日躁夜夜躁欧美| 91免费视频观看| 91麻豆国产在线观看| 97久久超碰国产精品电影| 国产成人亚洲综合a∨婷婷| 国产精品1区二区.| 国产精品一二二区| 国产不卡免费视频| 色综合久久中文综合久久97| 在线观看亚洲成人| 欧美高清视频www夜色资源网| 欧美精品v国产精品v日韩精品| 欧美一卡二卡在线| 精品国产一区二区三区久久影院| 欧美成人a视频| 国产欧美日韩视频一区二区| 国产精品电影一区二区| 亚洲精品乱码久久久久久日本蜜臀| 亚洲精品国产高清久久伦理二区| 亚洲一区二区三区在线| 午夜视频久久久久久| 激情综合色综合久久| 成人午夜在线视频| 91久久一区二区| 日韩一区二区三区免费观看| 久久综合色鬼综合色| 1000部国产精品成人观看| 亚洲国产成人av网| 国产一区二区三区在线观看免费视频 | 久久99国产精品成人| 国产成人h网站| 欧美亚洲精品一区| 精品久久久久久久人人人人传媒| 国产精品天美传媒沈樵| 亚洲国产人成综合网站| 狠狠狠色丁香婷婷综合久久五月| 成人黄色国产精品网站大全在线免费观看| 91小视频免费观看| 日韩欧美另类在线| 亚洲色图欧美在线| 久久99久久久欧美国产| 99亚偷拍自图区亚洲| 欧美一级欧美一级在线播放| 欧美国产丝袜视频| 亚洲成av人片一区二区三区| 狠狠色丁香九九婷婷综合五月| 色婷婷av一区二区三区之一色屋| 日韩欧美成人激情| 一区二区在线观看免费| 国内久久精品视频| 欧美日韩国产一级片| 国产精品久久久久久久久久久免费看 | 高清在线成人网| 91麻豆精品国产91久久久使用方法| 日本一区二区成人| 日本视频一区二区三区| 91年精品国产| 国产精品三级在线观看| 蜜臀av一区二区在线观看| 日本高清不卡aⅴ免费网站| 国产婷婷色一区二区三区四区 | 亚洲国产精品一区二区www | 久久99精品视频| 欧美日韩精品一区二区天天拍小说| 国产精品日日摸夜夜摸av| 久久99精品国产| 在线综合视频播放| 亚洲国产一区二区视频| 91麻豆免费视频| 国产精品成人免费| 国产成人免费在线观看| 久久综合成人精品亚洲另类欧美 | 亚洲女爱视频在线| 丁香婷婷综合色啪| 久久影音资源网| 久久99最新地址| 91精品国产美女浴室洗澡无遮挡| 亚洲制服欧美中文字幕中文字幕| 91一区二区在线| 亚洲欧美日韩国产综合在线| jlzzjlzz国产精品久久| 综合电影一区二区三区| 成人av资源在线| 国产精品天天看|