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

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

?? aodv_mcast.cc

?? MAODV代碼和安裝程序 hen nan找啊
?? CC
?? 第 1 頁 / 共 5 頁
字號:
#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) )/****************************************************************/// Timer to keep fresh packet ids/****************************************************************/void PacketTimer::handle(Event *e){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    agent->pid_purge();    Scheduler::instance().schedule(this, &intr, BCAST_ID_SAVE);}void AODV::pid_insert(nsaddr_t addr, u_int32_t pid){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    PacketID *b = new PacketID(addr, pid);    assert(b);    b->expire = CURRENT_TIME + BCAST_ID_SAVE;    LIST_INSERT_HEAD(&pihead, b, plink);}bool AODV::pid_lookup(nsaddr_t addr, u_int32_t pid){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    PacketID *b = pihead.lh_first;    for( ; b; b = b->plink.le_next) {        if ((b->src == addr) && (b->id == pid))            return true;    }    return false;}void AODV::pid_purge(){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    PacketID *b = pihead.lh_first;    PacketID *bn;    double now = CURRENT_TIME;    for(; b; b = bn) {        bn = b->plink.le_next;        if(b->expire <= now) {            LIST_REMOVE(b,plink);            delete b;        }    }}/**************************************************************/// periodically checking if there is any branch should be pruned/**************************************************************/void PruneTimer::handle(Event* e){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    Packet *p = (Packet *)e;    struct hdr_ip *ih = HDR_IP(p);    agent->mt_prune(ih->daddr());    Packet::free(p);}void AODV::mt_prune(nsaddr_t dst){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    aodv_mt_entry *mt = mtable.mt_lookup(dst);    if (mt && mt->mt_node_status == ON_TREE && mt->mt_nexthops.downstream() == NULL){        if (mt->mt_keep_on_tree_timeout > CURRENT_TIME) setPruneTimer(mt);        else {                aodv_nh_entry *nh = mt->mt_nexthops.upstream();            if (nh){                sendMACT(mt->mt_dst, MACT_P, 0, nh->next_hop);                mt->mt_nexthops.remove(nh);            }            downMT(mt);        }    }}/**************************************************************/// periodically broadcasting group hello throughout the network/*************************************************************/void GroupHelloTimer::handle(Event* e){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    agent->sendMGRPH();    Scheduler::instance().schedule(this, &intr,        0.9*GROUP_HELLO_INTERVAL + 0.2*GROUP_HELLO_INTERVAL*Random::uniform());}void AODV::sendMGRPH(){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    aodv_mt_entry *mt;    for( mt = mtable.head(); mt; mt = mt->mt_link.le_next){        if (mt->mt_grp_leader_addr == index &&  mt->mt_grp_merge_timeout <= CURRENT_TIME){             if (mt->mt_hops_grp_leader != 0){                printf("******ERROR: %.9f in %s, node %i is group leader for group %d, BUT HOP COUNT IS NOT 0!\n",                    CURRENT_TIME, __FUNCTION__, index, mt->mt_dst);                exit(1);            }            if (mt->mt_nexthops.upstream() != NULL){                printf("******ERROR: %.9f in %s,  node %i is group leader for group %d, BUT IT HAS UPSTEAM!\n",                    CURRENT_TIME, __FUNCTION__, index, mt->mt_dst);                exit(1);            }            Packet *p = Packet::alloc();            struct hdr_cmn *ch = HDR_CMN(p);            struct hdr_ip *ih = HDR_IP(p);            struct hdr_aodv_grph *gh = HDR_AODV_GRPH(p);            gh->gh_type = AODVTYPE_GRPH;            gh->gh_flags = GRPH_NO_FLAG;            gh->gh_hop_count = 0;            gh->gh_grp_leader_addr = index;            gh->gh_multi_grp_addr = mt->mt_dst;            mt->mt_seqno ++;            gh->gh_grp_seqno = mt->mt_seqno;            ch->ptype() = PT_AODV;            ch->size() = IP_HDR_LEN + gh->size();            ch->iface() = -2;            ch->error() = 0;            ch->addr_type() = NS_AF_NONE;            ch->prev_hop_ = index;            ch->next_hop_ = MAC_BROADCAST;            ch->direction() = hdr_cmn::DOWN;		            ih->saddr() = index;            ih->daddr() = IP_BROADCAST;            ih->sport() = RT_PORT;            ih->dport() = RT_PORT;            ih->ttl_ = NETWORK_DIAMETER;                        id_insert(gh->gh_multi_grp_addr + gh->gh_grp_leader_addr, gh->gh_grp_seqno);            controlNextHello();            Scheduler::instance().schedule(target_, p, 0.01 * Random::uniform());        }    }}/******************************************************************/// receive GROUP HELLO and rebroadcast// in order to find partitioned tree/*****************************************************************/void AODV::recvMGRPH(Packet *p){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    struct hdr_aodv_grph *gh = HDR_AODV_GRPH(p);    struct hdr_ip *ih = HDR_IP(p);    struct hdr_cmn *ch = HDR_CMN(p);    // exclude GRPH_U    if (gh->gh_flags == GRPH_U){recvMGRPH_U(p); return;}    // hop count +1    gh->gh_hop_count ++;    // 1. not-on-tree node forward the msg    // 2. tree member:    //  2.1 if not knowing grp leader, discard the msg    //  2.2 if with same grp leader, must receive the msg from its upstream, then forward it;     //      otherwise, discard it    //  2.2 if with different grp leader:    //    a) if with bigger grp leader, discard the msg    //    b) if with smaller grp leader, initiate Reqeust, discard the msg    //       RREQ_R to its own grp leader if it has valid upstream    //       RREQ_JR if it is the grp leader and has not permitted other node to request merge    aodv_mt_entry *mt = mtable.mt_lookup(gh->gh_multi_grp_addr);    if (mt == NULL || mt->mt_node_status == NOT_ON_TREE ||        mt->mt_grp_leader_addr == INFINITY8 ||        mt->mt_grp_leader_addr != gh->gh_grp_leader_addr){                // only handle the first received msg        if (id_lookup(gh->gh_multi_grp_addr + gh->gh_grp_leader_addr, gh->gh_grp_seqno))            { Packet::free(p);  return;}        id_insert(gh->gh_multi_grp_addr + gh->gh_grp_leader_addr, gh->gh_grp_seqno);        // update grp leader table entry        aodv_glt_entry *glt = gltable.glt_lookup(gh->gh_multi_grp_addr);        if (glt == NULL) glt = gltable.glt_add(gh->gh_multi_grp_addr);        if ((glt->glt_expire <= CURRENT_TIME)            || (glt->glt_grp_leader_addr < gh->gh_grp_leader_addr)        ){            glt->glt_grp_leader_addr = gh->gh_grp_leader_addr;            glt->glt_next_hop = ch->prev_hop_;            glt->glt_expire = CURRENT_TIME + GROUP_HELLO_INTERVAL;        }                if (mt == NULL || mt->mt_node_status == NOT_ON_TREE){            gh->gh_flags == GRPH_M;            mt_forward(p, DELAY);        }        else if (mt->mt_grp_leader_addr == INFINITY8) Packet::free(p);        else {            if (mt->mt_grp_leader_addr < gh->gh_grp_leader_addr &&                glt->glt_grp_leader_addr == gh->gh_grp_leader_addr){                if (mt->mt_grp_leader_addr == index){                    if (mt->mt_grp_merge_timeout < CURRENT_TIME){                        mt->mt_grp_merge_permission = index;                        mt->mt_grp_merge_timeout = CURRENT_TIME + GROUP_HELLO_INTERVAL;                        sendMRQ(mt, RREQ_JR);                    }                }                else if (mt->mt_nexthops.upstream()){                    sendMRQ(mt, RREQ_R);                }            }            Packet::free(p);        }    }                else { // tree member and mt->mt_grp_leader_addr == gh->gh_grp_leader_addr        aodv_nh_entry *nh = mt->mt_nexthops.upstream();        nsaddr_t up_node;        if (gh->gh_flags == GRPH_NO_FLAG &&             nh && nh->next_hop == ch->prev_hop_ &&            mt->mt_seqno <= gh->gh_grp_seqno){            // only handle the first received msg            if (id_lookup(gh->gh_multi_grp_addr + gh->gh_grp_leader_addr, gh->gh_grp_seqno))                { Packet::free(p);  return;}            id_insert(gh->gh_multi_grp_addr + gh->gh_grp_leader_addr, gh->gh_grp_seqno);            // update grp leader table entry            aodv_glt_entry *glt = gltable.glt_lookup(gh->gh_multi_grp_addr);            if (glt == NULL) glt = gltable.glt_add(gh->gh_multi_grp_addr);            if ((glt->glt_expire <= CURRENT_TIME)                  || (glt->glt_grp_leader_addr < gh->gh_grp_leader_addr)            ){                glt->glt_grp_leader_addr = gh->gh_grp_leader_addr;                glt->glt_next_hop = ch->prev_hop_;                glt->glt_expire = CURRENT_TIME + GROUP_HELLO_INTERVAL;            }                        mt->mt_seqno = gh->gh_grp_seqno;            mt->mt_hops_grp_leader = gh->gh_hop_count;            mt_forward(p, DELAY);        }        else Packet::free(p);    }}/******************************************************************/// when there is a change about group leader info,// the corresponding node must send out GRPH_U to its downstream nodes/*****************************************************************/void AODV::sendMGRPH_U(aodv_mt_entry *mt, nsaddr_t next_hop){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    // before entering, make sure the node has valid upstream node or it is the grp leader        Packet *p = Packet::alloc();    struct hdr_cmn *ch = HDR_CMN(p);    struct hdr_ip *ih = HDR_IP(p);    struct hdr_aodv_grph *gh = HDR_AODV_GRPH(p);    gh->gh_type = AODVTYPE_GRPH;    gh->gh_flags = GRPH_U;    gh->gh_hop_count = mt->mt_hops_grp_leader;    gh->gh_grp_leader_addr = mt->mt_grp_leader_addr;    gh->gh_multi_grp_addr = mt->mt_dst;    gh->gh_grp_seqno = mt->mt_seqno;    ch->ptype() = PT_AODV;    ch->size() = IP_HDR_LEN + gh->size();    ch->iface() = -2;    ch->error() = 0;    ch->addr_type() = NS_AF_NONE;    ch->prev_hop_ = index;    ch->next_hop_ = MAC_BROADCAST;    ch->direction() = hdr_cmn::DOWN;		    ih->saddr() = index;    ih->daddr() = mt->mt_dst;    ih->sport() = RT_PORT;    ih->dport() = RT_PORT;    ih->ttl_ = NETWORK_DIAMETER;    if (next_hop == INFINITY8){        u_int8_t size = mt->mt_nexthops.size();        if ((mt->mt_grp_leader_addr == index && size == 1)||            (mt->mt_grp_leader_addr != index && size == 2)){            aodv_nh_entry *nh = mt->mt_nexthops.downstream();            ch->next_hop_ = nh->next_hop;            ch->addr_type() = NS_AF_INET;        }        else controlNextHello();    }    else {         ch->next_hop_ = next_hop;         ch->addr_type() = NS_AF_INET;    }              Scheduler::instance().schedule(target_, p, 0.01 * Random::uniform());}/******************************************************************/// receive GRPH_U and rebroadcast// only propagate from upstream to downstream/*****************************************************************/void AODV::recvMGRPH_U(Packet *p){#ifdef DEBUG    fprintf(stdout,"%s, node %i at %.9f\n", __FUNCTION__, index, CURRENT_TIME);#endif    struct hdr_aodv_grph *gh = HDR_AODV_GRPH(p);    struct hdr_ip *ih = HDR_IP(p);    struct hdr_cmn *ch = HDR_CMN(p);    // hop count +1    gh->gh_hop_count ++;    // must be on tree node and receive msg from its upstream    aodv_mt_entry *mt = mtable.mt_lookup(gh->gh_multi_grp_addr);    if (mt == NULL || mt->mt_node_status == NOT_ON_TREE)        { Packet::free(p); return; }    aodv_nh_entry *nh = mt->mt_nexthops.lookup(ch->prev_hop_);    if (nh == NULL || nh->enabled_flag != NH_ENABLE || nh->link_direction != NH_UPSTREAM){        if (nh && nh->enabled_flag != NH_ENABLE) mt->mt_nexthops.remove(nh);        Packet::free(p);        return;    }    // if the recorded mt is good, no need to forward further    if (mt->mt_grp_leader_addr == gh->gh_grp_leader_addr &&        (mt->mt_seqno > gh->gh_grp_seqno ||         (mt->mt_seqno == gh->gh_grp_seqno &&          mt->mt_hops_grp_leader == gh->gh_hop_count))){        Packet::free(p);        return;    }    // severe error    if (index == gh->gh_grp_leader_addr){        printf("ERROR: %.9f in %s, grp leader %d receives msg from its own upstream %d\n",                CURRENT_TIME, __FUNCTION__, index, ch->prev_hop_);        Packet::free(p);        exit(1);    }    // severe warning

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区欧美| 狠狠色丁香久久婷婷综合丁香| 日韩影院精彩在线| 国产东北露脸精品视频| 欧美一区二区网站| 亚洲一区二区视频在线观看| 国产精品888| 欧美电视剧免费观看| 亚洲综合在线电影| 成人永久免费视频| 精品99一区二区| 免费人成在线不卡| 777亚洲妇女| 亚洲成人免费视频| 欧美午夜电影一区| 亚洲免费观看在线视频| jizzjizzjizz欧美| 久久精品水蜜桃av综合天堂| 毛片一区二区三区| 日韩写真欧美这视频| 亚洲综合999| 欧美中文字幕一区| 亚洲美女区一区| 91免费观看视频在线| 国产精品国产三级国产专播品爱网| 国产在线日韩欧美| 久久综合狠狠综合久久综合88| 日韩电影在线免费看| 91精品久久久久久久99蜜桃 | 欧美中文字幕久久| 亚洲色图欧美偷拍| 一本色道久久加勒比精品 | 91香蕉国产在线观看软件| 国产欧美一区在线| jlzzjlzz亚洲日本少妇| 中文字幕中文字幕在线一区| 99久久免费国产| 一区二区免费在线播放| 欧美色中文字幕| 强制捆绑调教一区二区| 日韩一卡二卡三卡四卡| 久久99精品久久只有精品| 久久久无码精品亚洲日韩按摩| 国产一区二区毛片| 中文字幕一区视频| 精品婷婷伊人一区三区三| 图片区小说区国产精品视频| 精品久久国产字幕高潮| 高清不卡一区二区在线| 一区二区在线免费| 91精品国产色综合久久久蜜香臀| 开心九九激情九九欧美日韩精美视频电影 | 日韩免费在线观看| 国产一区二区三区香蕉| 国产精品白丝在线| 欧美高清dvd| 国产一区三区三区| 亚洲免费观看高清完整版在线观看| 在线观看亚洲专区| 狠狠狠色丁香婷婷综合久久五月| 国产精品不卡在线观看| 欧美午夜不卡视频| 国产精品一区二区无线| 亚洲乱码国产乱码精品精98午夜| 欧美日韩成人综合在线一区二区| 国产综合久久久久久鬼色| 亚洲人成7777| 日韩欧美亚洲一区二区| 色综合久久中文综合久久牛| 麻豆精品一区二区| 最新国产成人在线观看| 欧美大黄免费观看| 色94色欧美sute亚洲线路二 | 日韩av一二三| 国产精品传媒在线| 日韩欧美中文字幕公布| proumb性欧美在线观看| 麻豆精品在线视频| 亚洲国产一区在线观看| 国产欧美一区二区三区网站| 欧美日韩极品在线观看一区| 不卡视频一二三| 国产在线一区观看| 天天爽夜夜爽夜夜爽精品视频| 欧美国产丝袜视频| 日韩精品一区二区三区在线观看| 欧美亚洲日本一区| 99久久久国产精品免费蜜臀| 国产毛片精品视频| 久久精品理论片| 日韩主播视频在线| 亚洲制服欧美中文字幕中文字幕| 久久精品一区二区三区不卡| 日韩精品一区二区在线观看| 欧美精品777| 欧美亚洲尤物久久| 色综合久久精品| 成人综合婷婷国产精品久久蜜臀| 美女网站视频久久| 午夜影院久久久| 亚洲在线成人精品| 亚洲欧美一区二区三区国产精品| 亚洲国产精品传媒在线观看| 久久久久久久综合日本| 亚洲精品在线电影| 日韩欧美一区二区不卡| 91精品国产一区二区三区香蕉| 欧美色老头old∨ideo| 91福利视频久久久久| 色噜噜狠狠成人中文综合| 色美美综合视频| 欧美视频日韩视频| 欧美日韩高清不卡| 欧美一级xxx| 日韩三级视频中文字幕| 日韩欧美美女一区二区三区| 日韩一区二区三区三四区视频在线观看| 欧美日韩国产大片| 欧美一区二区三区在线电影 | 国内精品久久久久影院色| 久久成人av少妇免费| 久久国产精品72免费观看| 久久99精品视频| 懂色av一区二区三区免费观看| 成人美女在线观看| 91国内精品野花午夜精品| 欧美性受xxxx黑人xyx| 欧美日韩国产中文| 精品三级av在线| 欧美激情一区二区在线| 亚洲美女在线一区| 天天操天天综合网| 国产一区视频网站| 91视频免费播放| 制服丝袜亚洲精品中文字幕| www一区二区| 亚洲精品高清在线| 日本视频在线一区| 粗大黑人巨茎大战欧美成人| 欧美亚男人的天堂| 精品久久久久久综合日本欧美| 中文av一区特黄| 视频一区中文字幕国产| 国产制服丝袜一区| 在线亚洲人成电影网站色www| 欧美一区二区在线看| 中文字幕不卡的av| 日本女人一区二区三区| 不卡一区中文字幕| 欧美一级夜夜爽| 中文字幕在线不卡| 蜜桃久久久久久久| 91激情在线视频| 中文字幕av一区二区三区免费看 | 中文字幕日本不卡| 日韩激情在线观看| 不卡视频免费播放| 久久综合久久综合久久综合| 亚洲免费av在线| 国产九色精品成人porny| 欧美婷婷六月丁香综合色| 久久精品视频一区二区| 亚洲成av人影院在线观看网| 国产精品一区久久久久| 91精品免费观看| 一区二区三区中文字幕精品精品| 久99久精品视频免费观看| 欧美中文字幕一区二区三区亚洲| 亚洲国产高清不卡| 激情综合亚洲精品| 91精品欧美一区二区三区综合在| 一区在线观看视频| 国产精品亚洲视频| 日韩欧美成人一区二区| 亚洲最大色网站| 一本大道久久a久久精二百| 国产亚洲综合在线| 久久er精品视频| 在线91免费看| 亚洲mv大片欧洲mv大片精品| 97精品国产97久久久久久久久久久久 | 亚洲视频在线观看一区| 国产在线国偷精品免费看| 日韩一级高清毛片| 视频在线在亚洲| 欧美日本在线看| 亚洲成人精品一区二区| 欧美性videosxxxxx| 亚洲久本草在线中文字幕| www.日韩精品| 国产精品九色蝌蚪自拍| 成人午夜视频在线观看| 国产欧美中文在线| 成人在线视频一区二区| 国产精品嫩草久久久久| 成人性色生活片| 亚洲欧洲日韩在线| 91丨porny丨户外露出| 亚洲欧美日韩国产手机在线 | 欧美大片在线观看一区|