Added new dbus interface to query console info
obmc-console recipe configure consoles by setting the socket-id
field in the console server config file. obmc-console server use this
socket id to build a abract socket name and register new service
"xyz.openbmc_project.Console.Access". The leaf of the object path will
be socket-id configured. It also exposes the unix abstract socket name
through SocketName property. The socket name is sent as a byte stream as
abstract socket contains null character at the start.
*** For example if recipe configured socket-id as "console0" the
*** following object is exported through dbus interface
# Tree for "console0" console.
$ busctl tree xyz.openbmc_project.Console.console0
`-/xyz
`-/xyz/openbmc_project
`-/xyz/openbmc_project/console
`-/xyz/openbmc_project/console/console0
# Get SocketName property for console0 object
$ busctl get-property xyz.openbmc_project.Console.console0 /xyz/openbmc_project/console/console0 xyz.openbmc_project.Console.Access SocketName
ay 22 0 111 98 109 99 45 99 111 110 115 111 108 101 46 99 111 110 115 111 108 101 48
# Tree for "hypervisor" console
$ busctl tree xyz.openbmc_project.Console.hypervisor
`-/xyz
`-/xyz/openbmc_project
`-/xyz/openbmc_project/console
`-/xyz/openbmc_project/console/hypervisor
# Get SocketName property for hypervisor object
$ busctl get-property xyz.openbmc_project.Console.hypervisor /xyz/openbmc_project/console/hypervisor xyz.openbmc_project.Console.Access SocketName
ay 24 0 111 98 109 99 45 99 111 110 115 111 108 101 46 104 121 112 101 114 118 105 115 111 114
# Note that this is an example of two consoles one is 'console0' and
# second is 'hypervisor'. I have formated the output to easy viewing.
# We also have one extra service for console that is coming from the
# service exist today to get/set the tty device baud rate.
$ busctl call xyz.openbmc_project.ObjectMapper \
/xyz/openbmc_project/object_mapper xyz.openbmc_project.ObjectMapper \
GetSubTree sias /xyz/openbmc_project/console 0 1 \
xyz.openbmc_project.Console.Access
a{sa{sas}}
2
"/xyz/openbmc_project/console/console0" \
1
"xyz.openbmc_project.Console.console0"
4 "org.freedesktop.DBus.Introspectable"
"org.freedesktop.DBus.Peer"
"org.freedesktop.DBus.Properties"
"xyz.openbmc_project.Console.Access"
"/xyz/openbmc_project/console/hypervisor"
2
"xyz.openbmc_project.Console.hypervisor"
4 "org.freedesktop.DBus.Introspectable"
"org.freedesktop.DBus.Peer"
"org.freedesktop.DBus.Properties"
"xyz.openbmc_project.Console.Access"
"xyz.openbmc_project.console"
4 "org.freedesktop.DBus.Introspectable"
"org.freedesktop.DBus.Peer"
"org.freedesktop.DBus.Properties"
"xyz.openbmc_project.Console.Access"
Tested:
Tested on the rainer system with busctl command and integration
with bmcweb
Related commits:
1) phosphor-dbus-interface: https://gerrit.openbmc.org/c/openbmc/phosphor-dbus-interfaces/+/61486
2) obmc-console: https://gerrit.openbmc.org/c/openbmc/obmc-console/+/62496
3) bmcweb: https://gerrit.openbmc.org/c/openbmc/bmcweb/+/62525
Change-Id: Ifb70ce5585c3937f3abd904ffbae51ca67f58724
Signed-off-by: Ninad Palsule <ninadpalsule@us.ibm.com>
diff --git a/console-server.c b/console-server.c
index d06cc32..f52c719 100644
--- a/console-server.c
+++ b/console-server.c
@@ -34,6 +34,7 @@
#include <sys/types.h>
#include <sys/time.h>
+#include <sys/socket.h>
#include <poll.h>
#include "console-server.h"
@@ -302,6 +303,30 @@
return write_buf_to_fd(console->tty_fd, data, len);
}
+/* Read console if from config and prepare a socket name */
+static int set_socket_info(struct console *console, struct config *config)
+{
+ ssize_t len;
+
+ console->console_id = config_get_value(config, "socket-id");
+ if (!console->console_id) {
+ warnx("Error: The socket-id is not set in the config file");
+ return EXIT_FAILURE;
+ }
+
+ /* Get the socket name/path */
+ len = console_socket_path(console->socket_name, console->console_id);
+ if (len < 0) {
+ warn("Failed to set socket path: %s", strerror(errno));
+ return EXIT_FAILURE;
+ }
+
+ /* Socket name is not a null terminated string hence save the length */
+ console->socket_name_len = len;
+
+ return 0;
+}
+
static void handlers_init(struct console *console, struct config *config)
{
/* NOLINTBEGIN(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp) */
@@ -732,6 +757,10 @@
return EXIT_FAILURE;
}
+ if (set_socket_info(console, config)) {
+ return EXIT_FAILURE;
+ }
+
console->tty_kname = config_tty_kname;
console->console_id = config_get_value(config, "socket-id");