| <?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> |