14654d99fSRichard Marian Thomaiyar /* 24654d99fSRichard Marian Thomaiyar // Copyright (c) 2018 Intel Corporation 34654d99fSRichard Marian Thomaiyar // 44654d99fSRichard Marian Thomaiyar // Licensed under the Apache License, Version 2.0 (the "License"); 54654d99fSRichard Marian Thomaiyar // you may not use this file except in compliance with the License. 64654d99fSRichard Marian Thomaiyar // You may obtain a copy of the License at 74654d99fSRichard Marian Thomaiyar // 84654d99fSRichard Marian Thomaiyar // http://www.apache.org/licenses/LICENSE-2.0 94654d99fSRichard Marian Thomaiyar // 104654d99fSRichard Marian Thomaiyar // Unless required by applicable law or agreed to in writing, software 114654d99fSRichard Marian Thomaiyar // distributed under the License is distributed on an "AS IS" BASIS, 124654d99fSRichard Marian Thomaiyar // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134654d99fSRichard Marian Thomaiyar // See the License for the specific language governing permissions and 144654d99fSRichard Marian Thomaiyar // limitations under the License. 154654d99fSRichard Marian Thomaiyar */ 164654d99fSRichard Marian Thomaiyar #pragma once 174654d99fSRichard Marian Thomaiyar #include <host-ipmid/ipmid-api.h> 184654d99fSRichard Marian Thomaiyar 194654d99fSRichard Marian Thomaiyar #include <string> 204654d99fSRichard Marian Thomaiyar 214654d99fSRichard Marian Thomaiyar namespace ipmi 224654d99fSRichard Marian Thomaiyar { 23*5a6b6369SRichard Marian Thomaiyar 24*5a6b6369SRichard Marian Thomaiyar // TODO: Has to be replaced with proper channel number assignment logic 25*5a6b6369SRichard Marian Thomaiyar enum class EChannelID : uint8_t 26*5a6b6369SRichard Marian Thomaiyar { 27*5a6b6369SRichard Marian Thomaiyar chanLan1 = 0x01 28*5a6b6369SRichard Marian Thomaiyar }; 29*5a6b6369SRichard Marian Thomaiyar 30*5a6b6369SRichard Marian Thomaiyar static constexpr uint8_t invalidUserId = 0xFF; 31*5a6b6369SRichard Marian Thomaiyar static constexpr uint8_t reservedUserId = 0x0; 32*5a6b6369SRichard Marian Thomaiyar static constexpr uint8_t ipmiMaxUserName = 16; 33*5a6b6369SRichard Marian Thomaiyar static constexpr uint8_t ipmiMaxUsers = 15; 34*5a6b6369SRichard Marian Thomaiyar static constexpr uint8_t ipmiMaxChannels = 16; 35*5a6b6369SRichard Marian Thomaiyar 36*5a6b6369SRichard Marian Thomaiyar struct PrivAccess 37*5a6b6369SRichard Marian Thomaiyar { 38*5a6b6369SRichard Marian Thomaiyar #if BYTE_ORDER == LITTLE_ENDIAN 39*5a6b6369SRichard Marian Thomaiyar uint8_t privilege : 4; 40*5a6b6369SRichard Marian Thomaiyar uint8_t ipmiEnabled : 1; 41*5a6b6369SRichard Marian Thomaiyar uint8_t linkAuthEnabled : 1; 42*5a6b6369SRichard Marian Thomaiyar uint8_t accessCallback : 1; 43*5a6b6369SRichard Marian Thomaiyar uint8_t reserved : 1; 44*5a6b6369SRichard Marian Thomaiyar #endif 45*5a6b6369SRichard Marian Thomaiyar #if BYTE_ORDER == BIG_ENDIAN 46*5a6b6369SRichard Marian Thomaiyar uint8_t reserved : 1; 47*5a6b6369SRichard Marian Thomaiyar uint8_t accessCallback : 1; 48*5a6b6369SRichard Marian Thomaiyar uint8_t linkAuthEnabled : 1; 49*5a6b6369SRichard Marian Thomaiyar uint8_t ipmiEnabled : 1; 50*5a6b6369SRichard Marian Thomaiyar uint8_t privilege : 4; 51*5a6b6369SRichard Marian Thomaiyar #endif 52*5a6b6369SRichard Marian Thomaiyar } __attribute__((packed)); 53*5a6b6369SRichard Marian Thomaiyar 54*5a6b6369SRichard Marian Thomaiyar /** @brief initializes user management 55*5a6b6369SRichard Marian Thomaiyar * 56*5a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 57*5a6b6369SRichard Marian Thomaiyar */ 58*5a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserInit(); 59*5a6b6369SRichard Marian Thomaiyar 604654d99fSRichard Marian Thomaiyar /** @brief The ipmi get user password layer call 614654d99fSRichard Marian Thomaiyar * 62*5a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name 634654d99fSRichard Marian Thomaiyar * 644654d99fSRichard Marian Thomaiyar * @return password or empty string 654654d99fSRichard Marian Thomaiyar */ 664654d99fSRichard Marian Thomaiyar std::string ipmiUserGetPassword(const std::string& userName); 674654d99fSRichard Marian Thomaiyar 68b29b5ab3SAppaRao Puli /** @brief The IPMI call to clear password entry associated with specified 69b29b5ab3SAppaRao Puli * username 70b29b5ab3SAppaRao Puli * 71*5a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name to be removed 72b29b5ab3SAppaRao Puli * 73b29b5ab3SAppaRao Puli * @return 0 on success, non-zero otherwise. 74b29b5ab3SAppaRao Puli */ 7542bed64dSRichard Marian Thomaiyar ipmi_ret_t ipmiClearUserEntryPassword(const std::string& userName); 7642bed64dSRichard Marian Thomaiyar 7742bed64dSRichard Marian Thomaiyar /** @brief The IPMI call to reuse password entry for the renamed user 7842bed64dSRichard Marian Thomaiyar * to another one 7942bed64dSRichard Marian Thomaiyar * 80*5a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name which has to be renamed 81*5a6b6369SRichard Marian Thomaiyar * @param[in] newUserName - new user name 8242bed64dSRichard Marian Thomaiyar * 8342bed64dSRichard Marian Thomaiyar * @return 0 on success, non-zero otherwise. 8442bed64dSRichard Marian Thomaiyar */ 8542bed64dSRichard Marian Thomaiyar ipmi_ret_t ipmiRenameUserEntryPassword(const std::string& userName, 8642bed64dSRichard Marian Thomaiyar const std::string& newUserName); 87b29b5ab3SAppaRao Puli 88*5a6b6369SRichard Marian Thomaiyar /** @brief determines valid userId 89*5a6b6369SRichard Marian Thomaiyar * 90*5a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 91*5a6b6369SRichard Marian Thomaiyar * 92*5a6b6369SRichard Marian Thomaiyar * @return true if valid, false otherwise 93*5a6b6369SRichard Marian Thomaiyar */ 94*5a6b6369SRichard Marian Thomaiyar bool ipmiUserIsValidUserId(const uint8_t& userId); 95*5a6b6369SRichard Marian Thomaiyar 96*5a6b6369SRichard Marian Thomaiyar /** @brief determines valid channel 97*5a6b6369SRichard Marian Thomaiyar * 98*5a6b6369SRichard Marian Thomaiyar * @param[in] chNum- channel number 99*5a6b6369SRichard Marian Thomaiyar * 100*5a6b6369SRichard Marian Thomaiyar * @return true if valid, false otherwise 101*5a6b6369SRichard Marian Thomaiyar */ 102*5a6b6369SRichard Marian Thomaiyar bool ipmiUserIsValidChannel(const uint8_t& chNum); 103*5a6b6369SRichard Marian Thomaiyar 104*5a6b6369SRichard Marian Thomaiyar /** @brief determines valid privilege level 105*5a6b6369SRichard Marian Thomaiyar * 106*5a6b6369SRichard Marian Thomaiyar * @param[in] priv - privilege level 107*5a6b6369SRichard Marian Thomaiyar * 108*5a6b6369SRichard Marian Thomaiyar * @return true if valid, false otherwise 109*5a6b6369SRichard Marian Thomaiyar */ 110*5a6b6369SRichard Marian Thomaiyar bool ipmiUserIsValidPrivilege(const uint8_t& priv); 111*5a6b6369SRichard Marian Thomaiyar 112*5a6b6369SRichard Marian Thomaiyar /** @brief get user id corresponding to the user name 113*5a6b6369SRichard Marian Thomaiyar * 114*5a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name 115*5a6b6369SRichard Marian Thomaiyar * 116*5a6b6369SRichard Marian Thomaiyar * @return userid. Will return 0xff if no user id found 117*5a6b6369SRichard Marian Thomaiyar */ 118*5a6b6369SRichard Marian Thomaiyar uint8_t ipmiUserGetUserId(const std::string& userName); 119*5a6b6369SRichard Marian Thomaiyar 120*5a6b6369SRichard Marian Thomaiyar /** @brief set's user name 121*5a6b6369SRichard Marian Thomaiyar * 122*5a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 123*5a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name 124*5a6b6369SRichard Marian Thomaiyar * 125*5a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 126*5a6b6369SRichard Marian Thomaiyar */ 127*5a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserSetUserName(const uint8_t& userId, const char* userName); 128*5a6b6369SRichard Marian Thomaiyar 129*5a6b6369SRichard Marian Thomaiyar /** @brief get user name 130*5a6b6369SRichard Marian Thomaiyar * 131*5a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 132*5a6b6369SRichard Marian Thomaiyar * @param[out] userName - user name 133*5a6b6369SRichard Marian Thomaiyar * 134*5a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 135*5a6b6369SRichard Marian Thomaiyar */ 136*5a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserGetUserName(const uint8_t& userId, std::string& userName); 137*5a6b6369SRichard Marian Thomaiyar 138*5a6b6369SRichard Marian Thomaiyar /** @brief provides available fixed, max, and enabled user counts 139*5a6b6369SRichard Marian Thomaiyar * 140*5a6b6369SRichard Marian Thomaiyar * @param[out] maxChUsers - max channel users 141*5a6b6369SRichard Marian Thomaiyar * @param[out] enabledUsers - enabled user count 142*5a6b6369SRichard Marian Thomaiyar * @param[out] fixedUsers - fixed user count 143*5a6b6369SRichard Marian Thomaiyar * 144*5a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 145*5a6b6369SRichard Marian Thomaiyar */ 146*5a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserGetAllCounts(uint8_t& maxChUsers, uint8_t& enabledUsers, 147*5a6b6369SRichard Marian Thomaiyar uint8_t& fixedUsers); 148*5a6b6369SRichard Marian Thomaiyar 149*5a6b6369SRichard Marian Thomaiyar /** @brief determines whether user is enabled 150*5a6b6369SRichard Marian Thomaiyar * 151*5a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 152*5a6b6369SRichard Marian Thomaiyar *..@param[out] state - state of the user 153*5a6b6369SRichard Marian Thomaiyar * 154*5a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 155*5a6b6369SRichard Marian Thomaiyar */ 156*5a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserCheckEnabled(const uint8_t& userId, bool& state); 157*5a6b6369SRichard Marian Thomaiyar 158*5a6b6369SRichard Marian Thomaiyar /** @brief provides user privilege access data 159*5a6b6369SRichard Marian Thomaiyar * 160*5a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 161*5a6b6369SRichard Marian Thomaiyar * @param[in] chNum - channel number 162*5a6b6369SRichard Marian Thomaiyar * @param[out] privAccess - privilege access data 163*5a6b6369SRichard Marian Thomaiyar * 164*5a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 165*5a6b6369SRichard Marian Thomaiyar */ 166*5a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserGetPrivilegeAccess(const uint8_t& userId, 167*5a6b6369SRichard Marian Thomaiyar const uint8_t& chNum, 168*5a6b6369SRichard Marian Thomaiyar PrivAccess& privAccess); 169*5a6b6369SRichard Marian Thomaiyar 170*5a6b6369SRichard Marian Thomaiyar /** @brief sets user privilege access data 171*5a6b6369SRichard Marian Thomaiyar * 172*5a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 173*5a6b6369SRichard Marian Thomaiyar * @param[in] chNum - channel number 174*5a6b6369SRichard Marian Thomaiyar * @param[in] privAccess - privilege access data 175*5a6b6369SRichard Marian Thomaiyar * @param[in] otherPrivUpdate - flags to indicate other fields update 176*5a6b6369SRichard Marian Thomaiyar * 177*5a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 178*5a6b6369SRichard Marian Thomaiyar */ 179*5a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserSetPrivilegeAccess(const uint8_t& userId, 180*5a6b6369SRichard Marian Thomaiyar const uint8_t& chNum, 181*5a6b6369SRichard Marian Thomaiyar const PrivAccess& privAccess, 182*5a6b6369SRichard Marian Thomaiyar const bool& otherPrivUpdate); 183*5a6b6369SRichard Marian Thomaiyar 1844654d99fSRichard Marian Thomaiyar } // namespace ipmi 185