]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journal-def.h
tree-wide: remove Lennart's copyright lines
[thirdparty/systemd.git] / src / journal / journal-def.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
c2f1db8f 2#pragma once
87d2c1ff 3
3ffd4af2 4#include "sd-id128.h"
81527be1 5
87d2c1ff 6#include "macro.h"
3ffd4af2 7#include "sparse-endian.h"
87d2c1ff 8
0962e09e
LP
9/*
10 * If you change this file you probably should also change its documentation:
11 *
12 * http://www.freedesktop.org/wiki/Software/systemd/journal-files
13 *
14 */
15
87d2c1ff 16typedef struct Header Header;
8144056f 17
87d2c1ff
LP
18typedef struct ObjectHeader ObjectHeader;
19typedef union Object Object;
8144056f 20
87d2c1ff 21typedef struct DataObject DataObject;
de190aef 22typedef struct FieldObject FieldObject;
87d2c1ff
LP
23typedef struct EntryObject EntryObject;
24typedef struct HashTableObject HashTableObject;
de190aef 25typedef struct EntryArrayObject EntryArrayObject;
7560fffc 26typedef struct TagObject TagObject;
8144056f 27
87d2c1ff
LP
28typedef struct EntryItem EntryItem;
29typedef struct HashItem HashItem;
30
baed47c3 31typedef struct FSSHeader FSSHeader;
7560fffc 32
87d2c1ff 33/* Object types */
78519831 34typedef enum ObjectType {
d05089d8 35 OBJECT_UNUSED, /* also serves as "any type" or "additional context" */
0962e09e 36 OBJECT_DATA,
de190aef 37 OBJECT_FIELD,
87d2c1ff 38 OBJECT_ENTRY,
de190aef
LP
39 OBJECT_DATA_HASH_TABLE,
40 OBJECT_FIELD_HASH_TABLE,
0962e09e 41 OBJECT_ENTRY_ARRAY,
7560fffc 42 OBJECT_TAG,
de190aef 43 _OBJECT_TYPE_MAX
78519831 44} ObjectType;
87d2c1ff 45
807e17f0
LP
46/* Object flags */
47enum {
d89c8fdf
ZJS
48 OBJECT_COMPRESSED_XZ = 1 << 0,
49 OBJECT_COMPRESSED_LZ4 = 1 << 1,
50 _OBJECT_COMPRESSED_MAX
807e17f0
LP
51};
52
d89c8fdf
ZJS
53#define OBJECT_COMPRESSION_MASK (OBJECT_COMPRESSED_XZ | OBJECT_COMPRESSED_LZ4)
54
80701564 55struct ObjectHeader {
87d2c1ff 56 uint8_t type;
807e17f0
LP
57 uint8_t flags;
58 uint8_t reserved[6];
4fd052ae 59 le64_t size;
87d2c1ff 60 uint8_t payload[];
80701564 61} _packed_;
87d2c1ff 62
80701564 63struct DataObject {
87d2c1ff 64 ObjectHeader object;
4fd052ae
FC
65 le64_t hash;
66 le64_t next_hash_offset;
67 le64_t next_field_offset;
68 le64_t entry_offset; /* the first array entry we store inline */
69 le64_t entry_array_offset;
70 le64_t n_entries;
de190aef 71 uint8_t payload[];
80701564 72} _packed_;
de190aef 73
80701564 74struct FieldObject {
de190aef 75 ObjectHeader object;
4fd052ae
FC
76 le64_t hash;
77 le64_t next_hash_offset;
78 le64_t head_data_offset;
87d2c1ff 79 uint8_t payload[];
80701564 80} _packed_;
87d2c1ff 81
80701564 82struct EntryItem {
4fd052ae
FC
83 le64_t object_offset;
84 le64_t hash;
80701564 85} _packed_;
87d2c1ff 86
80701564 87struct EntryObject {
87d2c1ff 88 ObjectHeader object;
4fd052ae
FC
89 le64_t seqnum;
90 le64_t realtime;
91 le64_t monotonic;
cec736d2 92 sd_id128_t boot_id;
4fd052ae 93 le64_t xor_hash;
87d2c1ff 94 EntryItem items[];
80701564 95} _packed_;
87d2c1ff 96
80701564 97struct HashItem {
4fd052ae
FC
98 le64_t head_hash_offset;
99 le64_t tail_hash_offset;
80701564 100} _packed_;
87d2c1ff 101
80701564 102struct HashTableObject {
87d2c1ff 103 ObjectHeader object;
de190aef 104 HashItem items[];
80701564 105} _packed_;
87d2c1ff 106
80701564 107struct EntryArrayObject {
87d2c1ff 108 ObjectHeader object;
4fd052ae
FC
109 le64_t next_entry_array_offset;
110 le64_t items[];
80701564 111} _packed_;
87d2c1ff 112
7560fffc 113#define TAG_LENGTH (256/8)
8144056f 114
80701564 115struct TagObject {
8144056f 116 ObjectHeader object;
e8c61d7b
LP
117 le64_t seqnum;
118 le64_t epoch;
7560fffc 119 uint8_t tag[TAG_LENGTH]; /* SHA-256 HMAC */
80701564 120} _packed_;
8144056f 121
87d2c1ff
LP
122union Object {
123 ObjectHeader object;
124 DataObject data;
de190aef 125 FieldObject field;
87d2c1ff
LP
126 EntryObject entry;
127 HashTableObject hash_table;
de190aef 128 EntryArrayObject entry_array;
7560fffc 129 TagObject tag;
87d2c1ff
LP
130};
131
132enum {
db11ac1a
LP
133 STATE_OFFLINE = 0,
134 STATE_ONLINE = 1,
135 STATE_ARCHIVED = 2,
136 _STATE_MAX
87d2c1ff
LP
137};
138
807e17f0
LP
139/* Header flags */
140enum {
d89c8fdf
ZJS
141 HEADER_INCOMPATIBLE_COMPRESSED_XZ = 1 << 0,
142 HEADER_INCOMPATIBLE_COMPRESSED_LZ4 = 1 << 1,
807e17f0
LP
143};
144
d89c8fdf
ZJS
145#define HEADER_INCOMPATIBLE_ANY (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_COMPRESSED_LZ4)
146
349cc4a5 147#if HAVE_XZ && HAVE_LZ4
d89c8fdf 148# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_ANY
349cc4a5 149#elif HAVE_XZ
d89c8fdf 150# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_COMPRESSED_XZ
349cc4a5 151#elif HAVE_LZ4
d89c8fdf
ZJS
152# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_COMPRESSED_LZ4
153#else
154# define HEADER_INCOMPATIBLE_SUPPORTED 0
155#endif
156
8144056f 157enum {
baed47c3 158 HEADER_COMPATIBLE_SEALED = 1
8144056f
LP
159};
160
d89c8fdf 161#define HEADER_COMPATIBLE_ANY HEADER_COMPATIBLE_SEALED
349cc4a5 162#if HAVE_GCRYPT
d89c8fdf
ZJS
163# define HEADER_COMPATIBLE_SUPPORTED HEADER_COMPATIBLE_SEALED
164#else
165# define HEADER_COMPATIBLE_SUPPORTED 0
166#endif
167
7560fffc
LP
168#define HEADER_SIGNATURE ((char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
169
80701564 170struct Header {
87d2c1ff 171 uint8_t signature[8]; /* "LPKSHHRH" */
7560fffc
LP
172 le32_t compatible_flags;
173 le32_t incompatible_flags;
de190aef
LP
174 uint8_t state;
175 uint8_t reserved[7];
87d2c1ff 176 sd_id128_t file_id;
7560fffc 177 sd_id128_t machine_id;
08984293 178 sd_id128_t boot_id; /* last writer */
cec736d2 179 sd_id128_t seqnum_id;
23b0b2b2 180 le64_t header_size;
4fd052ae 181 le64_t arena_size;
0962e09e 182 le64_t data_hash_table_offset;
4fd052ae 183 le64_t data_hash_table_size;
0962e09e 184 le64_t field_hash_table_offset;
4fd052ae
FC
185 le64_t field_hash_table_size;
186 le64_t tail_object_offset;
187 le64_t n_objects;
188 le64_t n_entries;
beec0085
LP
189 le64_t tail_entry_seqnum;
190 le64_t head_entry_seqnum;
4fd052ae
FC
191 le64_t entry_array_offset;
192 le64_t head_entry_realtime;
193 le64_t tail_entry_realtime;
194 le64_t tail_entry_monotonic;
dca6219e
LP
195 /* Added in 187 */
196 le64_t n_data;
197 le64_t n_fields;
d98cc1f2
LP
198 /* Added in 189 */
199 le64_t n_tags;
2dee23eb 200 le64_t n_entry_arrays;
fb9a24b6 201
b4a855e9 202 /* Size: 240 */
80701564 203} _packed_;
7560fffc 204
baed47c3 205#define FSS_HEADER_SIGNATURE ((char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
7560fffc 206
80701564 207struct FSSHeader {
7560fffc
LP
208 uint8_t signature[8]; /* "KSHHRHLP" */
209 le32_t compatible_flags;
210 le32_t incompatible_flags;
211 sd_id128_t machine_id;
212 sd_id128_t boot_id; /* last writer */
213 le64_t header_size;
baed47c3
LP
214 le64_t start_usec;
215 le64_t interval_usec;
216 le16_t fsprg_secpar;
7560fffc 217 le16_t reserved[3];
baed47c3 218 le64_t fsprg_state_size;
80701564 219} _packed_;