summaryrefslogtreecommitdiff
path: root/src/libsystemd/sd-bus/bus-protocol.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsystemd/sd-bus/bus-protocol.h')
-rw-r--r--src/libsystemd/sd-bus/bus-protocol.h35
1 files changed, 26 insertions, 9 deletions
diff --git a/src/libsystemd/sd-bus/bus-protocol.h b/src/libsystemd/sd-bus/bus-protocol.h
index 6431dfbff8..183af89a63 100644
--- a/src/libsystemd/sd-bus/bus-protocol.h
+++ b/src/libsystemd/sd-bus/bus-protocol.h
@@ -23,21 +23,38 @@
#include <endian.h>
+#include "macro.h"
+
/* Packet header */
-struct bus_header {
+struct _packed_ bus_header {
+ /* The first four fields are identical for dbus1, and dbus2 */
uint8_t endian;
uint8_t type;
uint8_t flags;
uint8_t version;
- uint32_t body_size;
-
- /* Note that what the bus spec calls "serial" we'll call
- "cookie" instead, because we don't want to imply that the
- cookie was in any way monotonically increasing. */
- uint32_t serial;
- uint32_t fields_size;
-} _packed_;
+
+ union _packed_ {
+ /* dbus1: Used for SOCK_STREAM connections */
+ struct _packed_ {
+ uint32_t body_size;
+
+ /* Note that what the bus spec calls "serial" we'll call
+ "cookie" instead, because we don't want to imply that the
+ cookie was in any way monotonically increasing. */
+ uint32_t serial;
+ uint32_t fields_size;
+ } dbus1;
+
+ /* dbus2: Used for kdbus connections */
+ struct _packed_ {
+ uint32_t _reserved;
+ uint64_t cookie;
+ } dbus2;
+
+ /* Note that both header versions have the same size! */
+ };
+};
/* Endianness */