chiark / gitweb /
bus: update kdbus.h
[elogind.git] / src / libsystemd-bus / kdbus.h
index d89f8c088a214d4630f776ba4c9634560c1e32d0..d53c269573d1e6bb61469ed6f7867c8ab7281a8a 100644 (file)
@@ -192,17 +192,48 @@ struct kdbus_policy {
        };
 };
 
-/* item types to chain data in lists of items */
+/**
+ * enum kdbus_item_type - item types to chain data in a list
+ * @KDBUS_ITEM_PAYLOAD_VEC:    Vector to data
+ * @KDBUS_ITEM_PAYLOAD_OFF:    Data at returned offset in the pool
+ * @KDBUS_ITEM_PAYLOAD_MEMFD:  Data as sealed memfd
+ * @KDBUS_ITEM_FDS:            Attached file descriptors
+ * @KDBUS_ITEM_BLOOM:          For broadcasts, carries bloom filter
+ * @KDBUS_ITEM_DST_NAME:       Destination's well-known name
+ * @KDBUS_ITEM_PRIORITY:       Queue priority for message
+ * @KDBUS_ITEM_MAKE_NAME:      Name of namespace, bus, endpoint
+ * @KDBUS_ITEM_POLICY_NAME:    Policy in struct kdbus_policy
+ * @KDBUS_ITEM_POLICY_ACCESS:  Policy in struct kdbus_policy
+ * @KDBUS_ITEM_NAME:           Well-know name with flags
+ * @KDBUS_ITEM_STARTER_NAME:   Well-known name for the starter
+ * @KDBUS_ITEM_TIMESTAMP:      Timestamp
+ * @KDBUS_ITEM_CREDS:          Process credential
+ * @KDBUS_ITEM_PID_COMM:       Process ID "comm" identifier
+ * @KDBUS_ITEM_TID_COMM:       Thread ID "comm" identifier
+ * @KDBUS_ITEM_EXE:            The path of the executable
+ * @KDBUS_ITEM_CMDLINE:                The process command line
+ * @KDBUS_ITEM_CGROUP:         The croup membership
+ * @KDBUS_ITEM_CAPS:           The process capabilities
+ * @KDBUS_ITEM_SECLABEL:       The security label
+ * @KDBUS_ITEM_AUDIT:          The audit IDs
+ * @KDBUS_ITEM_NAME_ADD:       Notify in struct kdbus_notify_name_change
+ * @KDBUS_ITEM_NAME_REMOVE:    Notify in struct kdbus_notify_name_change
+ * @KDBUS_ITEM_NAME_CHANGE:    Notify in struct kdbus_notify_name_change
+ * @KDBUS_ITEM_ID_ADD:         Notify in struct kdbus_notify_id_change
+ * @KDBUS_ITEM_ID_REMOVE:      Notify in struct kdbus_notify_id_change
+ * @KDBUS_ITEM_REPLY_TIMEOUT:  Timeout has been reached
+ * @KDBUS_ITEM_REPLY_DEAD:     Destination died
+ */
 enum kdbus_item_type {
        _KDBUS_ITEM_NULL,
        _KDBUS_ITEM_USER_BASE,
-       KDBUS_ITEM_PAYLOAD_VEC  = _KDBUS_ITEM_USER_BASE, /* .data_vec */
-       KDBUS_ITEM_PAYLOAD_OFF,         /* data at returned offset in the pool */
-       KDBUS_ITEM_PAYLOAD_MEMFD,       /* data as sealed memfd */
-       KDBUS_ITEM_FDS,                 /* attached file descriptors */
-       KDBUS_ITEM_BLOOM,               /* for broadcasts, carries bloom filter */
-       KDBUS_ITEM_DST_NAME,            /* destination's well-known name */
-       KDBUS_ITEM_PRIORITY,            /* queue priority for message */
+       KDBUS_ITEM_PAYLOAD_VEC  = _KDBUS_ITEM_USER_BASE,
+       KDBUS_ITEM_PAYLOAD_OFF,
+       KDBUS_ITEM_PAYLOAD_MEMFD,
+       KDBUS_ITEM_FDS,
+       KDBUS_ITEM_BLOOM,
+       KDBUS_ITEM_DST_NAME,
+       KDBUS_ITEM_PRIORITY,
        KDBUS_ITEM_MAKE_NAME,
 
        _KDBUS_ITEM_POLICY_BASE = 0x400,
@@ -223,15 +254,14 @@ enum kdbus_item_type {
        KDBUS_ITEM_SECLABEL,
        KDBUS_ITEM_AUDIT,
 
-       /* Special messages from kernel */
        _KDBUS_ITEM_KERNEL_BASE = 0x800,
        KDBUS_ITEM_NAME_ADD     = _KDBUS_ITEM_KERNEL_BASE,
-       KDBUS_ITEM_NAME_REMOVE,         /* .name_change */
-       KDBUS_ITEM_NAME_CHANGE,         /* .name_change */
-       KDBUS_ITEM_ID_ADD,              /* .id_change */
-       KDBUS_ITEM_ID_REMOVE,           /* .id_change */
-       KDBUS_ITEM_REPLY_TIMEOUT,       /* empty, reply_cookie is filled in */
-       KDBUS_ITEM_REPLY_DEAD,          /* dito */
+       KDBUS_ITEM_NAME_REMOVE,
+       KDBUS_ITEM_NAME_CHANGE,
+       KDBUS_ITEM_ID_ADD,
+       KDBUS_ITEM_ID_REMOVE,
+       KDBUS_ITEM_REPLY_TIMEOUT,
+       KDBUS_ITEM_REPLY_DEAD,
 };
 
 /**
@@ -296,13 +326,11 @@ enum kdbus_msg_flags {
 /**
  * enum kdbus_payload_type - type of payload carried by message
  * @KDBUS_PAYLOAD_KERNEL:      Kernel-generated simple message
- * @KDBUS_PAYLOAD_DBUS1:       Legacy D-Bus version 1 marshalling
- * @KDBUS_PAYLOAD_GVARIANT:    GVariant marshalling
+ * @KDBUS_PAYLOAD_DBUS:                D-Bus marshalling
  */
 enum kdbus_payload_type {
        KDBUS_PAYLOAD_KERNEL,
-       KDBUS_PAYLOAD_DBUS1     = 0x4442757356657231ULL, /* 'DBusVer1' */
-       KDBUS_PAYLOAD_GVARIANT  = 0x4756617269616e74ULL, /* 'GVariant' */
+       KDBUS_PAYLOAD_DBUS      = 0x4442757344427573ULL, /* 'DBusDBus' */
 };
 
 /**
@@ -336,7 +364,7 @@ struct kdbus_msg {
 /**
  * enum kdbus_policy_access_type - permissions of a policy record
  * @KDBUS_POLICY_ACCESS_USER:  Grant access to a uid
- * @KDBUS_POLICY_ACCESS_GROUP: Grant acces to gid
+ * @KDBUS_POLICY_ACCESS_GROUP: Grant access to gid
  * @KDBUS_POLICY_ACCESS_WORLD: World-accessible
  */
 enum kdbus_policy_access_type {
@@ -363,7 +391,7 @@ enum kdbus_policy_type {
  * @size:              The total size of the structure
  * @policies:          The policies to upload
  *
- * A KDBUS_POLICY_NAME must always preceed a KDBUS_POLICY_ACCESS entry.
+ * A KDBUS_POLICY_NAME must always preceeds a KDBUS_POLICY_ACCESS entry.
  * A new KDBUS_POLICY_NAME can be added after KDBUS_POLICY_ACCESS for
  * chaining multiple policies together.
  */
@@ -415,7 +443,7 @@ enum kdbus_attach_flags {
  * @size:              The total size of the structure
  * @conn_flags:                Connection flags (KDBUS_HELLO_*). The kernel will
  *                     return its capabilities in that field.
- * @attach_flags:      Mask of metdata to attach to each message sent
+ * @attach_flags:      Mask of metadata to attach to each message sent
  *                     (KDBUS_ATTACH_*)
  * @bus_flags:         The flags field copied verbatim from the original
  *                     KDBUS_CMD_BUS_MAKE ioctl. It's intended to be useful
@@ -433,18 +461,13 @@ enum kdbus_attach_flags {
  */
 struct kdbus_cmd_hello {
        __u64 size;
-
-       /* userspace → kernel, kernel → userspace */
        __u64 conn_flags;
        __u64 attach_flags;
-
-       /* kernel → userspace */
        __u64 bus_flags;
        __u64 id;
        __u64 bloom_size;
        __u64 pool_size;
        __u8 id128[16];
-
        struct kdbus_item items[0];
 };
 
@@ -462,8 +485,7 @@ enum kdbus_make_flags {
  * @bloom_size:                Size of the bloom filter for this bus
  * @items:             Items describing details such as the name of the bus
  *
- * This structure is used with the KDBUS_CMD_BUS_MAKE ioctl. Refer to the
- * documentation for more information.
+ * This structure is used with the KDBUS_CMD_BUS_MAKE ioctl.
  */
 struct kdbus_cmd_bus_make {
        __u64 size;
@@ -479,8 +501,7 @@ struct kdbus_cmd_bus_make {
  * @items:             Items describing details such as the
  *                     name of the endpoint
  *
- * This structure is used with the KDBUS_CMD_EP_MAKE ioctl. Refer to the
- * documentation for more information.
+ * This structure is used with the KDBUS_CMD_EP_MAKE ioctl.
  */
 struct kdbus_cmd_ep_make {
        __u64 size;
@@ -495,8 +516,7 @@ struct kdbus_cmd_ep_make {
  * @items:             Items describing details such as the
  *                     name of the namespace
  *
- * This structure is used with the KDBUS_CMD_NS_MAKE ioctl. Refer to the
- * documentation for more information.
+ * This structure is used with the KDBUS_CMD_NS_MAKE ioctl.
  */
 struct kdbus_cmd_ns_make {
        __u64 size;
@@ -504,6 +524,13 @@ struct kdbus_cmd_ns_make {
        struct kdbus_item items[0];
 };
 
+/**
+ * enum kdbus_name_flags - properties of a well-known name
+ * @KDBUS_NAME_REPLACE_EXISTING:       Try to replace name of other connections
+ * @KDBUS_NAME_QUEUE:                  Name should be queued if busy
+ * @KDBUS_NAME_ALLOW_REPLACEMENT:      Allow the replacement of the name
+ * @KDBUS_NAME_IN_QUEUE:               Name is queued
+ */
 enum kdbus_name_flags {
        /* userspace → kernel */
        KDBUS_NAME_REPLACE_EXISTING             = 1 <<  0,
@@ -518,13 +545,12 @@ enum kdbus_name_flags {
  * struct kdbus_cmd_name - struct to describe a well-known name
  * @size:              The total size of the struct
  * @flags:             Flags for a name entry (KDBUS_NAME_*)
- * @id:                        Priviledged users may use this field to (de)register
+ * @id:                        Privileged users may use this field to (de)register
  *                     names on behalf of other peers.
  * @conn_flags:                The flags of the owning connection (KDBUS_HELLO_*)
  * @name:              The well-known name
  *
  * This structure is used with the KDBUS_CMD_NAME_ACQUIRE ioctl.
- * Refer to the documentation for more information.
  */
 struct kdbus_cmd_name {
        __u64 size;
@@ -534,6 +560,13 @@ struct kdbus_cmd_name {
        char name[0];
 };
 
+/**
+ * enum kdbus_name_list_flags - what to include into the returned list
+ * @KDBUS_NAME_LIST_UNIQUE:    All active connections
+ * @KDBUS_NAME_LIST_NAMES:     All known well-known names
+ * @KDBUS_NAME_LIST_STARTERS:  All connections which are starter connections
+ * @KDBUS_NAME_LIST_QUEUED:    All queued-up names
+ */
 enum kdbus_name_list_flags {
        KDBUS_NAME_LIST_UNIQUE          = 1 <<  0,
        KDBUS_NAME_LIST_NAMES           = 1 <<  1,
@@ -644,8 +677,7 @@ enum kdbus_match_type {
  * @items:             A list of items for additional information
  *
  * This structure is used with the KDBUS_CMD_ADD_MATCH and
- * KDBUS_CMD_REMOVE_MATCH ioctl. Refer to the documentation for more
- * information.
+ * KDBUS_CMD_REMOVE_MATCH ioctl.
  */
 struct kdbus_cmd_match {
        __u64 size;
@@ -655,18 +687,21 @@ struct kdbus_cmd_match {
        struct kdbus_item items[0];
 };
 
+/**
+ * enum kdbus_monitor_flags - flags for monitoring
+ * @KDBUS_MONITOR_ENABLE:      Enable monitoring
+ */
 enum kdbus_monitor_flags {
        KDBUS_MONITOR_ENABLE            = 1 <<  0,
 };
 
 /**
  * struct kdbus_cmd_monitor - struct to enable or disable eavesdropping
- * @id:                        Priviledged users may enable or disable the monitor feature
+ * @id:                        Privileged users may enable or disable the monitor feature
  *                     on behalf of other peers
  * @flags:             Use KDBUS_MONITOR_ENABLE to enable eavesdropping
  *
  * This structure is used with the KDBUS_CMD_MONITOR ioctl.
- * Refer to the documentation for more information.
  */
 struct kdbus_cmd_monitor {
        __u64 id;
@@ -705,7 +740,7 @@ struct kdbus_cmd_monitor {
  * @KDBUS_CMD_CONN_INFO:       Retrieve credentials and properties of the
  *                             initial creator of the connection. The data was
  *                             stored at registration time and does not
- *                             neccessarily represent the connected process or
+ *                             necessarily represent the connected process or
  *                             the actual state of the process.
  * @KDBUS_CMD_MATCH_ADD:       Install a match which broadcast messages should
  *                             be delivered to the connection.
@@ -776,6 +811,8 @@ enum kdbus_ioctl_type {
 /*
  * errno - api error codes
  * @E2BIG:             A message contains too many records or items.
+ * @EADDRINUSE:                A well-known bus name is already taken by another
+ *                     connection.
  * @EADDRNOTAVAIL:     A message flagged not to activate a service, addressed
  *                     a service which is not currently running.
  * @EAGAIN:            No messages are queued at the moment.
@@ -783,8 +820,6 @@ enum kdbus_ioctl_type {
  * @EBADFD:            A bus connection is in a corrupted state.
  * @EBADMSG:           Passed data contains a combination of conflicting or
  *                     inconsistent types.
- * @EBUSY:             A well-known bus name is already taken by another
- *                     connection.
  * @ECOMM:             A peer does not accept the file descriptors addressed
  *                     to it.
  * @EDESTADDRREQ:      The well-known bus name is required but missing.
@@ -813,7 +848,7 @@ enum kdbus_ioctl_type {
  * @ENOSYS:            The requested functionality is not available.
  * @ENOTCONN:          The addressed peer is not an active connection.
  * @ENOTSUPP:          The feature negotiation failed, a not supported feature
- *                     was requested.
+ *                     was requested, or an unknown item type was received.
  * @ENOTTY:            An unknown ioctl command was received.
  * @ENOTUNIQ:          A specific data type was addressed to a broadcast
  *                     address, but only direct addresses support this kind of