blob: 09f8b903116fa866e0549a19c1e0014353dfa8af [file] [log] [blame]
<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<refentry id="kdbus">
<refentryinfo>
<title>kdbus.item</title>
<productname>kdbus item</productname>
</refentryinfo>
<refmeta>
<refentrytitle>kdbus.item</refentrytitle>
<manvolnum>7</manvolnum>
</refmeta>
<refnamediv>
<refname>kdbus.item</refname>
<refpurpose>kdbus item structure, layout and usage</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<para>
To flexibly augment transport structures, data blobs of type
<type>struct kdbus_item</type> can be attached to the structs passed
into the ioctls. Some ioctls make items of certain types mandatory,
others are optional. Items that are unsupported by ioctls they are
attached to will cause the ioctl to fail with <varname>errno</varname>
set to <constant>EINVAL</constant>.
Items are also used for information stored in a connection's
<emphasis>pool</emphasis>, such as received messages, name lists or
requested connection or bus owner information. Depending on the type of
an item, its total size is either fixed or variable.
</para>
<refsect2>
<title>Chaining items</title>
<para>
Whenever items are used as part of the kdbus kernel API, they are
embedded in structs that are embedded inside structs that themselves
include a size field containing the overall size of the structure.
This allows multiple items to be chained up, and an item iterator
(see below) is capable of detecting the end of an item chain.
</para>
</refsect2>
<refsect2>
<title>Alignment</title>
<para>
The kernel expects all items to be aligned to 8-byte boundaries.
Unaligned items will cause the ioctl they are used with to fail
with <varname>errno</varname> set to <constant>EINVAL</constant>.
An item that has an unaligned size itself hence needs to be padded
if it is followed by another item.
</para>
</refsect2>
<refsect2>
<title>Iterating items</title>
<para>
A simple iterator would iterate over the items until the items have
reached the embedding structure's overall size. An example
implementation is shown below.
</para>
<programlisting><![CDATA[
#define KDBUS_ALIGN8(val) (((val) + 7) & ~7)
#define KDBUS_ITEM_NEXT(item) \
(typeof(item))(((uint8_t *)item) + KDBUS_ALIGN8((item)->size))
#define KDBUS_ITEM_FOREACH(item, head, first) \
for (item = (head)->first; \
((uint8_t *)(item) < (uint8_t *)(head) + (head)->size) && \
((uint8_t *)(item) >= (uint8_t *)(head)); \
item = KDBUS_ITEM_NEXT(item))
]]></programlisting>
</refsect2>
</refsect1>
<refsect1>
<title>Item layout</title>
<para>
A <type>struct kdbus_item</type> consists of a
<varname>size</varname> field, describing its overall size, and a
<varname>type</varname> field, both 64 bit wide. They are followed by
a union to store information that is specific to the item's type.
The struct layout is shown below.
</para>
<programlisting>
struct kdbus_item {
__u64 size;
__u64 type;
/* item payload - see below */
union {
__u8 data[0];
__u32 data32[0];
__u64 data64[0];
char str[0];
__u64 id;
struct kdbus_vec vec;
struct kdbus_creds creds;
struct kdbus_pids pids;
struct kdbus_audit audit;
struct kdbus_caps caps;
struct kdbus_timestamp timestamp;
struct kdbus_name name;
struct kdbus_bloom_parameter bloom_parameter;
struct kdbus_bloom_filter bloom_filter;
struct kdbus_memfd memfd;
int fds[0];
struct kdbus_notify_name_change name_change;
struct kdbus_notify_id_change id_change;
struct kdbus_policy_access policy_access;
};
};
</programlisting>
<para>
<type>struct kdbus_item</type> should never be used to allocate
an item instance, as its size may grow in future releases of the API.
Instead, it should be manually assembled by storing the
<varname>size</varname>, <varname>type</varname> and payload to a
struct of its own.
</para>
</refsect1>
<refsect1>
<title>Item types</title>
<refsect2>
<title>Negotiation item</title>
<variablelist>
<varlistentry>
<term><constant>KDBUS_ITEM_NEGOTIATE</constant></term>
<listitem><para>
With this item is attached to any ioctl, programs can
<emphasis>probe</emphasis> the kernel for known item types.
The item carries an array of <type>uint64_t</type> values in
<varname>item.data64</varname>, each set to an item type to
probe. The kernel will reset each member of this array that is
not recognized as valid item type to <constant>0</constant>.
This way, users can negotiate kernel features at start-up to
keep newer userspace compatible with older kernels. This item
is never attached by the kernel in response to any command.
</para></listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Command specific items</title>
<variablelist>
<varlistentry>
<term><constant>KDBUS_ITEM_PAYLOAD_VEC</constant></term>
<term><constant>KDBUS_ITEM_PAYLOAD_OFF</constant></term>
<listitem><para>
Messages are directly copied by the sending process into the
receiver's
<citerefentry>
<refentrytitle>kdbus.pool</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>.
This way, two peers can exchange data by effectively doing a
single-copy from one process to another; the kernel will not buffer
the data anywhere else. <constant>KDBUS_ITEM_PAYLOAD_VEC</constant>
is used when <emphasis>sending</emphasis> message. The item
references a memory address when the payload data can be found.
<constant>KDBUS_ITEM_PAYLOAD_OFF</constant> is used when messages
are <emphasis>received</emphasis>, and the
<constant>offset</constant> value describes the offset inside the
receiving connection's
<citerefentry>
<refentrytitle>kdbus.pool</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
where the message payload can be found. See
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on passing of payload data along with a
message.
<programlisting>
struct kdbus_vec {
__u64 size;
union {
__u64 address;
__u64 offset;
};
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_PAYLOAD_MEMFD</constant></term>
<listitem><para>
Transports a file descriptor of a <emphasis>memfd</emphasis> in
<type>struct kdbus_memfd</type> in <varname>item.memfd</varname>.
The <varname>size</varname> field has to match the actual size of
the memfd that was specified when it was created. The
<varname>start</varname> parameter denotes the offset inside the
memfd at which the referenced payload starts. See
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on passing of payload data along with a
message.
<programlisting>
struct kdbus_memfd {
__u64 start;
__u64 size;
int fd;
__u32 __pad;
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_FDS</constant></term>
<listitem><para>
Contains an array of <emphasis>file descriptors</emphasis>.
When used with <constant>KDBUS_CMD_SEND</constant>, the values of
this array must be filled with valid file descriptor numbers.
When received as item attached to a message, the array will
contain the numbers of the installed file descriptors, or
<constant>-1</constant> in case an error occurred.
In either case, the number of entries in the array is derived from
the item's total size. See
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information.
</para></listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Items specific to some commands</title>
<variablelist>
<varlistentry>
<term><constant>KDBUS_ITEM_CANCEL_FD</constant></term>
<listitem><para>
Transports a file descriptor that can be used to cancel a
synchronous <constant>KDBUS_CMD_SEND</constant> operation by
writing to it. The file descriptor is stored in
<varname>item.fd[0]</varname>. The item may only contain one
file descriptor. See
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on this item and how to use it.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_BLOOM_PARAMETER</constant></term>
<listitem><para>
Contains a set of <emphasis>bloom parameters</emphasis> as
<type>struct kdbus_bloom_parameter</type> in
<varname>item.bloom_parameter</varname>.
The item is passed from userspace to kernel during the
<constant>KDBUS_CMD_BUS_MAKE</constant> ioctl, and returned
verbatim when <constant>KDBUS_CMD_HELLO</constant> is called.
The kernel does not use the bloom parameters, but they need to
be known by each connection on the bus in order to define the
bloom filter hash details. See
<citerefentry>
<refentrytitle>kdbus.match</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on matching and bloom filters.
<programlisting>
struct kdbus_bloom_parameter {
__u64 size;
__u64 n_hash;
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_BLOOM_FILTER</constant></term>
<listitem><para>
Carries a <emphasis>bloom filter</emphasis> as
<type>struct kdbus_bloom_filter</type> in
<varname>item.bloom_filter</varname>. It is mandatory to send this
item attached to a <type>struct kdbus_msg</type>, in case the
message is a signal. This item is never transported from kernel to
userspace. See
<citerefentry>
<refentrytitle>kdbus.match</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on matching and bloom filters.
<programlisting>
struct kdbus_bloom_filter {
__u64 generation;
__u64 data[0];
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_BLOOM_MASK</constant></term>
<listitem><para>
Transports a <emphasis>bloom mask</emphasis> as binary data blob
stored in <varname>item.data</varname>. This item is used to
describe a match into a connection's match database. See
<citerefentry>
<refentrytitle>kdbus.match</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on matching and bloom filters.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_DST_NAME</constant></term>
<listitem><para>
Contains a <emphasis>well-known name</emphasis> to send a
message to, as null-terminated string in
<varname>item.str</varname>. This item is used with
<constant>KDBUS_CMD_SEND</constant>. See
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on how to send a message.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_MAKE_NAME</constant></term>
<listitem><para>
Contains a <emphasis>bus name</emphasis> or
<emphasis>endpoint name</emphasis>, stored as null-terminated
string in <varname>item.str</varname>. This item is sent from
userspace to kernel when buses or endpoints are created, and
returned back to userspace when the bus creator information is
queried. See
<citerefentry>
<refentrytitle>kdbus.bus</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
and
<citerefentry>
<refentrytitle>kdbus.endpoint</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_ATTACH_FLAGS_SEND</constant></term>
<term><constant>KDBUS_ITEM_ATTACH_FLAGS_RECV</constant></term>
<listitem><para>
Contains a set of <emphasis>attach flags</emphasis> at
<emphasis>send</emphasis> or <emphasis>receive</emphasis> time. See
<citerefentry>
<refentrytitle>kdbus</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>,
<citerefentry>
<refentrytitle>kdbus.bus</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry> and
<citerefentry>
<refentrytitle>kdbus.connection</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on attach flags.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_ID</constant></term>
<listitem><para>
Transports a connection's <emphasis>numerical ID</emphasis> of
a connection as <type>uint64_t</type> value in
<varname>item.id</varname>.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_NAME</constant></term>
<listitem><para>
Transports a name associated with the
<emphasis>name registry</emphasis> as null-terminated string as
<type>struct kdbus_name</type> in
<varname>item.name</varname>. The <varname>flags</varname>
contains the flags of the name. See
<citerefentry>
<refentrytitle>kdbus.name</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on how to access the name registry of a bus.
<programlisting>
struct kdbus_name {
__u64 flags;
char name[0];
};
</programlisting>
</para></listitem>
</varlistentry>
</variablelist>
</refsect2>
<refsect2>
<title>Items attached by the kernel as metadata</title>
<variablelist>
<varlistentry>
<term><constant>KDBUS_ITEM_TIMESTAMP</constant></term>
<listitem><para>
Contains both the <emphasis>monotonic</emphasis> and the
<emphasis>realtime</emphasis> timestamp, taken when the message
was processed on the kernel side.
Stored as <type>struct kdbus_timestamp</type> in
<varname>item.timestamp</varname>.
<programlisting>
struct kdbus_timestamp {
__u64 seqnum;
__u64 monotonic_ns;
__u64 realtime_ns;
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_CREDS</constant></term>
<listitem><para>
Contains a set of <emphasis>user</emphasis> and
<emphasis>group</emphasis> information as 32-bit values, in the
usual four flavors: real, effective, saved and filesystem related.
Stored as <type>struct kdbus_creds</type> in
<varname>item.creds</varname>.
<programlisting>
struct kdbus_creds {
__u32 uid;
__u32 euid;
__u32 suid;
__u32 fsuid;
__u32 gid;
__u32 egid;
__u32 sgid;
__u32 fsgid;
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_PIDS</constant></term>
<listitem><para>
Contains the <emphasis>PID</emphasis>, <emphasis>TID</emphasis>
and <emphasis>parent PID (PPID)</emphasis> of a remote peer.
Stored as <type>struct kdbus_pids</type> in
<varname>item.pids</varname>.
<programlisting>
struct kdbus_pids {
__u64 pid;
__u64 tid;
__u64 ppid;
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_AUXGROUPS</constant></term>
<listitem><para>
Contains the <emphasis>auxiliary (supplementary) groups</emphasis>
a remote peer is a member of, stored as array of
<type>uint32_t</type> values in <varname>item.data32</varname>.
The array length can be determined by looking at the item's total
size, subtracting the size of the header and dividing the
remainder by <constant>sizeof(uint32_t)</constant>.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_OWNED_NAME</constant></term>
<listitem><para>
Contains a <emphasis>well-known name</emphasis> currently owned
by a connection. The name is stored as null-terminated string in
<varname>item.str</varname>. Its length can also be derived from
the item's total size.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_TID_COMM</constant> [*]</term>
<listitem><para>
Contains the <emphasis>comm</emphasis> string of a task's
<emphasis>TID</emphasis> (thread ID), stored as null-terminated
string in <varname>item.str</varname>. Its length can also be
derived from the item's total size. Receivers of this item should
not use its contents for any kind of security measures. See below.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_PID_COMM</constant> [*]</term>
<listitem><para>
Contains the <emphasis>comm</emphasis> string of a task's
<emphasis>PID</emphasis> (process ID), stored as null-terminated
string in <varname>item.str</varname>. Its length can also be
derived from the item's total size. Receivers of this item should
not use its contents for any kind of security measures. See below.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_EXE</constant> [*]</term>
<listitem><para>
Contains the <emphasis>path to the executable</emphasis> of a task,
stored as null-terminated string in <varname>item.str</varname>. Its
length can also be derived from the item's total size. Receivers of
this item should not use its contents for any kind of security
measures. See below.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_CMDLINE</constant> [*]</term>
<listitem><para>
Contains the <emphasis>command line arguments</emphasis> of a
task, stored as an <emphasis>array</emphasis> of null-terminated
strings in <varname>item.str</varname>. The total length of all
strings in the array can be derived from the item's total size.
Receivers of this item should not use its contents for any kind
of security measures. See below.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_CGROUP</constant></term>
<listitem><para>
Contains the <emphasis>cgroup path</emphasis> of a task, stored
as null-terminated string in <varname>item.str</varname>. Its
length can also be derived from the item's total size.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_CAPS</constant></term>
<listitem><para>
Contains sets of <emphasis>capabilities</emphasis>, stored as
<type>struct kdbus_caps</type> in <varname>item.caps</varname>.
As the item size may increase in the future, programs should be
written in a way that it takes
<varname>item.caps.last_cap</varname> into account, and derive
the number of sets and rows from the item size and the reported
number of valid capability bits.
<programlisting>
struct kdbus_caps {
__u32 last_cap;
__u32 caps[0];
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_SECLABEL</constant></term>
<listitem><para>
Contains the <emphasis>LSM label</emphasis> of a task, stored as
null-terminated string in <varname>item.str</varname>. Its length
can also be derived from the item's total size.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_AUDIT</constant></term>
<listitem><para>
Contains the audit <emphasis>sessionid</emphasis> and
<emphasis>loginuid</emphasis> of a task, stored as
<type>struct kdbus_audit</type> in
<varname>item.audit</varname>.
<programlisting>
struct kdbus_audit {
__u32 sessionid;
__u32 loginuid;
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_CONN_DESCRIPTION</constant></term>
<listitem><para>
Contains the <emphasis>connection description</emphasis>, as set
by <constant>KDBUS_CMD_HELLO</constant> or
<constant>KDBUS_CMD_CONN_UPDATE</constant>, stored as
null-terminated string in <varname>item.str</varname>. Its length
can also be derived from the item's total size.
</para></listitem>
</varlistentry>
</variablelist>
<para>
All metadata is automatically translated into the
<emphasis>namespaces</emphasis> of the task that receives them. See
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information.
</para>
<para>
[*] Note that the content stored in metadata items of type
<constant>KDBUS_ITEM_TID_COMM</constant>,
<constant>KDBUS_ITEM_PID_COMM</constant>,
<constant>KDBUS_ITEM_EXE</constant> and
<constant>KDBUS_ITEM_CMDLINE</constant>
can easily be tampered by the sending tasks. Therefore, they should
<emphasis>not</emphasis> be used for any sort of security relevant
assumptions. The only reason they are transmitted is to let
receivers know about details that were set when metadata was
collected, even though the task they were collected from is not
active any longer when the items are received.
</para>
</refsect2>
<refsect2>
<title>Items used for policy entries, matches and notifications</title>
<variablelist>
<varlistentry>
<term><constant>KDBUS_ITEM_POLICY_ACCESS</constant></term>
<listitem><para>
This item describes a <emphasis>policy access</emphasis> entry to
access the policy database of a
<citerefentry>
<refentrytitle>kdbus.bus</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry> or
<citerefentry>
<refentrytitle>kdbus.endpoint</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>.
Please refer to
<citerefentry>
<refentrytitle>kdbus.policy</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on the policy database and how to access it.
<programlisting>
struct kdbus_policy_access {
__u64 type;
__u64 access;
__u64 id;
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_ID_ADD</constant></term>
<term><constant>KDBUS_ITEM_ID_REMOVE</constant></term>
<listitem><para>
This item is sent as attachment to a
<emphasis>kernel notification</emphasis> and indicates that a
new connection was created on the bus, or that a connection was
disconnected, respectively. It stores a
<type>struct kdbus_notify_id_change</type> in
<varname>item.id_change</varname>.
The <varname>id</varname> field contains the numeric ID of the
connection that was added or removed, and <varname>flags</varname>
is set to the connection flags, as passed by
<constant>KDBUS_CMD_HELLO</constant>. See
<citerefentry>
<refentrytitle>kdbus.match</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
and
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on matches and notification messages.
<programlisting>
struct kdbus_notify_id_change {
__u64 id;
__u64 flags;
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_NAME_ADD</constant></term>
<term><constant>KDBUS_ITEM_NAME_REMOVE</constant></term>
<term><constant>KDBUS_ITEM_NAME_CHANGE</constant></term>
<listitem><para>
This item is sent as attachment to a
<emphasis>kernel notification</emphasis> and indicates that a
<emphasis>well-known name</emphasis> appeared, disappeared or
transferred to another owner on the bus. It stores a
<type>struct kdbus_notify_name_change</type> in
<varname>item.name_change</varname>.
<varname>old_id</varname> describes the former owner of the name
and is set to <constant>0</constant> values in case of
<constant>KDBUS_ITEM_NAME_ADD</constant>.
<varname>new_id</varname> describes the new owner of the name and
is set to <constant>0</constant> values in case of
<constant>KDBUS_ITEM_NAME_REMOVE</constant>.
The <varname>name</varname> field contains the well-known name the
notification is about, as null-terminated string. See
<citerefentry>
<refentrytitle>kdbus.match</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
and
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information on matches and notification messages.
<programlisting>
struct kdbus_notify_name_change {
struct kdbus_notify_id_change old_id;
struct kdbus_notify_id_change new_id;
char name[0];
};
</programlisting>
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_REPLY_TIMEOUT</constant></term>
<listitem><para>
This item is sent as attachment to a
<emphasis>kernel notification</emphasis>. It informs the receiver
that an expected reply to a message was not received in time.
The remote peer ID and the message cookie are stored in the message
header. See
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information about messages, timeouts and notifications.
</para></listitem>
</varlistentry>
<varlistentry>
<term><constant>KDBUS_ITEM_REPLY_DEAD</constant></term>
<listitem><para>
This item is sent as attachment to a
<emphasis>kernel notification</emphasis>. It informs the receiver
that a remote connection a reply is expected from was disconnected
before that reply was sent. The remote peer ID and the message
cookie are stored in the message header. See
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
for more information about messages, timeouts and notifications.
</para></listitem>
</varlistentry>
</variablelist>
</refsect2>
</refsect1>
<refsect1>
<title>See Also</title>
<simplelist type="inline">
<member>
<citerefentry>
<refentrytitle>kdbus</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
</member>
<member>
<citerefentry>
<refentrytitle>kdbus.bus</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
</member>
<member>
<citerefentry>
<refentrytitle>kdbus.connection</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
</member>
<member>
<citerefentry>
<refentrytitle>kdbus.endpoint</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
</member>
<member>
<citerefentry>
<refentrytitle>kdbus.fs</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
</member>
<member>
<citerefentry>
<refentrytitle>kdbus.message</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
</member>
<member>
<citerefentry>
<refentrytitle>kdbus.name</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
</member>
<member>
<citerefentry>
<refentrytitle>kdbus.pool</refentrytitle>
<manvolnum>7</manvolnum>
</citerefentry>
</member>
<member>
<citerefentry>
<refentrytitle>memfd_create</refentrytitle>
<manvolnum>2</manvolnum>
</citerefentry>
</member>
</simplelist>
</refsect1>
</refentry>