blob: 738bd03a2487529b0090eaecc7ae916414a60c2d [file] [log] [blame]
Tom Joseph9662c3a2016-12-06 17:52:16 +05301#pragma once
2
3#include <vector>
4
5#include "message_handler.hpp"
6
7namespace command
8{
9
10constexpr uint8_t IPMI_CC_INVALID_PRIV_LEVEL = 0x80;
11constexpr uint8_t IPMI_CC_EXCEEDS_USER_PRIV = 0x81;
12
Tom Joseph3563f8f2017-05-08 15:42:54 +053013/**
14 * @struct SetSessionPrivLevelReq
Tom Joseph9662c3a2016-12-06 17:52:16 +053015 *
16 * IPMI Request data for Set Session Privilege Level command
17 */
18struct 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
Tom Joseph3563f8f2017-05-08 15:42:54 +053033/**
34 * @struct SetSessionPrivLevelResp
Tom Joseph9662c3a2016-12-06 17:52:16 +053035 *
36 * IPMI Response data for Set Session Privilege Level command
37 */
38struct 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
Tom Joseph3563f8f2017-05-08 15:42:54 +053054/**
Tom Joseph9662c3a2016-12-06 17:52:16 +053055 * @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 */
Tom Joseph18a45e92017-04-11 11:30:44 +053074std::vector<uint8_t> setSessionPrivilegeLevel(
75 const std::vector<uint8_t>& inPayload, const message::Handler& handler);
Tom Joseph9662c3a2016-12-06 17:52:16 +053076
77constexpr uint8_t IPMI_CC_INVALID_SESSIONID = 0x87;
78
Tom Joseph3563f8f2017-05-08 15:42:54 +053079/**
80 * @struct CloseSessionRequest
Tom Joseph9662c3a2016-12-06 17:52:16 +053081 *
82 * IPMI Request data for Close Session command
83 */
84struct CloseSessionRequest
85{
86 uint32_t sessionID;
87 uint8_t sessionHandle;
88} __attribute__((packed));
89
Tom Joseph3563f8f2017-05-08 15:42:54 +053090/**
91 * @struct CloseSessionResponse
Tom Joseph9662c3a2016-12-06 17:52:16 +053092 *
93 * IPMI Response data for Close Session command
94 */
95struct CloseSessionResponse
96{
97 uint8_t completionCode;
98} __attribute__((packed));
99
Tom Joseph3563f8f2017-05-08 15:42:54 +0530100/**
Tom Joseph9662c3a2016-12-06 17:52:16 +0530101 * @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 */
Tom Joseph18a45e92017-04-11 11:30:44 +0530115std::vector<uint8_t> closeSession(const std::vector<uint8_t>& inPayload,
Tom Joseph9662c3a2016-12-06 17:52:16 +0530116 const message::Handler& handler);
117
118} // namespace command