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

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

?? xrl_mld6igmp_node.cc

?? MLDv2 support igmpv3 lite
?? CC
?? 第 1 頁 / 共 5 頁
字號:
// -*- 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/xrl_mld6igmp_node.cc,v 1.2 2008/07/23 05:09:50 pavlin Exp $"#include "mld6igmp_module.h"#include "libxorp/xorp.h"#include "libxorp/xlog.h"#include "libxorp/debug.h"#include "libxorp/ipvx.hh"#include "libxorp/status_codes.h"#include "libxorp/utils.hh"#include "mld6igmp_node.hh"#include "mld6igmp_node_cli.hh"#include "mld6igmp_vif.hh"#include "xrl_mld6igmp_node.hh"const TimeVal XrlMld6igmpNode::RETRY_TIMEVAL = TimeVal(1, 0);//// XrlMld6igmpNode front-end interface//XrlMld6igmpNode::XrlMld6igmpNode(int		family,				 xorp_module_id	module_id, 				 EventLoop&	eventloop,				 const string&	class_name,				 const string&	finder_hostname,				 uint16_t	finder_port,				 const string&	finder_target,				 const string&	fea_target,				 const string&	mfea_target)    : Mld6igmpNode(family, module_id, eventloop),      XrlStdRouter(eventloop, class_name.c_str(), finder_hostname.c_str(),		   finder_port),      XrlMld6igmpTargetBase(&xrl_router()),      Mld6igmpNodeCli(*static_cast<Mld6igmpNode *>(this)),      _eventloop(eventloop),      _finder_target(finder_target),      _fea_target(fea_target),      _mfea_target(mfea_target),      _ifmgr(eventloop, mfea_target.c_str(), xrl_router().finder_address(),	     xrl_router().finder_port()),      _xrl_fea_client4(&xrl_router()),      _xrl_fea_client6(&xrl_router()),      _xrl_mld6igmp_client_client(&xrl_router()),      _xrl_cli_manager_client(&xrl_router()),      _xrl_finder_client(&xrl_router()),      _is_finder_alive(false),      _is_fea_alive(false),      _is_fea_registered(false),      _is_mfea_alive(false),      _is_mfea_registered(false){    _ifmgr.set_observer(dynamic_cast<Mld6igmpNode*>(this));    _ifmgr.attach_hint_observer(dynamic_cast<Mld6igmpNode*>(this));}XrlMld6igmpNode::~XrlMld6igmpNode(){    shutdown();    _ifmgr.detach_hint_observer(dynamic_cast<Mld6igmpNode*>(this));    _ifmgr.unset_observer(dynamic_cast<Mld6igmpNode*>(this));    delete_pointers_list(_xrl_tasks_queue);}intXrlMld6igmpNode::startup(){    if (start_mld6igmp() != XORP_OK)	return (XORP_ERROR);    return (XORP_OK);}intXrlMld6igmpNode::shutdown(){   int ret_value = XORP_OK;    if (stop_cli() != XORP_OK)	ret_value = XORP_ERROR;    if (stop_mld6igmp() != XORP_OK)	ret_value = XORP_ERROR;    return (ret_value);}intXrlMld6igmpNode::enable_cli(){    Mld6igmpNodeCli::enable();        return (XORP_OK);}intXrlMld6igmpNode::disable_cli(){    Mld6igmpNodeCli::disable();        return (XORP_OK);}intXrlMld6igmpNode::start_cli(){    if (Mld6igmpNodeCli::start() != XORP_OK)	return (XORP_ERROR);        return (XORP_OK);}intXrlMld6igmpNode::stop_cli(){    if (Mld6igmpNodeCli::stop() != XORP_OK)	return (XORP_ERROR);        return (XORP_OK);}intXrlMld6igmpNode::enable_mld6igmp(){    Mld6igmpNode::enable();        return (XORP_OK);}intXrlMld6igmpNode::disable_mld6igmp(){    Mld6igmpNode::disable();        return (XORP_OK);}intXrlMld6igmpNode::start_mld6igmp(){    if (Mld6igmpNode::start() != XORP_OK)	return (XORP_ERROR);        return (XORP_OK);}intXrlMld6igmpNode::stop_mld6igmp(){    if (Mld6igmpNode::stop() != XORP_OK)	return (XORP_ERROR);        return (XORP_OK);}//// Finder-related events///** * Called when Finder connection is established. * * Note that this method overwrites an XrlRouter virtual method. */voidXrlMld6igmpNode::finder_connect_event(){    _is_finder_alive = true;}/** * Called when Finder disconnect occurs. * * Note that this method overwrites an XrlRouter virtual method. */voidXrlMld6igmpNode::finder_disconnect_event(){    XLOG_ERROR("Finder disconnect event. Exiting immediately...");    _is_finder_alive = false;    stop_mld6igmp();}//// Task-related methods//voidXrlMld6igmpNode::add_task(XrlTaskBase* xrl_task){    _xrl_tasks_queue.push_back(xrl_task);    // If the queue was empty before, start sending the changes    if (_xrl_tasks_queue.size() == 1)	send_xrl_task();}voidXrlMld6igmpNode::send_xrl_task(){    if (_xrl_tasks_queue.empty())	return;    XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();    XLOG_ASSERT(xrl_task_base != NULL);    xrl_task_base->dispatch();}voidXrlMld6igmpNode::pop_xrl_task(){    XLOG_ASSERT(! _xrl_tasks_queue.empty());    XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();    XLOG_ASSERT(xrl_task_base != NULL);    delete xrl_task_base;    _xrl_tasks_queue.pop_front();}voidXrlMld6igmpNode::retry_xrl_task(){    if (_xrl_tasks_queue_timer.scheduled())	return;		// XXX: already scheduled    _xrl_tasks_queue_timer = _eventloop.new_oneoff_after(	RETRY_TIMEVAL,	callback(this, &XrlMld6igmpNode::send_xrl_task));}//// Register with the FEA//voidXrlMld6igmpNode::fea_register_startup(){    if (! _is_finder_alive)	return;		// The Finder is dead    if (_is_fea_registered)	return;		// Already registered    Mld6igmpNode::incr_startup_requests_n();	// XXX: for FEA registration    Mld6igmpNode::incr_startup_requests_n();	// XXX: for FEA birth    //    // Register interest in the FEA with the Finder    //    add_task(new RegisterUnregisterInterest(*this, _fea_target, true));}//// Register with the MFEA//voidXrlMld6igmpNode::mfea_register_startup(){    if (! _is_finder_alive)	return;		// The Finder is dead    if (_is_mfea_registered)	return;		// Already registered    Mld6igmpNode::incr_startup_requests_n();	// XXX: for MFEA registration    Mld6igmpNode::incr_startup_requests_n();	// XXX: for MFEA birth    Mld6igmpNode::incr_startup_requests_n();	// XXX: for the ifmgr    //    // Register interest in the FEA with the Finder    //    add_task(new RegisterUnregisterInterest(*this, _mfea_target, true));}//// De-register with the FEA//voidXrlMld6igmpNode::fea_register_shutdown(){    if (! _is_finder_alive)	return;		// The Finder is dead    if (! _is_fea_alive)	return;		// The FEA is not there anymore    if (! _is_fea_registered)	return;		// Not registered    Mld6igmpNode::incr_shutdown_requests_n();	// XXX: for FEA deregistration    //    // De-register interest in the FEA with the Finder    //    add_task(new RegisterUnregisterInterest(*this, _fea_target, false));}//// De-register with the MFEA//voidXrlMld6igmpNode::mfea_register_shutdown(){    if (! _is_finder_alive)	return;		// The Finder is dead    if (! _is_mfea_alive)	return;		// The MFEA is not there anymore    if (! _is_mfea_registered)	return;		// Not registered    Mld6igmpNode::incr_shutdown_requests_n();	// XXX: for MFEA deregistration    Mld6igmpNode::incr_shutdown_requests_n();	// XXX: for the ifmgr    //    // De-register interest in the MFEA with the Finder    //    add_task(new RegisterUnregisterInterest(*this, _mfea_target, false));    //    // XXX: when the shutdown is completed, Mld6igmpNode::status_change()    // will be called.    //    _ifmgr.shutdown();}voidXrlMld6igmpNode::send_register_unregister_interest(){    bool success = true;    if (! _is_finder_alive)	return;		// The Finder is dead    XLOG_ASSERT(! _xrl_tasks_queue.empty());    XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();    RegisterUnregisterInterest* entry;    entry = dynamic_cast<RegisterUnregisterInterest*>(xrl_task_base);    XLOG_ASSERT(entry != NULL);    if (entry->is_register()) {	// Register interest	success = _xrl_finder_client.send_register_class_event_interest(	    _finder_target.c_str(), xrl_router().instance_name(),	    entry->target_name(),	    callback(this, &XrlMld6igmpNode::finder_send_register_unregister_interest_cb));    } else {	// Unregister interest	success = _xrl_finder_client.send_deregister_class_event_interest(	    _finder_target.c_str(), xrl_router().instance_name(),	    entry->target_name(),	    callback(this, &XrlMld6igmpNode::finder_send_register_unregister_interest_cb));    }    if (! success) {	//	// If an error, then try again	//	XLOG_ERROR("Failed to %s register interest in %s with the Finder. "		   "Will try again.",		   entry->operation_name(),		   entry->target_name().c_str());	retry_xrl_task();	return;    }}voidXrlMld6igmpNode::finder_send_register_unregister_interest_cb(const XrlError& xrl_error){    XLOG_ASSERT(! _xrl_tasks_queue.empty());    XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();    RegisterUnregisterInterest* entry;    entry = dynamic_cast<RegisterUnregisterInterest*>(xrl_task_base);    XLOG_ASSERT(entry != NULL);    switch (xrl_error.error_code()) {    case OKAY:	//	// If success, then schedule the next task	//	if (entry->is_register()) {	    //	    // Register interest	    //	    if (entry->target_name() == _fea_target) {		//		// If success, then the FEA birth event will startup the FEA		// registration.		//		_is_fea_registered = true;		Mld6igmpNode::decr_startup_requests_n(); // XXX: for FEA registration	    }	    if (entry->target_name() == _mfea_target) {		//		// If success, then the MFEA birth event will startup the MFEA		// registration and the ifmgr.		//		_is_mfea_registered = true;		Mld6igmpNode::decr_startup_requests_n(); // XXX: for MFEA registration	    }	} else {	    //	    // Unregister interest	    //	    if (entry->target_name() == _fea_target) {		_is_fea_registered = false;		Mld6igmpNode::decr_shutdown_requests_n(); // XXX: for the FEA	    }	    if (entry->target_name() == _mfea_target) {		_is_mfea_registered = false;		Mld6igmpNode::decr_shutdown_requests_n(); // XXX: for the MFEA	    }	}	pop_xrl_task();	send_xrl_task();	break;    case COMMAND_FAILED:	//	// If a command failed because the other side rejected it, this is	// fatal.	//	XLOG_FATAL("Cannot %s interest in Finder events: %s",		   entry->operation_name(), xrl_error.str().c_str());	break;    case NO_FINDER:    case RESOLVE_FAILED:    case SEND_FAILED:	//	// A communication error that should have been caught elsewhere	// (e.g., by tracking the status of the Finder and the other targets).	// Probably we caught it here because of event reordering.	// In some cases we print an error. In other cases our job is done.	//	if (entry->is_register()) {	    XLOG_ERROR("XRL communication error: %s", xrl_error.str().c_str());	} else {	    if (entry->target_name() == _fea_target) {		_is_fea_registered = false;	    }	    if (entry->target_name() == _mfea_target) {		_is_mfea_registered = false;	    }	    pop_xrl_task();	    send_xrl_task();	}	break;    case BAD_ARGS:    case NO_SUCH_METHOD:    case INTERNAL_ERROR:	//	// An error that should happen only if there is something unusual:	// e.g., there is XRL mismatch, no enough internal resources, etc.	// We don't try to recover from such errors, hence this is fatal.	//	XLOG_FATAL("Fatal XRL error: %s", xrl_error.str().c_str());	break;    case REPLY_TIMED_OUT:    case SEND_FAILED_TRANSIENT:	//	// If a transient error, then try again	//	XLOG_ERROR("Failed to %s interest in Finder envents: %s. "		   "Will try again.",		   entry->operation_name(), xrl_error.str().c_str());	retry_xrl_task();	break;    }}intXrlMld6igmpNode::register_receiver(const string& if_name,				   const string& vif_name,				   uint8_t ip_protocol,				   bool enable_multicast_loopback){    Mld6igmpNode::incr_startup_requests_n();	// XXX: for FEA-receiver    add_task(new RegisterUnregisterReceiver(*this, if_name, vif_name,					    ip_protocol,					    enable_multicast_loopback,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人国产精品免费观看动漫| 精品国免费一区二区三区| 91精品国产高清一区二区三区蜜臀| 欧美成人一区二区三区片免费| 国产精品色婷婷久久58| 美国十次综合导航| 色哟哟在线观看一区二区三区| 精品国产免费一区二区三区四区| 亚洲综合色成人| www.综合网.com| 久久无码av三级| 日韩黄色在线观看| 在线观看日韩国产| 亚洲视频免费看| 成人高清视频在线观看| 精品国产精品网麻豆系列| 午夜视频一区二区三区| 色就色 综合激情| 亚洲欧美色一区| 成人开心网精品视频| 国产亚洲精品bt天堂精选| 精品一区二区综合| 日韩精品一区二区在线| 日韩二区在线观看| 91精品国产麻豆| 美女免费视频一区| 911精品产国品一二三产区| 夜夜精品视频一区二区| 色天天综合色天天久久| 亚洲色欲色欲www| 91女厕偷拍女厕偷拍高清| 亚洲日本在线观看| 色噜噜夜夜夜综合网| 一区二区高清免费观看影视大全 | 99精品视频中文字幕| 久久先锋影音av鲁色资源网| 精品一区中文字幕| 国产午夜久久久久| 高清国产一区二区三区| 中文字幕巨乱亚洲| 91网页版在线| 亚洲综合丁香婷婷六月香| 欧美无人高清视频在线观看| 亚洲午夜精品网| 日韩一区二区在线播放| 久久狠狠亚洲综合| 国产午夜精品福利| 91麻豆国产福利精品| 亚洲精品一卡二卡| 91精品国产综合久久久蜜臀图片| 奇米四色…亚洲| 久久久久久麻豆| jizzjizzjizz欧美| 亚洲韩国精品一区| 精品精品欲导航| 成人一区二区在线观看| 亚洲情趣在线观看| 欧美一区二区免费| 成人听书哪个软件好| 一区二区三区不卡在线观看| 欧美久久久久久蜜桃| 国产麻豆视频一区| 亚洲精品菠萝久久久久久久| 欧美乱熟臀69xxxxxx| 国产电影一区二区三区| 亚洲一级二级三级在线免费观看| 欧美一卡二卡三卡四卡| 99久免费精品视频在线观看| 亚洲成av人影院在线观看网| 久久五月婷婷丁香社区| 欧美丝袜丝交足nylons| 国产一区二区精品久久99| 一区二区三区四区不卡在线 | 亚洲特黄一级片| 欧美二区乱c少妇| www.亚洲免费av| 日韩电影一二三区| 亚洲三级小视频| 精品国产免费久久| 欧美日韩一级黄| a亚洲天堂av| 国产精品中文有码| 亚洲成人免费视| 成人免费视频在线观看| 久久综合色综合88| 欧美亚洲国产一区二区三区va| 国产91露脸合集magnet| 美女一区二区在线观看| 亚洲午夜精品在线| 亚洲欧美日韩国产一区二区三区 | 欧美日本乱大交xxxxx| av亚洲精华国产精华精华| 麻豆精品视频在线观看免费| 亚洲已满18点击进入久久| 欧美激情一区二区三区在线| 精品美女被调教视频大全网站| 在线欧美日韩精品| 91性感美女视频| 99视频一区二区三区| 国产在线播精品第三| 久久国产尿小便嘘嘘| 奇米综合一区二区三区精品视频 | 九色|91porny| 美女尤物国产一区| 日一区二区三区| 亚洲国产精品久久不卡毛片| 国产精品福利在线播放| 欧美国产一区在线| 国产精品国产自产拍高清av| 日本一区二区在线不卡| 国产偷v国产偷v亚洲高清| 国产亚洲精久久久久久| 国产日产精品1区| 久久精品人人做人人爽97| 久久日韩粉嫩一区二区三区| 久久一夜天堂av一区二区三区 | 欧美色电影在线| 欧洲精品中文字幕| 欧美日韩视频在线一区二区| 欧美色倩网站大全免费| 在线成人免费观看| 51久久夜色精品国产麻豆| 欧美一区二区三区性视频| 日韩一区二区三区三四区视频在线观看| 欧美午夜宅男影院| 欧美肥妇free| 欧美精品一区二区三区很污很色的| 日韩免费高清视频| 欧美极品xxx| 一级做a爱片久久| 日韩一区精品字幕| 国产一区二区久久| www.日韩在线| 欧美三级欧美一级| 2024国产精品视频| 国产精品二区一区二区aⅴ污介绍| 国产精品久99| 亚洲国产精品一区二区久久| 轻轻草成人在线| 成人美女在线观看| 欧美午夜视频网站| 26uuu另类欧美| 日韩毛片精品高清免费| 视频一区二区三区在线| 国产一区二区三区蝌蚪| 波多野结衣亚洲| 欧美精品色综合| 久久精子c满五个校花| 一区二区三区色| 久久99精品国产.久久久久| fc2成人免费人成在线观看播放| 色综合久久久久| 精品成人一区二区| 亚洲黄网站在线观看| 激情综合色综合久久综合| 91美女蜜桃在线| 精品黑人一区二区三区久久| 国产精品国产三级国产aⅴ原创| 亚洲成av人在线观看| 东方aⅴ免费观看久久av| 欧美网站大全在线观看| 欧美高清在线精品一区| 日韩国产欧美三级| 色综合久久中文字幕| 国产视频亚洲色图| 三级不卡在线观看| 色婷婷精品大视频在线蜜桃视频| 欧美精品一区二区三区蜜桃视频| 一区二区三区免费观看| 国产精品资源网站| 日韩一级成人av| 亚洲亚洲精品在线观看| 成人app网站| 久久蜜桃av一区二区天堂| 日韩福利视频网| 欧美亚洲综合久久| 亚洲欧美激情插 | 国产精品全国免费观看高清| 日韩在线a电影| 在线欧美日韩国产| 亚洲你懂的在线视频| 国产成人精品免费网站| 精品国产91洋老外米糕| 日韩高清欧美激情| 欧美三级资源在线| 亚洲尤物视频在线| 色综合久久久网| 亚洲少妇中出一区| 99精品一区二区三区| 国产精品久久久久久亚洲毛片| 韩国v欧美v亚洲v日本v| 精品裸体舞一区二区三区| 日韩 欧美一区二区三区| 7777精品久久久大香线蕉| 亚洲国产va精品久久久不卡综合| 色菇凉天天综合网| 综合激情成人伊人| av激情亚洲男人天堂| 中文字幕一区日韩精品欧美| 成人免费视频app|