1 #include "nlohmann/json.hpp" 2 3 #include <ipmid/api.h> 4 5 /** @brief The set channel access IPMI command. 6 * 7 * @param[in] netfn 8 * @param[in] cmd 9 * @param[in] request 10 * @param[in,out] response 11 * @param[out] data_len 12 * @param[in] context 13 * 14 * @return IPMI_CC_OK on success, non-zero otherwise. 15 */ 16 ipmi_ret_t ipmi_set_channel_access(ipmi_netfn_t netfn, ipmi_cmd_t cmd, 17 ipmi_request_t request, 18 ipmi_response_t response, 19 ipmi_data_len_t data_len, 20 ipmi_context_t context); 21 22 /** @brief The get channel access IPMI command. 23 * 24 * @param[in] netfn 25 * @param[in] cmd 26 * @param[in] request 27 * @param[in,out] response 28 * @param[out] data_len 29 * @param[in] context 30 * 31 * @return IPMI_CC_OK on success, non-zero otherwise. 32 */ 33 ipmi_ret_t ipmi_get_channel_access(ipmi_netfn_t netfn, ipmi_cmd_t cmd, 34 ipmi_request_t request, 35 ipmi_response_t response, 36 ipmi_data_len_t data_len, 37 ipmi_context_t context); 38 39 /** @brief The get channel info IPMI command. 40 * 41 * @param[in] netfn 42 * @param[in] cmd 43 * @param[in] request 44 * @param[in,out] response 45 * @param[out] data_len 46 * @param[in] context 47 * 48 * @return IPMI_CC_OK on success, non-zero otherwise. 49 */ 50 ipmi_ret_t ipmi_app_channel_info(ipmi_netfn_t netfn, ipmi_cmd_t cmd, 51 ipmi_request_t request, 52 ipmi_response_t response, 53 ipmi_data_len_t data_len, 54 ipmi_context_t context); 55 56 /** @brief Implementation of get channel cipher suites command 57 * 58 * @param[in] netfn - Net Function 59 * @param[in] cmd - Command 60 * @param[in] request - Request pointer 61 * @param[in,out] response - Response pointer 62 * @param[in,out] data_len - Data Length 63 * @param[in] context - Context 64 * 65 * @return IPMI_CC_OK on success, non-zero otherwise. 66 */ 67 ipmi_ret_t getChannelCipherSuites(ipmi_netfn_t netfn, ipmi_cmd_t cmd, 68 ipmi_request_t request, 69 ipmi_response_t response, 70 ipmi_data_len_t data_len, 71 ipmi_context_t context); 72 73 namespace cipher 74 { 75 76 static constexpr auto defaultChannelNumber = 1; 77 static constexpr auto listTypeMask = 0x80; 78 static constexpr auto listCipherSuite = 0x80; 79 static constexpr auto listIndexMask = 0x3F; 80 static constexpr auto respSize = 16; 81 82 using Json = nlohmann::json; 83 static constexpr auto configFile = "/usr/share/ipmi-providers/cipher_list.json"; 84 static constexpr auto cipher = "cipher"; 85 static constexpr auto stdCipherSuite = 0xC0; 86 static constexpr auto oemCipherSuite = 0xC1; 87 static constexpr auto oem = "oemiana"; 88 static constexpr auto auth = "authentication"; 89 static constexpr auto integrity = "integrity"; 90 static constexpr auto integrityTag = 0x40; 91 static constexpr auto conf = "confidentiality"; 92 static constexpr auto confTag = 0x80; 93 94 } // namespace cipher 95 96 /** @struct GetChannelCipherRequest 97 * 98 * IPMI payload for Get Channel Cipher Suites command request 99 */ 100 struct GetChannelCipherRequest 101 { 102 uint8_t channelNumber; //!< Channel Number 103 uint8_t payloadType; //!< Payload type number 104 uint8_t listIndex; //!< List Index 105 } __attribute__((packed)); 106 107 /** @struct GetChannelCipherRespHeader 108 * 109 * IPMI payload for Get Channel Cipher Suites command response header 110 */ 111 struct GetChannelCipherRespHeader 112 { 113 uint8_t channelNumber; //!< Channel Number 114 } __attribute__((packed)); 115