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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mld6igmp_node.cc

?? MLDv2 support igmpv3 lite
?? CC
?? 第 1 頁 / 共 3 頁
字號:
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-// Copyright (c) 2001-2008 XORP, Inc.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the "Software")// to deal in the Software without restriction, subject to the conditions// listed in the XORP LICENSE file. These conditions include: you must// preserve this copyright notice, and you cannot mention the copyright// holders in advertising related to the Software without their permission.// The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This// notice is a summary of the XORP LICENSE file; the license in that file is// legally binding.#ident "$XORP: xorp/contrib/mld6igmp_lite/mld6igmp_node.cc,v 1.2 2008/07/23 05:09:49 pavlin Exp $"//// Multicast Listener Discovery and Internet Group Management Protocol// node implementation (common part).// IGMPv1 and IGMPv2 (RFC 2236), IGMPv3 (RFC 3376),// MLDv1 (RFC 2710), and MLDv2 (RFC 3810).//#include "mld6igmp_module.h"#include "libxorp/xorp.h"#include "libxorp/xlog.h"#include "libxorp/debug.h"#include "libxorp/ipvx.hh"#include "mld6igmp_node.hh"#include "mld6igmp_vif.hh"//// Exported variables////// Local constants definitions////// Local structures/classes, typedefs and macros////// Local variables////// Local functions prototypes///** * Mld6igmpNode::Mld6igmpNode: * @family: The address family (%AF_INET or %AF_INET6 * for IPv4 and IPv6 respectively). * @module_id: The module ID (must be %XORP_MODULE_MLD6IGMP). * @eventloop: The event loop. *  * MLD6IGMP node constructor. **/Mld6igmpNode::Mld6igmpNode(int family, xorp_module_id module_id,			   EventLoop& eventloop)    : ProtoNode<Mld6igmpVif>(family, module_id, eventloop),      _is_log_trace(false){    XLOG_ASSERT(module_id == XORP_MODULE_MLD6IGMP);    if (module_id != XORP_MODULE_MLD6IGMP) {	XLOG_FATAL("Invalid module ID = %d (must be 'XORP_MODULE_MLD6IGMP' = %d)",		   module_id, XORP_MODULE_MLD6IGMP);    }        _buffer_recv = BUFFER_MALLOC(BUF_SIZE_DEFAULT);    //    // Set the node status    //    ProtoNode<Mld6igmpVif>::set_node_status(PROC_STARTUP);    //    // Set myself as an observer when the node status changes    //    set_observer(this);}/** * Mld6igmpNode::~Mld6igmpNode: * @:  *  * MLD6IGMP node destructor. *  **/Mld6igmpNode::~Mld6igmpNode(){    //    // Unset myself as an observer when the node status changes    //    unset_observer(this);    stop();    ProtoNode<Mld6igmpVif>::set_node_status(PROC_NULL);    delete_all_vifs();        BUFFER_FREE(_buffer_recv);}/** * Mld6igmpNode::start: * @:  *  * Start the MLD or IGMP protocol. * TODO: This function should not start the protocol operation on the * interfaces. The interfaces must be activated separately. * After the startup operations are completed, * Mld6igmpNode::final_start() is called to complete the job. *  * Return value: %XORP_OK on success, otherwize %XORP_ERROR. **/intMld6igmpNode::start(){    if (! is_enabled())	return (XORP_OK);    //    // Test the service status    //    if ((ServiceBase::status() == SERVICE_STARTING)	|| (ServiceBase::status() == SERVICE_RUNNING)) {	return (XORP_OK);    }    if (ServiceBase::status() != SERVICE_READY) {	return (XORP_ERROR);    }    if (ProtoNode<Mld6igmpVif>::pending_start() != XORP_OK)	return (XORP_ERROR);    //    // Register with the FEA and MFEA    //    fea_register_startup();    mfea_register_startup();    //    // Set the node status    //    ProtoNode<Mld6igmpVif>::set_node_status(PROC_STARTUP);    //    // Update the node status    //    update_status();    return (XORP_OK);}/** * Mld6igmpNode::final_start: * @:  *  * Complete the start-up of the MLD/IGMP protocol. *  * Return value: %XORP_OK on success, otherwise %XORP_ERROR. **/intMld6igmpNode::final_start(){#if 0	// TODO: XXX: PAVPAVPAV    if (! is_pending_up())	return (XORP_ERROR);#endif    if (ProtoNode<Mld6igmpVif>::start() != XORP_OK) {	ProtoNode<Mld6igmpVif>::stop();	return (XORP_ERROR);    }    // Start the mld6igmp_vifs    start_all_vifs();    XLOG_INFO("Protocol started");    return (XORP_OK);}/** * Mld6igmpNode::stop: * @:  *  * Gracefully stop the MLD or IGMP protocol. * XXX: After the cleanup is completed, * Mld6igmpNode::final_stop() is called to complete the job. * XXX: This function, unlike start(), will stop the protocol * operation on all interfaces. *  * Return value: %XORP_OK on success, otherwise %XORP_ERROR. **/intMld6igmpNode::stop(){    //    // Test the service status    //    if ((ServiceBase::status() == SERVICE_SHUTDOWN)	|| (ServiceBase::status() == SERVICE_SHUTTING_DOWN)	|| (ServiceBase::status() == SERVICE_FAILED)) {	return (XORP_OK);    }    if ((ServiceBase::status() != SERVICE_RUNNING)	&& (ServiceBase::status() != SERVICE_STARTING)	&& (ServiceBase::status() != SERVICE_PAUSING)	&& (ServiceBase::status() != SERVICE_PAUSED)	&& (ServiceBase::status() != SERVICE_RESUMING)) {	return (XORP_ERROR);    }    if (ProtoNode<Mld6igmpVif>::pending_stop() != XORP_OK)	return (XORP_ERROR);    //    // Perform misc. MLD6IGMP-specific stop operations    //    // XXX: nothing to do        // Stop the vifs    stop_all_vifs();        //    // Set the node status    //    ProtoNode<Mld6igmpVif>::set_node_status(PROC_SHUTDOWN);    //    // Update the node status    //    update_status();    return (XORP_OK);}/** * Mld6igmpNode::final_stop: * @:  *  * Completely stop the MLD/IGMP protocol. *  * Return value: %XORP_OK on success, otherwise %XORP_ERROR. **/intMld6igmpNode::final_stop(){    if (! (is_up() || is_pending_up() || is_pending_down()))	return (XORP_ERROR);    if (ProtoNode<Mld6igmpVif>::stop() != XORP_OK)	return (XORP_ERROR);    XLOG_INFO("Protocol stopped");    return (XORP_OK);}/** * Enable the node operation. *  * If an unit is not enabled, it cannot be start, or pending-start. */voidMld6igmpNode::enable(){    ProtoUnit::enable();    XLOG_INFO("Protocol enabled");}/** * Disable the node operation. *  * If an unit is disabled, it cannot be start or pending-start. * If the unit was runnning, it will be stop first. */voidMld6igmpNode::disable(){    stop();    ProtoUnit::disable();    XLOG_INFO("Protocol disabled");}/** * Get the IP protocol number. * * @return the IP protocol number. */uint8_tMld6igmpNode::ip_protocol_number() const{    if (proto_is_igmp())	return (IPPROTO_IGMP);    if (proto_is_mld6())	return (IPPROTO_ICMPV6);    XLOG_UNREACHABLE();    return (0);}voidMld6igmpNode::status_change(ServiceBase*  service,			    ServiceStatus old_status,			    ServiceStatus new_status){    if (service == this) {	if ((old_status == SERVICE_STARTING)	    && (new_status == SERVICE_RUNNING)) {	    // The startup process has completed	    if (final_start() != XORP_OK) {		XLOG_ERROR("Cannot complete the startup process; "			   "current state is %s",			   ProtoNode<Mld6igmpVif>::state_str().c_str());		return;	    }	    ProtoNode<Mld6igmpVif>::set_node_status(PROC_READY);	    return;	}	if ((old_status == SERVICE_SHUTTING_DOWN)	    && (new_status == SERVICE_SHUTDOWN)) {	    // The shutdown process has completed	    final_stop();	    // Set the node status	    ProtoNode<Mld6igmpVif>::set_node_status(PROC_DONE);	    return;	}	//	// TODO: check if there was an error	//	return;    }    if (service == ifmgr_mirror_service_base()) {	if ((old_status == SERVICE_SHUTTING_DOWN)	    && (new_status == SERVICE_SHUTDOWN)) {	    decr_shutdown_requests_n();			// XXX: for the ifmgr	}    }}voidMld6igmpNode::tree_complete(){    decr_startup_requests_n();				// XXX: for the ifmgr    //    // XXX: we use same actions when the tree is completed or updates are made    //    updates_made();}voidMld6igmpNode::updates_made(){    map<string, Vif>::iterator mld6igmp_vif_iter;    string error_msg;    //    // Update the local copy of the interface tree    //    _iftree = ifmgr_iftree();    //    // Add new vifs and update existing ones    //    IfMgrIfTree::IfMap::const_iterator ifmgr_iface_iter;    for (ifmgr_iface_iter = _iftree.interfaces().begin();	 ifmgr_iface_iter != _iftree.interfaces().end();	 ++ifmgr_iface_iter) {	const IfMgrIfAtom& ifmgr_iface = ifmgr_iface_iter->second;	IfMgrIfAtom::VifMap::const_iterator ifmgr_vif_iter;	for (ifmgr_vif_iter = ifmgr_iface.vifs().begin();	     ifmgr_vif_iter != ifmgr_iface.vifs().end();	     ++ifmgr_vif_iter) {	    const IfMgrVifAtom& ifmgr_vif = ifmgr_vif_iter->second;	    const string& ifmgr_vif_name = ifmgr_vif.name();	    Vif* node_vif = NULL;		    mld6igmp_vif_iter = configured_vifs().find(ifmgr_vif_name);	    if (mld6igmp_vif_iter != configured_vifs().end()) {		node_vif = &(mld6igmp_vif_iter->second);	    }	    //	    // Add a new vif	    //	    if (node_vif == NULL) {		uint32_t vif_index = ifmgr_vif.vif_index();		XLOG_ASSERT(vif_index != Vif::VIF_INDEX_INVALID);		if (add_config_vif(ifmgr_vif_name, vif_index, error_msg)		    != XORP_OK) {		    XLOG_ERROR("Cannot add vif %s to the set of configured "			       "vifs: %s",			       ifmgr_vif_name.c_str(), error_msg.c_str());		    continue;		}		mld6igmp_vif_iter = configured_vifs().find(ifmgr_vif_name);		XLOG_ASSERT(mld6igmp_vif_iter != configured_vifs().end());		node_vif = &(mld6igmp_vif_iter->second);		// FALLTHROUGH	    }	    //	    // Update the pif_index	    //	    set_config_pif_index(ifmgr_vif_name,				 ifmgr_vif.pif_index(),				 error_msg);		    //	    // Update the vif flags	    //	    bool is_up = ifmgr_iface.enabled();	    is_up &= (! ifmgr_iface.no_carrier());	    is_up &= ifmgr_vif.enabled();	    set_config_vif_flags(ifmgr_vif_name,				 ifmgr_vif.pim_register(),				 ifmgr_vif.p2p_capable(),				 ifmgr_vif.loopback(),				 ifmgr_vif.multicast_capable(),				 ifmgr_vif.broadcast_capable(),				 is_up,				 ifmgr_iface.mtu(),				 error_msg);		}    }    //    // Add new vif addresses, update existing ones, and remove old addresses    //    for (ifmgr_iface_iter = _iftree.interfaces().begin();	 ifmgr_iface_iter != _iftree.interfaces().end();	 ++ifmgr_iface_iter) {	const IfMgrIfAtom& ifmgr_iface = ifmgr_iface_iter->second;	const string& ifmgr_iface_name = ifmgr_iface.name();	IfMgrIfAtom::VifMap::const_iterator ifmgr_vif_iter;	for (ifmgr_vif_iter = ifmgr_iface.vifs().begin();	     ifmgr_vif_iter != ifmgr_iface.vifs().end();	     ++ifmgr_vif_iter) {	    const IfMgrVifAtom& ifmgr_vif = ifmgr_vif_iter->second;	    const string& ifmgr_vif_name = ifmgr_vif.name();	    Vif* node_vif = NULL;	    //	    // Add new vif addresses and update existing ones	    //	    mld6igmp_vif_iter = configured_vifs().find(ifmgr_vif_name);	    if (mld6igmp_vif_iter != configured_vifs().end()) {		node_vif = &(mld6igmp_vif_iter->second);	    }	    if (is_ipv4()) {		IfMgrVifAtom::IPv4Map::const_iterator a4_iter;		for (a4_iter = ifmgr_vif.ipv4addrs().begin();		     a4_iter != ifmgr_vif.ipv4addrs().end();		     ++a4_iter) {		    const IfMgrIPv4Atom& a4 = a4_iter->second;		    VifAddr* node_vif_addr = node_vif->find_address(IPvX(a4.addr()));		    IPvX addr(a4.addr());		    IPvXNet subnet_addr(addr, a4.prefix_len());		    IPvX broadcast_addr(IPvX::ZERO(family()));		    IPvX peer_addr(IPvX::ZERO(family()));		    if (a4.has_broadcast())			broadcast_addr = IPvX(a4.broadcast_addr());		    if (a4.has_endpoint())			peer_addr = IPvX(a4.endpoint_addr());		    if (node_vif_addr == NULL) {			if (add_config_vif_addr(				ifmgr_vif_name,				addr,				subnet_addr,				broadcast_addr,				peer_addr,				error_msg)			    != XORP_OK) {			    XLOG_ERROR("Cannot add address %s to vif %s from "				       "the set of configured vifs: %s",				       cstring(addr), ifmgr_vif_name.c_str(),				       error_msg.c_str());			}			continue;		    }		    if ((addr == node_vif_addr->addr())			&& (subnet_addr == node_vif_addr->subnet_addr())			&& (broadcast_addr == node_vif_addr->broadcast_addr())			&& (peer_addr == node_vif_addr->peer_addr())) {			continue;	// Nothing changed		    }		    // Update the address		    if (delete_config_vif_addr(ifmgr_vif_name,					       addr,					       error_msg)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲资源中文字幕| 欧美国产欧美亚州国产日韩mv天天看完整 | 久久久精品综合| 日本韩国一区二区三区视频| 久久国产尿小便嘘嘘| 亚洲精品五月天| 国产日韩欧美不卡| 欧美xxxxxxxx| 欧美体内she精视频| 99re亚洲国产精品| 九九在线精品视频| 日本女人一区二区三区| 又紧又大又爽精品一区二区| 中文子幕无线码一区tr| 亚洲永久免费视频| 午夜精品久久久久久久 | 国产婷婷精品av在线| 欧美日韩第一区日日骚| 91在线视频观看| 国产精品综合久久| 经典三级视频一区| 久久精品国产精品亚洲精品| 日韩激情一区二区| 亚洲aⅴ怡春院| 亚洲成人激情综合网| 一区二区三区欧美久久| 亚洲人成网站精品片在线观看| 欧美国产丝袜视频| 国产欧美一区二区精品性色| 久久这里只有精品首页| 精品欧美黑人一区二区三区| 91麻豆精品久久久久蜜臀| 欧美老肥妇做.爰bbww视频| 欧美曰成人黄网| 91黄色免费网站| 欧美午夜一区二区| 日本精品一区二区三区高清| 欧美精品 日韩| 亚洲美女视频在线观看| 欧美国产日韩精品免费观看| 国产亚洲女人久久久久毛片| 26uuu精品一区二区三区四区在线| 91精品免费在线| 91精品国产综合久久蜜臀| 欧美高清你懂得| 91精品国产综合久久福利软件| 91精品国产综合久久福利软件| 欧美一区二区三区在线观看视频 | 美国十次了思思久久精品导航| 五月天丁香久久| 日产国产高清一区二区三区| 免费在线观看精品| 国产一区二区剧情av在线| 国产成人午夜高潮毛片| 成人黄色av电影| 99re这里只有精品首页| 欧美亚洲禁片免费| 欧美一区二区三区人| 精品国产电影一区二区| 久久精品一区二区三区四区| 韩国理伦片一区二区三区在线播放| 国产精品久久久久婷婷二区次| 日本一区二区三区四区在线视频| 国产精品麻豆久久久| 一区二区成人在线视频| 午夜精品影院在线观看| 久久99最新地址| 成人app网站| 欧美日韩精品一区二区| 日韩精品一区国产麻豆| 国产午夜久久久久| 亚洲男女毛片无遮挡| 美腿丝袜亚洲色图| 丁香六月久久综合狠狠色| 日本韩国一区二区| 91精品国产福利| 欧美激情综合在线| 亚洲高清视频在线| 久久国产精品第一页| www.日本不卡| 欧美电影影音先锋| 国产清纯美女被跳蛋高潮一区二区久久w | 国产欧美精品一区二区三区四区| 日韩美女视频一区二区| 日本中文字幕一区| 国产盗摄女厕一区二区三区| 欧美怡红院视频| 国产欧美一区二区精品忘忧草| 亚洲国产另类精品专区| 国产精品12区| 欧美影院一区二区| 中文字幕成人在线观看| 日本欧美肥老太交大片| 一本大道久久a久久精品综合| 日韩精品在线看片z| 亚洲精选视频在线| 国产成人精品影视| 91麻豆精品国产自产在线观看一区| 中文字幕在线观看一区二区| 日本视频一区二区| 欧美探花视频资源| 亚洲婷婷在线视频| 精品一二三四在线| 欧美群妇大交群中文字幕| 国产精品美女视频| 国产精品一区二区免费不卡| 5858s免费视频成人| 亚洲裸体在线观看| 丰满岳乱妇一区二区三区| 日韩一区二区不卡| 亚洲一区二区三区国产| 91视频免费看| 日本一区二区三区dvd视频在线| 麻豆国产精品777777在线| 欧美日韩国产乱码电影| 亚洲一区二区在线视频| 一本色道亚洲精品aⅴ| 久久精品一区八戒影视| 久久机这里只有精品| 欧美一区三区二区| 日韩精品一二三四| 欧洲中文字幕精品| 一区二区三区国产精品| 色天天综合色天天久久| 成人免费毛片app| 国产日韩欧美一区二区三区乱码| 久久国产精品99久久久久久老狼 | 亚洲激情图片小说视频| 91在线播放网址| 一区在线中文字幕| 99视频在线观看一区三区| 国产精品色哟哟| www.亚洲在线| 亚洲精品欧美综合四区| 91视频免费播放| 亚洲欧美福利一区二区| 日本精品一区二区三区高清| 亚洲一区二区三区不卡国产欧美| 91久久线看在观草草青青| 亚洲精品成人悠悠色影视| 一本大道久久a久久精品综合| 亚洲美女区一区| 欧美午夜寂寞影院| 日本伊人色综合网| 日韩午夜在线观看视频| 国内外精品视频| 国产日韩欧美麻豆| 99久久夜色精品国产网站| 亚洲免费在线电影| 欧美精品免费视频| 麻豆91精品91久久久的内涵| 精品成人一区二区| 国产高清亚洲一区| 亚洲女爱视频在线| 欧美日韩国产一区| 捆绑调教一区二区三区| 久久精品在线观看| 色噜噜狠狠色综合中国| 石原莉奈在线亚洲二区| 精品精品国产高清a毛片牛牛| 国产一区二区三区日韩| 17c精品麻豆一区二区免费| 在线免费观看不卡av| 日日夜夜免费精品| 久久人人爽人人爽| 99久久免费精品| 亚洲成人免费看| 久久久久久久av麻豆果冻| 91女厕偷拍女厕偷拍高清| 日韩一区欧美二区| 中文字幕免费不卡| 欧美午夜理伦三级在线观看| 韩国欧美国产1区| 亚洲天堂2014| 日韩免费成人网| 99久久精品情趣| 日韩国产精品久久久久久亚洲| 国产日韩亚洲欧美综合| 欧美性大战xxxxx久久久| 国产真实精品久久二三区| 亚洲精品国产a久久久久久| 欧美成人综合网站| 色综合婷婷久久| 激情av综合网| 亚洲国产综合色| 99久久久久久99| 精品国产乱子伦一区| 99精品欧美一区二区蜜桃免费 | 国产蜜臀97一区二区三区| 欧美在线一二三| 国产精品538一区二区在线| 亚洲国产成人91porn| 国产精品丝袜黑色高跟| 91精品国产欧美一区二区成人 | 日韩av一级片| 亚洲三级视频在线观看| 久久婷婷一区二区三区| 欧美日韩免费一区二区三区视频 | 91精品欧美久久久久久动漫 | 欧美精品少妇一区二区三区|