Move to common variant
This saves approximately 34kB in the compressed binary size of bmcweb
due to reduced template instantiations. This amounts to a 2.5%
reduction in the overall size.
Note, there were a few places where we broke const-correctness in the
form of pulling a non-const reference out of a const variant. This
new variant now requires const correctness, so some consts are
added where required.
Tested: Code compiles.
Signed-off-by: Ed Tanous <edtanous@google.com>
Change-Id: I6a60c8881c1268627eedb4ffddf16689dc5f6ed2
diff --git a/http/routing.hpp b/http/routing.hpp
index eca1b3a..fe9c7e9 100644
--- a/http/routing.hpp
+++ b/http/routing.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "common.hpp"
+#include "dbus_utility.hpp"
#include "error_messages.hpp"
#include "http_request.hpp"
#include "http_response.hpp"
@@ -1306,12 +1307,10 @@
}
crow::connections::systemBus->async_method_call(
- [&req, asyncResp, &rules, ruleIndex, found](
- const boost::system::error_code ec,
- const std::map<
- std::string,
- std::variant<bool, std::string, std::vector<std::string>>>&
- userInfo) {
+ [&req, asyncResp, &rules, ruleIndex,
+ found](const boost::system::error_code ec,
+ const std::map<std::string, dbus::utility::DbusVariantType>&
+ userInfo) {
if (ec)
{
BMCWEB_LOG_ERROR << "GetUserInfo failed...";
diff --git a/include/hostname_monitor.hpp b/include/hostname_monitor.hpp
index 1b04af5..17fbe51 100644
--- a/include/hostname_monitor.hpp
+++ b/include/hostname_monitor.hpp
@@ -2,6 +2,7 @@
#ifdef BMCWEB_ENABLE_SSL
#include <boost/container/flat_map.hpp>
#include <dbus_singleton.hpp>
+#include <include/dbus_utility.hpp>
#include <sdbusplus/bus/match.hpp>
#include <sdbusplus/message/types.hpp>
#include <ssl_key_handler.hpp>
@@ -42,7 +43,7 @@
sdbusplus::message::message message(m);
std::string iface;
- boost::container::flat_map<std::string, std::variant<std::string>>
+ boost::container::flat_map<std::string, dbus::utility::DbusVariantType>
changedProperties;
message.read(iface, changedProperties);
diff --git a/include/image_upload.hpp b/include/image_upload.hpp
index 1a0ace0..1b0a09a 100644
--- a/include/image_upload.hpp
+++ b/include/image_upload.hpp
@@ -5,6 +5,7 @@
#include <boost/uuid/uuid_generators.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <dbus_singleton.hpp>
+#include <dbus_utility.hpp>
#include <cstdio>
#include <fstream>
@@ -64,8 +65,8 @@
sdbusplus::message::object_path path;
std::vector<std::pair<
- std::string,
- std::vector<std::pair<std::string, std::variant<std::string>>>>>
+ std::string, std::vector<std::pair<
+ std::string, dbus::utility::DbusVariantType>>>>
interfaces;
m.read(path, interfaces);
diff --git a/include/nbd_proxy.hpp b/include/nbd_proxy.hpp
index 7b90e90..ed5265d 100644
--- a/include/nbd_proxy.hpp
+++ b/include/nbd_proxy.hpp
@@ -25,8 +25,6 @@
#include <privileges.hpp>
#include <websocket.hpp>
-#include <variant>
-
namespace crow
{
@@ -256,56 +254,54 @@
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) {
BMCWEB_LOG_DEBUG << "nbd-proxy.onopen(" << &conn << ")";
- auto getUserInfoHandler =
- [&conn, asyncResp](
- const boost::system::error_code ec,
- boost::container::flat_map<
- std::string, std::variant<bool, std::string,
- std::vector<std::string>>>
- userInfo) {
- if (ec)
- {
- BMCWEB_LOG_ERROR << "GetUserInfo failed...";
- conn.close("Failed to get user information");
- return;
- }
+ auto getUserInfoHandler = [&conn, asyncResp](
+ const boost::system::error_code ec,
+ boost::container::flat_map<
+ std::string,
+ dbus::utility::DbusVariantType>
+ userInfo) {
+ if (ec)
+ {
+ BMCWEB_LOG_ERROR << "GetUserInfo failed...";
+ conn.close("Failed to get user information");
+ return;
+ }
- const std::string* userRolePtr = nullptr;
- auto userInfoIter = userInfo.find("UserPrivilege");
- if (userInfoIter != userInfo.end())
- {
- userRolePtr =
- std::get_if<std::string>(&userInfoIter->second);
- }
+ const std::string* userRolePtr = nullptr;
+ auto userInfoIter = userInfo.find("UserPrivilege");
+ if (userInfoIter != userInfo.end())
+ {
+ userRolePtr =
+ std::get_if<std::string>(&userInfoIter->second);
+ }
- std::string userRole{};
- if (userRolePtr != nullptr)
- {
- userRole = *userRolePtr;
- BMCWEB_LOG_DEBUG << "userName = " << conn.getUserName()
- << " userRole = " << *userRolePtr;
- }
+ std::string userRole{};
+ if (userRolePtr != nullptr)
+ {
+ userRole = *userRolePtr;
+ BMCWEB_LOG_DEBUG << "userName = " << conn.getUserName()
+ << " userRole = " << *userRolePtr;
+ }
- // Get the user privileges from the role
- ::redfish::Privileges userPrivileges =
- ::redfish::getUserPrivileges(userRole);
+ // Get the user privileges from the role
+ ::redfish::Privileges userPrivileges =
+ ::redfish::getUserPrivileges(userRole);
- const ::redfish::Privileges requiredPrivileges{
- requiredPrivilegeString};
+ const ::redfish::Privileges requiredPrivileges{
+ requiredPrivilegeString};
- if (!userPrivileges.isSupersetOf(requiredPrivileges))
- {
- BMCWEB_LOG_DEBUG
- << "User " << conn.getUserName()
- << " not authorized for nbd connection";
- conn.close("Unathourized access");
- return;
- }
+ if (!userPrivileges.isSupersetOf(requiredPrivileges))
+ {
+ BMCWEB_LOG_DEBUG << "User " << conn.getUserName()
+ << " not authorized for nbd connection";
+ conn.close("Unathourized access");
+ return;
+ }
- auto openHandler = [&conn, asyncResp](
- const boost::system::error_code ec,
- const dbus::utility::
- ManagedObjectType& objects) {
+ auto openHandler =
+ [&conn, asyncResp](
+ const boost::system::error_code ec,
+ const dbus::utility::ManagedObjectType& objects) {
const std::string* socketValue = nullptr;
const std::string* endpointValue = nullptr;
const std::string* endpointObjectPath = nullptr;
@@ -404,13 +400,11 @@
sessions[&conn]->run();
};
- crow::connections::systemBus->async_method_call(
- std::move(openHandler),
- "xyz.openbmc_project.VirtualMedia",
- "/xyz/openbmc_project/VirtualMedia",
- "org.freedesktop.DBus.ObjectManager",
- "GetManagedObjects");
- };
+ crow::connections::systemBus->async_method_call(
+ std::move(openHandler), "xyz.openbmc_project.VirtualMedia",
+ "/xyz/openbmc_project/VirtualMedia",
+ "org.freedesktop.DBus.ObjectManager", "GetManagedObjects");
+ };
crow::connections::systemBus->async_method_call(
std::move(getUserInfoHandler),
diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index 92349cc..16af1be 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -24,6 +24,7 @@
#include <boost/asio/io_context.hpp>
#include <boost/container/flat_map.hpp>
+#include <dbus_utility.hpp>
#include <error_messages.hpp>
#include <event_service_store.hpp>
#include <http_client.hpp>
@@ -37,7 +38,6 @@
#include <fstream>
#include <memory>
#include <span>
-#include <variant>
namespace redfish
{
@@ -500,9 +500,8 @@
}
#endif
- void filterAndSendReports(
- const std::string& id,
- const std::variant<telemetry::TimestampReadings>& var)
+ void filterAndSendReports(const std::string& id,
+ const dbus::utility::DbusVariantType& var)
{
std::string mrdUri = telemetry::metricReportDefinitionUri + ("/" + id);
@@ -1315,8 +1314,7 @@
}
std::string interface;
- std::vector<
- std::pair<std::string, std::variant<telemetry::TimestampReadings>>>
+ std::vector<std::pair<std::string, dbus::utility::DbusVariantType>>
props;
std::vector<std::string> invalidProps;
msg.read(interface, props, invalidProps);
@@ -1330,8 +1328,7 @@
return;
}
- const std::variant<telemetry::TimestampReadings>& readings =
- found->second;
+ const dbus::utility::DbusVariantType& readings = found->second;
for (const auto& it :
EventServiceManager::getInstance().subscriptionsMap)
{
diff --git a/redfish-core/include/utils/fw_utils.hpp b/redfish-core/include/utils/fw_utils.hpp
index c990023..658ca4d 100644
--- a/redfish-core/include/utils/fw_utils.hpp
+++ b/redfish-core/include/utils/fw_utils.hpp
@@ -1,9 +1,9 @@
#pragma once
#include <async_resp.hpp>
+#include <dbus_utility.hpp>
#include <algorithm>
#include <string>
-#include <variant>
#include <vector>
namespace redfish
@@ -39,9 +39,9 @@
{
// Used later to determine running (known on Redfish as active) FW images
crow::connections::systemBus->async_method_call(
- [aResp, fwVersionPurpose, activeVersionPropName, populateLinkToImages](
- const boost::system::error_code ec,
- const std::variant<std::vector<std::string>>& resp) {
+ [aResp, fwVersionPurpose, activeVersionPropName,
+ populateLinkToImages](const boost::system::error_code ec,
+ const dbus::utility::DbusVariantType& resp) {
BMCWEB_LOG_DEBUG << "populateFirmwareInformation enter";
if (ec)
{
@@ -132,8 +132,8 @@
const boost::system::error_code ec3,
const boost::container::flat_map<
std::string,
- std::variant<bool, std::string, uint64_t,
- uint32_t>>& propertiesList) {
+ dbus::utility::DbusVariantType>&
+ propertiesList) {
if (ec3)
{
BMCWEB_LOG_ERROR << "error_code = " << ec3;
@@ -150,9 +150,9 @@
boost::container::flat_map<
std::string,
- std::variant<bool, std::string, uint64_t,
- uint32_t>>::const_iterator it =
- propertiesList.find("Purpose");
+ dbus::utility::DbusVariantType>::
+ const_iterator it =
+ propertiesList.find("Purpose");
if (it == propertiesList.end())
{
BMCWEB_LOG_ERROR
@@ -331,11 +331,10 @@
BMCWEB_LOG_DEBUG << "getFwStatus: swId " << *swId << " svc " << dbusSvc;
crow::connections::systemBus->async_method_call(
- [asyncResp,
- swId](const boost::system::error_code errorCode,
- const boost::container::flat_map<
- std::string, std::variant<bool, std::string, uint64_t,
- uint32_t>>& propertiesList) {
+ [asyncResp, swId](
+ const boost::system::error_code errorCode,
+ const boost::container::flat_map<
+ std::string, dbus::utility::DbusVariantType>& propertiesList) {
if (errorCode)
{
// not all fwtypes are updateable, this is ok
@@ -343,9 +342,8 @@
return;
}
boost::container::flat_map<
- std::string, std::variant<bool, std::string, uint64_t,
- uint32_t>>::const_iterator it =
- propertiesList.find("Activation");
+ std::string, dbus::utility::DbusVariantType>::const_iterator
+ it = propertiesList.find("Activation");
if (it == propertiesList.end())
{
BMCWEB_LOG_DEBUG << "Can't find property \"Activation\"!";
@@ -388,7 +386,7 @@
{
crow::connections::systemBus->async_method_call(
[asyncResp, fwId](const boost::system::error_code ec,
- const std::variant<std::vector<std::string>>& resp) {
+ dbus::utility::DbusVariantType& resp) {
if (ec)
{
BMCWEB_LOG_DEBUG << " error_code = " << ec
diff --git a/redfish-core/lib/account_service.hpp b/redfish-core/lib/account_service.hpp
index 865a383..46f6a93 100644
--- a/redfish-core/lib/account_service.hpp
+++ b/redfish-core/lib/account_service.hpp
@@ -23,8 +23,6 @@
#include <registries/privilege_registry.hpp>
#include <utils/json_utils.hpp>
-#include <variant>
-
namespace redfish
{
@@ -68,10 +66,9 @@
std::vector<std::pair<std::string, LDAPRoleMapData>> groupRoleList;
};
-using DbusVariantType = std::variant<bool, int32_t, std::string>;
-
using DbusInterfaceType = boost::container::flat_map<
- std::string, boost::container::flat_map<std::string, DbusVariantType>>;
+ std::string,
+ boost::container::flat_map<std::string, dbus::utility::DbusVariantType>>;
using ManagedObjectType =
std::vector<std::pair<sdbusplus::message::object_path, DbusInterfaceType>>;
@@ -295,7 +292,8 @@
propertyInterface, "Set",
"xyz.openbmc_project.User.PrivilegeMapperEntry",
"GroupName",
- std::variant<std::string>(std::move(*remoteGroup)));
+ dbus::utility::DbusVariantType(
+ std::move(*remoteGroup)));
}
// If "LocalRole" info is provided
@@ -319,7 +317,7 @@
propertyInterface, "Set",
"xyz.openbmc_project.User.PrivilegeMapperEntry",
"Privilege",
- std::variant<std::string>(
+ dbus::utility::DbusVariantType(
getPrivilegeFromRoleId(std::move(*localRole))));
}
}
@@ -665,7 +663,7 @@
},
ldapDbusService, ldapConfigObject, propertyInterface, "Set",
ldapConfigInterface, "LDAPServerURI",
- std::variant<std::string>(serviceAddressList.front()));
+ dbus::utility::DbusVariantType(serviceAddressList.front()));
}
/**
* @brief updates the LDAP Bind DN and updates the
@@ -696,7 +694,8 @@
BMCWEB_LOG_DEBUG << "Updated the username";
},
ldapDbusService, ldapConfigObject, propertyInterface, "Set",
- ldapConfigInterface, "LDAPBindDN", std::variant<std::string>(username));
+ ldapConfigInterface, "LDAPBindDN",
+ dbus::utility::DbusVariantType(username));
}
/**
@@ -728,7 +727,7 @@
},
ldapDbusService, ldapConfigObject, propertyInterface, "Set",
ldapConfigInterface, "LDAPBindDNPassword",
- std::variant<std::string>(password));
+ dbus::utility::DbusVariantType(password));
}
/**
@@ -771,7 +770,7 @@
},
ldapDbusService, ldapConfigObject, propertyInterface, "Set",
ldapConfigInterface, "LDAPBaseDN",
- std::variant<std::string>(baseDNList.front()));
+ dbus::utility::DbusVariantType(baseDNList.front()));
}
/**
* @brief updates the LDAP user name attribute and updates the
@@ -807,7 +806,7 @@
},
ldapDbusService, ldapConfigObject, propertyInterface, "Set",
ldapConfigInterface, "UserNameAttribute",
- std::variant<std::string>(userNameAttribute));
+ dbus::utility::DbusVariantType(userNameAttribute));
}
/**
* @brief updates the LDAP group attribute and updates the
@@ -843,7 +842,7 @@
},
ldapDbusService, ldapConfigObject, propertyInterface, "Set",
ldapConfigInterface, "GroupNameAttribute",
- std::variant<std::string>(groupsAttribute));
+ dbus::utility::DbusVariantType(groupsAttribute));
}
/**
* @brief updates the LDAP service enable and updates the
@@ -874,7 +873,8 @@
BMCWEB_LOG_DEBUG << "Updated Service enable = " << serviceEnabled;
},
ldapDbusService, ldapConfigObject, propertyInterface, "Set",
- ldapEnableInterface, "Enabled", std::variant<bool>(serviceEnabled));
+ ldapEnableInterface, "Enabled",
+ dbus::utility::DbusVariantType(serviceEnabled));
}
inline void
@@ -1197,7 +1197,7 @@
"xyz.openbmc_project.User.Manager", dbusObjectPath.c_str(),
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.User.Attributes", "UserEnabled",
- std::variant<bool>{*enabled});
+ dbus::utility::DbusVariantType{*enabled});
}
if (roleId)
@@ -1227,7 +1227,7 @@
"xyz.openbmc_project.User.Manager", dbusObjectPath.c_str(),
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.User.Attributes", "UserPrivilege",
- std::variant<std::string>{priv});
+ dbus::utility::DbusVariantType{priv});
}
if (locked)
@@ -1256,7 +1256,8 @@
"xyz.openbmc_project.User.Manager", dbusObjectPath.c_str(),
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.User.Attributes",
- "UserLockedForFailedAttempt", std::variant<bool>{*locked});
+ "UserLockedForFailedAttempt",
+ dbus::utility::DbusVariantType{*locked});
}
});
}
@@ -1317,8 +1318,7 @@
[asyncResp](
const boost::system::error_code ec,
const std::vector<
- std::pair<std::string,
- std::variant<uint32_t, uint16_t, uint8_t>>>&
+ std::pair<std::string, dbus::utility::DbusVariantType>>&
propertiesList) {
if (ec)
{
@@ -1328,9 +1328,8 @@
BMCWEB_LOG_DEBUG << "Got " << propertiesList.size()
<< "properties for AccountService";
for (const std::pair<std::string,
- std::variant<uint32_t, uint16_t,
- uint8_t>>& property :
- propertiesList)
+ dbus::utility::DbusVariantType>&
+ property : propertiesList)
{
if (property.first == "MinPasswordLength")
{
@@ -1466,7 +1465,7 @@
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.User.AccountPolicy",
"AccountUnlockTimeout",
- std::variant<uint32_t>(*unlockTimeout));
+ dbus::utility::DbusVariantType(*unlockTimeout));
}
if (lockoutThreshold)
{
@@ -1484,7 +1483,7 @@
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.User.AccountPolicy",
"MaxLoginAttemptBeforeLockout",
- std::variant<uint16_t>(*lockoutThreshold));
+ dbus::utility::DbusVariantType(*lockoutThreshold));
}
});
@@ -1603,9 +1602,8 @@
// Reading AllGroups property
crow::connections::systemBus->async_method_call(
[asyncResp, username, password{std::move(password)}, roleId,
- enabled](
- const boost::system::error_code ec,
- const std::variant<std::vector<std::string>>& allGroups) {
+ enabled](const boost::system::error_code ec,
+ const dbus::utility::DbusVariantType& allGroups) {
if (ec)
{
BMCWEB_LOG_DEBUG << "ERROR with async_method_call";
diff --git a/redfish-core/lib/certificate_service.hpp b/redfish-core/lib/certificate_service.hpp
index 8a78317..3dca18b 100644
--- a/redfish-core/lib/certificate_service.hpp
+++ b/redfish-core/lib/certificate_service.hpp
@@ -3,9 +3,9 @@
#include <app.hpp>
#include <boost/convert.hpp>
#include <boost/convert/strtol.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
-#include <variant>
namespace redfish
{
namespace certs
@@ -449,10 +449,10 @@
messages::internalError(asyncResp->res);
return;
}
- std::vector<
- std::pair<std::string,
- std::vector<std::pair<
- std::string, std::variant<std::string>>>>>
+ std::vector<std::pair<
+ std::string,
+ std::vector<std::pair<std::string,
+ dbus::utility::DbusVariantType>>>>
interfacesProperties;
sdbusplus::message::object_path csrObjectPath;
m.read(csrObjectPath, interfacesProperties);
@@ -569,9 +569,8 @@
const std::string& objectPath, const std::string& service, long certId,
const std::string& certURL, const std::string& name)
{
- using PropertyType =
- std::variant<std::string, uint64_t, std::vector<std::string>>;
- using PropertiesMap = boost::container::flat_map<std::string, PropertyType>;
+ using PropertiesMap =
+ boost::container::flat_map<std::string, dbus::utility::DbusVariantType>;
BMCWEB_LOG_DEBUG << "getCertificateProperties Path=" << objectPath
<< " certId=" << certId << " certURl=" << certURL;
crow::connections::systemBus->async_method_call(
diff --git a/redfish-core/lib/chassis.hpp b/redfish-core/lib/chassis.hpp
index 6d99313..df7e205 100644
--- a/redfish-core/lib/chassis.hpp
+++ b/redfish-core/lib/chassis.hpp
@@ -20,11 +20,10 @@
#include <app.hpp>
#include <boost/container/flat_map.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <utils/collection.hpp>
-#include <variant>
-
namespace redfish
{
@@ -40,7 +39,7 @@
crow::connections::systemBus->async_method_call(
[aResp{std::move(aResp)}](
const boost::system::error_code ec,
- const std::variant<std::string>& chassisState) {
+ const dbus::utility::DbusVariantType& chassisState) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -76,16 +75,14 @@
* DBus types primitives for several generic DBus interfaces
* TODO(Pawel) consider move this to separate file into boost::dbus
*/
-// Note, this is not a very useful Variant, but because it isn't used to get
-// values, it should be as simple as possible
-// TODO(ed) invent a nullvariant type
-using VariantType = std::variant<bool, std::string, uint64_t, uint32_t>;
using ManagedObjectsType = std::vector<std::pair<
sdbusplus::message::object_path,
- std::vector<std::pair<std::string,
- std::vector<std::pair<std::string, VariantType>>>>>>;
+ std::vector<std::pair<
+ std::string,
+ std::vector<std::pair<std::string, dbus::utility::DbusVariantType>>>>>>;
-using PropertiesType = boost::container::flat_map<std::string, VariantType>;
+using PropertiesType =
+ boost::container::flat_map<std::string, dbus::utility::DbusVariantType>;
inline void getIntrusionByService(std::shared_ptr<bmcweb::AsyncResp> aResp,
const std::string& service,
@@ -95,7 +92,7 @@
crow::connections::systemBus->async_method_call(
[aResp{std::move(aResp)}](const boost::system::error_code ec,
- const std::variant<std::string>& value) {
+ const dbus::utility::DbusVariantType& value) {
if (ec)
{
// do not add err msg in redfish response, because this is not
@@ -186,7 +183,7 @@
{
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code ec,
- const std::variant<std::string>& property) {
+ const dbus::utility::DbusVariantType& property) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error for Location";
@@ -214,7 +211,7 @@
{
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code ec,
- const std::variant<std::string>& chassisUUID) {
+ const dbus::utility::DbusVariantType& chassisUUID) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error for UUID";
@@ -282,9 +279,8 @@
std::make_shared<HealthPopulate>(asyncResp);
crow::connections::systemBus->async_method_call(
- [health](
- const boost::system::error_code ec2,
- std::variant<std::vector<std::string>>& resp) {
+ [health](const boost::system::error_code ec2,
+ dbus::utility::DbusVariantType& resp) {
if (ec2)
{
return; // no sensors = no failures
@@ -344,7 +340,8 @@
crow::connections::systemBus->async_method_call(
[asyncResp, chassisId(std::string(chassisId))](
const boost::system::error_code ec,
- const std::variant<std::string>& property) {
+ const dbus::utility::DbusVariantType&
+ property) {
if (ec)
{
BMCWEB_LOG_DEBUG
@@ -386,9 +383,12 @@
[asyncResp, chassisId(std::string(chassisId))](
const boost::system::error_code /*ec2*/,
const std::vector<
- std::pair<std::string, VariantType>>&
+ std::pair<std::string,
+ dbus::utility::DbusVariantType>>&
propertiesList) {
- for (const std::pair<std::string, VariantType>&
+ for (const std::pair<
+ std::string,
+ dbus::utility::DbusVariantType>&
property : propertiesList)
{
// Store DBus properties that are also
@@ -673,7 +673,7 @@
},
processName, objectPath, "org.freedesktop.DBus.Properties",
"Set", interfaceName, destProperty,
- std::variant<std::string>{propertyValue});
+ dbus::utility::DbusVariantType{propertyValue});
},
busName, path, interface, method, "/", 0, interfaces);
}
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index 98b556e..79a1f50 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -19,13 +19,13 @@
#include <boost/container/flat_map.hpp>
#include <boost/container/flat_set.hpp>
#include <dbus_singleton.hpp>
+#include <dbus_utility.hpp>
#include <error_messages.hpp>
#include <registries/privilege_registry.hpp>
#include <utils/json_utils.hpp>
#include <optional>
#include <regex>
-#include <variant>
namespace redfish
{
@@ -34,19 +34,14 @@
* DBus types primitives for several generic DBus interfaces
* TODO(Pawel) consider move this to separate file into boost::dbus
*/
-using PropertiesMapType = boost::container::flat_map<
- std::string, std::variant<std::string, bool, uint8_t, int16_t, uint16_t,
- int32_t, uint32_t, int64_t, uint64_t, double>>;
+using PropertiesMapType =
+ boost::container::flat_map<std::string, dbus::utility::DbusVariantType>;
using GetManagedObjects = std::vector<std::pair<
sdbusplus::message::object_path,
- std::vector<std::pair<
- std::string,
- boost::container::flat_map<
- std::string,
- std::variant<std::string, bool, uint8_t, int16_t, uint16_t, int32_t,
- uint32_t, int64_t, uint64_t, double,
- std::vector<std::string>>>>>>>;
+ std::vector<std::pair<std::string,
+ boost::container::flat_map<
+ std::string, dbus::utility::DbusVariantType>>>>>;
enum class LinkType
{
@@ -614,7 +609,7 @@
std::string("/xyz/openbmc_project/network/") + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.VLAN", "Id",
- std::variant<uint32_t>(inputVlanId));
+ dbus::utility::DbusVariantType(inputVlanId));
}
/**
@@ -748,7 +743,7 @@
"/xyz/openbmc_project/network/" + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.EthernetInterface", "DefaultGateway",
- std::variant<std::string>(gateway));
+ dbus::utility::DbusVariantType(gateway));
}
/**
* @brief Creates a static IPv4 entry
@@ -1055,7 +1050,7 @@
"xyz.openbmc_project.Network", "/xyz/openbmc_project/network/config",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.SystemConfiguration", "HostName",
- std::variant<std::string>(hostname));
+ dbus::utility::DbusVariantType(hostname));
}
inline void
@@ -1075,7 +1070,7 @@
"/xyz/openbmc_project/network/" + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.EthernetInterface", "DomainName",
- std::variant<std::vector<std::string>>(vectorDomainname));
+ dbus::utility::DbusVariantType(vectorDomainname));
}
inline bool isHostnameValid(const std::string& hostname)
@@ -1154,7 +1149,7 @@
"/xyz/openbmc_project/network/" + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.MACAddress", "MACAddress",
- std::variant<std::string>(macAddress));
+ dbus::utility::DbusVariantType(macAddress));
}
inline void setDHCPEnabled(const std::string& ifaceId,
@@ -1177,7 +1172,7 @@
"/xyz/openbmc_project/network/" + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.EthernetInterface", propertyName,
- std::variant<std::string>{dhcp});
+ dbus::utility::DbusVariantType{dhcp});
}
inline void setEthernetInterfaceBoolProperty(
@@ -1197,7 +1192,7 @@
"/xyz/openbmc_project/network/" + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.EthernetInterface", propertyName,
- std::variant<bool>{value});
+ dbus::utility::DbusVariantType{value});
}
inline void setDHCPv4Config(const std::string& propertyName, const bool& value,
@@ -1217,7 +1212,7 @@
"/xyz/openbmc_project/network/config/dhcp",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.DHCPConfiguration", propertyName,
- std::variant<bool>{value});
+ dbus::utility::DbusVariantType{value});
}
inline void handleDHCPPatch(const std::string& ifaceId,
@@ -1550,7 +1545,7 @@
"/xyz/openbmc_project/network/" + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.EthernetInterface", "StaticNameServers",
- std::variant<std::vector<std::string>>{updatedStaticNameServers});
+ dbus::utility::DbusVariantType{updatedStaticNameServers});
}
inline void handleIPv6StaticAddressesPatch(
@@ -2172,7 +2167,7 @@
"/xyz/openbmc_project/network/" + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.VLAN", "Id",
- std::variant<uint32_t>(vlanId));
+ dbus::utility::DbusVariantType(vlanId));
}
else
{
diff --git a/redfish-core/lib/hypervisor_system.hpp b/redfish-core/lib/hypervisor_system.hpp
index 01d7528..5089206 100644
--- a/redfish-core/lib/hypervisor_system.hpp
+++ b/redfish-core/lib/hypervisor_system.hpp
@@ -4,13 +4,13 @@
#include <boost/container/flat_map.hpp>
#include <boost/container/flat_set.hpp>
#include <dbus_singleton.hpp>
+#include <dbus_utility.hpp>
#include <error_messages.hpp>
#include <registries/privilege_registry.hpp>
#include <utils/json_utils.hpp>
#include <optional>
#include <utility>
-#include <variant>
// TODO(ed) requestRoutesHypervisorSystems seems to have copy-pasted a
// lot of code, and has a number of methods that have name conflicts with the
@@ -35,7 +35,7 @@
BMCWEB_LOG_DEBUG << "Get hypervisor state information.";
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<std::string>& hostState) {
+ const dbus::utility::DbusVariantType& hostState) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -374,7 +374,7 @@
"/xyz/openbmc_project/network/hypervisor/" + ethIfaceId + "/ipv4/addr0",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.IP", "Address",
- std::variant<std::string>(ipv4Address));
+ dbus::utility::DbusVariantType(ipv4Address));
}
/**
@@ -406,7 +406,7 @@
"/xyz/openbmc_project/network/hypervisor/" + ethIfaceId + "/ipv4/addr0",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.IP", "PrefixLength",
- std::variant<uint8_t>(subnet));
+ dbus::utility::DbusVariantType(subnet));
}
/**
@@ -438,7 +438,7 @@
"/xyz/openbmc_project/network/hypervisor",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.SystemConfiguration", "DefaultGateway",
- std::variant<std::string>(gateway));
+ dbus::utility::DbusVariantType(gateway));
}
/**
@@ -540,7 +540,7 @@
"/xyz/openbmc_project/network/hypervisor/" + ifaceId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.EthernetInterface", "DHCPEnabled",
- std::variant<std::string>{dhcp});
+ dbus::utility::DbusVariantType{dhcp});
// Set the IPv4 address origin to the DHCP / Static as per the new value
// of the DHCPEnabled property
@@ -570,7 +570,7 @@
"/xyz/openbmc_project/network/hypervisor/" + ifaceId + "/ipv4/addr0",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.IP", "Origin",
- std::variant<std::string>(origin));
+ dbus::utility::DbusVariantType(origin));
}
inline void handleHypervisorIPv4StaticPatch(
@@ -702,7 +702,7 @@
"/xyz/openbmc_project/network/hypervisor",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Network.SystemConfiguration", "HostName",
- std::variant<std::string>(hostName));
+ dbus::utility::DbusVariantType(hostName));
}
inline void
@@ -722,7 +722,7 @@
"/xyz/openbmc_project/network/hypervisor/" + ifaceId + "/ipv4/addr0",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Object.Enable", "Enabled",
- std::variant<bool>(isActive));
+ dbus::utility::DbusVariantType(isActive));
}
inline void requestRoutesHypervisorSystems(App& app)
@@ -738,8 +738,9 @@
get)([](const crow::Request&,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) {
crow::connections::systemBus->async_method_call(
- [asyncResp](const boost::system::error_code ec,
- const std::variant<std::string>& /*hostName*/) {
+ [asyncResp](
+ const boost::system::error_code ec,
+ const dbus::utility::DbusVariantType& /*hostName*/) {
if (ec)
{
messages::resourceNotFound(asyncResp->res, "System",
@@ -1098,7 +1099,7 @@
"/xyz/openbmc_project/state/hypervisor0",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.State.Host", "RequestedHostTransition",
- std::variant<std::string>{std::move(command)});
+ dbus::utility::DbusVariantType{std::move(command)});
});
}
} // namespace redfish::hypervisor
diff --git a/redfish-core/lib/led.hpp b/redfish-core/lib/led.hpp
index 1fdf5e7..c4a7ed8 100644
--- a/redfish-core/lib/led.hpp
+++ b/redfish-core/lib/led.hpp
@@ -21,8 +21,6 @@
#include <app.hpp>
-#include <variant>
-
namespace redfish
{
/**
@@ -39,7 +37,7 @@
BMCWEB_LOG_DEBUG << "Get led groups";
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<bool> asserted) {
+ const dbus::utility::DbusVariantType asserted) {
// Some systems may not have enclosure_identify_blink object so
// proceed to get enclosure_identify state.
if (!ec)
@@ -60,7 +58,7 @@
}
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec2,
- const std::variant<bool> asserted2) {
+ const dbus::utility::DbusVariantType asserted2) {
if (!ec2)
{
const bool* ledOn = std::get_if<bool>(&asserted2);
@@ -151,13 +149,13 @@
"/xyz/openbmc_project/led/groups/enclosure_identify",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Led.Group", "Asserted",
- std::variant<bool>(ledOn));
+ dbus::utility::DbusVariantType(ledOn));
},
"xyz.openbmc_project.LED.GroupManager",
"/xyz/openbmc_project/led/groups/enclosure_identify_blink",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Led.Group", "Asserted",
- std::variant<bool>(ledBlinkng));
+ dbus::utility::DbusVariantType(ledBlinkng));
}
/**
@@ -173,7 +171,7 @@
BMCWEB_LOG_DEBUG << "Get LocationIndicatorActive";
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<bool> asserted) {
+ const dbus::utility::DbusVariantType asserted) {
// Some systems may not have enclosure_identify_blink object so
// proceed to get enclosure_identify state.
if (!ec)
@@ -194,7 +192,7 @@
}
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec2,
- const std::variant<bool> asserted2) {
+ const dbus::utility::DbusVariantType asserted2) {
if (!ec2)
{
const bool* ledOn = std::get_if<bool>(&asserted2);
@@ -264,13 +262,13 @@
"/xyz/openbmc_project/led/groups/enclosure_identify",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Led.Group", "Asserted",
- std::variant<bool>(ledState));
+ dbus::utility::DbusVariantType(ledState));
}
},
"xyz.openbmc_project.LED.GroupManager",
"/xyz/openbmc_project/led/groups/enclosure_identify_blink",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Led.Group", "Asserted",
- std::variant<bool>(ledState));
+ dbus::utility::DbusVariantType(ledState));
}
} // namespace redfish
diff --git a/redfish-core/lib/log_services.hpp b/redfish-core/lib/log_services.hpp
index 074c927..d632552 100644
--- a/redfish-core/lib/log_services.hpp
+++ b/redfish-core/lib/log_services.hpp
@@ -32,6 +32,7 @@
#include <boost/beast/http.hpp>
#include <boost/container/flat_map.hpp>
#include <boost/system/linux_error.hpp>
+#include <dbus_utility.hpp>
#include <error_messages.hpp>
#include <registries/privilege_registry.hpp>
@@ -102,9 +103,8 @@
namespace fs = std::filesystem;
-using GetManagedPropertyType = boost::container::flat_map<
- std::string, std::variant<std::string, bool, uint8_t, int16_t, uint16_t,
- int32_t, uint32_t, int64_t, uint64_t, double>>;
+using GetManagedPropertyType =
+ boost::container::flat_map<std::string, dbus::utility::DbusVariantType>;
using GetManagedObjectsType = boost::container::flat_map<
sdbusplus::message::object_path,
@@ -736,8 +736,8 @@
return task::completed;
}
std::vector<std::pair<
- std::string,
- std::vector<std::pair<std::string, std::variant<std::string>>>>>
+ std::string, std::vector<std::pair<
+ std::string, dbus::utility::DbusVariantType>>>>
interfacesList;
sdbusplus::message::object_path objPath;
@@ -900,7 +900,8 @@
}
inline static void parseCrashdumpParameters(
- const std::vector<std::pair<std::string, VariantType>>& params,
+ const std::vector<std::pair<std::string, dbus::utility::DbusVariantType>>&
+ params,
std::string& filename, std::string& timestamp, std::string& logfile)
{
for (auto property : params)
@@ -1670,7 +1671,7 @@
"/xyz/openbmc_project/logging/entry/" + entryId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Logging.Entry", "Resolved",
- std::variant<bool>(*resolved));
+ dbus::utility::DbusVariantType(*resolved));
});
BMCWEB_ROUTE(
@@ -2638,7 +2639,9 @@
auto getStoredLogCallback =
[asyncResp, logID, &logEntryJson](
const boost::system::error_code ec,
- const std::vector<std::pair<std::string, VariantType>>& params) {
+ const std::vector<
+ std::pair<std::string, dbus::utility::DbusVariantType>>&
+ params) {
if (ec)
{
BMCWEB_LOG_DEBUG << "failed to get log ec: " << ec.message();
@@ -2799,7 +2802,8 @@
auto getStoredLogCallback =
[asyncResp, logID, fileName](
const boost::system::error_code ec,
- const std::vector<std::pair<std::string, VariantType>>&
+ const std::vector<std::pair<
+ std::string, dbus::utility::DbusVariantType>>&
resp) {
if (ec)
{
@@ -3318,7 +3322,7 @@
crow::connections::systemBus->async_method_call(
[aResp, entryCount, skip,
top](const boost::system::error_code ec,
- const std::variant<uint16_t>& bootCount) {
+ const dbus::utility::DbusVariantType& bootCount) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index ca5d8c5..7e5b272 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -50,7 +50,7 @@
const char* destProperty = "RequestedBMCTransition";
// Create the D-Bus variant for D-Bus call.
- VariantType dbusPropertyValue(propertyValue);
+ dbus::utility::DbusVariantType dbusPropertyValue(propertyValue);
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code ec) {
@@ -79,7 +79,7 @@
const char* destProperty = "RequestedBMCTransition";
// Create the D-Bus variant for D-Bus call.
- VariantType dbusPropertyValue(propertyValue);
+ dbus::utility::DbusVariantType dbusPropertyValue(propertyValue);
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code ec) {
@@ -1178,11 +1178,11 @@
const std::string& path = subtreeLocal[0].first;
const std::string& owner = subtreeLocal[0].second[0].first;
crow::connections::systemBus->async_method_call(
- [path, owner, self](
- const boost::system::error_code ec2,
- const boost::container::flat_map<
- std::string, std::variant<std::vector<std::string>,
- std::string>>& resp) {
+ [path, owner,
+ self](const boost::system::error_code ec2,
+ const boost::container::flat_map<
+ std::string, dbus::utility::DbusVariantType>&
+ resp) {
if (ec2)
{
BMCWEB_LOG_ERROR
@@ -1396,8 +1396,7 @@
[self, path, owner](
const boost::system::error_code ec2,
const boost::container::flat_map<
- std::string, std::variant<std::vector<std::string>,
- std::string>>& r) {
+ std::string, dbus::utility::DbusVariantType>& r) {
if (ec2)
{
BMCWEB_LOG_ERROR
@@ -1487,7 +1486,7 @@
},
profileConnection, profilePath,
"org.freedesktop.DBus.Properties", "Set", thermalModeIface,
- "Current", std::variant<std::string>(*profile));
+ "Current", dbus::utility::DbusVariantType(*profile));
}
for (auto& containerPair : configuration)
@@ -1690,7 +1689,7 @@
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<std::string>& property) {
+ const dbus::utility::DbusVariantType& property) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error for "
@@ -1722,7 +1721,7 @@
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- std::variant<uint64_t>& lastResetTime) {
+ dbus::utility::DbusVariantType& lastResetTime) {
if (ec)
{
BMCWEB_LOG_DEBUG << "D-BUS response error " << ec;
@@ -1853,7 +1852,7 @@
"/xyz/openbmc_project/software/" + firmwareId,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Software.RedundancyPriority", "Priority",
- std::variant<uint8_t>(static_cast<uint8_t>(0)));
+ dbus::utility::DbusVariantType(static_cast<uint8_t>(0)));
},
"xyz.openbmc_project.Software.BMC.Updater",
"/xyz/openbmc_project/software", "org.freedesktop.DBus.ObjectManager",
@@ -1898,7 +1897,7 @@
"xyz.openbmc_project.Time.Manager", "/xyz/openbmc_project/time/bmc",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Time.EpochTime", "Elapsed",
- std::variant<uint64_t>(durMicroSecs));
+ dbus::utility::DbusVariantType(durMicroSecs));
}
else
{
@@ -2037,7 +2036,7 @@
{
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code ec,
- const std::variant<double>& resp) {
+ const dbus::utility::DbusVariantType& resp) {
if (ec)
{
BMCWEB_LOG_ERROR << "Error while getting progress";
@@ -2114,9 +2113,9 @@
crow::connections::systemBus->async_method_call(
[asyncResp](
const boost::system::error_code ec,
- const std::vector<
- std::pair<std::string,
- std::variant<std::string>>>&
+ const std::vector<std::pair<
+ std::string,
+ dbus::utility::DbusVariantType>>&
propertiesList) {
if (ec)
{
@@ -2126,7 +2125,7 @@
}
for (const std::pair<
std::string,
- std::variant<std::string>>&
+ dbus::utility::DbusVariantType>&
property : propertiesList)
{
const std::string& propertyName =
diff --git a/redfish-core/lib/memory.hpp b/redfish-core/lib/memory.hpp
index 90e54e8..49304e2 100644
--- a/redfish-core/lib/memory.hpp
+++ b/redfish-core/lib/memory.hpp
@@ -19,6 +19,7 @@
#include <app.hpp>
#include <boost/container/flat_map.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <utils/collection.hpp>
#include <utils/hex_utils.hpp>
@@ -27,11 +28,8 @@
namespace redfish
{
-using DimmProperty =
- std::variant<std::string, std::vector<uint32_t>, std::vector<uint16_t>,
- uint64_t, uint32_t, uint16_t, uint8_t, bool>;
-
-using DimmProperties = boost::container::flat_map<std::string, DimmProperty>;
+using DimmProperties =
+ boost::container::flat_map<std::string, dbus::utility::DbusVariantType>;
inline std::string translateMemoryTypeToRedfish(const std::string& memoryType)
{
@@ -142,9 +140,9 @@
return "";
}
-inline void dimmPropToHex(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- const char* key,
- const std::pair<std::string, DimmProperty>& property)
+inline void dimmPropToHex(
+ const std::shared_ptr<bmcweb::AsyncResp>& aResp, const char* key,
+ const std::pair<std::string, dbus::utility::DbusVariantType>& property)
{
const uint16_t* value = std::get_if<uint16_t>(&property.second);
if (value == nullptr)
@@ -745,8 +743,7 @@
[aResp{std::move(aResp)}](
const boost::system::error_code ec,
const boost::container::flat_map<
- std::string, std::variant<std::string, uint64_t, uint32_t,
- bool>>& properties) {
+ std::string, dbus::utility::DbusVariantType>& properties) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error";
diff --git a/redfish-core/lib/metric_report.hpp b/redfish-core/lib/metric_report.hpp
index 5ecab77..c36f719 100644
--- a/redfish-core/lib/metric_report.hpp
+++ b/redfish-core/lib/metric_report.hpp
@@ -4,6 +4,7 @@
#include "utils/telemetry_utils.hpp"
#include <app.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
namespace redfish
@@ -34,7 +35,7 @@
}
inline bool fillReport(nlohmann::json& json, const std::string& id,
- const std::variant<TimestampReadings>& var)
+ const dbus::utility::DbusVariantType& var)
{
json["@odata.type"] = "#MetricReport.v1_3_0.MetricReport";
json["@odata.id"] = telemetry::metricReportUri + std::string("/") + id;
@@ -107,8 +108,7 @@
crow::connections::systemBus->async_method_call(
[asyncResp,
id](const boost::system::error_code ec,
- const std::variant<
- telemetry::TimestampReadings>& ret) {
+ const dbus::utility::DbusVariantType& ret) {
if (ec)
{
BMCWEB_LOG_ERROR
diff --git a/redfish-core/lib/metric_report_definition.hpp b/redfish-core/lib/metric_report_definition.hpp
index cb38633..1461fd8 100644
--- a/redfish-core/lib/metric_report_definition.hpp
+++ b/redfish-core/lib/metric_report_definition.hpp
@@ -6,6 +6,7 @@
#include <app.hpp>
#include <boost/container/flat_map.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <tuple>
@@ -23,9 +24,8 @@
inline void fillReportDefinition(
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, const std::string& id,
- const std::vector<
- std::pair<std::string, std::variant<std::string, bool, uint64_t,
- ReadingParameters>>>& ret)
+ const std::vector<std::pair<std::string, dbus::utility::DbusVariantType>>&
+ ret)
{
asyncResp->res.jsonValue["@odata.type"] =
"#MetricReportDefinition.v1_3_0.MetricReportDefinition";
@@ -421,12 +421,11 @@
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
const std::string& id) {
crow::connections::systemBus->async_method_call(
- [asyncResp, id](
- const boost::system::error_code ec,
- const std::vector<std::pair<
- std::string,
- std::variant<std::string, bool, uint64_t,
- telemetry::ReadingParameters>>>& ret) {
+ [asyncResp,
+ id](const boost::system::error_code ec,
+ const std::vector<std::pair<
+ std::string, dbus::utility::DbusVariantType>>&
+ ret) {
if (ec.value() == EBADR ||
ec == boost::system::errc::host_unreachable)
{
diff --git a/redfish-core/lib/network_protocol.hpp b/redfish-core/lib/network_protocol.hpp
index 9acf5d4..e7411ac 100644
--- a/redfish-core/lib/network_protocol.hpp
+++ b/redfish-core/lib/network_protocol.hpp
@@ -20,6 +20,7 @@
#include "redfish_util.hpp"
#include <app.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <utils/json_utils.hpp>
#include <utils/stl_utils.hpp>
@@ -231,7 +232,7 @@
"xyz.openbmc_project.Settings", "/xyz/openbmc_project/time/sync_method",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Time.Synchronization", "TimeSyncMethod",
- std::variant<std::string>{timeSyncMethod});
+ dbus::utility::DbusVariantType{timeSyncMethod});
}
inline void
@@ -283,7 +284,7 @@
service, objectPath,
"org.freedesktop.DBus.Properties", "Set", interface,
"NTPServers",
- std::variant<std::vector<std::string>>{ntpServers});
+ dbus::utility::DbusVariantType{ntpServers});
}
}
}
@@ -326,7 +327,8 @@
entry.second.begin()->first, entry.first,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Service.Attributes",
- "Running", std::variant<bool>{protocolEnabled});
+ "Running",
+ dbus::utility::DbusVariantType{protocolEnabled});
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code ec2) {
@@ -339,7 +341,8 @@
entry.second.begin()->first, entry.first,
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Service.Attributes",
- "Enabled", std::variant<bool>{protocolEnabled});
+ "Enabled",
+ dbus::utility::DbusVariantType{protocolEnabled});
}
}
},
@@ -368,7 +371,7 @@
{
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code errorCode,
- const std::variant<std::string>& timeSyncMethod) {
+ const dbus::utility::DbusVariantType& timeSyncMethod) {
if (errorCode)
{
return;
diff --git a/redfish-core/lib/pcie.hpp b/redfish-core/lib/pcie.hpp
index 1872c02..1904c26 100644
--- a/redfish-core/lib/pcie.hpp
+++ b/redfish-core/lib/pcie.hpp
@@ -18,6 +18,7 @@
#include <app.hpp>
#include <boost/system/linux_error.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
namespace redfish
@@ -143,76 +144,93 @@
const std::string& device)
{
- auto getPCIeDeviceCallback = [asyncResp, device](
- const boost::system::error_code
- ec,
- boost::container::flat_map<
- std::string,
- std::variant<std::string>>&
- pcieDevProperties) {
- if (ec)
- {
- BMCWEB_LOG_DEBUG
- << "failed to get PCIe Device properties ec: "
- << ec.value() << ": " << ec.message();
- if (ec.value() ==
- boost::system::linux_error::bad_request_descriptor)
+ auto getPCIeDeviceCallback =
+ [asyncResp,
+ device](const boost::system::error_code ec,
+ boost::container::flat_map<
+ std::string, dbus::utility::DbusVariantType>&
+ pcieDevProperties) {
+ if (ec)
{
- messages::resourceNotFound(asyncResp->res,
- "PCIeDevice", device);
- }
- else
- {
- messages::internalError(asyncResp->res);
- }
- return;
- }
-
- asyncResp->res.jsonValue = {
- {"@odata.type", "#PCIeDevice.v1_4_0.PCIeDevice"},
- {"@odata.id",
- "/redfish/v1/Systems/system/PCIeDevices/" + device},
- {"Name", "PCIe Device"},
- {"Id", device}};
-
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Manufacturer"]);
- property)
- {
- asyncResp->res.jsonValue["Manufacturer"] = *property;
- }
-
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["DeviceType"]);
- property)
- {
- asyncResp->res.jsonValue["DeviceType"] = *property;
- }
-
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["GenerationInUse"]);
- property)
- {
- std::optional<std::string> generationInUse =
- redfishPcieGenerationFromDbus(*property);
- if (!generationInUse)
- {
- messages::internalError(asyncResp->res);
+ BMCWEB_LOG_DEBUG
+ << "failed to get PCIe Device properties ec: "
+ << ec.value() << ": " << ec.message();
+ if (ec.value() == boost::system::linux_error::
+ bad_request_descriptor)
+ {
+ messages::resourceNotFound(
+ asyncResp->res, "PCIeDevice", device);
+ }
+ else
+ {
+ messages::internalError(asyncResp->res);
+ }
return;
}
- if (*generationInUse == "")
+
+ asyncResp->res.jsonValue = {
+ {"@odata.type", "#PCIeDevice.v1_4_0.PCIeDevice"},
+ {"@odata.id",
+ "/redfish/v1/Systems/system/PCIeDevices/" +
+ device},
+ {"Name", "PCIe Device"},
+ {"Id", device}};
+
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Manufacturer"]);
+ property)
{
- // unknown, no need to handle
- return;
+ asyncResp->res.jsonValue["Manufacturer"] =
+ *property;
}
- asyncResp->res.jsonValue["PCIeInterface"]["PcieType"] =
- *generationInUse;
- }
- asyncResp->res.jsonValue["PCIeFunctions"] = {
- {"@odata.id",
- "/redfish/v1/Systems/system/PCIeDevices/" + device +
- "/PCIeFunctions"}};
- };
+
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["DeviceType"]);
+ property)
+ {
+ asyncResp->res.jsonValue["DeviceType"] = *property;
+ }
+
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Manufacturer"]);
+ property)
+ {
+ asyncResp->res.jsonValue["Manufacturer"] =
+ *property;
+ }
+
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["DeviceType"]);
+ property)
+ {
+ asyncResp->res.jsonValue["DeviceType"] = *property;
+ }
+
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["GenerationInUse"]);
+ property)
+ {
+ std::optional<std::string> generationInUse =
+ redfishPcieGenerationFromDbus(*property);
+ if (!generationInUse)
+ {
+ messages::internalError(asyncResp->res);
+ return;
+ }
+ if (*generationInUse == "")
+ {
+ // unknown, no need to handle
+ return;
+ }
+ asyncResp->res
+ .jsonValue["PCIeInterface"]["PcieType"] =
+ *generationInUse;
+ }
+ asyncResp->res.jsonValue["PCIeFunctions"] = {
+ {"@odata.id",
+ "/redfish/v1/Systems/system/PCIeDevices/" +
+ device + "/PCIeFunctions"}};
+ };
std::string escapedPath = std::string(pciePath) + "/" + device;
dbus::utility::escapePathForDbus(escapedPath);
crow::connections::systemBus->async_method_call(
@@ -250,7 +268,8 @@
ec,
boost::container::flat_map<
std::string,
- std::variant<std::string>>&
+ dbus::utility::
+ DbusVariantType>&
pcieDevProperties) {
if (ec)
{
@@ -317,116 +336,121 @@
bmcweb::AsyncResp>& asyncResp,
const std::string& device,
const std::string& function) {
- auto getPCIeDeviceCallback = [asyncResp, device, function](
- const boost::system::error_code ec,
- boost::container::flat_map<
- std::string,
- std::variant<std::string>>&
- pcieDevProperties) {
- if (ec)
- {
- BMCWEB_LOG_DEBUG
- << "failed to get PCIe Device properties ec: "
- << ec.value() << ": " << ec.message();
- if (ec.value() ==
- boost::system::linux_error::bad_request_descriptor)
+ auto getPCIeDeviceCallback =
+ [asyncResp, device, function](
+ const boost::system::error_code ec,
+ boost::container::flat_map<std::string,
+ dbus::utility::DbusVariantType>&
+ pcieDevProperties) {
+ if (ec)
{
- messages::resourceNotFound(asyncResp->res, "PCIeDevice",
- device);
+ BMCWEB_LOG_DEBUG
+ << "failed to get PCIe Device properties ec: "
+ << ec.value() << ": " << ec.message();
+ if (ec.value() ==
+ boost::system::linux_error::bad_request_descriptor)
+ {
+ messages::resourceNotFound(asyncResp->res,
+ "PCIeDevice", device);
+ }
+ else
+ {
+ messages::internalError(asyncResp->res);
+ }
+ return;
}
- else
+
+ // Check if this function exists by looking for a device ID
+ std::string devIDProperty =
+ "Function" + function + "DeviceId";
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties[devIDProperty]);
+ property && property->empty())
{
- messages::internalError(asyncResp->res);
+ messages::resourceNotFound(asyncResp->res,
+ "PCIeFunction", function);
+ return;
}
- return;
- }
- // Check if this function exists by looking for a device ID
- std::string devIDProperty = "Function" + function + "DeviceId";
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties[devIDProperty]);
- property && property->empty())
- {
- messages::resourceNotFound(asyncResp->res, "PCIeFunction",
- function);
- return;
- }
+ asyncResp->res.jsonValue = {
+ {"@odata.type", "#PCIeFunction.v1_2_0.PCIeFunction"},
+ {"@odata.id",
+ "/redfish/v1/Systems/system/PCIeDevices/" + device +
+ "/PCIeFunctions/" + function},
+ {"Name", "PCIe Function"},
+ {"Id", function},
+ {"FunctionId", std::stoi(function)},
+ {"Links",
+ {{"PCIeDevice",
+ {{"@odata.id",
+ "/redfish/v1/Systems/system/PCIeDevices/" +
+ device}}}}}};
- asyncResp->res.jsonValue = {
- {"@odata.type", "#PCIeFunction.v1_2_0.PCIeFunction"},
- {"@odata.id", "/redfish/v1/Systems/system/PCIeDevices/" +
- device + "/PCIeFunctions/" + function},
- {"Name", "PCIe Function"},
- {"Id", function},
- {"FunctionId", std::stoi(function)},
- {"Links",
- {{"PCIeDevice",
- {{"@odata.id",
- "/redfish/v1/Systems/system/PCIeDevices/" +
- device}}}}}};
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Function" + function +
+ "DeviceId"]);
+ property)
+ {
+ asyncResp->res.jsonValue["DeviceId"] = *property;
+ }
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Function" + function + "DeviceId"]);
- property)
- {
- asyncResp->res.jsonValue["DeviceId"] = *property;
- }
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Function" + function +
+ "VendorId"]);
+ property)
+ {
+ asyncResp->res.jsonValue["VendorId"] = *property;
+ }
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Function" + function + "VendorId"]);
- property)
- {
- asyncResp->res.jsonValue["VendorId"] = *property;
- }
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Function" + function +
+ "FunctionType"]);
+ property)
+ {
+ asyncResp->res.jsonValue["FunctionType"] = *property;
+ }
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Function" + function +
- "FunctionType"]);
- property)
- {
- asyncResp->res.jsonValue["FunctionType"] = *property;
- }
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Function" + function +
+ "DeviceClass"]);
+ property)
+ {
+ asyncResp->res.jsonValue["DeviceClass"] = *property;
+ }
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Function" + function +
- "DeviceClass"]);
- property)
- {
- asyncResp->res.jsonValue["DeviceClass"] = *property;
- }
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Function" + function +
+ "ClassCode"]);
+ property)
+ {
+ asyncResp->res.jsonValue["ClassCode"] = *property;
+ }
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Function" + function +
- "ClassCode"]);
- property)
- {
- asyncResp->res.jsonValue["ClassCode"] = *property;
- }
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Function" + function +
+ "RevisionId"]);
+ property)
+ {
+ asyncResp->res.jsonValue["RevisionId"] = *property;
+ }
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Function" + function +
- "RevisionId"]);
- property)
- {
- asyncResp->res.jsonValue["RevisionId"] = *property;
- }
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Function" + function +
+ "SubsystemId"]);
+ property)
+ {
+ asyncResp->res.jsonValue["SubsystemId"] = *property;
+ }
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Function" + function +
- "SubsystemId"]);
- property)
- {
- asyncResp->res.jsonValue["SubsystemId"] = *property;
- }
-
- if (std::string* property = std::get_if<std::string>(
- &pcieDevProperties["Function" + function +
- "SubsystemVendorId"]);
- property)
- {
- asyncResp->res.jsonValue["SubsystemVendorId"] = *property;
- }
- };
+ if (std::string* property = std::get_if<std::string>(
+ &pcieDevProperties["Function" + function +
+ "SubsystemVendorId"]);
+ property)
+ {
+ asyncResp->res.jsonValue["SubsystemVendorId"] =
+ *property;
+ }
+ };
std::string escapedPath = std::string(pciePath) + "/" + device;
dbus::utility::escapePathForDbus(escapedPath);
crow::connections::systemBus->async_method_call(
diff --git a/redfish-core/lib/power.hpp b/redfish-core/lib/power.hpp
index d7fb7dd..dea6be3 100644
--- a/redfish-core/lib/power.hpp
+++ b/redfish-core/lib/power.hpp
@@ -19,6 +19,7 @@
#include "sensors.hpp"
#include <app.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
namespace redfish
@@ -70,7 +71,8 @@
}
auto valueHandler = [value, sensorsAsyncResp](
const boost::system::error_code ec,
- const SensorVariant& powerCapEnable) {
+ const dbus::utility::DbusVariantType&
+ powerCapEnable) {
if (ec)
{
messages::internalError(sensorsAsyncResp->asyncResp->res);
@@ -112,7 +114,7 @@
"/xyz/openbmc_project/control/host0/power_cap",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Power.Cap", "PowerCap",
- std::variant<uint32_t>(*value));
+ dbus::utility::DbusVariantType(*value));
};
crow::connections::systemBus->async_method_call(
std::move(valueHandler), "xyz.openbmc_project.Settings",
@@ -127,80 +129,81 @@
BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Power/")
.privileges(redfish::privileges::getPower)
- .methods(boost::beast::http::verb::get)(
- [](const crow::Request&,
- const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
- const std::string& chassisName) {
- asyncResp->res.jsonValue["PowerControl"] =
- nlohmann::json::array();
+ .methods(
+ boost::beast::http::verb::get)([](const crow::Request&,
+ const std::shared_ptr<
+ bmcweb::AsyncResp>& asyncResp,
+ const std::string& chassisName) {
+ asyncResp->res.jsonValue["PowerControl"] = nlohmann::json::array();
- auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
- asyncResp, chassisName,
- sensors::dbus::paths.at(sensors::node::power),
- sensors::node::power);
+ auto sensorAsyncResp = std::make_shared<SensorsAsyncResp>(
+ asyncResp, chassisName,
+ sensors::dbus::paths.at(sensors::node::power),
+ sensors::node::power);
- getChassisData(sensorAsyncResp);
+ getChassisData(sensorAsyncResp);
- // This callback verifies that the power limit is only provided
- // for the chassis that implements the Chassis inventory item.
- // This prevents things like power supplies providing the
- // chassis power limit
- auto chassisHandler = [sensorAsyncResp](
- const boost::system::error_code e,
- const std::vector<std::string>&
- chassisPaths) {
- if (e)
+ // This callback verifies that the power limit is only provided
+ // for the chassis that implements the Chassis inventory item.
+ // This prevents things like power supplies providing the
+ // chassis power limit
+ auto chassisHandler = [sensorAsyncResp](
+ const boost::system::error_code e,
+ const std::vector<std::string>&
+ chassisPaths) {
+ if (e)
+ {
+ BMCWEB_LOG_ERROR
+ << "Power Limit GetSubTreePaths handler Dbus error "
+ << e;
+ return;
+ }
+
+ bool found = false;
+ for (const std::string& chassis : chassisPaths)
+ {
+ size_t len = std::string::npos;
+ size_t lastPos = chassis.rfind('/');
+ if (lastPos == std::string::npos)
{
- BMCWEB_LOG_ERROR
- << "Power Limit GetSubTreePaths handler Dbus error "
- << e;
- return;
+ continue;
}
- bool found = false;
- for (const std::string& chassis : chassisPaths)
+ if (lastPos == chassis.size() - 1)
{
- size_t len = std::string::npos;
- size_t lastPos = chassis.rfind('/');
+ size_t end = lastPos;
+ lastPos = chassis.rfind('/', lastPos - 1);
if (lastPos == std::string::npos)
{
continue;
}
- if (lastPos == chassis.size() - 1)
- {
- size_t end = lastPos;
- lastPos = chassis.rfind('/', lastPos - 1);
- if (lastPos == std::string::npos)
- {
- continue;
- }
-
- len = end - (lastPos + 1);
- }
-
- std::string interfaceChassisName =
- chassis.substr(lastPos + 1, len);
- if (!interfaceChassisName.compare(
- sensorAsyncResp->chassisId))
- {
- found = true;
- break;
- }
+ len = end - (lastPos + 1);
}
- if (!found)
+ std::string interfaceChassisName =
+ chassis.substr(lastPos + 1, len);
+ if (!interfaceChassisName.compare(
+ sensorAsyncResp->chassisId))
{
- BMCWEB_LOG_DEBUG << "Power Limit not present for "
- << sensorAsyncResp->chassisId;
- return;
+ found = true;
+ break;
}
+ }
- auto valueHandler = [sensorAsyncResp](
- const boost::system::error_code ec,
- const std::vector<std::pair<
- std::string, SensorVariant>>&
- properties) {
+ if (!found)
+ {
+ BMCWEB_LOG_DEBUG << "Power Limit not present for "
+ << sensorAsyncResp->chassisId;
+ return;
+ }
+
+ auto valueHandler =
+ [sensorAsyncResp](
+ const boost::system::error_code ec,
+ const std::vector<std::pair<
+ std::string, dbus::utility::DbusVariantType>>&
+ properties) {
if (ec)
{
messages::internalError(
@@ -235,7 +238,8 @@
double powerCap = 0.0;
int64_t scale = 0;
- for (const std::pair<std::string, SensorVariant>&
+ for (const std::pair<std::string,
+ dbus::utility::DbusVariantType>&
property : properties)
{
if (!property.first.compare("Scale"))
@@ -298,23 +302,22 @@
}
};
- crow::connections::systemBus->async_method_call(
- std::move(valueHandler), "xyz.openbmc_project.Settings",
- "/xyz/openbmc_project/control/host0/power_cap",
- "org.freedesktop.DBus.Properties", "GetAll",
- "xyz.openbmc_project.Control.Power.Cap");
- };
-
crow::connections::systemBus->async_method_call(
- std::move(chassisHandler),
- "xyz.openbmc_project.ObjectMapper",
- "/xyz/openbmc_project/object_mapper",
- "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths",
- "/xyz/openbmc_project/inventory", 0,
- std::array<const char*, 2>{
- "xyz.openbmc_project.Inventory.Item.Board",
- "xyz.openbmc_project.Inventory.Item.Chassis"});
- });
+ std::move(valueHandler), "xyz.openbmc_project.Settings",
+ "/xyz/openbmc_project/control/host0/power_cap",
+ "org.freedesktop.DBus.Properties", "GetAll",
+ "xyz.openbmc_project.Control.Power.Cap");
+ };
+
+ crow::connections::systemBus->async_method_call(
+ std::move(chassisHandler), "xyz.openbmc_project.ObjectMapper",
+ "/xyz/openbmc_project/object_mapper",
+ "xyz.openbmc_project.ObjectMapper", "GetSubTreePaths",
+ "/xyz/openbmc_project/inventory", 0,
+ std::array<const char*, 2>{
+ "xyz.openbmc_project.Inventory.Item.Board",
+ "xyz.openbmc_project.Inventory.Item.Chassis"});
+ });
BMCWEB_ROUTE(app, "/redfish/v1/Chassis/<str>/Power/")
.privileges(redfish::privileges::patchPower)
diff --git a/redfish-core/lib/processor.hpp b/redfish-core/lib/processor.hpp
index e510768..df0d0bb 100644
--- a/redfish-core/lib/processor.hpp
+++ b/redfish-core/lib/processor.hpp
@@ -19,6 +19,7 @@
#include <app.hpp>
#include <boost/container/flat_map.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <sdbusplus/message/native_types.hpp>
#include <sdbusplus/utility/dedup_variant.hpp>
@@ -59,9 +60,9 @@
{
BMCWEB_LOG_DEBUG << "Get Processor UUID";
crow::connections::systemBus->async_method_call(
- [objPath,
- aResp{std::move(aResp)}](const boost::system::error_code ec,
- const std::variant<std::string>& property) {
+ [objPath, aResp{std::move(aResp)}](
+ const boost::system::error_code ec,
+ const dbus::utility::DbusVariantType& property) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error";
@@ -303,8 +304,7 @@
[objPath, aResp{std::move(aResp)}](
const boost::system::error_code ec,
const boost::container::flat_map<
- std::string, std::variant<std::string, uint32_t, uint16_t,
- bool>>& properties) {
+ std::string, dbus::utility::DbusVariantType>& properties) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error";
@@ -395,8 +395,7 @@
[objPath, aResp{std::move(aResp)}](
const boost::system::error_code ec,
const boost::container::flat_map<
- std::string, std::variant<std::string, uint32_t, uint16_t,
- bool>>& properties) {
+ std::string, dbus::utility::DbusVariantType>& properties) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error";
@@ -432,8 +431,7 @@
[acclrtrId, aResp{std::move(aResp)}](
const boost::system::error_code ec,
const boost::container::flat_map<
- std::string, std::variant<std::string, uint32_t, uint16_t,
- bool>>& properties) {
+ std::string, dbus::utility::DbusVariantType>& properties) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error";
@@ -486,10 +484,8 @@
std::vector<std::tuple<uint32_t, std::vector<uint32_t>>>;
// uint32_t and size_t may or may not be the same type, requiring a dedup'd
// variant
-using OperatingConfigProperties = std::vector<std::pair<
- std::string,
- sdbusplus::utility::dedup_variant_t<uint32_t, size_t, TurboProfileProperty,
- BaseSpeedPrioritySettingsProperty>>>;
+using OperatingConfigProperties =
+ std::vector<std::pair<std::string, dbus::utility::DbusVariantType>>;
/**
* Fill out the HighSpeedCoreIDs in a Processor resource from the given
@@ -551,10 +547,8 @@
crow::connections::systemBus->async_method_call(
[aResp, cpuId, service](
const boost::system::error_code ec,
- const std::vector<
- std::pair<std::string,
- std::variant<sdbusplus::message::object_path, bool>>>&
- properties) {
+ const std::vector<std::pair<
+ std::string, dbus::utility::DbusVariantType>>& properties) {
if (ec)
{
BMCWEB_LOG_WARNING << "D-Bus error: " << ec << ", "
@@ -604,8 +598,7 @@
crow::connections::systemBus->async_method_call(
[aResp](
const boost::system::error_code ec,
- const std::variant<
- BaseSpeedPrioritySettingsProperty>& property) {
+ const dbus::utility::DbusVariantType& property) {
if (ec)
{
BMCWEB_LOG_WARNING
@@ -655,9 +648,9 @@
{
BMCWEB_LOG_DEBUG << "Get Cpu Location Data";
crow::connections::systemBus->async_method_call(
- [objPath,
- aResp{std::move(aResp)}](const boost::system::error_code ec,
- const std::variant<std::string>& property) {
+ [objPath, aResp{std::move(aResp)}](
+ const boost::system::error_code ec,
+ const dbus::utility::DbusVariantType& property) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error";
@@ -697,7 +690,7 @@
BMCWEB_LOG_DEBUG << "Get CPU UniqueIdentifier";
crow::connections::systemBus->async_method_call(
[aResp](boost::system::error_code ec,
- const std::variant<std::string>& property) {
+ const dbus::utility::DbusVariantType& property) {
const std::string* id = std::get_if<std::string>(&property);
if (ec || id == nullptr)
{
@@ -1090,8 +1083,7 @@
},
*controlService, cpuObjectPath, "org.freedesktop.DBus.Properties",
"Set", "xyz.openbmc_project.Control.Processor.CurrentOperatingConfig",
- "AppliedConfig",
- std::variant<sdbusplus::message::object_path>(std::move(configPath)));
+ "AppliedConfig", dbus::utility::DbusVariantType(std::move(configPath)));
}
inline void requestRoutesOperatingConfigCollection(App& app)
diff --git a/redfish-core/lib/redfish_util.hpp b/redfish-core/lib/redfish_util.hpp
index 7345f01..c0835b3 100644
--- a/redfish-core/lib/redfish_util.hpp
+++ b/redfish-core/lib/redfish_util.hpp
@@ -16,6 +16,7 @@
#pragma once
#ifndef BMCWEB_ENABLE_REDFISH_ONE_CHASSIS
+#include <dbus_utility.hpp>
namespace redfish
{
@@ -172,8 +173,7 @@
crow::connections::systemBus->async_method_call(
[callback{std::move(callback)}](
const boost::system::error_code ec,
- const std::variant<
- std::vector<std::tuple<std::string, std::string>>>& resp) {
+ const dbus::utility::DbusVariantType& resp) {
if (ec)
{
BMCWEB_LOG_ERROR << ec;
diff --git a/redfish-core/lib/roles.hpp b/redfish-core/lib/roles.hpp
index 8f14b2e..5aa1a22 100644
--- a/redfish-core/lib/roles.hpp
+++ b/redfish-core/lib/roles.hpp
@@ -16,6 +16,7 @@
#pragma once
#include <app.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <variant>
@@ -114,9 +115,8 @@
{"Description", "BMC User Roles"}};
crow::connections::systemBus->async_method_call(
- [asyncResp](
- const boost::system::error_code ec,
- const std::variant<std::vector<std::string>>& resp) {
+ [asyncResp](const boost::system::error_code ec,
+ const dbus::utility::DbusVariantType& resp) {
if (ec)
{
messages::internalError(asyncResp->res);
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index eba0652..2f04c25 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -21,6 +21,7 @@
#include <boost/container/flat_map.hpp>
#include <boost/range/algorithm/replace_copy_if.hpp>
#include <dbus_singleton.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <utils/json_utils.hpp>
@@ -35,13 +36,11 @@
std::pair<std::string,
std::vector<std::pair<std::string, std::vector<std::string>>>>>;
-using SensorVariant =
- std::variant<int64_t, double, uint32_t, bool, std::string>;
-
using ManagedObjectsVectorType = std::vector<std::pair<
sdbusplus::message::object_path,
boost::container::flat_map<
- std::string, boost::container::flat_map<std::string, SensorVariant>>>>;
+ std::string, boost::container::flat_map<
+ std::string, dbus::utility::DbusVariantType>>>>;
namespace sensors
{
@@ -596,8 +595,7 @@
crow::connections::systemBus->async_method_call(
[sensorsAsyncResp, callback{std::move(callback)}](
const boost::system::error_code& e,
- const std::variant<std::vector<std::string>>&
- variantEndpoints) {
+ const dbus::utility::DbusVariantType& variantEndpoints) {
if (e)
{
if (e.value() != EBADR)
@@ -742,7 +740,8 @@
inline std::string getHealth(
nlohmann::json& sensorJson,
const boost::container::flat_map<
- std::string, boost::container::flat_map<std::string, SensorVariant>>&
+ std::string, boost::container::flat_map<
+ std::string, dbus::utility::DbusVariantType>>&
interfacesDict,
const InventoryItem* inventoryItem)
{
@@ -895,7 +894,8 @@
const std::string& sensorName, const std::string& sensorType,
const std::shared_ptr<SensorsAsyncResp>& sensorsAsyncResp,
const boost::container::flat_map<
- std::string, boost::container::flat_map<std::string, SensorVariant>>&
+ std::string, boost::container::flat_map<
+ std::string, dbus::utility::DbusVariantType>>&
interfacesDict,
nlohmann::json& sensorJson, InventoryItem* inventoryItem)
{
@@ -1101,7 +1101,8 @@
auto thisValueIt = interfaceProperties->second.find(std::get<1>(p));
if (thisValueIt != interfaceProperties->second.end())
{
- const SensorVariant& valueVariant = thisValueIt->second;
+ const dbus::utility::DbusVariantType& valueVariant =
+ thisValueIt->second;
// The property we want to set may be nested json, so use
// a json_pointer for easy indexing into the json structure.
@@ -1179,7 +1180,7 @@
crow::connections::systemBus->async_method_call(
[path, owner,
sensorsAsyncResp](const boost::system::error_code e,
- std::variant<std::vector<std::string>>
+ const dbus::utility::DbusVariantType&
variantEndpoints) {
if (e)
{
@@ -1215,9 +1216,7 @@
const boost::system::error_code& err,
const boost::container::flat_map<
std::string,
- std::variant<uint8_t,
- std::vector<std::string>,
- std::string>>& ret) {
+ dbus::utility::DbusVariantType>& ret) {
if (err)
{
return; // don't have to have this
@@ -1511,7 +1510,8 @@
inline void storeInventoryItemData(
InventoryItem& inventoryItem,
const boost::container::flat_map<
- std::string, boost::container::flat_map<std::string, SensorVariant>>&
+ std::string, boost::container::flat_map<
+ std::string, dbus::utility::DbusVariantType>>&
interfacesDict)
{
// Get properties from Inventory.Item interface
@@ -2013,61 +2013,61 @@
const std::string& ledPath = (*it).first;
const std::string& ledConnection = (*it).second;
// Response handler for Get State property
- auto respHandler =
- [sensorsAsyncResp, inventoryItems, ledConnections, ledPath,
- callback{std::move(callback)},
- ledConnectionsIndex](const boost::system::error_code ec,
- const std::variant<std::string>& ledState) {
- BMCWEB_LOG_DEBUG << "getInventoryLedData respHandler enter";
- if (ec)
- {
- BMCWEB_LOG_ERROR
- << "getInventoryLedData respHandler DBus error " << ec;
- messages::internalError(sensorsAsyncResp->asyncResp->res);
- return;
- }
+ auto respHandler = [sensorsAsyncResp, inventoryItems, ledConnections,
+ ledPath, callback{std::move(callback)},
+ ledConnectionsIndex](
+ const boost::system::error_code ec,
+ const dbus::utility::DbusVariantType& ledState) {
+ BMCWEB_LOG_DEBUG << "getInventoryLedData respHandler enter";
+ if (ec)
+ {
+ BMCWEB_LOG_ERROR
+ << "getInventoryLedData respHandler DBus error " << ec;
+ messages::internalError(sensorsAsyncResp->asyncResp->res);
+ return;
+ }
- const std::string* state = std::get_if<std::string>(&ledState);
- if (state != nullptr)
+ const std::string* state = std::get_if<std::string>(&ledState);
+ if (state != nullptr)
+ {
+ BMCWEB_LOG_DEBUG << "Led state: " << *state;
+ // Find inventory item with this LED object path
+ InventoryItem* inventoryItem =
+ findInventoryItemForLed(*inventoryItems, ledPath);
+ if (inventoryItem != nullptr)
{
- BMCWEB_LOG_DEBUG << "Led state: " << *state;
- // Find inventory item with this LED object path
- InventoryItem* inventoryItem =
- findInventoryItemForLed(*inventoryItems, ledPath);
- if (inventoryItem != nullptr)
+ // Store LED state in InventoryItem
+ if (boost::ends_with(*state, "On"))
{
- // Store LED state in InventoryItem
- if (boost::ends_with(*state, "On"))
- {
- inventoryItem->ledState = LedState::ON;
- }
- else if (boost::ends_with(*state, "Blink"))
- {
- inventoryItem->ledState = LedState::BLINK;
- }
- else if (boost::ends_with(*state, "Off"))
- {
- inventoryItem->ledState = LedState::OFF;
- }
- else
- {
- inventoryItem->ledState = LedState::UNKNOWN;
- }
+ inventoryItem->ledState = LedState::ON;
+ }
+ else if (boost::ends_with(*state, "Blink"))
+ {
+ inventoryItem->ledState = LedState::BLINK;
+ }
+ else if (boost::ends_with(*state, "Off"))
+ {
+ inventoryItem->ledState = LedState::OFF;
+ }
+ else
+ {
+ inventoryItem->ledState = LedState::UNKNOWN;
}
}
- else
- {
- BMCWEB_LOG_DEBUG << "Failed to find State data for LED: "
- << ledPath;
- }
+ }
+ else
+ {
+ BMCWEB_LOG_DEBUG << "Failed to find State data for LED: "
+ << ledPath;
+ }
- // Recurse to get LED data from next connection
- getInventoryLedData(sensorsAsyncResp, inventoryItems,
- ledConnections, std::move(callback),
- ledConnectionsIndex + 1);
+ // Recurse to get LED data from next connection
+ getInventoryLedData(sensorsAsyncResp, inventoryItems,
+ ledConnections, std::move(callback),
+ ledConnectionsIndex + 1);
- BMCWEB_LOG_DEBUG << "getInventoryLedData respHandler exit";
- };
+ BMCWEB_LOG_DEBUG << "getInventoryLedData respHandler exit";
+ };
// Get the State property for the current LED
crow::connections::systemBus->async_method_call(
@@ -2213,7 +2213,8 @@
auto respHandler = [sensorsAsyncResp, inventoryItems,
callback{std::move(callback)}](
const boost::system::error_code ec,
- const std::variant<uint32_t>& deratingFactor) {
+ const dbus::utility::DbusVariantType&
+ deratingFactor) {
BMCWEB_LOG_DEBUG << "getPowerSupplyAttributesData respHandler enter";
if (ec)
{
@@ -2942,7 +2943,7 @@
},
item.second, item.first, "org.freedesktop.DBus.Properties",
"Set", "xyz.openbmc_project.Sensor.Value", "Value",
- std::variant<double>(iterator->second.first));
+ dbus::utility::DbusVariantType(iterator->second.first));
}
};
// Get object with connection for the given sensor name
diff --git a/redfish-core/lib/storage.hpp b/redfish-core/lib/storage.hpp
index b83e13f..4ad3040 100644
--- a/redfish-core/lib/storage.hpp
+++ b/redfish-core/lib/storage.hpp
@@ -19,6 +19,7 @@
#include "openbmc_dbus_rest.hpp"
#include <app.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
namespace redfish
@@ -159,9 +160,9 @@
storageController["Status"]["State"] = "Enabled";
crow::connections::systemBus->async_method_call(
- [asyncResp,
- index](const boost::system::error_code ec2,
- const std::variant<bool> present) {
+ [asyncResp, index](
+ const boost::system::error_code ec2,
+ const dbus::utility::DbusVariantType present) {
// this interface isn't necessary, only check it
// if we get a good return
if (ec2)
@@ -192,9 +193,9 @@
crow::connections::systemBus->async_method_call(
[asyncResp, index](
const boost::system::error_code ec2,
- const std::vector<std::pair<
- std::string,
- std::variant<bool, std::string, uint64_t>>>&
+ const std::vector<
+ std::pair<std::string,
+ dbus::utility::DbusVariantType>>&
propertiesList) {
if (ec2)
{
@@ -203,9 +204,8 @@
}
for (const std::pair<
std::string,
- std::variant<bool, std::string,
- uint64_t>>& property :
- propertiesList)
+ dbus::utility::DbusVariantType>&
+ property : propertiesList)
{
// Store DBus properties that are also
// Redfish properties with same name and a
@@ -268,18 +268,16 @@
const std::string& path)
{
crow::connections::systemBus->async_method_call(
- [asyncResp](
- const boost::system::error_code ec,
- const std::vector<std::pair<
- std::string, std::variant<bool, std::string, uint64_t>>>&
- propertiesList) {
+ [asyncResp](const boost::system::error_code ec,
+ const std::vector<
+ std::pair<std::string, dbus::utility::DbusVariantType>>&
+ propertiesList) {
if (ec)
{
// this interface isn't necessary
return;
}
- for (const std::pair<std::string,
- std::variant<bool, std::string, uint64_t>>&
+ for (const std::pair<std::string, dbus::utility::DbusVariantType>&
property : propertiesList)
{
// Store DBus properties that are also
@@ -313,7 +311,7 @@
{
crow::connections::systemBus->async_method_call(
[asyncResp, path](const boost::system::error_code ec,
- const std::variant<bool> present) {
+ const dbus::utility::DbusVariantType present) {
// this interface isn't necessary, only check it if
// we get a good return
if (ec)
@@ -343,7 +341,7 @@
{
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code ec,
- const std::variant<bool> rebuilding) {
+ const dbus::utility::DbusVariantType rebuilding) {
// this interface isn't necessary, only check it
// if we get a good return
if (ec)
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 8e1a6f4..b3094df 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -22,6 +22,7 @@
#include <app.hpp>
#include <boost/container/flat_map.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <utils/fw_utils.hpp>
#include <utils/json_utils.hpp>
@@ -41,7 +42,7 @@
*/
inline void
updateDimmProperties(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- const std::variant<bool>& dimmState)
+ const dbus::utility::DbusVariantType& dimmState)
{
const bool* isDimmFunctional = std::get_if<bool>(&dimmState);
if (isDimmFunctional == nullptr)
@@ -74,9 +75,9 @@
*
* @return None.
*/
-inline void
- modifyCpuPresenceState(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- const std::variant<bool>& cpuPresenceState)
+inline void modifyCpuPresenceState(
+ const std::shared_ptr<bmcweb::AsyncResp>& aResp,
+ const dbus::utility::DbusVariantType& cpuPresenceState)
{
const bool* isCpuPresent = std::get_if<bool>(&cpuPresenceState);
@@ -110,9 +111,9 @@
*
* @return None.
*/
-inline void
- modifyCpuFunctionalState(const std::shared_ptr<bmcweb::AsyncResp>& aResp,
- const std::variant<bool>& cpuFunctionalState)
+inline void modifyCpuFunctionalState(
+ const std::shared_ptr<bmcweb::AsyncResp>& aResp,
+ const dbus::utility::DbusVariantType& cpuFunctionalState)
{
const bool* isCpuFunctional = std::get_if<bool>(&cpuFunctionalState);
@@ -142,8 +143,7 @@
inline void getProcessorProperties(
const std::shared_ptr<bmcweb::AsyncResp>& aResp, const std::string& service,
const std::string& path,
- const std::vector<std::pair<
- std::string, std::variant<std::string, uint64_t, uint32_t, uint16_t>>>&
+ const std::vector<std::pair<std::string, dbus::utility::DbusVariantType>>&
properties)
{
@@ -151,7 +151,7 @@
auto getCpuPresenceState =
[aResp](const boost::system::error_code ec3,
- const std::variant<bool>& cpuPresenceCheck) {
+ const dbus::utility::DbusVariantType& cpuPresenceCheck) {
if (ec3)
{
BMCWEB_LOG_ERROR << "DBUS response error " << ec3;
@@ -162,7 +162,7 @@
auto getCpuFunctionalState =
[aResp](const boost::system::error_code ec3,
- const std::variant<bool>& cpuFunctionalCheck) {
+ const dbus::utility::DbusVariantType& cpuFunctionalCheck) {
if (ec3)
{
BMCWEB_LOG_ERROR << "DBUS response error " << ec3;
@@ -236,8 +236,7 @@
[aResp, service,
path](const boost::system::error_code ec2,
const std::vector<std::pair<
- std::string, std::variant<std::string, uint64_t, uint32_t,
- uint16_t>>>& properties) {
+ std::string, dbus::utility::DbusVariantType>>& properties) {
if (ec2)
{
BMCWEB_LOG_ERROR << "DBUS response error " << ec2;
@@ -317,8 +316,9 @@
crow::connections::systemBus->async_method_call(
[aResp, service{connection.first},
path](const boost::system::error_code ec2,
- const std::vector<
- std::pair<std::string, VariantType>>&
+ const std::vector<std::pair<
+ std::string,
+ dbus::utility::DbusVariantType>>&
properties) {
if (ec2)
{
@@ -333,8 +333,10 @@
if (properties.size() > 0)
{
- for (const std::pair<std::string,
- VariantType>&
+ for (const std::pair<
+ std::string,
+ dbus::utility::
+ DbusVariantType>&
property : properties)
{
if (property.first !=
@@ -379,8 +381,9 @@
[aResp](
const boost::system::error_code
ec3,
- const std::variant<bool>&
- dimmState) {
+ const dbus::utility::
+ DbusVariantType&
+ dimmState) {
if (ec3)
{
BMCWEB_LOG_ERROR
@@ -423,11 +426,11 @@
BMCWEB_LOG_DEBUG
<< "Found UUID, now get its properties.";
crow::connections::systemBus->async_method_call(
- [aResp](
- const boost::system::error_code ec3,
- const std::vector<
- std::pair<std::string, VariantType>>&
- properties) {
+ [aResp](const boost::system::error_code ec3,
+ const std::vector<std::pair<
+ std::string,
+ dbus::utility::DbusVariantType>>&
+ properties) {
if (ec3)
{
BMCWEB_LOG_DEBUG
@@ -438,8 +441,9 @@
BMCWEB_LOG_DEBUG << "Got "
<< properties.size()
<< " UUID properties.";
- for (const std::pair<std::string,
- VariantType>&
+ for (const std::pair<
+ std::string,
+ dbus::utility::DbusVariantType>&
property : properties)
{
if (property.first == "UUID")
@@ -474,11 +478,11 @@
"xyz.openbmc_project.Inventory.Item.System")
{
crow::connections::systemBus->async_method_call(
- [aResp](
- const boost::system::error_code ec2,
- const std::vector<
- std::pair<std::string, VariantType>>&
- propertiesList) {
+ [aResp](const boost::system::error_code ec2,
+ const std::vector<std::pair<
+ std::string,
+ dbus::utility::DbusVariantType>>&
+ propertiesList) {
if (ec2)
{
// doesn't have to include this
@@ -488,8 +492,9 @@
BMCWEB_LOG_DEBUG
<< "Got " << propertiesList.size()
<< " properties for system";
- for (const std::pair<std::string,
- VariantType>&
+ for (const std::pair<
+ std::string,
+ dbus::utility::DbusVariantType>&
property : propertiesList)
{
const std::string& propertyName =
@@ -522,9 +527,9 @@
"xyz.openbmc_project.Inventory.Decorator.Asset");
crow::connections::systemBus->async_method_call(
- [aResp](
- const boost::system::error_code ec2,
- const std::variant<std::string>& property) {
+ [aResp](const boost::system::error_code ec2,
+ const dbus::utility::DbusVariantType&
+ property) {
if (ec2)
{
// doesn't have to include this
@@ -574,7 +579,7 @@
BMCWEB_LOG_DEBUG << "Get host information.";
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<std::string>& hostState) {
+ const dbus::utility::DbusVariantType& hostState) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -781,7 +786,7 @@
{
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<std::string>& bootProgress) {
+ const dbus::utility::DbusVariantType& bootProgress) {
if (ec)
{
// BootProgress is an optional object so just do nothing if
@@ -884,7 +889,7 @@
{
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<std::string>& bootType) {
+ const dbus::utility::DbusVariantType& bootType) {
if (ec)
{
// not an error, don't have to have the interface
@@ -934,7 +939,7 @@
{
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<std::string>& bootMode) {
+ const dbus::utility::DbusVariantType& bootMode) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -988,7 +993,7 @@
{
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<std::string>& bootSource) {
+ const dbus::utility::DbusVariantType& bootSource) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -1047,7 +1052,7 @@
// property to set a correct value for the "BootSourceOverrideEnabled"
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<bool>& oneTime) {
+ const dbus::utility::DbusVariantType& oneTime) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -1095,7 +1100,7 @@
{
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<bool>& bootOverrideEnable) {
+ const dbus::utility::DbusVariantType& bootOverrideEnable) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -1154,7 +1159,7 @@
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- std::variant<uint64_t>& lastResetTime) {
+ dbus::utility::DbusVariantType& lastResetTime) {
if (ec)
{
BMCWEB_LOG_DEBUG << "D-BUS response error " << ec;
@@ -1196,7 +1201,7 @@
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- std::variant<bool>& autoRebootEnabled) {
+ dbus::utility::DbusVariantType& autoRebootEnabled) {
if (ec)
{
BMCWEB_LOG_DEBUG << "D-BUS response error " << ec;
@@ -1221,7 +1226,8 @@
// attempts are left
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec2,
- std::variant<uint32_t>& autoRebootAttemptsLeft) {
+ dbus::utility::DbusVariantType&
+ autoRebootAttemptsLeft) {
if (ec2)
{
BMCWEB_LOG_DEBUG << "D-BUS response error " << ec2;
@@ -1289,7 +1295,7 @@
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- std::variant<std::string>& policy) {
+ dbus::utility::DbusVariantType& policy) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -1389,7 +1395,7 @@
// Valid TPM Enable object found, now reading the current value
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- std::variant<bool>& tpmRequired) {
+ dbus::utility::DbusVariantType& tpmRequired) {
if (ec)
{
BMCWEB_LOG_DEBUG
@@ -1509,7 +1515,7 @@
},
serv, path, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.TPM.Policy", "TPMEnable",
- std::variant<bool>(tpmRequired));
+ dbus::utility::DbusVariantType(tpmRequired));
},
"xyz.openbmc_project.ObjectMapper",
"/xyz/openbmc_project/object_mapper",
@@ -1577,7 +1583,7 @@
"/xyz/openbmc_project/control/host0/boot",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Boot.Type", "BootType",
- std::variant<std::string>(bootTypeStr));
+ dbus::utility::DbusVariantType(bootTypeStr));
}
/**
@@ -1641,7 +1647,7 @@
"/xyz/openbmc_project/control/host0/boot",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Object.Enable", "Enabled",
- std::variant<bool>(bootOverrideEnable));
+ dbus::utility::DbusVariantType(bootOverrideEnable));
if (!bootOverrideEnable)
{
@@ -1667,7 +1673,7 @@
"/xyz/openbmc_project/control/host0/boot/one_time",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Object.Enable", "Enabled",
- std::variant<bool>(!bootOverridePersistent));
+ dbus::utility::DbusVariantType(!bootOverridePersistent));
}
/**
@@ -1720,7 +1726,7 @@
"/xyz/openbmc_project/control/host0/boot",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Boot.Source", "BootSource",
- std::variant<std::string>(bootSourceStr));
+ dbus::utility::DbusVariantType(bootSourceStr));
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec) {
@@ -1736,7 +1742,7 @@
"/xyz/openbmc_project/control/host0/boot",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Boot.Mode", "BootMode",
- std::variant<std::string>(bootModeStr));
+ dbus::utility::DbusVariantType(bootModeStr));
}
/**
@@ -1829,7 +1835,7 @@
},
service, path, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Inventory.Decorator.AssetTag", "AssetTag",
- std::variant<std::string>(assetTag));
+ dbus::utility::DbusVariantType(assetTag));
},
"xyz.openbmc_project.ObjectMapper",
"/xyz/openbmc_project/object_mapper",
@@ -1884,7 +1890,7 @@
"/xyz/openbmc_project/control/host0/auto_reboot",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Boot.RebootPolicy", "AutoReboot",
- std::variant<bool>(autoRebootEnabled));
+ dbus::utility::DbusVariantType(autoRebootEnabled));
}
/**
@@ -1933,7 +1939,7 @@
"/xyz/openbmc_project/control/host0/power_restore_policy",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Power.RestorePolicy", "PowerRestorePolicy",
- std::variant<std::string>(powerRestorPolicy));
+ dbus::utility::DbusVariantType(powerRestorPolicy));
}
#ifdef BMCWEB_ENABLE_REDFISH_PROVISIONING_FEATURE
@@ -2110,7 +2116,7 @@
// Valid Power Mode object found, now read the current value
crow::connections::systemBus->async_method_call(
[aResp](const boost::system::error_code ec,
- const std::variant<std::string>& pmode) {
+ const dbus::utility::DbusVariantType& pmode) {
if (ec)
{
BMCWEB_LOG_DEBUG
@@ -2258,7 +2264,7 @@
},
service, path, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Power.Mode", "PowerMode",
- std::variant<std::string>(powerMode));
+ dbus::utility::DbusVariantType(powerMode));
},
"xyz.openbmc_project.ObjectMapper",
"/xyz/openbmc_project/object_mapper",
@@ -2438,7 +2444,7 @@
"/xyz/openbmc_project/watchdog/host0",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.State.Watchdog", "ExpireAction",
- std::variant<std::string>(wdtTimeOutActStr));
+ dbus::utility::DbusVariantType(wdtTimeOutActStr));
}
if (wdtEnable)
@@ -2456,7 +2462,7 @@
"/xyz/openbmc_project/watchdog/host0",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.State.Watchdog", "Enabled",
- std::variant<bool>(*wdtEnable));
+ dbus::utility::DbusVariantType(*wdtEnable));
}
}
@@ -2723,7 +2729,7 @@
},
service, path, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Power.IdlePowerSaver",
- "Enabled", std::variant<bool>(*ipsEnable));
+ "Enabled", dbus::utility::DbusVariantType(*ipsEnable));
}
if (ipsEnterUtil)
{
@@ -2739,7 +2745,7 @@
service, path, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Power.IdlePowerSaver",
"EnterUtilizationPercent",
- std::variant<uint8_t>(*ipsEnterUtil));
+ dbus::utility::DbusVariantType(*ipsEnterUtil));
}
if (ipsEnterTime)
{
@@ -2756,7 +2762,8 @@
},
service, path, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Power.IdlePowerSaver",
- "EnterDwellTime", std::variant<uint64_t>(timeMilliseconds));
+ "EnterDwellTime",
+ dbus::utility::DbusVariantType(timeMilliseconds));
}
if (ipsExitUtil)
{
@@ -2772,7 +2779,7 @@
service, path, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Power.IdlePowerSaver",
"ExitUtilizationPercent",
- std::variant<uint8_t>(*ipsExitUtil));
+ dbus::utility::DbusVariantType(*ipsExitUtil));
}
if (ipsExitTime)
{
@@ -2789,7 +2796,8 @@
},
service, path, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Control.Power.IdlePowerSaver",
- "ExitDwellTime", std::variant<uint64_t>(timeMilliseconds));
+ "ExitDwellTime",
+ dbus::utility::DbusVariantType(timeMilliseconds));
}
},
"xyz.openbmc_project.ObjectMapper",
@@ -2818,8 +2826,9 @@
asyncResp->res.jsonValue["Name"] = "Computer System Collection";
crow::connections::systemBus->async_method_call(
- [asyncResp](const boost::system::error_code ec,
- const std::variant<std::string>& /*hostName*/) {
+ [asyncResp](
+ const boost::system::error_code ec,
+ const dbus::utility::DbusVariantType& /*hostName*/) {
nlohmann::json& ifaceArray =
asyncResp->res.jsonValue["Members"];
ifaceArray = nlohmann::json::array();
@@ -2965,7 +2974,7 @@
"/xyz/openbmc_project/state/host0",
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.State.Host", "RequestedHostTransition",
- std::variant<std::string>{command});
+ dbus::utility::DbusVariantType{command});
}
else
{
@@ -2993,7 +3002,7 @@
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.State.Chassis",
"RequestedPowerTransition",
- std::variant<std::string>{command});
+ dbus::utility::DbusVariantType{command});
}
});
}
diff --git a/redfish-core/lib/telemetry_service.hpp b/redfish-core/lib/telemetry_service.hpp
index b79a5cd..c3082d7 100644
--- a/redfish-core/lib/telemetry_service.hpp
+++ b/redfish-core/lib/telemetry_service.hpp
@@ -3,10 +3,9 @@
#include "utils/telemetry_utils.hpp"
#include <app.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
-#include <variant>
-
namespace redfish
{
@@ -27,9 +26,10 @@
"/redfish/v1/TelemetryService/Triggers";
crow::connections::systemBus->async_method_call(
- [asyncResp](const boost::system::error_code ec,
- const std::vector<std::pair<
- std::string, std::variant<uint32_t, uint64_t>>>& ret) {
+ [asyncResp](
+ const boost::system::error_code ec,
+ const std::vector<
+ std::pair<std::string, dbus::utility::DbusVariantType>>& ret) {
if (ec == boost::system::errc::host_unreachable)
{
asyncResp->res.jsonValue["Status"]["State"] = "Absent";
diff --git a/redfish-core/lib/update_service.hpp b/redfish-core/lib/update_service.hpp
index f3987d4..f5528e1 100644
--- a/redfish-core/lib/update_service.hpp
+++ b/redfish-core/lib/update_service.hpp
@@ -19,11 +19,10 @@
#include <app.hpp>
#include <boost/container/flat_map.hpp>
+#include <dbus_utility.hpp>
#include <registries/privilege_registry.hpp>
#include <utils/fw_utils.hpp>
-#include <variant>
-
namespace redfish
{
@@ -55,7 +54,7 @@
},
service, objPath, "org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Software.Activation", "RequestedActivation",
- std::variant<std::string>(
+ dbus::utility::DbusVariantType(
"xyz.openbmc_project.Software.Activation.RequestedActivations.Active"));
}
@@ -68,7 +67,7 @@
{
std::vector<std::pair<
std::string,
- std::vector<std::pair<std::string, std::variant<std::string>>>>>
+ std::vector<std::pair<std::string, dbus::utility::DbusVariantType>>>>
interfacesProperties;
sdbusplus::message::object_path objPath;
@@ -135,7 +134,7 @@
std::string iface;
boost::container::flat_map<
std::string,
- std::variant<std::string, uint8_t>>
+ dbus::utility::DbusVariantType>
values;
std::string index =
@@ -321,7 +320,8 @@
"arg0='xyz.openbmc_project.Logging.Entry'",
[asyncResp, url](sdbusplus::message::message& m) {
BMCWEB_LOG_DEBUG << "Error Match fired";
- boost::container::flat_map<std::string, std::variant<std::string>>
+ boost::container::flat_map<std::string,
+ dbus::utility::DbusVariantType>
values;
std::string objName;
m.read(objName, values);
@@ -544,7 +544,7 @@
// Get the current ApplyTime value
crow::connections::systemBus->async_method_call(
[asyncResp](const boost::system::error_code ec,
- const std::variant<std::string>& applyTime) {
+ const dbus::utility::DbusVariantType& applyTime) {
if (ec)
{
BMCWEB_LOG_DEBUG << "DBUS response error " << ec;
@@ -654,7 +654,7 @@
"org.freedesktop.DBus.Properties", "Set",
"xyz.openbmc_project.Software.ApplyTime",
"RequestedApplyTime",
- std::variant<std::string>{applyTimeNewVal});
+ dbus::utility::DbusVariantType{applyTimeNewVal});
}
}
}
@@ -825,18 +825,22 @@
obj.second[0].first);
crow::connections::systemBus->async_method_call(
- [asyncResp, swId](
- const boost::system::error_code errorCode,
- const boost::container::flat_map<
- std::string, VariantType>& propertiesList) {
+ [asyncResp,
+ swId](const boost::system::error_code errorCode,
+ const boost::container::flat_map<
+ std::string,
+ dbus::utility::DbusVariantType>&
+ propertiesList) {
if (errorCode)
{
messages::internalError(asyncResp->res);
return;
}
boost::container::flat_map<
- std::string, VariantType>::const_iterator
- it = propertiesList.find("Purpose");
+ std::string,
+ dbus::utility::DbusVariantType>::
+ const_iterator it =
+ propertiesList.find("Purpose");
if (it == propertiesList.end())
{
BMCWEB_LOG_DEBUG
diff --git a/redfish-core/lib/virtual_media.hpp b/redfish-core/lib/virtual_media.hpp
index 34c1c4b..747ca43 100644
--- a/redfish-core/lib/virtual_media.hpp
+++ b/redfish-core/lib/virtual_media.hpp
@@ -671,7 +671,7 @@
constexpr const size_t secretLimit = 1024;
std::shared_ptr<SecurePipe> secretPipe;
- std::variant<int, SecurePipe::unix_fd> unixFd = -1;
+ dbus::utility::DbusVariantType unixFd = -1;
if (!userName.empty() || !password.empty())
{