summaryrefslogtreecommitdiff
path: root/meta-phosphor/recipes-phosphor/ipmi/ipmitool/0001-plugins-Add-a-backend-for-the-OpenBMC-dbus-interface.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-phosphor/recipes-phosphor/ipmi/ipmitool/0001-plugins-Add-a-backend-for-the-OpenBMC-dbus-interface.patch')
-rw-r--r--meta-phosphor/recipes-phosphor/ipmi/ipmitool/0001-plugins-Add-a-backend-for-the-OpenBMC-dbus-interface.patch387
1 files changed, 0 insertions, 387 deletions
diff --git a/meta-phosphor/recipes-phosphor/ipmi/ipmitool/0001-plugins-Add-a-backend-for-the-OpenBMC-dbus-interface.patch b/meta-phosphor/recipes-phosphor/ipmi/ipmitool/0001-plugins-Add-a-backend-for-the-OpenBMC-dbus-interface.patch
deleted file mode 100644
index de32c0155..000000000
--- a/meta-phosphor/recipes-phosphor/ipmi/ipmitool/0001-plugins-Add-a-backend-for-the-OpenBMC-dbus-interface.patch
+++ /dev/null
@@ -1,387 +0,0 @@
-From 7a74bdc8d1b0b32c35dc83e130f687a52dfda1e8 Mon Sep 17 00:00:00 2001
-From: Jeremy Kerr <jk@ozlabs.org>
-Date: Tue, 13 Oct 2015 09:17:21 +0800
-Subject: [PATCH] plugins: Add a backend for the OpenBMC dbus interface
-
-Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-
-Includes the following commits from the following authors
-
-plugins/dbus: Split netfn from lun, and ccode from data
-
-Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-
-plugins/dbus: fix missing semicolon
-
-Reported-by: Chris Austen <austenc@us.ibm.com>
-
-Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-
-plugins/dbus: Fix ccode response
-
-We need to copy it in from the dbus reply.
-
-Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-
-plugins/dbus: Use default dbus connection
-
-... so we'll use the system bus if run as UID 0.
-
-Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-
-if no interface is specified, use the dbus interface by default
-
-This is a patch that should only be on openbmc, not sent upstream
-because the dbus interface is really only an openbmc thing.
-
-Signed-off-by: Vernon Mauery <vernon.mauery@linux.intel.com>
----
- configure.ac | 19 ++++
- src/plugins/Makefile.am | 4 +-
- src/plugins/dbus/Makefile.am | 41 ++++++++
- src/plugins/dbus/dbus.c | 199 +++++++++++++++++++++++++++++++++++
- src/plugins/ipmi_intf.c | 6 ++
- 5 files changed, 267 insertions(+), 2 deletions(-)
- create mode 100644 src/plugins/dbus/Makefile.am
- create mode 100644 src/plugins/dbus/dbus.c
-
-diff --git a/configure.ac b/configure.ac
-index f2fe1f3..81cc925 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -60,6 +60,7 @@ xenable_all_options=yes
- xenable_intf_bmc=no
- xenable_intf_dummy=no
- xenable_intf_imb=yes
-+xenable_intf_dbus=yes
- xenable_intf_lipmi=yes
- xenable_intf_open=yes
- #xenable_intf_serial=yes
-@@ -222,6 +223,22 @@ if test "x$xenable_intf_usb" = "xyes"; then
- IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB usb/libintf_usb.la"
- fi
-
-+dnl enable IPMI dbus interface
-+AC_ARG_ENABLE([intf-dbus],
-+ [AC_HELP_STRING([--enable-intf-dbus],
-+ [enable IPMI dbus interface [default=yes]])],
-+ [xenable_intf_dbus=$enableval],
-+ [xenable_intf_dbus=yes])
-+if test "x$xenable_intf_dbus" = "xstatic" || test "x$xenable_intf_dbus" = "xplugin"; then
-+ xenable_intf_dbus=yes
-+fi
-+if test "x$xenable_intf_dbus" = "xyes"; then
-+ AC_DEFINE(IPMI_INTF_DBUS, [1], [Define to 1 to enable dbus interface.])
-+ AC_SUBST(INTF_DBUS, [dbus])
-+ AC_SUBST(INTF_DBUS_LIB, [libintf_dbus.la])
-+ IPMITOOL_INTF_LIB="$IPMITOOL_INTF_LIB dbus/libintf_dbus.la"
-+fi
-+
- dnl enable IPMIv2.0 RMCP+ LAN interface
- AC_ARG_ENABLE([intf-lanplus],
- [AC_HELP_STRING([--enable-intf-lanplus],
-@@ -664,6 +681,7 @@ AC_CONFIG_FILES([Makefile
- src/plugins/imb/Makefile
- src/plugins/bmc/Makefile
- src/plugins/usb/Makefile
-+ src/plugins/dbus/Makefile
- src/plugins/lipmi/Makefile
- src/plugins/serial/Makefile
- src/plugins/dummy/Makefile])
-@@ -681,6 +699,7 @@ AC_MSG_RESULT([ free : $xenable_intf_free])
- AC_MSG_RESULT([ imb : $xenable_intf_imb])
- AC_MSG_RESULT([ bmc : $xenable_intf_bmc])
- AC_MSG_RESULT([ usb : $xenable_intf_usb])
-+AC_MSG_RESULT([ dbus : $xenable_intf_dbus])
- AC_MSG_RESULT([ lipmi : $xenable_intf_lipmi])
- AC_MSG_RESULT([ serial : $xenable_intf_serial])
- AC_MSG_RESULT([ dummy : $xenable_intf_dummy])
-diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
-index 7ad8173..c0b0b29 100644
---- a/src/plugins/Makefile.am
-+++ b/src/plugins/Makefile.am
-@@ -32,8 +32,8 @@ MAINTAINERCLEANFILES = Makefile.in
-
- AM_CPPFLAGS = -I$(top_srcdir)/include
-
--SUBDIRS = @INTF_LAN@ @INTF_LANPLUS@ @INTF_OPEN@ @INTF_LIPMI@ @INTF_IMB@ @INTF_BMC@ @INTF_FREE@ @INTF_SERIAL@ @INTF_DUMMY@ @INTF_USB@
--DIST_SUBDIRS = lan lanplus open lipmi imb bmc free serial dummy usb
-+SUBDIRS = @INTF_LAN@ @INTF_LANPLUS@ @INTF_OPEN@ @INTF_LIPMI@ @INTF_IMB@ @INTF_BMC@ @INTF_FREE@ @INTF_SERIAL@ @INTF_DUMMY@ @INTF_USB@ @INTF_DBUS@
-+DIST_SUBDIRS = lan lanplus open lipmi imb bmc free serial dummy usb dbus
-
- noinst_LTLIBRARIES = libintf.la
- libintf_la_SOURCES = ipmi_intf.c
-diff --git a/src/plugins/dbus/Makefile.am b/src/plugins/dbus/Makefile.am
-new file mode 100644
-index 0000000..3e92113
---- /dev/null
-+++ b/src/plugins/dbus/Makefile.am
-@@ -0,0 +1,41 @@
-+ #
-+ # Copyright (c) 2015 IBM Corporation
-+ # All rights reserved.
-+ #
-+ # Redistribution and use in source and binary forms, with or without
-+ # modification,are permitted provided that the following conditions are met:
-+ #
-+ # 1. Redistributions of source code must retain the above copyright notice,
-+ # this list of conditions and the following disclaimer.
-+ #
-+ # 2. Redistributions in binary form must reproduce the above copyright notice,
-+ # this list of conditions and the following disclaimer in the documentation
-+ # and/or other materials provided with the distribution.
-+ #
-+ # 3. Neither the name of the copyright holder nor the names of its contributors
-+ # may be used to endorse or promote products derived from this software
-+ # without specific prior written permission.
-+ #
-+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-+ # AND ANY EXPRESS OR IMPLIED WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE
-+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ # POSSIBILITY OF SUCH DAMAGE.
-+ #
-+
-+MAINTAINERCLEANFILES = Makefile.in
-+
-+INCLUDES = -I$(top_srcdir)/include
-+
-+EXTRA_LTLIBRARIES = libintf_dbus.la
-+noinst_LTLIBRARIES = @INTF_DBUS_LIB@
-+libintf_dbus_la_LDFLAGS = -lsystemd
-+libintf_dbus_la_LIBADD = $(top_builddir)/lib/libipmitool.la
-+libintf_dbus_la_SOURCES = dbus.c
-+
-diff --git a/src/plugins/dbus/dbus.c b/src/plugins/dbus/dbus.c
-new file mode 100644
-index 0000000..c20545f
---- /dev/null
-+++ b/src/plugins/dbus/dbus.c
-@@ -0,0 +1,199 @@
-+/*
-+ * Copyright (c) 2015 IBM Corporation
-+ * All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ *
-+ * 1. Redistributions of source code must retain the above copyright notice,
-+ * this list of conditions and the following disclaimer.
-+ *
-+ * 2. Redistributions in binary form must reproduce the above copyright notice,
-+ * this list of conditions and the following disclaimer in the documentation
-+ * and/or other materials provided with the distribution.
-+ *
-+ * 3. Neither the name of the copyright holder nor the names of its
-+ * contributors may be used to endorse or promote products derived from this
-+ * software without specific prior written permission.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ * POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#define _BSD_SOURCE
-+
-+#include <sys/file.h>
-+#include <sys/stat.h>
-+#include <sys/types.h>
-+#include <fcntl.h>
-+#include <errno.h>
-+#include <unistd.h>
-+#include <stdbool.h>
-+
-+#include <systemd/sd-bus.h>
-+#include <systemd/sd-bus-vtable.h>
-+
-+#include <ipmitool/log.h>
-+#include <ipmitool/ipmi.h>
-+#include <ipmitool/ipmi_intf.h>
-+
-+static sd_bus *bus;
-+static uint8_t seq;
-+static struct ipmi_rs rsp;
-+static bool reply_received;
-+
-+static const char *bus_name = "org.openbmc.HostIpmi.ipmitool";
-+static const char *object_path = "/org/openbmc/HostIpmi/ipmitool";
-+static const char *interface = "org.openbmc.HostIpmi";
-+
-+static struct ipmi_rs *ipmi_dbus_sendrecv(struct ipmi_intf *intf,
-+ struct ipmi_rq *req)
-+{
-+ sd_bus_message *msg;
-+ int rc;
-+
-+ (void)intf;
-+
-+ rsp.ccode = 0xff;
-+
-+ rc = sd_bus_message_new_signal(bus, &msg, object_path,
-+ interface, "ReceivedMessage");
-+ if (rc < 0) {
-+ lprintf(LOG_ERR, "%s: failed to create message: %s\n",
-+ __func__, strerror(-rc));
-+ goto out;
-+ }
-+
-+ rc = sd_bus_message_append(msg, "yyyy",
-+ ++seq,
-+ req->msg.netfn,
-+ req->msg.lun,
-+ req->msg.cmd);
-+ if (rc < 0) {
-+ lprintf(LOG_ERR, "%s: failed to init bytes\n", __func__);
-+ goto out_free;
-+ }
-+
-+ rc = sd_bus_message_append_array(msg, 'y', req->msg.data,
-+ req->msg.data_len);
-+ if (rc < 0) {
-+ lprintf(LOG_ERR, "%s: failed to init body\n", __func__);
-+ goto out_free;
-+ }
-+
-+ rc = sd_bus_send(bus, msg, NULL);
-+ if (rc < 0) {
-+ lprintf(LOG_ERR, "%s: failed to send dbus message\n",
-+ __func__);
-+ goto out_free;
-+ }
-+
-+ for (reply_received = false; !reply_received;) {
-+ rc = sd_bus_wait(bus, -1);
-+ sd_bus_process(bus, NULL);
-+ }
-+
-+out_free:
-+ sd_bus_message_unref(msg);
-+out:
-+ return &rsp;
-+}
-+
-+static int ipmi_dbus_method_send_message(sd_bus_message *msg, void *userdata,
-+ sd_bus_error *error)
-+{
-+ uint8_t recv_seq, recv_netfn, recv_lun, recv_cmd, recv_cc;
-+ const void *data;
-+ size_t n;
-+ int rc;
-+
-+ (void)userdata;
-+ (void)error;
-+
-+ rc = sd_bus_message_read(msg, "yyyyy", &recv_seq, &recv_netfn,
-+ &recv_lun, &recv_cmd, &recv_cc);
-+ if (rc < 0) {
-+ lprintf(LOG_ERR, "%s: failed to read reply\n", __func__);
-+ goto out;
-+ }
-+
-+ rc = sd_bus_message_read_array(msg, 'y', &data, &n);
-+ if (rc < 0) {
-+ lprintf(LOG_ERR, "%s: failed to read reply data\n", __func__);
-+ goto out;
-+ }
-+
-+ if (n > sizeof(rsp.data)) {
-+ lprintf(LOG_ERR, "%s: data too long!\n", __func__);
-+ goto out;
-+ }
-+
-+ if (recv_seq == seq) {
-+ rsp.ccode = recv_cc;
-+ rsp.data_len = n;
-+ memcpy(rsp.data, data, rsp.data_len);
-+ reply_received = true;
-+ }
-+
-+out:
-+ sd_bus_reply_method_return(msg, "x", 0);
-+ return 0;
-+}
-+
-+static const sd_bus_vtable dbus_vtable[] = {
-+ SD_BUS_VTABLE_START(0),
-+ SD_BUS_SIGNAL("ReceivedMessage", "yyyyay", 0),
-+ SD_BUS_METHOD("sendMessage", "yyyyyay", "x",
-+ ipmi_dbus_method_send_message,
-+ SD_BUS_VTABLE_UNPRIVILEGED),
-+ SD_BUS_VTABLE_END
-+};
-+
-+static int ipmi_dbus_setup(struct ipmi_intf *intf)
-+{
-+ const char *name;
-+ int rc;
-+
-+ rc = sd_bus_default(&bus);
-+ if (rc < 0) {
-+ lprintf(LOG_ERR, "Can't connect to session bus: %s\n",
-+ strerror(-rc));
-+ return -1;
-+ }
-+
-+ sd_bus_add_object_vtable(bus, NULL, object_path, interface,
-+ dbus_vtable, NULL);
-+
-+ sd_bus_request_name(bus, bus_name, SD_BUS_NAME_REPLACE_EXISTING);
-+
-+ sd_bus_flush(bus);
-+ sd_bus_get_unique_name(bus, &name);
-+ intf->opened = 1;
-+
-+ return 0;
-+}
-+
-+static void ipmi_dbus_close(struct ipmi_intf *intf)
-+{
-+ if (intf->opened)
-+ sd_bus_close(bus);
-+ intf->opened = 0;
-+}
-+
-+struct ipmi_intf ipmi_dbus_intf = {
-+ .name = "dbus",
-+ .desc = "OpenBMC dbus interface",
-+ .setup = ipmi_dbus_setup,
-+ .close = ipmi_dbus_close,
-+ .sendrecv = ipmi_dbus_sendrecv,
-+};
-diff --git a/src/plugins/ipmi_intf.c b/src/plugins/ipmi_intf.c
-index 9225a34..56c2543 100644
---- a/src/plugins/ipmi_intf.c
-+++ b/src/plugins/ipmi_intf.c
-@@ -89,8 +89,14 @@ extern struct ipmi_intf ipmi_dummy_intf;
- #ifdef IPMI_INTF_USB
- extern struct ipmi_intf ipmi_usb_intf;
- #endif
-+#ifdef IPMI_INTF_DBUS
-+extern struct ipmi_intf ipmi_dbus_intf;
-+#endif
-
- struct ipmi_intf * ipmi_intf_table[] = {
-+#ifdef IPMI_INTF_DBUS
-+ &ipmi_dbus_intf,
-+#endif
- #ifdef IPMI_INTF_OPEN
- &ipmi_open_intf,
- #endif
---
-2.17.1
-