]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journal-def.h
util: replace readdir_r with readdir
[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 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 {
56 OBJECT_UNUSED,
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 {
69 OBJECT_COMPRESSED = 1
70};
71
80701564 72struct ObjectHeader {
87d2c1ff 73 uint8_t type;
807e17f0
LP
74 uint8_t flags;
75 uint8_t reserved[6];
4fd052ae 76 le64_t size;
87d2c1ff 77 uint8_t payload[];
80701564 78} _packed_;
87d2c1ff 79
80701564 80struct DataObject {
87d2c1ff 81 ObjectHeader object;
4fd052ae
FC
82 le64_t hash;
83 le64_t next_hash_offset;
84 le64_t next_field_offset;
85 le64_t entry_offset; /* the first array entry we store inline */
86 le64_t entry_array_offset;
87 le64_t n_entries;
de190aef 88 uint8_t payload[];
80701564 89} _packed_;
de190aef 90
80701564 91struct FieldObject {
de190aef 92 ObjectHeader object;
4fd052ae
FC
93 le64_t hash;
94 le64_t next_hash_offset;
95 le64_t head_data_offset;
87d2c1ff 96 uint8_t payload[];
80701564 97} _packed_;
87d2c1ff 98
80701564 99struct EntryItem {
4fd052ae
FC
100 le64_t object_offset;
101 le64_t hash;
80701564 102} _packed_;
87d2c1ff 103
80701564 104struct EntryObject {
87d2c1ff 105 ObjectHeader object;
4fd052ae
FC
106 le64_t seqnum;
107 le64_t realtime;
108 le64_t monotonic;
cec736d2 109 sd_id128_t boot_id;
4fd052ae 110 le64_t xor_hash;
87d2c1ff 111 EntryItem items[];
80701564 112} _packed_;
87d2c1ff 113
80701564 114struct HashItem {
4fd052ae
FC
115 le64_t head_hash_offset;
116 le64_t tail_hash_offset;
80701564 117} _packed_;
87d2c1ff 118
80701564 119struct HashTableObject {
87d2c1ff 120 ObjectHeader object;
de190aef 121 HashItem items[];
80701564 122} _packed_;
87d2c1ff 123
80701564 124struct EntryArrayObject {
87d2c1ff 125 ObjectHeader object;
4fd052ae
FC
126 le64_t next_entry_array_offset;
127 le64_t items[];
80701564 128} _packed_;
87d2c1ff 129
7560fffc 130#define TAG_LENGTH (256/8)
8144056f 131
80701564 132struct TagObject {
8144056f 133 ObjectHeader object;
e8c61d7b
LP
134 le64_t seqnum;
135 le64_t epoch;
7560fffc 136 uint8_t tag[TAG_LENGTH]; /* SHA-256 HMAC */
80701564 137} _packed_;
8144056f 138
87d2c1ff
LP
139union Object {
140 ObjectHeader object;
141 DataObject data;
de190aef 142 FieldObject field;
87d2c1ff
LP
143 EntryObject entry;
144 HashTableObject hash_table;
de190aef 145 EntryArrayObject entry_array;
7560fffc 146 TagObject tag;
87d2c1ff
LP
147};
148
149enum {
db11ac1a
LP
150 STATE_OFFLINE = 0,
151 STATE_ONLINE = 1,
152 STATE_ARCHIVED = 2,
153 _STATE_MAX
87d2c1ff
LP
154};
155
807e17f0
LP
156/* Header flags */
157enum {
158 HEADER_INCOMPATIBLE_COMPRESSED = 1
159};
160
8144056f 161enum {
baed47c3 162 HEADER_COMPATIBLE_SEALED = 1
8144056f
LP
163};
164
7560fffc
LP
165#define HEADER_SIGNATURE ((char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
166
80701564 167struct Header {
87d2c1ff 168 uint8_t signature[8]; /* "LPKSHHRH" */
7560fffc
LP
169 le32_t compatible_flags;
170 le32_t incompatible_flags;
de190aef
LP
171 uint8_t state;
172 uint8_t reserved[7];
87d2c1ff 173 sd_id128_t file_id;
7560fffc 174 sd_id128_t machine_id;
08984293 175 sd_id128_t boot_id; /* last writer */
cec736d2 176 sd_id128_t seqnum_id;
23b0b2b2 177 le64_t header_size;
4fd052ae 178 le64_t arena_size;
0962e09e 179 le64_t data_hash_table_offset;
4fd052ae 180 le64_t data_hash_table_size;
0962e09e 181 le64_t field_hash_table_offset;
4fd052ae
FC
182 le64_t field_hash_table_size;
183 le64_t tail_object_offset;
184 le64_t n_objects;
185 le64_t n_entries;
beec0085
LP
186 le64_t tail_entry_seqnum;
187 le64_t head_entry_seqnum;
4fd052ae
FC
188 le64_t entry_array_offset;
189 le64_t head_entry_realtime;
190 le64_t tail_entry_realtime;
191 le64_t tail_entry_monotonic;
dca6219e
LP
192 /* Added in 187 */
193 le64_t n_data;
194 le64_t n_fields;
d98cc1f2
LP
195 /* Added in 189 */
196 le64_t n_tags;
2dee23eb 197 le64_t n_entry_arrays;
fb9a24b6
LP
198
199 /* Size: 224 */
80701564 200} _packed_;
7560fffc 201
baed47c3 202#define FSS_HEADER_SIGNATURE ((char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
7560fffc 203
80701564 204struct FSSHeader {
7560fffc
LP
205 uint8_t signature[8]; /* "KSHHRHLP" */
206 le32_t compatible_flags;
207 le32_t incompatible_flags;
208 sd_id128_t machine_id;
209 sd_id128_t boot_id; /* last writer */
210 le64_t header_size;
baed47c3
LP
211 le64_t start_usec;
212 le64_t interval_usec;
213 le16_t fsprg_secpar;
7560fffc 214 le16_t reserved[3];
baed47c3 215 le64_t fsprg_state_size;
80701564 216} _packed_;