chiark / gitweb /
bus: catch up with kernel changes
[elogind.git] / src / libsystemd-bus / kdbus.h
index 4310ef3ae9767d7c13741c3c6e5f1d4b323ef780..305ded720ed677e84371a7f7c52403cee9f202f6 100644 (file)
@@ -48,34 +48,43 @@ struct kdbus_creds {
        __u64 starttime;
 };
 
+struct kdbus_audit {
+       __u64 sessionid;
+       __u64 loginuid;
+};
+
+struct kdbus_timestamp {
+       __u64 monotonic_ns;
+       __u64 realtime_ns;
+};
+
 #define KDBUS_SRC_ID_KERNEL            (0)
 #define KDBUS_DST_ID_WELL_KNOWN_NAME   (0)
 #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 */
        KDBUS_MSG_PAYLOAD,              /* .data */
-       KDBUS_MSG_PAYLOAD_VEC,          /* .data_vec, converted into _PAYLOAD at delivery */
-       KDBUS_MSG_MMAP,                 /* .data_vec */
-       KDBUS_MSG_MMAP_DONATE,          /* .data_vec, unmap the memory from the sender */
+       KDBUS_MSG_PAYLOAD_VEC,          /* .data_vec */
        KDBUS_MSG_UNIX_FDS,             /* .data_fds of file descriptors */
-       KDBUS_MSG_BLOOM,                /* for broadcasts, carries bloom filter blob */
-       KDBUS_MSG_DST_NAME,             /* destination's well-known name */
+       KDBUS_MSG_BLOOM,                /* for broadcasts, carries bloom filter blob in .data */
+       KDBUS_MSG_DST_NAME,             /* destination's well-known name, in .str */
 
        /* Filled in by kernelspace */
        KDBUS_MSG_SRC_NAMES     = 0x200,/* NUL separated string list with well-known names of source */
-       KDBUS_MSG_TIMESTAMP,            /* .ts_ns of CLOCK_MONOTONIC */
+       KDBUS_MSG_TIMESTAMP,            /* .timestamp */
        KDBUS_MSG_SRC_CREDS,            /* .creds */
-       KDBUS_MSG_SRC_COMM,             /* optional */
-       KDBUS_MSG_SRC_EXE,              /* optional */
-       KDBUS_MSG_SRC_CMDLINE,          /* optional */
-       KDBUS_MSG_SRC_CGROUP,           /* optional, specified which one */
-       KDBUS_MSG_SRC_CAPS,             /* caps data blob */
-       KDBUS_MSG_SRC_SECLABEL,         /* NUL terminated string */
-       KDBUS_MSG_SRC_AUDIT,            /* array of two uint64_t of audit loginuid + sessiond */
+       KDBUS_MSG_SRC_PID_COMM,         /* optional, in .str */
+       KDBUS_MSG_SRC_TID_COMM,         /* optional, in .str */
+       KDBUS_MSG_SRC_EXE,              /* optional, in .str */
+       KDBUS_MSG_SRC_CMDLINE,          /* optional, in .str (a chain of NUL str) */
+       KDBUS_MSG_SRC_CGROUP,           /* optional, in .str */
+       KDBUS_MSG_SRC_CAPS,             /* caps data blob, in .data */
+       KDBUS_MSG_SRC_SECLABEL,         /* NUL terminated string, in .str */
+       KDBUS_MSG_SRC_AUDIT,            /* .audit */
 
        /* Special messages from kernel, consisting of one and only one of these data blocks */
        KDBUS_MSG_NAME_ADD      = 0x400,/* .name_change */
@@ -94,27 +103,29 @@ 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 {
                /* inline data */
                __u8 data[0];
-               __u32 data_u32[0];
-               __u64 data_u64[0];
+               __u32 data32[0];
+               __u64 data64[0];
+               char str[0];
 
                /* data vector */
                struct kdbus_vec vec;
 
                /* specific fields */
                int fds[0];                             /* int array of file descriptors */
-               __u64 ts_ns;                            /* timestamp in nanoseconds */
                struct kdbus_creds creds;
+               struct kdbus_audit audit;
+               struct kdbus_timestamp timestamp;
                struct kdbus_manager_msg_name_change name_change;
                struct kdbus_manager_msg_id_change id_change;
        };
