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

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

?? aodv.cc

?? 在Linux下做的QuadTree的程序
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/*    aodv.cc   $Id: aodv.cc,v 1.1.1.1 2000/08/28 18:40:10 jinyang Exp $   */#include <cmu/aodv/aodv.h>#include <cmu/aodv/aodv_packet.h>#include <ip.h>#include <random.h>#include <cmu/cmu-trace.h>#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/rtProto/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();        Scheduler::instance().schedule(this, &intr, 1 /* 60 */);}/* ===================================================================== *//* ===================================================================== */AODV::AODV(nsaddr_t id) : Agent(PT_AODV),        btimer(this), htimer(this), ntimer(this), rtimer(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(strcasecmp(argv[1], "id") == 0) {                        tcl.resultf("%d", index);                        return TCL_OK;                }                if(strcasecmp(argv[1], "start") == 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) {                        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);}u_int32_tAODV::id_lookup(nsaddr_t id){        BroadcastID *b = bihead.lh_first;        for( ; b; b = b->link.le_next) {                if(b->src == id)                        return b->id;        }        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) {                drop(p, DROP_RTR_MAC_CALLBACK);                return;        }        log_link_broke(p);        if((rt = rtable.rt_lookup(ih->dst_)) == 0) {                drop(p, DROP_RTR_MAC_CALLBACK);                return;        }#ifdef AODV_USE_LL_METRIC#ifdef AODV_USE_GOD_FEEDBACK        if(rt->rt_flags & RTF_UP &&           God::instance()->hops(index, ch->next_hop_) != 1) {#else        if(CURRENT_TIME - rt->rt_error_time > MAX_RT_ERROR_TIME)                rt->rt_errors = 0;        if(rt->rt_errors == 0)                rt->rt_error_time = CURRENT_TIME;        rt->rt_errors += 1;        if(rt->rt_flags & RTF_UP && rt->rt_errors == MAX_RT_ERROR) {#endif /* AODV_USE_GOD_FEEDBACK */#endif /* AODV_USE_LL_METRIC */                log_link_del(ch->next_hop_);                rt_down(rt);#ifdef AODV_USE_LL_METRIC        }        else {                log_link_kept(ch->next_hop_);        }#endif        /*         * Try sending this packet back down through the protocol stack.         * This will result in another Route Request being issued.         */        rt_resolve(p);#endif /* AODV_LINK_LAYER_DETECTION */}voidAODV::rt_down(rt_entry *rt){        /*         *  Make sure that you don't "down" a route more than once.         */        if((rt->rt_flags & RTF_UP) == 0) {                return;        }        /*         *  As I Send Triggered Replies to my upstream neighbor's,         *  I promptly forget about them so that I don't repeat these         *  "route errors" many times.         *         *  I have seen cases where two nodes each throught that the other         *  was upstream.  This should avoid this problem.         */        {                Neighbor *nb = rt->rt_nblist.lh_first;                Neighbor *nbn;                for( ; nb; nb = nbn) {                        nbn = nb->nb_link.le_next;                        sendTriggeredReply(nb->nb_addr,                                           rt->rt_dst,                                           rt->rt_seqno);                        LIST_REMOVE(nb, nb_link);                        delete nb;                }        }        rt->rt_flags &= ~RTF_UP;        rt->rt_expire = CURRENT_TIME + BAD_LINK_LIFETIME;	/*	 *  Now purge the Network Interface queues that	 *  may have packets destined for this broken	 *  neighbor.	 */        {                Packet *p;                while((p = ifqueue->prq_get_nexthop(rt->rt_nexthop))) {                        // XXX - this should probably a rt_resolve(p);                        Packet::free(p);                }        }}voidAODV::rt_resolve(Packet *p){        struct hdr_cmn *ch = HDR_CMN(p);        struct hdr_ip *ih = HDR_IP(p);        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->dst_);        if(rt == 0) {                rt = rtable.rt_add(ih->dst_);        }        if(rt->rt_flags & RTF_UP) {                forward(rt, p, 0 /* No Jitter */);        }        /*         *  If I am the source of the packet, then do a Route Request.         *  Otherwise, generate a Route Error.         */        else if(ih->src_ == index) {                rqueue.enque(p);                sendRequest(rt->rt_dst);        }        /*         * I am trying to forward a packet for someone else to which         * I don't have a route.         */        else {                /*                 *  Since the route is not up, I only need to notify                 *  the node from which I received this packet.                 */                sendTriggeredReply(ch->prev_hop_,                                   rt->rt_dst,                                   rt->rt_seqno);                Packet::free(p);        }}voidAODV::rt_purge(){        rt_entry *rt, *rtn;        double now = CURRENT_TIME;	        for(rt = rtable.head(); rt; rt = rtn) {                rtn = rt->rt_link.le_next;                if(rt->rt_expire <= now) {                        Packet *p;                        while((p = rqueue.deque(rt->rt_dst))) {#ifdef DEBUG                                fprintf(stderr, "%s: calling drop()\n",                                        __FUNCTION__);#endif                                drop(p, DROP_RTR_QTIMEOUT);                        }                        LIST_REMOVE(rt, rt_link);                        delete rt;                }        }}/* =====================================================================   Packet Reception Routines   ===================================================================== */voidAODV::recv(Packet *p, Handler*){        struct hdr_cmn *ch = HDR_CMN(p);        struct hdr_ip *ih = HDR_IP(p);        assert(initialized());        assert(p->incoming == 0);        if(ch->ptype() == PT_AODV) {                ih->ttl_ -= 1;                recvAODV(p);                return;        }        /*         *  Must be a packet I'm originating...         */        if(ih->src_ == index && ch->num_forwards() == 0) {                /*                 * Add the IP Header                 */                ch->size() += IP_HDR_LEN;                ih->ttl_ = IP_DEF_TTL;        }        /*         *  I received a packet that I sent.  Probably         *  a routing loop.         */        else if(ih->src_ == index) {                drop(p, DROP_RTR_ROUTE_LOOP);                return;        }        /*         *  Packet I'm forwarding...         */        else {                /*                 *  Check the TTL.  If it is zero, then discard.                 */                if(--ih->ttl_ == 0) {                        drop(p, DROP_RTR_TTL);                        return;                }        }        rt_resolve(p);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91香蕉视频黄| 久久99久久精品| 一本一道波多野结衣一区二区| 中文字幕欧美日韩一区| 99国产精品久久久久久久久久| 中文字幕字幕中文在线中不卡视频| 91丨九色丨黑人外教| 一区二区三区日韩欧美精品| 欧美日韩免费视频| 喷水一区二区三区| 久久久久9999亚洲精品| 丁香另类激情小说| 一区二区不卡在线播放 | 97久久久精品综合88久久| 综合精品久久久| 欧美日本精品一区二区三区| 日韩精品成人一区二区三区| 欧美绝品在线观看成人午夜影视| 亚洲综合图片区| 欧美精品高清视频| 久久精品国产99国产| 久久综合色之久久综合| 国产成人在线视频网站| 国产精品美女一区二区在线观看| 国产河南妇女毛片精品久久久| 精品国产91九色蝌蚪| 琪琪久久久久日韩精品| 日韩欧美一级二级三级| zzijzzij亚洲日本少妇熟睡| 亚洲制服丝袜av| 欧美高清激情brazzers| 九九国产精品视频| 国产精品久久久久久久第一福利| 国产精品久久久久久久午夜片| www.性欧美| 午夜精品一区二区三区免费视频| 欧美日韩视频在线观看一区二区三区| 日韩中文字幕区一区有砖一区| 日韩欧美高清一区| 99久久精品国产观看| 亚洲h在线观看| 久久综合久久久久88| 91色综合久久久久婷婷| 日韩电影在线观看一区| 国产欧美视频一区二区三区| 在线免费不卡电影| 国产精华液一区二区三区| 亚洲精品视频在线看| 91精品国产综合久久精品性色| 国产丶欧美丶日本不卡视频| 一级日本不卡的影视| 欧美mv日韩mv亚洲| 99国产精品久久久久久久久久| 日韩精品乱码免费| 亚洲三级免费电影| 久久日韩精品一区二区五区| 欧美亚一区二区| 粉嫩13p一区二区三区| 五月激情丁香一区二区三区| 欧美国产一区在线| 日韩欧美二区三区| 99国产一区二区三精品乱码| 国产精品原创巨作av| 亚洲第一二三四区| 亚洲色图都市小说| 久久久久久久久久久久久夜| 欧美日韩视频在线观看一区二区三区 | 91精品国模一区二区三区| www.亚洲免费av| 精一区二区三区| 亚洲1区2区3区4区| 亚洲欧美另类小说| 久久久亚洲精品石原莉奈| 欧美另类高清zo欧美| 91啪九色porn原创视频在线观看| 国产精品一区专区| 久久精工是国产品牌吗| 视频一区二区中文字幕| 亚洲欧美日韩国产手机在线| 久久精品一区蜜桃臀影院| 制服丝袜中文字幕亚洲| 欧美性受xxxx黑人xyx性爽| 国产成人av一区二区三区在线| 免费观看一级特黄欧美大片| 亚洲午夜视频在线| 亚洲一二三四区| 亚洲永久免费av| 懂色av一区二区三区蜜臀| 免费看欧美女人艹b| 日本不卡一区二区三区| 午夜不卡在线视频| 亚洲成人7777| 日韩国产在线一| 欧美bbbbb| 美国十次了思思久久精品导航| 亚洲h精品动漫在线观看| 亚洲一区成人在线| 亚洲最新在线观看| 亚洲成av人在线观看| 午夜精品一区二区三区免费视频| 亚洲一区二区在线观看视频 | 99久久久国产精品| 99久精品国产| 色综合久久久久久久久久久| 99视频精品在线| 色狠狠色狠狠综合| 在线观看日韩电影| 91精品国产综合久久国产大片| 欧美日韩国产高清一区二区 | 欧美午夜精品久久久久久孕妇 | 欧美日韩精品欧美日韩精品| 欧美日韩久久久久久| 91精品国产综合久久香蕉麻豆 | 不卡的电视剧免费网站有什么| 风流少妇一区二区| 91成人在线观看喷潮| 欧美电影在线免费观看| 精品国产成人在线影院 | 精品国产精品网麻豆系列| 久久久亚洲精品一区二区三区 | 在线观看av一区| 3atv一区二区三区| 久久久亚洲高清| 亚洲精品日韩一| 日本在线不卡一区| 成人免费观看视频| 欧美网站大全在线观看| 色系网站成人免费| 日韩欧美久久久| 中文字幕一区二区三区精华液| 洋洋av久久久久久久一区| 久久99国产精品尤物| 成人午夜在线免费| 69堂亚洲精品首页| 欧美高清在线精品一区| 亚洲福利一区二区| 成人污视频在线观看| 欧美日韩国产中文| 欧美激情中文不卡| 日韩精品福利网| av电影在线观看一区| 337p亚洲精品色噜噜| 日韩一区有码在线| 久久不见久久见免费视频1| 国产91在线观看丝袜| 欧美三级乱人伦电影| 久久女同性恋中文字幕| 亚洲午夜激情av| 不卡一卡二卡三乱码免费网站| 欧美日韩在线播放| 国产精品麻豆99久久久久久| 日韩av不卡在线观看| 99国产欧美久久久精品| 欧美精品一区二区三区一线天视频 | 9l国产精品久久久久麻豆| 日韩免费观看2025年上映的电影| 亚洲视频综合在线| 国产精品88av| 欧美一级生活片| 一区二区三区国产| 国产电影一区二区三区| 香蕉av福利精品导航| av日韩在线网站| 国产欧美一区二区在线| 美日韩一区二区三区| 欧美日韩国产片| 亚洲成人在线网站| 91浏览器在线视频| 国产精品视频在线看| 久草精品在线观看| 精品噜噜噜噜久久久久久久久试看| 亚洲国产日日夜夜| 日本电影欧美片| 一区二区三区精品视频在线| 99在线精品视频| 日韩码欧中文字| 成人aa视频在线观看| 国产无人区一区二区三区| 久久精品国产99久久6| 91精品蜜臀在线一区尤物| 婷婷丁香久久五月婷婷| 欧美日韩五月天| 一卡二卡三卡日韩欧美| 色94色欧美sute亚洲线路一久| 精品粉嫩超白一线天av| 日韩精品一级中文字幕精品视频免费观看| 国产麻豆视频一区二区| 欧美一区二区三区系列电影| 久久国产麻豆精品| 精品99一区二区三区| 国产乱码精品1区2区3区| 久久美女艺术照精彩视频福利播放| 国产一区视频导航| 久久久天堂av| 丁香网亚洲国际| 国产精品电影一区二区三区| 成人av电影免费在线播放| 国产精品久久久久国产精品日日| 91色九色蝌蚪| 午夜精品久久一牛影视|