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

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

?? xrl_mld6igmp_node.cc

?? MLDv2 support igmpv3 lite
?? CC
?? 第 1 頁 / 共 5 頁
字號(hào):
// -*- 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,

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品高清亚洲| 亚洲精选在线视频| 色综合夜色一区| 激情欧美日韩一区二区| 悠悠色在线精品| 国产欧美精品一区二区色综合| 在线视频国内一区二区| 国产精品亚洲视频| 日本欧美一区二区三区乱码| 亚洲乱码日产精品bd| 久久久美女毛片| 日韩欧美国产三级电影视频| 91成人免费在线| 成人小视频免费观看| 狠狠色丁香久久婷婷综合丁香| 亚洲观看高清完整版在线观看| 国产精品久久久久国产精品日日 | 欧美日韩成人一区| 成人av资源在线观看| 国产原创一区二区| 免费不卡在线视频| 五月天国产精品| 亚洲欧美乱综合| 中文字幕视频一区二区三区久| 久久亚洲一级片| 欧美成人精品二区三区99精品| 欧美亚洲国产怡红院影院| 99视频国产精品| www.久久久久久久久| 国产a级毛片一区| 国模大尺度一区二区三区| 麻豆一区二区三| 奇米色777欧美一区二区| 亚洲.国产.中文慕字在线| 夜夜亚洲天天久久| 亚洲福利视频三区| 亚洲成人一区在线| 丝袜诱惑亚洲看片| 日韩av在线发布| 免费欧美在线视频| 久久国产精品露脸对白| 久久97超碰色| 国产91精品精华液一区二区三区| 国产麻豆视频精品| 粉嫩一区二区三区在线看| 不卡的电影网站| 91在线视频网址| 在线观看日韩电影| 欧美日韩国产在线观看| 欧美放荡的少妇| 日韩欧美成人激情| 亚洲欧美偷拍另类a∨色屁股| 国产精品狼人久久影院观看方式| 国产精品欧美经典| 亚洲日本在线视频观看| 亚洲一线二线三线久久久| 三级久久三级久久| 久久99精品国产麻豆不卡| 国产精品77777| 91色porny蝌蚪| 欧美色图12p| 精品国产免费人成电影在线观看四季 | 国产麻豆日韩欧美久久| 丁香啪啪综合成人亚洲小说| 91丝袜美腿高跟国产极品老师| 91尤物视频在线观看| 欧美日韩国产系列| 精品国产精品一区二区夜夜嗨| 久久精品视频在线免费观看| 亚洲欧美另类久久久精品2019| 日韩电影免费在线看| 国产成人在线免费观看| 色中色一区二区| 日韩精品在线一区| 国产精品视频免费看| 亚洲午夜成aⅴ人片| 激情亚洲综合在线| 色婷婷国产精品| 日韩午夜中文字幕| 中文字幕一区二区三区在线播放| 五月婷婷综合网| 大桥未久av一区二区三区中文| 欧美吻胸吃奶大尺度电影| 精品国产乱码久久久久久图片| 亚洲欧美日韩小说| 久久国产精品免费| 在线观看日韩一区| 国产欧美精品在线观看| 日韩精品视频网站| 成人动漫视频在线| 欧美一级生活片| 亚洲欧洲综合另类| 国产一区二区视频在线播放| 欧美亚洲精品一区| 国产精品久久网站| 精品亚洲欧美一区| 欧美日韩激情在线| 亚洲日本乱码在线观看| 青青草97国产精品免费观看无弹窗版| 成人永久aaa| 日韩欧美一区中文| 亚洲福利一区二区| 99在线精品一区二区三区| 欧美电视剧免费观看| 亚洲成国产人片在线观看| 99久久精品免费精品国产| 26uuu另类欧美亚洲曰本| 亚洲成人免费观看| 91福利国产成人精品照片| 亚洲国产精品精华液2区45| 奇米一区二区三区av| 欧美怡红院视频| 亚洲久草在线视频| av亚洲精华国产精华精| 国产一区二区在线观看免费| 国产亲近乱来精品视频| 99re这里都是精品| 亚洲午夜久久久久中文字幕久| 亚洲国产你懂的| 国产永久精品大片wwwapp| 在线免费精品视频| 亚洲美女屁股眼交| 成人高清av在线| 亚洲国产成人自拍| 国产精品一区二区黑丝| 日韩精品一区国产麻豆| 日本伊人色综合网| 欧美一二三四在线| 日韩在线卡一卡二| 欧美日韩一区二区不卡| 亚洲福利一二三区| 欧美日韩国产三级| 亚洲高清免费在线| 欧美人伦禁忌dvd放荡欲情| 亚洲高清视频的网址| 欧美午夜精品电影| 五月激情丁香一区二区三区| 欧美日韩一区中文字幕| 日本不卡免费在线视频| 日韩视频不卡中文| 国产做a爰片久久毛片| 精品国产一区二区三区四区四| 精品一区二区三区不卡| 久久婷婷色综合| 成人免费毛片高清视频| 国产精品情趣视频| 色综合久久99| 视频在线在亚洲| 欧美成人三级在线| 国产成人免费视频网站高清观看视频| 337p粉嫩大胆色噜噜噜噜亚洲| 国产精品自拍三区| 中文字幕一区二区在线观看| 色综合久久综合网| 午夜精品久久久久久久99樱桃| 欧美一区二区三区在线视频| 免费成人美女在线观看.| 久久久久成人黄色影片| 99re这里都是精品| 视频一区国产视频| 精品国产网站在线观看| 成人激情免费网站| 亚洲一区二区三区视频在线| 91精品国产综合久久婷婷香蕉| 国产一区二区三区免费在线观看| 久久精品亚洲一区二区三区浴池| 91视视频在线观看入口直接观看www| 亚洲一二三专区| www日韩大片| 欧美一区二区黄| 国产一区二区免费视频| 亚洲精品视频免费看| 日韩女同互慰一区二区| 97久久精品人人澡人人爽| 日韩专区在线视频| 中文字幕+乱码+中文字幕一区| 欧美熟乱第一页| 成人影视亚洲图片在线| 性做久久久久久| 国产欧美一区二区三区网站| 欧美撒尿777hd撒尿| 国产精品18久久久久久久网站| 一区二区三区蜜桃| 久久久久久毛片| 欧美日韩精品欧美日韩精品| 风间由美中文字幕在线看视频国产欧美 | 亚洲欧洲精品天堂一级| 在线电影院国产精品| 成人动漫视频在线| 久草在线在线精品观看| 亚洲一区二区综合| 国产精品网友自拍| 4438成人网| 欧美亚洲精品一区| 成人av网站免费| 国产一区二区不卡在线| 五月天亚洲婷婷| 亚洲一级二级在线| 最新久久zyz资源站| 久久久一区二区三区|