bgp_xif.cc
来自「BCAST Implementation for NS2」· CC 代码 · 共 1,241 行 · 第 1/2 页
CC
1,241 行
} else if (a && a->size() != 1) { XLOG_ERROR("Wrong number of arguments (%u != 1)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } IPv4 peer_id; try { a->get("peer_id", peer_id); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } cb->dispatch(e, &peer_id);}boolXrlBgpV0p2Client::send_get_peer_status( const char* the_tgt, const IPv4& local_ip, const uint32_t& local_port, const IPv4& peer_ip, const uint32_t& peer_port, const GetPeerStatusCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_peer_status"); x.args().add("local_ip", local_ip); x.args().add("local_port", local_port); x.args().add("peer_ip", peer_ip); x.args().add("peer_port", peer_port); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_peer_status, cb));}/* Unmarshall get_peer_status */voidXrlBgpV0p2Client::unmarshall_get_peer_status( const XrlError& e, XrlArgs* a, GetPeerStatusCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0, 0); return; } else if (a && a->size() != 2) { XLOG_ERROR("Wrong number of arguments (%u != 2)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0, 0); return; } uint32_t peer_state; uint32_t admin_status; try { a->get("peer_state", peer_state); a->get("admin_status", admin_status); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0, 0); return; } cb->dispatch(e, &peer_state, &admin_status);}boolXrlBgpV0p2Client::send_get_peer_negotiated_version( const char* the_tgt, const IPv4& local_ip, const uint32_t& local_port, const IPv4& peer_ip, const uint32_t& peer_port, const GetPeerNegotiatedVersionCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_peer_negotiated_version"); x.args().add("local_ip", local_ip); x.args().add("local_port", local_port); x.args().add("peer_ip", peer_ip); x.args().add("peer_port", peer_port); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_peer_negotiated_version, cb));}/* Unmarshall get_peer_negotiated_version */voidXrlBgpV0p2Client::unmarshall_get_peer_negotiated_version( const XrlError& e, XrlArgs* a, GetPeerNegotiatedVersionCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0); return; } else if (a && a->size() != 1) { XLOG_ERROR("Wrong number of arguments (%u != 1)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } int32_t neg_version; try { a->get("neg_version", neg_version); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } cb->dispatch(e, &neg_version);}boolXrlBgpV0p2Client::send_get_peer_as( const char* the_tgt, const IPv4& local_ip, const uint32_t& local_port, const IPv4& peer_ip, const uint32_t& peer_port, const GetPeerAsCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_peer_as"); x.args().add("local_ip", local_ip); x.args().add("local_port", local_port); x.args().add("peer_ip", peer_ip); x.args().add("peer_port", peer_port); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_peer_as, cb));}/* Unmarshall get_peer_as */voidXrlBgpV0p2Client::unmarshall_get_peer_as( const XrlError& e, XrlArgs* a, GetPeerAsCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0); return; } else if (a && a->size() != 1) { XLOG_ERROR("Wrong number of arguments (%u != 1)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } uint32_t peer_as; try { a->get("peer_as", peer_as); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } cb->dispatch(e, &peer_as);}boolXrlBgpV0p2Client::send_get_peer_msg_stats( const char* the_tgt, const IPv4& local_ip, const uint32_t& local_port, const IPv4& peer_ip, const uint32_t& peer_port, const GetPeerMsgStatsCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_peer_msg_stats"); x.args().add("local_ip", local_ip); x.args().add("local_port", local_port); x.args().add("peer_ip", peer_ip); x.args().add("peer_port", peer_port); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_peer_msg_stats, cb));}/* Unmarshall get_peer_msg_stats */voidXrlBgpV0p2Client::unmarshall_get_peer_msg_stats( const XrlError& e, XrlArgs* a, GetPeerMsgStatsCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0, 0, 0, 0, 0, 0); return; } else if (a && a->size() != 6) { XLOG_ERROR("Wrong number of arguments (%u != 6)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0, 0, 0, 0, 0, 0); return; } uint32_t in_updates; uint32_t out_updates; uint32_t in_msgs; uint32_t out_msgs; uint32_t last_error; uint32_t in_update_elapsed; try { a->get("in_updates", in_updates); a->get("out_updates", out_updates); a->get("in_msgs", in_msgs); a->get("out_msgs", out_msgs); a->get("last_error", last_error); a->get("in_update_elapsed", in_update_elapsed); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0, 0, 0, 0, 0, 0); return; } cb->dispatch(e, &in_updates, &out_updates, &in_msgs, &out_msgs, &last_error, &in_update_elapsed);}boolXrlBgpV0p2Client::send_get_peer_established_stats( const char* the_tgt, const IPv4& local_ip, const uint32_t& local_port, const IPv4& peer_ip, const uint32_t& peer_port, const GetPeerEstablishedStatsCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_peer_established_stats"); x.args().add("local_ip", local_ip); x.args().add("local_port", local_port); x.args().add("peer_ip", peer_ip); x.args().add("peer_port", peer_port); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_peer_established_stats, cb));}/* Unmarshall get_peer_established_stats */voidXrlBgpV0p2Client::unmarshall_get_peer_established_stats( const XrlError& e, XrlArgs* a, GetPeerEstablishedStatsCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0, 0); return; } else if (a && a->size() != 2) { XLOG_ERROR("Wrong number of arguments (%u != 2)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0, 0); return; } uint32_t transitions; uint32_t established_time; try { a->get("transitions", transitions); a->get("established_time", established_time); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0, 0); return; } cb->dispatch(e, &transitions, &established_time);}boolXrlBgpV0p2Client::send_get_peer_timer_config( const char* the_tgt, const IPv4& local_ip, const uint32_t& local_port, const IPv4& peer_ip, const uint32_t& peer_port, const GetPeerTimerConfigCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_peer_timer_config"); x.args().add("local_ip", local_ip); x.args().add("local_port", local_port); x.args().add("peer_ip", peer_ip); x.args().add("peer_port", peer_port); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_peer_timer_config, cb));}/* Unmarshall get_peer_timer_config */voidXrlBgpV0p2Client::unmarshall_get_peer_timer_config( const XrlError& e, XrlArgs* a, GetPeerTimerConfigCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0, 0, 0, 0, 0, 0, 0); return; } else if (a && a->size() != 7) { XLOG_ERROR("Wrong number of arguments (%u != 7)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0, 0, 0, 0, 0, 0, 0); return; } uint32_t retry_interval; uint32_t hold_time; uint32_t keep_alive; uint32_t hold_time_conf; uint32_t keep_alive_conf; uint32_t min_as_orgination_interval; uint32_t min_route_adv_interval; try { a->get("retry_interval", retry_interval); a->get("hold_time", hold_time); a->get("keep_alive", keep_alive); a->get("hold_time_conf", hold_time_conf); a->get("keep_alive_conf", keep_alive_conf); a->get("min_as_orgination_interval", min_as_orgination_interval); a->get("min_route_adv_interval", min_route_adv_interval); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0, 0, 0, 0, 0, 0, 0); return; } cb->dispatch(e, &retry_interval, &hold_time, &keep_alive, &hold_time_conf, &keep_alive_conf, &min_as_orgination_interval, &min_route_adv_interval);}boolXrlBgpV0p2Client::send_register_rib( const char* the_tgt, const string& name, const RegisterRibCB& cb){ Xrl x(the_tgt, "bgp/0.2/register_rib"); x.args().add("name", name); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_register_rib, cb));}/* Unmarshall register_rib */voidXrlBgpV0p2Client::unmarshall_register_rib( const XrlError& e, XrlArgs* a, RegisterRibCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e); return; } else if (a && a->size() != 0) { XLOG_ERROR("Wrong number of arguments (%u != 0)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS()); return; } cb->dispatch(e);}boolXrlBgpV0p2Client::send_add_route( const char* the_tgt, const int32_t& origin, const int32_t& asnum, const IPv4& next_hop, const IPv4Net& nlri, const AddRouteCB& cb){ Xrl x(the_tgt, "bgp/0.2/add_route"); x.args().add("origin", origin); x.args().add("asnum", asnum); x.args().add("next_hop", next_hop); x.args().add("nlri", nlri); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_add_route, cb));}/* Unmarshall add_route */voidXrlBgpV0p2Client::unmarshall_add_route( const XrlError& e, XrlArgs* a, AddRouteCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e); return; } else if (a && a->size() != 0) { XLOG_ERROR("Wrong number of arguments (%u != 0)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS()); return; } cb->dispatch(e);}boolXrlBgpV0p2Client::send_delete_route( const char* the_tgt, const IPv4Net& nlri, const DeleteRouteCB& cb){ Xrl x(the_tgt, "bgp/0.2/delete_route"); x.args().add("nlri", nlri); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_delete_route, cb));}/* Unmarshall delete_route */voidXrlBgpV0p2Client::unmarshall_delete_route( const XrlError& e, XrlArgs* a, DeleteRouteCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e); return; } else if (a && a->size() != 0) { XLOG_ERROR("Wrong number of arguments (%u != 0)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS()); return; } cb->dispatch(e);}boolXrlBgpV0p2Client::send_get_v4_route_list_start( const char* the_tgt, const GetV4RouteListStartCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_v4_route_list_start"); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_v4_route_list_start, cb));}/* Unmarshall get_v4_route_list_start */voidXrlBgpV0p2Client::unmarshall_get_v4_route_list_start( const XrlError& e, XrlArgs* a, GetV4RouteListStartCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0); return; } else if (a && a->size() != 1) { XLOG_ERROR("Wrong number of arguments (%u != 1)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } uint32_t token; try { a->get("token", token); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } cb->dispatch(e, &token);}boolXrlBgpV0p2Client::send_get_v6_route_list_start( const char* the_tgt, const GetV6RouteListStartCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_v6_route_list_start"); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_v6_route_list_start, cb));}/* Unmarshall get_v6_route_list_start */voidXrlBgpV0p2Client::unmarshall_get_v6_route_list_start( const XrlError& e, XrlArgs* a, GetV6RouteListStartCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0); return; } else if (a && a->size() != 1) { XLOG_ERROR("Wrong number of arguments (%u != 1)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } uint32_t token; try { a->get("token", token); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0); return; } cb->dispatch(e, &token);}boolXrlBgpV0p2Client::send_get_v4_route_list_next( const char* the_tgt, const uint32_t& token, const GetV4RouteListNextCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_v4_route_list_next"); x.args().add("token", token); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_v4_route_list_next, cb));}/* Unmarshall get_v4_route_list_next */voidXrlBgpV0p2Client::unmarshall_get_v4_route_list_next( const XrlError& e, XrlArgs* a, GetV4RouteListNextCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); return; } else if (a && a->size() != 12) { XLOG_ERROR("Wrong number of arguments (%u != 12)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); return; } IPv4 peer_id; IPv4Net net; uint32_t best_and_origin; vector<uint8_t> aspath; IPv4 nexthop; int32_t med; int32_t localpref; int32_t atomic_agg; vector<uint8_t> aggregator; int32_t calc_localpref; vector<uint8_t> attr_unknown; bool valid; try { a->get("peer_id", peer_id); a->get("net", net); a->get("best_and_origin", best_and_origin); a->get("aspath", aspath); a->get("nexthop", nexthop); a->get("med", med); a->get("localpref", localpref); a->get("atomic_agg", atomic_agg); a->get("aggregator", aggregator); a->get("calc_localpref", calc_localpref); a->get("attr_unknown", attr_unknown); a->get("valid", valid); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); return; } cb->dispatch(e, &peer_id, &net, &best_and_origin, &aspath, &nexthop, &med, &localpref, &atomic_agg, &aggregator, &calc_localpref, &attr_unknown, &valid);}boolXrlBgpV0p2Client::send_get_v6_route_list_next( const char* the_tgt, const uint32_t& token, const GetV6RouteListNextCB& cb){ Xrl x(the_tgt, "bgp/0.2/get_v6_route_list_next"); x.args().add("token", token); return _sender->send(x, callback(this, &XrlBgpV0p2Client::unmarshall_get_v6_route_list_next, cb));}/* Unmarshall get_v6_route_list_next */voidXrlBgpV0p2Client::unmarshall_get_v6_route_list_next( const XrlError& e, XrlArgs* a, GetV6RouteListNextCB cb){ if (e != XrlError::OKAY()) { cb->dispatch(e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); return; } else if (a && a->size() != 12) { XLOG_ERROR("Wrong number of arguments (%u != 12)", (uint32_t)a->size()); cb->dispatch(XrlError::BAD_ARGS(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); return; } IPv4 peer_id; IPv6Net net; uint32_t best_and_origin; vector<uint8_t> aspath; IPv6 nexthop; int32_t med; int32_t localpref; int32_t atomic_agg; vector<uint8_t> aggregator; int32_t calc_localpref; vector<uint8_t> attr_unknown; bool valid; try { a->get("peer_id", peer_id); a->get("net", net); a->get("best_and_origin", best_and_origin); a->get("aspath", aspath); a->get("nexthop", nexthop); a->get("med", med); a->get("localpref", localpref); a->get("atomic_agg", atomic_agg); a->get("aggregator", aggregator); a->get("calc_localpref", calc_localpref); a->get("attr_unknown", attr_unknown); a->get("valid", valid); } catch (const XrlArgs::XrlAtomNotFound&) { XLOG_ERROR("Atom not found"); cb->dispatch(XrlError::BAD_ARGS(), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); return; } cb->dispatch(e, &peer_id, &net, &best_and_origin, &aspath, &nexthop, &med, &localpref, &atomic_agg, &aggregator, &calc_localpref, &attr_unknown, &valid);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?