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

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

?? mld6igmp_vif.cc

?? MLDv2 support igmpv3 lite
?? CC
?? 第 1 頁 / 共 4 頁
字號:
    bool check_src_linklocal_unicast = false;    bool allow_src_zero_address = false;    bool check_dst_multicast = false;    bool check_group_interfacelocal_multicast = false;    bool decode_extra_fields = false;        //    // Message length check.    //    if (BUFFER_DATA_SIZE(buffer) < mld6igmp_constant_minlen()) {	error_msg = c_format("RX packet from %s to %s on vif %s: "			     "too short data field (%u octets)",			     cstring(src), cstring(dst),			     name().c_str(),			     XORP_UINT_CAST(BUFFER_DATA_SIZE(buffer)));	XLOG_WARNING("%s", error_msg.c_str());	return (XORP_ERROR);    }        //    // Checksum verification.    //    cksum = inet_checksum(BUFFER_DATA_HEAD(buffer), BUFFER_DATA_SIZE(buffer));#ifdef HAVE_IPV6    // Add the checksum for the IPv6 pseudo-header    if (proto_is_mld6()) {	uint16_t cksum2;	size_t ph_len = BUFFER_DATA_SIZE(buffer);	cksum2 = calculate_ipv6_pseudo_header_checksum(src, dst, ph_len,						       IPPROTO_ICMPV6);	cksum = inet_checksum_add(cksum, cksum2);    }#endif // HAVE_IPV6    if (cksum) {	error_msg = c_format("RX packet from %s to %s on vif %s: "			     "checksum error",			     cstring(src), cstring(dst),			     name().c_str());	XLOG_WARNING("%s", error_msg.c_str());	return (XORP_ERROR);    }        //    // Protocol version check.    //    // XXX: MLD and IGMP messages do not have an explicit field for protocol    // version. Protocol version check is performed later, per (some) message    // type.    //        //    // Get the message type and the max. resp. time (in case of IGMP).    //    // Note that in case of IGMP the max. resp. time is the `igmp_code' field    // in `struct igmp'.    //    if (proto_is_igmp()) {	BUFFER_GET_OCTET(message_type, buffer);	BUFFER_GET_OCTET(max_resp_code, buffer);	BUFFER_GET_SKIP(2, buffer);		// The checksum    }    if (proto_is_mld6()) {	BUFFER_GET_OCTET(message_type, buffer);	BUFFER_GET_SKIP(1, buffer);		// The `Code' field: unused	BUFFER_GET_SKIP(2, buffer);		// The `Checksum' field    }    XLOG_TRACE(mld6igmp_node().is_log_trace(),	       "RX %s from %s to %s on vif %s",	       proto_message_type2ascii(message_type),	       cstring(src), cstring(dst),	       name().c_str());    //    // Ignore messages that are not recognized by older protocol version.    //    // XXX: Unrecognized message types MUST be silently ignored.    //    if (proto_is_igmp()) {	switch (message_type) {	case IGMP_MEMBERSHIP_QUERY:	    // Recognized by IGMPv1, IGMPv2, IGMPv3	    break;	case IGMP_V1_MEMBERSHIP_REPORT:	    // Recognized by IGMPv1, IGMPv2, IGMPv3	    break;	case IGMP_V2_MEMBERSHIP_REPORT:	    // Recognized by IGMPv2, IGMPv3	    if (is_igmpv1_mode())		return (XORP_ERROR);	    break;	case IGMP_V2_LEAVE_GROUP:	    // Recognized by IGMPv2, IGMPv3	    if (is_igmpv1_mode())		return (XORP_ERROR);	    break;	case IGMP_V3_MEMBERSHIP_REPORT:	    // Recognized by IGMPv3	    if (is_igmpv1_mode() || is_igmpv2_mode())		return (XORP_ERROR);	    break;	case IGMP_DVMRP:	case IGMP_MTRACE:	    break;	default:	    // Unrecognized message	    return (XORP_ERROR);	}    }    if (proto_is_mld6()) {	switch (message_type) {	case MLD_LISTENER_QUERY:	    // Recognized by MLDv1, MLDv2	    break;	case MLD_LISTENER_REPORT:	    // Recognized by MLDv1, MLDv2	    break;	case MLD_LISTENER_DONE:	    // Recognized by MLDv1, MLDv2	    break;	case MLDV2_LISTENER_REPORT:	    // Recognized by MLDv2	    if (is_mldv1_mode())		return (XORP_ERROR);	    break;	case MLD_MTRACE:	    break;	default:	    // Unrecognized message	    return (XORP_ERROR);	}    }    //    // Assign various flags what needs to be checked, based on the    // message type:    //  - check_router_alert_option    //  - check_src_linklocal_unicast    //  - allow_src_zero_address    //  - check_dst_multicast    //  - check_group_interfacelocal_multicast    //  - decode_extra_fields    //    if (proto_is_igmp()) {	switch (message_type) {	case IGMP_MEMBERSHIP_QUERY:	case IGMP_V1_MEMBERSHIP_REPORT:	case IGMP_V2_MEMBERSHIP_REPORT:	case IGMP_V2_LEAVE_GROUP:	case IGMP_V3_MEMBERSHIP_REPORT:	    if (_ip_router_alert_option_check.get())		check_router_alert_option = true;	    check_src_linklocal_unicast = false;	// Not needed for IPv4	    if (is_igmpv3_mode()) {		if ((message_type == IGMP_V1_MEMBERSHIP_REPORT)		    || (message_type == IGMP_V2_MEMBERSHIP_REPORT)		    || (message_type == IGMP_V3_MEMBERSHIP_REPORT)) {		    allow_src_zero_address = true;	// True only for IGMPv3		}	    }	    check_dst_multicast = true;	    if (is_igmpv3_mode())		check_dst_multicast = false;		// XXX: disable	    check_group_interfacelocal_multicast = false;// Not needed for IPv4	    decode_extra_fields = true;	    if (message_type == IGMP_V3_MEMBERSHIP_REPORT)		decode_extra_fields = false;	    break;	case IGMP_DVMRP:	case IGMP_MTRACE:	    // TODO: Assign the flags as appropriate	    break;	default:	    break;	}    }    if (proto_is_mld6()) {	switch (message_type) {	case MLD_LISTENER_QUERY:	case MLD_LISTENER_REPORT:	case MLD_LISTENER_DONE:	case MLDV2_LISTENER_REPORT:	    check_router_alert_option = true;	    check_src_linklocal_unicast = true;	    allow_src_zero_address = false;		// Always false for MLD	    check_dst_multicast = true;	    if (is_mldv2_mode())		check_dst_multicast = false;		// XXX: disable	    check_group_interfacelocal_multicast = true;	    decode_extra_fields = true;	    if (message_type == MLDV2_LISTENER_REPORT)		decode_extra_fields = false;	    break;	case MLD_MTRACE:	    // TODO: Assign the flags as appropriate	    break;	default:	    break;	}    }    //    // Decode the extra fields: the max. resp. time (in case of MLD),    // and the group address.    //    if (decode_extra_fields) {	if (proto_is_igmp()) {	    BUFFER_GET_IPVX(family(), group_address, buffer);	}	if (proto_is_mld6()) {	    BUFFER_GET_HOST_16(max_resp_code, buffer);	    BUFFER_GET_SKIP(2, buffer);		// The `Reserved' field	    BUFFER_GET_IPVX(family(), group_address, buffer);	}    }    //    // IP Router Alert option check.    //    if (check_router_alert_option && (! ip_router_alert)) {	error_msg = c_format("RX %s from %s to %s on vif %s: "			     "missing IP Router Alert option",			     proto_message_type2ascii(message_type),			     cstring(src), cstring(dst),			     name().c_str());	XLOG_WARNING("%s", error_msg.c_str());	return (XORP_ERROR);    }    //    // TODO: check the TTL, TOS and ip_internet_control flag if we are    // running in secure mode.    //    UNUSED(ip_ttl);    UNUSED(ip_tos);    UNUSED(ip_internet_control);#if 0    if (ip_ttl != MINTTL) {	error_msg = c_format("RX %s from %s to %s on vif %s: "			     "ip_ttl = %d instead of %d",			     proto_message_type2ascii(message_type),			     cstring(src), cstring(dst),			     name().c_str(),			     ip_ttl, MINTTL);	XLOG_WARNING("%s", error_msg.c_str());	return (XORP_ERROR);    }#endif // 0        //    // Source address check.    //    if (! src.is_unicast()) {	//	// Source address must always be unicast.	// The kernel should have checked that, but just in case...	//	error_msg = c_format("RX %s from %s to %s on vif %s: "			     "source must be unicast",			     proto_message_type2ascii(message_type),			     cstring(src), cstring(dst),			     name().c_str());	XLOG_WARNING("%s", error_msg.c_str());	return (XORP_ERROR);    }    if (src.af() != family()) {	// Invalid source address family	XLOG_WARNING("RX %s from %s to %s on vif %s: "		     "invalid source address family "		     "(received %d expected %d)",		     proto_message_type2ascii(message_type),		     cstring(src), cstring(dst),		     name().c_str(),		     src.af(), family());    }    // Source address must be directly connected    if (! mld6igmp_node().is_directly_connected(*this, src)) {	error_msg = c_format("RX %s from %s to %s on vif %s: "			     "source must be directly connected",			     proto_message_type2ascii(message_type),			     cstring(src), cstring(dst),			     name().c_str());	XLOG_WARNING("%s", error_msg.c_str());	return (XORP_ERROR);    }    if (check_src_linklocal_unicast) {	if (src.is_linklocal_unicast()	    || (allow_src_zero_address && src.is_zero())) {	    // The source address is link-local or (allowed) zero address	} else {	    // The source address is not link-local	    error_msg = c_format("RX %s from %s to %s on vif %s: "				 "source is not a link-local address",				 proto_message_type2ascii(message_type),				 cstring(src), cstring(dst),				 name().c_str());	    XLOG_WARNING("%s", error_msg.c_str());	    return (XORP_ERROR);	}    }    //    // Destination address check.    //    if (dst.af() != family()) {	// Invalid destination address family	XLOG_WARNING("RX %s from %s to %s on vif %s: "		     "invalid destination address family "		     "(received %d expected %d)",		     proto_message_type2ascii(message_type),		     cstring(src), cstring(dst),		     name().c_str(),		     dst.af(), family());    }    if (check_dst_multicast && (! dst.is_multicast())) {	// The destination address is not multicast	error_msg = c_format("RX %s from %s to %s on vif %s: "			     "destination must be multicast. "			     "Packet ignored.",			     proto_message_type2ascii(message_type),			     cstring(src), cstring(dst),			     name().c_str());	XLOG_WARNING("%s", error_msg.c_str());	return (XORP_ERROR);    }    //    // Inner multicast address scope check.    //    if (check_group_interfacelocal_multicast	&& group_address.is_interfacelocal_multicast()) {	error_msg = c_format("RX %s from %s to %s on vif %s: "			     "invalid interface-local scope of inner "			     "multicast address: %s",			     proto_message_type2ascii(message_type),			     cstring(src), cstring(dst),			     name().c_str(),			     cstring(group_address));	XLOG_WARNING("%s", error_msg.c_str());	return (XORP_ERROR);    }    //    // Origin router neighbor check.    //    // XXX: in IGMP and MLD we don't need such check        //    // Process each message, based on its type.    //    if (proto_is_igmp()) {	switch (message_type) {	case IGMP_MEMBERSHIP_QUERY:	    mld6igmp_membership_query_recv(src, dst,					   message_type, max_resp_code,					   group_address, buffer);	    break;	case IGMP_V1_MEMBERSHIP_REPORT:	case IGMP_V2_MEMBERSHIP_REPORT:	    mld6igmp_membership_report_recv(src, dst,					    message_type, max_resp_code,					    group_address, buffer);	    break;	case IGMP_V2_LEAVE_GROUP:	    mld6igmp_leave_group_recv(src, dst,				      message_type, max_resp_code,				      group_address, buffer);	    break;	case IGMP_V3_MEMBERSHIP_REPORT:	    mld6igmp_ssm_membership_report_recv(src, dst, message_type,						buffer);	    break;	case IGMP_DVMRP:	{	    //	    // XXX: We care only about the DVMRP messages that are used	    // by mrinfo.	    //	    // XXX: the older purpose of the 'igmp_code' field	    uint16_t igmp_code = max_resp_code;	    switch (igmp_code) {	    case DVMRP_ASK_NEIGHBORS:		// Some old DVMRP messages from mrinfo(?).		// TODO: not implemented yet.		// TODO: do we really need this message implemented?		break;	    case DVMRP_ASK_NEIGHBORS2:		// Used for mrinfo support.		// XXX: not implemented yet.		break;	    case DVMRP_INFO_REQUEST:		// Information request (TODO: used by mrinfo?)		// TODO: not implemented yet.		break;	    default:		// XXX: We don't care about the rest of the DVMRP_* messages		break;	    }	}	case IGMP_MTRACE:	    // TODO: is this the new message sent by 'mtrace'?	    // TODO: not implemented yet.	    break;	default:	    // XXX: Unrecognized message types MUST be silently ignored.	    break;	}    }    if (proto_is_mld6()) {	switch (message_type) {	case MLD_LISTENER_QUERY:	    mld6igmp_membership_query_recv(src, dst,					   message_type, max_resp_code,					   group_address, buffer);	    break;	case MLD_LISTENER_REPORT:	    mld6igmp_membership_report_recv(src, dst,					    message_type, max_resp_code,					    group_address, buffer);	    break;	case MLD_LISTENER_DONE:	    mld6igmp_leave_group_recv(src, dst,				      message_type, max_resp_code,				      group_address, buffer);	    break;	case MLDV2_LISTENER_REPORT:	    mld6igmp_ssm_membership_report_recv(src, dst, message_type,						buffer);	    break;	case MLD_MTRACE:	    // TODO: is this the new message sent by 'mtrace'?	    // TODO: not implemented yet.	    break;	default:	    // XXX: Unrecognized message types MUST be silently ignored.	    break;	}    }    return (XORP_OK); rcvlen_error:    XLOG_UNREACHABLE();    error_msg = c_format("RX packet from %s to %s on vif %s: "			 "some fields are too short",			 cstring(src), cstring(dst),			 name().c_str());    XLOG_WARNING("%s", error_msg.c_str());    return (XORP_ERROR);}/** * Mld6igmpVif::update_primary_address: * @error_msg: The error message (if error). *  * Update the primary address. *  * The primary address should be a link-local unicast address, and * is used for transmitting the multicast control packets on the LAN. *  * Return value: %XORP_OK on success, otherwise %XORP_ERROR. **/intMld6igmpVif::update_primary_address(string& error_msg){    bool i_was_querier = false;    IPvX primary_a(IPvX::ZERO(family()));    IPvX domain_wide_a(IPvX::ZERO(family()));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国产自产拍高清av| 日本特黄久久久高潮| 精品嫩草影院久久| 日韩女优制服丝袜电影| 欧美大白屁股肥臀xxxxxx| 日韩欧美不卡在线观看视频| 日韩美一区二区三区| 久久久久久一二三区| 久久久久久久久久久久电影| 国产欧美久久久精品影院| 中文字幕精品一区| 亚洲欧洲国产专区| 亚洲一区二区高清| 五月婷婷久久丁香| 麻豆专区一区二区三区四区五区| 白白色亚洲国产精品| 国产精品18久久久久久久久| 成人国产精品视频| 色悠悠亚洲一区二区| 在线观看一区二区视频| 91精品国产综合久久精品app| 欧美成人激情免费网| 国产亚洲精品超碰| 亚洲三级免费电影| 亚洲成av人片| 极品少妇一区二区| eeuss鲁一区二区三区| 欧美午夜精品久久久久久超碰| 3751色影院一区二区三区| 欧美精品一区二区久久久| 中文字幕成人av| 一区二区三区在线视频观看58| 日本成人中文字幕在线视频| 国产成人亚洲综合色影视| 91丝袜美女网| 91精品蜜臀在线一区尤物| 国产三级欧美三级日产三级99| 亚洲视频资源在线| 日本系列欧美系列| 成熟亚洲日本毛茸茸凸凹| 欧美伊人久久久久久久久影院 | 欧美日本一区二区在线观看| 欧美成人女星排行榜| 国产精品色噜噜| 亚洲18色成人| 国产91精品免费| 欧美精品丝袜中出| 欧美国产一区二区在线观看| 精品国产123| 一区二区欧美在线观看| 国产一区二区三区香蕉| 欧美无砖专区一中文字| 国产日产亚洲精品系列| 亚洲国产精品一区二区久久| 国产麻豆精品一区二区| 欧美老女人在线| 国产精品免费视频一区| 乱一区二区av| 欧美日韩一区二区欧美激情| 国产精品全国免费观看高清| 蜜桃精品视频在线| 色天天综合色天天久久| 久久婷婷国产综合国色天香| 天堂成人国产精品一区| 91色porny蝌蚪| 久久综合九色综合欧美98| 视频一区欧美精品| 色偷偷一区二区三区| 国产午夜精品一区二区三区嫩草| 日韩精品电影一区亚洲| 91麻豆成人久久精品二区三区| 精品嫩草影院久久| 日韩精品久久理论片| 欧美这里有精品| 国产精品理论片在线观看| 国内外成人在线视频| 欧美电影在哪看比较好| 一区二区欧美国产| 99这里只有久久精品视频| 亚洲成人动漫精品| proumb性欧美在线观看| 久久久不卡影院| 国内精品在线播放| 欧美一级一级性生活免费录像| 一区二区三区日韩欧美| 99精品桃花视频在线观看| 国产日韩欧美在线一区| 国产精品中文字幕日韩精品| 精品奇米国产一区二区三区| 蜜臀a∨国产成人精品| 7799精品视频| 亚洲国产精品一区二区久久| 欧美亚一区二区| 亚洲国产毛片aaaaa无费看| 色哟哟国产精品| 亚洲伦理在线免费看| 色综合久久综合网97色综合| 亚洲视频每日更新| 99re热这里只有精品视频| 国产精品沙发午睡系列990531| 国产馆精品极品| 国产性色一区二区| 国产69精品一区二区亚洲孕妇| 国产蜜臀97一区二区三区| 国产成人综合在线观看| 久久久噜噜噜久久人人看| 国产精品一区二区在线播放| 国产视频一区不卡| aaa欧美大片| 亚洲午夜免费电影| 欧美日韩免费观看一区二区三区 | 国产一区免费电影| 久久久精品蜜桃| 成人妖精视频yjsp地址| 亚洲婷婷国产精品电影人久久| 97精品视频在线观看自产线路二| 亚洲欧美一区二区三区久本道91| 色婷婷综合中文久久一本| 一区二区三区高清不卡| 91麻豆精品久久久久蜜臀| 蜜臀av国产精品久久久久| 久久久久国色av免费看影院| 成人av综合一区| 亚洲一区二区在线免费观看视频| 91麻豆精品91久久久久久清纯| 毛片av一区二区| 欧美国产欧美综合| 欧美亚洲动漫制服丝袜| 久久精品国产99久久6| 国产亚洲综合在线| 色先锋久久av资源部| 日本在线不卡视频| 久久久亚洲精品石原莉奈| eeuss国产一区二区三区| 亚洲国产精品视频| 久久影院午夜片一区| 97精品国产露脸对白| 日韩精品色哟哟| 国产精品视频一二| 欧美影视一区二区三区| 黑人巨大精品欧美黑白配亚洲| 国产精品福利av| 欧美精品 日韩| 国产suv精品一区二区883| 亚洲猫色日本管| 精品久久国产老人久久综合| 色呦呦一区二区三区| 极品美女销魂一区二区三区免费| 国产精品久久久久影院色老大| 9191精品国产综合久久久久久 | 国产精品色呦呦| 欧美久久久久久蜜桃| 成人综合在线网站| 亚洲福利一二三区| 国产亚洲一二三区| 欧美日韩视频在线第一区 | 国产99久久久国产精品潘金 | 欧美制服丝袜第一页| 国产毛片精品一区| 亚洲综合色丁香婷婷六月图片| 久久久综合视频| 欧美日韩另类国产亚洲欧美一级| 国产盗摄一区二区| 五月开心婷婷久久| 国产精品福利影院| 久久综合色一综合色88| 欧美日韩亚洲另类| 成人久久视频在线观看| 另类欧美日韩国产在线| 夜夜精品浪潮av一区二区三区| 欧美美女一区二区| 激情综合色丁香一区二区| 亚洲综合色婷婷| 国产精品久久三区| 久久伊人蜜桃av一区二区| 欧美日本视频在线| 91首页免费视频| 国产999精品久久| 另类专区欧美蜜桃臀第一页| 亚洲一区二区四区蜜桃| 亚洲色图一区二区三区| 国产拍揄自揄精品视频麻豆| 日韩欧美一级特黄在线播放| 欧美三级电影精品| 色中色一区二区| 91丨国产丨九色丨pron| 国产成a人亚洲| 国产在线一区观看| 免费在线看成人av| 五月天激情小说综合| 亚洲成人av中文| 亚洲一区二区偷拍精品| 夜夜嗨av一区二区三区四季av| 中文字幕一区二区三区在线观看 | 国产伦精品一区二区三区视频青涩| 日本不卡一区二区| 五月天一区二区三区| 亚洲成人精品一区二区| 亚洲一卡二卡三卡四卡无卡久久 | 日韩高清欧美激情|