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

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

?? xrl_mld6igmp_node.cc

?? MLDv2 support igmpv3 lite
?? CC
?? 第 1 頁 / 共 5 頁
字號:
					    true));    return (XORP_OK);}intXrlMld6igmpNode::unregister_receiver(const string& if_name,				     const string& vif_name,				     uint8_t ip_protocol){    Mld6igmpNode::incr_shutdown_requests_n();	// XXX: for FEA-non-receiver    add_task(new RegisterUnregisterReceiver(*this, if_name, vif_name,					    ip_protocol,					    false,	// XXX: ignored					    false));    return (XORP_OK);}voidXrlMld6igmpNode::send_register_unregister_receiver(){    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();    RegisterUnregisterReceiver* entry;    entry = dynamic_cast<RegisterUnregisterReceiver*>(xrl_task_base);    XLOG_ASSERT(entry != NULL);    //    // Check whether we have already registered with the FEA    //    if (! _is_fea_registered) {	retry_xrl_task();	return;    }    if (entry->is_register()) {	// Register a receiver with the FEA	if (Mld6igmpNode::is_ipv4()) {	    success = _xrl_fea_client4.send_register_receiver(		_fea_target.c_str(),		xrl_router().instance_name(),		entry->if_name(),		entry->vif_name(),		entry->ip_protocol(),		entry->enable_multicast_loopback(),		callback(this, &XrlMld6igmpNode::fea_client_send_register_unregister_receiver_cb));	    if (success)		return;	}	if (Mld6igmpNode::is_ipv6()) {	    success = _xrl_fea_client6.send_register_receiver(		_fea_target.c_str(),		xrl_router().instance_name(),		entry->if_name(),		entry->vif_name(),		entry->ip_protocol(),		entry->enable_multicast_loopback(),		callback(this, &XrlMld6igmpNode::fea_client_send_register_unregister_receiver_cb));	    if (success)		return;	}    } else {	// Unregister a receiver with the FEA	if (Mld6igmpNode::is_ipv4()) {	    success = _xrl_fea_client4.send_unregister_receiver(		_fea_target.c_str(),		xrl_router().instance_name(),		entry->if_name(),		entry->vif_name(),		entry->ip_protocol(),		callback(this, &XrlMld6igmpNode::fea_client_send_register_unregister_receiver_cb));	    if (success)		return;	}	if (Mld6igmpNode::is_ipv6()) {	    success = _xrl_fea_client6.send_unregister_receiver(		_fea_target.c_str(),		xrl_router().instance_name(),		entry->if_name(),		entry->vif_name(),		entry->ip_protocol(),		callback(this, &XrlMld6igmpNode::fea_client_send_register_unregister_receiver_cb));	    if (success)		return;	}    }    if (! success) {	//	// If an error, then try again	//	XLOG_ERROR("Failed to %s register receiver on interface %s vif %s "		   "IP protocol %u with the FEA. "		   "Will try again.",		   entry->operation_name(),		   entry->if_name().c_str(),		   entry->vif_name().c_str(),		   entry->ip_protocol());	retry_xrl_task();	return;    }}voidXrlMld6igmpNode::fea_client_send_register_unregister_receiver_cb(    const XrlError& xrl_error){    XLOG_ASSERT(! _xrl_tasks_queue.empty());    XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();    RegisterUnregisterReceiver* entry;    entry = dynamic_cast<RegisterUnregisterReceiver*>(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())	    Mld6igmpNode::decr_startup_requests_n();  // XXX: for FEA-receiver	else	    Mld6igmpNode::decr_shutdown_requests_n(); // XXX: for FEA-non-receiver	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 receiver with the FEA: %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 {	    Mld6igmpNode::decr_shutdown_requests_n();  // XXX: for FEA-non-receiver	    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 receiver with the FEA: %s. "		   "Will try again.",		   entry->operation_name(), xrl_error.str().c_str());	retry_xrl_task();	break;    }}intXrlMld6igmpNode::join_multicast_group(const string& if_name,				      const string& vif_name,				      uint8_t ip_protocol,				      const IPvX& group_address){    Mld6igmpNode::incr_startup_requests_n();		// XXX: for FEA-join    add_task(new JoinLeaveMulticastGroup(*this, if_name, vif_name, ip_protocol,					 group_address, true));    return (XORP_OK);}intXrlMld6igmpNode::leave_multicast_group(const string& if_name,				       const string& vif_name,				       uint8_t ip_protocol,				       const IPvX& group_address){    Mld6igmpNode::incr_shutdown_requests_n();		// XXX: for FEA-leave    add_task(new JoinLeaveMulticastGroup(*this, if_name, vif_name, ip_protocol,					 group_address, false));    return (XORP_OK);}voidXrlMld6igmpNode::send_join_leave_multicast_group(){    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();    JoinLeaveMulticastGroup* entry;    entry = dynamic_cast<JoinLeaveMulticastGroup*>(xrl_task_base);    XLOG_ASSERT(entry != NULL);    //    // Check whether we have already registered with the FEA    //    if (! _is_fea_registered) {	retry_xrl_task();	return;    }    if (entry->is_join()) {	// Join a multicast group with the FEA	if (Mld6igmpNode::is_ipv4()) {	    success = _xrl_fea_client4.send_join_multicast_group(		_fea_target.c_str(),		xrl_router().instance_name(),		entry->if_name(),		entry->vif_name(),		entry->ip_protocol(),		entry->group_address().get_ipv4(),		callback(this, &XrlMld6igmpNode::fea_client_send_join_leave_multicast_group_cb));	    if (success)		return;	}	if (Mld6igmpNode::is_ipv6()) {	    success = _xrl_fea_client6.send_join_multicast_group(		_fea_target.c_str(),		xrl_router().instance_name(),		entry->if_name(),		entry->vif_name(),		entry->ip_protocol(),		entry->group_address().get_ipv6(),		callback(this, &XrlMld6igmpNode::fea_client_send_join_leave_multicast_group_cb));	    if (success)		return;	}    } else {	// Leave a multicast group with the FEA	if (Mld6igmpNode::is_ipv4()) {	    success = _xrl_fea_client4.send_leave_multicast_group(		_fea_target.c_str(),		xrl_router().instance_name(),		entry->if_name(),		entry->vif_name(),		entry->ip_protocol(),		entry->group_address().get_ipv4(),		callback(this, &XrlMld6igmpNode::fea_client_send_join_leave_multicast_group_cb));	    if (success)		return;	}	if (Mld6igmpNode::is_ipv6()) {	    success = _xrl_fea_client6.send_leave_multicast_group(		_fea_target.c_str(),		xrl_router().instance_name(),		entry->if_name(),		entry->vif_name(),		entry->ip_protocol(),		entry->group_address().get_ipv6(),		callback(this, &XrlMld6igmpNode::fea_client_send_join_leave_multicast_group_cb));	    if (success)		return;	}    }    if (! success) {	//	// If an error, then try again	//	XLOG_ERROR("Failed to %s group %s on interface/vif %s/%s with the FEA. "		   "Will try again.",		   entry->operation_name(),		   entry->group_address().str().c_str(),		   entry->if_name().c_str(),		   entry->vif_name().c_str());	retry_xrl_task();	return;    }}voidXrlMld6igmpNode::fea_client_send_join_leave_multicast_group_cb(    const XrlError& xrl_error){    XLOG_ASSERT(! _xrl_tasks_queue.empty());    XrlTaskBase* xrl_task_base = _xrl_tasks_queue.front();    JoinLeaveMulticastGroup* entry;    entry = dynamic_cast<JoinLeaveMulticastGroup*>(xrl_task_base);    XLOG_ASSERT(entry != NULL);    switch (xrl_error.error_code()) {    case OKAY:	//	// If success, then schedule the next task	//	if (entry->is_join())	    Mld6igmpNode::decr_startup_requests_n();	// XXX: for FEA-join	else	    Mld6igmpNode::decr_shutdown_requests_n();	// XXX: for FEA-leave	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 a multicast group with the FEA: %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_join()) {	    XLOG_ERROR("XRL communication error: %s", xrl_error.str().c_str());	} else {	    Mld6igmpNode::decr_shutdown_requests_n();	// XXX: for FEA-leave	    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 group %s on interface/vif %s/%s "		   "with the FEA: %s. "		   "Will try again.",		   entry->operation_name(),		   entry->group_address().str().c_str(),		   entry->if_name().c_str(),		   entry->vif_name().c_str(),		   xrl_error.str().c_str());	retry_xrl_task();	break;    }}intXrlMld6igmpNode::send_add_membership(const string& dst_module_instance_name,				     xorp_module_id dst_module_id,				     uint32_t vif_index,				     const IPvX& source,				     const IPvX& group){    Mld6igmpVif *mld6igmp_vif = Mld6igmpNode::vif_find_by_vif_index(vif_index);        if (mld6igmp_vif == NULL) {	XLOG_ERROR("Cannot send add_membership to %s for (%s, %s) on vif "		   "with vif_index %d: no such vif",		   dst_module_instance_name.c_str(),		   cstring(source),		   cstring(group),		   vif_index);	return (XORP_ERROR);    }    _send_add_delete_membership_queue.push_back(SendAddDeleteMembership(						    dst_module_instance_name,						    dst_module_id,						    vif_index,						    source,						    group,						    true));    // If the queue was empty before, start sending the changes    if (_send_add_delete_membership_queue.size() == 1) {	send_add_delete_membership();    }    return (XORP_OK);}intXrlMld6igmpNode::send_delete_membership(const string& dst_module_instance_name,					xorp_module_id dst_module_id,					uint32_t vif_index,					const IPvX& source,					const IPvX& group){    Mld6igmpVif *mld6igmp_vif = Mld6igmpNode::vif_find_by_vif_index(vif_index);        if (mld6igmp_vif == NULL) {	XLOG_ERROR("Cannot send delete_membership to %s for (%s, %s) on vif "		   "with vif_index %d: no such vif",		   dst_module_instance_name.c_str(),		   cstring(source),		   cstring(group),		   vif_index);	return (XORP_ERROR);    }    _send_add_delete_membership_queue.push_back(SendAddDeleteMembership(						    dst_module_instance_name,						    dst_module_id,						    vif_index,						    source,						    group,						    false));    // If the queue was empty before, start sending the changes    if (_send_add_delete_membership_queue.size() == 1) {	send_add_delete_membership();    }    return (XORP_OK);}voidXrlMld6igmpNode::send_add_delete_membership(){    bool success = true;    Mld6igmpVif *mld6igmp_vif = NULL;    if (! _is_finder_alive)	return;		// The Finder is dead    if (_send_add_delete_membership_queue.empty())	return;			// No more changes    const SendAddDeleteMembership& membership = _send_add_delete_membership_queue.front();    mld6igmp_vif = Mld6igmpNode::vif_find_by_vif_index(membership.vif_index());    if (mld6igmp_vif == NULL) {	XLOG_ERROR("Cannot send %s for (%s, %s) on vif "		   "with vif_index %d to %s: no such vif",		   membership.operation_name(),		   cstring(membership.source()),		   cstring(membership.group()),		   membership.vif_index(),		   membership.dst_module_instance_name().c_str());	_send_add_delete_membership_queue.pop_front();	goto start_timer_label;    }    if (membership.is_add()) {	// Send add_membership to the client protocol	if (Mld6igmpNode::is_ipv4()) {	    success = _xrl_mld6igmp_client_client.send_add_membership4(		membership.dst_module_instance_name().c_str(),		xrl_router().class_name(),		mld6igmp_vif->name(),		membership.vif_index(),		membership.source().get_ipv4(),		membership.group().get_ipv4(),		callback(this, &XrlMld6igmpNode::mld6igmp_client_send_add_delete_membership_cb));	    if (success)		return;	}	if (Mld6igmpNode::is_ipv6()) {	    success = _xrl_mld6igmp_client_client.send_add_membership6(		membership.dst_module_instance_name().c_str(),		xrl_router().class_name(),		mld6igmp_vif->name(),

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品福利网| 欧美一区二区三区影视| 国产日韩欧美激情| 国产老女人精品毛片久久| 久久亚洲捆绑美女| 丁香婷婷综合网| 亚洲人xxxx| 欧美精品一级二级三级| 国产在线播放一区| 欧美激情资源网| 欧美无人高清视频在线观看| 视频一区二区中文字幕| 久久女同性恋中文字幕| 99re66热这里只有精品3直播| 一区二区三区四区av| 欧美精品精品一区| 国产一区二区h| 一区二区在线观看av| 欧美一区二区视频观看视频| 国产高清不卡一区| 亚洲免费在线看| 色综合夜色一区| 亚洲成年人网站在线观看| 精品少妇一区二区三区在线播放| 成人听书哪个软件好| 天天色综合成人网| 国产免费观看久久| 9191精品国产综合久久久久久| 国产在线日韩欧美| 亚洲欧美激情视频在线观看一区二区三区| 宅男噜噜噜66一区二区66| 99精品一区二区三区| 亚洲高清免费观看高清完整版在线观看 | 欧美偷拍一区二区| 国产九色sp调教91| 婷婷中文字幕综合| 国产精品毛片久久久久久久| 91精品国产综合久久精品性色| 成人性视频网站| 久久se这里有精品| 亚洲一区二区三区在线播放| 久久九九久久九九| 91精品国产一区二区三区| 色呦呦国产精品| 国产精品一级片在线观看| 亚洲第一av色| 日韩毛片一二三区| 久久色视频免费观看| 欧美精品乱码久久久久久按摩 | 狠狠色综合日日| 亚洲午夜激情网站| 亚洲天天做日日做天天谢日日欢| 欧美电视剧免费全集观看| 在线精品视频免费观看| 成人自拍视频在线| 国产伦精一区二区三区| 日韩精品午夜视频| 亚洲国产一二三| 亚洲欧美色一区| 日韩毛片视频在线看| 中文字幕视频一区二区三区久| 精品久久久久久久久久久久包黑料| 欧美日韩一区二区三区不卡| 97久久人人超碰| 99精品国产91久久久久久| 国产mv日韩mv欧美| 国产精品77777| 激情欧美一区二区| 久久精品国产亚洲a| 麻豆91在线播放免费| 免费在线看成人av| 日产欧产美韩系列久久99| 婷婷夜色潮精品综合在线| 亚洲已满18点击进入久久| 亚洲在线视频一区| 亚洲自拍偷拍网站| 天天影视涩香欲综合网| 日韩一区精品字幕| 久久国产尿小便嘘嘘| 久久99精品久久久久久| 国产综合久久久久影院| 国产美女主播视频一区| 成人性色生活片免费看爆迷你毛片| 成人午夜电影久久影院| 色综合久久综合中文综合网| 色婷婷精品久久二区二区蜜臀av| 91福利社在线观看| 欧美日韩精品欧美日韩精品一| 4438x成人网最大色成网站| 久久日韩粉嫩一区二区三区| 久久久久国产精品麻豆ai换脸 | 成人国产精品免费观看视频| 成人精品视频.| 一本大道久久a久久精二百| 欧美天天综合网| 欧美α欧美αv大片| 日本一区二区三区国色天香| 亚洲色图欧美在线| 水蜜桃久久夜色精品一区的特点 | 日韩精品免费专区| 麻豆91精品91久久久的内涵| 丁香亚洲综合激情啪啪综合| 91日韩在线专区| 欧美日本一区二区| 久久精品男人的天堂| 亚洲欧美日韩小说| 麻豆国产精品一区二区三区| 懂色av一区二区夜夜嗨| 欧美日韩精品欧美日韩精品一综合| 日韩精品一区国产麻豆| 亚洲三级电影网站| 日韩不卡手机在线v区| 国产成人h网站| 欧美日韩在线观看一区二区 | 欧美电影一区二区| 久久婷婷综合激情| 一区二区三区中文字幕在线观看| 婷婷久久综合九色综合绿巨人| 国模无码大尺度一区二区三区| av电影在线不卡| 日韩欧美黄色影院| 亚洲黄网站在线观看| 精品一区二区三区久久久| 色菇凉天天综合网| 久久久久青草大香线综合精品| 亚洲一区在线播放| 国产suv精品一区二区三区| 欧美美女一区二区在线观看| 国产精品乱人伦中文| 免费在线观看不卡| 欧美日本一区二区| 综合激情网...| 国产福利电影一区二区三区| 欧美日韩精品是欧美日韩精品| 国产精品无人区| 久久99九九99精品| 91超碰这里只有精品国产| 亚洲欧美色图小说| caoporm超碰国产精品| 精品精品国产高清一毛片一天堂| 亚洲三级久久久| 成人性色生活片免费看爆迷你毛片| 欧美一区二区三区公司| 亚洲国产一区二区a毛片| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 日韩一级免费一区| 亚洲一区二区综合| 色综合色综合色综合色综合色综合| 久久先锋影音av鲁色资源| 日韩黄色免费网站| 欧美美女喷水视频| 午夜精品爽啪视频| 日本道色综合久久| 亚洲色图欧洲色图| 91农村精品一区二区在线| 国产精品高潮久久久久无| 国产大片一区二区| 久久综合狠狠综合久久综合88| 久久国产夜色精品鲁鲁99| 91精品国产综合久久小美女| 亚洲国产欧美在线人成| 欧美偷拍一区二区| 午夜精品成人在线视频| 欧美日韩一区二区三区四区 | 六月丁香婷婷色狠狠久久| 91精品国产综合久久久久| 免费高清在线视频一区·| 欧美一二三四区在线| 麻豆成人久久精品二区三区小说| 中文字幕免费观看一区| 国产精品99久| 国产精品久久看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 久久网站最新地址| 成人综合婷婷国产精品久久免费| 国产精品视频线看| 91最新地址在线播放| 一区二区三区蜜桃| 欧美日韩国产高清一区二区| 日韩制服丝袜av| 欧美videos大乳护士334| 国产精品一线二线三线| 国产精品乱码一区二三区小蝌蚪| 99vv1com这只有精品| 一区二区三区资源| 日韩欧美一级在线播放| 国产一二三精品| 国产精品久久一卡二卡| 色狠狠一区二区| 看国产成人h片视频| 久久久99免费| 色呦呦国产精品| 美女视频网站久久| 国产精品久久久久久久浪潮网站| 在线观看一区日韩| 国内精品国产成人国产三级粉色| 国产精品国产三级国产有无不卡 | 亚洲一区影音先锋| 欧美哺乳videos| 一本一道波多野结衣一区二区|