📄 xrl_target.c
字号:
} 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 + -