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

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

?? mld6igmp_node_cli.cc

?? MLDv2 support igmpv3 lite
?? CC
字號(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.//// The Lightweight IGMP/MLD modifications to this file are copyrighted by://// Copyright (c) 2008 Huawei Technologies Co. Ltd//#ident "$XORP: xorp/contrib/mld6igmp_lite/mld6igmp_node_cli.cc,v 1.3 2008/07/23 05:09:49 pavlin Exp $"//// MLD6IGMP protocol CLI implementation//#include "mld6igmp_module.h"#include "libxorp/xorp.h"#include "libxorp/xlog.h"#include "libxorp/debug.h"#include "libxorp/ipvx.hh"#include "mld6igmp_group_record.hh"#include "mld6igmp_node.hh"#include "mld6igmp_node_cli.hh"#include "mld6igmp_vif.hh"//// Exported variables////// Local constants definitions////// Local structures/classes, typedefs and macros////// Local variables////// Local functions prototypes///** * Mld6igmpNodeCli::Mld6igmpNodeCli: * @mld6igmp_node: The MLD6IGMP node to use. *  * Mld6igmpNodeCli constructor. **/Mld6igmpNodeCli::Mld6igmpNodeCli(Mld6igmpNode& mld6igmp_node)    : ProtoNodeCli(mld6igmp_node.family(), mld6igmp_node.module_id()),      _mld6igmp_node(mld6igmp_node){}Mld6igmpNodeCli::~Mld6igmpNodeCli(){    stop();}intMld6igmpNodeCli::start(){    if (! is_enabled())	return (XORP_OK);    if (is_up() || is_pending_up())	return (XORP_OK);    if (ProtoUnit::start() != XORP_OK)	return (XORP_ERROR);    if (add_all_cli_commands() != XORP_OK)	return (XORP_ERROR);    XLOG_INFO("CLI started");    return (XORP_OK);}intMld6igmpNodeCli::stop(){    int ret_code = XORP_OK;    if (is_down())	return (XORP_OK);    if (delete_all_cli_commands() != XORP_OK)	ret_code = XORP_ERROR;    XLOG_INFO("CLI stopped");    return (ret_code);}/** * Enable the node operation. *  * If an unit is not enabled, it cannot be start, or pending-start. */voidMld6igmpNodeCli::enable(){    ProtoUnit::enable();    XLOG_INFO("CLI enabled");}/** * Disable the node operation. *  * If an unit is disabled, it cannot be start or pending-start. * If the unit was runnning, it will be stop first. */voidMld6igmpNodeCli::disable(){    stop();    ProtoUnit::disable();    XLOG_INFO("CLI disabled");}intMld6igmpNodeCli::add_all_cli_commands(){    // XXX: command "show" must have been installed by the CLI itself.        if (mld6igmp_node().proto_is_igmp()) {	add_cli_dir_command("show igmp", "Display information about IGMP");		add_cli_command("show igmp group",			"Display information about IGMP group membership",			callback(this, &Mld6igmpNodeCli::cli_show_mld6igmp_group));	add_cli_command("show igmp interface",			"Display information about IGMP interfaces",			callback(this, &Mld6igmpNodeCli::cli_show_mld6igmp_interface));	add_cli_command("show igmp interface address",			"Display information about addresses of IGMP interfaces",			callback(this, &Mld6igmpNodeCli::cli_show_mld6igmp_interface_address));    }    if (mld6igmp_node().proto_is_mld6()) {	add_cli_dir_command("show mld", "Display information about MLD");		add_cli_command("show mld group",			"Display information about MLD group membership",			callback(this, &Mld6igmpNodeCli::cli_show_mld6igmp_group));	add_cli_command("show mld interface",			"Display information about MLD interfaces",			callback(this, &Mld6igmpNodeCli::cli_show_mld6igmp_interface));	add_cli_command("show mld interface address",			"Display information about addresses of MLD interfaces",			callback(this, &Mld6igmpNodeCli::cli_show_mld6igmp_interface_address));    }        return (XORP_OK);}//// CLI COMMAND: "show mld interface [interface-name]"// CLI COMMAND: "show igmp interface [interface-name]"//// Display information about the interfaces on which MLD/IGMP is configured.//intMld6igmpNodeCli::cli_show_mld6igmp_interface(const vector<string>& argv){    string interface_name;        // Check the optional argument    if (argv.size()) {	interface_name = argv[0];	if (mld6igmp_node().vif_find_by_name(interface_name.c_str()) == NULL) {	    cli_print(c_format("ERROR: Invalid interface name: %s\n",			       interface_name.c_str()));	    return (XORP_ERROR);	}    }        cli_print(c_format("%-12s %-8s %-15s %7s %7s %6s\n",		       "Interface", "State", "Querier",		       "Timeout", "Version", "Groups"));    for (uint32_t i = 0; i < mld6igmp_node().maxvifs(); i++) {	Mld6igmpVif *mld6igmp_vif = mld6igmp_node().vif_find_by_vif_index(i);	if (mld6igmp_vif == NULL)	    continue;	// Test if we should print this entry	bool do_print = true;	if (interface_name.size()) {	    do_print = false;	    if (mld6igmp_vif->name() == interface_name) {		do_print = true;	    }	}	if (! do_print)	    continue;	string querier_timeout_sec_string;	if (mld6igmp_vif->const_other_querier_timer().scheduled()) {	    TimeVal tv;	    mld6igmp_vif->const_other_querier_timer().time_remaining(tv);	    querier_timeout_sec_string = c_format("%d",						  XORP_INT_CAST(tv.sec()));	} else {	    querier_timeout_sec_string = "None";	}		cli_print(c_format("%-12s %-8s %-15s %7s %7d %6u\n",			   mld6igmp_vif->name().c_str(),			   mld6igmp_vif->state_str().c_str(),			   cstring(mld6igmp_vif->querier_addr()),			   querier_timeout_sec_string.c_str(),			   mld6igmp_vif->proto_version(),			   XORP_UINT_CAST(mld6igmp_vif->group_records().size())));    }        return (XORP_OK);}//// CLI COMMAND: "show mld interface address [interface-name]"// CLI COMMAND: "show igmp interface address [interface-name]"//// Display information about the addresses of MLD/IGMP interfaces//intMld6igmpNodeCli::cli_show_mld6igmp_interface_address(const vector<string>& argv){    string interface_name;    // Check the optional argument    if (argv.size()) {	interface_name = argv[0];	if (mld6igmp_node().vif_find_by_name(interface_name) == NULL) {	    cli_print(c_format("ERROR: Invalid interface name: %s\n",			       interface_name.c_str()));	    return (XORP_ERROR);	}    }        cli_print(c_format("%-12s %-15s %-15s\n",		       "Interface", "PrimaryAddr", "SecondaryAddr"));    for (uint32_t i = 0; i < mld6igmp_node().maxvifs(); i++) {	Mld6igmpVif *mld6igmp_vif = mld6igmp_node().vif_find_by_vif_index(i);	if (mld6igmp_vif == NULL)	    continue;	// Test if we should print this entry	bool do_print = true;	if (interface_name.size()) {	    do_print = false;	    if (mld6igmp_vif->name() == interface_name) {		do_print = true;	    }	}	if (! do_print)	    continue;		//	// Create a list with all secondary addresses	//	list<IPvX> secondary_addr_list;	list<VifAddr>::const_iterator vif_addr_iter;	for (vif_addr_iter = mld6igmp_vif->addr_list().begin();	     vif_addr_iter != mld6igmp_vif->addr_list().end();	     ++vif_addr_iter) {	    const VifAddr& vif_addr = *vif_addr_iter;	    if (vif_addr.addr() == mld6igmp_vif->primary_addr())		continue;	    secondary_addr_list.push_back(vif_addr.addr());	}	cli_print(c_format("%-12s %-15s %-15s\n",			   mld6igmp_vif->name().c_str(),			   cstring(mld6igmp_vif->primary_addr()),			   (secondary_addr_list.size())?			   cstring(secondary_addr_list.front()): ""));	// Pop the first secondary address	if (secondary_addr_list.size())	    secondary_addr_list.pop_front();	//	// Print the rest of the secondary addresses	//	list<IPvX>::iterator secondary_addr_iter;	for (secondary_addr_iter = secondary_addr_list.begin();	     secondary_addr_iter != secondary_addr_list.end();	     ++secondary_addr_iter) {	    IPvX& secondary_addr = *secondary_addr_iter;	    cli_print(c_format("%-12s %-15s %-15s\n",			       " ",			       " ",			       cstring(secondary_addr)));	}    }        return (XORP_OK);}//// CLI COMMAND: "show mld group [group-name [...]]"// CLI COMMAND: "show igmp group [group-name [...]]"//// Display information about MLD/IGMP group membership.//intMld6igmpNodeCli::cli_show_mld6igmp_group(const vector<string>& argv){    vector<IPvX> groups;        // Check the (optional) arguments, and create an array of groups to test    for (size_t i = 0; i < argv.size(); i++) {	try {	    IPvX g(argv[i].c_str());	    if (g.af() != family()) {		cli_print(c_format("ERROR: Address with invalid address family: %s\n",				   argv[i].c_str()));		return (XORP_ERROR);	    }	    if (! g.is_multicast()) {		cli_print(c_format("ERROR: Not a multicast address: %s\n",				   argv[i].c_str()));		return (XORP_ERROR);	    }	    groups.push_back(g);	} catch (InvalidString) {	    cli_print(c_format("ERROR: Invalid IP address: %s\n",			       argv[i].c_str()));	    return (XORP_ERROR);	}    }        cli_print(c_format("%-12s %-15s %-15s %-12s %7s %1s %5s\n",		       "Interface", "Group", "Source",		       "LastReported", "Timeout", "V", "State"));    for (uint32_t i = 0; i < mld6igmp_node().maxvifs(); i++) {	const Mld6igmpVif *mld6igmp_vif = mld6igmp_node().vif_find_by_vif_index(i);	if (mld6igmp_vif == NULL)	    continue;	Mld6igmpGroupSet::const_iterator group_iter;	for (group_iter = mld6igmp_vif->group_records().begin();	     group_iter != mld6igmp_vif->group_records().end();	     ++group_iter) {	    const Mld6igmpGroupRecord *group_record = group_iter->second;	    Mld6igmpSourceSet::const_iterator source_iter;	    int version = 0;	    string state;	    // Test if we should print this entry	    bool do_print = true;	    if (groups.size()) {		do_print = false;		for (size_t j = 0; j < groups.size(); j++) {		    if (groups[j] == group_record->group()) {			do_print = true;			break;		    }		}	    }	    if (! do_print)		continue;	    // Calcuate the group entry version	    do {		version = 0;		if (mld6igmp_vif->is_igmpv1_mode(group_record)) {		    version = 1;		    break;		}		if (mld6igmp_vif->is_igmpv2_mode(group_record)) {		    version = 2;		    break;		}		if (mld6igmp_vif->is_igmpv3_mode(group_record)) {		    version = 3;		    break;		}		if (mld6igmp_vif->is_mldv1_mode(group_record)) {		    version = 1;		    break;		}		if (mld6igmp_vif->is_mldv2_mode(group_record)) {		    version = 2;		    break;		}		break;	    } while (false);	    XLOG_ASSERT(version > 0);	    //	    // The state:	    // - "I" = INCLUDE (for group entry)	    // - "E" = EXCLUDE (for group entry)	    // - "F" = Forward (for source entry)	    // - "D" = Don't forward (for source entry)	    //	    // The group state	    if (group_record->is_include_mode())		state = "I";	    if (group_record->is_asm_mode())		state = "E";	    // Print the group-specific output	    cli_print(c_format("%-6s %-15s %-15s %-12s %7d %1d %2s %5d %5d\n",			       mld6igmp_vif->name().c_str(),			       cstring(group_record->group()),			       cstring(IPvX::ZERO(family())),			       cstring(group_record->last_reported_host()),			       XORP_INT_CAST(group_record->timeout_sec()),			       version, state.c_str(),			       XORP_INT_CAST(group_record->igmpv1_host_present_timer_timeout_sec()),			       XORP_INT_CAST(group_record->igmpv2_mldv1_host_present_timer_timeout_sec())			  ));	    // Print the sources to forward	    state = "F";	    for (source_iter = group_record->do_forward_sources().begin();		 source_iter != group_record->do_forward_sources().end();		 ++source_iter) {		const Mld6igmpSourceRecord *source_record = source_iter->second;		cli_print(c_format("%-12s %-15s %-15s %-12s %7d %1d %5s\n",				   mld6igmp_vif->name().c_str(),				   cstring(group_record->group()),				   cstring(source_record->source()),				   cstring(group_record->last_reported_host()),				   XORP_INT_CAST(source_record->timeout_sec()),				   version, state.c_str()));	    }	}    }        return (XORP_OK);}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合成人在线视频| 一区二区三区国产豹纹内裤在线| 91同城在线观看| 青青草91视频| 亚洲欧美日韩久久精品| 26uuu国产一区二区三区| 欧美在线观看一区| 顶级嫩模精品视频在线看| 一区二区三区欧美亚洲| 国产精品乱子久久久久| 日韩欧美色电影| 欧美日韩一区二区在线观看视频| 高清不卡在线观看| 久久超碰97中文字幕| 性久久久久久久久久久久| 亚洲色图丝袜美腿| 中文字幕欧美日本乱码一线二线 | 欧美性受xxxx| 国产jizzjizz一区二区| 免费日韩伦理电影| 亚洲风情在线资源站| 亚洲精品视频在线看| 欧美国产日韩一二三区| 久久久久久97三级| 精品国产露脸精彩对白| 欧美色电影在线| eeuss国产一区二区三区| 丝袜诱惑亚洲看片| 中文字幕亚洲综合久久菠萝蜜| 在线成人免费观看| 国产精品免费av| 精品国内片67194| 欧美性受xxxx| 91国产精品成人| youjizz国产精品| 国产精品伊人色| 老司机精品视频在线| 亚洲视频精选在线| 久久精品一区二区| 2欧美一区二区三区在线观看视频| 成人激情小说网站| 国产一区二区三区香蕉| 偷窥少妇高潮呻吟av久久免费| 国产精品久久久久天堂| 专区另类欧美日韩| 中文字幕在线一区二区三区| 日韩欧美国产麻豆| 欧美一区二区三区播放老司机| 在线观看欧美黄色| 欧洲色大大久久| 色www精品视频在线观看| 91网站黄www| 91亚洲国产成人精品一区二三| 成人av网站在线| 成年人网站91| 91啪在线观看| 91精彩视频在线| 一本久久精品一区二区| 91蜜桃网址入口| 色播五月激情综合网| 色综合久久88色综合天天免费| 99精品国产热久久91蜜凸| 99麻豆久久久国产精品免费| 99久久免费视频.com| 色综合婷婷久久| 欧美午夜电影在线播放| 欧洲亚洲国产日韩| 日韩视频一区二区三区在线播放| 日韩欧美一二三| 久久久www免费人成精品| 国产日产欧美一区二区三区| 国产精品视频观看| 国产精品久久久久aaaa| 亚洲精品精品亚洲| 午夜一区二区三区在线观看| 奇米影视一区二区三区小说| 精品一区二区三区欧美| 风间由美一区二区三区在线观看| 成人免费毛片片v| 91网页版在线| 7777女厕盗摄久久久| 久久亚洲影视婷婷| 欧美激情在线观看视频免费| 中文字幕一区二区日韩精品绯色| 亚洲综合在线五月| 韩国成人福利片在线播放| 国产91高潮流白浆在线麻豆| 91色|porny| 日韩精品影音先锋| 国产精品免费av| 亚洲成人综合在线| 国产一区二区免费在线| 播五月开心婷婷综合| 欧美视频在线一区二区三区| 欧美成人一区二区| 成人免费一区二区三区视频| 婷婷丁香久久五月婷婷| 国产成人精品综合在线观看| 成人一道本在线| 欧美日韩综合在线| 久久久精品黄色| 一区二区三区日韩精品视频| 精品伊人久久久久7777人| 成人激情黄色小说| 欧美日韩成人一区二区| 国产情人综合久久777777| 亚洲高清免费在线| 国产成人午夜片在线观看高清观看| 欧美亚洲动漫精品| 久久精品一区蜜桃臀影院| 亚洲成人激情自拍| 成人av电影在线| 日韩欧美色电影| 亚洲嫩草精品久久| 大陆成人av片| 精品美女被调教视频大全网站| 艳妇臀荡乳欲伦亚洲一区| 国产精品亚洲午夜一区二区三区| 欧美午夜一区二区三区免费大片| 国产日产欧美一区| 久久精品国产免费看久久精品| 一本色道久久综合亚洲91| 久久久蜜桃精品| 青椒成人免费视频| 在线精品视频一区二区三四| 国产精品视频一二三区| 国内精品久久久久影院薰衣草| 色婷婷精品久久二区二区蜜臀av| 欧美老人xxxx18| 亚洲欧洲av在线| 国产成人啪免费观看软件| 91精品国产色综合久久久蜜香臀| 亚洲综合免费观看高清完整版在线 | 555夜色666亚洲国产免| 国产精品不卡视频| 国产精品18久久久久久久网站| 日韩一区二区在线播放| 五月天激情综合网| 99久久免费精品高清特色大片| 精品国产凹凸成av人导航| 久久99国产精品免费网站| 欧美精品v国产精品v日韩精品| 亚洲精品中文在线影院| av在线播放不卡| 中文字幕视频一区二区三区久| 懂色av一区二区夜夜嗨| 欧美激情一区不卡| 成人一区二区三区视频在线观看| 久久嫩草精品久久久精品| 91在线你懂得| 国产精品麻豆欧美日韩ww| 成人一区二区三区视频在线观看 | 精品国产一区二区三区不卡| 日韩高清不卡一区| 91精品国产色综合久久| 日本不卡在线视频| 欧美一区二区三区四区在线观看| 爽爽淫人综合网网站| 欧美一区二区三区爱爱| 奇米888四色在线精品| 日韩三级视频在线看| 精品系列免费在线观看| 2017欧美狠狠色| 久久精品国产精品亚洲精品| 99国产精品国产精品毛片| 一区二区高清视频在线观看| 欧美性videosxxxxx| 日本中文字幕不卡| 久久人人爽人人爽| 成人黄色免费短视频| 亚洲免费视频成人| 欧美日韩一区不卡| 日韩电影在线一区二区三区| 日韩精品一区二区三区四区| 国产高清在线观看免费不卡| 久久精品亚洲精品国产欧美 | 亚洲欧美国产77777| 91网站视频在线观看| 亚洲成人动漫在线观看| 日韩一区二区在线播放| 成人小视频在线| 国产精品久久久久久久蜜臀| 在线成人av影院| 国产精品一区二区黑丝| 成人欧美一区二区三区白人 | 欧美一级搡bbbb搡bbbb| 美女在线观看视频一区二区| 国产欧美视频一区二区三区| 91蝌蚪porny| 美国毛片一区二区| 中文字幕在线不卡一区| 欧美亚洲日本国产| 久久精品国产亚洲高清剧情介绍| 国产精品日日摸夜夜摸av| 精品视频999| 国产成人免费视频网站高清观看视频| 国产精品国产三级国产| 日韩欧美中文字幕一区| 91免费观看视频在线| 免费久久99精品国产|