kdbus.h revision affc7fe9e1295e209c332a26acbbc992b710fe82
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/*
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * kdbus is free software; you can redistribute it and/or modify it under
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * the terms of the GNU Lesser General Public License as published by the
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * Free Software Foundation; either version 2.1 of the License, or (at
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * your option) any later version.
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#ifndef _KDBUS_UAPI_H_
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#define _KDBUS_UAPI_H_
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#include <linux/ioctl.h>
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#include <linux/types.h>
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#define KDBUS_IOCTL_MAGIC 0x95
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#define KDBUS_SRC_ID_KERNEL (0)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#define KDBUS_DST_ID_NAME (0)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#define KDBUS_MATCH_ID_ANY (~0ULL)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#define KDBUS_DST_ID_BROADCAST (~0ULL)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek#define KDBUS_FLAG_KERNEL (1ULL << 63)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
3f6fd1ba65f962702753c4ad284b588e59689a23Lennart Poettering * struct kdbus_notify_id_change - name registry change message
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @id: New or former owner of the name
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @flags: flags field from KDBUS_HELLO_*
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek *
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * Sent from kernel to userspace when the owner or activator of
3f6fd1ba65f962702753c4ad284b588e59689a23Lennart Poettering * a well-known name changes.
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek *
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * Attached to:
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_ID_ADD
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_ID_REMOVE
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
ce30c8dcb41dfe9264f79f30c7f51c0e74576638Lennart Poetteringstruct kdbus_notify_id_change {
3f6fd1ba65f962702753c4ad284b588e59689a23Lennart Poettering __u64 id;
3f6fd1ba65f962702753c4ad284b588e59689a23Lennart Poettering __u64 flags;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * struct kdbus_notify_name_change - name registry change message
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek * @old_id: ID and flags of former owner of a name
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @new_id: ID and flags of new owner of a name
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @name: Well-known name
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek *
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * Sent from kernel to userspace when the owner or activator of
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * a well-known name changes.
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering *
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * Attached to:
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_NAME_ADD
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_NAME_REMOVE
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_NAME_CHANGE
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poetteringstruct kdbus_notify_name_change {
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_notify_id_change old_id;
4a62c710b62a5a3c7a8a278b810b9d5b5a0c8f4fMichal Schmidt struct kdbus_notify_id_change new_id;
4a62c710b62a5a3c7a8a278b810b9d5b5a0c8f4fMichal Schmidt char name[0];
603938e0a9b5379984d7397e3cf81683c0037a53Lennart Poettering};
603938e0a9b5379984d7397e3cf81683c0037a53Lennart Poettering
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * struct kdbus_creds - process credentials
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @uid: User ID
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * @euid: Effective UID
29a5ca9baa58e55c4d9e1d008cdd014aa9c3c3e1Lennart Poettering * @suid: Saved UID
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @fsuid: Filesystem UID
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @gid: Group ID
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @egid: Effective GID
eb56eb9b40950f1edcffdb7313f8de4f8572a6d5Michal Schmidt * @sgid: Saved GID
eb56eb9b40950f1edcffdb7313f8de4f8572a6d5Michal Schmidt * @fsgid: Filesystem GID
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering *
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * Attached to:
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_CREDS
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering */
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poetteringstruct kdbus_creds {
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering __u32 uid;
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering __u32 euid;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u32 suid;
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering __u32 fsuid;
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering __u32 gid;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u32 egid;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u32 sgid;
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek __u32 fsgid;
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek};
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek/**
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek * struct kdbus_pids - process identifiers
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek * @pid: Process ID
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek * @tid: Thread ID
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek * @starttime: Starttime of the process
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek *
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek * The PID, TID and starttime of a process. The start tmie is useful to detect
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek * PID overruns from the client side. i.e. if you use the PID to look something
fff40a51ccbb02e8dec4ff2ee505bc84f75e445cZbigniew Jędrzejewski-Szmek * up in /proc/$PID/ you can afterwards check the starttime field of it, to
fff40a51ccbb02e8dec4ff2ee505bc84f75e445cZbigniew Jędrzejewski-Szmek * ensure you didn't run into a PID overrun.
fff40a51ccbb02e8dec4ff2ee505bc84f75e445cZbigniew Jędrzejewski-Szmek *
fff40a51ccbb02e8dec4ff2ee505bc84f75e445cZbigniew Jędrzejewski-Szmek * Attached to:
fff40a51ccbb02e8dec4ff2ee505bc84f75e445cZbigniew Jędrzejewski-Szmek * KDBUS_ITEM_PIDS
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmekstruct kdbus_pids {
e0aa3726103448097e5ad7cc6f427e142103a321Zbigniew Jędrzejewski-Szmek __u64 pid;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u64 tid;
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek __u64 starttime;
23bbb0de4e3f85d9704a5c12a5afa2dfa0159e41Michal Schmidt};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
175a3d25d0e8596d4ba0759aea3f89ee228e7d6dLennart Poettering * struct kdbus_caps - process capabilities
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @last_cap: Highest currently known capability bit
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @caps: Variable number of 32-bit capabilities flags
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek *
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek * Contains a variable number of 32-bit capabilities flags.
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek *
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek * Attached to:
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_CAPS
4a62c710b62a5a3c7a8a278b810b9d5b5a0c8f4fMichal Schmidt */
4a62c710b62a5a3c7a8a278b810b9d5b5a0c8f4fMichal Schmidtstruct kdbus_caps {
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u32 last_cap;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u32 caps[0];
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering};
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering/**
2c408cb6276e3b8d18fb4e2a81a1128d8bbaa70dLennart Poettering * struct kdbus_audit - audit information
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * @sessionid: The audit session ID
29a5ca9baa58e55c4d9e1d008cdd014aa9c3c3e1Lennart Poettering * @loginuid: The audit login uid
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek *
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * Attached to:
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_AUDIT
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmekstruct kdbus_audit {
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u64 sessionid;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u64 loginuid;
23ea3dab15181a3966ec45fa2ccbb81e59d2e0a7Zbigniew Jędrzejewski-Szmek};
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * struct kdbus_timestamp
7fd1b19bc9e9f5574f2877936b8ac267c7706947Harald Hoyer * @seqnum: Global per-domain message sequence number
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * @monotonic_ns: Monotonic timestamp, in nanoseconds
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * @realtime_ns: Realtime timestamp, in nanoseconds
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek *
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * Attached to:
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_TIMESTAMP
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering */
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poetteringstruct kdbus_timestamp {
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering __u64 seqnum;
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering __u64 monotonic_ns;
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering __u64 realtime_ns;
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek};
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek/**
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek * struct kdbus_vec - I/O vector for kdbus payload items
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek * @size: The size of the vector
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @address: Memory address of data buffer
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @offset: Offset in the in-message payload memory,
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * relative to the message head
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek *
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek * Attached to:
23ea3dab15181a3966ec45fa2ccbb81e59d2e0a7Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_PAYLOAD_VEC, KDBUS_ITEM_PAYLOAD_OFF
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek */
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmekstruct kdbus_vec {
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek __u64 size;
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek union {
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek __u64 address;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u64 offset;
23ea3dab15181a3966ec45fa2ccbb81e59d2e0a7Zbigniew Jędrzejewski-Szmek };
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * struct kdbus_bloom_parameter - bus-wide bloom parameters
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @size: Size of the bit field in bytes (m / 8)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @n_hash: Number of hash functions used (k)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmekstruct kdbus_bloom_parameter {
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering __u64 size;
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering __u64 n_hash;
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering};
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering/**
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * struct kdbus_bloom_filter - bloom filter containing n elements
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @generation: Generation of the element set in the filter
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @data: Bit field, multiple of 8 bytes
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering */
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poetteringstruct kdbus_bloom_filter {
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering __u64 generation;
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering __u64 data[0];
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering};
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering/**
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * struct kdbus_memfd - a kdbus memfd
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @size: The memfd's size
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @fd: The file descriptor number
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @__pad: Padding to ensure proper alignment and size
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering *
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * Attached to:
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * KDBUS_ITEM_PAYLOAD_MEMFD
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmekstruct kdbus_memfd {
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u64 size;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek int fd;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u32 __pad;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering/**
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * struct kdbus_name - a registered well-known name with its flags
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @flags: Flags from KDBUS_NAME_*
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @name: Well-known name
23ea3dab15181a3966ec45fa2ccbb81e59d2e0a7Zbigniew Jędrzejewski-Szmek *
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * Attached to:
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_OWNED_NAME
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmekstruct kdbus_name {
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek __u64 flags;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek char name[0];
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * struct kdbus_policy_access - policy access item
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @type: One of KDBUS_POLICY_ACCESS_* types
4a62c710b62a5a3c7a8a278b810b9d5b5a0c8f4fMichal Schmidt * @access: Access to grant
4a62c710b62a5a3c7a8a278b810b9d5b5a0c8f4fMichal Schmidt * @id: For KDBUS_POLICY_ACCESS_USER, the uid
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * For KDBUS_POLICY_ACCESS_GROUP, the gid
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmekstruct kdbus_policy_access {
ce30c8dcb41dfe9264f79f30c7f51c0e74576638Lennart Poettering __u64 type; /* USER, GROUP, WORLD */
ce30c8dcb41dfe9264f79f30c7f51c0e74576638Lennart Poettering __u64 access; /* OWN, TALK, SEE */
ce30c8dcb41dfe9264f79f30c7f51c0e74576638Lennart Poettering __u64 id; /* uid, gid, 0 */
ce30c8dcb41dfe9264f79f30c7f51c0e74576638Lennart Poettering};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
56f64d95763a799ba4475daf44d8e9f72a1bd474Michal Schmidt * enum kdbus_item_type - item types to chain data in a list
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @_KDBUS_ITEM_NULL: Uninitialized/invalid
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @_KDBUS_ITEM_USER_BASE: Start of user items
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_PAYLOAD_VEC: Vector to data
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_PAYLOAD_OFF: Data at returned offset to message head
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_PAYLOAD_MEMFD: Data as sealed memfd
56f64d95763a799ba4475daf44d8e9f72a1bd474Michal Schmidt * @KDBUS_ITEM_FDS: Attached file descriptors
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_BLOOM_PARAMETER: Bus-wide bloom parameters, used with
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_CMD_BUS_MAKE, carries a
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * struct kdbus_bloom_parameter
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_BLOOM_FILTER: Bloom filter carried with a message,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * used to match against a bloom mask of a
56f64d95763a799ba4475daf44d8e9f72a1bd474Michal Schmidt * connection, carries a struct
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * kdbus_bloom_filter
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_BLOOM_MASK: Bloom mask used to match against a
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * message'sbloom filter
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_DST_NAME: Destination's well-known name
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_MAKE_NAME: Name of domain, bus, endpoint
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_ATTACH_FLAGS_SEND: Attach-flags, used for updating which
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * metadata a connection opts in to send
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_ATTACH_FLAGS_RECV: Attach-flags, used for updating which
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * metadata a connection requests to
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * receive for each reeceived message
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_ID: Connection ID
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_NAME: Well-know name with flags
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @_KDBUS_ITEM_ATTACH_BASE: Start of metadata attach items
56f64d95763a799ba4475daf44d8e9f72a1bd474Michal Schmidt * @KDBUS_ITEM_TIMESTAMP: Timestamp
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_CREDS: Process credentials
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_PIDS: Process identifiers
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_AUXGROUPS: Auxiliary process groups
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_OWNED_NAME: A name owned by the associated
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * connection
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_TID_COMM: Thread ID "comm" identifier
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * (Don't trust this, see below.)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_PID_COMM: Process ID "comm" identifier
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * (Don't trust this, see below.)
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * @KDBUS_ITEM_EXE: The path of the executable
aa44499da15a8fa7026463555a7a27e55e4e24a8Philippe De Swert * (Don't trust this, see below.)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_CMDLINE: The process command line
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * (Don't trust this, see below.)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_CGROUP: The croup membership
56f64d95763a799ba4475daf44d8e9f72a1bd474Michal Schmidt * @KDBUS_ITEM_CAPS: The process capabilities
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_SECLABEL: The security label
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_AUDIT: The audit IDs
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_CONN_DESCRIPTION: The connection's human-readable name
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * (debugging)
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * @_KDBUS_ITEM_POLICY_BASE: Start of policy items
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * @KDBUS_ITEM_POLICY_ACCESS: Policy access block
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @_KDBUS_ITEM_KERNEL_BASE: Start of kernel-generated message items
30374ebe5e9f0b37e99dcbdc965c00fcf542f89dLennart Poettering * @KDBUS_ITEM_NAME_ADD: Notification in kdbus_notify_name_change
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_NAME_REMOVE: Notification in kdbus_notify_name_change
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_NAME_CHANGE: Notification in kdbus_notify_name_change
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_ITEM_ID_ADD: Notification in kdbus_notify_id_change
e9c1ea9de87d4d508ac38ce87a2fa56e7529a91aJason St. John * @KDBUS_ITEM_ID_REMOVE: Notification in kdbus_notify_id_change
9d458c0902cdc5d993fd2f78d36fb83a8130c81bLennart Poettering * @KDBUS_ITEM_REPLY_TIMEOUT: Timeout has been reached
9d458c0902cdc5d993fd2f78d36fb83a8130c81bLennart Poettering * @KDBUS_ITEM_REPLY_DEAD: Destination died
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek *
e9c1ea9de87d4d508ac38ce87a2fa56e7529a91aJason St. John * N.B: The process and thread COMM fields, as well as the CMDLINE and
e9c1ea9de87d4d508ac38ce87a2fa56e7529a91aJason St. John * EXE fields may be altered by unprivileged processes und should
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * hence *not* used for security decisions. Peers should make use of
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * these items only for informational purposes, such as generating log
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * records.
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmekenum kdbus_item_type {
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek _KDBUS_ITEM_NULL,
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek _KDBUS_ITEM_USER_BASE,
c099716487df4a4f5394e57e7ca14da1d358166aZbigniew Jędrzejewski-Szmek KDBUS_ITEM_PAYLOAD_VEC = _KDBUS_ITEM_USER_BASE,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_PAYLOAD_OFF,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_PAYLOAD_MEMFD,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_FDS,
56f64d95763a799ba4475daf44d8e9f72a1bd474Michal Schmidt KDBUS_ITEM_BLOOM_PARAMETER,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_BLOOM_FILTER,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_BLOOM_MASK,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_DST_NAME,
601185b43da638b1c74153deae01dbd518680889Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_MAKE_NAME,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_ATTACH_FLAGS_SEND,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_ATTACH_FLAGS_RECV,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_ID,
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_NAME,
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek /* keep these item types in sync with KDBUS_ATTACH_* flags */
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek _KDBUS_ITEM_ATTACH_BASE = 0x1000,
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_TIMESTAMP = _KDBUS_ITEM_ATTACH_BASE,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_CREDS,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_PIDS,
601185b43da638b1c74153deae01dbd518680889Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_AUXGROUPS,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_OWNED_NAME,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_TID_COMM,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_PID_COMM,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_EXE,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_CMDLINE,
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering KDBUS_ITEM_CGROUP,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_CAPS,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_SECLABEL,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_AUDIT,
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_CONN_DESCRIPTION,
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek _KDBUS_ITEM_POLICY_BASE = 0x2000,
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_POLICY_ACCESS = _KDBUS_ITEM_POLICY_BASE,
892213bf1fd23e48d64a407ece6e10b07bef1926Zbigniew Jędrzejewski-Szmek
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering _KDBUS_ITEM_KERNEL_BASE = 0x8000,
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering KDBUS_ITEM_NAME_ADD = _KDBUS_ITEM_KERNEL_BASE,
eb9da376d76b48585b3b63b4f91903b54f7abd36Lennart Poettering KDBUS_ITEM_NAME_REMOVE,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_NAME_CHANGE,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_ID_ADD,
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering KDBUS_ITEM_ID_REMOVE,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_REPLY_TIMEOUT,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_ITEM_REPLY_DEAD,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
ed6556920c1a6cdfe0bb04e806bc1f54ea191545Mantas Mikulėnas/**
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * struct kdbus_item - chain of data blocks
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @size: Overall data record size
601185b43da638b1c74153deae01dbd518680889Zbigniew Jędrzejewski-Szmek * @type: Kdbus_item type of data
601185b43da638b1c74153deae01dbd518680889Zbigniew Jędrzejewski-Szmek * @data: Generic bytes
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @data32: Generic 32 bit array
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @data64: Generic 64 bit array
3f6fd1ba65f962702753c4ad284b588e59689a23Lennart Poettering * @str: Generic string
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @id: Connection ID
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @vec: KDBUS_ITEM_PAYLOAD_VEC
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @creds: KDBUS_ITEM_CREDS
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @audit: KDBUS_ITEM_AUDIT
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @timestamp: KDBUS_ITEM_TIMESTAMP
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @name: KDBUS_ITEM_NAME
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @bloom_parameter: KDBUS_ITEM_BLOOM_PARAMETER
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @bloom_filter: KDBUS_ITEM_BLOOM_FILTER
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @memfd: KDBUS_ITEM_PAYLOAD_MEMFD
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @name_change: KDBUS_ITEM_NAME_ADD
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_NAME_REMOVE
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_ITEM_NAME_CHANGE
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * @id_change: KDBUS_ITEM_ID_ADD
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering * KDBUS_ITEM_ID_REMOVE
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek * @policy: KDBUS_ITEM_POLICY_ACCESS
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering */
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmekstruct kdbus_item {
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek __u64 size;
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering __u64 type;
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering union {
163c76c9305e6fee91dad8a3004f77020000ef96Lennart Poettering __u8 data[0];
163c76c9305e6fee91dad8a3004f77020000ef96Lennart Poettering __u32 data32[0];
163c76c9305e6fee91dad8a3004f77020000ef96Lennart Poettering __u64 data64[0];
163c76c9305e6fee91dad8a3004f77020000ef96Lennart Poettering char str[0];
163c76c9305e6fee91dad8a3004f77020000ef96Lennart Poettering
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering __u64 id;
8dd4c05b5495c7ffe0f12ace87e71abe17bd0a0eLennart Poettering struct kdbus_vec vec;
5e65c93a433447b15180249166f7b3944c3e6156Zbigniew Jędrzejewski-Szmek struct kdbus_creds creds;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_pids pids;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_audit audit;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_caps caps;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_timestamp timestamp;
eb9da376d76b48585b3b63b4f91903b54f7abd36Lennart Poettering struct kdbus_name name;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_bloom_parameter bloom_parameter;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_bloom_filter bloom_filter;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_memfd memfd;
601185b43da638b1c74153deae01dbd518680889Zbigniew Jędrzejewski-Szmek int fds[0];
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_notify_name_change name_change;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_notify_id_change id_change;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek struct kdbus_policy_access policy_access;
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek };
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * enum kdbus_msg_flags - type of message
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_MSG_FLAGS_EXPECT_REPLY: Expect a reply message, used for
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * method calls. The userspace-supplied
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * cookie identifies the message and the
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * respective reply carries the cookie
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * in cookie_reply
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_MSG_FLAGS_SYNC_REPLY: Wait for destination connection to
eceb8483e5a02e8e337486b89719a3b99cfcb7ceLennart Poettering * reply to this message. The
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * KDBUS_CMD_MSG_SEND ioctl() will block
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * until the reply is received, and
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * offset_reply in struct kdbus_msg will
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * yield the offset in the sender's pool
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * where the reply can be found.
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * This flag is only valid if
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_MSG_FLAGS_EXPECT_REPLY is set as
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * well.
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_MSG_FLAGS_NO_AUTO_START: Do not start a service, if the addressed
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * name is not currently active
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmekenum kdbus_msg_flags {
2c408cb6276e3b8d18fb4e2a81a1128d8bbaa70dLennart Poettering KDBUS_MSG_FLAGS_EXPECT_REPLY = 1ULL << 0,
2c408cb6276e3b8d18fb4e2a81a1128d8bbaa70dLennart Poettering KDBUS_MSG_FLAGS_SYNC_REPLY = 1ULL << 1,
2c408cb6276e3b8d18fb4e2a81a1128d8bbaa70dLennart Poettering KDBUS_MSG_FLAGS_NO_AUTO_START = 1ULL << 2,
2c408cb6276e3b8d18fb4e2a81a1128d8bbaa70dLennart Poettering};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
eceb8483e5a02e8e337486b89719a3b99cfcb7ceLennart Poettering/**
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * enum kdbus_payload_type - type of payload carried by message
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_PAYLOAD_KERNEL: Kernel-generated simple message
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @KDBUS_PAYLOAD_DBUS: D-Bus marshalling "DBusDBus"
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek */
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmekenum kdbus_payload_type {
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_PAYLOAD_KERNEL,
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek KDBUS_PAYLOAD_DBUS = 0x4442757344427573ULL,
56f64d95763a799ba4475daf44d8e9f72a1bd474Michal Schmidt};
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek/**
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * struct kdbus_msg - the representation of a kdbus message
2c408cb6276e3b8d18fb4e2a81a1128d8bbaa70dLennart Poettering * @size: Total size of the message
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @flags: Message flags (KDBUS_MSG_FLAGS_*), userspace → kernel
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @kernel_flags: Supported message flags, kernel → userspace
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @priority: Message queue priority value
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @dst_id: 64-bit ID of the destination connection
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @src_id: 64-bit ID of the source connection
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @payload_type: Payload type (KDBUS_PAYLOAD_*)
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @cookie: Userspace-supplied cookie, for the connection
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * to identify its messages
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * @timeout_ns: The time to wait for a message reply from the peer.
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * If there is no reply, a kernel-generated message
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * with an attached KDBUS_ITEM_REPLY_TIMEOUT item
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * is sent to @src_id. The timeout is expected in
2ca0435be9359bde3020eeb528c2a6d72ac1e0b0Zbigniew Jędrzejewski-Szmek * nanoseconds and as absolute CLOCK_MONOTONIC value.
* @cookie_reply: A reply to the requesting message with the same
* cookie. The requesting connection can match its
* request and the reply with this value
* @offset_reply: If KDBUS_MSG_FLAGS_EXPECT_REPLY, this field will
* contain the offset in the sender's pool where the
* reply is stored.
* @items: A list of kdbus_items containing the message payload
*/
struct kdbus_msg {
__u64 size;
__u64 flags;
__u64 kernel_flags;
__s64 priority;
__u64 dst_id;
__u64 src_id;
__u64 payload_type;
__u64 cookie;
union {
__u64 timeout_ns;
__u64 cookie_reply;
__u64 offset_reply;
};
struct kdbus_item items[0];
} __attribute__((aligned(8)));
/**
* enum kdbus_recv_flags - flags for de-queuing messages
* @KDBUS_RECV_PEEK: Return the next queued message without
* actually de-queuing it, and without installing
* any file descriptors or other resources. It is
* usually used to determine the activating
* connection of a bus name.
* @KDBUS_RECV_DROP: Drop and free the next queued message and all
* its resources without actually receiving it.
* @KDBUS_RECV_USE_PRIORITY: Only de-queue messages with the specified or
* higher priority (lowest values); if not set,
* the priority value is ignored.
*/
enum kdbus_recv_flags {
KDBUS_RECV_PEEK = 1ULL << 0,
KDBUS_RECV_DROP = 1ULL << 1,
KDBUS_RECV_USE_PRIORITY = 1ULL << 2,
};
/**
* struct kdbus_cmd_recv - struct to de-queue a buffered message
* @flags: KDBUS_RECV_* flags, userspace → kernel
* @kernel_flags: Supported KDBUS_RECV_* flags, kernel → userspace
* @priority: Minimum priority of the messages to de-queue. Lowest
* values have the highest priority.
* @offset: Returned offset in the pool where the message is
* stored. The user must use KDBUS_CMD_FREE to free
* the allocated memory.
* @dropped_msgs: In case the KDBUS_CMD_MSG_RECV ioctl returns
* -EOVERFLOW, this field will contain the number of
* broadcast messages that have been lost since the
* last call.
* @msg_size: Filled by the kernel with the actual message size. This
* is the full size of the slice placed at @offset. It
* includes the memory used for the kdbus_msg object, but
* also for all appended VECs. By using @msg_size and
* @offset, you can map a single message, instead of
* mapping the whole pool.
*
* This struct is used with the KDBUS_CMD_MSG_RECV ioctl.
*/
struct kdbus_cmd_recv {
__u64 flags;
__u64 kernel_flags;
__s64 priority;
union {
__u64 offset;
__u64 dropped_msgs;
};
__u64 msg_size;
} __attribute__((aligned(8)));
/**
* struct kdbus_cmd_cancel - struct to cancel a synchronously pending message
* @cookie: The cookie of the pending message
* @flags: Flags for the free command. Currently unused.
*
* This struct is used with the KDBUS_CMD_CANCEL ioctl.
*/
struct kdbus_cmd_cancel {
__u64 cookie;
__u64 flags;
} __attribute__((aligned(8)));
/**
* struct kdbus_cmd_free - struct to free a slice of memory in the pool
* @offset: The offset of the memory slice, as returned by other
* ioctls
* @flags: Flags for the free command, userspace → kernel
* @kernel_flags: Supported flags of the free command, userspace → kernel
*
* This struct is used with the KDBUS_CMD_FREE ioctl.
*/
struct kdbus_cmd_free {
__u64 offset;
__u64 flags;
__u64 kernel_flags;
} __attribute__((aligned(8)));
/**
* enum kdbus_policy_access_type - permissions of a policy record
* @_KDBUS_POLICY_ACCESS_NULL: Uninitialized/invalid
* @KDBUS_POLICY_ACCESS_USER: Grant access to a uid
* @KDBUS_POLICY_ACCESS_GROUP: Grant access to gid
* @KDBUS_POLICY_ACCESS_WORLD: World-accessible
*/
enum kdbus_policy_access_type {
_KDBUS_POLICY_ACCESS_NULL,
KDBUS_POLICY_ACCESS_USER,
KDBUS_POLICY_ACCESS_GROUP,
KDBUS_POLICY_ACCESS_WORLD,
};
/**
* enum kdbus_policy_access_flags - mode flags
* @KDBUS_POLICY_OWN: Allow to own a well-known name
* Implies KDBUS_POLICY_TALK and KDBUS_POLICY_SEE
* @KDBUS_POLICY_TALK: Allow communication to a well-known name
* Implies KDBUS_POLICY_SEE
* @KDBUS_POLICY_SEE: Allow to see a well-known name
*/
enum kdbus_policy_type {
KDBUS_POLICY_SEE = 0,
KDBUS_POLICY_TALK,
KDBUS_POLICY_OWN,
};
/**
* enum kdbus_hello_flags - flags for struct kdbus_cmd_hello
* @KDBUS_HELLO_ACCEPT_FD: The connection allows the reception 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_POLICY_HOLDER: Special-purpose connection which registers
* policy entries for a name. The provided name
* is not activated and not registered with the
* name database, it only allows unprivileged
* connections to aquire a name, talk or discover
* a service
* @KDBUS_HELLO_MONITOR: Special-purpose connection to monitor
* bus traffic
*/
enum kdbus_hello_flags {
KDBUS_HELLO_ACCEPT_FD = 1ULL << 0,
KDBUS_HELLO_ACTIVATOR = 1ULL << 1,
KDBUS_HELLO_POLICY_HOLDER = 1ULL << 2,
KDBUS_HELLO_MONITOR = 1ULL << 3,
};
/**
* enum kdbus_attach_flags - flags for metadata attachments
* @KDBUS_ATTACH_TIMESTAMP: Timestamp
* @KDBUS_ATTACH_CREDS: Credentials
* @KDBUS_ATTACH_PIDS: PIDs
* @KDBUS_ATTACH_AUXGROUPS: Auxiliary groups
* @KDBUS_ATTACH_NAMES: Well-known names
* @KDBUS_ATTACH_TID_COMM: The "comm" process identifier of the TID
* @KDBUS_ATTACH_PID_COMM: The "comm" process identifier of the PID
* @KDBUS_ATTACH_EXE: The path of the executable
* @KDBUS_ATTACH_CMDLINE: The process command line
* @KDBUS_ATTACH_CGROUP: The croup membership
* @KDBUS_ATTACH_CAPS: The process capabilities
* @KDBUS_ATTACH_SECLABEL: The security label
* @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,
KDBUS_ATTACH_CREDS = 1ULL << 1,
KDBUS_ATTACH_PIDS = 1ULL << 2,
KDBUS_ATTACH_AUXGROUPS = 1ULL << 3,
KDBUS_ATTACH_NAMES = 1ULL << 4,
KDBUS_ATTACH_TID_COMM = 1ULL << 5,
KDBUS_ATTACH_PID_COMM = 1ULL << 6,
KDBUS_ATTACH_EXE = 1ULL << 7,
KDBUS_ATTACH_CMDLINE = 1ULL << 8,
KDBUS_ATTACH_CGROUP = 1ULL << 9,
KDBUS_ATTACH_CAPS = 1ULL << 10,
KDBUS_ATTACH_SECLABEL = 1ULL << 11,
KDBUS_ATTACH_AUDIT = 1ULL << 12,
KDBUS_ATTACH_CONN_DESCRIPTION = 1ULL << 13,
_KDBUS_ATTACH_ALL = (1ULL << 14) - 1,
_KDBUS_ATTACH_ANY = ~0ULL
};
/**
* struct kdbus_cmd_hello - struct to say hello to kdbus
* @size: The total size of the structure
* @flags: Connection flags (KDBUS_HELLO_*), userspace → kernel
* @kernel_flags: Supported connection flags, kernel → userspace
* @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
* transferred (kernel → userspace)
* @id: The ID of this connection (kernel → userspace)
* @pool_size: Size of the connection's buffer where the received
* messages are placed
* @bloom: The bloom properties of the bus, specified
* by the bus creator (kernel → userspace)
* @id128: Unique 128-bit ID of the bus (kernel → userspace)
* @items: A list of items
*
* This struct is used with the KDBUS_CMD_HELLO ioctl.
*/
struct kdbus_cmd_hello {
__u64 size;
__u64 flags;
__u64 kernel_flags;
__u64 attach_flags_send;
__u64 attach_flags_recv;
__u64 bus_flags;
__u64 id;
__u64 pool_size;
struct kdbus_bloom_parameter bloom;
__u8 id128[16];
struct kdbus_item items[0];
} __attribute__((aligned(8)));
/**
* enum kdbus_make_flags - Flags for KDBUS_CMD_{BUS,EP,NS}_MAKE
* @KDBUS_MAKE_ACCESS_GROUP: Make the bus or endpoint node group-accessible
* @KDBUS_MAKE_ACCESS_WORLD: Make the bus or endpoint node world-accessible
*/
enum kdbus_make_flags {
KDBUS_MAKE_ACCESS_GROUP = 1ULL << 0,
KDBUS_MAKE_ACCESS_WORLD = 1ULL << 1,
};
/**
* struct kdbus_cmd_make - struct to make a bus, an endpoint or a domain
* @size: The total size of the struct
* @flags: Properties for the bus/ep/domain to create,
* userspace → kernel
* @kernel_flags: Supported flags for the used command, kernel → userspace
* @items: Items describing details
*
* This structure is used with the KDBUS_CMD_BUS_MAKE and
* KDBUS_CMD_ENDPOINT_MAKE ioctls.
*/
struct kdbus_cmd_make {
__u64 size;
__u64 flags;
__u64 kernel_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
* @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_ACTIVATOR: Name is owned by a activator connection
*/
enum kdbus_name_flags {
KDBUS_NAME_REPLACE_EXISTING = 1ULL << 0,
KDBUS_NAME_ALLOW_REPLACEMENT = 1ULL << 1,
KDBUS_NAME_QUEUE = 1ULL << 2,
KDBUS_NAME_IN_QUEUE = 1ULL << 3,
KDBUS_NAME_ACTIVATOR = 1ULL << 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_*),
* userspace → kernel, kernel → userspace
* @kernel_flags: Supported flags for a name entry, kernel → userspace
* @items: Item list, containing the well-known name as
* KDBUS_ITEM_NAME
*
* This structure is used with the KDBUS_CMD_NAME_ACQUIRE ioctl.
*/
struct kdbus_cmd_name {
__u64 size;
__u64 flags;
__u64 kernel_flags;
struct kdbus_item items[0];
} __attribute__((aligned(8)));
/**
* struct kdbus_name_info - struct to describe a well-known name
* @size: The total size of the struct
* @conn_flags: The flags of the owning connection (KDBUS_HELLO_*)
* @owner_id: The current owner of the name
* @items: Item list, containing the well-known name as
* KDBUS_ITEM_OWNED_NAME
*
* This structure is used as return struct for the KDBUS_CMD_NAME_LIST ioctl.
*/
struct kdbus_name_info {
__u64 size;
__u64 conn_flags;
__u64 owner_id;
struct kdbus_item items[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
* @KDBUS_NAME_LIST_ACTIVATORS: All activator connections
* @KDBUS_NAME_LIST_QUEUED: All queued-up names
*/
enum kdbus_name_list_flags {
KDBUS_NAME_LIST_UNIQUE = 1ULL << 0,
KDBUS_NAME_LIST_NAMES = 1ULL << 1,
KDBUS_NAME_LIST_ACTIVATORS = 1ULL << 2,
KDBUS_NAME_LIST_QUEUED = 1ULL << 3,
};
/**
* struct kdbus_cmd_name_list - request a list of name entries
* @flags: Flags for the query (KDBUS_NAME_LIST_*),
* userspace → kernel
* @kernel_flags: Supported flags for queries, kernel → userspace
* @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 kernel_flags;
__u64 offset;
} __attribute__((aligned(8)));
/**
* struct kdbus_name_list - information returned by KDBUS_CMD_NAME_LIST
* @size: The total size of the structure
* @names: A list of names
*
* Note that the user is responsible for freeing the allocated memory with
* the KDBUS_CMD_FREE ioctl.
*/
struct kdbus_name_list {
__u64 size;
struct kdbus_name_info names[0];
};
/**
* struct kdbus_cmd_info - struct used for KDBUS_CMD_CONN_INFO ioctl
* @size: The total size of the struct
* @flags: KDBUS_ATTACH_* flags, userspace → kernel
* @kernel_flags: Supported KDBUS_ATTACH_* flags, kernel → userspace
* @id: The 64-bit ID of the connection. If set to zero, passing
* @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_info struct result is stored. The user must
* use KDBUS_CMD_FREE to free the allocated memory.
* @items: The optional item list, containing the
* well-known name to look up as a KDBUS_ITEM_NAME.
* Only needed in case @id is zero.
*
* On success, the KDBUS_CMD_CONN_INFO ioctl will return 0 and @offset will
* tell the user the offset in the connection pool buffer at which to find the
* result in a struct kdbus_info.
*/
struct kdbus_cmd_info {
__u64 size;
__u64 flags;
__u64 kernel_flags;
__u64 id;
__u64 offset;
struct kdbus_item items[0];
} __attribute__((aligned(8)));
/**
* struct kdbus_info - information returned by KDBUS_CMD_*_INFO
* @size: The total size of the struct
* @id: The connection's or bus' 64-bit ID
* @flags: The connection's or bus' flags
* @items: A list of struct kdbus_item
*
* Note that the user is responsible for freeing the allocated memory with
* the KDBUS_CMD_FREE ioctl.
*/
struct kdbus_info {
__u64 size;
__u64 id;
__u64 flags;
struct kdbus_item items[0];
};
/**
* struct kdbus_cmd_update - update flags of a connection
* @size: The total size of the struct
* @flags: Flags for the update command, userspace → kernel
* @kernel_flags: Supported flags for this command, kernel → userspace
* @items: A list of struct kdbus_item
*
* This struct is used with the KDBUS_CMD_CONN_UPDATE ioctl.
*/
struct kdbus_cmd_update {
__u64 size;
__u64 flags;
__u64 kernel_flags;
struct kdbus_item items[0];
} __attribute__((aligned(8)));
/**
* enum kdbus_cmd_match_flags - flags to control the KDBUS_CMD_MATCH_ADD ioctl
* @KDBUS_MATCH_REPLACE: If entries with the supplied cookie already
* exists, remove them before installing the new
* matches.
*/
enum kdbus_cmd_match_flags {
KDBUS_MATCH_REPLACE = 1ULL << 0,
};
/**
* struct kdbus_cmd_match - struct to add or remove matches
* @size: The total size of the struct
* @cookie: Userspace supplied cookie. When removing, the cookie
* identifies the match to remove
* @flags: Flags for match command (KDBUS_MATCH_*),
* userspace → kernel
* @kernel_flags: Supported flags of the used command, kernel → userspace
* @items: A list of items for additional information
*
* This structure is used with the KDBUS_CMD_MATCH_ADD and
* KDBUS_CMD_MATCH_REMOVE ioctl.
*/
struct kdbus_cmd_match {
__u64 size;
__u64 cookie;
__u64 flags;
__u64 kernel_flags;
struct kdbus_item items[0];
} __attribute__((aligned(8)));
/**
* Ioctl API
* KDBUS_CMD_BUS_MAKE: After opening the "control" node, this command
* creates a new bus with the specified
* name. The bus is immediately shut down and
* cleaned up when the opened file descriptor is
* closed.
* KDBUS_CMD_ENDPOINT_MAKE: Creates a new named special endpoint to talk to
* the bus. Such endpoints usually carry a more
* restrictive policy and grant restricted access
* to specific applications.
* KDBUS_CMD_HELLO: By opening the bus node, a connection is
* created. After a HELLO the opened connection
* becomes an active peer on the bus.
* KDBUS_CMD_BYEBYE: Disconnect a connection. If there are no
* messages queued up in the connection's pool,
* the call succeeds, and the handle is rendered
* unusable. Otherwise, -EBUSY is returned without
* any further side-effects.
* KDBUS_CMD_MSG_SEND: Send a message and pass data from userspace to
* the kernel.
* KDBUS_CMD_MSG_RECV: Receive a message from the kernel which is
* placed in the receiver's pool.
* KDBUS_CMD_MSG_CANCEL: Cancel a pending request of a message that
* blocks while waiting for a reply. The parameter
* denotes the cookie of the message in flight.
* KDBUS_CMD_FREE: Release the allocated memory in the receiver's
* pool.
* 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_RELEASE: Release a well-known name the connection
* currently owns.
* KDBUS_CMD_NAME_LIST: Retrieve the list of all currently registered
* well-known and unique names.
* 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
* necessarily represent the connected process or
* the actual state of the process.
* KDBUS_CMD_CONN_UPDATE: Update the properties of a connection. Used to
* update the metadata subscription mask and
* policy.
* KDBUS_CMD_BUS_CREATOR_INFO: Retrieve information of the creator of the bus
* a connection is attached to.
* KDBUS_CMD_ENDPOINT_UPDATE: Update the properties of a custom enpoint. Used
* to update the policy.
* 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.
*/
#define KDBUS_CMD_BUS_MAKE _IOW(KDBUS_IOCTL_MAGIC, 0x00, \
struct kdbus_cmd_make)
#define KDBUS_CMD_ENDPOINT_MAKE _IOW(KDBUS_IOCTL_MAGIC, 0x10, \
struct kdbus_cmd_make)
#define KDBUS_CMD_HELLO _IOWR(KDBUS_IOCTL_MAGIC, 0x20, \
struct kdbus_cmd_hello)
#define KDBUS_CMD_BYEBYE _IO(KDBUS_IOCTL_MAGIC, 0x21) \
#define KDBUS_CMD_MSG_SEND _IOWR(KDBUS_IOCTL_MAGIC, 0x30, \
struct kdbus_msg)
#define KDBUS_CMD_MSG_RECV _IOWR(KDBUS_IOCTL_MAGIC, 0x31, \
struct kdbus_cmd_recv)
#define KDBUS_CMD_MSG_CANCEL _IOW(KDBUS_IOCTL_MAGIC, 0x32, \
struct kdbus_cmd_cancel)
#define KDBUS_CMD_FREE _IOW(KDBUS_IOCTL_MAGIC, 0x33, \
struct kdbus_cmd_free)
#define KDBUS_CMD_NAME_ACQUIRE _IOWR(KDBUS_IOCTL_MAGIC, 0x40, \
struct kdbus_cmd_name)
#define KDBUS_CMD_NAME_RELEASE _IOW(KDBUS_IOCTL_MAGIC, 0x41, \
struct kdbus_cmd_name)
#define KDBUS_CMD_NAME_LIST _IOWR(KDBUS_IOCTL_MAGIC, 0x42, \
struct kdbus_cmd_name_list)
#define KDBUS_CMD_CONN_INFO _IOWR(KDBUS_IOCTL_MAGIC, 0x50, \
struct kdbus_cmd_info)
#define KDBUS_CMD_CONN_UPDATE _IOW(KDBUS_IOCTL_MAGIC, 0x51, \
struct kdbus_cmd_update)
#define KDBUS_CMD_BUS_CREATOR_INFO _IOWR(KDBUS_IOCTL_MAGIC, 0x52, \
struct kdbus_cmd_info)
#define KDBUS_CMD_ENDPOINT_UPDATE _IOW(KDBUS_IOCTL_MAGIC, 0x61, \
struct kdbus_cmd_update)
#define KDBUS_CMD_MATCH_ADD _IOW(KDBUS_IOCTL_MAGIC, 0x70, \
struct kdbus_cmd_match)
#define KDBUS_CMD_MATCH_REMOVE _IOW(KDBUS_IOCTL_MAGIC, 0x71, \
struct kdbus_cmd_match)
#endif /* _KDBUS_UAPI_H_ */