]>
Commit | Line | Data |
---|---|---|
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 | |
31 | typedef struct Header Header; | |
32 | typedef struct ObjectHeader ObjectHeader; | |
33 | typedef union Object Object; | |
34 | typedef struct DataObject DataObject; | |
de190aef | 35 | typedef struct FieldObject FieldObject; |
87d2c1ff LP |
36 | typedef struct EntryObject EntryObject; |
37 | typedef struct HashTableObject HashTableObject; | |
de190aef | 38 | typedef struct EntryArrayObject EntryArrayObject; |
87d2c1ff LP |
39 | typedef struct EntryItem EntryItem; |
40 | typedef struct HashItem HashItem; | |
41 | ||
42 | /* Object types */ | |
43 | enum { | |
44 | OBJECT_UNUSED, | |
45 | OBJECT_DATA, | |
de190aef | 46 | OBJECT_FIELD, |
87d2c1ff | 47 | OBJECT_ENTRY, |
de190aef LP |
48 | OBJECT_DATA_HASH_TABLE, |
49 | OBJECT_FIELD_HASH_TABLE, | |
50 | OBJECT_ENTRY_ARRAY, | |
51 | _OBJECT_TYPE_MAX | |
87d2c1ff LP |
52 | }; |
53 | ||
807e17f0 LP |
54 | /* Object flags */ |
55 | enum { | |
56 | OBJECT_COMPRESSED = 1 | |
57 | }; | |
58 | ||
87d2c1ff LP |
59 | _packed_ struct ObjectHeader { |
60 | uint8_t type; | |
807e17f0 LP |
61 | uint8_t flags; |
62 | uint8_t reserved[6]; | |
4fd052ae | 63 | le64_t size; |
87d2c1ff LP |
64 | uint8_t payload[]; |
65 | }; | |
66 | ||
67 | _packed_ struct DataObject { | |
68 | ObjectHeader object; | |
4fd052ae FC |
69 | le64_t hash; |
70 | le64_t next_hash_offset; | |
71 | le64_t next_field_offset; | |
72 | le64_t entry_offset; /* the first array entry we store inline */ | |
73 | le64_t entry_array_offset; | |
74 | le64_t n_entries; | |
de190aef LP |
75 | uint8_t payload[]; |
76 | }; | |
77 | ||
78 | _packed_ struct FieldObject { | |
79 | ObjectHeader object; | |
4fd052ae FC |
80 | le64_t hash; |
81 | le64_t next_hash_offset; | |
82 | le64_t head_data_offset; | |
83 | le64_t tail_data_offset; | |
87d2c1ff LP |
84 | uint8_t payload[]; |
85 | }; | |
86 | ||
87 | _packed_ struct EntryItem { | |
4fd052ae FC |
88 | le64_t object_offset; |
89 | le64_t hash; | |
87d2c1ff LP |
90 | }; |
91 | ||
92 | _packed_ struct EntryObject { | |
93 | ObjectHeader object; | |
4fd052ae FC |
94 | le64_t seqnum; |
95 | le64_t realtime; | |
96 | le64_t monotonic; | |
cec736d2 | 97 | sd_id128_t boot_id; |
4fd052ae | 98 | le64_t xor_hash; |
87d2c1ff LP |
99 | EntryItem items[]; |
100 | }; | |
101 | ||
102 | _packed_ struct HashItem { | |
4fd052ae FC |
103 | le64_t head_hash_offset; |
104 | le64_t tail_hash_offset; | |
87d2c1ff LP |
105 | }; |
106 | ||
107 | _packed_ struct HashTableObject { | |
108 | ObjectHeader object; | |
de190aef | 109 | HashItem items[]; |
87d2c1ff LP |
110 | }; |
111 | ||
de190aef | 112 | _packed_ struct EntryArrayObject { |
87d2c1ff | 113 | ObjectHeader object; |
4fd052ae FC |
114 | le64_t next_entry_array_offset; |
115 | le64_t items[]; | |
87d2c1ff LP |
116 | }; |
117 | ||
118 | union Object { | |
119 | ObjectHeader object; | |
120 | DataObject data; | |
de190aef | 121 | FieldObject field; |
87d2c1ff LP |
122 | EntryObject entry; |
123 | HashTableObject hash_table; | |
de190aef | 124 | EntryArrayObject entry_array; |
87d2c1ff LP |
125 | }; |
126 | ||
127 | enum { | |
128 | STATE_OFFLINE, | |
129 | STATE_ONLINE, | |
130 | STATE_ARCHIVED | |
131 | }; | |
132 | ||
807e17f0 LP |
133 | /* Header flags */ |
134 | enum { | |
135 | HEADER_INCOMPATIBLE_COMPRESSED = 1 | |
136 | }; | |
137 | ||
87d2c1ff LP |
138 | _packed_ struct Header { |
139 | uint8_t signature[8]; /* "LPKSHHRH" */ | |
140 | uint32_t compatible_flags; | |
141 | uint32_t incompatible_flags; | |
de190aef LP |
142 | uint8_t state; |
143 | uint8_t reserved[7]; | |
87d2c1ff LP |
144 | sd_id128_t file_id; |
145 | sd_id128_t machine_id; | |
146 | sd_id128_t boot_id; | |
cec736d2 | 147 | sd_id128_t seqnum_id; |
4fd052ae FC |
148 | le64_t arena_offset; |
149 | le64_t arena_size; | |
150 | le64_t data_hash_table_offset; /* for looking up data objects */ | |
151 | le64_t data_hash_table_size; | |
152 | le64_t field_hash_table_offset; /* for looking up field objects */ | |
153 | le64_t field_hash_table_size; | |
154 | le64_t tail_object_offset; | |
155 | le64_t n_objects; | |
156 | le64_t n_entries; | |
157 | le64_t seqnum; | |
158 | le64_t first_seqnum; | |
159 | le64_t entry_array_offset; | |
160 | le64_t head_entry_realtime; | |
161 | le64_t tail_entry_realtime; | |
162 | le64_t tail_entry_monotonic; | |
87d2c1ff LP |
163 | }; |
164 | ||
165 | #endif |