1 #pragma once 2 3 #include <vector> 4 5 #include "message_handler.hpp" 6 7 namespace command 8 { 9 10 constexpr uint8_t IPMI_CC_INVALID_PRIV_LEVEL = 0x80; 11 constexpr uint8_t IPMI_CC_EXCEEDS_USER_PRIV = 0x81; 12 13 /* 14 * @ struct SetSessionPrivLevelReq 15 * 16 * IPMI Request data for Set Session Privilege Level command 17 */ 18 struct SetSessionPrivLevelReq 19 { 20 21 #if BYTE_ORDER == LITTLE_ENDIAN 22 uint8_t reqPrivLevel : 4; 23 uint8_t reserved : 4; 24 #endif 25 26 #if BYTE_ORDER == BIG_ENDIAN 27 uint8_t reserved : 4; 28 uint8_t reqPrivLevel : 4; 29 #endif 30 31 } __attribute__((packed)); 32 33 /* 34 * @ struct SetSessionPrivLevelResp 35 * 36 * IPMI Response data for Set Session Privilege Level command 37 */ 38 struct SetSessionPrivLevelResp 39 { 40 uint8_t completionCode; 41 42 #if BYTE_ORDER == LITTLE_ENDIAN 43 uint8_t newPrivLevel : 4; 44 uint8_t reserved : 4; 45 #endif 46 47 #if BYTE_ORDER == BIG_ENDIAN 48 uint8_t reserved : 4; 49 uint8_t newPrivLevel : 4; 50 #endif 51 52 } __attribute__((packed)); 53 54 /* 55 * @brief Set Session Privilege Command 56 * 57 * This command is sent in authenticated format. When a session is activated, 58 * the session is set to an initial privilege level. A session that is 59 * activated at a maximum privilege level of Callback is set to an initial 60 * privilege level of Callback and cannot be changed. All other sessions are 61 * initially set to USER level, regardless of the maximum privilege level 62 * requested in the RAKP Message 1. 63 * 64 * This command cannot be used to set a privilege level higher than the lowest 65 * of the privilege level set for the user(via the Set User Access command) and 66 * the privilege limit for the channel that was set via the Set Channel Access 67 * command. 68 * 69 * @param[in] inPayload - Request Data for the command 70 * @param[in] handler - Reference to the Message Handler 71 * 72 * @return Response data for the command 73 */ 74 std::vector<uint8_t> setSessionPrivilegeLevel(std::vector<uint8_t>& inPayload, 75 const message::Handler& handler); 76 77 constexpr uint8_t IPMI_CC_INVALID_SESSIONID = 0x87; 78 79 /* 80 * @ struct CloseSessionRequest 81 * 82 * IPMI Request data for Close Session command 83 */ 84 struct CloseSessionRequest 85 { 86 uint32_t sessionID; 87 uint8_t sessionHandle; 88 } __attribute__((packed)); 89 90 /* 91 * @ struct CloseSessionResponse 92 * 93 * IPMI Response data for Close Session command 94 */ 95 struct CloseSessionResponse 96 { 97 uint8_t completionCode; 98 } __attribute__((packed)); 99 100 /* 101 * @brief Close Session Command 102 * 103 * This command is used to immediately terminate a session in progress. It is 104 * typically used to close the session that the user is communicating over, 105 * though it can be used to other terminate sessions in progress (provided that 106 * the user is operating at the appropriate privilege level, or the command is 107 * executed over a local channel - e.g. the system interface). Closing 108 * sessionless session ( session zero) is restricted in this command 109 * 110 * @param[in] inPayload - Request Data for the command 111 * @param[in] handler - Reference to the Message Handler 112 * 113 * @return Response data for the command 114 */ 115 std::vector<uint8_t> closeSession(std::vector<uint8_t>& inPayload, 116 const message::Handler& handler); 117 118 } // namespace command 119