1 #include "nlohmann/json.hpp"
2 
3 #include <ipmid/api.hpp>
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 this command is used to look up what authentication, integrity,
57  *  confidentiality algorithms are supported.
58  *
59  *  @ param ctx - context pointer
60  *  @ param channelNumber - channel number
61  *  @ param payloadType - payload type
62  *  @ param listIndex - list index
63  *  @ param algoSelectBit - list algorithms
64  *
65  *  @returns ipmi completion code plus response data
66  *  - rspChannel - channel number for authentication algorithm.
67  *  - rspRecords - cipher suite records.
68  **/
69 ipmi::RspType<uint8_t,             // Channel Number
70               std::vector<uint8_t> // Cipher Records
71               >
72     getChannelCipherSuites(ipmi::Context::ptr ctx, uint4_t channelNumber,
73                            uint4_t reserved1, uint8_t payloadType,
74                            uint6_t listIndex, uint1_t reserved2,
75                            uint1_t algoSelectBit);
76 
77 namespace cipher
78 {
79 
80 static constexpr auto listCipherSuite = 0x80;
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