chiark / gitweb /
bus: sync with kdbus
[elogind.git] / src / libsystemd-bus / kdbus.h
index 5d5467a32bcae8b10d52f039a8735d1c2d73e841..e9ffecd54b2db8d003c4fe5315a48e67a4d9463a 100644 (file)
  * struct kdbus_notify_name_change - name registry change message
  * @old_id:            Former owner of a name
  * @new_id:            New owner of a name
  * struct kdbus_notify_name_change - name registry change message
  * @old_id:            Former owner of a name
  * @new_id:            New owner of a name
- * @flags:             flags from KDBUS_NAME_*
+ * @old_flags:         flags from KDBUS_NAME_* the name entry used to have
+ * @new_flags:         flags from KDBUS_NAME_* the name entry has now
  * @name:              Well-known name
  *
  * @name:              Well-known name
  *
- * Sent from kernel to userspace when the owner or starter of
+ * Sent from kernel to userspace when the owner or activator of
  * a well-known name changes.
  *
  * Attached to:
  * a well-known name changes.
  *
  * Attached to:
@@ -44,7 +45,8 @@
 struct kdbus_notify_name_change {
        __u64 old_id;
        __u64 new_id;
 struct kdbus_notify_name_change {
        __u64 old_id;
        __u64 new_id;
-       __u64 flags;
+       __u64 old_flags;
+       __u64 new_flags;
        char name[0];
 };
 
        char name[0];
 };
 
