1 /* SPDX-License-Identifier: LGPL-2.1+ */
9 typedef struct Server Server
;
11 #include "conf-parser.h"
13 #include "journal-file.h"
14 #include "journald-context.h"
15 #include "journald-rate-limit.h"
16 #include "journald-stream.h"
20 typedef enum Storage
{
29 typedef enum SplitMode
{
31 SPLIT_LOGIN
, /* deprecated */
37 typedef struct JournalCompressOptions
{
39 uint64_t threshold_bytes
;
40 } JournalCompressOptions
;
42 typedef struct JournalStorageSpace
{
48 uint64_t vfs_used
; /* space used by journal files */
49 uint64_t vfs_available
;
50 } JournalStorageSpace
;
52 typedef struct JournalStorage
{
56 JournalMetrics metrics
;
57 JournalStorageSpace space
;
71 sd_event_source
*syslog_event_source
;
72 sd_event_source
*native_event_source
;
73 sd_event_source
*stdout_event_source
;
74 sd_event_source
*dev_kmsg_event_source
;
75 sd_event_source
*audit_event_source
;
76 sd_event_source
*sync_event_source
;
77 sd_event_source
*sigusr1_event_source
;
78 sd_event_source
*sigusr2_event_source
;
79 sd_event_source
*sigterm_event_source
;
80 sd_event_source
*sigint_event_source
;
81 sd_event_source
*sigrtmin1_event_source
;
82 sd_event_source
*hostname_event_source
;
83 sd_event_source
*notify_event_source
;
84 sd_event_source
*watchdog_event_source
;
86 JournalFile
*runtime_journal
;
87 JournalFile
*system_journal
;
88 OrderedHashmap
*user_journals
;
95 JournalRateLimit
*rate_limit
;
96 usec_t sync_interval_usec
;
97 usec_t rate_limit_interval
;
98 unsigned rate_limit_burst
;
100 JournalStorage runtime_storage
;
101 JournalStorage system_storage
;
103 JournalCompressOptions compress
;
107 bool forward_to_kmsg
;
108 bool forward_to_syslog
;
109 bool forward_to_console
;
110 bool forward_to_wall
;
112 unsigned n_forward_syslog_missed
;
113 usec_t last_warn_forward_syslog_missed
;
115 uint64_t var_available_timestamp
;
117 usec_t max_retention_usec
;
118 usec_t max_file_usec
;
119 usec_t oldest_file_usec
;
121 LIST_HEAD(StdoutStream
, stdout_streams
);
122 LIST_HEAD(StdoutStream
, stdout_streams_notify_queue
);
123 unsigned n_stdout_streams
;
128 int max_level_syslog
;
130 int max_level_console
;
134 SplitMode split_mode
;
138 Set
*deferred_closes
;
142 uint64_t *kernel_seqnum
;
143 bool dev_kmsg_readable
:1;
145 bool send_watchdog
:1;
146 bool sent_notify_ready
:1;
147 bool sync_scheduled
:1;
149 char machine_id_field
[sizeof("_MACHINE_ID=") + 32];
150 char boot_id_field
[sizeof("_BOOT_ID=") + 32];
151 char *hostname_field
;
153 /* Cached cgroup root, so that we don't have to query that all the time */
156 usec_t watchdog_usec
;
158 usec_t last_realtime_clock
;
162 /* Caching of client metadata */
163 Hashmap
*client_contexts
;
164 Prioq
*client_contexts_lru
;
166 ClientContext
*my_context
; /* the context of journald itself */
167 ClientContext
*pid1_context
; /* the context of PID 1 */
170 #define SERVER_MACHINE_ID(s) ((s)->machine_id_field + STRLEN("_MACHINE_ID="))
172 /* Extra fields for any log messages */
173 #define N_IOVEC_META_FIELDS 22
175 /* Extra fields for log messages that contain OBJECT_PID= (i.e. log about another process) */
176 #define N_IOVEC_OBJECT_FIELDS 18
178 /* Maximum number of fields we'll add in for driver (i.e. internal) messages */
179 #define N_IOVEC_PAYLOAD_FIELDS 16
181 /* kmsg: Maximum number of extra fields we'll import from the kernel's /dev/kmsg */
182 #define N_IOVEC_KERNEL_FIELDS 64
184 /* kmsg: Maximum number of extra fields we'll import from udev's devices */
185 #define N_IOVEC_UDEV_FIELDS 32
187 void server_dispatch_message(Server
*s
, struct iovec
*iovec
, size_t n
, size_t m
, ClientContext
*c
, const struct timeval
*tv
, int priority
, pid_t object_pid
);
188 void server_driver_message(Server
*s
, pid_t object_pid
, const char *message_id
, const char *format
, ...) _sentinel_
_printf_(4,0);
190 /* gperf lookup function */
191 const struct ConfigPerfItem
* journald_gperf_lookup(const char *key
, GPERF_LEN_TYPE length
);
193 CONFIG_PARSER_PROTOTYPE(config_parse_storage
);
194 CONFIG_PARSER_PROTOTYPE(config_parse_line_max
);
195 CONFIG_PARSER_PROTOTYPE(config_parse_compress
);
197 const char *storage_to_string(Storage s
) _const_
;
198 Storage
storage_from_string(const char *s
) _pure_
;
200 CONFIG_PARSER_PROTOTYPE(config_parse_split_mode
);
202 const char *split_mode_to_string(SplitMode s
) _const_
;
203 SplitMode
split_mode_from_string(const char *s
) _pure_
;
205 int server_init(Server
*s
);
206 void server_done(Server
*s
);
207 void server_sync(Server
*s
);
208 int server_vacuum(Server
*s
, bool verbose
);
209 void server_rotate(Server
*s
);
210 int server_schedule_sync(Server
*s
, int priority
);
211 int server_flush_to_var(Server
*s
, bool require_flag_file
);
212 void server_maybe_append_tags(Server
*s
);
213 int server_process_datagram(sd_event_source
*es
, int fd
, uint32_t revents
, void *userdata
);
214 void server_space_usage_message(Server
*s
, JournalStorage
*storage
);