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

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

?? aodv.cc

?? ns2.1b5版本中cbrp碼
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/*    aodv.cc   $Id: aodv.cc,v 1.29 1998/11/19 06:23:16 dmaltz 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(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) {                        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_, ch->xmit_reason_);        }#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->filter(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麻豆产精品久久久久久| 久久先锋资源网| 国产成人在线视频网址| 国产精品理伦片| 色综合天天综合色综合av| 亚洲最大成人网4388xx| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲色图第一区| 在线观看免费亚洲| 日韩国产欧美视频| 久久毛片高清国产| 91在线视频官网| 亚洲18色成人| 2021国产精品久久精品| 99精品黄色片免费大全| 亚洲国产成人tv| 欧美成人aa大片| 成人精品国产免费网站| 亚洲一区二区欧美| 欧美不卡一二三| 99麻豆久久久国产精品免费| 亚洲一区二区五区| 欧美www视频| av不卡免费在线观看| 亚洲成人免费在线| 欧美精品一区二区三区在线播放| 成人看片黄a免费看在线| 亚洲国产日韩精品| 精品国产91久久久久久久妲己 | 日韩高清不卡在线| 26uuu另类欧美| 99久久久久免费精品国产| 亚洲福利国产精品| 久久久国际精品| 欧美性色黄大片| 国产精品一品视频| 亚洲成人免费观看| 日本一区二区视频在线观看| 欧美三级中文字| 国产不卡视频在线观看| 亚洲成人av一区二区| 久久精品欧美一区二区三区不卡| 色女孩综合影院| 国产伦精品一区二区三区免费迷| 亚洲欧美国产三级| 精品日韩在线一区| 91久久精品一区二区二区| 国产综合色精品一区二区三区| 亚洲欧美日本韩国| 26uuu另类欧美亚洲曰本| 欧洲av一区二区嗯嗯嗯啊| 国内精品嫩模私拍在线| 亚洲高清不卡在线观看| 日本一区二区三区久久久久久久久不 | 日精品一区二区| 国产精品卡一卡二卡三| 美国欧美日韩国产在线播放| 国产精品看片你懂得| 欧美zozo另类异族| 在线观看日韩av先锋影音电影院| 国产高清一区日本| 日本三级亚洲精品| 一区二区三区在线高清| 欧美高清在线视频| 日韩精品一区二| 欧美日韩在线播放三区| 92国产精品观看| 国产成人综合网站| 免费一级片91| 亚洲妇熟xx妇色黄| 亚洲另类一区二区| 欧美高清在线一区| 精品国产露脸精彩对白| 91精品国产综合久久久久久漫画| 91久久一区二区| 成人午夜av电影| 狠狠色狠狠色综合| 青青青伊人色综合久久| 亚洲高清免费一级二级三级| 亚洲免费观看在线视频| 欧美激情在线观看视频免费| 精品国产一区二区亚洲人成毛片| 欧美日韩国产高清一区二区 | 成人精品视频一区二区三区| 欧美sm极限捆绑bd| 欧美浪妇xxxx高跟鞋交| 在线观看免费亚洲| 91精彩视频在线| 91视频国产观看| 99精品偷自拍| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 1区2区3区国产精品| 国产日韩欧美高清在线| 精品三级av在线| 欧美不卡一区二区三区| 日韩一区二区三区四区| 欧美一区在线视频| 欧美高清视频不卡网| 欧美日韩精品二区第二页| 欧美亚洲丝袜传媒另类| 欧美亚洲另类激情小说| 91久久精品一区二区二区| 在线欧美小视频| 欧美视频在线一区二区三区| 精品视频在线视频| 欧美日韩视频在线一区二区| 欧美午夜精品电影| 欧美日韩一区二区电影| 欧美美女直播网站| 欧美高清dvd| 欧美一区欧美二区| 日韩欧美视频在线| 欧美成人vr18sexvr| 美国av一区二区| 国内精品伊人久久久久av一坑| 国产一区欧美日韩| 国产69精品一区二区亚洲孕妇| 成人午夜激情影院| 99久久精品久久久久久清纯| 色噜噜久久综合| 欧美日韩精品欧美日韩精品一 | 久久久久久麻豆| 欧美经典一区二区三区| 国产精品久久久久久亚洲毛片| 亚洲欧美偷拍三级| 亚洲大片一区二区三区| 日本成人在线网站| 国产一区二区视频在线| 粉嫩在线一区二区三区视频| 92国产精品观看| 精品视频免费在线| 欧美一级黄色大片| 久久久精品国产免大香伊| 国产精品国产自产拍高清av| 亚洲一区二区不卡免费| 轻轻草成人在线| 国产成人精品综合在线观看| 97精品超碰一区二区三区| 欧美日韩综合在线免费观看| 欧美一区二区在线视频| 国产午夜精品一区二区三区四区| 国产精品电影院| 午夜久久久久久| 国产麻豆视频一区二区| 99re视频这里只有精品| 91.com视频| 国产人妖乱国产精品人妖| 亚洲另类在线视频| 免费国产亚洲视频| 国产黑丝在线一区二区三区| 91色.com| 日韩你懂的在线观看| 国产精品亲子伦对白| 欧美日韩视频在线第一区| 精品精品欲导航| 1区2区3区国产精品| 青青国产91久久久久久| 成人免费电影视频| 欧美久久久久久蜜桃| 国产人久久人人人人爽| 亚洲电影在线免费观看| 国产乱子伦一区二区三区国色天香| 99r国产精品| 日韩欧美高清在线| 亚洲女同一区二区| 日韩国产欧美在线播放| 99久久久国产精品免费蜜臀| 欧美一区二区二区| 亚洲欧美韩国综合色| 精品写真视频在线观看| 色狠狠色狠狠综合| 久久综合狠狠综合久久综合88| 亚洲综合一区二区三区| 国产精品1区2区| 欧美日韩精品一区二区三区| 日本一区二区在线不卡| 日韩精品免费视频人成| 99久久国产综合色|国产精品| 日韩一二三区不卡| 亚洲精品欧美激情| 国产成人在线视频网站| 欧美疯狂性受xxxxx喷水图片| 国产精品久久久久影视| 久久99国产精品免费网站| 色婷婷综合久色| 国产日韩三级在线| 日韩精品免费专区| 色久综合一二码| 中文字幕免费观看一区| 久色婷婷小香蕉久久| 91九色最新地址| 日本一区二区高清| 久久精品国产秦先生| 欧美性猛片aaaaaaa做受| 国产精品网站在线| 九色综合狠狠综合久久| 欧美日韩国产综合一区二区| 中文一区在线播放| 国产综合一区二区|