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

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

?? phyint.c

?? BCAST Implementation for NS2
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 *   OSPFD routing daemon
 *   Copyright (C) 1999 by John T. Moy
 *   
 *   This program is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU General Public License
 *   as published by the Free Software Foundation; either version 2
 *   of the License, or (at your option) any later version.
 *   
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *   
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

/* Routines dealing with physical interfaces.
 * There may be one or more OSPF interfaces defined
 * over each physical interface; OSPF interfaces
 * are operated upon in spfifc.C.
 */

#include "ospfinc.h"
#include "phyint.h"
#include "ifcfsm.h"
#include "system.h"
#include "igmp.h"

/* Constructor for a physical interface.
 */

PhyInt::PhyInt(int phyint) 
  : AVLitem((uns32 ) phyint, 0), qrytim(this), strqtim(this), oqtim(this)

{
    operational = true;
    my_addr = 0;
    mospf_ifp = 0;
    igmp_querier = 0;
    igmp_enabled = false;
    // Initialize IGMP configurable constants to RFC 2236 defaults
    robustness_variable = 2;
    query_interval = 125;
    query_response_interval = 100;// Tenths of seconds
    group_membership_interval = robustness_variable * query_interval;
    // Next is more liberal than spec, to survive Querier changes
    group_membership_interval += (query_response_interval*3)/20;
    other_querier_present_interval = robustness_variable * query_interval;
    other_querier_present_interval += query_response_interval/20;
    startup_query_interval = query_interval/4;
    startup_query_count = robustness_variable;
    last_member_query_interval = 10;// Tenths of seconds
    last_member_query_count = robustness_variable;
}

/* OSPFD application attaches to a physical interface.
 */

void OSPF::phy_attach(int phyint)

{
    PhyInt *phyp;

    if (!(phyp = (PhyInt *)phyints.find((uns32) phyint, 0))) {
	phyp = new PhyInt((uns32) phyint);
	phyints.add(phyp);
	sys->phy_open(phyint);
    }
    
    phyp->ref();
    phyp->verify_igmp_capabilities();
}

/* OSPFD application leaves a group on a physical interface.
 */

void OSPF::phy_detach(int phyint, InAddr if_addr)

{
    PhyInt *phyp;

    if ((phyp = (PhyInt *)phyints.find((uns32) phyint, 0))) {
	phyp->deref();
	if (phyp->not_referenced()) {
	    sys->phy_close(phyint);
	    phyints.remove(phyp);
	    delete phyp;
	}
	else {
	    if (phyp->igmp_querier == if_addr)
	        phyp->igmp_querier = 0;
	    phyp->verify_igmp_capabilities();
	}
    }
}

/* OSPFD application joins a group on a physical interface.
 */

void OSPF::app_join(int phyint, InAddr group)

{
    AVLitem *member;

    if (!(member = ospfd_membership.find((uns32) phyint, group))) {
	member = new AVLitem((uns32) phyint, group);
	ospfd_membership.add(member);
	sys->join(group, phyint);
	if (spflog(LOG_JOIN, 4)) {
	    log(&group);
	    log(" Ifc ");
	    log(sys->phyname(phyint));
	}
    }
    
    member->ref();
}

/* OSPFD application leaves a group on a physical interface.
 */

void OSPF::app_leave(int phyint, InAddr group)

{
    AVLitem *member;

    if ((member = ospfd_membership.find((uns32) phyint, group))) {
	member->deref();
	if (member->not_referenced()) {
	    sys->leave(group, phyint);
	    ospfd_membership.remove(member);
	    member->chkref();
	    if (spflog(LOG_LEAVE, 4)) {
		log(&group);
		log(" Ifc ");
		log(sys->phyname(phyint));
	    }
	}
    }
}

/***************************************************************
 *   An implemention of Version 2 of the IGMP
 *   protocol.
 **************************************************************/

/* Go through all the OSPF interfaces associated with an interface
 * to determine whether we should run IGMP on the interface and,
 * if so, which address we should use in the Group Membership
 * Queries.
 * At least one of the interfaces must be numbered, with MOSPF
 * enabled, for us to send IGMP queries. As for what source address
 * to use, we always use the smallest interface address associated
 * with the interface (which might not be the interface running
 * MOSPF!).
 */

void PhyInt::verify_igmp_capabilities()

