[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