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

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

?? aodv.cc

?? 對IEEE 802.11e里的分布式信道接入算法EDCA進行改進
?? CC
?? 第 1 頁 / 共 3 頁
字號:
/*    aodv.cc   $Id: aodv.cc,v 1.7 2000/03/10 00:57:29 yaxu Exp $ *//* The AODV code developed by the CMU/MONARCH group was optimized * and tuned by Samir Das (UTSA) and Mahesh Marina (UTSA). The  * work was partially done in Sun Microsystems. *  * The original CMU copyright is below.  *//*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 noticeand this permission notice appear in all copies of the software,derivative works, or modified versions, and any portions thereof, andthat both notices appear in supporting documentation, and that creditis given to Carnegie Mellon University in all publications reportingon 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 toredistribute these changes without encumbrance.*/#include <aodv/aodv.h>#include <aodv/aodv_packet.h>#include <ip.h>#include <random.h>#include <cmu-trace.h>#define max(a,b)        a > b ? a : b#define CURRENT_TIME    Scheduler::instance().clock()//#define DEBUG#ifdef DEBUGstatic int extra_route_reply = 0;static int limit_route_request = 0;static int route_request = 0;#endif/* ===================================================================   TCL Hooks   ================================================================= */static class AODVHeaderClass : public PacketHeaderClass {public:        AODVHeaderClass() : PacketHeaderClass("PacketHeader/AODV",                                              AODV_HDR_LEN) { } } 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])));        }} class_rtProtoAODV;/* ================================================================   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/99{	rt_entry *rt;	/* you get here after the timeout in a local repair attempt */	/*	fprintf(stderr, "%s\n", __FUNCTION__); */	struct hdr_ip *ih = HDR_IP( (Packet *)p);	//	rt = agent->rtable.rt_lookup(ih->dst_);	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 triggered replies upstream.		/* The following assert fails, not sure why */		/* assert (rt->rt_flags == RTF_IN_REPAIR); */				agent->rt_down(rt);/*  printf("Node %d: Dst - %d, failed local repair\n",index, rt->rt_dst);*/	}	Packet::free((Packet *)p);}/*================================================================== */AODV::AODV(nsaddr_t id) : Agent(PT_AODV),        btimer(this), htimer(this), ntimer(this), rtimer(this), lrtimer(this),        rqueue(){        bind("off_AODV_", &off_AODV_);                        index = id;        seqno = 1;        bid = 1;        LIST_INIT(&nbhead);        LIST_INIT(&bihead);        logtarget = 0;        ifqueue = 0;}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                        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;                }        }        return Agent::command(argc, argv);}/* =====================================================================   Neighbor Management Functions   ===================================================================== */voidAODV::nb_insert(nsaddr_t id){        Neighbor *nb = new Neighbor(id);        assert(nb);        nb->nb_expire = CURRENT_TIME +                (1.5 * ALLOWED_HELLO_LOSS * HELLO_INTERVAL);        LIST_INSERT_HEAD(&nbhead, nb, nb_link);        seqno += 1;             // set of neighbors changed}Neighbor*AODV::nb_lookup(nsaddr_t id){        Neighbor *nb = nbhead.lh_first;        for(; nb; nb = nb->nb_link.le_next) {                if(nb->nb_addr == id)                        break;        }        return nb;}/* * Called when we receive *explicit* notification that a Neighbor * is no longer reachable. */voidAODV::nb_delete(nsaddr_t id){        Neighbor *nb = nbhead.lh_first;        rt_entry *rt;        log_link_del(id);        seqno += 1;     // Set of neighbors changed        for(; nb; nb = nb->nb_link.le_next) {                if(nb->nb_addr == id) {                        LIST_REMOVE(nb,nb_link);                        delete nb;                        break;                }        }        for(rt = rtable.head(); rt; rt = rt->rt_link.le_next) {                if(rt->rt_nexthop == id) {                        rt_down(rt);                }        }}/* * Purges all timed-out Neighbor Entries - runs every * HELLO_INTERVAL * 1.5 seconds. */voidAODV::nb_purge(){        Neighbor *nb = nbhead.lh_first;        Neighbor *nbn;        double now = CURRENT_TIME;        for(; nb; nb = nbn) {                nbn = nb->nb_link.le_next;                if(nb->nb_expire <= now) {                        nb_delete(nb->nb_addr);                }        }}/* =====================================================================   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);}/* I changed this, SRD */u_int32_tAODV::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 ID_FOUND;             }        return ID_NOT_FOUND;}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;                }        }}/* ================================================================= */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){#ifndef AODV_LINK_LAYER_DETECTION        drop(p, DROP_RTR_MAC_CALLBACK);#else        struct hdr_cmn *ch = HDR_CMN(p);        struct hdr_ip *ih = HDR_IP(p);        rt_entry *rt;        /*         * Non-data packets and Broadcast Packets can be dropped.         */        if(! DATA_PACKET(ch->ptype()) ||	   //           (u_int32_t) ih->dst_ == IP_BROADCAST) {	   ih->daddr() == (nsaddr_t)IP_BROADCAST) {                drop(p, DROP_RTR_MAC_CALLBACK);                return;        }        log_link_broke(p);        // if((rt = rtable.rt_lookup(ih->dst_)) == 0) {	if((rt = rtable.rt_lookup(ih->daddr())) == 0) {                drop(p, DROP_RTR_MAC_CALLBACK);                return;        }        log_link_del(ch->next_hop_);		/* if the broken link is closer to the dest than source, 		 attempt a local repair. Otherwise, bring down the route. */#ifdef AODV_LOCAL_REPAIR		if (ch->num_forwards() > rt->rt_hops) {			local_rt_repair(rt, p); // local repair			// Mahesh 09/11/99			// retrieve all the packets in the ifq using this link,			// queue the packets for which local repair is done, 			// drop the rest of the packets and send triggered replies			return;		}		else	#endif		{		  /* Increment the sequence no. and bring down the route */		  rt->rt_seqno++;		  rt_down(rt);		  		  //		  if (index == ih->src_) {		  if (index == ih->saddr()) {		    // If I am the source,		    // queue the packet since rt_down tries to send a request		    // Mahesh 09/11/99		         rqueue.enque(p);		  }		  else {		  	drop(p,DROP_RTR_NO_ROUTE);		  }		}#endif /* AODV_LINK_LAYER_DETECTION */}voidAODV::local_rt_repair(rt_entry *rt, Packet *p){  	/* fprintf(stderr,"%s: Dst - %d\n", __FUNCTION__, rt->rt_dst); */	/* Buffer the packet */	rqueue.enque(p);	/* mark the route as under repair */	rt->rt_flags = RTF_IN_REPAIR;	/* start a route discovery */	/* Mahesh 09/11/99	   Note that the following does not ensure that route request 	   is actually sent.	*/	sendRequest(rt->rt_dst);	/* set up a timer interrupt */	Scheduler::instance().schedule(&lrtimer, p->copy(),						rt->rt_req_timeout);}voidAODV::rt_down(rt_entry *rt){	/*  	 *  Make sure that you don't "down" a route more than once.  	 */ 	if(rt->rt_flags == RTF_DOWN) { 		return; 	}	/*	// Mahesh 09/11/99 	// This function has changed considerably from the last version.	// Need to check whether the next hop for the destination	// is changed before bringing down the route, for the time being	// we ignore this case.	*/ 	rt->rt_flags = RTF_DOWN; 	rt->rt_expire = 0;#ifndef ERROR_BROADCAST    {   	Neighbor *nb = rt->rt_nblist.lh_first;	Neighbor *nbn;    	for( ; nb; nb = nbn) {       	 nbn = nb->nb_link.le_next;		 if (nb->nb_expire > CURRENT_TIME)		 // If this neighbor is still considered active	     	sendTriggeredReply(nb->nb_addr,           		                 rt->rt_dst,               		             rt->rt_seqno);            LIST_REMOVE(nb, nb_link);            delete nb;     	}	}#else	// Broadcast an unsolicited route reply to the upstream neighbors	sendTriggeredReply(rt->rt_dst, rt->rt_seqno);#endif	/*	 *  Now purge the Network Interface queues that	 *  may have packets destined for this broken	 *  neighbor.	 */     {     Packet *p;      	 while((p = ifqueue->filter(rt->rt_nexthop))) {	   //         struct hdr_cmn *ch = HDR_CMN(p);         struct hdr_ip *ih = HDR_IP(p);         	 //	     if (index == ih->src_) {	     if (index == ih->saddr()) {	       // If I am the source of the packet,	       // queue this packet and send route request.	                   	rqueue.enque(p);		//                sendRequest(ih->dst_);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国模一区二区三区| 不卡电影免费在线播放一区| 欧美三级三级三级| 亚洲国产欧美在线| 欧美区在线观看| 天天亚洲美女在线视频| 欧美一区二区久久久| 激情小说亚洲一区| 欧美极品xxx| 91蜜桃传媒精品久久久一区二区| 亚洲久草在线视频| 91麻豆精品国产91久久久久| 久久精品999| 中文字幕av不卡| 色综合久久久久网| 日本sm残虐另类| 国产无一区二区| 在线免费观看视频一区| 日本不卡一区二区三区高清视频| 337p粉嫩大胆色噜噜噜噜亚洲 | 美日韩一级片在线观看| 精品国产凹凸成av人导航| 国产精品18久久久久久久久久久久 | 91精品国产黑色紧身裤美女| 久久er99精品| 亚洲精品国久久99热| 日韩午夜av一区| 99麻豆久久久国产精品免费优播| 夜夜夜精品看看| 久久久精品tv| 欧美日韩成人一区| 成a人片亚洲日本久久| 午夜精品在线视频一区| 欧美国产精品一区二区三区| 欧美三级日韩在线| 成人午夜私人影院| 欧美a一区二区| 亚洲狼人国产精品| 久久久久97国产精华液好用吗| 欧美主播一区二区三区| 国产91精品一区二区麻豆网站 | 欧美一区二区精品久久911| 国产suv精品一区二区6| 日韩国产高清在线| 1区2区3区国产精品| 欧美精品一区二区三区蜜臀| 在线视频中文字幕一区二区| 国产成人午夜视频| 男女男精品视频网| 亚洲一区二区三区影院| 亚洲欧洲av在线| www国产成人| 欧美不卡一区二区三区| 欧美亚洲日本一区| 91在线视频免费观看| 国产黑丝在线一区二区三区| 日韩av中文在线观看| 一区二区三区欧美在线观看| 国产片一区二区三区| 欧美刺激午夜性久久久久久久| 精品视频一区三区九区| 色婷婷一区二区| 99久久99久久免费精品蜜臀| 国产美女精品一区二区三区| 热久久国产精品| 日韩电影免费在线| 亚洲大片免费看| 亚洲18女电影在线观看| 亚洲一区在线观看视频| 一区2区3区在线看| 亚洲日本在线视频观看| 国产精品国产自产拍在线| 日本一区二区三级电影在线观看 | 欧美日韩高清一区二区三区| 91丨porny丨户外露出| 不卡高清视频专区| av午夜一区麻豆| 97久久久精品综合88久久| 91丨porny丨首页| 色综合久久久久网| 欧美亚洲动漫制服丝袜| 欧美日精品一区视频| 欧美怡红院视频| 欧美日韩免费一区二区三区| 欧美在线你懂的| 欧美日韩亚洲高清一区二区| 欧美日韩日日骚| 日韩三级在线观看| www久久精品| 国产精品丝袜黑色高跟| 奇米一区二区三区| 免费欧美日韩国产三级电影| 久久99九九99精品| 国产精品一区2区| 91视频国产观看| 欧美在线播放高清精品| 日韩一区二区麻豆国产| 久久亚洲私人国产精品va媚药| 国产清纯白嫩初高生在线观看91| 最新欧美精品一区二区三区| 亚洲第一在线综合网站| 免费成人美女在线观看| 国产丶欧美丶日本不卡视频| 97精品久久久午夜一区二区三区 | 在线播放日韩导航| 精品免费视频.| 日本一区二区高清| 亚洲一二三专区| 精品无码三级在线观看视频| av网站一区二区三区| 欧美精品在线观看一区二区| 久久免费视频色| 亚洲乱码一区二区三区在线观看| 日日摸夜夜添夜夜添国产精品| 国产麻豆精品视频| 在线视频你懂得一区| 日韩欧美激情在线| 亚洲啪啪综合av一区二区三区| 日韩av一区二区三区四区| 丰满少妇在线播放bd日韩电影| 在线观看国产91| 欧美精品一区二区三区久久久 | 一区二区三区四区五区视频在线观看| 99精品在线免费| 欧美酷刑日本凌虐凌虐| 久久精品欧美日韩| 午夜不卡av免费| 99久久精品国产观看| 精品国产青草久久久久福利| 亚洲综合激情网| 东方欧美亚洲色图在线| 日韩西西人体444www| 一区二区成人在线视频| 国产成人av福利| 日韩一区二区影院| 亚洲免费在线播放| 国产精品中文欧美| 日韩三级视频在线看| 亚洲丰满少妇videoshd| 成人午夜又粗又硬又大| 精品久久久影院| 天天影视涩香欲综合网| 色老汉一区二区三区| 日本一区二区三级电影在线观看| 日韩专区欧美专区| 色哟哟国产精品免费观看| 久久精品欧美日韩精品| 麻豆成人91精品二区三区| 7777精品伊人久久久大香线蕉 | 欧美天堂一区二区三区| 国产精品久久久久久久午夜片| 激情久久五月天| 欧美一区二区日韩| 丝袜a∨在线一区二区三区不卡| 色综合天天综合网国产成人综合天| 国产女同互慰高潮91漫画| 国产精品一区在线观看乱码 | 久久99精品一区二区三区| 欧美精品自拍偷拍| 亚洲电影在线免费观看| 在线精品国精品国产尤物884a| 亚洲美女免费视频| 91麻豆精品一区二区三区| 一色屋精品亚洲香蕉网站| 成人高清视频在线观看| 中文字幕一区二区三中文字幕| 国产二区国产一区在线观看| 国产欧美日韩在线| 国产不卡高清在线观看视频| 中文字幕乱码久久午夜不卡| 高清国产一区二区| 国产精品黄色在线观看| eeuss鲁片一区二区三区在线看| 国产精品久久久久久久浪潮网站| zzijzzij亚洲日本少妇熟睡| 亚洲欧美中日韩| 在线观看日韩高清av| 亚洲成av人片在线| 91精品国产乱| 国产一区二区三区av电影| 日本一区二区电影| 99国产精品99久久久久久| 一个色在线综合| 3751色影院一区二区三区| 久久av老司机精品网站导航| 国产亚洲美州欧州综合国 | 91在线观看污| 一区二区三区在线免费观看| 91福利小视频| 日本aⅴ免费视频一区二区三区| 久久综合成人精品亚洲另类欧美 | 国产精品日韩成人| 色综合久久精品| 日本午夜精品视频在线观看| www激情久久| 色噜噜狠狠成人网p站| 日本成人中文字幕在线视频| 久久午夜国产精品| 色综合色狠狠天天综合色| 日本亚洲电影天堂|