blob: dd2124ab1825f49eff060e06c2d06de2ba8a093f [file] [log] [blame]
Vernon Maueryba2c0832020-07-15 10:02:38 -07001/*
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 <boost/asio.hpp>
18#include <phosphor-logging/elog-errors.hpp>
George Liucb267c82022-01-05 17:53:28 +080019#include <phosphor-logging/lg2.hpp>
Vernon Maueryba2c0832020-07-15 10:02:38 -070020#include <sdbusplus/asio/object_server.hpp>
21#include <xyz/openbmc_project/Common/error.hpp>
22
23#include <chrono>
24#include <ctime>
25#include <filesystem>
26#include <string>
27
28static constexpr const char* sysdStartUnit = "StartUnit";
29static constexpr const char* sysdStopUnit = "StopUnit";
30static constexpr const char* sysdRestartUnit = "RestartUnit";
31static constexpr const char* sysdReloadMethod = "Reload";
32static constexpr const char* sysdGetJobMethod = "GetJob";
33static constexpr const char* sysdReplaceMode = "replace";
34static constexpr const char* dBusGetAllMethod = "GetAll";
35static constexpr const char* dBusGetMethod = "Get";
36static constexpr const char* sysdService = "org.freedesktop.systemd1";
37static constexpr const char* sysdObjPath = "/org/freedesktop/systemd1";
38static constexpr const char* sysdMgrIntf = "org.freedesktop.systemd1.Manager";
39static constexpr const char* sysdUnitIntf = "org.freedesktop.systemd1.Unit";
40static constexpr const char* sysdSocketIntf = "org.freedesktop.systemd1.Socket";
41static constexpr const char* dBusPropIntf = "org.freedesktop.DBus.Properties";
42static constexpr const char* stateMasked = "masked";
43static constexpr const char* stateEnabled = "enabled";
44static constexpr const char* stateDisabled = "disabled";
45static constexpr const char* subStateRunning = "running";
George Liua19b5092021-05-24 15:54:02 +080046static constexpr const char* subStateListening = "listening";
47
48using ListUnitsType =
49 std::tuple<std::string, std::string, std::string, std::string, std::string,
50 std::string, sdbusplus::message::object_path, uint32_t,
51 std::string, sdbusplus::message::object_path>;
52
53enum class ListUnitElements
54{
55 name,
56 descriptionString,
57 loadState,
58 activeState,
59 subState,
60 followedUnit,
61 objectPath,
62 queuedJobType,
63 jobType,
64 jobObject
65};
Vernon Maueryba2c0832020-07-15 10:02:38 -070066
67static inline std::string addInstanceName(const std::string& instanceName,
68 const std::string& suffix)
69{
70 return (instanceName.empty() ? "" : suffix + instanceName);
71}
72
George Liua19b5092021-05-24 15:54:02 +080073void checkAndThrowInternalFailure(boost::system::error_code& ec,
74 const std::string& msg);
75
Vernon Maueryba2c0832020-07-15 10:02:38 -070076void systemdDaemonReload(
77 const std::shared_ptr<sdbusplus::asio::connection>& conn,
78 boost::asio::yield_context yield);
79
80void systemdUnitAction(const std::shared_ptr<sdbusplus::asio::connection>& conn,
81 boost::asio::yield_context yield,
82 const std::string& unitName,
83 const std::string& actionMethod);
84
85void systemdUnitFilesStateChange(
86 const std::shared_ptr<sdbusplus::asio::connection>& conn,
87 boost::asio::yield_context yield, const std::vector<std::string>& unitFiles,
88 const std::string& unitState, bool maskedState, bool enabledState);