10084047dSAppaRao Puli /* 20084047dSAppaRao Puli // Copyright (c) 2018 Intel Corporation 30084047dSAppaRao Puli // 40084047dSAppaRao Puli // Licensed under the Apache License, Version 2.0 (the "License"); 50084047dSAppaRao Puli // you may not use this file except in compliance with the License. 60084047dSAppaRao Puli // You may obtain a copy of the License at 70084047dSAppaRao Puli // 80084047dSAppaRao Puli // http://www.apache.org/licenses/LICENSE-2.0 90084047dSAppaRao Puli // 100084047dSAppaRao Puli // Unless required by applicable law or agreed to in writing, software 110084047dSAppaRao Puli // distributed under the License is distributed on an "AS IS" BASIS, 120084047dSAppaRao Puli // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130084047dSAppaRao Puli // See the License for the specific language governing permissions and 140084047dSAppaRao Puli // limitations under the License. 150084047dSAppaRao Puli */ 160084047dSAppaRao Puli #pragma once 170084047dSAppaRao Puli #include "utils.hpp" 180084047dSAppaRao Puli 19*a1292a69SPatrick Williams #include <boost/container/flat_map.hpp> 20ee853eb2SAppaRao Puli #include <sdbusplus/timer.hpp> 21ee853eb2SAppaRao Puli 220084047dSAppaRao Puli namespace phosphor 230084047dSAppaRao Puli { 240084047dSAppaRao Puli namespace service 250084047dSAppaRao Puli { 260084047dSAppaRao Puli 270084047dSAppaRao Puli static constexpr const char* serviceConfigSrvName = 280084047dSAppaRao Puli "xyz.openbmc_project.Control.Service.Manager"; 290084047dSAppaRao Puli static constexpr const char* serviceConfigIntfName = 300084047dSAppaRao Puli "xyz.openbmc_project.Control.Service.Attributes"; 3183241c09STom Joseph static constexpr const char* sockAttrIntfName = 3283241c09STom Joseph "xyz.openbmc_project.Control.Service.SocketAttributes"; 3390f2da3fSRichard Marian Thomaiyar static constexpr const char* srcCfgMgrBasePath = 3490f2da3fSRichard Marian Thomaiyar "/xyz/openbmc_project/control/service"; 3583241c09STom Joseph static constexpr const char* sockAttrPropPort = "Port"; 3690f2da3fSRichard Marian Thomaiyar static constexpr const char* srvCfgPropMasked = "Masked"; 3790f2da3fSRichard Marian Thomaiyar static constexpr const char* srvCfgPropEnabled = "Enabled"; 3890f2da3fSRichard Marian Thomaiyar static constexpr const char* srvCfgPropRunning = "Running"; 390084047dSAppaRao Puli 40430d7ea5SJiaqing Zhao #ifdef USB_CODE_UPDATE 41430d7ea5SJiaqing Zhao static constexpr const char* usbCodeUpdateUnitName = "phosphor_usb_code_update"; 42430d7ea5SJiaqing Zhao #endif 43430d7ea5SJiaqing Zhao 440084047dSAppaRao Puli enum class UpdatedProp 450084047dSAppaRao Puli { 460084047dSAppaRao Puli port = 1, 4790f2da3fSRichard Marian Thomaiyar maskedState, 4890f2da3fSRichard Marian Thomaiyar enabledState, 4990f2da3fSRichard Marian Thomaiyar runningState 500084047dSAppaRao Puli }; 510084047dSAppaRao Puli 5290f2da3fSRichard Marian Thomaiyar using VariantType = 5390f2da3fSRichard Marian Thomaiyar std::variant<std::string, int64_t, uint64_t, double, int32_t, uint32_t, 5490f2da3fSRichard Marian Thomaiyar int16_t, uint16_t, uint8_t, bool, 5590f2da3fSRichard Marian Thomaiyar std::vector<std::tuple<std::string, std::string>>>; 5690f2da3fSRichard Marian Thomaiyar 570084047dSAppaRao Puli class ServiceConfig 580084047dSAppaRao Puli { 590084047dSAppaRao Puli public: 600084047dSAppaRao Puli ServiceConfig(sdbusplus::asio::object_server& srv_, 610084047dSAppaRao Puli std::shared_ptr<sdbusplus::asio::connection>& conn_, 6290f2da3fSRichard Marian Thomaiyar const std::string& objPath_, const std::string& baseUnitName, 6390f2da3fSRichard Marian Thomaiyar const std::string& instanceName, 6490f2da3fSRichard Marian Thomaiyar const std::string& serviceObjPath, 6590f2da3fSRichard Marian Thomaiyar const std::string& socketObjPath); 660084047dSAppaRao Puli ~ServiceConfig() = default; 670084047dSAppaRao Puli 680084047dSAppaRao Puli std::shared_ptr<sdbusplus::asio::connection> conn; 690084047dSAppaRao Puli uint8_t updatedFlag; 700084047dSAppaRao Puli 7190f2da3fSRichard Marian Thomaiyar void stopAndApplyUnitConfig(boost::asio::yield_context yield); 7290f2da3fSRichard Marian Thomaiyar void restartUnitConfig(boost::asio::yield_context yield); 7390f2da3fSRichard Marian Thomaiyar void startServiceRestartTimer(); 7490f2da3fSRichard Marian Thomaiyar 7525a0f634SChicago Duan #ifdef USB_CODE_UPDATE 7625a0f634SChicago Duan void saveUSBCodeUpdateStateToFile(const bool& maskedState, 7725a0f634SChicago Duan const bool& enabledState); 7825a0f634SChicago Duan void getUSBCodeUpdateStateFromFile(); 7925a0f634SChicago Duan void setUSBCodeUpdateState(const bool& state); 8025a0f634SChicago Duan #endif 8125a0f634SChicago Duan 820084047dSAppaRao Puli private: 830084047dSAppaRao Puli sdbusplus::asio::object_server& server; 8483241c09STom Joseph std::shared_ptr<sdbusplus::asio::dbus_interface> srvCfgIface; 8583241c09STom Joseph std::shared_ptr<sdbusplus::asio::dbus_interface> sockAttrIface; 8683241c09STom Joseph 8790f2da3fSRichard Marian Thomaiyar bool internalSet = false; 880084047dSAppaRao Puli std::string objPath; 8990f2da3fSRichard Marian Thomaiyar std::string baseUnitName; 9082e9557eSTom Joseph std::string instanceName; 9190f2da3fSRichard Marian Thomaiyar std::string instantiatedUnitName; 9290f2da3fSRichard Marian Thomaiyar std::string serviceObjectPath; 9382e9557eSTom Joseph std::string socketObjectPath; 9490f2da3fSRichard Marian Thomaiyar std::string overrideConfDir; 950084047dSAppaRao Puli 9690f2da3fSRichard Marian Thomaiyar // Properties 9790f2da3fSRichard Marian Thomaiyar std::string activeState; 9890f2da3fSRichard Marian Thomaiyar std::string subState; 990084047dSAppaRao Puli uint16_t portNum; 10090f2da3fSRichard Marian Thomaiyar std::vector<std::string> channelList; 1010084047dSAppaRao Puli std::string protocol; 1020084047dSAppaRao Puli std::string stateValue; 10390f2da3fSRichard Marian Thomaiyar bool unitMaskedState = false; 10490f2da3fSRichard Marian Thomaiyar bool unitEnabledState = false; 10590f2da3fSRichard Marian Thomaiyar bool unitRunningState = false; 106a19b5093SGeorge Liu 107f476683cSJiaqing Zhao bool isSocketActivatedService = false; 10890f2da3fSRichard Marian Thomaiyar std::string subStateValue; 1090084047dSAppaRao Puli 11090f2da3fSRichard Marian Thomaiyar bool isMaskedOut(); 1110084047dSAppaRao Puli void registerProperties(); 11290f2da3fSRichard Marian Thomaiyar void queryAndUpdateProperties(); 11390f2da3fSRichard Marian Thomaiyar void createSocketOverrideConf(); 11490f2da3fSRichard Marian Thomaiyar void updateServiceProperties( 115ee853eb2SAppaRao Puli const boost::container::flat_map<std::string, VariantType>& 116ee853eb2SAppaRao Puli propertyMap); 11790f2da3fSRichard Marian Thomaiyar void updateSocketProperties( 118ee853eb2SAppaRao Puli const boost::container::flat_map<std::string, VariantType>& 119ee853eb2SAppaRao Puli propertyMap); 12090f2da3fSRichard Marian Thomaiyar std::string getSocketUnitName(); 12190f2da3fSRichard Marian Thomaiyar std::string getServiceUnitName(); 1220084047dSAppaRao Puli }; 1230084047dSAppaRao Puli 1240084047dSAppaRao Puli } // namespace service 1250084047dSAppaRao Puli } // namespace phosphor 126