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 &params, 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");
    }
}
Example #6
0
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++;
    }

}