root/luci2/upsd/core.h @ 5714

Revision 5714, 2.4 KB (checked in by Cyrus, 3 years ago)

ups.d: Embedded dependency based init system

Line 
1#ifndef UPSDCORE_H_
2#define UPSDCORE_H_
3
4#include <time.h>
5#include <sys/types.h>
6#include <stdint.h>
7#include "upsd.h"
8#include "upsd_config.h"
9
10#if __GNUC__ >= 4
11    #define UPSD_LOCAL  __attribute__ ((visibility("hidden")))
12#else
13    #define UPSD_LOCAL
14#endif
15
16#define UPSD_LENGTHOF(array) (sizeof(array) / sizeof(*array))
17#define UPSD_MACRO_STRING(x) _UPSD_MACRO_STRING(x)
18#define _UPSD_MACRO_STRING(x) #x
19
20
21typedef struct upsd_listener upsd_listener_t;
22typedef struct upsd_event upsd_event_t;
23typedef struct upsd_inst upsd_inst_t;
24typedef struct upsd_initlist upsd_initlist_t;
25typedef struct upsd_handler upsd_handler_t;
26typedef union upsd_handle upsd_handle_t;
27
28#define UPSD_ACTION_INTERNAL_CLEAN  ((upsd_action_t) -1)
29
30
31/* Status handle for asynchronous init actions */
32union upsd_handle {
33    pid_t pid;
34    int descriptor;
35    void *pointer;
36};
37
38/* Dynamic state part of a service, changing throughout commands */
39struct upsd_handler {
40    uint16_t flags;
41    uint16_t awaiting;
42    int16_t status;
43    time_t timeout;
44    upsd_handle_t handle;
45};
46
47/* Service dataset */
48struct upsd_init {
49    uint16_t flags;
50    void *identifier;
51    char **provides;
52    upsd_worker_t worker;
53    upsd_handler_t hndl;
54};
55
56/* Event listener instance */
57struct upsd_listener {
58    uint16_t flags;
59    upsd_action_t action;
60    char *emitter;
61    char *receiver;
62};
63
64/* Event dataset */
65struct upsd_event {
66    uint16_t receiving;
67    uint16_t emitting;
68    upsd_listener_t **receivers;
69    upsd_listener_t **emitters;
70    upsd_init_t *designated;
71};
72
73/* Service list */
74struct upsd_initlist {
75    upsd_init_t *init;
76    upsd_initlist_t *next;
77};
78
79/* Command action instance */
80struct upsd_inst {
81    uint16_t flags;
82    uint16_t remaining;
83    uint16_t active;
84    uint16_t lasterror;
85    time_t time;
86    upsd_initlist_t *actions;
87};
88
89
90#include "cbi2/hmap.h"
91
92struct upsd_state {
93    cbi2_hmap_t *events;
94    upsd_report_t *report;
95    size_t reportidx;
96    upsd_inst_t inst;
97};
98
99
100#define UPSD_INIT_LEGACY            0x01
101#define UPSD_INIT_INTERNAL          0x02
102
103#if UPSD_LOGGING >= 4
104    #define UPSD_LOG_INFO(...)      syslog(LOG_INFO, __VA_ARGS__)
105#else
106    #define UPSD_LOG_INFO(...)
107#endif
108
109#if UPSD_LOGGING >= 3
110    #define UPSD_LOG_NOTE(...)      syslog(LOG_NOTICE, __VA_ARGS__)
111#else
112    #define UPSD_LOG_NOTE(...)
113#endif
114
115#if UPSD_LOGGING >= 2
116    #define UPSD_LOG_WARN(...)      syslog(LOG_WARNING, __VA_ARGS__)
117#else
118    #define UPSD_LOG_WARN(...)
119#endif
120
121#if UPSD_LOGGING >= 1
122    #define UPSD_LOG_ERROR(...)     syslog(LOG_ERR, __VA_ARGS__)
123    #include <syslog.h>
124#else
125    #define UPSD_LOG_ERROR(...)
126#endif
127
128#endif /* UPSDCORE_H_ */
Note: See TracBrowser for help on using the browser.