int fill_cmd_set_command_enables (uint8_t channel_number, uint8_t net_fn, uint8_t operation, uint8_t lun, uint8_t *enable_disable_bitmask, unsigned int enable_disable_bitmask_len, uint32_t net_fn_data, fiid_obj_t obj_cmd_rq) { if (!IPMI_CHANNEL_NUMBER_VALID (channel_number) || !IPMI_NET_FN_VALID (net_fn) || !IPMI_FIRMWARE_FIREWALL_COMMAND_DISCOVERY_OPERATION_VALID (operation) || !IPMI_BMC_LUN_VALID (lun) || !enable_disable_bitmask || enable_disable_bitmask_len < IPMI_FIRMWARE_FIREWALL_COMMAND_DISCOVERY_ENABLE_DISABLE_BITMASK_LEN || !fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_set_command_enables_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_COMMAND_ENABLES); FILL_FIID_OBJ_SET (obj_cmd_rq, "channel_number", channel_number); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved1", 0); FILL_FIID_OBJ_SET (obj_cmd_rq, "net_fn", net_fn); FILL_FIID_OBJ_SET (obj_cmd_rq, "operation", operation); FILL_FIID_OBJ_SET (obj_cmd_rq, "lun", lun); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved2", 0); FILL_FIID_OBJ_SET_DATA (obj_cmd_rq, "enable_disable_mask", enable_disable_bitmask, IPMI_FIRMWARE_FIREWALL_COMMAND_DISCOVERY_ENABLE_DISABLE_BITMASK_LEN); if (net_fn == IPMI_NET_FN_GROUP_EXTENSION_RQ || net_fn == IPMI_NET_FN_GROUP_EXTENSION_RS) { uint8_t tmp = net_fn_data; FILL_FIID_OBJ_SET_DATA (obj_cmd_rq, "net_fn_data", &tmp, 1); } else if (net_fn == IPMI_NET_FN_OEM_GROUP_RQ || net_fn == IPMI_NET_FN_OEM_GROUP_RS) FILL_FIID_OBJ_SET (obj_cmd_rq, "net_fn_data", net_fn_data); return (0); }
int ipmi_cmd_cold_reset (ipmi_ctx_t ctx, fiid_obj_t obj_cmd_rs) { fiid_obj_t obj_cmd_rq = NULL; int rv = -1; if (!ctx || ctx->magic != IPMI_CTX_MAGIC) { ERR_TRACE (ipmi_ctx_errormsg (ctx), ipmi_ctx_errnum (ctx)); return (-1); } if (!fiid_obj_valid (obj_cmd_rs)) { API_SET_ERRNUM (ctx, IPMI_ERR_PARAMETERS); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rs, tmpl_cmd_cold_reset_rs) < 0) { API_FIID_OBJECT_ERROR_TO_API_ERRNUM (ctx, obj_cmd_rs); return (-1); } if (!(obj_cmd_rq = fiid_obj_create (tmpl_cmd_cold_reset_rq))) { API_ERRNO_TO_API_ERRNUM (ctx, errno); goto cleanup; } if (fill_cmd_cold_reset (obj_cmd_rq) < 0) { API_ERRNO_TO_API_ERRNUM (ctx, errno); goto cleanup; } if (api_ipmi_cmd (ctx, IPMI_BMC_IPMB_LUN_BMC, IPMI_NET_FN_APP_RQ, obj_cmd_rq, obj_cmd_rs) < 0) { ERR_TRACE (ipmi_ctx_errormsg (ctx), ipmi_ctx_errnum (ctx)); goto cleanup; } rv = 0; cleanup: fiid_obj_destroy (obj_cmd_rq); return (rv); }
int8_t fill_cmd_set_sdr_repository_time (uint32_t time, fiid_obj_t obj_cmd_rq) { ERR_EINVAL (fiid_obj_valid(obj_cmd_rq)); FIID_OBJ_TEMPLATE_COMPARE(obj_cmd_rq, tmpl_cmd_set_sdr_repository_time_rq); FIID_OBJ_CLEAR (obj_cmd_rq); FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_SDR_REPOSITORY_TIME); FIID_OBJ_SET (obj_cmd_rq, "time", time); return 0; }
int8_t fill_cmd_set_power_cycle_interval (uint8_t interval, fiid_obj_t obj_cmd_rq) { ERR_EINVAL (fiid_obj_valid (obj_cmd_rq)); FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_set_power_cycle_interval_rq); FIID_OBJ_CLEAR (obj_cmd_rq); FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_POWER_CYCLE_INTERVAL); FIID_OBJ_SET (obj_cmd_rq, "interval", interval); return 0; }
int ipmi_kcs_cmd (ipmi_kcs_ctx_t ctx, uint8_t lun, uint8_t net_fn, fiid_obj_t obj_cmd_rq, fiid_obj_t obj_cmd_rs) { if (!ctx || ctx->magic != IPMI_KCS_CTX_MAGIC) { ERR_TRACE (ipmi_kcs_ctx_errormsg (ctx), ipmi_kcs_ctx_errnum (ctx)); return (-1); } if (!IPMI_BMC_LUN_VALID (lun) || !IPMI_NET_FN_RQ_VALID (net_fn) || !fiid_obj_valid (obj_cmd_rq) || !fiid_obj_valid (obj_cmd_rs) || fiid_obj_packet_valid (obj_cmd_rq) <= 0) { KCS_SET_ERRNUM (ctx, IPMI_KCS_ERR_PARAMETERS); return (-1); } if (!ctx->io_init) { KCS_SET_ERRNUM (ctx, IPMI_KCS_ERR_IO_NOT_INITIALIZED); return (-1); } if (_ipmi_kcs_cmd_write (ctx, lun, net_fn, obj_cmd_rq) < 0) return (-1); if (_ipmi_kcs_cmd_read (ctx, obj_cmd_rs) < 0) return (-1); return (0); }
int fill_lan_msg_hdr (uint8_t rs_addr, uint8_t net_fn, uint8_t rs_lun, uint8_t rq_seq, fiid_obj_t obj_lan_msg_hdr) { uint8_t checksum_buf[1024]; int checksum_len; uint8_t checksum; if (!IPMI_NET_FN_VALID (net_fn) || !IPMI_BMC_LUN_VALID (rs_lun) || (rq_seq > IPMI_LAN_REQUESTER_SEQUENCE_NUMBER_MAX) || !fiid_obj_valid (obj_lan_msg_hdr)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_lan_msg_hdr, tmpl_lan_msg_hdr_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_lan_msg_hdr); FILL_FIID_OBJ_SET (obj_lan_msg_hdr, "rs_addr", rs_addr); FILL_FIID_OBJ_SET (obj_lan_msg_hdr, "net_fn", net_fn); FILL_FIID_OBJ_SET (obj_lan_msg_hdr, "rs_lun", rs_lun); if ((checksum_len = fiid_obj_get_block (obj_lan_msg_hdr, "rs_addr", "net_fn", checksum_buf, 1024)) < 0) { FIID_OBJECT_ERROR_TO_ERRNO (obj_lan_msg_hdr); return (-1); } checksum = ipmi_checksum (checksum_buf, checksum_len); FILL_FIID_OBJ_SET (obj_lan_msg_hdr, "checksum1", checksum); FILL_FIID_OBJ_SET (obj_lan_msg_hdr, "rq_addr", IPMI_LAN_SOFTWARE_ID_REMOTE_CONSOLE_SOFTWARE); FILL_FIID_OBJ_SET (obj_lan_msg_hdr, "rq_lun", IPMI_BMC_IPMB_LUN_BMC); FILL_FIID_OBJ_SET (obj_lan_msg_hdr, "rq_seq", rq_seq); return (0); }
void Fiid_obj_get(fiid_obj_t obj, char *field, uint64_t *val) { int8_t rv; assert(fiid_obj_valid(obj) && field && val); if ((rv = fiid_obj_get(obj, field, val)) < 0) ierr_exit("Fiid_obj_get: field=%s: %s", field, fiid_strerror(fiid_obj_errnum(obj))); if (!rv) ierr_exit("Fiid_obj_get: field=%s: No data set", field); return; }
int api_inteldcmi_cmd (ipmi_ctx_t ctx, fiid_obj_t obj_cmd_rq, fiid_obj_t obj_cmd_rs) { assert (ctx && ctx->magic == IPMI_CTX_MAGIC && ctx->type == IPMI_DEVICE_INTELDCMI && fiid_obj_valid (obj_cmd_rq) && fiid_obj_packet_valid (obj_cmd_rq) == 1 && fiid_obj_valid (obj_cmd_rs)); if (ipmi_inteldcmi_cmd (ctx->io.inband.inteldcmi_ctx, ctx->target.lun, ctx->target.net_fn, obj_cmd_rq, obj_cmd_rs) < 0) { API_INTELDCMI_ERRNUM_TO_API_ERRNUM (ctx, ipmi_inteldcmi_ctx_errnum (ctx->io.inband.inteldcmi_ctx)); return (-1); } return (0); }
int8_t fill_cmd_chassis_control (uint8_t chassis_control, fiid_obj_t obj_cmd_rq) { ERR_EINVAL (IPMI_CHASSIS_CONTROL_VALID (chassis_control) && fiid_obj_valid (obj_cmd_rq)); FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_chassis_control_rq); FIID_OBJ_CLEAR (obj_cmd_rq); FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_CHASSIS_CONTROL); FIID_OBJ_SET (obj_cmd_rq, "chassis_control", chassis_control); FIID_OBJ_SET (obj_cmd_rq, "reserved", 0); return 0; }
int ipmi_completion_code_strerror_cmd_r (fiid_obj_t obj_cmd, uint8_t netfn, char *errstr, size_t len) { uint8_t cmd, comp_code; uint64_t val; /* The netfn need not be valid */ if (!fiid_obj_valid (obj_cmd) || !errstr) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_FIELD_LOOKUP (obj_cmd, "cmd") < 0) { FIID_OBJECT_ERROR_TO_ERRNO (obj_cmd); return (-1); } if (FIID_OBJ_FIELD_LOOKUP (obj_cmd, "comp_code") < 0) { FIID_OBJECT_ERROR_TO_ERRNO (obj_cmd); return (-1); } if (FIID_OBJ_GET (obj_cmd, "cmd", &val) < 0) { FIID_OBJECT_ERROR_TO_ERRNO (obj_cmd); return (-1); } cmd = val; if (FIID_OBJ_GET (obj_cmd, "comp_code", &val) < 0) { FIID_OBJECT_ERROR_TO_ERRNO (obj_cmd); return (-1); } comp_code = val; return (ipmi_completion_code_strerror_r (cmd, netfn, comp_code, errstr, len)); }
int fill_cmd_get_configurable_commands (uint8_t channel_number, uint8_t net_fn, uint8_t operation, uint8_t lun, uint32_t net_fn_data, fiid_obj_t obj_cmd_rq) { if (!IPMI_CHANNEL_NUMBER_VALID (channel_number) || !IPMI_NET_FN_VALID (net_fn) || !IPMI_FIRMWARE_FIREWALL_COMMAND_DISCOVERY_OPERATION_VALID (operation) || !IPMI_BMC_LUN_VALID (lun) || !fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_configurable_commands_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_CONFIGURABLE_COMMANDS); FILL_FIID_OBJ_SET (obj_cmd_rq, "channel_number", channel_number); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved1", 0); FILL_FIID_OBJ_SET (obj_cmd_rq, "net_fn", net_fn); FILL_FIID_OBJ_SET (obj_cmd_rq, "operation", operation); FILL_FIID_OBJ_SET (obj_cmd_rq, "lun", lun); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved2", 0); if (net_fn == IPMI_NET_FN_GROUP_EXTENSION_RQ || net_fn == IPMI_NET_FN_GROUP_EXTENSION_RS) { uint8_t tmp = net_fn_data; FILL_FIID_OBJ_SET_DATA (obj_cmd_rq, "net_fn_data", &tmp, 1); } else if (net_fn == IPMI_NET_FN_OEM_GROUP_RQ || net_fn == IPMI_NET_FN_OEM_GROUP_RS) FILL_FIID_OBJ_SET (obj_cmd_rq, "net_fn_data", net_fn_data); return (0); }
int fill_cmd_get_command_sub_function_enables (uint8_t channel_number, uint8_t net_fn, uint8_t lun, uint8_t command, uint32_t net_fn_data, fiid_obj_t obj_cmd_rq) { if (!IPMI_CHANNEL_NUMBER_VALID (channel_number) || !IPMI_NET_FN_VALID (net_fn) || !IPMI_BMC_LUN_VALID (lun) || !fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_command_sub_function_enables_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_COMMAND_SUB_FUNCTION_ENABLES); FILL_FIID_OBJ_SET (obj_cmd_rq, "channel_number", channel_number); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved1", 0); FILL_FIID_OBJ_SET (obj_cmd_rq, "net_fn", net_fn); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved2", 0); FILL_FIID_OBJ_SET (obj_cmd_rq, "lun", lun); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved3", 0); FILL_FIID_OBJ_SET (obj_cmd_rq, "command", command); if (net_fn == IPMI_NET_FN_GROUP_EXTENSION_RQ || net_fn == IPMI_NET_FN_GROUP_EXTENSION_RS) { uint8_t tmp = net_fn_data; FILL_FIID_OBJ_SET_DATA (obj_cmd_rq, "net_fn_data", &tmp, 1); } else if (net_fn == IPMI_NET_FN_OEM_GROUP_RQ || net_fn == IPMI_NET_FN_OEM_GROUP_RS) FILL_FIID_OBJ_SET (obj_cmd_rq, "net_fn_data", net_fn_data); return (0); }
int8_t fill_cmd_get_system_boot_options (uint8_t parameter_selector, uint8_t set_selector, uint8_t block_selector, fiid_obj_t obj_cmd_rq) { ERR_EINVAL (IPMI_CHASSIS_BOOT_OPTIONS_PARAMETER_SELECTOR_VALID (parameter_selector) && fiid_obj_valid (obj_cmd_rq)); FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_system_boot_options_rq); FIID_OBJ_CLEAR (obj_cmd_rq); FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_SYSTEM_BOOT_OPTIONS); FIID_OBJ_SET (obj_cmd_rq, "parameter_selector", parameter_selector); FIID_OBJ_SET (obj_cmd_rq, "reserved", 0); FIID_OBJ_SET (obj_cmd_rq, "set_selector", set_selector); FIID_OBJ_SET (obj_cmd_rq, "block_selector", block_selector); return 0; }
int fill_cmd_get_sel_allocation_info (fiid_obj_t obj_cmd_rq) { if (!fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_sel_allocation_info_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_SEL_ALLOCATION_INFO); return (0); }
int fill_cmd_get_repository_info (fiid_obj_t obj_cmd_rq) { if (!fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_sdr_repository_info_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_SDR_REPOSITORY_INFO); return (0); }
int fill_cmd_reserve_sel (fiid_obj_t obj_cmd_rq) { if (!fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_reserve_sel_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_RESERVE_SEL); return (0); }
int8_t fill_cmd_get_sdr (uint16_t reservation_id, uint16_t record_id, uint8_t offset_into_record, uint8_t bytes_to_read, fiid_obj_t obj_cmd_rq) { ERR_EINVAL (fiid_obj_valid(obj_cmd_rq)); FIID_OBJ_TEMPLATE_COMPARE(obj_cmd_rq, tmpl_cmd_get_sdr_rq); FIID_OBJ_CLEAR (obj_cmd_rq); FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_SDR); FIID_OBJ_SET (obj_cmd_rq, "reservation_id", reservation_id); FIID_OBJ_SET (obj_cmd_rq, "record_id", record_id); FIID_OBJ_SET (obj_cmd_rq, "offset_into_record", offset_into_record); FIID_OBJ_SET (obj_cmd_rq, "bytes_to_read", bytes_to_read); return 0; }
int fill_cmd_set_command_sub_function_enables_oem_iana (uint8_t channel_number, uint8_t net_fn, uint8_t lun, uint8_t command, uint32_t oem_iana, uint32_t sub_function_enables1, uint32_t *sub_function_enables2, fiid_obj_t obj_cmd_rq) { if (!IPMI_CHANNEL_NUMBER_VALID (channel_number) || (net_fn != IPMI_NET_FN_OEM_GROUP_RQ && net_fn != IPMI_NET_FN_OEM_GROUP_RS) || !IPMI_BMC_LUN_VALID (lun) || !fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_set_command_sub_function_enables_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_COMMAND_SUB_FUNCTION_ENABLES); FILL_FIID_OBJ_SET (obj_cmd_rq, "channel_number", channel_number); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved1", 0); FILL_FIID_OBJ_SET (obj_cmd_rq, "net_fn", net_fn); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved2", 0); FILL_FIID_OBJ_SET (obj_cmd_rq, "lun", lun); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved3", 0); FILL_FIID_OBJ_SET (obj_cmd_rq, "command", command); FILL_FIID_OBJ_SET (obj_cmd_rq, "oem_iana", oem_iana); FILL_FIID_OBJ_SET (obj_cmd_rq, "sub_function_enables1", sub_function_enables1); if (sub_function_enables2) FILL_FIID_OBJ_SET (obj_cmd_rq, "sub_function_enables2", *sub_function_enables2); return (0); }
int8_t ipmi_cmd_set_acpi_power_state (ipmi_ctx_t ctx, uint8_t system_power_state_enumeration, uint8_t set_system_power_state, uint8_t device_power_state_enumeration, uint8_t set_device_power_state, fiid_obj_t obj_cmd_rs) { fiid_obj_t obj_cmd_rq = NULL; int8_t rv = -1; API_ERR_CTX_CHECK (ctx && ctx->magic == IPMI_CTX_MAGIC); API_ERR_PARAMETERS (IPMI_ACPI_SET_SYSTEM_POWER_STATE_VALID(set_system_power_state) && !(set_system_power_state == IPMI_ACPI_SET_SYSTEM_POWER_STATE_SET_SYSTEM_POWER_STATE && !IPMI_ACPI_SYSTEM_POWER_STATE_VALID(system_power_state_enumeration)) && IPMI_ACPI_SET_DEVICE_POWER_STATE_VALID(set_device_power_state) && !(set_device_power_state == IPMI_ACPI_SET_DEVICE_POWER_STATE_SET_DEVICE_POWER_STATE && !IPMI_ACPI_DEVICE_POWER_STATE_VALID(device_power_state_enumeration)) && fiid_obj_valid(obj_cmd_rs)); API_FIID_OBJ_TEMPLATE_COMPARE(obj_cmd_rs, tmpl_cmd_set_acpi_power_state_rs); API_FIID_OBJ_CREATE(obj_cmd_rq, tmpl_cmd_set_acpi_power_state_rq); API_ERR_CLEANUP (!(fill_cmd_set_acpi_power_state (system_power_state_enumeration, set_system_power_state, device_power_state_enumeration, set_device_power_state, obj_cmd_rq) < 0)); API_ERR_IPMI_CMD_CLEANUP (ctx, IPMI_BMC_IPMB_LUN_BMC, IPMI_NET_FN_APP_RQ, obj_cmd_rq, obj_cmd_rs); rv = 0; cleanup: API_FIID_OBJ_DESTROY(obj_cmd_rq); return (rv); }
int fill_cmd_get_sel_time_utc_offset (fiid_obj_t obj_cmd_rq) { if (!fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_sel_time_utc_offset_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_SEL_TIME_UTC_OFFSET); return (0); }
int8_t fill_cmd_set_power_restore_policy (uint8_t power_restore_policy, fiid_obj_t obj_cmd_rq) { ERR_EINVAL (IPMI_POWER_RESTORE_POLICY_VALID (power_restore_policy) && fiid_obj_valid (obj_cmd_rq)); FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_set_power_restore_policy_rq); FIID_OBJ_CLEAR (obj_cmd_rq); FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_POWER_RESTORE_POLICY); FIID_OBJ_SET (obj_cmd_rq, "power_restore_policy", power_restore_policy); FIID_OBJ_SET (obj_cmd_rq, "reserved", 0); return 0; }
int fill_cmd_set_sel_time (uint32_t time, fiid_obj_t obj_cmd_rq) { if (!fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_set_sel_time_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_SEL_TIME); FILL_FIID_OBJ_SET (obj_cmd_rq, "time", time); return (0); }
int8_t fill_cmd_set_system_boot_options_set_in_progress (uint8_t value, fiid_obj_t obj_cmd_rq) { ERR_EINVAL (IPMI_CHASSIS_BOOT_OPTIONS_SET_IN_PROGRESS_VALID (value) && fiid_obj_valid (obj_cmd_rq)); FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_set_system_boot_options_set_in_progress_rq); FIID_OBJ_CLEAR (obj_cmd_rq); FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_SYSTEM_BOOT_OPTIONS); FIID_OBJ_SET (obj_cmd_rq, "parameter_selector", IPMI_CHASSIS_BOOT_OPTIONS_PARAMETER_SET_IN_PROGRESS); FIID_OBJ_SET (obj_cmd_rq, "parameter_valid", IPMI_CHASSIS_BOOT_OPTIONS_PARAMETER_VALID_UNLOCKED); FIID_OBJ_SET (obj_cmd_rq, "set_in_progress", value); FIID_OBJ_SET (obj_cmd_rq, "reserved", 0); return 0; }
int8_t fill_cmd_set_system_boot_options (uint8_t parameter_selector, uint8_t *configuration_parameter_data, uint8_t data_len, fiid_obj_t obj_cmd_rq) { ERR_EINVAL (IPMI_CHASSIS_BOOT_OPTIONS_PARAMETER_SELECTOR_VALID (parameter_selector) && configuration_parameter_data != NULL && data_len > 0 && fiid_obj_valid (obj_cmd_rq)); FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_set_system_boot_options_rq); FIID_OBJ_CLEAR (obj_cmd_rq); FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_SYSTEM_BOOT_OPTIONS); FIID_OBJ_SET (obj_cmd_rq, "parameter_selector", parameter_selector); FIID_OBJ_SET (obj_cmd_rq, "parameter_valid", IPMI_CHASSIS_BOOT_OPTIONS_PARAMETER_VALID_UNLOCKED); FIID_OBJ_SET_DATA (obj_cmd_rq, "configuration_parameter_data", configuration_parameter_data, data_len); return 0; }
int fill_cmd_set_sel_time_utc_offset (int16_t offset, fiid_obj_t obj_cmd_rq) { if (!IPMI_SEL_TIME_UTC_OFFSET_VALID (offset) || !fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_set_sel_time_utc_offset_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_SET_SEL_TIME_UTC_OFFSET); FILL_FIID_OBJ_SET (obj_cmd_rq, "offset", (uint64_t)offset); return (0); }
int fill_cmd_get_fru_inventory_area_info (uint8_t fru_device_id, fiid_obj_t obj_cmd_rq) { if (fru_device_id == IPMI_FRU_DEVICE_ID_RESERVED || !fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_fru_inventory_area_info_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_FRU_INVENTORY_AREA_INFO); FILL_FIID_OBJ_SET (obj_cmd_rq, "fru_device_id", fru_device_id); return (0); }
int fill_cmd_asf_presence_ping (uint8_t message_tag, fiid_obj_t obj_cmd) { if (!fiid_obj_valid (obj_cmd)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd, tmpl_cmd_asf_presence_ping) < 0) { SET_ERRNO (EINVAL); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd); FILL_FIID_OBJ_SET (obj_cmd, "iana_enterprise_number", htonl (RMCP_ASF_IANA_ENTERPRISE_NUM)); FILL_FIID_OBJ_SET (obj_cmd, "message_type", RMCP_ASF_MESSAGE_TYPE_PRESENCE_PING); FILL_FIID_OBJ_SET (obj_cmd, "message_tag", message_tag); FILL_FIID_OBJ_SET (obj_cmd, "reserved", 0); FILL_FIID_OBJ_SET (obj_cmd, "data_length", 0x00); return (0); }
int fill_cmd_get_netfn_support (uint8_t channel_number, fiid_obj_t obj_cmd_rq) { if (!IPMI_CHANNEL_NUMBER_VALID (channel_number) || !fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_netfn_support_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_NETFN_SUPPORT); FILL_FIID_OBJ_SET (obj_cmd_rq, "channel_number", channel_number); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved", 0); return (0); }
static void _set_kcs_errnum_by_fiid_object (ipmi_kcs_ctx_t ctx, fiid_obj_t obj) { if (!ctx || ctx->magic != IPMI_KCS_CTX_MAGIC) return; if (!fiid_obj_valid (obj)) { KCS_SET_ERRNUM (ctx, IPMI_ERR_INTERNAL_ERROR); return; } if (fiid_obj_errnum (obj) == FIID_ERR_SUCCESS) ctx->errnum = IPMI_KCS_ERR_SUCCESS; else if (fiid_obj_errnum (obj) == FIID_ERR_OUT_OF_MEMORY) ctx->errnum = IPMI_KCS_ERR_OUT_OF_MEMORY; else if (fiid_obj_errnum (obj) == FIID_ERR_DATA_NOT_AVAILABLE) ctx->errnum = IPMI_KCS_ERR_SYSTEM_ERROR; else if (fiid_obj_errnum (obj) == FIID_ERR_NOT_IDENTICAL || fiid_obj_errnum (obj) == FIID_ERR_FIELD_NOT_FOUND) ctx->errnum = IPMI_KCS_ERR_PARAMETERS; else ctx->errnum = IPMI_KCS_ERR_INTERNAL_ERROR; }
int fill_cmd_get_auxiliary_log_status (uint8_t log_type, fiid_obj_t obj_cmd_rq) { if (!IPMI_AUXILIARY_LOG_TYPE_VALID (log_type) || !fiid_obj_valid (obj_cmd_rq)) { SET_ERRNO (EINVAL); return (-1); } if (FIID_OBJ_TEMPLATE_COMPARE (obj_cmd_rq, tmpl_cmd_get_auxiliary_log_status_rq) < 0) { ERRNO_TRACE (errno); return (-1); } FILL_FIID_OBJ_CLEAR (obj_cmd_rq); FILL_FIID_OBJ_SET (obj_cmd_rq, "cmd", IPMI_CMD_GET_AUXILIARY_LOG_STATUS); FILL_FIID_OBJ_SET (obj_cmd_rq, "log_type", log_type); FILL_FIID_OBJ_SET (obj_cmd_rq, "reserved", 0); return (0); }