1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
6 This file is part of systemd.
8 Copyright 2011 Lennart Poettering
10 systemd is free software; you can redistribute it and/or modify it
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
13 (at your option) any later version.
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
18 Lesser General Public License for more details.
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 #include "sparse-endian.h"
26 #include <systemd/sd-id128.h>
31 * If you change this file you probably should also change its documentation:
33 * http://www.freedesktop.org/wiki/Software/systemd/journal-files
37 typedef struct Header Header;
39 typedef struct ObjectHeader ObjectHeader;
40 typedef union Object Object;
42 typedef struct DataObject DataObject;
43 typedef struct FieldObject FieldObject;
44 typedef struct EntryObject EntryObject;
45 typedef struct HashTableObject HashTableObject;
46 typedef struct EntryArrayObject EntryArrayObject;
47 typedef struct TagObject TagObject;
49 typedef struct EntryItem EntryItem;
50 typedef struct HashItem HashItem;
52 typedef struct FSSHeader FSSHeader;
60 OBJECT_DATA_HASH_TABLE,
61 OBJECT_FIELD_HASH_TABLE,
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;
94 le64_t next_hash_offset;
95 le64_t head_data_offset;
100 le64_t object_offset;
115 le64_t head_hash_offset;
116 le64_t tail_hash_offset;
119 struct HashTableObject {
124 struct EntryArrayObject {
126 le64_t next_entry_array_offset;
130 #define TAG_LENGTH (256/8)
136 uint8_t tag[TAG_LENGTH]; /* SHA-256 HMAC */
144 HashTableObject hash_table;
145 EntryArrayObject entry_array;
158 HEADER_INCOMPATIBLE_COMPRESSED = 1
162 HEADER_COMPATIBLE_SEALED = 1
165 #define HEADER_SIGNATURE ((char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
168 uint8_t signature[8]; /* "LPKSHHRH" */
169 le32_t compatible_flags;
170 le32_t incompatible_flags;
174 sd_id128_t machine_id;
175 sd_id128_t boot_id; /* last writer */
176 sd_id128_t seqnum_id;
179 le64_t data_hash_table_offset;
180 le64_t data_hash_table_size;
181 le64_t field_hash_table_offset;
182 le64_t field_hash_table_size;
183 le64_t tail_object_offset;
186 le64_t tail_entry_seqnum;
187 le64_t head_entry_seqnum;
188 le64_t entry_array_offset;
189 le64_t head_entry_realtime;
190 le64_t tail_entry_realtime;
191 le64_t tail_entry_monotonic;
197 le64_t n_entry_arrays;
202 #define FSS_HEADER_SIGNATURE ((char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
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 */
212 le64_t interval_usec;
215 le64_t fsprg_state_size;