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