{
    bool was_querier;
    bool multicast_routing;
    int phyint = index1();
    bool igmp_was_enabled;

    multicast_routing = false;
    was_querier = IAmQuerier();
    my_addr = 0;
    mospf_ifp = 0;
    igmp_was_enabled = igmp_enabled;
    if (operational) {
	IfcIterator iter(ospf);
	SpfIfc *ip;
	InAddr igmp_addr;
	while ((ip = iter.get_next())) {
            if (ip->if_phyint != phyint)
	        continue;
	    // IGMP allowed?
	    if (!ip->igmp_enabled)
	        continue;
	    // mulicast routing enabled?
	    if (ospf->mospf_enabled() &&
		(ip->if_mcfwd == IF_MCFWD_MC))
		multicast_routing = true;
	    // Address to use for IGMP
	    igmp_addr = (ip->unnumbered() ? ospf->myaddr : ip->if_addr);
	    // Can do IGMP on the interface
	    if (my_addr == 0 || igmp_addr < my_addr)
	        my_addr = igmp_addr;
	    // Running MOSPF too?
	    if (ospf->mospf_enabled() &&
		(ip->if_mcfwd == IF_MCFWD_MC))
		mospf_ifp = ip;
	}
    }

    // Enable/disable multicast routing on interface
    sys->set_multicast_routing(phyint, multicast_routing);
    igmp_enabled = (my_addr && mospf_ifp);
    if (igmp_enabled != igmp_was_enabled) {
        if (igmp_enabled)
	    ospf->app_join(phyint, IGMPAllRouters);
	else
	    ospf->app_leave(phyint, IGMPAllRouters);
    }

    // Should we be querier?
    if (igmp_enabled) {
        if (!igmp_querier || my_addr < igmp_querier ||
	    (was_querier && (my_addr != igmp_querier))) {
	    igmp_querier = my_addr;
	    if (ospf->spflog(LOG_QUERIER, 4)) {
	        ospf->log(&igmp_querier);
	        ospf->log(" Ifc ");
	        ospf->log(sys->phyname(phyint));
	    }
	}
    }

    // Notice IGMP querier state changes
    if (IAmQuerier()) {
        if (!was_querier)
	    start_query_duties();
    }
    else if (was_querier)
	stop_query_duties();
}

/* Start the IGMP querier duties by sending out a sequence
 * of General Queries at a higher rate.
 */

void PhyInt::start_query_duties()

{
    oqtim.stop();
    send_query(0);
    if (startup_query_count > 1) {
        strqtim.startup_queries = startup_query_count - 1;
        strqtim.start(startup_query_interval*Timer::SECOND, false);
    }
}

/* Stop IGMP query duties by stopping any timers which
 * might generate General Queries.
 */

void PhyInt::stop_query_duties()

{
    strqtim.stop();
    qrytim.stop();
}

/* The Startup Query Timer.
 * "startup_queries" will be set right before the timer is started,
 * so that it will have the most recently configured value.
 */

StartupQueryTimer::StartupQueryTimer(PhyInt *p)

{
    phyp = p;
}

void StartupQueryTimer::action()

{
    phyp->send_query(0);
    if (--startup_queries <= 0) {
        stop();
	phyp->qrytim.start(phyp->query_interval*Timer::SECOND, false);
    }
}

/* The regular query timer. Goes off continuously, sending
 * out Host Membership Queries at a regular interval.
 */

IGMPQueryTimer::IGMPQueryTimer(PhyInt *p)

{
    phyp = p;
}

void IGMPQueryTimer::action()

{
    phyp->send_query(0);
}

/* The timer measuring whether we should replace the
 * current querier, when/if it disappears.
 */

IGMPOtherQuerierTimer::IGMPOtherQuerierTimer(PhyInt *p)

