]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journal-def.h
update TODO
[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
81527be1
LP
26#include <systemd/sd-id128.h>
27
87d2c1ff 28#include "macro.h"
87d2c1ff
LP
29
30typedef struct Header Header;
8144056f 31
87d2c1ff
LP
32typedef struct ObjectHeader ObjectHeader;
33typedef union Object Object;
8144056f 34
87d2c1ff 35typedef struct DataObject DataObject;
de190aef 36typedef struct FieldObject FieldObject;
87d2c1ff
LP
37typedef struct EntryObject EntryObject;
38typedef struct HashTableObject HashTableObject;
de190aef 39typedef struct EntryArrayObject EntryArrayObject;
7560fffc 40typedef struct TagObject TagObject;
8144056f 41
87d2c1ff
LP
42typedef struct EntryItem EntryItem;
43typedef struct HashItem HashItem;
44
baed47c3 45typedef struct FSSHeader FSSHeader;
7560fffc 46
87d2c1ff
LP
47/* Object types */
48enum {
49 OBJECT_UNUSED,
86adf873 50 OBJECT_DATA, /* !!! */
de190aef 51 OBJECT_FIELD,
87d2c1ff 52 OBJECT_ENTRY,
de190aef
LP
53 OBJECT_DATA_HASH_TABLE,
54 OBJECT_FIELD_HASH_TABLE,
86adf873 55 OBJECT_ENTRY_ARRAY, /* !!! */
7560fffc 56 OBJECT_TAG,
de190aef 57 _OBJECT_TYPE_MAX
87d2c1ff
LP
58};
59
807e17f0
LP
60/* Object flags */
61enum {
62 OBJECT_COMPRESSED = 1
63};
64
87d2c1ff
LP
65_packed_ struct ObjectHeader {
66 uint8_t type;
807e17f0
LP
67 uint8_t flags;
68 uint8_t reserved[6];
4fd052ae 69 le64_t size;
87d2c1ff
LP
70 uint8_t payload[];
71};
72
73_packed_ struct DataObject {
74 ObjectHeader object;
4fd052ae
FC
75 le64_t hash;
76 le64_t next_hash_offset;
77 le64_t next_field_offset;
78 le64_t entry_offset; /* the first array entry we store inline */
79 le64_t entry_array_offset;
80 le64_t n_entries;
de190aef
LP
81 uint8_t payload[];
82};
83
84_packed_ struct FieldObject {
85 ObjectHeader object;
4fd052ae
FC
86 le64_t hash;
87 le64_t next_hash_offset;
88 le64_t head_data_offset;
87d2c1ff
LP
89 uint8_t payload[];
90};
91
92_packed_ struct EntryItem {
4fd052ae
FC
93 le64_t object_offset;
94 le64_t hash;
87d2c1ff
LP
95};
96
97_packed_ struct EntryObject {
98 ObjectHeader object;
4fd052ae
FC
99 le64_t seqnum;
100 le64_t realtime;
101 le64_t monotonic;
cec736d2 102 sd_id128_t boot_id;
4fd052ae 103 le64_t xor_hash;
87d2c1ff
LP
104 EntryItem items[];
105};
106
107_packed_ struct HashItem {
4fd052ae
FC
108 le64_t head_hash_offset;
109 le64_t tail_hash_offset;
87d2c1ff
LP
110};
111
112_packed_ struct HashTableObject {
113 ObjectHeader object;
de190aef 114 HashItem items[];
87d2c1ff
LP
115};
116
de190aef 117_packed_ struct EntryArrayObject {
87d2c1ff 118 ObjectHeader object;
4fd052ae
FC
119 le64_t next_entry_array_offset;
120 le64_t items[];
87d2c1ff
LP
121};
122
7560fffc 123#define TAG_LENGTH (256/8)
8144056f 124
7560fffc 125_packed_ struct TagObject {
8144056f 126 ObjectHeader object;
d98cc1f2 127 uint64_t seqnum;
14d10188 128 uint64_t epoch;
7560fffc 129 uint8_t tag[TAG_LENGTH]; /* SHA-256 HMAC */
8144056f
LP
130};
131
87d2c1ff
LP
132union Object {
133 ObjectHeader object;
134 DataObject data;
de190aef 135 FieldObject field;
87d2c1ff
LP
136 EntryObject entry;
137 HashTableObject hash_table;
de190aef 138 EntryArrayObject entry_array;
7560fffc 139 TagObject tag;
87d2c1ff
LP
140};
141
142enum {
db11ac1a
LP
143 STATE_OFFLINE = 0,
144 STATE_ONLINE = 1,
145 STATE_ARCHIVED = 2,
146 _STATE_MAX
87d2c1ff
LP
147};
148
807e17f0
LP
149/* Header flags */
150enum {
151 HEADER_INCOMPATIBLE_COMPRESSED = 1
152};
153
8144056f 154enum {
baed47c3 155 HEADER_COMPATIBLE_SEALED = 1
8144056f
LP
156};
157
7560fffc
LP
158#define HEADER_SIGNATURE ((char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
159
87d2c1ff
LP
160_packed_ struct Header {
161 uint8_t signature[8]; /* "LPKSHHRH" */
7560fffc
LP
162 le32_t compatible_flags;
163 le32_t incompatible_flags;
de190aef
LP
164 uint8_t state;
165 uint8_t reserved[7];
87d2c1ff 166 sd_id128_t file_id;
7560fffc 167 sd_id128_t machine_id;
08984293 168 sd_id128_t boot_id; /* last writer */
cec736d2 169 sd_id128_t seqnum_id;
23b0b2b2 170 le64_t header_size;
4fd052ae
FC
171 le64_t arena_size;
172 le64_t data_hash_table_offset; /* for looking up data objects */
173 le64_t data_hash_table_size;
174 le64_t field_hash_table_offset; /* for looking up field objects */
175 le64_t field_hash_table_size;
176 le64_t tail_object_offset;
177 le64_t n_objects;
178 le64_t n_entries;
beec0085
LP
179 le64_t tail_entry_seqnum;
180 le64_t head_entry_seqnum;
4fd052ae
FC
181 le64_t entry_array_offset;
182 le64_t head_entry_realtime;
183 le64_t tail_entry_realtime;
184 le64_t tail_entry_monotonic;
dca6219e
LP
185 /* Added in 187 */
186 le64_t n_data;
187 le64_t n_fields;
d98cc1f2
LP
188 /* Added in 189 */
189 le64_t n_tags;
2dee23eb 190 le64_t n_entry_arrays;
fb9a24b6
LP
191
192 /* Size: 224 */
87d2c1ff 193};
7560fffc 194
baed47c3 195#define FSS_HEADER_SIGNATURE ((char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
7560fffc 196
baed47c3 197_packed_ struct FSSHeader {
7560fffc
LP
198 uint8_t signature[8]; /* "KSHHRHLP" */
199 le32_t compatible_flags;
200 le32_t incompatible_flags;
201 sd_id128_t machine_id;
202 sd_id128_t boot_id; /* last writer */
203 le64_t header_size;
baed47c3
LP
204 le64_t start_usec;
205 le64_t interval_usec;
206 le16_t fsprg_secpar;
7560fffc 207 le16_t reserved[3];
baed47c3 208 le64_t fsprg_state_size;
7560fffc 209};