⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xrl_target.c

📁 BCAST Implementation for NS2
💻 C
📖 第 1 页 / 共 4 页
字号:
    if (memcmp(&sca, &ca, sizeof(sca))) {	return XrlCmdError::COMMAND_FAILED("Failed to set one or more "					   "attributes");    }    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_delete_area(				    // Input values, 				    const uint32_t&	area_id) {    FAST_FAIL_ON_NO_OSPF();    CfgArea ca;    ca.area_id = area_id;    ospf()->cfgArea(&ca, DELETE_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_query_area(				   // Input values, 				   const uint32_t&	area_id, 				   // Output values, 				   bool&	is_stub, 				   uint32_t&	default_cost, 				   bool&	import_summary_routes) {    FAST_FAIL_ON_NO_OSPF();    CfgArea ca;    if (ospf()->qryArea(ca, area_id) == false) {	return XrlCmdError::COMMAND_FAILED("No area matching area_id");    }    is_stub	 	  = ca.stub;    default_cost 	  = ca.dflt_cost;    import_summary_routes = ca.import_summs;    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_list_area_ids(				      // Output values, 				      XrlAtomList&	area_ids) {	    FAST_FAIL_ON_NO_OSPF();    list<CfgArea> lca;    ospf()->getAreas(lca);    list<CfgArea>::const_iterator ci = lca.begin();    while (ci != lca.end()) {	area_ids.append(XrlAtom(ci->area_id));	ci++;    }    return XrlCmdError::OKAY();}// ----------------------------------------------------------------------------// Aggregate configuration methodsXrlCmdErrorXrlOspfTarget::ospf_0_1_add_or_configure_aggregate(	// Input values, 	const uint32_t&	area_id, 	const IPv4&	network, 	const IPv4&	netmask, 	const bool&	suppress_advertisement){    FAST_FAIL_ON_NO_OSPF();    CfgRnge cr;    cr.area_id = area_id;    cr.net     = network.addr();    cr.mask    = netmask.addr();    cr.no_adv  = suppress_advertisement;    ospf()->cfgRnge(&cr, ADD_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_delete_aggregate(	// Input values, 	const uint32_t&	area_id, 	const IPv4&	network, 	const IPv4&	netmask){    FAST_FAIL_ON_NO_OSPF();    CfgRnge cr;    cr.area_id = area_id;    cr.net     = network.addr();    cr.mask    = netmask.addr();    ospf()->cfgRnge(&cr, DELETE_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_query_aggregate(	// Input values, 	const uint32_t&	area_id, 	const IPv4&	network, 	const IPv4&	netmask, 	// Output values, 	bool&	suppress_advertisement){    FAST_FAIL_ON_NO_OSPF();    CfgRnge cr;    cr.area_id = area_id;    cr.net     = network.addr();    cr.mask    = netmask.addr();    if (ospf()->qryRnge(cr, cr.area_id, cr.net, cr.mask)) {	return XrlCmdError::COMMAND_FAILED("Aggregate does not exist.");    }    suppress_advertisement = cr.no_adv;    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_list_aggregates(	// Input values, 	const uint32_t&	area_id, 	// Output values, 	XrlAtomList&	networks, 	XrlAtomList&	netmasks){    FAST_FAIL_ON_NO_OSPF();    list<CfgRnge> lcr;    ospf()->getRnges(lcr, area_id);    list<CfgRnge>::const_iterator ci = lcr.begin();    while (ci != lcr.end()) {	IPv4 network(ci->net);	networks.append(XrlAtom(network));		IPv4 netmask(ci->mask);	netmasks.append(XrlAtom(netmask));	ci++;    }        return XrlCmdError::OKAY();}// ----------------------------------------------------------------------------// Host configuration methodsXrlCmdErrorXrlOspfTarget::ospf_0_1_add_or_configure_host(	// Input values, 	const IPv4&	network, 	const IPv4&	netmask, 	const uint32_t&	area_id, 	const uint32_t&	cost){    FAST_FAIL_ON_NO_OSPF();    if (cost > 65535) {	return XrlCmdError::COMMAND_FAILED("Cost must be within the range "					   "0-65535.");    }        CfgArea ca;    if (ospf()->qryArea(ca, area_id) == false) {	return XrlCmdError::COMMAND_FAILED("No area matching area_id");    }    CfgHost ch;    ch.net     = network.addr();    ch.mask    = netmask.addr();    ch.area_id = area_id;    ch.cost    = (uns16)cost;    ospf()->cfgHost(&ch, ADD_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_delete_host(	// Input values, 	const IPv4&	network, 	const IPv4&	netmask, 	const uint32_t&	area_id){    FAST_FAIL_ON_NO_OSPF();    CfgHost ch;    ch.net     = network.addr();    ch.mask    = netmask.addr();    ch.area_id = area_id;    ospf()->cfgHost(&ch, DELETE_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_query_host(	// Input values, 	const IPv4&	network, 	const IPv4&	netmask, 	const uint32_t&	area_id, 	// Output values, 	uint32_t&	cost){    FAST_FAIL_ON_NO_OSPF();    CfgHost ch;    if (ospf()->qryHost(ch, area_id, 			network.addr(), netmask.addr()) == false) {	return XrlCmdError::COMMAND_FAILED("Host not found inside area");    }    cost = ch.cost;    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_list_hosts(	// Input values, 	const uint32_t&	area_id, 	// Output values, 	XrlAtomList&	networks, 	XrlAtomList&	netmasks){    FAST_FAIL_ON_NO_OSPF();    list<CfgHost> lch;    ospf()->getHosts(lch, area_id);    list<CfgHost>::const_iterator ci = lch.begin();    while (ci != lch.end()) {	IPv4 network(ci->net);	networks.append(XrlAtom(network));		IPv4 netmask(ci->mask);	netmasks.append(XrlAtom(netmask));	ci++;    }    return XrlCmdError::OKAY();}// ----------------------------------------------------------------------------// Virtual Link configuration methods/* Accessor helper macros */#define OSPF_VLINK_SET_FIELD(desc, trans_id, nbr_id, param, field, max_val)   \    CfgVL cv;								      \    if (ospf()->qryVL(cv, trans_id, nbr_id) == false) {			      \	return XrlCmdError::COMMAND_FAILED("No virtual link matching transit" \					   "id and neighbor id");	      \    }									      \    if (param > max_val) {						      \	return XrlCmdError::COMMAND_FAILED("Parameter " #desc " should be in" \				           " range 0 to " #max_val ".");      \    }									      \    cv.field = param;							      \    ospf()->cfgVL(&cv, ADD_ITEM);#define OSPF_VLINK_GET_FIELD(desc, trans_id, nbr_id, param, field)	      \    CfgVL cv;								      \    if (ospf()->qryVL(cv, trans_id, nbr_id) == false) {			      \	return XrlCmdError::COMMAND_FAILED("No virtual link matching transit" \			       	       	   "id and neighbor id");	      \    }									      \    param = cv.field;							      \XrlCmdErrorXrlOspfTarget::ospf_0_1_add_vlink(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id){    FAST_FAIL_ON_NO_OSPF();    CfgVL cv;    cv.transit_area = transit_area;    cv.nbr_id       = neighbor_id;    // Fill in defaults    cv.xmt_dly	    = 5;    cv.rxmt_int	    = 10;    cv.hello_int    = 30;    cv.dead_int     = 180;    cv.auth_type    = AUT_NONE;    memset(cv.auth_key, 0, sizeof(cv.auth_key));    ospf()->cfgVL(&cv, ADD_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_delete_vlink(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id){    FAST_FAIL_ON_NO_OSPF();    CfgVL cv;    cv.transit_area = transit_area;    cv.nbr_id       = neighbor_id;    ospf()->cfgVL(&cv, DELETE_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_set_transmit_delay(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	const uint32_t&	delay_secs){    FAST_FAIL_ON_NO_OSPF();    OSPF_VLINK_SET_FIELD("transmit delay", transit_area, neighbor_id, 			 delay_secs, xmt_dly, 255);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_get_transmit_delay(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	// Output values, 	uint32_t&	delay_secs){    FAST_FAIL_ON_NO_OSPF();    OSPF_VLINK_GET_FIELD("transmit delay", transit_area, neighbor_id, 			 delay_secs, xmt_dly);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_set_retransmit_interval(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	const uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    OSPF_VLINK_SET_FIELD("retransmit interval", transit_area, neighbor_id, 			 interval_secs, rxmt_int, 255);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_get_retransmit_interval(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	// Output values, 	uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    OSPF_VLINK_GET_FIELD("retransmit interval", transit_area, neighbor_id, 			 interval_secs, rxmt_int);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_set_hello_interval(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	const uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    OSPF_VLINK_SET_FIELD("hello interval", transit_area, neighbor_id, 			 interval_secs, hello_int, 65535);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_get_hello_interval(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	// Output values, 	uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    OSPF_VLINK_GET_FIELD("hello interval", transit_area, neighbor_id, 			 interval_secs, hello_int);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_set_router_dead_interval(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	const uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    OSPF_VLINK_SET_FIELD("dead interval", transit_area, neighbor_id, 			 interval_secs, dead_int, 65535);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_get_router_dead_interval(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	// Output values, 	uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    OSPF_VLINK_GET_FIELD("dead interval", transit_area, neighbor_id, 			 interval_secs, dead_int);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_set_authentication(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	const string&	type, 	const string&	key){    FAST_FAIL_ON_NO_OSPF();    CfgVL cv;    if (ospf()->qryVL(cv, transit_area, neighbor_id) == false) {	return XrlCmdError::COMMAND_FAILED("No virtual link matching transit "					   "id and neighbor id");    }    const NamedEnumItem* nei = crypt_enum.item_by_name(type.c_str());    if (nei == 0) {	string oi = "Authentication type should be either ";		oi += crypt_enum.names();	return XrlCmdError::COMMAND_FAILED(oi);    }    cv.auth_type = nei->value();    for (uint32_t i = 0; i < sizeof(cv.auth_key); i++) {	cv.auth_key[i] = (i < key.size()) ? key[i] : 0;    }    ospf()->cfgVL(&cv, ADD_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_vlink_get_authentication(	// Input values, 	const uint32_t&	transit_area, 	const uint32_t&	neighbor_id, 	// Output values, 	string&	type, 	string&	key){    FAST_FAIL_ON_NO_OSPF();    CfgVL cv;    if (ospf()->qryVL(cv, transit_area, neighbor_id) == false) {	return XrlCmdError::COMMAND_FAILED("No virtual link matching transit "					   "id and neighbor id");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -