[systemd-devel] [RFC 3/8] test/kdbus-util: add lookup_name() for benchmark program

AKASHI Takahiro takahiro.akashi at linaro.org
Wed Jun 25 02:13:32 PDT 2014


Kdbus can use a "name," instead of id, directly as a destination of
message, while Android has an external service manager which is some kind
of (service-)name lookup agent.
By adding lookup_name() to kdbus utility, I'd like to retain the similarity
between binder's and kdbus's bencharmk programs aiming to merge both into
one in the future.

Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
---
 test/kdbus-util.c |   38 ++++++++++++++++++++++++++++++++++++++
 test/kdbus-util.h |    1 +
 2 files changed, 39 insertions(+)

diff --git a/test/kdbus-util.c b/test/kdbus-util.c
index 6c2c5db..2cac8be 100644
--- a/test/kdbus-util.c
+++ b/test/kdbus-util.c
@@ -605,6 +605,44 @@ int name_list(struct conn *conn, uint64_t flags)
 	return 0;
 }
 
+int64_t lookup_name(struct conn *conn, uint64_t flags, const char *svcname)
+{
+	struct kdbus_cmd_name_list cmd_list;
+	struct kdbus_name_list *list;
+	struct kdbus_cmd_name *name;
+	int ret;
+	int64_t id = -1;
+
+	cmd_list.flags = flags;
+
+	ret = ioctl(conn->fd, KDBUS_CMD_NAME_LIST, &cmd_list);
+	if (ret < 0) {
+		fprintf(stderr, "error listing names: %d (%m)\n", ret);
+		return EXIT_FAILURE;
+	}
+
+	printf("REGISTRY:\n");
+	list = (struct kdbus_name_list *)(conn->buf + cmd_list.offset);
+	KDBUS_ITEM_FOREACH(name, list, names) {
+		printf("%8llu flags=0x%08llx conn=0x%08llx '%s'\n", name->owner_id,
+		       name->flags, name->conn_flags,
+		       name->size > sizeof(struct kdbus_cmd_name) ? name->name : "");
+		if (!strcmp(svcname, name->name)) {
+			id = name->owner_id;
+			break;
+		}
+	}
+	printf("\n");
+
+	ret = ioctl(conn->fd, KDBUS_CMD_FREE, &cmd_list.offset);
+	if (ret < 0) {
+		fprintf(stderr, "error free name list: %d (%m)\n", ret);
+		return EXIT_FAILURE;
+	}
+
+	return id;
+}
+
 void add_match_empty(int fd)
 {
 	struct {
diff --git a/test/kdbus-util.h b/test/kdbus-util.h
index acdc34f..be6ccab 100644
--- a/test/kdbus-util.h
+++ b/test/kdbus-util.h
@@ -40,6 +40,7 @@ extern int lib_dump;
 extern int lib_verbose;
 
 int name_list(struct conn *conn, uint64_t flags);
+int64_t lookup_name(struct conn *conn, uint64_t flags, const char *name);
 int name_release(struct conn *conn, const char *name);
 int name_acquire(struct conn *conn, const char *name, uint64_t flags);
 int msg_recv(struct conn *conn);
-- 
1.7.9.5



More information about the systemd-devel mailing list