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