@@ -53,7 +55,7 @@ struct kdbus_notify_name_change {
  * @id:                        New or former owner of the name
  * @flags:             flags field from KDBUS_HELLO_*
  *
  * @id:                        New or former owner of the name
  * @flags:             flags field from KDBUS_HELLO_*
  *
- * Sent from kernel to userspace when the owner or starter of
+ * Sent from kernel to userspace when the owner or activator of
  * a well-known name changes.
  *
  * Attached to:
  * a well-known name changes.
  *
  * Attached to:
@@ -194,18 +196,18 @@ struct kdbus_policy {
 
 /**
  * enum kdbus_item_type - item types to chain data in a list
 
 /**
  * enum kdbus_item_type - item types to chain data in a list
- * @KDBUS_ITEM_PAYLOAD_VEC:    Vevtor to data
+ * @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_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_BLOOM_SIZE:     Desired bloom size, used by KDBUS_CMD_BUS_MAKE
  * @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_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_TIMESTAMP:      Timestamp
  * @KDBUS_ITEM_CREDS:          Process credential
  * @KDBUS_ITEM_PID_COMM:       Process ID "comm" identifier
@@ -222,7 +224,7 @@ struct kdbus_policy {
  * @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_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:     Destiantion died
+ * @KDBUS_ITEM_REPLY_DEAD:     Destination died
  */
 enum kdbus_item_type {
        _KDBUS_ITEM_NULL,
  */
 enum kdbus_item_type {
        _KDBUS_ITEM_NULL,
@@ -232,6 +234,7 @@ enum kdbus_item_type {
        KDBUS_ITEM_PAYLOAD_MEMFD,
        KDBUS_ITEM_FDS,
        KDBUS_ITEM_BLOOM,
        KDBUS_ITEM_PAYLOAD_MEMFD,
        KDBUS_ITEM_FDS,
        KDBUS_ITEM_BLOOM,
+       KDBUS_ITEM_BLOOM_SIZE,
        KDBUS_ITEM_DST_NAME,
        KDBUS_ITEM_PRIORITY,
        KDBUS_ITEM_MAKE_NAME,
        KDBUS_ITEM_DST_NAME,
        KDBUS_ITEM_PRIORITY,
        KDBUS_ITEM_MAKE_NAME,
@@ -242,7 +245,6 @@ enum kdbus_item_type {
 
        _KDBUS_ITEM_ATTACH_BASE = 0x600,
        KDBUS_ITEM_NAME         = _KDBUS_ITEM_ATTACH_BASE,
 
        _KDBUS_ITEM_ATTACH_BASE = 0x600,
        KDBUS_ITEM_NAME         = _KDBUS_ITEM_ATTACH_BASE,
-       KDBUS_ITEM_STARTER_NAME,
        KDBUS_ITEM_TIMESTAMP,
        KDBUS_ITEM_CREDS,
        KDBUS_ITEM_PID_COMM,
        KDBUS_ITEM_TIMESTAMP,
        KDBUS_ITEM_CREDS,
        KDBUS_ITEM_PID_COMM,
@@ -326,12 +328,11 @@ enum kdbus_msg_flags {
 /**
  * enum kdbus_payload_type - type of payload carried by message
  * @KDBUS_PAYLOAD_KERNEL:      Kernel-generated simple message
 /**
  * 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,
  */
 enum kdbus_payload_type {
        KDBUS_PAYLOAD_KERNEL,
-        KDBUS_PAYLOAD_DBUS     = 0x4442757356657231ULL, /* 'DBusVer1' */
+       KDBUS_PAYLOAD_DBUS      = 0x4442757344427573ULL, /* 'DBusDBus' */
 };
 
 /**
 };
 
 /**
@@ -345,7 +346,17 @@ enum kdbus_payload_type {
  * @cookie_reply:      For kernel-generated messages, this is the cookie
  *                     the message is a reply to
  * @timeout_ns:                For non-kernel-generated messages, this denotes the
  * @cookie_reply:      For kernel-generated messages, this is the cookie
  *                     the message is a reply to
  * @timeout_ns:                For non-kernel-generated messages, this denotes the
- *                     message timeout in nanoseconds
+ *                     message timeout in nanoseconds. A message has to be
+ *                     received with KDBUS_CMD_MSG_RECV by the destination
+ *                     connection within this time frame. For messages that
+ *                     have KDBUS_MSG_FLAGS_EXPECT_REPLY set in @flags,
+ *                     this value also denotes the timeout for the reply to
+ *                     this message. If there is no reply, or the message is
+ *                     not received in time by the other side, a
+ *                     kernel-generated message with an attached
+ *                     KDBUS_ITEM_REPLY_TIMEOUT item is sent to @src_id.
+ *                     A 0-value is only valid if KDBUS_MSG_FLAGS_EXPECT_REPLY
+ *                     is unset in @flags.
  * @items:             A list of kdbus_items containing the message payload
  */
 struct kdbus_msg {
  * @items:             A list of kdbus_items containing the message payload
  */
 struct kdbus_msg {
@@ -360,12 +371,12 @@ struct kdbus_msg {
                __u64 timeout_ns;
        };
        struct kdbus_item items[0];
                __u64 timeout_ns;
        };
        struct kdbus_item items[0];
-};
+} __attribute__((aligned(8)));
 
 /**
  * enum kdbus_policy_access_type - permissions of a policy record
  * @KDBUS_POLICY_ACCESS_USER:  Grant access to a uid
 
 /**
  * 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 {
  * @KDBUS_POLICY_ACCESS_WORLD: World-accessible
  */
 enum kdbus_policy_access_type {
@@ -392,25 +403,29 @@ enum kdbus_policy_type {
  * @size:              The total size of the structure
  * @policies:          The policies to upload
  *
  * @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.
  */
 struct kdbus_cmd_policy {
        __u64 size;
        struct kdbus_item policies[0];
  * A new KDBUS_POLICY_NAME can be added after KDBUS_POLICY_ACCESS for
  * chaining multiple policies together.
  */
 struct kdbus_cmd_policy {
        __u64 size;
        struct kdbus_item policies[0];
-};
+} __attribute__((aligned(8)));
 
 /**
  * enum kdbus_hello_flags - flags for struct kdbus_cmd_hello
 
 /**
  * enum kdbus_hello_flags - flags for struct kdbus_cmd_hello
- * @KDBUS_HELLO_STARTER:               The connection registers a name for activation
- *                             by well-know name
  * @KDBUS_HELLO_ACCEPT_FD:     The connection allows the receiving of
  *                             any passed file descriptors
  * @KDBUS_HELLO_ACCEPT_FD:     The connection allows the receiving of
  *                             any passed file descriptors
+ * @KDBUS_HELLO_ACTIVATOR:     Special-purpose connection which registers
+ *                             a well-know name for a process to be started
+ *                             when traffic arrives
+ * @KDBUS_HELLO_MONITOR:       Special-purpose connection to monitor
+ *                             bus traffic
  */
 enum kdbus_hello_flags {
  */
 enum kdbus_hello_flags {
-       KDBUS_HELLO_STARTER             =  1 <<  0,
-       KDBUS_HELLO_ACCEPT_FD           =  1 <<  1,
+       KDBUS_HELLO_ACCEPT_FD           =  1 <<  0,
+       KDBUS_HELLO_ACTIVATOR           =  1 <<  1,
+       KDBUS_HELLO_MONITOR             =  1 <<  2,
 };
 
 /**
 };
 
 /**
@@ -444,7 +459,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.
  * @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
  *                     (KDBUS_ATTACH_*)
  * @bus_flags:         The flags field copied verbatim from the original
  *                     KDBUS_CMD_BUS_MAKE ioctl. It's intended to be useful
@@ -462,20 +477,15 @@ enum kdbus_attach_flags {
  */
 struct kdbus_cmd_hello {
        __u64 size;
  */
 struct kdbus_cmd_hello {
        __u64 size;
-
-       /* userspace → kernel, kernel → userspace */
        __u64 conn_flags;
        __u64 attach_flags;
        __u64 conn_flags;
        __u64 attach_flags;
-
-       /* kernel → userspace */
        __u64 bus_flags;
        __u64 id;
        __u64 bloom_size;
        __u64 pool_size;
        __u8 id128[16];
        __u64 bus_flags;
        __u64 id;
        __u64 bloom_size;
        __u64 pool_size;
        __u8 id128[16];
-
        struct kdbus_item items[0];
        struct kdbus_item items[0];
-};
+} __attribute__((aligned(8)));
 
 /* Flags for KDBUS_CMD_{BUS,EP,NS}_MAKE */
 enum kdbus_make_flags {
 
 /* Flags for KDBUS_CMD_{BUS,EP,NS}_MAKE */
 enum kdbus_make_flags {
@@ -485,82 +495,46 @@ enum kdbus_make_flags {
 };
 
 /**
 };
 
 /**
- * struct kdbus_cmd_bus_make - struct to make a bus
- * @size:              The total size of the struct
- * @flags:             Properties for the bus to create
- * @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.
- */
-struct kdbus_cmd_bus_make {
-       __u64 size;
-       __u64 flags;
-       __u64 bloom_size;
-       struct kdbus_item items[0];
-};
-
-/**
- * struct kdbus_cmd_ep_make - struct to make an endpoint
- * @size:              The total size of the struct
- * @flags:             Unused for now
- * @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.
- */
-struct kdbus_cmd_ep_make {
-       __u64 size;
-       __u64 flags;
-       struct kdbus_item items[0];
-};
-
-/**
- * struct kdbus_cmd_ns_make - struct to make a namespace
+ * struct kdbus_cmd_make - struct to make a bus, an endpoint or a namespace
  * @size:              The total size of the struct
  * @size:              The total size of the struct
- * @flags:             Unused for now
- * @items:             Items describing details such as the
- *                     name of the namespace
+ * @flags:             Properties for the bus/ep/ns to create
+ * @items:             Items describing details
  *
  *
- * 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_BUS_MAKE, KDBUS_CMD_EP_MAKE and
+ * KDBUS_CMD_NS_MAKE ioctls.
  */
  */
-struct kdbus_cmd_ns_make {
+struct kdbus_cmd_make {
        __u64 size;
        __u64 flags;
        struct kdbus_item items[0];
        __u64 size;
        __u64 flags;
        struct kdbus_item items[0];
-};
+} __attribute__((aligned(8)));
 
 /**
  * enum kdbus_name_flags - properties of a well-known name
  * @KDBUS_NAME_REPLACE_EXISTING:       Try to replace name of other connections
 
 /**
  * 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_ALLOW_REPLACEMENT:      Allow the replacement of the name
+ * @KDBUS_NAME_QUEUE:                  Name should be queued if busy
  * @KDBUS_NAME_IN_QUEUE:               Name is queued
  * @KDBUS_NAME_IN_QUEUE:               Name is queued
+ * @KDBUS_NAME_ACTIVATOR:              Name is owned by a activator connection
  */
 enum kdbus_name_flags {
  */
 enum kdbus_name_flags {
-       /* userspace → kernel */
        KDBUS_NAME_REPLACE_EXISTING             = 1 <<  0,
        KDBUS_NAME_REPLACE_EXISTING             = 1 <<  0,
-       KDBUS_NAME_QUEUE                        = 1 <<  1,
-       KDBUS_NAME_ALLOW_REPLACEMENT            = 1 <<  2,
-
-       /* kernel → userspace */
-       KDBUS_NAME_IN_QUEUE                     = 1 << 16,
+       KDBUS_NAME_ALLOW_REPLACEMENT            = 1 <<  1,
+       KDBUS_NAME_QUEUE                        = 1 <<  2,
+       KDBUS_NAME_IN_QUEUE                     = 1 <<  3,
+       KDBUS_NAME_ACTIVATOR                    = 1 <<  4,
 };
 
 /**
  * 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_*)
 };
 
 /**
  * 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.
  *                     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;
  */
 struct kdbus_cmd_name {
        __u64 size;
@@ -568,19 +542,19 @@ struct kdbus_cmd_name {
        __u64 id;
        __u64 conn_flags;
        char name[0];
        __u64 id;
        __u64 conn_flags;
        char name[0];
-};
+} __attribute__((aligned(8)));
 
 /**
  * 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
 
 /**
  * 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_ACTIVATORS:        All activator 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,
  * @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,
-       KDBUS_NAME_LIST_STARTERS        = 1 <<  2,
+       KDBUS_NAME_LIST_ACTIVATORS      = 1 <<  2,
        KDBUS_NAME_LIST_QUEUED          = 1 <<  3,
 };
 
        KDBUS_NAME_LIST_QUEUED          = 1 <<  3,
 };
 
@@ -590,13 +564,13 @@ enum kdbus_name_list_flags {
  * @offset:            The returned offset in the caller's pool buffer.
  *                     The user must use KDBUS_CMD_FREE to free the
  *                     allocated memory.
  * @offset:            The returned offset in the caller's pool buffer.
  *                     The user must use KDBUS_CMD_FREE to free the
  *                     allocated memory.
- *
+ * 
  * This structure is used with the KDBUS_CMD_NAME_LIST ioctl.
  */
 struct kdbus_cmd_name_list {
        __u64 flags;
        __u64 offset;
  * This structure is used with the KDBUS_CMD_NAME_LIST ioctl.
  */
 struct kdbus_cmd_name_list {
        __u64 flags;
        __u64 offset;
-};
+} __attribute__((aligned(8)));
 
 /**
  * struct kdbus_name_list - information returned by KDBUS_CMD_NAME_LIST
 
 /**
  * struct kdbus_name_list - information returned by KDBUS_CMD_NAME_LIST
@@ -619,7 +593,7 @@ struct kdbus_name_list {
  *                     @name is required. kdbus will look up the name to determine
  *                     the ID in this case.
  * @offset:            Returned offset in the caller's pool buffer where the
  *                     @name is required. kdbus will look up the name to determine
  *                     the ID in this case.
  * @offset:            Returned offset in the caller's pool buffer where the
- *                     kdbus_name_info struct result is stored. The user must
+ *                     kdbus_conn_info struct result is stored. The user must
  *                     use KDBUS_CMD_FREE to free the allocated memory.
  * @name:              The optional well-known name to look up. Only needed in
  *                     case @id is zero.
  *                     use KDBUS_CMD_FREE to free the allocated memory.
  * @name:              The optional well-known name to look up. Only needed in
  *                     case @id is zero.
@@ -634,7 +608,7 @@ struct kdbus_cmd_conn_info {
        __u64 id;
        __u64 offset;
        char name[0];
        __u64 id;
        __u64 offset;
        char name[0];
-};
+} __attribute__((aligned(8)));
 
 /**
  * struct kdbus_conn_info - information returned by KDBUS_CMD_CONN_INFO
 
 /**
  * struct kdbus_conn_info - information returned by KDBUS_CMD_CONN_INFO
@@ -687,8 +661,7 @@ enum kdbus_match_type {
  * @items:             A list of items for additional information
  *
  * This structure is used with the KDBUS_CMD_ADD_MATCH and
  * @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;
  */
 struct kdbus_cmd_match {
        __u64 size;
@@ -696,29 +669,7 @@ struct kdbus_cmd_match {
        __u64 cookie;
        __u64 src_id;
        struct kdbus_item items[0];
        __u64 cookie;
        __u64 src_id;
        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
- *                     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;
-       __u64 flags;
-};
+} __attribute__((aligned(8)));
 
 /**
  * enum kdbus_ioctl_type - Ioctl API
 
 /**
  * enum kdbus_ioctl_type - Ioctl API
@@ -742,6 +693,10 @@ struct kdbus_cmd_monitor {
  *                             placed in the receiver's pool.
  * @KDBUS_CMD_FREE:            Release the allocated memory in the receiver's
  *                             pool.
  *                             placed in the receiver's pool.
  * @KDBUS_CMD_FREE:            Release the allocated memory in the receiver's
  *                             pool.
+ * @KDBUS_CMD_DROP:            Drop and free the next queued message and all
+ *                             its ressources without actually receiveing it.
+ * @KDBUS_CMD_SRC:             Return the sender's connection ID of the next
+ *                             queued message.
  * @KDBUS_CMD_NAME_ACQUIRE:    Request a well-known bus name to associate with
  *                             the connection. Well-known names are used to
  *                             address a peer on the bus.
  * @KDBUS_CMD_NAME_ACQUIRE:    Request a well-known bus name to associate with
  *                             the connection. Well-known names are used to
  *                             address a peer on the bus.
@@ -752,14 +707,11 @@ 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
  * @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.
  * @KDBUS_CMD_MATCH_REMOVE:    Remove a current match for broadcast messages.
  *                             the actual state of the process.
  * @KDBUS_CMD_MATCH_ADD:       Install a match which broadcast messages should
  *                             be delivered to the connection.
  * @KDBUS_CMD_MATCH_REMOVE:    Remove a current match for broadcast messages.
- * @KDBUS_CMD_MONITOR:         Monitor the bus and receive all transmitted
- *                             messages. Privileges are required for this
- *                             operation.
  * @KDBUS_CMD_EP_POLICY_SET:   Set the policy of an endpoint. It is used to
  *                             restrict the access for endpoints created with
  *                             KDBUS_CMD_EP_MAKE.
  * @KDBUS_CMD_EP_POLICY_SET:   Set the policy of an endpoint. It is used to
  *                             restrict the access for endpoints created with
  *                             KDBUS_CMD_EP_MAKE.
@@ -791,15 +743,17 @@ struct kdbus_cmd_monitor {
  *                             be changed as long as the file is shared.
  */
 enum kdbus_ioctl_type {
  *                             be changed as long as the file is shared.
  */
 enum kdbus_ioctl_type {
-       KDBUS_CMD_BUS_MAKE =            _IOW (KDBUS_IOC_MAGIC, 0x00, struct kdbus_cmd_bus_make),
-       KDBUS_CMD_NS_MAKE =             _IOR (KDBUS_IOC_MAGIC, 0x10, struct kdbus_cmd_ns_make),
+       KDBUS_CMD_BUS_MAKE =            _IOW (KDBUS_IOC_MAGIC, 0x00, struct kdbus_cmd_make),
+       KDBUS_CMD_NS_MAKE =             _IOR (KDBUS_IOC_MAGIC, 0x10, struct kdbus_cmd_make),
+       KDBUS_CMD_EP_MAKE =             _IOW (KDBUS_IOC_MAGIC, 0x20, struct kdbus_cmd_make),
 
 
-       KDBUS_CMD_EP_MAKE =             _IOW (KDBUS_IOC_MAGIC, 0x20, struct kdbus_cmd_ep_make),
        KDBUS_CMD_HELLO =               _IOWR(KDBUS_IOC_MAGIC, 0x30, struct kdbus_cmd_hello),
 
        KDBUS_CMD_MSG_SEND =            _IOW (KDBUS_IOC_MAGIC, 0x40, struct kdbus_msg),
        KDBUS_CMD_MSG_RECV =            _IOR (KDBUS_IOC_MAGIC, 0x41, __u64 *),
        KDBUS_CMD_FREE =                _IOW (KDBUS_IOC_MAGIC, 0x42, __u64 *),
        KDBUS_CMD_HELLO =               _IOWR(KDBUS_IOC_MAGIC, 0x30, struct kdbus_cmd_hello),
 
        KDBUS_CMD_MSG_SEND =            _IOW (KDBUS_IOC_MAGIC, 0x40, struct kdbus_msg),
        KDBUS_CMD_MSG_RECV =            _IOR (KDBUS_IOC_MAGIC, 0x41, __u64 *),
        KDBUS_CMD_FREE =                _IOW (KDBUS_IOC_MAGIC, 0x42, __u64 *),
+       KDBUS_CMD_MSG_DROP =            _IO  (KDBUS_IOC_MAGIC, 0x43),
+       KDBUS_CMD_MSG_SRC =             _IOR (KDBUS_IOC_MAGIC, 0x44, __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_ACQUIRE =        _IOWR(KDBUS_IOC_MAGIC, 0x50, struct kdbus_cmd_name),
        KDBUS_CMD_NAME_RELEASE =        _IOW (KDBUS_IOC_MAGIC, 0x51, struct kdbus_cmd_name),
@@ -809,7 +763,6 @@ enum kdbus_ioctl_type {
 
        KDBUS_CMD_MATCH_ADD =           _IOW (KDBUS_IOC_MAGIC, 0x70, struct kdbus_cmd_match),
        KDBUS_CMD_MATCH_REMOVE =        _IOW (KDBUS_IOC_MAGIC, 0x71, struct kdbus_cmd_match),
 
        KDBUS_CMD_MATCH_ADD =           _IOW (KDBUS_IOC_MAGIC, 0x70, struct kdbus_cmd_match),
        KDBUS_CMD_MATCH_REMOVE =        _IOW (KDBUS_IOC_MAGIC, 0x71, struct kdbus_cmd_match),
-       KDBUS_CMD_MONITOR =             _IOW (KDBUS_IOC_MAGIC, 0x72, struct kdbus_cmd_monitor),
 
        KDBUS_CMD_EP_POLICY_SET =       _IOW (KDBUS_IOC_MAGIC, 0x80, struct kdbus_cmd_policy),
 
 
        KDBUS_CMD_EP_POLICY_SET =       _IOW (KDBUS_IOC_MAGIC, 0x80, struct kdbus_cmd_policy),
 
@@ -823,6 +776,8 @@ enum kdbus_ioctl_type {
 /*
  * errno - api error codes
  * @E2BIG:             A message contains too many records or items.
 /*
  * 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.
  * @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.
@@ -830,8 +785,8 @@ enum kdbus_ioctl_type {
  * @EBADFD:            A bus connection is in a corrupted state.
  * @EBADMSG:           Passed data contains a combination of conflicting or
  *                     inconsistent types.
  * @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.
+ * @ECONNRESET:                A connection is shut down, no further operations are
+ *                     possible.
  * @ECOMM:             A peer does not accept the file descriptors addressed
  *                     to it.
  * @EDESTADDRREQ:      The well-known bus name is required but missing.
  * @ECOMM:             A peer does not accept the file descriptors addressed
  *                     to it.
  * @EDESTADDRREQ:      The well-known bus name is required but missing.
@@ -860,16 +815,17 @@ 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
  * @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
  *                     data.
  * @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
  *                     data.
- * @ENXIO:             A unique address does not exist.
+ * @ENXIO:             A unique address does not exist, or an offset in the
+ *                     receiver's pool does not represent a queued message.
  * @EPERM:             The policy prevented an operation. The requested
  *                     resource is owned by another entity.
  * @EPERM:             The policy prevented an operation. The requested
  *                     resource is owned by another entity.
- * @ESHUTDOWN:         The connection is currently shutting down, no further
- *                     operations are possible.
+ * @ESHUTDOWN:         A namespace or endpoint is currently shutting down;
+ *                     no further operations will be possible.
  * @ESRCH:             A requested well-known bus name is not found.
  * @ETXTBSY:           A kdbus memfd file cannot be sealed or the seal removed,
  *                     because it is shared with other processes or still
  * @ESRCH:             A requested well-known bus name is not found.
  * @ETXTBSY:           A kdbus memfd file cannot be sealed or the seal removed,
  *                     because it is shared with other processes or still