Added sd-bus service example
Added obmc-phosphor-example-sdbus.
Added sdbus-service class for common logic.
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/Makefile b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/Makefile
new file mode 100644
index 0000000..5166fdf
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/Makefile
@@ -0,0 +1,17 @@
+EXE = obmc-phosphor-example-sdbus
+OBJS = $(EXE).o
+DEPPKGS = libsystemd
+CC ?= $(CROSS_COMPILE)gcc
+INCLUDES += $(shell pkg-config --cflags $(DEPPKGS))
+LIBS += $(shell pkg-config --libs $(DEPPKGS))
+
+%.o : %.c
+ echo $(CFLAGS)
+ echo $(INCLUDES)
+ $(CC) -c $< $(CFLAGS) $(INCLUDES) -o $@
+$(EXE): $(OBJS)
+ $(CC) $^ $(LDFLAGS) $(LIBS) -o $@
+clean:
+ rm -f $(OBJS) $(EXE) *.o *.d
+distclean: clean
+ rm -f *.c~ *.h~ *.sh~ Makefile~ config.mk~
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.c b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.c
new file mode 100644
index 0000000..a66bb55
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.c
@@ -0,0 +1,117 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <systemd/sd-bus.h>
+
+static int method_echo(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
+ char *str;
+ const char *intf = sd_bus_message_get_interface(m),
+ *path = sd_bus_message_get_path(m);
+ sd_bus *bus = sd_bus_message_get_bus(m);
+
+ char response[512] = {0};
+ int r;
+
+ /* Read the parameters */
+ r = sd_bus_message_read(m, "s", &str);
+ if (r < 0) {
+ fprintf(stderr, "Failed to parse parameters: %s\n", strerror(-r));
+ return r;
+ }
+
+ r = sd_bus_emit_signal(bus, path, intf, "MethodInvoked", "ss",
+ "Echo method was invoked", path);
+ if (r < 0) {
+ fprintf(stderr, "Failed to emit signal: %s\n", strerror(-r));
+ return r;
+ }
+
+ strncat(response, path, 128);
+ strcat(response, " says ");
+ strncat(response, str, 128);
+
+ /* Reply with the response */
+ return sd_bus_reply_method_return(m, "s", &response);
+}
+
+static const sd_bus_vtable echo_vtable[] = {
+ SD_BUS_VTABLE_START(0),
+ SD_BUS_METHOD("Echo", "s", "s", method_echo, SD_BUS_VTABLE_UNPRIVILEGED),
+ SD_BUS_SIGNAL("MethodInvoked", "s", 0),
+ SD_BUS_VTABLE_END
+};
+
+int main(int argc, char *argv[]) {
+ sd_bus_slot *slot = NULL;
+ sd_bus *bus = NULL;
+ int r;
+ char **acquired = NULL, **activatable = NULL, **i;
+
+ /* Connect to the user bus this time */
+ r = sd_bus_open_system(&bus);
+ if (r < 0) {
+ fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r));
+ goto finish;
+ }
+
+ /* Install an object */
+ r = sd_bus_add_object_vtable(bus,
+ &slot,
+ "/org/openbmc/examples/path0/SDBusObj", /* object path */
+ "org.openbmc.examples.Echo", /* interface name */
+ echo_vtable,
+ NULL);
+ if (r < 0) {
+ fprintf(stderr, "Failed to issue method call: %s\n", strerror(-r));
+ goto finish;
+ }
+
+ /* Install an object */
+ r = sd_bus_add_object_vtable(bus,
+ &slot,
+ "/org/openbmc/examples/path1/SDBusObj", /* object path */
+ "org.openbmc.examples.Echo", /* interface name */
+ echo_vtable,
+ NULL);
+ if (r < 0) {
+ fprintf(stderr, "Failed to issue method call: %s\n", strerror(-r));
+ goto finish;
+ }
+
+ /* Take a well-known service name so that clients can find us */
+ r = sd_bus_request_name(bus, "org.openbmc.examples.SDBusService0", 0);
+ if (r < 0) {
+ fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r));
+ goto finish;
+ }
+
+ r = sd_bus_request_name(bus, "org.openbmc.examples.SDBusService1", 0);
+ if (r < 0) {
+ fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r));
+ goto finish;
+ }
+
+ for (;;) {
+ /* Process requests */
+ r = sd_bus_process(bus, NULL);
+ if (r < 0) {
+ fprintf(stderr, "Failed to process bus: %s\n", strerror(-r));
+ goto finish;
+ }
+ if (r > 0) /* we processed a request, try to process another one, right-away */
+ continue;
+
+ /* Wait for the next request to process */
+ r = sd_bus_wait(bus, (uint64_t) -1);
+ if (r < 0) {
+ fprintf(stderr, "Failed to wait on bus: %s\n", strerror(-r));
+ goto finish;
+ }
+ }
+
+finish:
+ sd_bus_slot_unref(slot);
+ sd_bus_unref(bus);
+
+ return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
+}
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.service b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.service
new file mode 100644
index 0000000..dcce732
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/obmc-phosphor-example-sdbus.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Phosphor OpenBMC QEMU application example
+
+[Service]
+ExecStart=/usr/sbin/obmc-phosphor-example-sdbus
+
+[Install]
+WantedBy=multi-user.target
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService0.conf b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService0.conf
new file mode 100644
index 0000000..45af4f4
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService0.conf
@@ -0,0 +1,8 @@
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <policy user="root">
+ <allow own="org.openbmc.examples.SDBusService0"/>
+ <allow send_destination="org.openbmc.examples.SDBusService0"/>
+ </policy>
+</busconfig>
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService1.conf b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService1.conf
new file mode 100644
index 0000000..5a7bfb8
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/files/org.openbmc.examples.SDBusService1.conf
@@ -0,0 +1,8 @@
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <policy user="root">
+ <allow own="org.openbmc.examples.SDBusService1"/>
+ <allow send_destination="org.openbmc.examples.SDBusService1"/>
+ </policy>
+</busconfig>
diff --git a/common/recipes-phosphor/obmc-phosphor-example-sdbus/obmc-phosphor-example-sdbus.bb b/common/recipes-phosphor/obmc-phosphor-example-sdbus/obmc-phosphor-example-sdbus.bb
new file mode 100644
index 0000000..3735007
--- /dev/null
+++ b/common/recipes-phosphor/obmc-phosphor-example-sdbus/obmc-phosphor-example-sdbus.bb
@@ -0,0 +1,10 @@
+SUMMARY = "Phosphor OpenBMC BSP Example Application"
+DESCRIPTION = "Phosphor OpenBMC QEMU BSP example implementation."
+PR = "r1"
+
+DBUS_SERVICES = " \
+ org.openbmc.examples.SDBusService0 \
+ org.openbmc.examples.SDBusService1 \
+ "
+
+inherit obmc-phosphor-sdbus-service
diff --git a/common/recipes-phosphor/obmc-phosphor-fan/obmc-phosphor-fand.bb b/common/recipes-phosphor/obmc-phosphor-fan/obmc-phosphor-fand.bb
index c83e825..13c4b70 100644
--- a/common/recipes-phosphor/obmc-phosphor-fan/obmc-phosphor-fand.bb
+++ b/common/recipes-phosphor/obmc-phosphor-fan/obmc-phosphor-fand.bb
@@ -3,4 +3,4 @@
PR = "r1"
inherit obmc-phosphor-fan-mgmt
-inherit obmc-phosphor-c-daemon
+inherit obmc-phosphor-sdbus-service