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

📄 xrl_target.c

📁 BCAST Implementation for NS2
💻 C
📖 第 1 页 / 共 4 页
字号:
    }    const NamedEnumItem* nei = crypt_enum.item(cv.auth_type);    if (0 == nei) {	string oops = c_format("Internal value \"%d\" is not in known "			       "enumerated values ", cv.auth_type);	oops += crypt_enum.values();	return XrlCmdError::COMMAND_FAILED(oops);    }    type = nei->name();    char s[sizeof(cv.auth_key) + 1];    memcpy(s, cv.auth_key, sizeof(cv.auth_key));    s[sizeof(cv.auth_key)] = 0;    key = s;    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_list_vlinks(	// Input values, 	const uint32_t&	transit_id, 	// Output values, 	XrlAtomList&	neighbor_ids){    FAST_FAIL_ON_NO_OSPF();    list<CfgVL> lcv;    ospf()->getVLs(lcv, transit_id);    for (list<CfgVL>::iterator i = lcv.begin(); i != lcv.end(); i++) {	neighbor_ids.append(XrlAtom(i->nbr_id));    }    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_add_or_configure_external_route(	// Input values, 	const IPv4Net&	network, 	const IPv4&	gateway, 	const uint32_t&	type, 	const uint32_t&	cost, 	const bool&	multicast, 	const uint32_t&	external_route_tag) {    FAST_FAIL_ON_NO_OSPF();    if (type != 1 || type != 2) {	return XrlCmdError::COMMAND_FAILED("External route type must be "					   "1 or 2");    }    if (cost > 65535) {	return XrlCmdError::COMMAND_FAILED("External route cost must be "					   "between 0 and 65535");    }    CfgExRt ce;    ce.net	= network.masked_addr().addr();    ce.mask	= IPv4::make_prefix(network.prefix_len()).addr();    ce.type2	= (type == 2) ? true : false;    ce.mc	= multicast;    ce.direct	= 0;    ce.noadv	= 0;    ce.cost	= cost;    ce.gw	= gateway.addr();    ce.phyint	= _xorp_ospfd.get_phyint(ce.gw);    ce.tag	= external_route_tag;    ospf()->cfgExRt(&ce, ADD_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_delete_external_route(	// Input values, 	const IPv4Net&	network, 	const IPv4&	gateway) {    FAST_FAIL_ON_NO_OSPF();    CfgExRt ce;    ce.net	= network.masked_addr().addr();    ce.mask	= IPv4::make_prefix(network.prefix_len()).addr();    ce.gw	= gateway.addr();    ce.phyint	= _xorp_ospfd.get_phyint(ce.gw);    ospf()->cfgExRt(&ce, DELETE_ITEM);    return XrlCmdError::OKAY();}XrlCmdErrorXrlOspfTarget::ospf_0_1_query_external_route(	// Input values, 	const IPv4Net&	network, 	const IPv4&	gateway, 	// Output values, 	uint32_t&	type, 	uint32_t&	cost, 	bool&		multicast, 	uint32_t&	external_route_tag) {    FAST_FAIL_ON_NO_OSPF();    CfgExRt ce;    ce.net	= network.masked_addr().addr();    ce.mask	= IPv4::make_prefix(network.prefix_len()).addr();    ce.gw	= gateway.addr();    ce.phyint	= _xorp_ospfd.get_phyint(ce.gw);    if (ospf()->qryExRt(ce, ce.net, ce.mask, ce.gw, ce.phyint) == false) {	return XrlCmdError::COMMAND_FAILED("External route not found.");    }    type	       = (ce.type2) ? 2 : 1;    cost	       = ce.cost;    multicast	       = ce.mc;    external_route_tag = ce.tag;    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_list_external_routes(	// Input values, 	const IPv4Net&	network, 	// Output values, 	XrlAtomList&	gateways){    FAST_FAIL_ON_NO_OSPF();    InAddr net  = network.masked_addr().addr();    InMask mask = IPv4::make_prefix(network.prefix_len()).addr();    list<CfgExRt> l;    ospf()->getExRts(l, net, mask);    for (list<CfgExRt>::const_iterator ci = l.begin(); ci != l.end(); ci++) {	gateways.append(XrlAtom(IPv4(ci->gw)));    }    return XrlCmdError::OKAY();}// ----------------------------------------------------------------------------// OSPF Interface configuration#define FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, bsdphyint)	      \    in_addr addr;							      \    BSDPhyInt* bsdphyint;						      \    if (!_xorp_ospfd.parse_interface(identifier.c_str(), addr, bsdphyint)) {  \	string r = c_format("Interface %s not known.", identifier.c_str());   \	return XrlCmdError::COMMAND_FAILED(r);				      \    }#define OSPF_INTERFACE_GET_FIELD(bsdphyint, var, field)			      \    CfgIfc m;								      \    if (!ospf()->qryIfc(m, bsdphyint->get_addr(),bsdphyint->get_phyint())) {  \	return XrlCmdError::COMMAND_FAILED("Failed to get config");	      \    }									      \    var = m.field;#define OSPF_INTERFACE_SET_FIELD(bsdphyint, field, var)			      \    CfgIfc m;								      \    if (!ospf()->qryIfc(m, bsdphyint->get_addr(),bsdphyint->get_phyint())) {  \	return XrlCmdError::COMMAND_FAILED("Failed to get config");	      \    }									      \    m.field = var;							      \    ospf()->cfgIfc(&m, ADD_ITEM);					      \    if (!ospf()->qryIfc(m, bsdphyint->get_addr(),bsdphyint->get_phyint())) {  \	return XrlCmdError::COMMAND_FAILED("Failed to get config (2)");	      \    }									      \    if (var != m.field)							      \	return XrlCmdError::COMMAND_FAILED("Set failed.");XrlCmdError XrlOspfTarget::ospf_0_1_add_interface(	// Input values, 	const string&	identifier, 	const uint32_t&	if_index, 	const uint32_t&	area_id, 	const uint32_t&	cost, 	const uint32_t&	mtu, 	const string&	type, 	const bool&	on_demand, 	const bool&	passive){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    const NamedEnumItem* nei = if_type_enum.item_by_name(type.c_str());    if (0 == nei) {	string hey = "Interface type should be either ";	hey += if_type_enum.names();	return XrlCmdError::COMMAND_FAILED(hey);    }    CfgIfc m;    m.address 	= phyp->get_addr();    m.phyint  	= phyp->get_phyint();    m.mask    	= phyp->get_mask();    m.mtu     	= (mtu) ? mtu : phyp->get_mtu();    m.IfIndex 	= if_index;    m.area_id 	= area_id;    m.IfType  	= nei->value();    m.demand  	= on_demand;    m.passive 	= passive;    m.if_cost	= cost;    // Values initial defaults set for (hopefully sane)    m.dr_pri	= 1;    m.xmt_dly	= 5;    m.rxmt_int	= 10;    m.hello_int	= 30;    m.dead_int	= 180;    m.auth_type = AUT_NONE;    memset(m.auth_key, 0, sizeof(m.auth_key));    m.mc_fwd	= IF_MCFWD_UNI;    m.igmp	= 0;    ospf()->cfgIfc(&m, ADD_ITEM);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_if_index(	// Input values, 	const string&	identifier, 	const uint32_t&	index){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_SET_FIELD(phyp, IfIndex, index);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_if_index(	// Input values, 	const string&	identifier, 	// Output values, 	uint32_t&	index){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_GET_FIELD(phyp, index, IfIndex);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_area_id(	// Input values, 	const string&	identifier, 	const uint32_t&	area_id){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_SET_FIELD(phyp, area_id, area_id);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_area_id(	// Input values, 	const string&	identifier, 	// Output values, 	uint32_t&	area_id){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_GET_FIELD(phyp, area_id, area_id);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_cost(	// Input values, 	const string&	identifier, 	const uint32_t&	cost){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_SET_FIELD(phyp, if_cost, cost);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_cost(	// Input values, 	const string&	identifier, 	// Output values, 	uint32_t&	cost){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_GET_FIELD(phyp, cost, if_cost);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_mtu(	// Input values, 	const string&	identifier, 	const uint32_t&	mtu){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_SET_FIELD(phyp, mtu, mtu);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_mtu(	// Input values, 	const string&	identifier, 	// Output values, 	uint32_t&	mtu){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_GET_FIELD(phyp, mtu, mtu);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_type(	// Input values, 	const string&	identifier, 	const string&	type){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    const NamedEnumItem* nei = if_type_enum.item_by_name(type.c_str());    if (0 == nei) {	string hey = "Interface type should be either ";	hey += if_type_enum.names();	return XrlCmdError::COMMAND_FAILED(hey);    }    OSPF_INTERFACE_SET_FIELD(phyp, IfType, nei->value());    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_type(	// Input values, 	const string&	identifier, 	// Output values, 	string&	type){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    CfgIfc m;      if (!ospf()->qryIfc(m, phyp->get_addr(), phyp->get_phyint())) {	return XrlCmdError::COMMAND_FAILED("Failed to get config");    }    const NamedEnumItem* nei = if_type_enum.item(m.IfType);    if (0 == nei) {	string oops = c_format("Internal value \"%d\" is not in known "			       "enumerated values ", m.IfType);	oops += if_type_enum.values();	return XrlCmdError::COMMAND_FAILED(oops);    }    type = nei->name();    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_dr_priority(	// Input values, 	const string&	identifier, 	const uint32_t&	dr_priority){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_SET_FIELD(phyp, dr_pri, dr_priority);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_dr_priority(	// Input values, 	const string&	identifier, 	// Output values, 	uint32_t&	dr_priority){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_GET_FIELD(phyp, dr_priority, dr_pri);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_transit_delay(	// Input values, 	const string&	identifier, 	const uint32_t&	delay_secs){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_SET_FIELD(phyp, xmt_dly, delay_secs);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_transit_delay(	// Input values, 	const string&	identifier, 	// Output values, 	uint32_t&	delay_secs){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_GET_FIELD(phyp, delay_secs, xmt_dly);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_retransmit_interval(	// Input values, 	const string&	identifier, 	const uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_SET_FIELD(phyp, rxmt_int, interval_secs);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_retransmit_interval(	// Input values, 	const string&	identifier, 	// Output values, 	uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_GET_FIELD(phyp, interval_secs, rxmt_int);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_set_router_dead_interval(	// Input values, 	const string&	identifier, 	const uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_SET_FIELD(phyp, dead_int, interval_secs);    return XrlCmdError::OKAY();}XrlCmdError XrlOspfTarget::ospf_0_1_interface_get_router_dead_interval(	// Input values, 	const string&	identifier, 	// Output values, 	uint32_t&	interval_secs){    FAST_FAIL_ON_NO_OSPF();    FAST_FAIL_ON_UNKNOWN_INTERFACE(identifier, addr, phyp);    OSPF_INTERFACE_GET_FIELD(phyp, interval_secs, dead_int);    return XrlCmdError::OKAY();}

⌨️ 快捷键说明

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