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 17194375f2SWilliam A. Kennington III #include <ipmid/api.h> 184654d99fSRichard Marian Thomaiyar 194654d99fSRichard Marian Thomaiyar #include <string> 204654d99fSRichard Marian Thomaiyar 214654d99fSRichard Marian Thomaiyar namespace ipmi 224654d99fSRichard Marian Thomaiyar { 235a6b6369SRichard Marian Thomaiyar 245a6b6369SRichard Marian Thomaiyar // TODO: Has to be replaced with proper channel number assignment logic 256e1ba9efSRichard Marian Thomaiyar /** 266e1ba9efSRichard Marian Thomaiyar * @enum Channel Id 276e1ba9efSRichard Marian Thomaiyar */ 285a6b6369SRichard Marian Thomaiyar enum class EChannelID : uint8_t 295a6b6369SRichard Marian Thomaiyar { 305a6b6369SRichard Marian Thomaiyar chanLan1 = 0x01 315a6b6369SRichard Marian Thomaiyar }; 325a6b6369SRichard Marian Thomaiyar 335a6b6369SRichard Marian Thomaiyar static constexpr uint8_t invalidUserId = 0xFF; 345a6b6369SRichard Marian Thomaiyar static constexpr uint8_t reservedUserId = 0x0; 355a6b6369SRichard Marian Thomaiyar static constexpr uint8_t ipmiMaxUserName = 16; 365a6b6369SRichard Marian Thomaiyar static constexpr uint8_t ipmiMaxUsers = 15; 375a6b6369SRichard Marian Thomaiyar static constexpr uint8_t ipmiMaxChannels = 16; 38*90b00c71SSuryakanth Sekar static constexpr uint8_t maxIpmi20PasswordSize = 20; 39*90b00c71SSuryakanth Sekar static constexpr uint8_t maxIpmi15PasswordSize = 16; 405a6b6369SRichard Marian Thomaiyar 416e1ba9efSRichard Marian Thomaiyar /** @struct PrivAccess 426e1ba9efSRichard Marian Thomaiyar * 436e1ba9efSRichard Marian Thomaiyar * User privilege related access data as per IPMI specification.(refer spec 446e1ba9efSRichard Marian Thomaiyar * sec 22.26) 456e1ba9efSRichard Marian Thomaiyar */ 465a6b6369SRichard Marian Thomaiyar struct PrivAccess 475a6b6369SRichard Marian Thomaiyar { 485a6b6369SRichard Marian Thomaiyar #if BYTE_ORDER == LITTLE_ENDIAN 495a6b6369SRichard Marian Thomaiyar uint8_t privilege : 4; 505a6b6369SRichard Marian Thomaiyar uint8_t ipmiEnabled : 1; 515a6b6369SRichard Marian Thomaiyar uint8_t linkAuthEnabled : 1; 525a6b6369SRichard Marian Thomaiyar uint8_t accessCallback : 1; 535a6b6369SRichard Marian Thomaiyar uint8_t reserved : 1; 545a6b6369SRichard Marian Thomaiyar #endif 555a6b6369SRichard Marian Thomaiyar #if BYTE_ORDER == BIG_ENDIAN 565a6b6369SRichard Marian Thomaiyar uint8_t reserved : 1; 575a6b6369SRichard Marian Thomaiyar uint8_t accessCallback : 1; 585a6b6369SRichard Marian Thomaiyar uint8_t linkAuthEnabled : 1; 595a6b6369SRichard Marian Thomaiyar uint8_t ipmiEnabled : 1; 605a6b6369SRichard Marian Thomaiyar uint8_t privilege : 4; 615a6b6369SRichard Marian Thomaiyar #endif 625a6b6369SRichard Marian Thomaiyar } __attribute__((packed)); 635a6b6369SRichard Marian Thomaiyar 645a6b6369SRichard Marian Thomaiyar /** @brief initializes user management 655a6b6369SRichard Marian Thomaiyar * 665a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 675a6b6369SRichard Marian Thomaiyar */ 685a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserInit(); 695a6b6369SRichard Marian Thomaiyar 704654d99fSRichard Marian Thomaiyar /** @brief The ipmi get user password layer call 714654d99fSRichard Marian Thomaiyar * 725a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name 734654d99fSRichard Marian Thomaiyar * 744654d99fSRichard Marian Thomaiyar * @return password or empty string 754654d99fSRichard Marian Thomaiyar */ 764654d99fSRichard Marian Thomaiyar std::string ipmiUserGetPassword(const std::string& userName); 774654d99fSRichard Marian Thomaiyar 78b29b5ab3SAppaRao Puli /** @brief The IPMI call to clear password entry associated with specified 79b29b5ab3SAppaRao Puli * username 80b29b5ab3SAppaRao Puli * 815a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name to be removed 82b29b5ab3SAppaRao Puli * 83b29b5ab3SAppaRao Puli * @return 0 on success, non-zero otherwise. 84b29b5ab3SAppaRao Puli */ 8542bed64dSRichard Marian Thomaiyar ipmi_ret_t ipmiClearUserEntryPassword(const std::string& userName); 8642bed64dSRichard Marian Thomaiyar 8742bed64dSRichard Marian Thomaiyar /** @brief The IPMI call to reuse password entry for the renamed user 8842bed64dSRichard Marian Thomaiyar * to another one 8942bed64dSRichard Marian Thomaiyar * 905a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name which has to be renamed 915a6b6369SRichard Marian Thomaiyar * @param[in] newUserName - new user name 9242bed64dSRichard Marian Thomaiyar * 9342bed64dSRichard Marian Thomaiyar * @return 0 on success, non-zero otherwise. 9442bed64dSRichard Marian Thomaiyar */ 9542bed64dSRichard Marian Thomaiyar ipmi_ret_t ipmiRenameUserEntryPassword(const std::string& userName, 9642bed64dSRichard Marian Thomaiyar const std::string& newUserName); 97b29b5ab3SAppaRao Puli 985a6b6369SRichard Marian Thomaiyar /** @brief determines valid userId 995a6b6369SRichard Marian Thomaiyar * 1005a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 1015a6b6369SRichard Marian Thomaiyar * 1025a6b6369SRichard Marian Thomaiyar * @return true if valid, false otherwise 1035a6b6369SRichard Marian Thomaiyar */ 104a45cb34fSRichard Marian Thomaiyar bool ipmiUserIsValidUserId(const uint8_t userId); 1055a6b6369SRichard Marian Thomaiyar 1065a6b6369SRichard Marian Thomaiyar /** @brief determines valid privilege level 1075a6b6369SRichard Marian Thomaiyar * 1085a6b6369SRichard Marian Thomaiyar * @param[in] priv - privilege level 1095a6b6369SRichard Marian Thomaiyar * 1105a6b6369SRichard Marian Thomaiyar * @return true if valid, false otherwise 1115a6b6369SRichard Marian Thomaiyar */ 112a45cb34fSRichard Marian Thomaiyar bool ipmiUserIsValidPrivilege(const uint8_t priv); 1135a6b6369SRichard Marian Thomaiyar 1145a6b6369SRichard Marian Thomaiyar /** @brief get user id corresponding to the user name 1155a6b6369SRichard Marian Thomaiyar * 1165a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name 1175a6b6369SRichard Marian Thomaiyar * 1185a6b6369SRichard Marian Thomaiyar * @return userid. Will return 0xff if no user id found 1195a6b6369SRichard Marian Thomaiyar */ 1205a6b6369SRichard Marian Thomaiyar uint8_t ipmiUserGetUserId(const std::string& userName); 1215a6b6369SRichard Marian Thomaiyar 1225a6b6369SRichard Marian Thomaiyar /** @brief set's user name 1235a6b6369SRichard Marian Thomaiyar * 1245a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 1255a6b6369SRichard Marian Thomaiyar * @param[in] userName - user name 1265a6b6369SRichard Marian Thomaiyar * 1275a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 1285a6b6369SRichard Marian Thomaiyar */ 129a45cb34fSRichard Marian Thomaiyar ipmi_ret_t ipmiUserSetUserName(const uint8_t userId, const char* userName); 1305a6b6369SRichard Marian Thomaiyar 131*90b00c71SSuryakanth Sekar /** @brief set user password 132*90b00c71SSuryakanth Sekar * 133*90b00c71SSuryakanth Sekar * @param[in] userId - user id 134*90b00c71SSuryakanth Sekar * @param[in] userPassword - New Password 135*90b00c71SSuryakanth Sekar * 136*90b00c71SSuryakanth Sekar * @return IPMI_CC_OK for success, others for failure. 137*90b00c71SSuryakanth Sekar */ 138*90b00c71SSuryakanth Sekar ipmi_ret_t ipmiUserSetUserPassword(const uint8_t userId, 139*90b00c71SSuryakanth Sekar const char* userPassword); 140*90b00c71SSuryakanth Sekar 1415a6b6369SRichard Marian Thomaiyar /** @brief get user name 1425a6b6369SRichard Marian Thomaiyar * 1435a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 1445a6b6369SRichard Marian Thomaiyar * @param[out] userName - user name 1455a6b6369SRichard Marian Thomaiyar * 1465a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 1475a6b6369SRichard Marian Thomaiyar */ 148a45cb34fSRichard Marian Thomaiyar ipmi_ret_t ipmiUserGetUserName(const uint8_t userId, std::string& userName); 1495a6b6369SRichard Marian Thomaiyar 1505a6b6369SRichard Marian Thomaiyar /** @brief provides available fixed, max, and enabled user counts 1515a6b6369SRichard Marian Thomaiyar * 1525a6b6369SRichard Marian Thomaiyar * @param[out] maxChUsers - max channel users 1535a6b6369SRichard Marian Thomaiyar * @param[out] enabledUsers - enabled user count 1545a6b6369SRichard Marian Thomaiyar * @param[out] fixedUsers - fixed user count 1555a6b6369SRichard Marian Thomaiyar * 1565a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 1575a6b6369SRichard Marian Thomaiyar */ 1585a6b6369SRichard Marian Thomaiyar ipmi_ret_t ipmiUserGetAllCounts(uint8_t& maxChUsers, uint8_t& enabledUsers, 1595a6b6369SRichard Marian Thomaiyar uint8_t& fixedUsers); 1605a6b6369SRichard Marian Thomaiyar 161282e79b4SRichard Marian Thomaiyar /** @brief function to update user enabled state 162282e79b4SRichard Marian Thomaiyar * 163282e79b4SRichard Marian Thomaiyar * @param[in] userId - user id 164282e79b4SRichard Marian Thomaiyar *..@param[in] state - state of the user to be updated, true - user enabled. 165282e79b4SRichard Marian Thomaiyar * 166282e79b4SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 167282e79b4SRichard Marian Thomaiyar */ 168a45cb34fSRichard Marian Thomaiyar ipmi_ret_t ipmiUserUpdateEnabledState(const uint8_t userId, const bool& state); 169282e79b4SRichard Marian Thomaiyar 1705a6b6369SRichard Marian Thomaiyar /** @brief determines whether user is enabled 1715a6b6369SRichard Marian Thomaiyar * 1725a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 1735a6b6369SRichard Marian Thomaiyar *..@param[out] state - state of the user 1745a6b6369SRichard Marian Thomaiyar * 1755a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 1765a6b6369SRichard Marian Thomaiyar */ 177a45cb34fSRichard Marian Thomaiyar ipmi_ret_t ipmiUserCheckEnabled(const uint8_t userId, bool& state); 1785a6b6369SRichard Marian Thomaiyar 1795a6b6369SRichard Marian Thomaiyar /** @brief provides user privilege access data 1805a6b6369SRichard Marian Thomaiyar * 1815a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 1825a6b6369SRichard Marian Thomaiyar * @param[in] chNum - channel number 1835a6b6369SRichard Marian Thomaiyar * @param[out] privAccess - privilege access data 1845a6b6369SRichard Marian Thomaiyar * 1855a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 1865a6b6369SRichard Marian Thomaiyar */ 187a45cb34fSRichard Marian Thomaiyar ipmi_ret_t ipmiUserGetPrivilegeAccess(const uint8_t userId, const uint8_t chNum, 1885a6b6369SRichard Marian Thomaiyar PrivAccess& privAccess); 1895a6b6369SRichard Marian Thomaiyar 1905a6b6369SRichard Marian Thomaiyar /** @brief sets user privilege access data 1915a6b6369SRichard Marian Thomaiyar * 1925a6b6369SRichard Marian Thomaiyar * @param[in] userId - user id 1935a6b6369SRichard Marian Thomaiyar * @param[in] chNum - channel number 1945a6b6369SRichard Marian Thomaiyar * @param[in] privAccess - privilege access data 1955a6b6369SRichard Marian Thomaiyar * @param[in] otherPrivUpdate - flags to indicate other fields update 1965a6b6369SRichard Marian Thomaiyar * 1975a6b6369SRichard Marian Thomaiyar * @return IPMI_CC_OK for success, others for failure. 1985a6b6369SRichard Marian Thomaiyar */ 199a45cb34fSRichard Marian Thomaiyar ipmi_ret_t ipmiUserSetPrivilegeAccess(const uint8_t userId, const uint8_t chNum, 2005a6b6369SRichard Marian Thomaiyar const PrivAccess& privAccess, 2015a6b6369SRichard Marian Thomaiyar const bool& otherPrivUpdate); 2025a6b6369SRichard Marian Thomaiyar 2034654d99fSRichard Marian Thomaiyar } // namespace ipmi 204