blob: cb4da6bc3bf9b875e87ea41e090d55692574ea83 [file] [log] [blame]
AppaRao Puli071f3f22018-05-24 16:45:30 +05301/*
2// Copyright (c) 2018 Intel Corporation
3//
4// Licensed under the Apache License, Version 2.0 (the "License");
5// you may not use this file except in compliance with the License.
6// You may obtain a copy of the License at
7//
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13// See the License for the specific language governing permissions and
14// limitations under the License.
15*/
16
AppaRao Puli071f3f22018-05-24 16:45:30 +053017#include "channel_layer.hpp"
18
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000019#include <ipmid/api.hpp>
George Liu82844ef2024-07-17 17:03:56 +080020#include <phosphor-logging/lg2.hpp>
Patrick Williamsfbc6c9d2023-05-10 07:50:16 -050021
AppaRao Puli071f3f22018-05-24 16:45:30 +053022#include <regex>
23
AppaRao Puli071f3f22018-05-24 16:45:30 +053024namespace ipmi
25{
26
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000027/** @brief implements the set channel access command
28 * @ param ctx - context pointer
29 * @ param channel - channel number
30 * @ param reserved - skip 4 bits
31 * @ param accessMode - access mode for IPMI messaging
32 * @ param usrAuth - user level authentication (enable/disable)
33 * @ param msgAuth - per message authentication (enable/disable)
34 * @ param alertDisabled - PEF alerting (enable/disable)
35 * @ param chanAccess - channel access
36 * @ param channelPrivLimit - channel privilege limit
37 * @ param reserved - skip 3 bits
38 * @ param channelPrivMode - channel priviledge mode
39 *
40 * @ returns IPMI completion code
41 **/
Patrick Williams1318a5e2024-08-16 15:19:54 -040042RspType<> ipmiSetChannelAccess(
43 Context::ptr ctx, uint4_t channel, uint4_t reserved1, uint3_t accessMode,
44 bool usrAuth, bool msgAuth, bool alertDisabled, uint2_t chanAccess,
45 uint4_t channelPrivLimit, uint2_t reserved2, uint2_t channelPrivMode)
AppaRao Puli071f3f22018-05-24 16:45:30 +053046{
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +000047 if (reserved1 || reserved2 ||
48 !isValidPrivLimit(static_cast<uint8_t>(channelPrivLimit)))
AppaRao Puli071f3f22018-05-24 16:45:30 +053049 {
George Liu82844ef2024-07-17 17:03:56 +080050 lg2::debug("Set channel access - Invalid field in request");
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000051 return responseInvalidFieldRequest();
AppaRao Puli071f3f22018-05-24 16:45:30 +053052 }
53
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +000054 const uint8_t chNum =
55 convertCurrentChannelNum(static_cast<uint8_t>(channel), ctx->channel);
56 if ((getChannelSessionSupport(chNum) == EChannelSessSupported::none) ||
57 (!isValidChannel(chNum)))
AppaRao Puli071f3f22018-05-24 16:45:30 +053058 {
George Liu82844ef2024-07-17 17:03:56 +080059 lg2::debug("Set channel access - No support on channel: {CHANNEL}",
60 "CHANNEL", chNum);
anil kumar appanaddb1f442019-07-04 18:07:27 +000061 return response(ccActionNotSupportedForChannel);
AppaRao Puli071f3f22018-05-24 16:45:30 +053062 }
63
64 ChannelAccess chActData;
65 ChannelAccess chNVData;
66 uint8_t setActFlag = 0;
67 uint8_t setNVFlag = 0;
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000068 Cc compCode;
AppaRao Puli071f3f22018-05-24 16:45:30 +053069
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000070 // cannot static cast directly from uint2_t to enum; must go via int
71 uint8_t channelAccessAction = static_cast<uint8_t>(chanAccess);
72 switch (static_cast<EChannelActionType>(channelAccessAction))
AppaRao Puli071f3f22018-05-24 16:45:30 +053073 {
74 case doNotSet:
AppaRao Puli071f3f22018-05-24 16:45:30 +053075 break;
76 case nvData:
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000077 chNVData.accessMode = static_cast<uint8_t>(accessMode);
78 chNVData.userAuthDisabled = usrAuth;
79 chNVData.perMsgAuthDisabled = msgAuth;
80 chNVData.alertingDisabled = alertDisabled;
AppaRao Puli071f3f22018-05-24 16:45:30 +053081 setNVFlag |= (setAccessMode | setUserAuthEnabled |
82 setMsgAuthEnabled | setAlertingEnabled);
83 break;
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000084
AppaRao Puli071f3f22018-05-24 16:45:30 +053085 case activeData:
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000086 chActData.accessMode = static_cast<uint8_t>(accessMode);
87 chActData.userAuthDisabled = usrAuth;
88 chActData.perMsgAuthDisabled = msgAuth;
89 chActData.alertingDisabled = alertDisabled;
AppaRao Puli071f3f22018-05-24 16:45:30 +053090 setActFlag |= (setAccessMode | setUserAuthEnabled |
91 setMsgAuthEnabled | setAlertingEnabled);
92 break;
NITIN SHARMA89e4bf22019-05-02 13:03:58 +000093
AppaRao Puli071f3f22018-05-24 16:45:30 +053094 case reserved:
95 default:
George Liu82844ef2024-07-17 17:03:56 +080096 lg2::debug("Set channel access - Invalid access set mode");
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +000097 return response(ccAccessModeNotSupportedForChannel);
AppaRao Puli071f3f22018-05-24 16:45:30 +053098 }
99
NITIN SHARMA89e4bf22019-05-02 13:03:58 +0000100 // cannot static cast directly from uint2_t to enum; must go via int
101 uint8_t channelPrivAction = static_cast<uint8_t>(channelPrivMode);
102 switch (static_cast<EChannelActionType>(channelPrivAction))
AppaRao Puli071f3f22018-05-24 16:45:30 +0530103 {
104 case doNotSet:
AppaRao Puli071f3f22018-05-24 16:45:30 +0530105 break;
106 case nvData:
NITIN SHARMA89e4bf22019-05-02 13:03:58 +0000107 chNVData.privLimit = static_cast<uint8_t>(channelPrivLimit);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530108 setNVFlag |= setPrivLimit;
109 break;
110 case activeData:
NITIN SHARMA89e4bf22019-05-02 13:03:58 +0000111 chActData.privLimit = static_cast<uint8_t>(channelPrivLimit);
112
AppaRao Puli071f3f22018-05-24 16:45:30 +0530113 setActFlag |= setPrivLimit;
114 break;
115 case reserved:
116 default:
George Liu82844ef2024-07-17 17:03:56 +0800117 lg2::debug("Set channel access - Invalid access priv mode");
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000118 return response(ccAccessModeNotSupportedForChannel);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530119 }
120
121 if (setNVFlag != 0)
122 {
123 compCode = setChannelAccessPersistData(chNum, chNVData, setNVFlag);
NITIN SHARMAb541a5a2019-07-18 12:46:59 +0000124 if (compCode != ccSuccess)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530125 {
George Liu82844ef2024-07-17 17:03:56 +0800126 lg2::debug("Set channel access - Failed to set access data");
NITIN SHARMA89e4bf22019-05-02 13:03:58 +0000127 return response(compCode);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530128 }
129 }
130
131 if (setActFlag != 0)
132 {
133 compCode = setChannelAccessData(chNum, chActData, setActFlag);
NITIN SHARMAb541a5a2019-07-18 12:46:59 +0000134 if (compCode != ccSuccess)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530135 {
George Liu82844ef2024-07-17 17:03:56 +0800136 lg2::debug("Set channel access - Failed to set access data");
NITIN SHARMA89e4bf22019-05-02 13:03:58 +0000137 return response(compCode);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530138 }
139 }
140
NITIN SHARMA89e4bf22019-05-02 13:03:58 +0000141 return responseSuccess();
AppaRao Puli071f3f22018-05-24 16:45:30 +0530142}
143
Richard Marian Thomaiyarbc5e9ba2019-05-07 13:32:48 +0530144/** @brief implements the get channel access command
145 * @ param ctx - context pointer
146 * @ param channel - channel number
147 * @ param reserved1 - skip 4 bits
148 * @ param reserved2 - skip 6 bits
149 * @ param accessMode - get access mode
150 *
151 * @returns ipmi completion code plus response data
152 * - accessMode - get access mode
153 * - usrAuthDisabled - user level authentication status
154 * - msgAuthDisabled - message level authentication status
155 * - alertDisabled - alerting status
156 * - reserved - skip 2 bits
157 * - privLimit - channel privilege limit
158 * - reserved - skip 4 bits
159 * */
160ipmi ::RspType<uint3_t, // access mode,
161 bool, // user authentication status,
162 bool, // message authentication status,
163 bool, // alerting status,
164 uint2_t, // reserved,
165
166 uint4_t, // channel privilege,
167 uint4_t // reserved
168 >
169 ipmiGetChannelAccess(Context::ptr ctx, uint4_t channel, uint4_t reserved1,
170 uint6_t reserved2, uint2_t accessSetMode)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530171{
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000172 if (reserved1 || reserved2)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530173 {
George Liu82844ef2024-07-17 17:03:56 +0800174 lg2::debug("Get channel access - Invalid field in request");
Richard Marian Thomaiyarbc5e9ba2019-05-07 13:32:48 +0530175 return responseInvalidFieldRequest();
AppaRao Puli071f3f22018-05-24 16:45:30 +0530176 }
177
William A. Kennington III7a0e5df2021-05-19 13:31:29 -0700178 if ((types::enum_cast<EChannelActionType>(accessSetMode) == doNotSet) ||
179 (types::enum_cast<EChannelActionType>(accessSetMode) == reserved))
AppaRao Puli071f3f22018-05-24 16:45:30 +0530180 {
George Liu82844ef2024-07-17 17:03:56 +0800181 lg2::debug("Get channel access - Invalid Access mode");
AppaRao Pulic4f4f7a2020-07-13 16:43:59 +0530182 return responseInvalidFieldRequest();
AppaRao Puli071f3f22018-05-24 16:45:30 +0530183 }
184
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000185 const uint8_t chNum =
186 convertCurrentChannelNum(static_cast<uint8_t>(channel), ctx->channel);
187
188 if ((getChannelSessionSupport(chNum) == EChannelSessSupported::none) ||
189 (!isValidChannel(chNum)))
AppaRao Puli071f3f22018-05-24 16:45:30 +0530190 {
George Liu82844ef2024-07-17 17:03:56 +0800191 lg2::debug("Get channel access - No support on channel: {CHANNEL}",
192 "CHANNEL", chNum);
anil kumar appanaddb1f442019-07-04 18:07:27 +0000193 return response(ccActionNotSupportedForChannel);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530194 }
195
PavanKumarIntel3771f5f2023-11-02 06:26:42 +0000196 ChannelAccess chAccess = {};
AppaRao Puli071f3f22018-05-24 16:45:30 +0530197
William A. Kennington III4c521022023-07-28 13:07:30 -0700198 Cc compCode = ipmi::ccUnspecifiedError;
Richard Marian Thomaiyarbc5e9ba2019-05-07 13:32:48 +0530199
William A. Kennington III7a0e5df2021-05-19 13:31:29 -0700200 if (types::enum_cast<EChannelActionType>(accessSetMode) == nvData)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530201 {
202 compCode = getChannelAccessPersistData(chNum, chAccess);
203 }
William A. Kennington III7a0e5df2021-05-19 13:31:29 -0700204 else if (types::enum_cast<EChannelActionType>(accessSetMode) == activeData)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530205 {
206 compCode = getChannelAccessData(chNum, chAccess);
207 }
208
NITIN SHARMAb541a5a2019-07-18 12:46:59 +0000209 if (compCode != ccSuccess)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530210 {
Richard Marian Thomaiyarbc5e9ba2019-05-07 13:32:48 +0530211 return response(compCode);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530212 }
213
Richard Marian Thomaiyarbc5e9ba2019-05-07 13:32:48 +0530214 constexpr uint2_t reservedOut1 = 0;
215 constexpr uint4_t reservedOut2 = 0;
AppaRao Puli071f3f22018-05-24 16:45:30 +0530216
Richard Marian Thomaiyarbc5e9ba2019-05-07 13:32:48 +0530217 return responseSuccess(
William A. Kennington III7a0e5df2021-05-19 13:31:29 -0700218 types::enum_cast<uint3_t>(chAccess.accessMode),
219 chAccess.userAuthDisabled, chAccess.perMsgAuthDisabled,
220 chAccess.alertingDisabled, reservedOut1,
221 types::enum_cast<uint4_t>(chAccess.privLimit), reservedOut2);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530222}
223
Vernon Mauery6f1e9782019-05-02 16:31:07 -0700224/** @brief implements the get channel info command
225 * @ param ctx - context pointer
226 * @ param channel - channel number
227 * @ param reserved - skip 4 bits
228 *
229 * @returns ipmi completion code plus response data
230 * - chNum - the channel number for this request
231 * - mediumType - see Table 6-3, Channel Medium Type Numbers
232 * - protocolType - Table 6-2, Channel Protocol Type Numbers
233 * - activeSessionCount - number of active sessions
234 * - sessionType - channel support for sessions
235 * - vendorId - vendor for this channel protocol (IPMI - 7154)
236 * - auxChInfo - auxiliary info for channel
237 * */
238RspType<uint4_t, // chNum
239 uint4_t, // reserved
240 uint7_t, // mediumType
241 bool, // reserved
242 uint5_t, // protocolType
243 uint3_t, // reserved
244 uint6_t, // activeSessionCount
245 uint2_t, // sessionType
246 uint24_t, // Vendor IANA
247 uint16_t // aux info
248 >
249 ipmiGetChannelInfo(Context::ptr ctx, uint4_t channel, uint4_t reserved)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530250{
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000251 if (reserved)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530252 {
George Liu82844ef2024-07-17 17:03:56 +0800253 lg2::debug("Get channel access - Invalid field in request");
Vernon Mauery6f1e9782019-05-02 16:31:07 -0700254 return responseInvalidFieldRequest();
AppaRao Puli071f3f22018-05-24 16:45:30 +0530255 }
256
Patrick Williams1318a5e2024-08-16 15:19:54 -0400257 uint8_t chNum =
258 convertCurrentChannelNum(static_cast<uint8_t>(channel), ctx->channel);
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000259 if (!isValidChannel(chNum))
260 {
George Liu82844ef2024-07-17 17:03:56 +0800261 lg2::debug("Get channel Info - No support on channel: {CHANNEL}",
262 "CHANNEL", chNum);
Jayaprakash Mutyalaafd12b42020-07-07 01:06:57 +0000263 return responseInvalidFieldRequest();
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000264 }
265
AppaRao Puli071f3f22018-05-24 16:45:30 +0530266 ChannelInfo chInfo;
Vernon Mauery6f1e9782019-05-02 16:31:07 -0700267 Cc compCode = getChannelInfo(chNum, chInfo);
268 if (compCode != ccSuccess)
AppaRao Puli071f3f22018-05-24 16:45:30 +0530269 {
George Liu82844ef2024-07-17 17:03:56 +0800270 lg2::error("Failed to get channel info, channel: {CHANNEL}, "
271 "errno: {ERRNO}",
272 "CHANNEL", chNum, "ERRNO", compCode);
Vernon Mauery6f1e9782019-05-02 16:31:07 -0700273 return response(compCode);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530274 }
275
Vernon Mauery6f1e9782019-05-02 16:31:07 -0700276 constexpr uint4_t reserved1 = 0;
277 constexpr bool reserved2 = false;
278 constexpr uint3_t reserved3 = 0;
279 uint8_t mediumType = chInfo.mediumType;
280 uint8_t protocolType = chInfo.protocolType;
281 uint2_t sessionType = chInfo.sessionSupported;
282 uint6_t activeSessionCount = getChannelActiveSessions(chNum);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530283 // IPMI Spec: The IPMI Enterprise Number is: 7154 (decimal)
Vernon Mauery6f1e9782019-05-02 16:31:07 -0700284 constexpr uint24_t vendorId = 7154;
285 constexpr uint16_t auxChInfo = 0;
AppaRao Puli071f3f22018-05-24 16:45:30 +0530286
Vernon Mauery6f1e9782019-05-02 16:31:07 -0700287 return responseSuccess(chNum, reserved1, mediumType, reserved2,
288 protocolType, reserved3, activeSessionCount,
289 sessionType, vendorId, auxChInfo);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530290}
291
Vernon Maueryf6092892019-05-02 16:35:10 -0700292namespace
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530293{
Vernon Maueryf6092892019-05-02 16:35:10 -0700294constexpr uint16_t standardPayloadBit(PayloadType p)
295{
296 return (1 << static_cast<size_t>(p));
297}
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530298
Vernon Maueryf6092892019-05-02 16:35:10 -0700299constexpr uint16_t sessionPayloadBit(PayloadType p)
300{
301 constexpr size_t sessionShift =
302 static_cast<size_t>(PayloadType::OPEN_SESSION_REQUEST);
303 return ((1 << static_cast<size_t>(p)) >> sessionShift);
304}
305} // namespace
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530306
Vernon Maueryf6092892019-05-02 16:35:10 -0700307/** @brief implements get channel payload support command
308 * @ param ctx - ipmi context pointer
309 * @ param chNum - channel number
310 * @ param reserved - skip 4 bits
311 *
312 * @ returns IPMI completion code plus response data
313 * - stdPayloadType - bitmask of supported standard payload types
314 * - sessSetupPayloadType - bitmask of supported session setup payload types
315 * - OEMPayloadType - bitmask of supported OEM payload types
316 * - reserved - 2 bytes of 0
317 **/
318RspType<uint16_t, // stdPayloadType
319 uint16_t, // sessSetupPayloadType
320 uint16_t, // OEMPayloadType
321 uint16_t // reserved
322 >
323 ipmiGetChannelPayloadSupport(Context::ptr ctx, uint4_t channel,
324 uint4_t reserved)
325{
Patrick Williams1318a5e2024-08-16 15:19:54 -0400326 uint8_t chNum =
327 convertCurrentChannelNum(static_cast<uint8_t>(channel), ctx->channel);
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000328
329 if (!doesDeviceExist(chNum) || !isValidChannel(chNum) || reserved)
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530330 {
George Liu82844ef2024-07-17 17:03:56 +0800331 lg2::debug("Get channel payload - Invalid field in request");
Vernon Maueryf6092892019-05-02 16:35:10 -0700332 return responseInvalidFieldRequest();
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530333 }
334
335 // Session support is available in active LAN channels.
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000336 if (getChannelSessionSupport(chNum) == EChannelSessSupported::none)
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530337 {
George Liu82844ef2024-07-17 17:03:56 +0800338 lg2::debug("Get channel payload - No support on channel");
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000339 return response(ccActionNotSupportedForChannel);
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530340 }
Vernon Maueryf6092892019-05-02 16:35:10 -0700341 constexpr uint16_t stdPayloadType = standardPayloadBit(PayloadType::IPMI) |
342 standardPayloadBit(PayloadType::SOL);
343 constexpr uint16_t sessSetupPayloadType =
344 sessionPayloadBit(PayloadType::OPEN_SESSION_REQUEST) |
345 sessionPayloadBit(PayloadType::OPEN_SESSION_RESPONSE) |
346 sessionPayloadBit(PayloadType::RAKP1) |
347 sessionPayloadBit(PayloadType::RAKP2) |
348 sessionPayloadBit(PayloadType::RAKP3) |
349 sessionPayloadBit(PayloadType::RAKP4);
350 constexpr uint16_t OEMPayloadType = 0;
351 constexpr uint16_t rspRsvd = 0;
352 return responseSuccess(stdPayloadType, sessSetupPayloadType, OEMPayloadType,
353 rspRsvd);
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530354}
355
Ayushi Smriti6fd812d2019-04-12 18:51:31 +0000356/** @brief implements the get channel payload version command
357 * @param ctx - IPMI context pointer (for channel)
358 * @param chNum - channel number to get info about
359 * @param reserved - skip 4 bits
360 * @param payloadTypeNum - to get payload type info
361
362 * @returns IPMI completion code plus response data
363 * - formatVersion - BCD encoded format version info
364 */
365
366RspType<uint8_t> // formatVersion
367 ipmiGetChannelPayloadVersion(Context::ptr ctx, uint4_t chNum,
368 uint4_t reserved, uint8_t payloadTypeNum)
369{
Patrick Williams1318a5e2024-08-16 15:19:54 -0400370 uint8_t channel =
371 convertCurrentChannelNum(static_cast<uint8_t>(chNum), ctx->channel);
Manoj Ashok271d9c22021-07-22 23:21:31 +0530372 constexpr uint8_t payloadTypeNotSupported = 0x80;
Ayushi Smriti6fd812d2019-04-12 18:51:31 +0000373
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000374 if (reserved || !isValidChannel(channel))
Ayushi Smriti6fd812d2019-04-12 18:51:31 +0000375 {
George Liu82844ef2024-07-17 17:03:56 +0800376 lg2::debug("Get channel payload version - Invalid field in request");
Ayushi Smriti6fd812d2019-04-12 18:51:31 +0000377 return responseInvalidFieldRequest();
378 }
379
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000380 if (getChannelSessionSupport(channel) == EChannelSessSupported::none)
381 {
George Liu82844ef2024-07-17 17:03:56 +0800382 lg2::debug("Get channel payload version - No support on channel");
Manoj Ashok271d9c22021-07-22 23:21:31 +0530383 return response(payloadTypeNotSupported);
jayaprakash Mutyala0e2dbee2019-12-26 13:03:04 +0000384 }
385
Ayushi Smriti6fd812d2019-04-12 18:51:31 +0000386 if (!isValidPayloadType(static_cast<PayloadType>(payloadTypeNum)))
387 {
George Liu82844ef2024-07-17 17:03:56 +0800388 lg2::error("Get channel payload version - Payload type unavailable");
Ayushi Smriti6fd812d2019-04-12 18:51:31 +0000389
Ayushi Smriti6fd812d2019-04-12 18:51:31 +0000390 return response(payloadTypeNotSupported);
391 }
392
393 // BCD encoded version representation - 1.0
394 constexpr uint8_t formatVersion = 0x10;
395
396 return responseSuccess(formatVersion);
397}
398
William A. Kennington III343d0612018-12-10 15:56:24 -0800399void registerChannelFunctions() __attribute__((constructor));
AppaRao Puli071f3f22018-05-24 16:45:30 +0530400void registerChannelFunctions()
401{
402 ipmiChannelInit();
403
NITIN SHARMA89e4bf22019-05-02 13:03:58 +0000404 registerHandler(prioOpenBmcBase, netFnApp, app::cmdSetChannelAccess,
405 Privilege::Admin, ipmiSetChannelAccess);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530406
Richard Marian Thomaiyarbc5e9ba2019-05-07 13:32:48 +0530407 registerHandler(prioOpenBmcBase, netFnApp, app::cmdGetChannelAccess,
408 Privilege::User, ipmiGetChannelAccess);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530409
Vernon Mauery6f1e9782019-05-02 16:31:07 -0700410 registerHandler(prioOpenBmcBase, netFnApp, app::cmdGetChannelInfoCommand,
411 Privilege::User, ipmiGetChannelInfo);
Saravanan Palanisamyb5a0f162019-03-04 18:34:44 +0530412
Vernon Maueryf6092892019-05-02 16:35:10 -0700413 registerHandler(prioOpenBmcBase, netFnApp, app::cmdGetChannelPayloadSupport,
414 Privilege::User, ipmiGetChannelPayloadSupport);
Ayushi Smriti6fd812d2019-04-12 18:51:31 +0000415
416 registerHandler(prioOpenBmcBase, netFnApp, app::cmdGetChannelPayloadVersion,
417 Privilege::User, ipmiGetChannelPayloadVersion);
AppaRao Puli071f3f22018-05-24 16:45:30 +0530418}
419
420} // namespace ipmi