chiark / gitweb /
sd-bus: sync up with new kdbus metadata attachment logic (ABI break)
authorDaniel Mack <daniel@zonque.org>
Wed, 5 Nov 2014 13:32:48 +0000 (14:32 +0100)
committerDaniel Mack <daniel@zonque.org>
Wed, 5 Nov 2014 13:48:20 +0000 (14:48 +0100)
The metadata logic in kdbus has seen a rework, and the only mandatory
change we have to follow for now is that attach_flags in kdbus_cmd_hello
is now split into two parts, attach_flags_send and attach_flags_recv.

src/libsystemd/sd-bus/bus-kernel.c
src/libsystemd/sd-bus/kdbus.h

index 11039b8..142eb91 100644 (file)
@@ -721,7 +721,8 @@ int bus_kernel_take_fd(sd_bus *b) {
         hello = alloca0_align(sz, 8);
         hello->size = sz;
         hello->flags = b->hello_flags;
-        hello->attach_flags = b->attach_flags;
+        hello->attach_flags_send = _KDBUS_ATTACH_ALL;
+        hello->attach_flags_recv = b->attach_flags;
         hello->pool_size = KDBUS_POOL_SIZE;
 
         item = hello->items;
@@ -1556,7 +1557,8 @@ int bus_kernel_make_starter(
                 (activating ? KDBUS_HELLO_ACTIVATOR : KDBUS_HELLO_POLICY_HOLDER) |
                 (accept_fd ? KDBUS_HELLO_ACCEPT_FD : 0);
         hello->pool_size = KDBUS_POOL_SIZE;
-        hello->attach_flags = _KDBUS_ATTACH_ALL;
+        hello->attach_flags_send = _KDBUS_ATTACH_ALL;
+        hello->attach_flags_recv = _KDBUS_ATTACH_ALL;
 
         if (ioctl(fd, KDBUS_CMD_HELLO, hello) < 0)
                 return -errno;
index be6aabc..a870b17 100644 (file)
@@ -203,50 +203,56 @@ struct kdbus_policy_access {
 
 /**
  * enum kdbus_item_type - item types to chain data in a list
- * @_KDBUS_ITEM_NULL:          Uninitialized/invalid
- * @_KDBUS_ITEM_USER_BASE:     Start of user items
- * @KDBUS_ITEM_PAYLOAD_VEC:    Vector to data
- * @KDBUS_ITEM_PAYLOAD_OFF:    Data at returned offset to message head
- * @KDBUS_ITEM_PAYLOAD_MEMFD:  Data as sealed memfd
- * @KDBUS_ITEM_FDS:            Attached file descriptors
- * @KDBUS_ITEM_BLOOM_PARAMETER:        Bus-wide bloom parameters, used with
- *                             KDBUS_CMD_BUS_MAKE, carries a
- *                             struct kdbus_bloom_parameter
- * @KDBUS_ITEM_BLOOM_FILTER:   Bloom filter carried with a message, used to
- *                             match against a bloom mask of a connection,
- *                             carries a struct kdbus_bloom_filter
- * @KDBUS_ITEM_BLOOM_MASK:     Bloom mask used to match against a message's
- *                             bloom filter
- * @KDBUS_ITEM_DST_NAME:       Destination's well-known name
- * @KDBUS_ITEM_MAKE_NAME:      Name of domain, bus, endpoint
- * @KDBUS_ITEM_ATTACH_FLAGS:   Attach-flags, used for updating which metadata
- *                             a connection subscribes to
- * @KDBUS_ITEM_ID:             Connection ID
- * @KDBUS_ITEM_NAME:           Well-know name with flags
- * @_KDBUS_ITEM_ATTACH_BASE:   Start of metadata attach items
- * @KDBUS_ITEM_TIMESTAMP:      Timestamp
- * @KDBUS_ITEM_CREDS:          Process credential
- * @KDBUS_ITEM_AUXGROUPS:      Auxiliary process groups
- * @KDBUS_ITEM_OWNED_NAME:     A name owned by the associated connection
- * @KDBUS_ITEM_TID_COMM:       Thread ID "comm" identifier
- * @KDBUS_ITEM_PID_COMM:       Process 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_CONN_DESCRIPTION:The connection's human-readable name (debugging)
- * @_KDBUS_ITEM_POLICY_BASE:   Start of policy items
- * @KDBUS_ITEM_POLICY_ACCESS:  Policy access block
- * @_KDBUS_ITEM_KERNEL_BASE:   Start of kernel-generated message items
- * @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
+ * @_KDBUS_ITEM_NULL:                  Uninitialized/invalid
+ * @_KDBUS_ITEM_USER_BASE:             Start of user items
+ * @KDBUS_ITEM_PAYLOAD_VEC:            Vector to data
+ * @KDBUS_ITEM_PAYLOAD_OFF:            Data at returned offset to message head
+ * @KDBUS_ITEM_PAYLOAD_MEMFD:          Data as sealed memfd
+ * @KDBUS_ITEM_FDS:                    Attached file descriptors
+ * @KDBUS_ITEM_BLOOM_PARAMETER:                Bus-wide bloom parameters, used with
+ *                                     KDBUS_CMD_BUS_MAKE, carries a
+ *                                     struct kdbus_bloom_parameter
+ * @KDBUS_ITEM_BLOOM_FILTER:           Bloom filter carried with a message,
+ *                                     used to match against a bloom mask of a
+ *                                     connection, carries a struct
+ *                                     kdbus_bloom_filter
+ * @KDBUS_ITEM_BLOOM_MASK:             Bloom mask used to match against a
+ *                                     message'sbloom filter
+ * @KDBUS_ITEM_DST_NAME:               Destination's well-known name
+ * @KDBUS_ITEM_MAKE_NAME:              Name of domain, bus, endpoint
+ * @KDBUS_ITEM_ATTACH_FLAGS_SEND:      Attach-flags, used for updating which
+ *                                     metadata a connection opts in to send
+ * @KDBUS_ITEM_ATTACH_FLAGS_RECV:      Attach-flags, used for updating which
+ *                                     metadata a connection requests to
+ *                                     receive for each reeceived message
+ * @KDBUS_ITEM_ID:                     Connection ID
+ * @KDBUS_ITEM_NAME:                   Well-know name with flags
+ * @_KDBUS_ITEM_ATTACH_BASE:           Start of metadata attach items
+ * @KDBUS_ITEM_TIMESTAMP:              Timestamp
+ * @KDBUS_ITEM_CREDS:                  Process credential
+ * @KDBUS_ITEM_AUXGROUPS:              Auxiliary process groups
+ * @KDBUS_ITEM_OWNED_NAME:             A name owned by the associated
+ *                                     connection
+ * @KDBUS_ITEM_TID_COMM:               Thread ID "comm" identifier
+ * @KDBUS_ITEM_PID_COMM:               Process 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_CONN_DESCRIPTION:       The connection's human-readable name
+ *                                     (debugging)
+ * @_KDBUS_ITEM_POLICY_BASE:           Start of policy items
+ * @KDBUS_ITEM_POLICY_ACCESS:          Policy access block
+ * @_KDBUS_ITEM_KERNEL_BASE:           Start of kernel-generated message items
+ * @KDBUS_ITEM_NAME_ADD:               Notification in kdbus_notify_name_change
+ * @KDBUS_ITEM_NAME_REMOVE:            Notification in kdbus_notify_name_change
+ * @KDBUS_ITEM_NAME_CHANGE:            Notification in kdbus_notify_name_change
+ * @KDBUS_ITEM_ID_ADD:                 Notification in kdbus_notify_id_change
+ * @KDBUS_ITEM_ID_REMOVE:              Notification in 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,
@@ -260,7 +266,8 @@ enum kdbus_item_type {
        KDBUS_ITEM_BLOOM_MASK,
        KDBUS_ITEM_DST_NAME,
        KDBUS_ITEM_MAKE_NAME,
-       KDBUS_ITEM_ATTACH_FLAGS,
+       KDBUS_ITEM_ATTACH_FLAGS_SEND,
+       KDBUS_ITEM_ATTACH_FLAGS_RECV,
        KDBUS_ITEM_ID,
        KDBUS_ITEM_NAME,
 
@@ -552,6 +559,8 @@ enum kdbus_hello_flags {
  * @KDBUS_ATTACH_AUDIT:                        The audit IDs
  * @KDBUS_ATTACH_CONN_DESCRIPTION:     The human-readable connection name
  * @_KDBUS_ATTACH_ALL:                 All of the above
+ * @_KDBUS_ATTACH_ANY:                 Wildcard match to enable any kind of
+ *                                     metatdata.
  */
 enum kdbus_attach_flags {
        KDBUS_ATTACH_TIMESTAMP          =  1ULL <<  0,
@@ -568,6 +577,7 @@ enum kdbus_attach_flags {
        KDBUS_ATTACH_AUDIT              =  1ULL << 11,
        KDBUS_ATTACH_CONN_DESCRIPTION   =  1ULL << 12,
        _KDBUS_ATTACH_ALL               =  (1ULL << 13) - 1,
+       _KDBUS_ATTACH_ANY               =  ~0ULL
 };
 
 /**
@@ -575,8 +585,10 @@ enum kdbus_attach_flags {
  * @size:              The total size of the structure
  * @flags:             Connection flags (KDBUS_HELLO_*), userspace → kernel
  * @kernel_flags:      Supported connection flags, kernel → userspace
- * @attach_flags:      Mask of metadata to attach to each message sent
- *                     (KDBUS_ATTACH_*)
+ * @attach_flags_send: Mask of metadata to attach to each message sent
+ *                     off by this connection (KDBUS_ATTACH_*)
+ * @attach_flags_recv: Mask of metadata to attach to each message receieved
+ *                     by the new connection (KDBUS_ATTACH_*)
  * @bus_flags:         The flags field copied verbatim from the original
  *                     KDBUS_CMD_BUS_MAKE ioctl. It's intended to be useful
  *                     to do negotiation of features of the payload that is
@@ -595,7 +607,8 @@ struct kdbus_cmd_hello {
        __u64 size;
        __u64 flags;
        __u64 kernel_flags;
-       __u64 attach_flags;
+       __u64 attach_flags_send;
+       __u64 attach_flags_recv;
        __u64 bus_flags;
        __u64 id;
        __u64 pool_size;