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 #pragma once 17 #include "utils.hpp" 18 19 #include <sdbusplus/timer.hpp> 20 21 namespace phosphor 22 { 23 namespace service 24 { 25 26 static constexpr const char* serviceConfigSrvName = 27 "xyz.openbmc_project.Control.Service.Manager"; 28 static constexpr const char* serviceConfigIntfName = 29 "xyz.openbmc_project.Control.Service.Attributes"; 30 static constexpr const char* sockAttrIntfName = 31 "xyz.openbmc_project.Control.Service.SocketAttributes"; 32 static constexpr const char* srcCfgMgrBasePath = 33 "/xyz/openbmc_project/control/service"; 34 static constexpr const char* srcCfgMgrIntf = 35 "/xyz/openbmc_project.Control.Service.Manager"; 36 static constexpr const char* sockAttrPropPort = "Port"; 37 static constexpr const char* srvCfgPropMasked = "Masked"; 38 static constexpr const char* srvCfgPropEnabled = "Enabled"; 39 static constexpr const char* srvCfgPropRunning = "Running"; 40 41 enum class UpdatedProp 42 { 43 port = 1, 44 maskedState, 45 enabledState, 46 runningState 47 }; 48 49 using VariantType = 50 std::variant<std::string, int64_t, uint64_t, double, int32_t, uint32_t, 51 int16_t, uint16_t, uint8_t, bool, 52 std::vector<std::tuple<std::string, std::string>>>; 53 54 class ServiceConfig 55 { 56 public: 57 ServiceConfig(sdbusplus::asio::object_server& srv_, 58 std::shared_ptr<sdbusplus::asio::connection>& conn_, 59 const std::string& objPath_, const std::string& baseUnitName, 60 const std::string& instanceName, 61 const std::string& serviceObjPath, 62 const std::string& socketObjPath); 63 ~ServiceConfig() = default; 64 65 std::shared_ptr<sdbusplus::asio::connection> conn; 66 uint8_t updatedFlag; 67 68 void stopAndApplyUnitConfig(boost::asio::yield_context yield); 69 void restartUnitConfig(boost::asio::yield_context yield); 70 void startServiceRestartTimer(); 71 72 private: 73 sdbusplus::asio::object_server& server; 74 std::shared_ptr<sdbusplus::asio::dbus_interface> srvCfgIface; 75 std::shared_ptr<sdbusplus::asio::dbus_interface> sockAttrIface; 76 77 bool internalSet = false; 78 std::string objPath; 79 std::string baseUnitName; 80 std::string instanceName; 81 std::string instantiatedUnitName; 82 std::string serviceObjectPath; 83 std::string socketObjectPath; 84 std::string overrideConfDir; 85 86 // Properties 87 std::string activeState; 88 std::string subState; 89 uint16_t portNum; 90 std::vector<std::string> channelList; 91 std::string protocol; 92 std::string stateValue; 93 bool unitMaskedState = false; 94 bool unitEnabledState = false; 95 bool unitRunningState = false; 96 std::string subStateValue; 97 98 bool isMaskedOut(); 99 void registerProperties(); 100 void queryAndUpdateProperties(); 101 void createSocketOverrideConf(); 102 void updateServiceProperties( 103 const boost::container::flat_map<std::string, VariantType>& 104 propertyMap); 105 void updateSocketProperties( 106 const boost::container::flat_map<std::string, VariantType>& 107 propertyMap); 108 std::string getSocketUnitName(); 109 std::string getServiceUnitName(); 110 }; 111 112 } // namespace service 113 } // namespace phosphor 114