1 #pragma once 2 3 #include "comm_module.hpp" 4 #include "message_handler.hpp" 5 6 #include <vector> 7 8 namespace command 9 { 10 11 constexpr size_t userNameMaxLen = 16; 12 13 /** 14 * @struct RAKP1request 15 * 16 * IPMI Payload for RAKP Message 1 17 */ 18 struct RAKP1request 19 { 20 uint8_t messageTag; 21 uint8_t reserved1; 22 uint16_t reserved2; 23 uint32_t managedSystemSessionID; 24 uint8_t remote_console_random_number[16]; 25 uint8_t req_max_privilege_level; 26 uint16_t reserved3; 27 uint8_t user_name_len; 28 char user_name[userNameMaxLen]; 29 } __attribute__((packed)); 30 31 /** 32 * @struct RAKP2response 33 * 34 * IPMI Payload for RAKP Message 2 35 */ 36 struct RAKP2response 37 { 38 uint8_t messageTag; 39 uint8_t rmcpStatusCode; 40 uint16_t reserved; 41 uint32_t remoteConsoleSessionID; 42 uint8_t managed_system_random_number[16]; 43 uint8_t managed_system_guid[16]; 44 } __attribute__((packed)); 45 46 /** 47 * @brief RAKP Message 1, RAKP Message 2 48 * 49 * These messages are used to exchange random number and identification 50 * information between the BMC and the remote console that are, in effect, 51 * mutual challenges for a challenge/response. (Unlike IPMI v1.5, the v2.0/RMCP+ 52 * challenge/response is symmetric. I.e. the remote console and BMC both issues 53 * challenges,and both need to provide valid responses for the session to be 54 * activated.) 55 * 56 * The remote console request (RAKP Message 1) passes a random number and 57 * username/privilege information that the BMC will later use to ‘sign’ a 58 * response message based on key information associated with the user and the 59 * Authentication Algorithm negotiated in the Open Session Request/Response 60 * exchange. The BMC responds with RAKP Message 2 and passes a random number and 61 * GUID (globally unique ID) for the managed system that the remote console 62 * uses according the Authentication Algorithm to sign a response back to the 63 * BMC. 64 * 65 * @param[in] inPayload - Request Data for the command 66 * @param[in] handler - Reference to the Message Handler 67 * 68 * @return Response data for the command 69 */ 70 std::vector<uint8_t> RAKP12(const std::vector<uint8_t>& inPayload, 71 const message::Handler& handler); 72 73 } // namespace command 74