chiark / gitweb /
bus: catch up with kdbus
[elogind.git] / src / libsystemd-bus / kdbus.h
index bfd299bd266e70cc9e5d6bbde74294cb08ec3b44..838a087853fe9f15638f60520753eb31302d47dc 100644 (file)
@@ -91,8 +91,8 @@ enum {
        _KDBUS_ITEM_NULL,
 
        /* Filled in by userspace */
-        _KDBUS_ITEM_USER_BASE      = 1,
-        KDBUS_ITEM_PAYLOAD_VEC     = 1,/* .data_vec, reference to memory area */
+       _KDBUS_ITEM_USER_BASE   = 1,
+       KDBUS_ITEM_PAYLOAD_VEC  = 1,    /* .data_vec, reference to memory area */
        KDBUS_ITEM_PAYLOAD_OFF,         /* .data_vec, reference to memory area */
        KDBUS_ITEM_PAYLOAD_MEMFD,       /* file descriptor of a special data file */
        KDBUS_ITEM_FDS,                 /* .data_fds of file descriptors */
@@ -101,15 +101,16 @@ enum {
        KDBUS_ITEM_PRIORITY,            /* queue priority for message */
 
        /* Filled in by kernelspace */
-        _KDBUS_ITEM_ATTACH_BASE        = 0x400,
+       _KDBUS_ITEM_ATTACH_BASE = 0x400,
        KDBUS_ITEM_NAMES        = 0x400,/* NUL separated string list with well-known names of source */
+       KDBUS_ITEM_STARTER_NAME,        /* Only used in HELLO for starter connection */
        KDBUS_ITEM_TIMESTAMP,           /* .timestamp */
 
        /* when appended to a message, the following items refer to the sender */
        KDBUS_ITEM_CREDS,               /* .creds */
        KDBUS_ITEM_PID_COMM,            /* optional, in .str */
        KDBUS_ITEM_TID_COMM,            /* optional, in .str */
-       KDBUS_ITEM_EXE,         /* optional, in .str */
+       KDBUS_ITEM_EXE,                 /* optional, in .str */
        KDBUS_ITEM_CMDLINE,             /* optional, in .str (a chain of NUL str) */
        KDBUS_ITEM_CGROUP,              /* optional, in .str */
        KDBUS_ITEM_CAPS,                /* caps data blob, in .data */
@@ -117,7 +118,7 @@ enum {
        KDBUS_ITEM_AUDIT,               /* .audit */
 
        /* Special messages from kernel, consisting of one and only one of these data blocks */
-        _KDBUS_ITEM_KERNEL_BASE        = 0x800,
+       _KDBUS_ITEM_KERNEL_BASE = 0x800,
        KDBUS_ITEM_NAME_ADD     = 0x800,/* .name_change */
        KDBUS_ITEM_NAME_REMOVE,         /* .name_change */
        KDBUS_ITEM_NAME_CHANGE,         /* .name_change */
@@ -172,17 +173,6 @@ enum {
        KDBUS_PAYLOAD_GVARIANT  = 0x4756617269616e74ULL, /* 'GVariant' */
 };
 
-/**
- * struct kdbus_msg
- *
- * set by userspace:
- * dst_id: destination id
- * flags: KDBUS_MSG_FLAGS_*
- * items: data records
- *
- * set by kernel:
- * src_id: who sent the message
- */
 struct kdbus_msg {
        __u64 size;
        __u64 flags;
@@ -217,12 +207,11 @@ enum {
 };
 
 struct kdbus_policy_access {
-       __u64 type;             /* USER, GROUP, WORLD */
-       __u64 bits;             /* RECV, SEND, OWN */
-       __u64 id;               /* uid, gid, 0 */
+       __u64 type;                     /* USER, GROUP, WORLD */
+       __u64 bits;                     /* RECV, SEND, OWN */
+       __u64 id;                       /* uid, gid, 0 */
 };
 
-//FIXME: convert access to access[]
 struct kdbus_policy {
        KDBUS_PART_HEADER;
        union {
@@ -257,6 +246,7 @@ enum {
        KDBUS_ATTACH_AUDIT              =  1 <<  9,
 };
 
+/* KDBUS_CMD_HELLO */
 struct kdbus_cmd_hello {
        __u64 size;
 
@@ -297,6 +287,11 @@ enum {
 enum {
        _KDBUS_MAKE_NULL,
        KDBUS_MAKE_NAME,
+       KDBUS_MAKE_CRED,        /* allow translator services which connect
+                                * to the bus on behalf of somebody else,
+                                * allow specifying the credentials of the
+                                * client to connect on behalf on. Needs
+                                * privileges */
 };
 
 struct kdbus_cmd_bus_make {
@@ -345,41 +340,47 @@ enum {
        KDBUS_NAME_IN_QUEUE                     = 1 << 16,
 };
 
-/* We allow (de)regestration of names of other peers */
+/* KDBUS_CMD_NAME_ACQUIRE */
 struct kdbus_cmd_name {
        __u64 size;
        __u64 flags;
-       __u64 id;
+       __u64 id;               /* we allow (de)registration of names of other peers */
        __u64 conn_flags;
        char name[0];
 };
 
+/* KDBUS_CMD_NAME_LIST */
 enum {
        KDBUS_NAME_LIST_UNIQUE_NAMES            = 1 <<  0,
 };
 
-struct kdbus_cmd_names {
-       __u64 size;
+struct kdbus_cmd_name_list {
        __u64 flags;
-       struct kdbus_cmd_name names[0];
+       __u64 offset;           /* returned offset in the caller's buffer */
 };
 
-enum {
-       _KDBUS_NAME_INFO_ITEM_NULL,
-       KDBUS_NAME_INFO_ITEM_NAME,      /* userspace → kernel */
-       KDBUS_NAME_INFO_ITEM_SECLABEL,  /* kernel → userspace */
-       KDBUS_NAME_INFO_ITEM_AUDIT,     /* kernel → userspace */
+struct kdbus_name_list {
+       __u64 size;
+       struct kdbus_cmd_name names[0];
 };
 
+/* KDBUS_CMD_NAME_INFO */
 struct kdbus_cmd_name_info {
-       __u64 size;                     /* overall size of info */
+       __u64 size;
        __u64 flags;                    /* query flags */
-       __u64 attach_flags;             /* which meta data payload to attach */
-       __u64 id;                       /* either ID, or 0 and _ITEM_NAME follows */
-       struct kdbus_creds creds;
+       __u64 id;                       /* either ID, or 0 and name follows */
+       __u64 offset;                   /* returned offset in the caller's buffer */
+       char name[0];
+};
+
+struct kdbus_name_info {
+       __u64 size;
+       __u64 id;
+       __u64 flags;                    /* connection flags */
        struct kdbus_item items[0];     /* list of item records */
 };
 
+/* KDBUS_CMD_MATCH_ADD/REMOVE */
 enum {
        _KDBUS_MATCH_NULL,
        KDBUS_MATCH_BLOOM,              /* Matches a mask blob against KDBUS_MSG_BLOOM */
@@ -399,22 +400,16 @@ struct kdbus_cmd_match {
        struct kdbus_item items[0];
 };
 
+/* KDBUS_CMD_MONITOR */
+enum {
+       KDBUS_MONITOR_ENABLE            = 1 <<  0,
+};
+
 struct kdbus_cmd_monitor {
        __u64 id;               /* We allow setting the monitor flag of other peers */
-       unsigned int enable;    /* A boolean to enable/disable monitoring */
-       __u32 __pad;
+       __u64 flags;
 };
 
-/* FD states:
- * control nodes: unset
- *   bus owner  (via KDBUS_CMD_BUS_MAKE)
- *   ns owner   (via KDBUS_CMD_NS_MAKE)
- *
- * ep nodes: unset
- *   connected  (via KDBUS_CMD_HELLO)
- *   starter    (via KDBUS_CMD_HELLO with KDBUS_CMD_HELLO_STARTER)
- *   ep owner   (via KDBUS_CMD_EP_MAKE)
- */
 enum {
        /* kdbus control node commands: require unset state */
        KDBUS_CMD_BUS_MAKE =            _IOW(KDBUS_IOC_MAGIC, 0x00, struct kdbus_cmd_bus_make),
@@ -427,12 +422,12 @@ enum {
        /* kdbus ep node commands: require connected state */
        KDBUS_CMD_MSG_SEND =            _IOW(KDBUS_IOC_MAGIC, 0x40, struct kdbus_msg),
        KDBUS_CMD_MSG_RECV =            _IOR(KDBUS_IOC_MAGIC, 0x41, __u64 *),
-       KDBUS_CMD_MSG_RELEASE =         _IOW(KDBUS_IOC_MAGIC, 0x42, __u64 *),
+       KDBUS_CMD_FREE =                _IOW(KDBUS_IOC_MAGIC, 0x42, __u64 *),
 
        KDBUS_CMD_NAME_ACQUIRE =        _IOWR(KDBUS_IOC_MAGIC, 0x50, struct kdbus_cmd_name),
        KDBUS_CMD_NAME_RELEASE =        _IOW(KDBUS_IOC_MAGIC, 0x51, struct kdbus_cmd_name),
-       KDBUS_CMD_NAME_LIST =           _IOWR(KDBUS_IOC_MAGIC, 0x52, struct kdbus_cmd_names),
-       KDBUS_CMD_NAME_QUERY =          _IOWR(KDBUS_IOC_MAGIC, 0x53, struct kdbus_cmd_name_info),
+       KDBUS_CMD_NAME_LIST =           _IOWR(KDBUS_IOC_MAGIC, 0x52, struct kdbus_cmd_name_list),
+       KDBUS_CMD_NAME_INFO =           _IOWR(KDBUS_IOC_MAGIC, 0x53, struct kdbus_cmd_name_info),
 
        KDBUS_CMD_MATCH_ADD =           _IOW(KDBUS_IOC_MAGIC, 0x60, struct kdbus_cmd_match),
        KDBUS_CMD_MATCH_REMOVE =        _IOW(KDBUS_IOC_MAGIC, 0x61, struct kdbus_cmd_match),