@@ -137,8 +148,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
@@ -154,7 +164,7 @@ struct kdbus_msg {
                __u64 cookie_reply;     /* cookie we reply to */
                __u64 timeout_ns;       /* timespan to wait for reply */
        };
-       struct kdbus_msg_data data[0];
+       struct kdbus_msg_item items[0];
 };
 
 enum {
@@ -189,24 +199,37 @@ struct kdbus_policy {
 
 struct kdbus_cmd_policy {
        __u64 size;
-       __u8 buffer[0]; /* a series of KDBUS_POLICY_NAME plus one or more KDBUS_POLICY_ACCESS each. */
+       __u8 buffer[0]; /* a series of KDBUS_POLICY_NAME plus one or
+                        * more KDBUS_POLICY_ACCESS each. */
 };
 
 enum {
-       KDBUS_CMD_HELLO_STARTER         =  1,
-       KDBUS_CMD_HELLO_ACCEPT_FD       =  2,
-       KDBUS_CMD_HELLO_ACCEPT_MMAP     =  4,
+       KDBUS_CMD_HELLO_STARTER         =  1 <<  0,
+       KDBUS_CMD_HELLO_ACCEPT_FD       =  1 <<  1,
+       KDBUS_CMD_HELLO_ACCEPT_MMAP     =  1 <<  2,
+
+       /* The following have an effect on directed messages only --
+        * not for broadcasts */
+       KDBUS_CMD_HELLO_ATTACH_COMM     =  1 << 10,
+       KDBUS_CMD_HELLO_ATTACH_EXE      =  1 << 11,
+       KDBUS_CMD_HELLO_ATTACH_CMDLINE  =  1 << 12,
+       KDBUS_CMD_HELLO_ATTACH_CGROUP   =  1 << 13,
+       KDBUS_CMD_HELLO_ATTACH_CAPS     =  1 << 14,
+       KDBUS_CMD_HELLO_ATTACH_SECLABEL =  1 << 15,
+       KDBUS_CMD_HELLO_ATTACH_AUDIT    =  1 << 16,
 };
 
+/* Flags for kdbus_cmd_bus_make, kdbus_cmd_ep_make and
+ * kdbus_cmd_ns_make */
 enum {
-       KDBUS_CMD_FNAME_ACCESS_GROUP    =  1,
-       KDBUS_CMD_FNAME_ACCESS_WORLD    =  2,
-       KDBUS_CMD_FNAME_POLICY_OPEN     =  4,
+       KDBUS_ACCESS_GROUP      =  1,
+       KDBUS_ACCESS_WORLD      =  2,
+       KDBUS_POLICY_OPEN       =  4,
 };
 
 struct kdbus_cmd_hello {
        /* userspace → kernel, kernel → userspace */
-       __u64 kernel_flags;     /* userspace specifies its
+       __u64 conn_flags;       /* userspace specifies its
                                 * capabilities and more, kernel
                                 * returns its capabilites and
                                 * more. Kernel might refuse client's
@@ -231,19 +254,47 @@ struct kdbus_cmd_hello {
                                 * to do negotiation of features of
                                 * the payload that is transfreted. */
        __u64 id;               /* peer id */
+       __u64 bloom_size;       /* The bloom filter size chosen by the
+                                * bus owner */
 };
 
-struct kdbus_cmd_fname {
+struct kdbus_cmd_bus_make {
        __u64 size;
-       __u64 kernel_flags;     /* userspace → kernel, kernel → userspace
-                                * When creating a bus/ns/ep feature
-                                * kernel negotiation done the same
-                                * way as for KDBUS_CMD_BUS_MAKE. */
-       __u64 user_flags;       /* userspace → kernel
+       __u64 flags;            /* userspace → kernel, kernel → userspace
+                                * When creating a bus feature
+                                * kernel negotiation. */
+       __u64 bus_flags;        /* userspace → kernel
                                 * When a bus is created this value is
                                 * 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];
+};
+
+struct kdbus_cmd_ep_make {
+       __u64 size;
+       __u64 flags;            /* userspace → kernel, kernel → userspace
+                                * When creating an entry point
+                                * feature kernel negotiation done the
+                                * same way as for
+                                * KDBUS_CMD_BUS_MAKE. Unused for
+                                * now. */
+       char name[0];
+};
+
+struct kdbus_cmd_ns_make {
+       __u64 size;
+       __u64 flags;            /* userspace → kernel, kernel → userspace
+                                * When creating an entry point
+                                * feature kernel negotiation done the
+                                * same way as for
+                                * KDBUS_CMD_BUS_MAKE. Unused for
+                                * now. */
        char name[0];
 };
 
@@ -252,7 +303,6 @@ enum {
        KDBUS_CMD_NAME_REPLACE_EXISTING         =  1,
        KDBUS_CMD_NAME_QUEUE                    =  2,
        KDBUS_CMD_NAME_ALLOW_REPLACEMENT        =  4,
-       KDBUS_CMD_NAME_STEAL_MESSAGES           =  8,
 
        /* kernel → userspace */
        KDBUS_CMD_NAME_IN_QUEUE = 0x200,
@@ -260,8 +310,9 @@ enum {
 
 struct kdbus_cmd_name {
        __u64 size;
-       __u64 flags;
+       __u64 name_flags;
        __u64 id;               /* We allow registration/deregestration of names of other peers */
+       __u64 conn_flags;
        char name[0];
 };
 
@@ -279,7 +330,7 @@ enum {
 struct kdbus_cmd_name_info_item {
        __u64 size;
        __u64 type;
-       __u8 data[0];
+       __u8 items[0];
 };
 
 struct kdbus_cmd_name_info {
@@ -304,7 +355,11 @@ enum {
 struct kdbus_cmd_match_item {
        __u64 size;
        __u64 type;
-       __u8 data[0];
+       union {
+               __u64 id;
+               __u8 data[0];
+               char str[0];
+       };
 };
 
 struct kdbus_cmd_match {
@@ -332,14 +387,14 @@ struct kdbus_cmd_monitor {
  */
 enum kdbus_cmd {
        /* kdbus control node commands: require unset state */
-       KDBUS_CMD_BUS_MAKE =            _IOWR(KDBUS_IOC_MAGIC, 0x00, struct kdbus_cmd_fname),
-       KDBUS_CMD_NS_MAKE =             _IOWR(KDBUS_IOC_MAGIC, 0x10, struct kdbus_cmd_fname),
+       KDBUS_CMD_BUS_MAKE =            _IOWR(KDBUS_IOC_MAGIC, 0x00, struct kdbus_cmd_bus_make),
+       KDBUS_CMD_NS_MAKE =             _IOWR(KDBUS_IOC_MAGIC, 0x10, struct kdbus_cmd_ns_make),
 
        /* kdbus control node commands: require bus owner state */
        KDBUS_CMD_BUS_POLICY_SET =      _IOWR(KDBUS_IOC_MAGIC, 0x20, struct kdbus_cmd_policy),
 
        /* kdbus ep node commands: require unset state */
-       KDBUS_CMD_EP_MAKE =             _IOWR(KDBUS_IOC_MAGIC, 0x30, struct kdbus_cmd_fname),
+       KDBUS_CMD_EP_MAKE =             _IOWR(KDBUS_IOC_MAGIC, 0x30, struct kdbus_cmd_ep_make),
        KDBUS_CMD_HELLO =               _IOWR(KDBUS_IOC_MAGIC, 0x31, struct kdbus_cmd_hello),
 
        /* kdbus ep node commands: require connected state */