void TrexRpcCommand::validate_port_id(uint8_t port_id, Json::Value &result) { if (port_id >= get_stateless_obj()->get_port_count()) { std::stringstream ss; ss << "invalid port id - should be between 0 and " << (int)get_stateless_obj()->get_port_count() - 1; generate_execute_err(result, ss.str()); } }
/************************* messages from DP to CP **********************/ bool TrexDpPortEventMsg::handle() { TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(m_port_id); port->get_dp_events().handle_event(m_event_type, m_thread_id, m_event_id); return (true); }
/************************* messages from DP to CP **********************/ bool TrexDpPortEventMsg::handle() { TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(m_port_id); port->get_dp_events().on_core_reporting_in(m_event_id, m_thread_id, get_status()); return (true); }
void TrexDpPortEvents::barrier() { /* simulator will be stuck here forever */ #ifdef TREX_SIM return; #endif int barrier_id = create_event(new DPBarrier()); TrexStatelessCpToDpMsgBase *barrier_msg = new TrexStatelessDpBarrier(m_port->m_port_id, barrier_id); m_port->send_message_to_all_dp(barrier_msg); get_stateless_obj()->get_platform_api()->flush_dp_messages(); while (lookup(barrier_id) != NULL) { delay(1); get_stateless_obj()->get_platform_api()->flush_dp_messages(); } }
void TrexRpcCommand::verify_ownership(const Json::Value ¶ms, Json::Value &result) { std::string handler = parse_string(params, "handler", result); uint8_t port_id = parse_port(params, result); TrexStatelessPort *port = get_stateless_obj()->get_port_by_id(port_id); if (port->get_owner().is_free()) { generate_execute_err(result, "please acquire the port before modifying port state"); } if (!port->get_owner().verify(handler)) { generate_execute_err(result, "port is not owned by you or your current executing session"); } }
void CFlowStatRuleMgr::create() { uint16_t num_counters, cap; TrexStateless *tstateless = get_stateless_obj(); assert(tstateless); m_api = tstateless->get_platform_api(); assert(m_api); m_api->get_interface_stat_info(0, num_counters, cap); m_api->get_port_num(m_num_ports); for (uint8_t port = 0; port < m_num_ports; port++) { assert(m_api->reset_hw_flow_stats(port) == 0); } m_ring_to_rx = CMsgIns::Ins()->getCpRx()->getRingCpToDp(0); assert(m_ring_to_rx); m_rx_core = get_rx_sl_core_obj(); m_parser = m_api->get_flow_stat_parser(); assert(m_parser); m_cap = cap; }
/** * method name and params * */ TrexRpcCommand::TrexRpcCommand(const std::string &method_name, int param_count, bool needs_ownership, APIClass::type_e type) : m_name(method_name), m_param_count(param_count), m_needs_ownership(needs_ownership) { /* if needs ownership - another field is needed (handler) */ if (m_needs_ownership) { m_param_count++; } /* API verification */ m_api_type = type; if (type != APIClass::API_CLASS_TYPE_NO_API) { m_api_handler = get_stateless_obj()->get_api_handler(type); m_param_count++; } }