]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/journal/journal-def.h
make-man-index.py: pretty-print HTML
[thirdparty/systemd.git] / src / journal / journal-def.h
CommitLineData
87d2c1ff
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#ifndef foojournaldefhfoo
4#define foojournaldefhfoo
5
6/***
7 This file is part of systemd.
8
9 Copyright 2011 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
87d2c1ff
LP
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 19 Lesser General Public License for more details.
87d2c1ff 20
5430f7f2 21 You should have received a copy of the GNU Lesser General Public License
87d2c1ff
LP
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
4fd052ae 25#include "sparse-endian.h"
87d2c1ff 26
81527be1
LP
27#include <systemd/sd-id128.h>
28
87d2c1ff 29#include "macro.h"
87d2c1ff
LP
30
31typedef struct Header Header;
8144056f 32
87d2c1ff
LP
33typedef struct ObjectHeader ObjectHeader;
34typedef union Object Object;
8144056f 35
87d2c1ff 36typedef struct DataObject DataObject;
de190aef 37typedef struct FieldObject FieldObject;
87d2c1ff
LP
38typedef struct EntryObject EntryObject;
39typedef struct HashTableObject HashTableObject;
de190aef 40typedef struct EntryArrayObject EntryArrayObject;
8144056f
LP
41typedef struct SignatureObject SignatureObject;
42
87d2c1ff
LP
43typedef struct EntryItem EntryItem;
44typedef struct HashItem HashItem;
45
46/* Object types */
47enum {
48 OBJECT_UNUSED,
49 OBJECT_DATA,
de190aef 50 OBJECT_FIELD,
87d2c1ff 51 OBJECT_ENTRY,
de190aef
LP
52 OBJECT_DATA_HASH_TABLE,
53 OBJECT_FIELD_HASH_TABLE,
54 OBJECT_ENTRY_ARRAY,
8144056f 55 OBJECT_SIGNATURE,
de190aef 56 _OBJECT_TYPE_MAX
87d2c1ff
LP
57};
58
807e17f0
LP
59/* Object flags */
60enum {
61 OBJECT_COMPRESSED = 1
62};
63
87d2c1ff
LP
64_packed_ struct ObjectHeader {
65 uint8_t type;
807e17f0
LP
66 uint8_t flags;
67 uint8_t reserved[6];
4fd052ae 68 le64_t size;
87d2c1ff
LP
69 uint8_t payload[];
70};
71
72_packed_ struct DataObject {
73 ObjectHeader object;
4fd052ae
FC
74 le64_t hash;
75 le64_t next_hash_offset;
76 le64_t next_field_offset;
77 le64_t entry_offset; /* the first array entry we store inline */
78 le64_t entry_array_offset;
79 le64_t n_entries;
de190aef
LP
80 uint8_t payload[];
81};
82
83_packed_ struct FieldObject {
84 ObjectHeader object;
4fd052ae
FC
85 le64_t hash;
86 le64_t next_hash_offset;
87 le64_t head_data_offset;
88 le64_t tail_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
8144056f
LP
123#define SIGNATURE_LENGTH 160
124
125_packed_ struct SignatureObject {
126 ObjectHeader object;
127 le64_t from;
128 uint8_t signature[SIGNATURE_LENGTH];
129};
130
87d2c1ff
LP
131union Object {
132 ObjectHeader object;
133 DataObject data;
de190aef 134 FieldObject field;
87d2c1ff
LP
135 EntryObject entry;
136 HashTableObject hash_table;
de190aef 137 EntryArrayObject entry_array;
8144056f 138 SignatureObject signature;
87d2c1ff
LP
139};
140
141enum {
142 STATE_OFFLINE,
143 STATE_ONLINE,
144 STATE_ARCHIVED
145};
146
807e17f0
LP
147/* Header flags */
148enum {
149 HEADER_INCOMPATIBLE_COMPRESSED = 1
150};
151
8144056f
LP
152enum {
153 HEADER_COMPATIBLE_SIGNED = 1
154};
155
87d2c1ff
LP
156_packed_ struct Header {
157 uint8_t signature[8]; /* "LPKSHHRH" */
158 uint32_t compatible_flags;
159 uint32_t incompatible_flags;
de190aef
LP
160 uint8_t state;
161 uint8_t reserved[7];
87d2c1ff 162 sd_id128_t file_id;
08984293
LP
163 sd_id128_t machine_id; /* last writer */
164 sd_id128_t boot_id; /* last writer */
cec736d2 165 sd_id128_t seqnum_id;
23b0b2b2 166 le64_t header_size;
4fd052ae
FC
167 le64_t arena_size;
168 le64_t data_hash_table_offset; /* for looking up data objects */
169 le64_t data_hash_table_size;
170 le64_t field_hash_table_offset; /* for looking up field objects */
171 le64_t field_hash_table_size;
172 le64_t tail_object_offset;
173 le64_t n_objects;
174 le64_t n_entries;
175 le64_t seqnum;
176 le64_t first_seqnum;
177 le64_t entry_array_offset;
178 le64_t head_entry_realtime;
179 le64_t tail_entry_realtime;
180 le64_t tail_entry_monotonic;
87d2c1ff
LP
181};
182
183#endif