{
    phyp = p;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级欧美三级在线观看| 91在线视频免费91| 日韩一区二区免费在线电影| 亚洲成人免费av| 欧美一区二区三区在线电影| 蜜臀精品久久久久久蜜臀| 91精品福利在线一区二区三区 | 国产自产v一区二区三区c| 久久久久88色偷偷免费 | 99精品欧美一区二区三区小说| 亚洲欧美日韩综合aⅴ视频| 欧美午夜片在线看| 麻豆91在线播放| 欧美国产日本视频| 在线观看不卡一区| 久久av中文字幕片| 国产精品国产三级国产普通话99| 在线观看日韩一区| 九九视频精品免费| 亚洲欧美日韩一区二区 | 国产精品私人影院| 欧美性猛交xxxxxxxx| 日韩高清在线不卡| 亚洲欧美在线观看| 91精品久久久久久久91蜜桃| 国产成人精品免费看| 一级做a爱片久久| 国产午夜精品一区二区三区嫩草 | 这里只有精品免费| 国产精品18久久久久久vr| 亚洲乱码精品一二三四区日韩在线 | 日韩欧美亚洲国产另类| 暴力调教一区二区三区| 免费成人性网站| 亚洲视频图片小说| 精品久久人人做人人爰| 91福利在线免费观看| 国产东北露脸精品视频| 婷婷久久综合九色综合伊人色| 国产亚洲精品bt天堂精选| 精品污污网站免费看| 成人黄色一级视频| 韩国精品在线观看| 亚洲午夜电影在线| 中文字幕av一区二区三区| 制服丝袜亚洲色图| 色吧成人激情小说| 成人精品在线视频观看| 看电视剧不卡顿的网站| 午夜精品久久久久久久99水蜜桃 | 精品久久久久久久久久久院品网| 欧美午夜精品免费| 色综合色狠狠综合色| 成人一区二区三区在线观看| 久久国产精品色| 五月婷婷另类国产| 亚洲最快最全在线视频| 日韩一区日韩二区| 国产精品视频麻豆| 国产日产欧美一区二区视频| 日韩欧美国产一区在线观看| 欧美老肥妇做.爰bbww| 欧美中文一区二区三区| 色美美综合视频| 99re这里只有精品首页| 成人午夜电影网站| 国产精品亚洲成人| 国产精品一线二线三线精华| 精品一区二区三区香蕉蜜桃 | 亚洲成人av资源| 亚洲成人综合视频| 午夜精品成人在线| 婷婷成人激情在线网| 首页国产丝袜综合| 日产精品久久久久久久性色| 日本亚洲免费观看| 美女尤物国产一区| 精品一区二区三区视频| 国产精品资源在线观看| 国产成人亚洲精品狼色在线| 国产成人av电影在线播放| 北条麻妃国产九九精品视频| 成人avav影音| 91免费视频观看| 日本精品一级二级| 欧美日韩一二三区| 欧美第一区第二区| 欧美国产欧美综合| 亚洲九九爱视频| 亚洲无人区一区| 免费精品视频最新在线| 国内久久婷婷综合| 成人动漫一区二区在线| 7777精品伊人久久久大香线蕉超级流畅 | 国产一区二区中文字幕| 国产成人在线视频免费播放| youjizz国产精品| 在线视频亚洲一区| 日韩免费在线观看| 欧美国产禁国产网站cc| 亚洲激情男女视频| 麻豆一区二区三| 成人一道本在线| 欧洲精品在线观看| 久久亚洲影视婷婷| 亚洲精选免费视频| 久久成人免费日本黄色| 99久久精品国产毛片| 欧美日韩欧美一区二区| 久久综合色播五月| 亚洲精品欧美二区三区中文字幕| 天天av天天翘天天综合网| 久久成人免费电影| 91免费国产视频网站| 日韩一区二区三区精品视频| 国产精品成人一区二区艾草| 午夜影视日本亚洲欧洲精品| 国产成人精品在线看| 欧美人狂配大交3d怪物一区| 日本一区二区三级电影在线观看| 亚洲午夜电影在线观看| 国产成人免费视频网站| 91精品欧美综合在线观看最新| 中文字幕av免费专区久久| 日韩高清一区在线| 日本乱码高清不卡字幕| 2020国产精品自拍| 午夜精品久久久久久久99樱桃| 成人国产在线观看| 精品日产卡一卡二卡麻豆| 亚洲国产欧美日韩另类综合 | 狠狠久久亚洲欧美| 欧美性感一类影片在线播放| 欧美国产日韩亚洲一区| 精品亚洲免费视频| 欧美三级视频在线播放| 日韩美女久久久| 国产黑丝在线一区二区三区| 91精品国产综合久久久久久| 亚洲男人的天堂在线观看| 国产一区二区三区四区五区入口| 欧美老肥妇做.爰bbww视频| 亚洲欧美福利一区二区| 国产91精品免费| 久久一夜天堂av一区二区三区| 视频在线观看一区二区三区| 91成人网在线| 伊人性伊人情综合网| av高清久久久| 欧美国产精品中文字幕| 国产高清精品网站| 久久久久久久精| 久久国产精品一区二区| 欧美mv和日韩mv的网站| 另类人妖一区二区av| 欧美一级欧美三级在线观看| 午夜av电影一区| 5月丁香婷婷综合| 日韩1区2区3区| 日韩免费高清av| 蜜桃在线一区二区三区| 日韩一卡二卡三卡四卡| 麻豆精品蜜桃视频网站| 日韩一区二区三区电影| 久久精品国产亚洲高清剧情介绍| 日韩欧美亚洲另类制服综合在线| 青青草97国产精品免费观看 | 日韩女优av电影在线观看| 日本视频中文字幕一区二区三区| 51精品久久久久久久蜜臀| 日韩黄色小视频| 91精品国产乱码久久蜜臀| 免费看日韩精品| 久久精品亚洲乱码伦伦中文| 国产成人aaa| 亚洲色图19p| 欧美日韩一区三区| 六月婷婷色综合| 国产三级精品三级在线专区| jizz一区二区| 亚洲一区在线免费观看| 欧美三级日韩在线| 久久精品国产免费看久久精品| 26uuu精品一区二区| 成人精品鲁一区一区二区| 国产精品久久久久影院色老大| 色婷婷精品大视频在线蜜桃视频| 亚洲一区二区av在线| 欧美一区二区二区| 粉嫩高潮美女一区二区三区| 亚洲私人影院在线观看| 欧美乱妇23p| 成人综合激情网| 亚洲国产一区视频| 亚洲精品在线网站| 91美女视频网站| 青青草国产成人av片免费| 国产精品久久久久一区二区三区 | 欧美无砖专区一中文字| 久久精品国产77777蜜臀|