]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journal-def.h
journal: consistently use OBJECT_<type> names instead of numbers
[thirdparty/systemd.git] / src / journal / journal-def.h
CommitLineData
87d2c1ff
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
c2f1db8f 3#pragma once
87d2c1ff
LP
4
5/***
6 This file is part of systemd.
7
8 Copyright 2011 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
87d2c1ff
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
87d2c1ff 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
4fd052ae 24#include "sparse-endian.h"
87d2c1ff 25
73f860db 26#include "systemd/sd-id128.h"
81527be1 27
87d2c1ff 28#include "macro.h"
87d2c1ff 29
0962e09e
LP
30/*
31 * If you change this file you probably should also change its documentation:
32 *
33 * http://www.freedesktop.org/wiki/Software/systemd/journal-files
34 *
35 */
36
87d2c1ff 37typedef struct Header Header;
8144056f 38
87d2c1ff
LP
39typedef struct ObjectHeader ObjectHeader;
40typedef union Object Object;
8144056f 41
87d2c1ff 42typedef struct DataObject DataObject;
de190aef 43typedef struct FieldObject FieldObject;
87d2c1ff
LP
44typedef struct EntryObject EntryObject;
45typedef struct HashTableObject HashTableObject;
de190aef 46typedef struct EntryArrayObject EntryArrayObject;
7560fffc 47typedef struct TagObject TagObject;
8144056f 48
87d2c1ff
LP
49typedef struct EntryItem EntryItem;
50typedef struct HashItem HashItem;
51
baed47c3 52typedef struct FSSHeader FSSHeader;
7560fffc 53
87d2c1ff
LP
54/* Object types */
55enum {
d05089d8 56 OBJECT_UNUSED, /* also serves as "any type" or "additional context" */
0962e09e 57 OBJECT_DATA,
de190aef 58 OBJECT_FIELD,
87d2c1ff 59 OBJECT_ENTRY,
de190aef
LP
60 OBJECT_DATA_HASH_TABLE,
61 OBJECT_FIELD_HASH_TABLE,
0962e09e 62 OBJECT_ENTRY_ARRAY,
7560fffc 63 OBJECT_TAG,
de190aef 64 _OBJECT_TYPE_MAX
87d2c1ff
LP
65};
66
807e17f0
LP
67/* Object flags */
68enum {
d89c8fdf
ZJS
69 OBJECT_COMPRESSED_XZ = 1 << 0,
70 OBJECT_COMPRESSED_LZ4 = 1 << 1,
71 _OBJECT_COMPRESSED_MAX
807e17f0
LP
72};
73
d89c8fdf
ZJS
74#define OBJECT_COMPRESSION_MASK (OBJECT_COMPRESSED_XZ | OBJECT_COMPRESSED_LZ4)
75
80701564 76struct ObjectHeader {
87d2c1ff 77 uint8_t type;
807e17f0
LP
78 uint8_t flags;
79 uint8_t reserved[6];
4fd052ae 80 le64_t size;
87d2c1ff 81 uint8_t payload[];
80701564 82} _packed_;
87d2c1ff 83
80701564 84struct DataObject {
87d2c1ff 85 ObjectHeader object;
4fd052ae
FC
86 le64_t hash;
87 le64_t next_hash_offset;
88 le64_t next_field_offset;
89 le64_t entry_offset; /* the first array entry we store inline */
90 le64_t entry_array_offset;
91 le64_t n_entries;
de190aef 92 uint8_t payload[];
80701564 93} _packed_;
de190aef 94
80701564 95struct FieldObject {
de190aef 96 ObjectHeader object;
4fd052ae
FC
97 le64_t hash;
98 le64_t next_hash_offset;
99 le64_t head_data_offset;
87d2c1ff 100 uint8_t payload[];
80701564 101} _packed_;
87d2c1ff 102
80701564 103struct EntryItem {
4fd052ae
FC
104 le64_t object_offset;
105 le64_t hash;
80701564 106} _packed_;
87d2c1ff 107
80701564 108struct EntryObject {
87d2c1ff 109 ObjectHeader object;
4fd052ae
FC
110 le64_t seqnum;
111 le64_t realtime;
112 le64_t monotonic;
cec736d2 113 sd_id128_t boot_id;
4fd052ae 114 le64_t xor_hash;
87d2c1ff 115 EntryItem items[];
80701564 116} _packed_;
87d2c1ff 117
80701564 118struct HashItem {
4fd052ae
FC
119 le64_t head_hash_offset;
120 le64_t tail_hash_offset;
80701564 121} _packed_;
87d2c1ff 122
80701564 123struct HashTableObject {
87d2c1ff 124 ObjectHeader object;
de190aef 125 HashItem items[];
80701564 126} _packed_;
87d2c1ff 127
80701564 128struct EntryArrayObject {
87d2c1ff 129 ObjectHeader object;
4fd052ae
FC
130 le64_t next_entry_array_offset;
131 le64_t items[];
80701564 132} _packed_;
87d2c1ff 133
7560fffc 134#define TAG_LENGTH (256/8)
8144056f 135
80701564 136struct TagObject {
8144056f 137 ObjectHeader object;
e8c61d7b
LP
138 le64_t seqnum;
139 le64_t epoch;
7560fffc 140 uint8_t tag[TAG_LENGTH]; /* SHA-256 HMAC */
80701564 141} _packed_;
8144056f 142
87d2c1ff
LP
143union Object {
144 ObjectHeader object;
145 DataObject data;
de190aef 146 FieldObject field;
87d2c1ff
LP
147 EntryObject entry;
148 HashTableObject hash_table;
de190aef 149 EntryArrayObject entry_array;
7560fffc 150 TagObject tag;
87d2c1ff
LP
151};
152
153enum {
db11ac1a
LP
154 STATE_OFFLINE = 0,
155 STATE_ONLINE = 1,
156 STATE_ARCHIVED = 2,
157 _STATE_MAX
87d2c1ff
LP
158};
159
807e17f0
LP
160/* Header flags */
161enum {
d89c8fdf
ZJS
162 HEADER_INCOMPATIBLE_COMPRESSED_XZ = 1 << 0,
163 HEADER_INCOMPATIBLE_COMPRESSED_LZ4 = 1 << 1,
807e17f0
LP
164};
165
d89c8fdf
ZJS
166#define HEADER_INCOMPATIBLE_ANY (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_COMPRESSED_LZ4)
167
168#if defined(HAVE_XZ) && defined(HAVE_LZ4)
169# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_ANY
170#elif defined(HAVE_XZ)
171# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_COMPRESSED_XZ
172#elif defined(HAVE_LZ4)
173# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_COMPRESSED_LZ4
174#else
175# define HEADER_INCOMPATIBLE_SUPPORTED 0
176#endif
177
8144056f 178enum {
baed47c3 179 HEADER_COMPATIBLE_SEALED = 1
8144056f
LP
180};
181
d89c8fdf 182#define HEADER_COMPATIBLE_ANY HEADER_COMPATIBLE_SEALED
92261977 183#ifdef HAVE_GCRYPT
d89c8fdf
ZJS
184# define HEADER_COMPATIBLE_SUPPORTED HEADER_COMPATIBLE_SEALED
185#else
186# define HEADER_COMPATIBLE_SUPPORTED 0
187#endif
188
7560fffc
LP
189#define HEADER_SIGNATURE ((char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
190
80701564 191struct Header {
87d2c1ff 192 uint8_t signature[8]; /* "LPKSHHRH" */
7560fffc
LP
193 le32_t compatible_flags;
194 le32_t incompatible_flags;
de190aef
LP
195 uint8_t state;
196 uint8_t reserved[7];
87d2c1ff 197 sd_id128_t file_id;
7560fffc 198 sd_id128_t machine_id;
08984293 199 sd_id128_t boot_id; /* last writer */
cec736d2 200 sd_id128_t seqnum_id;
23b0b2b2 201 le64_t header_size;
4fd052ae 202 le64_t arena_size;
0962e09e 203 le64_t data_hash_table_offset;
4fd052ae 204 le64_t data_hash_table_size;
0962e09e 205 le64_t field_hash_table_offset;
4fd052ae
FC
206 le64_t field_hash_table_size;
207 le64_t tail_object_offset;
208 le64_t n_objects;
209 le64_t n_entries;
beec0085
LP
210 le64_t tail_entry_seqnum;
211 le64_t head_entry_seqnum;
4fd052ae
FC
212 le64_t entry_array_offset;
213 le64_t head_entry_realtime;
214 le64_t tail_entry_realtime;
215 le64_t tail_entry_monotonic;
dca6219e
LP
216 /* Added in 187 */
217 le64_t n_data;
218 le64_t n_fields;
d98cc1f2
LP
219 /* Added in 189 */
220 le64_t n_tags;
2dee23eb 221 le64_t n_entry_arrays;
fb9a24b6
LP
222
223 /* Size: 224 */
80701564 224} _packed_;
7560fffc 225
baed47c3 226#define FSS_HEADER_SIGNATURE ((char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
7560fffc 227
80701564 228struct FSSHeader {
7560fffc
LP
229 uint8_t signature[8]; /* "KSHHRHLP" */
230 le32_t compatible_flags;
231 le32_t incompatible_flags;
232 sd_id128_t machine_id;
233 sd_id128_t boot_id; /* last writer */
234 le64_t header_size;
baed47c3
LP
235 le64_t start_usec;
236 le64_t interval_usec;
237 le16_t fsprg_secpar;
7560fffc 238 le16_t reserved[3];
baed47c3 239 le64_t fsprg_state_size;
80701564 240} _packed_;