xref: /openbmc/service-config-manager/inc/srvcfg_manager.hpp (revision a1292a69769414c7661ca407e3d567cfd01cf0ae)
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