multipathd: issue systemd READY after initial configuration
[multipath-tools/.git] / multipathd / cli.h
1 #include <stdint.h>
2
3 enum {
4         __LIST,
5         __ADD,
6         __DEL,
7         __SWITCH,
8         __SUSPEND,
9         __RESUME,
10         __REINSTATE,
11         __FAIL,
12         __RESIZE,
13         __RESET,
14         __RELOAD,
15         __FORCEQ,
16         __DISABLEQ,
17         __RESTOREQ,
18         __PATHS,
19         __MAPS,
20         __PATH,
21         __MAP,
22         __GROUP,
23         __RECONFIGURE,
24         __DAEMON,
25         __STATUS,
26         __STATS,
27         __TOPOLOGY,
28         __CONFIG,
29         __BLACKLIST,
30         __DEVICES,
31         __RAW,
32         __WILDCARDS,
33         __QUIT,
34         __SHUTDOWN,
35         __GETPRSTATUS,
36         __SETPRSTATUS,
37         __UNSETPRSTATUS,
38         __FMT,
39         __JSON,
40 };
41
42 #define LIST            (1 << __LIST)
43 #define ADD             (1 << __ADD)
44 #define DEL             (1 << __DEL)
45 #define SWITCH          (1 << __SWITCH)
46 #define SUSPEND         (1 << __SUSPEND)
47 #define RESUME          (1 << __RESUME)
48 #define REINSTATE       (1 << __REINSTATE)
49 #define FAIL            (1 << __FAIL)
50 #define RESIZE          (1 << __RESIZE)
51 #define RESET           (1 << __RESET)
52 #define RELOAD          (1 << __RELOAD)
53 #define FORCEQ          (1 << __FORCEQ)
54 #define DISABLEQ        (1 << __DISABLEQ)
55 #define RESTOREQ        (1 << __RESTOREQ)
56 #define PATHS           (1 << __PATHS)
57 #define MAPS            (1 << __MAPS)
58 #define PATH            (1 << __PATH)
59 #define MAP             (1 << __MAP)
60 #define GROUP           (1 << __GROUP)
61 #define RECONFIGURE     (1 << __RECONFIGURE)
62 #define DAEMON          (1 << __DAEMON)
63 #define STATUS          (1 << __STATUS)
64 #define STATS           (1 << __STATS)
65 #define TOPOLOGY        (1 << __TOPOLOGY)
66 #define CONFIG          (1 << __CONFIG)
67 #define BLACKLIST       (1 << __BLACKLIST)
68 #define DEVICES         (1 << __DEVICES)
69 #define RAW             (1 << __RAW)
70 #define COUNT           (1 << __COUNT)
71 #define WILDCARDS       (1 << __WILDCARDS)
72 #define QUIT            (1 << __QUIT)
73 #define SHUTDOWN        (1 << __SHUTDOWN)
74 #define GETPRSTATUS     (1ULL << __GETPRSTATUS)
75 #define SETPRSTATUS     (1ULL << __SETPRSTATUS)
76 #define UNSETPRSTATUS   (1ULL << __UNSETPRSTATUS)
77 #define FMT             (1ULL << __FMT)
78 #define JSON            (1ULL << __JSON)
79
80 #define INITIAL_REPLY_LEN       1200
81
82 #define REALLOC_REPLY(r, a, m)                                  \
83         do {                                                    \
84                 if ((a)) {                                      \
85                         char *tmp = (r);                        \
86                         (r) = REALLOC((r), (m) * 2);            \
87                         if ((r)) {                              \
88                                 memset((r) + (m), 0, (m));      \
89                                 (m) *= 2;                       \
90                         }                                       \
91                         else                                    \
92                                 free(tmp);                      \
93                 }                                               \
94         } while (0)
95
96 struct key {
97         char * str;
98         char * param;
99         uint64_t code;
100         int has_param;
101 };
102
103 struct handler {
104         uint64_t fingerprint;
105         int locked;
106         int (*fn)(void *, char **, int *, void *);
107 };
108
109 int alloc_handlers (void);
110 int add_handler (uint64_t fp, int (*fn)(void *, char **, int *, void *));
111 int set_handler_callback (uint64_t fp, int (*fn)(void *, char **, int *, void *));
112 int set_unlocked_handler_callback (uint64_t fp, int (*fn)(void *, char **, int *, void *));
113 int parse_cmd (char * cmd, char ** reply, int * len, void *, int);
114 int load_keys (void);
115 char * get_keyparam (vector v, uint64_t code);
116 void free_keys (vector vec);
117 void free_handlers (void);
118 int cli_init (void);
119 void cli_exit(void);
120 char * key_generator (const char * str, int state);