Generate sdbusplus bindings
Generate sdbusplus server bindings for the org.openbmc.Associations
interface.
Add YAML file that describes the org.openbmc.Associations interface.
Change-Id: Ic72e372ec817a49f4e6f5305b693173d90ee5e24
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
diff --git a/org.openbmc.Associations.cpp b/org.openbmc.Associations.cpp
new file mode 100644
index 0000000..d4580c9
--- /dev/null
+++ b/org.openbmc.Associations.cpp
@@ -0,0 +1,162 @@
+#include <algorithm>
+#include <sdbusplus/server.hpp>
+#include <sdbusplus/exception.hpp>
+#include <org/openbmc/Associations/server.hpp>
+
+namespace sdbusplus
+{
+namespace org
+{
+namespace openbmc
+{
+namespace server
+{
+
+Associations::Associations(bus::bus& bus, const char* path)
+ : _org_openbmc_Associations_interface(
+ bus, path, _interface, _vtable, this)
+{
+}
+
+Associations::Associations(bus::bus& bus, const char* path,
+ const std::map<std::string, PropertiesVariant>& vals)
+ : Associations(bus, path)
+{
+ for (const auto& v : vals)
+ {
+ setPropertyByName(v.first, v.second);
+ }
+}
+
+
+
+auto Associations::associations() const ->
+ std::vector<std::tuple<std::string, std::string, std::string>>
+{
+ return _associations;
+}
+
+int Associations::_callback_get_associations(
+ sd_bus* bus, const char* path, const char* interface,
+ const char* property, sd_bus_message* reply, void* context,
+ sd_bus_error* error)
+{
+ using sdbusplus::server::binding::details::convertForMessage;
+
+ try
+ {
+ auto m = message::message(reply);
+#ifndef DISABLE_TRANSACTION
+ {
+ auto tbus = m.get_bus();
+ sdbusplus::server::transaction::Transaction t(tbus, m);
+ sdbusplus::server::transaction::set_id
+ (std::hash<sdbusplus::server::transaction::Transaction>{}(t));
+ }
+#endif
+
+ auto o = static_cast<Associations*>(context);
+ m.append(convertForMessage(o->associations()));
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
+
+ return true;
+}
+
+auto Associations::associations(std::vector<std::tuple<std::string, std::string, std::string>> value) ->
+ std::vector<std::tuple<std::string, std::string, std::string>>
+{
+ if (_associations != value)
+ {
+ _associations = value;
+ _org_openbmc_Associations_interface.property_changed("associations");
+ }
+
+ return _associations;
+}
+
+int Associations::_callback_set_associations(
+ sd_bus* bus, const char* path, const char* interface,
+ const char* property, sd_bus_message* value, void* context,
+ sd_bus_error* error)
+{
+ try
+ {
+ auto m = message::message(value);
+#ifndef DISABLE_TRANSACTION
+ {
+ auto tbus = m.get_bus();
+ sdbusplus::server::transaction::Transaction t(tbus, m);
+ sdbusplus::server::transaction::set_id
+ (std::hash<sdbusplus::server::transaction::Transaction>{}(t));
+ }
+#endif
+
+ auto o = static_cast<Associations*>(context);
+
+ std::vector<std::tuple<std::string, std::string, std::string>> v{};
+ m.read(v);
+ o->associations(v);
+ }
+ catch(sdbusplus::internal_exception_t& e)
+ {
+ sd_bus_error_set_const(error, e.name(), e.description());
+ return -EINVAL;
+ }
+
+ return true;
+}
+
+namespace details
+{
+namespace Associations
+{
+static const auto _property_associations =
+ utility::tuple_to_array(message::types::type_id<
+ std::vector<std::tuple<std::string, std::string, std::string>>>());
+}
+}
+
+void Associations::setPropertyByName(const std::string& name,
+ const PropertiesVariant& val)
+{
+ if (name == "associations")
+ {
+ auto& v = message::variant_ns::get<std::vector<std::tuple<std::string, std::string, std::string>>>(val);
+ associations(v);
+ return;
+ }
+}
+
+auto Associations::getPropertyByName(const std::string& name) ->
+ PropertiesVariant
+{
+ if (name == "associations")
+ {
+ return associations();
+ }
+
+ return PropertiesVariant();
+}
+
+
+const vtable::vtable_t Associations::_vtable[] = {
+ vtable::start(),
+ vtable::property("associations",
+ details::Associations::_property_associations
+ .data(),
+ _callback_get_associations,
+ _callback_set_associations,
+ vtable::property_::emits_change),
+ vtable::end()
+};
+
+} // namespace server
+} // namespace openbmc
+} // namespace org
+} // namespace sdbusplus
+
diff --git a/org/openbmc/Associations.interface.yaml b/org/openbmc/Associations.interface.yaml
new file mode 100644
index 0000000..9be60ce
--- /dev/null
+++ b/org/openbmc/Associations.interface.yaml
@@ -0,0 +1,13 @@
+description: >
+ Implement to delegate org.openbmc.Association interface management
+ responsibilities to another application.
+properties:
+ - name: associations
+ type: array[struct[string,string,string]]
+ description: >
+ An array of forward, reverse, endpoint tuples where:
+ forward - The type of the association.
+ reverse - The type of the association to create for the endpoint.
+ endpoint - The association endpoint.
+
+# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
diff --git a/org/openbmc/Associations/server.hpp b/org/openbmc/Associations/server.hpp
new file mode 100644
index 0000000..7a597ce
--- /dev/null
+++ b/org/openbmc/Associations/server.hpp
@@ -0,0 +1,101 @@
+#pragma once
+#include <tuple>
+#include <systemd/sd-bus.h>
+#include <sdbusplus/server.hpp>
+
+namespace sdbusplus
+{
+namespace org
+{
+namespace openbmc
+{
+namespace server
+{
+
+class Associations
+{
+ public:
+ /* Define all of the basic class operations:
+ * Not allowed:
+ * - Default constructor to avoid nullptrs.
+ * - Copy operations due to internal unique_ptr.
+ * - Move operations due to 'this' being registered as the
+ * 'context' with sdbus.
+ * Allowed:
+ * - Destructor.
+ */
+ Associations() = delete;
+ Associations(const Associations&) = delete;
+ Associations& operator=(const Associations&) = delete;
+ Associations(Associations&&) = delete;
+ Associations& operator=(Associations&&) = delete;
+ virtual ~Associations() = default;
+
+ /** @brief Constructor to put object onto bus at a dbus path.
+ * @param[in] bus - Bus to attach to.
+ * @param[in] path - Path to attach at.
+ */
+ Associations(bus::bus& bus, const char* path);
+
+
+ using PropertiesVariant = sdbusplus::message::variant<
+ std::vector<std::tuple<std::string, std::string, std::string>>>;
+
+ /** @brief Constructor to initialize the object from a map of
+ * properties.
+ *
+ * @param[in] bus - Bus to attach to.
+ * @param[in] path - Path to attach at.
+ * @param[in] vals - Map of property name to value for initalization.
+ */
+ Associations(bus::bus& bus, const char* path,
+ const std::map<std::string, PropertiesVariant>& vals);
+
+
+
+ /** Get value of associations */
+ virtual std::vector<std::tuple<std::string, std::string, std::string>> associations() const;
+ /** Set value of associations */
+ virtual std::vector<std::tuple<std::string, std::string, std::string>> associations(std::vector<std::tuple<std::string, std::string, std::string>> value);
+
+ /** @brief Sets a property by name.
+ * @param[in] name - A string representation of the property name.
+ * @param[in] val - A variant containing the value to set.
+ */
+ void setPropertyByName(const std::string& name,
+ const PropertiesVariant& val);
+
+ /** @brief Gets a property by name.
+ * @param[in] name - A string representation of the property name.
+ * @return - A variant containing the value of the property.
+ */
+ PropertiesVariant getPropertyByName(const std::string& name);
+
+
+ private:
+
+ /** @brief sd-bus callback for get-property 'associations' */
+ static int _callback_get_associations(
+ sd_bus*, const char*, const char*, const char*,
+ sd_bus_message*, void*, sd_bus_error*);
+ /** @brief sd-bus callback for set-property 'associations' */
+ static int _callback_set_associations(
+ sd_bus*, const char*, const char*, const char*,
+ sd_bus_message*, void*, sd_bus_error*);
+
+
+ static constexpr auto _interface = "org.openbmc.Associations";
+ static const vtable::vtable_t _vtable[];
+ sdbusplus::server::interface::interface
+ _org_openbmc_Associations_interface;
+
+ std::vector<std::tuple<std::string, std::string, std::string>> _associations{};
+
+};
+
+
+} // namespace server
+} // namespace openbmc
+} // namespace org
+} // namespace sdbusplus
+