]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/core/timer.h
Merge pull request #8417 from brauner/2018-03-09/add_bind_mount_fallback_to_private_d...
[thirdparty/systemd.git] / src / core / timer.h
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2 #pragma once
3
4 /***
5 This file is part of systemd.
6
7 Copyright 2010 Lennart Poettering
8 ***/
9
10 typedef struct Timer Timer;
11
12 #include "calendarspec.h"
13
14 typedef enum TimerBase {
15 TIMER_ACTIVE,
16 TIMER_BOOT,
17 TIMER_STARTUP,
18 TIMER_UNIT_ACTIVE,
19 TIMER_UNIT_INACTIVE,
20 TIMER_CALENDAR,
21 _TIMER_BASE_MAX,
22 _TIMER_BASE_INVALID = -1
23 } TimerBase;
24
25 typedef struct TimerValue {
26 TimerBase base;
27 bool disabled;
28
29 usec_t value; /* only for monotonic events */
30 CalendarSpec *calendar_spec; /* only for calendar events */
31 usec_t next_elapse;
32
33 LIST_FIELDS(struct TimerValue, value);
34 } TimerValue;
35
36 typedef enum TimerResult {
37 TIMER_SUCCESS,
38 TIMER_FAILURE_RESOURCES,
39 TIMER_FAILURE_START_LIMIT_HIT,
40 _TIMER_RESULT_MAX,
41 _TIMER_RESULT_INVALID = -1
42 } TimerResult;
43
44 struct Timer {
45 Unit meta;
46
47 usec_t accuracy_usec;
48 usec_t random_usec;
49
50 LIST_HEAD(TimerValue, values);
51 usec_t next_elapse_realtime;
52 usec_t next_elapse_monotonic_or_boottime;
53 dual_timestamp last_trigger;
54
55 TimerState state, deserialized_state;
56
57 sd_event_source *monotonic_event_source;
58 sd_event_source *realtime_event_source;
59
60 TimerResult result;
61
62 bool persistent;
63 bool wake_system;
64 bool remain_after_elapse;
65
66 char *stamp_path;
67 };
68
69 #define TIMER_MONOTONIC_CLOCK(t) ((t)->wake_system && clock_boottime_supported() ? CLOCK_BOOTTIME_ALARM : CLOCK_MONOTONIC)
70
71 void timer_free_values(Timer *t);
72
73 extern const UnitVTable timer_vtable;
74
75 const char *timer_base_to_string(TimerBase i) _const_;
76 TimerBase timer_base_from_string(const char *s) _pure_;
77
78 const char* timer_result_to_string(TimerResult i) _const_;
79 TimerResult timer_result_from_string(const char *s) _pure_;