1 /*
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 
17 #include "channel_layer.hpp"
18 
19 #include "channel_mgmt.hpp"
20 
21 #include <phosphor-logging/log.hpp>
22 
23 namespace ipmi
24 {
25 
26 bool doesDeviceExist(const uint8_t chNum)
27 {
28     // TODO: This is not the reliable way to find the device
29     // associated with ethernet interface as the channel number to
30     // eth association is not done. Need to revisit later
31     struct stat fileStat = {0};
32     std::string devName("/sys/class/net/" + getChannelName(chNum));
33 
34     if (stat(devName.data(), &fileStat) != 0)
35     {
36         phosphor::logging::log<phosphor::logging::level::DEBUG>(
37             "Ethernet device not found");
38         return false;
39     }
40 
41     return true;
42 }
43 
44 bool isValidPrivLimit(const uint8_t privLimit)
45 {
46     return ((privLimit >= PRIVILEGE_CALLBACK) && (privLimit <= PRIVILEGE_OEM));
47 }
48 
49 bool isValidAccessMode(const uint8_t accessMode)
50 {
51     return (
52         (accessMode >= static_cast<uint8_t>(EChannelAccessMode::disabled)) &&
53         (accessMode <= static_cast<uint8_t>(EChannelAccessMode::shared)));
54 }
55 
56 bool isValidChannel(const uint8_t chNum)
57 {
58     return getChannelConfigObject().isValidChannel(chNum);
59 }
60 
61 bool isValidAuthType(const uint8_t chNum, const EAuthType& authType)
62 {
63     return getChannelConfigObject().isValidAuthType(chNum, authType);
64 }
65 
66 EChannelSessSupported getChannelSessionSupport(const uint8_t chNum)
67 {
68     return getChannelConfigObject().getChannelSessionSupport(chNum);
69 }
70 
71 int getChannelActiveSessions(const uint8_t chNum)
72 {
73     return getChannelConfigObject().getChannelActiveSessions(chNum);
74 }
75 
76 size_t getChannelMaxTransferSize(uint8_t chNum)
77 {
78     return getChannelConfigObject().getChannelMaxTransferSize(chNum);
79 }
80 
81 ipmi_ret_t ipmiChannelInit()
82 {
83     getChannelConfigObject();
84     return IPMI_CC_OK;
85 }
86 
87 ipmi_ret_t getChannelInfo(const uint8_t chNum, ChannelInfo& chInfo)
88 {
89     return getChannelConfigObject().getChannelInfo(chNum, chInfo);
90 }
91 
92 ipmi_ret_t getChannelAccessData(const uint8_t chNum,
93                                 ChannelAccess& chAccessData)
94 {
95     return getChannelConfigObject().getChannelAccessData(chNum, chAccessData);
96 }
97 
98 ipmi_ret_t setChannelAccessData(const uint8_t chNum,
99                                 const ChannelAccess& chAccessData,
100                                 const uint8_t setFlag)
101 {
102     return getChannelConfigObject().setChannelAccessData(chNum, chAccessData,
103                                                          setFlag);
104 }
105 
106 ipmi_ret_t getChannelAccessPersistData(const uint8_t chNum,
107                                        ChannelAccess& chAccessData)
108 {
109     return getChannelConfigObject().getChannelAccessPersistData(chNum,
110                                                                 chAccessData);
111 }
112 
113 ipmi_ret_t setChannelAccessPersistData(const uint8_t chNum,
114                                        const ChannelAccess& chAccessData,
115                                        const uint8_t setFlag)
116 {
117     return getChannelConfigObject().setChannelAccessPersistData(
118         chNum, chAccessData, setFlag);
119 }
120 
121 ipmi_ret_t getChannelAuthTypeSupported(const uint8_t chNum,
122                                        uint8_t& authTypeSupported)
123 {
124     return getChannelConfigObject().getChannelAuthTypeSupported(
125         chNum, authTypeSupported);
126 }
127 
128 ipmi_ret_t getChannelEnabledAuthType(const uint8_t chNum, const uint8_t priv,
129                                      EAuthType& authType)
130 {
131     return getChannelConfigObject().getChannelEnabledAuthType(chNum, priv,
132                                                               authType);
133 }
134 
135 std::string getChannelName(const uint8_t chNum)
136 {
137     return getChannelConfigObject().getChannelName(chNum);
138 }
139 
140 uint8_t getChannelByName(const std::string& chName)
141 {
142     return getChannelConfigObject().getChannelByName(chName);
143 }
144 
145 bool isValidPayloadType(const PayloadType payloadType)
146 {
147     return (
148         payloadType == PayloadType::IPMI || payloadType == PayloadType::SOL ||
149         payloadType == PayloadType::OPEN_SESSION_REQUEST ||
150         payloadType == PayloadType::OPEN_SESSION_RESPONSE ||
151         payloadType == PayloadType::RAKP1 ||
152         payloadType == PayloadType::RAKP2 ||
153         payloadType == PayloadType::RAKP3 || payloadType == PayloadType::RAKP4);
154 }
155 } // namespace ipmi
156