blob: 05c312ea681f462e4f7db729adb5a3efb2e37c12 [file] [log] [blame]
Tom Joseph9662c3a2016-12-06 17:52:16 +05301#pragma once
2
Tom Joseph9662c3a2016-12-06 17:52:16 +05303#include "message_handler.hpp"
4
Vernon Mauery9e801a22018-10-12 13:20:49 -07005#include <vector>
6
Tom Joseph9662c3a2016-12-06 17:52:16 +05307namespace command
8{
9
10constexpr uint8_t IPMI_CC_INVALID_PRIV_LEVEL = 0x80;
11constexpr uint8_t IPMI_CC_EXCEEDS_USER_PRIV = 0x81;
Rajashekar Gade Reddydafe3642019-07-12 17:35:06 +000012// bits 30 & 31 (MSB) hold the instanceID, hence shifting by 30 bits
13constexpr uint8_t myNetInstanceSessionIdShiftMask = 30;
14// bits 6 & 7 (MSB) hold the instanceID, hence shifting by 6 bits
15constexpr uint8_t myNetInstanceSessionHandleShiftMask = 6;
Tom Joseph9662c3a2016-12-06 17:52:16 +053016
Tom Joseph3563f8f2017-05-08 15:42:54 +053017/**
18 * @struct SetSessionPrivLevelReq
Tom Joseph9662c3a2016-12-06 17:52:16 +053019 *
20 * IPMI Request data for Set Session Privilege Level command
21 */
22struct SetSessionPrivLevelReq
23{
Tom Joseph9662c3a2016-12-06 17:52:16 +053024#if BYTE_ORDER == LITTLE_ENDIAN
25 uint8_t reqPrivLevel : 4;
26 uint8_t reserved : 4;
27#endif
28
29#if BYTE_ORDER == BIG_ENDIAN
30 uint8_t reserved : 4;
31 uint8_t reqPrivLevel : 4;
32#endif
33
34} __attribute__((packed));
35
Tom Joseph3563f8f2017-05-08 15:42:54 +053036/**
37 * @struct SetSessionPrivLevelResp
Tom Joseph9662c3a2016-12-06 17:52:16 +053038 *
39 * IPMI Response data for Set Session Privilege Level command
40 */
41struct SetSessionPrivLevelResp
42{
43 uint8_t completionCode;
44
45#if BYTE_ORDER == LITTLE_ENDIAN
46 uint8_t newPrivLevel : 4;
47 uint8_t reserved : 4;
48#endif
49
50#if BYTE_ORDER == BIG_ENDIAN
51 uint8_t reserved : 4;
52 uint8_t newPrivLevel : 4;
53#endif
54
55} __attribute__((packed));
56
Tom Joseph3563f8f2017-05-08 15:42:54 +053057/**
Tom Joseph9662c3a2016-12-06 17:52:16 +053058 * @brief Set Session Privilege Command
59 *
60 * This command is sent in authenticated format. When a session is activated,
61 * the session is set to an initial privilege level. A session that is
62 * activated at a maximum privilege level of Callback is set to an initial
63 * privilege level of Callback and cannot be changed. All other sessions are
64 * initially set to USER level, regardless of the maximum privilege level
65 * requested in the RAKP Message 1.
66 *
67 * This command cannot be used to set a privilege level higher than the lowest
68 * of the privilege level set for the user(via the Set User Access command) and
69 * the privilege limit for the channel that was set via the Set Channel Access
70 * command.
71 *
72 * @param[in] inPayload - Request Data for the command
73 * @param[in] handler - Reference to the Message Handler
74 *
75 * @return Response data for the command
76 */
Vernon Mauery9e801a22018-10-12 13:20:49 -070077std::vector<uint8_t>
78 setSessionPrivilegeLevel(const std::vector<uint8_t>& inPayload,
Vernon Mauery41ff9b52021-06-11 11:37:40 -070079 std::shared_ptr<message::Handler>& handler);
Tom Joseph3563f8f2017-05-08 15:42:54 +053080/**
81 * @struct CloseSessionRequest
Tom Joseph9662c3a2016-12-06 17:52:16 +053082 *
83 * IPMI Request data for Close Session command
84 */
85struct CloseSessionRequest
86{
87 uint32_t sessionID;
88 uint8_t sessionHandle;
89} __attribute__((packed));
90
Tom Joseph3563f8f2017-05-08 15:42:54 +053091/**
92 * @struct CloseSessionResponse
Tom Joseph9662c3a2016-12-06 17:52:16 +053093 *
94 * IPMI Response data for Close Session command
95 */
96struct CloseSessionResponse
97{
98 uint8_t completionCode;
99} __attribute__((packed));
100
Tom Joseph3563f8f2017-05-08 15:42:54 +0530101/**
Tom Joseph9662c3a2016-12-06 17:52:16 +0530102 * @brief Close Session Command
103 *
104 * This command is used to immediately terminate a session in progress. It is
105 * typically used to close the session that the user is communicating over,
106 * though it can be used to other terminate sessions in progress (provided that
107 * the user is operating at the appropriate privilege level, or the command is
108 * executed over a local channel - e.g. the system interface). Closing
109 * sessionless session ( session zero) is restricted in this command
110 *
111 * @param[in] inPayload - Request Data for the command
112 * @param[in] handler - Reference to the Message Handler
113 *
114 * @return Response data for the command
115 */
Tom Joseph18a45e92017-04-11 11:30:44 +0530116std::vector<uint8_t> closeSession(const std::vector<uint8_t>& inPayload,
Vernon Mauery41ff9b52021-06-11 11:37:40 -0700117 std::shared_ptr<message::Handler>& handler);
Tom Joseph9662c3a2016-12-06 17:52:16 +0530118
119} // namespace command