Exemplo n.º 1
0
void UnknownCommand::Response::add_data(IpmiMessage& msg) {
    auto data = msg.get_data();

    data[OFFSET_CC] = uint8_t(m_cc);

    msg.add_len(get_len());
}
Exemplo n.º 2
0
void SourceSelector::Response::add_data(IpmiMessage& msg) {
    auto data = msg.get_data();

    data[OFFSET_CC] = uint8_t(m_cc);
    data[OFFSET_REVISTION] = m_param_revision;
    data[OFFSET_SOURCE] = m_source;

    msg.add_len(get_len());
}
Exemplo n.º 3
0
void UnknownCommand::pack(IpmiMessage& msg){

    log_debug(LOGUSR, "Packing unknown message.");

    m_response.set_cc(CompletionCode::CC_INVALID_CMD);

    msg.set_to_response();
    m_response.set_len(CMD_RESPONSE_DATA_LENGHT);
    m_response.add_data(msg);
}
void SetAuthorizationCertificate::pack(IpmiMessage& msg){
    log_debug(LOGUSR, "Packing Set Authorization Certificate message.");

    if(CompletionCode::CC_OK != m_response.get_cc()) {
        return;
    }

    msg.set_cc(CompletionCode::CC_OK);
    msg.set_to_response();

    Certificate& cert = CertificateManager::get_instance()->
                    get_certificate((m_request.get_certificate_type()));
    cert.add_chunk(m_request.get_certificate_length(),
                   m_request.get_current_chunk_number(),
                   m_request.get_certificate_data());

    m_response.set_len(CMD_RESPONSE_DATA_LENGHT);
    m_response.add_data(msg);
}
Exemplo n.º 5
0
void SourceSelector::pack(IpmiMessage& msg){
    m_response.set_cc(CompletionCode::CC_OK);

    try {
        auto source = network_utils::get_source(network_utils::get_network_interface());

        m_response.set_source(static_cast<std::uint8_t>(source));
    }  catch (const std::runtime_error& e) {
        m_response.set_cc(CompletionCode::CC_CANNOT_RETURN_REQ_DATA);
        log_debug(LOGUSR, "Cannot read interface source!" << e.what());
    }

    m_response.set_len(CMD_RESPONSE_DATA_LENGHT);
    m_response.add_data(msg);
    msg.set_to_response();
}
void SetAuthorizationCertificate::unpack(IpmiMessage& msg){
    log_debug(LOGUSR, "Unpacking Set Authorization Certificate message.");
    msg.set_to_request();

    // verify if the request is long enough
    if (CMD_REQUEST_HEADER_LENGTH + CMD_REQUEST_MIN_CHUNK_LENGTH >
                (msg.get_len() - IPMB_FRAME_HDR_WITH_DATA_CHCKSUM_LEN)) {
        log_error(GET_LOGGER("ipmb"), "Invalid request length.");
        m_response.set_cc(CompletionCode::CC_REQ_DATA_LENGTH_INVALID);
        return;
    }

    auto data = msg.get_data();
    if (data) {
        log_debug(GET_LOGGER("ipmb"), "Validating length.");
        // verify if request's length is compliant with declared
        if ((CMD_REQUEST_HEADER_LENGTH + data[OFFSET_CHUNK_LEN]) <
                (msg.get_len() - IPMB_FRAME_HDR_WITH_DATA_CHCKSUM_LEN)) {
            log_error(GET_LOGGER("ipmb"), "Request is too long: " <<
                    unsigned(msg.get_len()));
            m_response.set_cc(CompletionCode::CC_REQ_DATA_FIELD_LENGTH_EXC);
            return;
        }

        if ((CMD_REQUEST_HEADER_LENGTH + data[OFFSET_CHUNK_LEN]) >
                (msg.get_len() - IPMB_FRAME_HDR_WITH_DATA_CHCKSUM_LEN)) {
            log_error(GET_LOGGER("ipmb"), "Request is too short: " <<
                    unsigned(msg.get_len()));
            m_response.set_cc(CompletionCode::CC_REQ_DATA_FIELD_LENGTH_EXC);
            return;
        }

        m_request.set_certificate_type(Certificate::Type(data[OFFSET_TYPE]));
        m_request.set_certificate_length(uint16_t((data[OFFSET_CERT_LEN]) | data[OFFSET_CERT_LEN+1] << 8));
        m_request.set_current_chunk_number(data[OFFSET_CHUNK_NO]);
        m_request.set_current_chunk_length(data[OFFSET_CHUNK_LEN]);
        std::copy_n(data+OFFSET_CERT, m_request.get_current_chunk_length(),
                    std::back_inserter(m_request.get_certificate_data()));
    }
}
Exemplo n.º 7
0
void UnknownCommand::unpack(IpmiMessage& msg){
    log_debug(LOGUSR, "Unpacking unknown message.");
    msg.set_to_request();
}
void SetAuthorizationCertificate::Response::add_data(IpmiMessage& msg) {
    auto data = msg.get_data();
    data[0] = uint8_t(this->get_cc());
    msg.add_len(get_len());
}
Exemplo n.º 9
0
void InvalidSelector::pack(IpmiMessage& msg) {
    m_response.set_len(1);
    m_response.set_cc(CompletionCode::CC_PARAMETER_NOT_SUPPORTED);
    m_response.add_data(msg);
    msg.set_to_response();
}
Exemplo n.º 10
0
void InvalidSelector::unpack(IpmiMessage& msg) {
    msg.set_to_request();
}
Exemplo n.º 11
0
void InvalidSelector::Response::add_data(IpmiMessage& msg) {
    auto data = msg.get_data();
    data[OFFSET_CC] = uint8_t(m_cc);
    msg.add_len(get_len());
}
Exemplo n.º 12
0
void SourceSelector::unpack(IpmiMessage& msg) {
    msg.set_to_request();
}