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

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

?? mld6igmp_proto.cc

?? MLDv2 support igmpv3 lite
?? CC
?? 第 1 頁 / 共 2 頁
字號:
Mld6igmpVif::mld6igmp_ssm_membership_report_recv(const IPvX& src,						 const IPvX& dst,						 uint8_t message_type,						 buffer_t *buffer){    uint16_t group_records_n = 0;    string error_msg;    typedef pair<IPvX, set<IPvX> > gs_record;	// XXX: a handy typedef    list<gs_record> mode_is_include_groups;    list<gs_record> mode_is_exclude_groups;    list<gs_record> change_to_include_mode_groups;    list<gs_record> change_to_exclude_mode_groups;    list<gs_record> allow_new_sources_groups;    list<gs_record> block_old_sources_groups;    list<gs_record>::iterator gs_iter;    //    // Decode the rest of the message header    //    BUFFER_GET_SKIP(2, buffer);		// The 'Reserved' field    BUFFER_GET_HOST_16(group_records_n, buffer);    //    // Decode the array of group records    //    while (group_records_n != 0) {	uint8_t record_type;	uint8_t aux_data_len;	uint16_t sources_n;	IPvX group_address(family());	set<IPvX> source_addresses;	list<gs_record>* gs_record_ptr = NULL;	BUFFER_GET_OCTET(record_type, buffer);	BUFFER_GET_OCTET(aux_data_len, buffer);	BUFFER_GET_HOST_16(sources_n, buffer);	BUFFER_GET_IPVX(family(), group_address, buffer);	// Decode the array of source addresses	while (sources_n != 0) {	    IPvX ipvx(family());	    BUFFER_GET_IPVX(family(), ipvx, buffer);	    source_addresses.insert(ipvx);	    sources_n--;	}	// XXX: Skip the 'Auxiliary Data', because we don't use it	BUFFER_GET_SKIP(aux_data_len, buffer);	//	// Select the appropriate set, and add the group and the sources to it	//	if (proto_is_igmp()) {	    switch (record_type) {	    case IGMP_MODE_IS_INCLUDE:		gs_record_ptr = &mode_is_include_groups;		break;	    case IGMP_MODE_IS_EXCLUDE:		gs_record_ptr = &mode_is_exclude_groups;		break;	    case IGMP_CHANGE_TO_INCLUDE_MODE:		gs_record_ptr = &change_to_include_mode_groups;		break;	    case IGMP_CHANGE_TO_EXCLUDE_MODE:		gs_record_ptr = &change_to_exclude_mode_groups;		break;	    case IGMP_ALLOW_NEW_SOURCES:		gs_record_ptr = &allow_new_sources_groups;		break;	    case IGMP_BLOCK_OLD_SOURCES:		gs_record_ptr = &block_old_sources_groups;		break;	    default:		break;	    }	}	if (proto_is_mld6()) {	    switch (record_type) {	    case MLD_MODE_IS_INCLUDE:		gs_record_ptr = &mode_is_include_groups;		break;	    case MLD_MODE_IS_EXCLUDE:		gs_record_ptr = &mode_is_exclude_groups;		break;	    case MLD_CHANGE_TO_INCLUDE_MODE:		gs_record_ptr = &change_to_include_mode_groups;		break;	    case MLD_CHANGE_TO_EXCLUDE_MODE:		gs_record_ptr = &change_to_exclude_mode_groups;		break;	    case MLD_ALLOW_NEW_SOURCES:		gs_record_ptr = &allow_new_sources_groups;		break;	    case MLD_BLOCK_OLD_SOURCES:		gs_record_ptr = &block_old_sources_groups;		break;	    default:		break;	    }	}	if (gs_record_ptr != NULL) {	    gs_record_ptr->push_back(make_pair(group_address,					       source_addresses));	} else {	    error_msg = c_format("RX %s from %s to %s on vif %s: "				 "unrecognized record type %d (ignored)",				 proto_message_type2ascii(message_type),				 cstring(src), cstring(dst),				 name().c_str(),				 record_type);	    XLOG_WARNING("%s", error_msg.c_str());	}	group_records_n--;    }    //    // Process the records    //    for (gs_iter = mode_is_include_groups.begin();	 gs_iter != mode_is_include_groups.end();	 ++gs_iter) {	group_records().process_mode_is_include(gs_iter->first,						gs_iter->second,						src);    }    for (gs_iter = mode_is_exclude_groups.begin();	 gs_iter != mode_is_exclude_groups.end();	 ++gs_iter) {	group_records().process_mode_is_exclude(gs_iter->first,						gs_iter->second,						src);    }    for (gs_iter = change_to_include_mode_groups.begin();	 gs_iter != change_to_include_mode_groups.end();	 ++gs_iter) {	group_records().process_change_to_include_mode(gs_iter->first,						       gs_iter->second,						       src);    }    for (gs_iter = change_to_exclude_mode_groups.begin();	 gs_iter != change_to_exclude_mode_groups.end();	 ++gs_iter) {	group_records().process_change_to_exclude_mode(gs_iter->first,						       gs_iter->second,						       src);    }    for (gs_iter = allow_new_sources_groups.begin();	 gs_iter != allow_new_sources_groups.end();	 ++gs_iter) {	group_records().process_allow_new_sources(gs_iter->first,						  gs_iter->second,						  src);    }    for (gs_iter = block_old_sources_groups.begin();	 gs_iter != block_old_sources_groups.end();	 ++gs_iter) {	group_records().process_block_old_sources(gs_iter->first,						  gs_iter->second,						  src);    }    return (XORP_OK); rcvlen_error:    error_msg = c_format("RX %s from %s to %s on vif %s: "			 "some fields are too short",			 proto_message_type2ascii(message_type),			 cstring(src), cstring(dst),			 name().c_str());    XLOG_WARNING("%s", error_msg.c_str());    return (XORP_ERROR);}/** * Mld6igmpVif::other_querier_timer_timeout: *  * Timeout: the previous querier has expired. I will become the querier. **/voidMld6igmpVif::other_querier_timer_timeout(){    string dummy_error_msg;    if (primary_addr() == IPvX::ZERO(family())) {	// XXX: the vif address is unknown; this cannot happen if the	// vif status is UP.	XLOG_ASSERT(! is_up());	return;    }        set_querier_addr(primary_addr());    set_i_am_querier(true);    //    // Now I am the querier. Send a general membership query.    //    TimeVal max_resp_time = query_response_interval().get();    set<IPvX> no_sources;		// XXX: empty set    mld6igmp_query_send(primary_addr(),			IPvX::MULTICAST_ALL_SYSTEMS(family()),			max_resp_time,			IPvX::ZERO(family()),			// XXX: ANY			no_sources,			false,			dummy_error_msg);    _startup_query_count = 0;		// XXX: not a startup case    _query_timer = mld6igmp_node().eventloop().new_oneoff_after(	effective_query_interval(),	callback(this, &Mld6igmpVif::query_timer_timeout));}/** * Mld6igmpVif::query_timer_timeout: *  * Timeout: time to send a membership query. **/voidMld6igmpVif::query_timer_timeout(){    TimeVal interval;    string dummy_error_msg;    if (! i_am_querier())	return;		// I am not the querier anymore. Ignore.    //    // Send a general membership query    //    TimeVal max_resp_time = query_response_interval().get();    set<IPvX> no_sources;		// XXX: empty set    mld6igmp_query_send(primary_addr(),			IPvX::MULTICAST_ALL_SYSTEMS(family()),			max_resp_time,			IPvX::ZERO(family()),			// XXX: ANY			no_sources,			false,			dummy_error_msg);    if (_startup_query_count > 0)	_startup_query_count--;    if (_startup_query_count > 0) {	// "Startup Query Interval"	interval = effective_query_interval() / 4;    } else {	interval = effective_query_interval();    }    _query_timer = mld6igmp_node().eventloop().new_oneoff_after(	interval,	callback(this, &Mld6igmpVif::query_timer_timeout));}/** * mld6igmp_query_version_consistency_check: * @src: The message source address. * @dst: The message destination address. * @message_type: The type of the MLD/IGMP message. * @message_version: The protocol version of the received Query message: * (IGMP_V1, IGMP_V2, IGMP_V3 for IGMP) or (MLD_V1, MLD_V2 for MLD). *  * Check for MLD/IGMP protocol version interface configuration consistency. * For example, if the received Query message was IGMPv1, a correctly * configured local interface must be operating in IGMPv1 mode. * Similarly, if the local interface is operating in IGMPv1 mode, * all other neighbor routers (for that interface) must be * operating in IGMPv1 as well. *  * Return value: %XORP_OK if consistency, otherwise %XORP_ERROR. **/intMld6igmpVif::mld6igmp_query_version_consistency_check(const IPvX& src,						      const IPvX& dst,						      uint8_t message_type,						      int message_version){    string proto_name, mode_config, mode_received;    if (message_version == proto_version())	return (XORP_OK);    if (proto_is_igmp())	proto_name = "IGMP";    if (proto_is_mld6())	proto_name = "MLD";    mode_config = c_format("%sv%u", proto_name.c_str(), proto_version());    mode_received = c_format("%sv%u", proto_name.c_str(), message_version);    // TODO: rate-limit the warning    XLOG_WARNING("RX %s from %s to %s on vif %s: "		 "this interface is in %s mode, but received %s message",		 proto_message_type2ascii(message_type),		 cstring(src), cstring(dst),		 name().c_str(),		 mode_config.c_str(),		 mode_received.c_str());    XLOG_WARNING("Please configure properly all routers on "		 "that subnet to use same %s version",		 proto_name.c_str());    return (XORP_ERROR);}voidMld6igmpVif::set_configured_query_interval_cb(TimeVal v){    set_effective_query_interval(v);}voidMld6igmpVif::set_effective_query_interval(const TimeVal& v){    _effective_query_interval = v;    recalculate_effective_query_interval();}voidMld6igmpVif::recalculate_effective_query_interval(){    recalculate_group_membership_interval();    recalculate_older_version_host_present_interval();}voidMld6igmpVif::set_query_last_member_interval_cb(TimeVal v){    UNUSED(v);    recalculate_last_member_query_time();}voidMld6igmpVif::set_query_response_interval_cb(TimeVal v){    UNUSED(v);    recalculate_group_membership_interval();    recalculate_older_version_host_present_interval();}voidMld6igmpVif::set_configured_robust_count_cb(uint32_t v){    set_effective_robustness_variable(v);}voidMld6igmpVif::set_effective_robustness_variable(uint32_t v){    _effective_robustness_variable = v;    recalculate_effective_robustness_variable();}voidMld6igmpVif::recalculate_effective_robustness_variable(){    recalculate_group_membership_interval();    recalculate_last_member_query_count();    recalculate_older_version_host_present_interval();}voidMld6igmpVif::recalculate_last_member_query_count(){    _last_member_query_count = effective_robustness_variable();    recalculate_last_member_query_time();}voidMld6igmpVif::recalculate_group_membership_interval(){    _group_membership_interval =	effective_query_interval() * effective_robustness_variable()	+ query_response_interval().get();}voidMld6igmpVif::recalculate_last_member_query_time(){    _last_member_query_time = query_last_member_interval().get()	* last_member_query_count();}voidMld6igmpVif::recalculate_older_version_host_present_interval(){    _older_version_host_present_interval =	effective_query_interval() * effective_robustness_variable()	+ query_response_interval().get();}voidMld6igmpVif::restore_effective_variables(){    // Restore the default Query Interval and Robustness Variable    set_effective_robustness_variable(configured_robust_count().get());    set_effective_query_interval(configured_query_interval().get());}voidMld6igmpVif::decode_exp_time_code8(uint8_t code, TimeVal& timeval,				   uint32_t timer_scale){    uint32_t decoded_time = 0;    //    // From RFC 3376 Section 4.1.1, and RFC 3810 Section 5.1.9:    //    // If Code < 128, Time = Code    //    // If Code >= 128, Code represents a floating-point value as follows:    //    //     0 1 2 3 4 5 6 7    //    +-+-+-+-+-+-+-+-+    //    |1| exp | mant  |    //    +-+-+-+-+-+-+-+-+    //    // Time = (mant | 0x10) << (exp + 3)    //    if (code < 128) {	decoded_time = code;    } else {	uint8_t mant = code & 0xf;	uint8_t exp = (code >> 4) & 0x7;	decoded_time = (mant | 0x10) << (exp + 3);    }    timeval = TimeVal(decoded_time, 0);    timeval = timeval / timer_scale;}voidMld6igmpVif::decode_exp_time_code16(uint16_t code, TimeVal& timeval,				    uint32_t timer_scale){    uint32_t decoded_time = 0;    //    // From RFC 3810 Section 5.1.9:    //    // If Code < 32768, Time = Code    //    // If Code >= 32768, Code represents a floating-point value as follows:    //    //     0 1 2 3 4 5 6 7 8 9 A B C D E F    //    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    //    |1| exp |          mant         |    //    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    //    // Time = (mant | 0x1000) << (exp + 3)    //    if (code < 32768) {	decoded_time = code;    } else {	uint8_t mant = code & 0xfff;	uint8_t exp = (code >> 12) & 0x7;	decoded_time = (mant | 0x1000) << (exp + 3);    }    timeval = TimeVal(decoded_time, 0);    timeval = timeval / timer_scale;}voidMld6igmpVif::encode_exp_time_code8(const TimeVal& timeval,				   uint8_t& code,				   uint32_t timer_scale){    TimeVal scaled_max_resp_time = timeval * timer_scale;    uint32_t decoded_time = scaled_max_resp_time.sec();    code = 0;    //    // From RFC 3376 Section 4.1.1, and RFC 3810 Section 5.1.9:    //    // If Code < 128, Time = Code    //    // If Code >= 128, Code represents a floating-point value as follows:    //    //     0 1 2 3 4 5 6 7    //    +-+-+-+-+-+-+-+-+    //    |1| exp | mant  |    //    +-+-+-+-+-+-+-+-+    //    // Time = (mant | 0x10) << (exp + 3)    //    if (decoded_time < 128) {	code = decoded_time;    } else {	uint8_t mant = 0;	uint8_t exp = 0;	// Calculate the "mant" and the "exp"	while ((decoded_time >> (exp + 3)) > 0x1f) {	    exp++;	}	mant = (decoded_time >> (exp + 3)) & 0xf;	code = 0x80 | (exp << 4) | mant;    }}voidMld6igmpVif::encode_exp_time_code16(const TimeVal& timeval,				    uint16_t& code,				    uint32_t timer_scale){    TimeVal scaled_max_resp_time = timeval * timer_scale;    uint32_t decoded_time = scaled_max_resp_time.sec();    code = 0;    //    // From RFC 3810 Section 5.1.9:    //    // If Code < 32768, Time = Code    //    // If Code >= 32768, Code represents a floating-point value as follows:    //    //     0 1 2 3 4 5 6 7 8 9 A B C D E F    //    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    //    |1| exp |          mant         |    //    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+    //    // Time = (mant | 0x1000) << (exp + 3)    //    if (decoded_time < 32768) {	code = decoded_time;    } else {	uint8_t mant = 0;	uint8_t exp = 0;	// Calculate the "mant" and the "exp"	while ((decoded_time >> (exp + 3)) > 0x1fff) {	    exp++;	}	mant = (decoded_time >> (exp + 3)) & 0xfff;	code = 0x8000 | (exp << 12) | mant;    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人晚上爱看视频| 欧美va亚洲va香蕉在线| www.亚洲激情.com| 成人福利视频在线看| 国产精品一区二区x88av| 人禽交欧美网站| 五月开心婷婷久久| 日韩在线观看一区二区| 日韩精品91亚洲二区在线观看| 亚洲国产成人av网| 天堂在线亚洲视频| 精品亚洲欧美一区| 国产精品亚洲午夜一区二区三区| 国产精品综合二区| 成人高清免费观看| 一本大道综合伊人精品热热 | 91精品国产综合久久久久| 欧美精品一卡二卡| 久久综合中文字幕| 国产精品家庭影院| 午夜久久久影院| 久久国产视频网| 成人开心网精品视频| 91在线观看地址| 91精品国产综合久久福利软件| 这里只有精品免费| 久久新电视剧免费观看| 亚洲欧美在线高清| 日韩中文字幕亚洲一区二区va在线| 久久精品99国产国产精| av电影在线观看不卡| 欧美在线免费观看亚洲| 欧美酷刑日本凌虐凌虐| 亚洲精品一区二区三区99| 国产精品久久久久aaaa| 视频一区视频二区中文字幕| 国产一区二区不卡在线 | 亚洲欧美欧美一区二区三区| 日本中文字幕一区二区有限公司| 韩国三级中文字幕hd久久精品| 99国内精品久久| 日韩欧美国产wwwww| 亚洲欧美色图小说| 国产一区二区三区国产| 欧美体内she精高潮| 久久久久9999亚洲精品| 日韩国产精品久久| 99久久精品国产网站| 国产精品丝袜黑色高跟| 亚洲国产综合色| 波多野结衣在线一区| 日韩一区二区三区视频在线观看| 中文字幕一区二区三区在线观看 | 欧美日韩国产小视频在线观看| 久久综合久久综合久久综合| 亚洲成人综合网站| 99re66热这里只有精品3直播| 91精品国产色综合久久不卡电影| 亚洲日本免费电影| 丁香网亚洲国际| 精品成人一区二区三区四区| 亚洲18影院在线观看| 在线精品国精品国产尤物884a| 国产精品水嫩水嫩| 懂色av一区二区三区免费看| 日韩欧美国产综合| 开心九九激情九九欧美日韩精美视频电影 | 亚洲精选在线视频| 9人人澡人人爽人人精品| 国产欧美一区二区在线| 极品少妇xxxx精品少妇偷拍| 日韩一区二区三区高清免费看看| 日日夜夜免费精品视频| 欧美色图12p| 天堂成人国产精品一区| 欧美精品久久99| 日日噜噜夜夜狠狠视频欧美人| 欧美三级在线视频| 亚洲国产成人av| 69p69国产精品| 蜜臀久久99精品久久久久久9| 91精品视频网| 久久不见久久见中文字幕免费| 欧美一卡二卡三卡四卡| 九九视频精品免费| 国产日本亚洲高清| 成人精品免费网站| 日韩一区中文字幕| 欧美亚洲丝袜传媒另类| 亚洲午夜一区二区| 日韩一区二区三区免费看| 国产一区三区三区| 国产精品久久久久9999吃药| 欧美性三三影院| 另类专区欧美蜜桃臀第一页| 久久一二三国产| 91在线视频免费观看| 亚洲一级二级在线| 精品女同一区二区| 91在线观看污| 丝袜亚洲另类丝袜在线| 精品少妇一区二区三区视频免付费| 国产在线不卡视频| 亚洲精品视频在线观看网站| 欧美少妇一区二区| 国模少妇一区二区三区| 国产精品视频看| 欧美日韩一区精品| 国产乱人伦精品一区二区在线观看| 自拍偷拍亚洲激情| 日韩精品一区二区三区中文精品| 国产91精品精华液一区二区三区| 亚洲国产aⅴ天堂久久| 精品av久久707| 欧美在线免费观看亚洲| 色av成人天堂桃色av| 久久国产精品99久久久久久老狼 | 洋洋av久久久久久久一区| 日韩视频免费观看高清在线视频| 高清成人免费视频| 三级在线观看一区二区| 国产精品久久久久久久久晋中 | 91香蕉视频mp4| 狠狠色狠狠色合久久伊人| 亚洲自拍偷拍麻豆| 国产欧美精品国产国产专区| 欧美久久久久久久久中文字幕| 懂色av中文一区二区三区| 天堂va蜜桃一区二区三区 | 久久综合资源网| 日韩亚洲欧美综合| 欧美视频一区二区在线观看| 丁香网亚洲国际| 国产精品影视网| 久久er99热精品一区二区| 亚洲第一二三四区| 一区二区视频在线| 国产精品国产三级国产aⅴ原创| 欧美r级电影在线观看| 91精品国产91热久久久做人人| 色综合婷婷久久| 不卡av在线免费观看| 国产一级精品在线| 精品在线免费视频| 久久精品国产亚洲5555| 午夜电影一区二区三区| 午夜日韩在线电影| 三级久久三级久久| 日韩电影一区二区三区| 秋霞午夜av一区二区三区| 手机精品视频在线观看| 日本亚洲最大的色成网站www| 亚洲午夜精品在线| 日韩和欧美一区二区三区| 日韩在线一区二区三区| 免费成人深夜小野草| 经典三级在线一区| 国产精品一区二区三区乱码| 国产aⅴ综合色| 99热在这里有精品免费| 91行情网站电视在线观看高清版| 色哟哟亚洲精品| 欧洲日韩一区二区三区| 91麻豆精品91久久久久同性| 欧美大黄免费观看| 久久精品免视看| 中文字幕在线观看不卡| 亚洲精品免费一二三区| 偷拍与自拍一区| 蜜桃av一区二区三区| 国产成人av一区| 91蜜桃婷婷狠狠久久综合9色| 日本精品视频一区二区| 91精品国产一区二区三区| 精品1区2区在线观看| 国产精品亲子伦对白| 亚洲国产精品一区二区久久恐怖片| 午夜av一区二区三区| 久久99九九99精品| 成人国产精品免费观看| 欧美日韩日日夜夜| 亚洲精品一区在线观看| 亚洲va中文字幕| 国产综合色在线| 色狠狠色噜噜噜综合网| 欧美高清精品3d| 国产女主播视频一区二区| 亚洲一级二级在线| 国产精品亚洲第一区在线暖暖韩国 | 久久国产精品99久久久久久老狼| 福利一区二区在线| 在线播放国产精品二区一二区四区| 欧美成人一区二区三区| 亚洲免费观看视频| 激情综合色播激情啊| 色欧美88888久久久久久影院| 日韩欧美电影一区| 亚洲精品欧美激情| 国产 欧美在线| 日韩欧美在线综合网|