chiark / gitweb /
bus: catch up with kernel changes
[elogind.git] / src / libsystemd-bus / kdbus.h
index aac7b8435273acfed6438f3fe96bb8927afeb8c3..6d934547023c25f52a341efdce30499fe70758ec 100644 (file)
@@ -2,6 +2,8 @@
  * Copyright (C) 2013 Kay Sievers
  * Copyright (C) 2013 Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  * Copyright (C) 2013 Linux Foundation
+ * Copyright (C) 2013 Lennart Poettering
+ * Copyright (C) 2013 Daniel Mack <daniel@zonque.org>
  *
  * kdbus is free software; you can redistribute it and/or modify it under
  * the terms of the GNU Lesser General Public License as published by the
@@ -63,7 +65,7 @@ struct kdbus_timestamp {
 #define KDBUS_MATCH_SRC_ID_ANY         (~0ULL)
 #define KDBUS_DST_ID_BROADCAST         (~0ULL)
 
-/* Message Data Types */
+/* Message Item Types */
 enum {
        /* Filled in by userspace */
        KDBUS_MSG_NULL,                 /* empty record */
@@ -92,7 +94,6 @@ enum {
        KDBUS_MSG_NAME_CHANGE,          /* .name_change */
        KDBUS_MSG_ID_ADD,               /* .id_change */
        KDBUS_MSG_ID_REMOVE,            /* .id_change */
-       KDBUS_MSG_ID_CHANGE,            /* .id_change */
        KDBUS_MSG_REPLY_TIMEOUT,        /* empty, but .reply_cookie in .kdbus_msg is filled in */
        KDBUS_MSG_REPLY_DEAD,           /* dito */
 };
@@ -103,12 +104,12 @@ struct kdbus_vec {
 };
 
 /**
- * struct  kdbus_msg_data - chain of data blocks
+ * struct  kdbus_msg_item - chain of data blocks
  *
  * size: overall data record size
- * type: kdbus_msg_data_type of data
+ * type: kdbus_msg_item type of data
  */
-struct kdbus_msg_data {
+struct kdbus_msg_item {
        __u64 size;
        __u64 type;
        union {
@@ -148,8 +149,7 @@ enum {
  * set by userspace:
  * dst_id: destination id
  * flags: KDBUS_MSG_FLAGS_*
- * data_size: overall message size
- * data: data records
+ * items: data records
  *
  * set by kernel:
  * src_id: who sent the message
@@ -165,7 +165,7 @@ struct kdbus_msg {
                __u64 cookie_reply;     /* cookie we reply to */
                __u64 timeout_ns;       /* timespan to wait for reply */
        };
-       struct kdbus_msg_data items[0];
+       struct kdbus_msg_item items[0];
 };
 
 enum {
@@ -228,7 +228,35 @@ enum {
        KDBUS_POLICY_OPEN       =  4,
 };
 
+/* Items to append to kdbus_cmd_bus_make, kdbus_cmd_ep_make and
+ * kdbus_cmd_ns_make */
+
+enum {
+       KDBUS_CMD_MAKE_NONE,
+       KDBUS_CMD_MAKE_NAME,
+       KDBUS_CMD_MAKE_CGROUP,  /* the cgroup hierarchy ID for which to attach
+                                * cgroup membership paths * to messages. */
+       KDBUS_CMD_MAKE_CRED,    /* allow translator services which connect
+                                * to the bus on behalf of somebody else,
+                                * allow specifiying the credentials of the
+                                * client to connect on behalf on. Needs
+                                * privileges */
+
+};
+
+struct kdbus_cmd_make_item {
+       __u64 size;
+       __u64 type;
+       union {
+               __u8 data[0];
+               __u64 data64[0];
+               char str[0];
+       };
+};
+
 struct kdbus_cmd_hello {
+       __u64 size;
+
        /* userspace → kernel, kernel → userspace */
        __u64 conn_flags;       /* userspace specifies its
                                 * capabilities and more, kernel
@@ -237,26 +265,16 @@ struct kdbus_cmd_hello {
                                 * capabilities by returning an error
                                 * from KDBUS_CMD_HELLO */
 
-       /* userspace → kernel */
-       __u64 pid;              /* To allow translator services which
-                                * connect to the bus on behalf of
-                                * somebody else, allow specifiying
-                                * the PID of the client to connect on
-                                * behalf on. Normal clients should
-                                * pass this as 0 (i.e. to do things
-                                * under their own PID). Priviliged
-                                * clients can pass != 0, to operate
-                                * on behalf of somebody else. */
-
        /* kernel → userspace */
        __u64 bus_flags;        /* this is .flags copied verbatim from
                                 * from original KDBUS_CMD_BUS_MAKE
                                 * ioctl. It's intended to be useful
                                 * to do negotiation of features of
                                 * the payload that is transfreted. */
-       __u64 id;               /* peer id */
+       __u64 id;               /* id assigned to this connection */
        __u64 bloom_size;       /* The bloom filter size chosen by the
                                 * bus owner */
+       struct kdbus_cmd_make_item items[0];
 };
 
 struct kdbus_cmd_bus_make {
@@ -269,12 +287,9 @@ struct kdbus_cmd_bus_make {
                                 * copied verbatim into the bus
                                 * structure and returned from
                                 * KDBUS_CMD_HELLO, later */
-       __u64 cgroup_id;        /* the cgroup hierarchy ID for which
-                                * to attach cgroup membership paths
-                                * to messages. 0 if no cgroup data
-                                * shall be attached. */
-       __u64 bloom_size;       /* Size of the bloom filter for this bus. */
-       char name[0];
+       __u64 bloom_size;       /* size of the bloom filter for this bus */
+       struct kdbus_cmd_make_item items[0];
+
 };
 
 struct kdbus_cmd_ep_make {
@@ -285,7 +300,7 @@ struct kdbus_cmd_ep_make {
                                 * same way as for
                                 * KDBUS_CMD_BUS_MAKE. Unused for
                                 * now. */
-       char name[0];
+       struct kdbus_cmd_make_item items[0];
 };
 
 struct kdbus_cmd_ns_make {
@@ -296,7 +311,7 @@ struct kdbus_cmd_ns_make {
                                 * same way as for
                                 * KDBUS_CMD_BUS_MAKE. Unused for
                                 * now. */
-       char name[0];
+       struct kdbus_cmd_make_item items[0];
 };
 
 enum {
@@ -323,15 +338,15 @@ struct kdbus_cmd_names {
 };
 
 enum {
-       KDBUS_CMD_NAME_INFO_ITEM_NAME,
-       KDBUS_CMD_NAME_INFO_ITEM_SECLABEL,
-       KDBUS_CMD_NAME_INFO_ITEM_AUDIT,
+       KDBUS_CMD_NAME_INFO_ITEM_NAME,          /* userspace → kernel */
+       KDBUS_CMD_NAME_INFO_ITEM_SECLABEL,      /* kernel → userspace */
+       KDBUS_CMD_NAME_INFO_ITEM_AUDIT,         /* kernel → userspace */
 };
 
 struct kdbus_cmd_name_info_item {
        __u64 size;
        __u64 type;
-       __u8 items[0];
+       __u8 data[0];
 };
 
 struct kdbus_cmd_name_info {
@@ -339,7 +354,7 @@ struct kdbus_cmd_name_info {
        __u64 flags;
        __u64 id;                       /* either ID, or 0 and _ITEM_NAME follows */
        struct kdbus_creds creds;
-       struct kdbus_cmd_name_info_item item[0]; /* list of item records */
+       struct kdbus_cmd_name_info_item items[0]; /* list of item records */
 };
 
 enum {
@@ -350,7 +365,6 @@ enum {
        KDBUS_CMD_MATCH_NAME_CHANGE,    /* Matches a name string against KDBUS_MSG_NAME_CHANGE */
        KDBUS_CMD_MATCH_ID_ADD,         /* Matches an ID against KDBUS_MSG_ID_ADD */
        KDBUS_CMD_MATCH_ID_REMOVE,      /* Matches an ID against KDBUS_MSG_ID_REMOVE */
-       KDBUS_CMD_MATCH_ID_CHANGE,      /* Matches an ID against KDBUS_MSG_ID_CHANGE */
 };
 
 struct kdbus_cmd_match_item {