1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-05 09:17:44 +03:00

sd-bus: sync up with new kdbus metadata attachment logic (ABI break)

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.
This commit is contained in:
Daniel Mack 2014-11-05 14:32:48 +01:00
parent cfe2061add
commit d704fda934
2 changed files with 65 additions and 50 deletions

View 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;

View 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;